     1                                  ; ****************************************************************************
     2                                  ; vgaplay2.s - TRDOS 386 (TRDOS v2.0.9) WAV PLAYER - VESA VBE Video Mode 101h
     3                                  ; ----------------------------------------------------------------------------
     4                                  ; VGAPLAY2.PRG ! AC'97 (ICH) .WAV PLAYER program by Erdogan TAN
     5                                  ;
     6                                  ; 27/12/2024				- play music from multiple wav files -
     7                                  ;
     8                                  ; [ Last Modification: 05/02/2025 ]
     9                                  ;
    10                                  ; Modified from VGAPLAY.PRG .wav player program by Erdogan Tan, 26/12/2024
    11                                  ;
    12                                  ; ****************************************************************************
    13                                  ; nasm vgaplay2.s -l vgaplay2.txt -o VGAPLAY2.PRG -Z error.txt
    14                                  
    15                                  ; 27/12/2024
    16                                  ; vgaplay2.s : DMA buffer tracking (instead of user's audio buffer)
    17                                  
    18                                  ; vgaplay.s (26/12/2024) - play music from multiple wav files -
    19                                  ; dplayvga.s (25/12/2024) - play music from single wav file -
    20                                  ; ac97play.s (18/12/2024) - play music from multiple wav files -
    21                                  
    22                                  ; 07/12/2024 - playwav9.s - interrupt (srb) + tuneloop version
    23                                  ; ------------------------------------------------------------
    24                                  ; INTERRUPT (SRB) + TUNELOOP version ; 24/11/2024 (PLAYWAV9.ASM)
    25                                  ;	(running in DOSBOX, VIRTUALBOX, QEMU is ok)
    26                                  ; Signal Response Byte = message/signal to user about an event/interrupt
    27                                  ;	    as requested (TuneLoop procedure continuously checks this SRB)
    28                                  ; (TRDOS 386 v2 feature is used here as very simple interrupt handler output)
    29                                  
    30                                  ; ------------------------------------------------------------
    31                                  
    32                                  ; 30/11/2024
    33                                  ; 20/08/2024 ; TRDOS 386 v2.0.9
    34                                  ; 29/04/2016
    35                                  _ver 	equ 0
    36                                  _exit 	equ 1
    37                                  _fork 	equ 2
    38                                  _read 	equ 3
    39                                  _write	equ 4
    40                                  _open	equ 5
    41                                  _close 	equ 6
    42                                  _wait 	equ 7
    43                                  _creat 	equ 8
    44                                  _link 	equ 9
    45                                  _unlink	equ 10
    46                                  _exec	equ 11
    47                                  _chdir	equ 12
    48                                  _time 	equ 13
    49                                  _mkdir 	equ 14
    50                                  _chmod	equ 15
    51                                  _chown	equ 16
    52                                  _break	equ 17
    53                                  _stat	equ 18
    54                                  _seek	equ 19
    55                                  _tell 	equ 20
    56                                  _mount	equ 21
    57                                  _umount	equ 22
    58                                  _setuid	equ 23
    59                                  _getuid	equ 24
    60                                  _stime	equ 25
    61                                  _quit	equ 26
    62                                  _intr	equ 27
    63                                  _fstat	equ 28
    64                                  _emt 	equ 29
    65                                  _mdate 	equ 30
    66                                  _video 	equ 31
    67                                  _audio	equ 32
    68                                  _timer	equ 33
    69                                  _sleep	equ 34
    70                                  _msg    equ 35
    71                                  _geterr	equ 36
    72                                  _fpsave	equ 37
    73                                  _pri	equ 38
    74                                  _rele	equ 39
    75                                  _fff	equ 40
    76                                  _fnf	equ 41
    77                                  _alloc	equ 42
    78                                  _dalloc equ 43
    79                                  _calbac equ 44
    80                                  _dma	equ 45
    81                                  _stdio  equ 46
    82                                  
    83                                  ; ------------------------------------------------------------
    84                                  
    85                                  %macro sys 1-4
    86                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)
    87                                      ; 03/09/2015
    88                                      ; 13/04/2015
    89                                      ; Retro UNIX 386 v1 system call.
    90                                      %if %0 >= 2
    91                                          mov ebx, %2
    92                                          %if %0 >= 3
    93                                              mov ecx, %3
    94                                              %if %0 = 4
    95                                                 mov edx, %4
    96                                              %endif
    97                                          %endif
    98                                      %endif
    99                                      mov eax, %1
   100                                      ;int 30h
   101                                      int 40h ; TRDOS 386 (TRDOS v2.0)
   102                                  %endmacro
   103                                  
   104                                  ; Retro UNIX 386 v1 system call format:
   105                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
   106                                  
   107                                  ; ------------------------------------------------------------
   108                                  
   109                                  ; player internal variables and other equates.
   110                                  BUFFERSIZE	equ 65536
   111                                  ENDOFFILE	equ 1		; flag for knowing end of file
   112                                  
   113                                  ; ------------------------------------------------------------
   114                                  
   115                                  [BITS 32] ; 32-bit intructions
   116                                  
   117                                  [ORG 0]
   118                                  
   119                                  START_CODE:
   120                                  	; Prints the Credits Text.
   121                                  	sys	_msg, Credits, 255, 0Bh
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000000 BB[9C2B0000]        <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00000005 B9FF000000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 0000000A BA0B000000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 0000000F B823000000          <1>  mov eax, %1
   100                              <1> 
   101 00000014 CD40                <1>  int 40h
   122                                  
   123                                  	; clear bss
   124 00000016 BF[8C760000]            	mov	edi, bss_start
   125 0000001B B9B5020000              	mov	ecx, (bss_end - bss_start)/4
   126 00000020 31C0                    	xor	eax, eax
   127 00000022 F3AB                    	rep	stosd
   128                                  
   129                                  ; -------------------------------------------------------------
   130                                  
   131                                  	; 21/12/2024
   132                                  	; Detect (& Enable) AC'97 Audio Device
   133 00000024 E8F3080000              	call	DetectAC97
   134 00000029 731B                    	jnc	short ac97_hardware_ready
   135                                  
   136                                  	; 30/11/2024
   137                                  	; 30/05/2024
   138                                  _dev_not_ready:
   139                                  	; couldn't find the audio device!
   140                                  	sys	_msg, noDevMsg, 255, 0Fh
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 0000002B BB[5A2C0000]        <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00000030 B9FF000000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00000035 BA0F000000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 0000003A B823000000          <1>  mov eax, %1
   100                              <1> 
   101 0000003F CD40                <1>  int 40h
   141 00000041 E9E6050000                      jmp     Exit
   142                                  
   143                                  ac97_hardware_ready:
   144 00000046 E8790A0000              	call	write_audio_dev_info
   145                                  
   146                                  ; -------------------------------------------------------------
   147                                  
   148                                  	; 21/12/2024
   149                                  	;;;
   150                                  	; Read (copy) 8x14 system fonts
   151 0000004B BE[34430000]            	mov	esi, fontbuff1
   152                                  	sys	_video, 0C03h, 256, 0
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000050 BB030C0000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00000055 B900010000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 0000005A BA00000000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 0000005F B81F000000          <1>  mov eax, %1
   100                              <1> 
   101 00000064 CD40                <1>  int 40h
   153                                  
   154                                  	; convert 8x14 fonts to 8x16 fonts
   155                                  	; by inserting 2 empty rows to each characters
   156                                  	;mov	esi, fontbuff1
   157 00000066 BF[34510000]            	mov	edi, fontbuff2
   158                                  	; 18/02/2021
   159                                  	;mov	cx, 256
   160                                  fontconvert:
   161 0000006B 51                      	push	ecx
   162 0000006C 66B90E00                	mov	cx, 14
   163 00000070 F3A4                    	rep	movsb
   164 00000072 28C0                    	sub	al, al
   165 00000074 AA                      	stosb
   166 00000075 AA                      	stosb
   167 00000076 59                      	pop	ecx
   168 00000077 E2F2                    	loop	fontconvert
   169                                  	;;;
   170                                  
   171                                  ; ------------------------------------------------------------- 
   172                                  
   173                                  	; 21/12/2024
   174                                  	; Set Video Mode to 101h ; 640x480, 256 colors
   175                                  	sys	_video, 08FFh, 101h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000079 BBFF080000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000007E B901010000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000083 B81F000000          <1>  mov eax, %1
   100                              <1> 
   101 00000088 CD40                <1>  int 40h
   176 0000008A 09C0                    	or	eax, eax
   177 0000008C 0F8495050000            	jz	terminate    ; nothing to do				
   178                                  	;jz	trdos386_err ; write (OS) error msg and exit
   179                                  
   180                                  set_vesa_mode_101h_ok:
   181                                  	; linear frame buffer access
   182                                  	sys	_video, 06FFh
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000092 BBFF060000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000097 B81F000000          <1>  mov eax, %1
   100                              <1> 
   101 0000009C CD40                <1>  int 40h
   183 0000009E 21C0                    	and	eax, eax
   184 000000A0 0F84CC050000            	jz	error_exit ; set text mode and write err msg
   185 000000A6 A3[7C760000]            	mov	[LFB_ADDR], eax
   186                                  
   187                                  ; -------------------------------------------------------------
   188                                  
   189                                  	; 25/12/2024
   190                                  	; 28/11/2024
   191                                  Player_InitalizePSP:
   192                                  	; 30/11/2024
   193                                  	; (TRDOS 386 -Retro UNIX 386- argument transfer method)
   194                                  	; (stack: argc,argv0addr,argv1addr,argv2addr ..
   195                                  	;			.. argv0text, argv1text ..) 
   196                                  	; ---- argc, argv[] ----
   197 000000AB 89E6                    	mov	esi, esp
   198 000000AD AD                      	lodsd
   199 000000AE 83F802                  	cmp	eax, 2 ; two arguments 
   200                                  		; (program file name & mod file name)
   201 000000B1 0F827E050000            	jb	pmsg_usage ; nothing to do
   202                                  	;mov	[argc], al
   203 000000B7 C1E002                  	shl	eax, 2 ; *4
   204 000000BA 01E0                    	add	eax, esp
   205                                  	; eax = last argument's address pointer
   206 000000BC A3[DC800000]            	mov	[argvl], eax ; last wav file (argument)
   207 000000C1 8935[D4800000]          	mov	[argv], esi ; current argument (PRG file name)
   208 000000C7 AD                      	lodsd	; skip program (PRG) file name
   209 000000C8 8935[D8800000]          	mov	[argvf], esi ; 1st wav file (argument)
   210                                  
   211                                  	; 25/12/2024
   212                                  Player_ParseParameters:
   213                                  	; 30/11/2024
   214                                  	; 29/11/2024
   215                                  	; 18/12/2024
   216                                  	;mov	edx, wav_file_name
   217                                  	
   218                                  	; 26/12/2024
   219                                  	;cmp	byte [IsInSplash], 0
   220                                  	;jna	short check_p_command
   221                                  
   222 000000CE BA[0E430000]            	mov	edx, SplashFileName
   223 000000D3 EB3E                    	jmp	short _1
   224                                  
   225                                  	; 25/12/2024
   226                                  check_p_command:
   227                                  	; 07/12/2024
   228 000000D5 8B35[D4800000]          	mov	esi, [argv]
   229                                  	;
   230 000000DB 803D[9C800000]50          	cmp	byte [command], 'P'
   231 000000E2 7410                    	je	short Player_ParsePreviousParameter
   232                                      
   233                                  	; 07/12/2024
   234                                  	; 30/11/2024
   235                                  	;mov	esi, [argv] ; current argument (wav file) ptr
   236 000000E4 83C604                  	add	esi, 4
   237 000000E7 3B35[DC800000]          	cmp	esi, [argvl] ; last argument (wav file) ptr
   238 000000ED 7610                    	jna	short Player_ParseNextParameter
   239                                  jmp_Player_Quit:
   240 000000EF E97C050000              	jmp	Player_Quit
   241                                  
   242                                  Player_ParsePreviousParameter:
   243                                  	; 29/11/2024
   244                                  	;mov	byte [command], 0
   245                                  	; 30/11/2024
   246                                  	;mov	esi, [argv] ; 07/12/2024	
   247 000000F4 3B35[D8800000]          	cmp	esi, [argvf] ; first argument (wav file) ptr
   248 000000FA 7603                    	jna	short Player_ParseNextParameter
   249 000000FC 83EE04                  	sub	esi, 4
   250                                  Player_ParseNextParameter:
   251                                  	; 30/11/2024
   252 000000FF 8935[D4800000]          	mov	[argv], esi  ; set as current argument
   253                                  	; 01/12/2024
   254 00000105 8B36                    	mov	esi, [esi]
   255                                  	; 07/12/2024
   256                                  	;mov	ecx, esi
   257                                  	;mov	esi, [ecx]
   258                                  
   259                                  	; 29/11/2024
   260 00000107 E84D000000              	call	GetFileName
   261                                  	;jcxz	jmp_Player_Quit
   262 0000010C E3E1                    	jecxz	jmp_Player_Quit ; 30/11/2024
   263                                  
   264                                  	; 30/11/2024
   265                                  	; 28/11/2024
   266 0000010E BA[E0800000]            	mov	edx, wav_file_name
   267                                  	;;;
   268                                  _1:
   269                                  
   270                                  ; open the file
   271                                          ; open existing file
   272                                  	; 28/11/2024
   273                                  	;mov	edx, wav_file_name
   274 00000113 E856080000                      call	openFile ; no error? ok.
   275 00000118 0F8383000000                    jnc	getwavparms	; 14/11/2024
   276                                  
   277                                  	; 28/11/2024
   278 0000011E 803D[0D430000]00        	cmp	byte [IsInSplash], 0
   279 00000125 0F8799000000            	ja	Player_SplashScreen
   280                                  
   281                                  	; 29/11/2024
   282 0000012B 803D[9D800000]00        	cmp	byte [filecount], 0
   283 00000132 77A1                    	ja	short check_p_command
   284                                  
   285                                  	; 25/12/2024
   286                                  	; 21/12/2024
   287 00000134 E8D6050000              	call	set_text_mode
   288                                  	; file not found!
   289                                  	; 30/11/2024
   290                                  	sys	_msg, noFileErrMsg, 255, 0Ch
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000139 BB[852C0000]        <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000013E B9FF000000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00000143 BA0C000000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000148 B823000000          <1>  mov eax, %1
   100                              <1> 
   101 0000014D CD40                <1>  int 40h
   291 0000014F E9D8040000                      jmp     Exit
   292                                  
   293                                  _exit_:
   294 00000154 E9CE040000              	jmp	terminate
   295                                  
   296                                  ; -------------------------------------------------------------
   297                                  
   298                                  	; 26/12/2024
   299                                  	; 25/12/2024
   300                                  	; 30/11/2024 (32bit)
   301                                  	; 29/11/2024
   302                                  	; 30/05/2024
   303                                  GetFileName:
   304 00000159 BF[E0800000]            	mov	edi, wav_file_name 
   305                                  	; 30/11/2024
   306                                  	;mov	esi, [argv]
   307 0000015E 31C9                    	xor	ecx, ecx ; 0
   308                                  ScanName:
   309 00000160 AC                      	lodsb
   310                                  	;test	al, al
   311                                  	;jz	short a_4
   312                                  	; 29/11/2024
   313 00000161 3C0D                    	cmp	al, 0Dh
   314 00000163 7638                    	jna	short a_4
   315 00000165 3C20                    	cmp	al, 20h
   316 00000167 74F7                    	je	short ScanName	; scan start of name.
   317 00000169 AA                      	stosb
   318 0000016A B4FF                    	mov	ah, 0FFh
   319                                  	;;;
   320                                  	; 14/11/2024
   321                                  	; (max. path length = 64 bytes for MSDOS ?) (*)
   322                                  	;xor	ecx, ecx ; 0
   323                                  	;;;
   324                                  a_0:	
   325 0000016C FEC4                    	inc	ah
   326                                  a_1:
   327                                  	;;;
   328                                  	; 14/11/2024
   329 0000016E 41                      	inc	ecx
   330                                  	;;;
   331 0000016F AC                      	lodsb
   332 00000170 AA                      	stosb
   333 00000171 3C2E                    	cmp	al, '.'
   334 00000173 74F7                    	je	short a_0
   335                                  	; 29/11/2024
   336 00000175 3C20                    	cmp	al, 20h
   337                                  	;and	al, al
   338                                  	;jnz	short a_1
   339                                  	;;;
   340                                  	; 14/11/2024
   341 00000177 7613                    	jna	short a_3
   342 00000179 20E4                    	and	ah, ah
   343 0000017B 7406                    	jz	short a_2
   344 0000017D 3C2F                    	cmp	al, '/'	; 14/12/2024
   345 0000017F 7502                    	jne	short a_2
   346 00000181 B400                    	mov	ah, 0
   347                                  a_2:
   348 00000183 80F94B                  	cmp	cl, 75	; 64+8+'.'+3 -> offset 75 is the last chr
   349 00000186 72E6                    	jb	short a_1
   350                                  	; 29/11/2024
   351 00000188 29C9                    	sub	ecx, ecx
   352 0000018A EB11                    	jmp	short a_4
   353                                  a_3:
   354                                  	; 29/11/2024
   355 0000018C 4F                      	dec	edi
   356                                  	;;;
   357 0000018D 08E4                    	or	ah, ah		; if period NOT found,
   358 0000018F 750C                    	jnz	short a_4 	; then add a .WAV extension.
   359                                  SetExt:
   360                                  	; 29/11/2024
   361                                  	;dec	edi
   362 00000191 C7072E574156            	mov	dword [edi], '.WAV'
   363                                  				; ! 64+12 is DOS limit
   364                                  				; but writing +4 must not
   365                                  				; destroy the following data	 
   366                                  	;mov	byte [edi+4], 0	; so, 80 bytes path + 0 is possible here
   367                                  	; 29/11/2024
   368 00000197 83C104                  	add	ecx, 4
   369 0000019A 83C704                  	add	edi, 4
   370                                  a_4:	
   371 0000019D C60700                  	mov	byte [edi], 0
   372                                  	; 30/11/2024
   373 000001A0 C3                      	retn
   374                                  
   375                                  ; -------------------------------------------------------------
   376                                  
   377                                  getwavparms:
   378                                  	; 14/11/2024
   379 000001A1 E8FA070000                     	call    getWAVParameters
   380 000001A6 72AC                    	jc	short _exit_		; nothing to do
   381                                  
   382                                  	; 17/11/2024
   383 000001A8 B304                    	mov	bl, 4
   384 000001AA 2A1D[C0800000]          	sub	bl, byte [WAVE_BlockAlign]
   385                                  			; = 0 for 16 bit stereo
   386                                  			; = 2 for 8 bit stereo or 16 bit mono
   387                                  			; = 3 for 8 bit mono	
   388                                  
   389 000001B0 D0EB                    	shr	bl, 1	;  0 -->  0,  2 -->  1,  3 -->  1
   390                                  	; 15/11/2024
   391 000001B2 80D300                  	adc	bl, 0	; 3 --> 1 --> 2
   392 000001B5 881D[32810000]          	mov	byte [fbs_shift], bl	; = 2 mono and 8 bit
   393                                  					; = 0 stereo and 16 bit
   394                                  					; = 1 mono or 8 bit
   395                                  
   396                                  ; -------------------------------------------------------------
   397                                  
   398                                  	; 25/12/2024
   399 000001BB 803D[0D430000]00        	cmp 	byte [IsInSplash], 0
   400                                  	;jna	short StartPlay
   401                                  	; 27/12/2024
   402 000001C2 7672                    	jna	short StartPlay@
   403                                  
   404                                  ; -------------------------------------------------------------
   405                                  
   406                                  	; 26/12/2024
   407                                  Player_SplashScreen:
   408                                  	; 21/12/2024
   409                                  	;mov	byte [tcolor], 15
   410                                  _0:
   411 000001C4 E8E7040000              	call	drawsplashscreen
   412                                  
   413                                  	; 21/12/2024
   414                                  	;;;
   415                                  	; set wave volume led addresses
   416 000001C9 8B1D[7C760000]          	mov	ebx, [LFB_ADDR]
   417 000001CF 81C300C70100            	add	ebx, (13*80*8*14)
   418 000001D5 BD50000000              	mov	ebp, 80
   419 000001DA BF[34610000]            	mov	edi, wleds_addr
   420                                  wleds_sa_1:
   421 000001DF B90F000000              	mov	ecx, 15
   422                                  wleds_sa_2:
   423 000001E4 B800230000              	mov	eax, 80*8*14 ; 640*14 pixels (next row)
   424 000001E9 F7E1                    	mul	ecx
   425 000001EB 01D8                    	add	eax, ebx
   426 000001ED AB                      	stosd
   427 000001EE E2F4                    	loop	wleds_sa_2
   428 000001F0 89D8                    	mov	eax, ebx
   429 000001F2 AB                      	stosd
   430 000001F3 83C308                  	add	ebx, 8
   431 000001F6 4D                      	dec	ebp
   432 000001F7 75E6                    	jnz	short wleds_sa_1
   433                                  	;;;
   434                                  
   435                                  	; 25/12/5024
   436                                  	; 28/11/2024 
   437 000001F9 833D[D0800000]FF        	cmp	dword [filehandle], -1
   438 00000200 7540                    	jne	short StartPlay
   439                                  
   440                                  	; 24/12/2024
   441                                  	; 07/12/2024
   442                                  	;;; wait for 3 seconds
   443                                  	sys	_time, 0 ; get time in unix epoch format
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000202 BB00000000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000207 B80D000000          <1>  mov eax, %1
   100                              <1> 
   101 0000020C CD40                <1>  int 40h
   444 0000020E 89C1                    	mov	ecx, eax
   445 00000210 83C103                  	add	ecx, 3
   446                                  _wait_3s:
   447 00000213 90                      	nop
   448                                  	sys	_time, 0
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000214 BB00000000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000219 B80D000000          <1>  mov eax, %1
   100                              <1> 
   101 0000021E CD40                <1>  int 40h
   449 00000220 39C8                    	cmp	eax, ecx
   450 00000222 72EF                    	jb	short _wait_3s
   451                                  	;;;
   452                                  
   453                                  	; 25/12/2024
   454                                  	; 28/11/2024
   455 00000224 C605[0D430000]00        	mov	byte [IsInSplash], 0
   456                                  	;mov	edx, wav_file_name
   457                                  	; 30/11/2024
   458 0000022B 8B35[D8800000]          	mov	esi, [argvf]
   459                                  	; 29/11/2024
   460 00000231 E9C9FEFFFF              	jmp	Player_ParseNextParameter
   461                                  
   462                                  ; -------------------------------------------------------------
   463                                  
   464                                  	; 27/12/2024
   465                                  StartPlay@:
   466                                  
   467                                  	; 27/12/2024 (Detect & Enable AC97 hardware again)
   468                                  	; (this is needed after disabling audio system)
   469                                  	; Detect (BH=1) AC'97 (BL=2) Audio Device
   470                                          sys	_audio, 0102h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000236 BB02010000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 0000023B B820000000          <1>  mov eax, %1
   100                              <1> 
   101 00000240 CD40                <1>  int 40h
   471                                  	; ignore error at this stage
   472                                  	;jc	short ac97_not_detected
   473                                  
   474                                  ; -------------------------------------------------------------
   475                                  
   476                                  	; 25/12/2024
   477                                  StartPlay:
   478 00000242 FE05[9D800000]          	inc	byte [filecount]
   479 00000248 C605[9C800000]00        	mov	byte [command], 0
   480                                  
   481                                  ; -------------------------------------------------------------
   482                                  
   483                                  	; 07/12/2024 (playwav9.s)
   484                                  
   485                                  	; 18/11/2023 (ich_wav4.asm)
   486                                  	; 13/11/2023 (ich_wav3.asm)
   487                                  
   488 0000024F 803D[9A800000]01        	cmp	byte [VRA], 1
   489 00000256 7226                    	jb	short chk_sample_rate
   490                                  
   491                                  playwav_48_khz:
   492 00000258 C705[40810000]-         	mov	dword [loadfromwavfile], loadFromFile
   492 0000025E [F6090000]         
   493                                  	;mov	dword [loadsize], 0 ; 65536
   494                                  	;;;
   495                                  	; 17/11/2024
   496                                  	;mov	word [buffersize], 32768
   497                                  	;mov	ax, BUFFERSIZE/2 ; 32760
   498                                  	; 30/11/2024
   499                                  	;mov	eax, BUFFERSIZE/2 ; 32768
   500                                  	; 07/12/2024
   501 00000262 B800000100              	mov	eax, BUFFERSIZE ; 65536
   502 00000267 A3[48810000]            	mov	[buffersize], eax	; 16 bit samples
   503                                  	; 07/12/2024
   504                                  	;shl	eax, 1			; bytes
   505 0000026C 8A0D[32810000]          	mov	cl, [fbs_shift]
   506 00000272 D3E8                    	shr	eax, cl 
   507                                  	;mov	[loadsize], ax ; 16380 or 32760 or 65520
   508 00000274 A3[44810000]            	mov	[loadsize], eax ; 16384 or 32768 or 65536
   509                                  	;;;
   510                                  	;jmp	PlayNow ; 30/05/2024
   511                                  	; 07/12/2024
   512 00000279 E9AA020000              	jmp	Player_Template
   513                                  
   514                                  	; 05/02/2025
   515                                  chk_sample_rate:
   516                                  	; set conversion parameters
   517                                  	; (for 8, 11.025, 16, 22.050, 24, 32 kHZ)
   518 0000027E 66A1[B8800000]          	mov	ax, [WAVE_SampleRate]
   519 00000284 663D80BB                	cmp	ax, 48000
   520 00000288 74CE                    	je	short playwav_48_khz
   521                                  chk_22khz:
   522 0000028A 663D2256                	cmp	ax, 22050
   523 0000028E 7545                    	jne	short chk_11khz
   524 00000290 803D[C2800000]08        	cmp	byte [WAVE_BitsPerSample], 8
   525 00000297 7615                    	jna	short chk_22khz_1
   526 00000299 BB[66190000]            	mov	ebx, load_22khz_stereo_16_bit
   527 0000029E 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1
   528 000002A5 751A                    	jne	short chk_22khz_2
   529 000002A7 BB[D9180000]            	mov	ebx, load_22khz_mono_16_bit
   530 000002AC EB13                    	jmp	short chk_22khz_2
   531                                  chk_22khz_1:
   532 000002AE BB[52180000]            	mov	ebx, load_22khz_stereo_8_bit
   533 000002B3 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1
   534 000002BA 7505                    	jne	short chk_22khz_2
   535 000002BC BB[C9170000]            	mov	ebx, load_22khz_mono_8_bit
   536                                  chk_22khz_2:
   537 000002C1 B85A1D0000              	mov	eax, 7514  ; (442*17)
   538 000002C6 BA25000000              	mov	edx, 37
   539 000002CB B911000000              	mov	ecx, 17
   540 000002D0 E926020000              	jmp	set_sizes
   541                                  chk_11khz:
   542 000002D5 663D112B                	cmp	ax, 11025
   543 000002D9 7545                    	jne	short chk_44khz
   544 000002DB 803D[C2800000]08        	cmp	byte [WAVE_BitsPerSample], 8
   545 000002E2 7615                    	jna	short chk_11khz_1
   546 000002E4 BB[821B0000]            	mov	ebx, load_11khz_stereo_16_bit
   547 000002E9 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1
   548 000002F0 751A                    	jne	short chk_11khz_2
   549 000002F2 BB[091B0000]            	mov	ebx, load_11khz_mono_16_bit
   550 000002F7 EB13                    	jmp	short chk_11khz_2
   551                                  chk_11khz_1:
   552 000002F9 BB[8F1A0000]            	mov	ebx, load_11khz_stereo_8_bit
   553 000002FE 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1 
   554 00000305 7505                    	jne	short chk_11khz_2
   555 00000307 BB[171A0000]            	mov	ebx, load_11khz_mono_8_bit
   556                                  chk_11khz_2:
   557 0000030C B8AD0E0000              	mov	eax, 3757  ; (221*17)
   558 00000311 BA4A000000              	mov	edx, 74
   559 00000316 B911000000              	mov	ecx, 17
   560 0000031B E9DB010000              	jmp	set_sizes
   561                                  chk_44khz:
   562 00000320 663D44AC                	cmp	ax, 44100
   563 00000324 7545                    	jne	short chk_16khz
   564 00000326 803D[C2800000]08        	cmp	byte [WAVE_BitsPerSample], 8
   565 0000032D 7615                    	jna	short chk_44khz_1
   566 0000032F BB[891D0000]            	mov	ebx, load_44khz_stereo_16_bit
   567 00000334 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1
   568 0000033B 751A                    	jne	short chk_44khz_2
   569 0000033D BB[101D0000]            	mov	ebx, load_44khz_mono_16_bit
   570 00000342 EB13                    	jmp	short chk_44khz_2
   571                                  chk_44khz_1:
   572 00000344 BB[931C0000]            	mov	ebx, load_44khz_stereo_8_bit
   573 00000349 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1
   574 00000350 7505                    	jne	short chk_44khz_2
   575 00000352 BB[171C0000]            	mov	ebx, load_44khz_mono_8_bit
   576                                  chk_44khz_2:
   577                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   578 00000357 B8D93A0000              	mov	eax, 15065 ; (655*23)
   579                                  	; 18/11/2023 ((file size + bss + stack) <= 64KB)
   580                                  	;mov	ax, 14076 ; (612*23)
   581                                  	; 17/11/2024
   582                                  	;mov	ax, 12650 ; (550*23)
   583 0000035C BA19000000              	mov	edx, 25
   584 00000361 B917000000              	mov	ecx, 23
   585 00000366 E990010000              	jmp	set_sizes
   586                                  chk_16khz:
   587 0000036B 663D803E                	cmp	ax, 16000
   588 0000036F 7545                    	jne	short chk_8khz
   589 00000371 803D[C2800000]08        	cmp	byte [WAVE_BitsPerSample], 8
   590 00000378 7615                    	jna	short chk_16khz_1
   591 0000037A BB[08130000]            	mov	ebx, load_16khz_stereo_16_bit
   592 0000037F 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1 
   593 00000386 751A                    	jne	short chk_16khz_2
   594 00000388 BB[87120000]            	mov	ebx, load_16khz_mono_16_bit
   595 0000038D EB13                    	jmp	short chk_16khz_2
   596                                  chk_16khz_1:
   597 0000038F BB[CD110000]            	mov	ebx, load_16khz_stereo_8_bit
   598 00000394 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1
   599 0000039B 7505                    	jne	short chk_16khz_2
   600 0000039D BB[4E110000]            	mov	ebx, load_16khz_mono_8_bit
   601                                  chk_16khz_2:
   602                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   603 000003A2 B855150000              	mov	eax, 5461
   604                                  	; 17/11/2024
   605                                  	;mov	ax, 5460
   606 000003A7 BA03000000              	mov	edx, 3
   607 000003AC B901000000              	mov	ecx, 1
   608 000003B1 E945010000              	jmp	set_sizes
   609                                  chk_8khz:
   610 000003B6 663D401F                	cmp	ax, 8000
   611 000003BA 7545                    	jne	short chk_24khz
   612 000003BC 803D[C2800000]08        	cmp	byte [WAVE_BitsPerSample], 8
   613 000003C3 7615                    	jna	short chk_8khz_1
   614 000003C5 BB[03100000]            	mov	ebx, load_8khz_stereo_16_bit
   615 000003CA 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1
   616 000003D1 751A                    	jne	short chk_8khz_2
   617 000003D3 BB[330F0000]            	mov	ebx, load_8khz_mono_16_bit
   618 000003D8 EB13                    	jmp	short chk_8khz_2
   619                                  chk_8khz_1:
   620 000003DA BB[030E0000]            	mov	ebx, load_8khz_stereo_8_bit
   621 000003DF 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1 
   622 000003E6 7505                    	jne	short chk_8khz_2
   623 000003E8 BB[1F0D0000]            	mov	ebx, load_8khz_mono_8_bit
   624                                  chk_8khz_2:
   625 000003ED B8AA0A0000              	mov	eax, 2730
   626 000003F2 BA06000000              	mov	edx, 6
   627 000003F7 B901000000              	mov	ecx, 1
   628 000003FC E9FA000000              	jmp	set_sizes
   629                                  chk_24khz:
   630 00000401 663DC05D                	cmp	ax, 24000
   631 00000405 7545                    	jne	short chk_32khz
   632 00000407 803D[C2800000]08        	cmp	byte [WAVE_BitsPerSample], 8
   633 0000040E 7615                    	jna	short chk_24khz_1
   634                                  	; 18/01/2025 (BugFix)
   635                                  	; bx -> ebx
   636 00000410 BB[35150000]            	mov	ebx, load_24khz_stereo_16_bit
   637 00000415 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1
   638 0000041C 751A                    	jne	short chk_24khz_2
   639 0000041E BB[CF140000]            	mov	ebx, load_24khz_mono_16_bit
   640 00000423 EB13                    	jmp	short chk_24khz_2
   641                                  chk_24khz_1:
   642 00000425 BB[45140000]            	mov	ebx, load_24khz_stereo_8_bit
   643 0000042A 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1 
   644 00000431 7505                    	jne	short chk_24khz_2
   645 00000433 BB[DE130000]            	mov	ebx, load_24khz_mono_8_bit
   646                                  chk_24khz_2:
   647                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   648 00000438 B800200000              	mov	eax, 8192
   649                                  	; 17/11/2024
   650                                  	;mov	ax, 8190
   651 0000043D BA02000000              	mov	edx, 2
   652 00000442 B901000000              	mov	ecx, 1
   653 00000447 E9AF000000              	jmp	set_sizes ; 02/02/2025	
   654                                  
   655                                  chk_32khz:
   656 0000044C 663D007D                	cmp	ax, 32000
   657                                  	;jne	short vra_needed
   658                                  	; 05/02/2025
   659 00000450 7563                    	jne	short chk_12khz
   660 00000452 803D[C2800000]08        	cmp	byte [WAVE_BitsPerSample], 8
   661 00000459 7615                    	jna	short chk_32khz_1
   662 0000045B BB[39170000]            	mov	ebx, load_32khz_stereo_16_bit
   663 00000460 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1
   664 00000467 751A                    	jne	short chk_32khz_2
   665 00000469 BB[CC160000]            	mov	ebx, load_32khz_mono_16_bit
   666 0000046E EB13                    	jmp	short chk_32khz_2
   667                                  chk_32khz_1:
   668 00000470 BB[2F160000]            	mov	ebx, load_32khz_stereo_8_bit
   669 00000475 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1
   670 0000047C 7505                    	jne	short chk_32khz_2
   671 0000047E BB[BC150000]            	mov	ebx, load_32khz_mono_8_bit
   672                                  chk_32khz_2:
   673                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   674 00000483 B8AA2A0000              	mov	eax, 10922
   675                                  	; 17/11/2024
   676                                  	;mov	ax, 10920
   677 00000488 BA03000000              	mov	edx, 3
   678 0000048D B902000000              	mov	ecx, 2
   679                                  	; 05/02/2025
   680 00000492 EB67                    	jmp	short set_sizes
   681                                  
   682                                  	; 07/12/2024
   683                                  vra_needed:
   684                                  	; 30/11/2024 (TRDOS 386, ax -> eax)
   685                                  	; 13/11/2023
   686 00000494 58                      	pop	eax ; discard return address to the caller
   687                                  	; 30/05/2024
   688                                  vra_err:
   689                                  	; 21/12/2024
   690 00000495 E875020000              	call	set_text_mode
   691                                  	; 30/11/2024
   692                                  	sys	_msg, msg_no_vra, 255, 0Fh
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 0000049A BB[EF2C0000]        <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000049F B9FF000000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 000004A4 BA0F000000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000004A9 B823000000          <1>  mov eax, %1
   100                              <1> 
   101 000004AE CD40                <1>  int 40h
   693 000004B0 E977010000              	jmp	Exit
   694                                  
   695                                  	;;;;
   696                                  	; 05/02/2025
   697                                  chk_12khz:
   698 000004B5 663DE02E                	cmp	ax, 12000
   699 000004B9 75D9                    	jne	short vra_needed
   700 000004BB 803D[C2800000]08        	cmp	byte [WAVE_BitsPerSample], 8
   701 000004C2 7615                    	jna	short chk_12khz_1
   702 000004C4 BB[F51E0000]            	mov	ebx, load_12khz_stereo_16_bit
   703 000004C9 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1
   704 000004D0 751A                    	jne	short chk_12khz_2
   705 000004D2 BB[A61E0000]            	mov	ebx, load_12khz_mono_16_bit
   706 000004D7 EB13                    	jmp	short chk_12khz_2
   707                                  chk_12khz_1:
   708 000004D9 BB[501E0000]            	mov	ebx, load_12khz_stereo_8_bit
   709 000004DE 803D[B6800000]01        	cmp	byte [WAVE_NumChannels], 1
   710 000004E5 7505                    	jne	short chk_12khz_2
   711 000004E7 BB[081E0000]            	mov	ebx, load_12khz_mono_8_bit
   712                                  chk_12khz_2:
   713 000004EC B800100000              	mov	eax, 4096
   714 000004F1 BA04000000              	mov	edx, 4
   715 000004F6 B901000000              	mov	ecx, 1
   716                                  	; 05/02/2025
   717                                  	;jmp	short set_sizes
   718                                  	;;;;
   719                                  
   720                                  set_sizes:
   721                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   722                                  	;;;
   723                                  	; 17/11/2024
   724 000004FB 51                      	push	ecx
   725 000004FC B102                    	mov	cl, 2
   726 000004FE 2A0D[32810000]          	sub	cl, [fbs_shift]
   727                                  		; = 2 for 16 bit stereo
   728                                  		; = 1 for 16 bit mono or 8 bit stereo
   729                                  		; = 0 for 8 bit mono
   730 00000504 D3E0                    	shl	eax, cl
   731 00000506 59                      	pop	ecx	
   732 00000507 A3[44810000]            	mov	[loadsize], eax	; (one) read count in bytes
   733                                  	;;;
   734 0000050C F7E2                    	mul	edx
   735 0000050E 83F901                  	cmp	ecx, 1
   736 00000511 7402                    	je	short s_2
   737                                  s_1:
   738 00000513 F7F1                    	div	ecx
   739                                  s_2:
   740                                  	;;;
   741                                  	; eax = byte count of (to be) converted samples 
   742                                  	
   743                                  	; 17/11/2024
   744                                  	;;;
   745 00000515 8A0D[32810000]          	mov	cl, [fbs_shift]
   746                                  
   747 0000051B D3E0                    	shl	eax, cl
   748                                  		; *1 for 16 bit stereo
   749                                  		; *2 for 16 bit mono or 8 bit stereo
   750                                  		; *4 for for 8 bit mono
   751                                  	;;;
   752                                  
   753                                  	; eax = 16 bit stereo byte count (target buffer size)
   754                                  	
   755                                  	; 07/12/2024
   756                                  	;shr	eax, 1	; buffer size is 16 bit sample count
   757 0000051D A3[48810000]            	mov	[buffersize], eax ; buffer size in bytes
   758 00000522 891D[40810000]          	mov	[loadfromwavfile], ebx
   759                                  
   760                                  ; -------------------------------------------------------------
   761                                  
   762                                  Player_Template:
   763                                  
   764                                  	; 26/12/2024
   765 00000528 803D[0D430000]00        	cmp 	byte [IsInSplash], 0
   766 0000052F 7611                    	jna	short Player_Template_@
   767                                  
   768                                  	; 24/12/2024 (setting for wave lighting points)
   769 00000531 A1[7C760000]            	mov	eax, [LFB_ADDR]
   770                                  	;add	eax, 228*640 ; wave graphics start (top) line/row
   771 00000536 05009A0100              	add	eax, 164*640 ; 256 volume levels ; 24/12/2024
   772 0000053B A3[78760000]            	mov	[graphstart], eax
   773                                  
   774                                  	; 26/12/2024
   775 00000540 EB14                    	jmp	short PlayNow
   776                                  
   777                                  Player_Template_@:
   778                                  	; 21/12/2024
   779 00000542 E859010000              	call	clearscreen
   780 00000547 E870010000              	call	drawplayingscreen
   781                                  
   782                                  	; 14/11/2024
   783 0000054C E8E0210000              	call	SetTotalTime
   784 00000551 E8AD220000              	call	UpdateFileInfo
   785                                  
   786                                  ; -------------------------------------------------------------
   787                                  
   788                                  	; 21/12/2024 (VGA/LFB modifications)
   789                                  	; (Direct access/map to the LFB is already done here)
   790                                  	; ((this program is in VESA/VBE graphics mode here))
   791                                  PlayNow:
   792                                  	; 07/12/2024
   793                                  	sys	_audio, 0200h, [buffersize], audio_buffer
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000556 BB00020000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000055B 8B0D[48810000]      <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00000561 BA[00900000]        <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000566 B820000000          <1>  mov eax, %1
   100                              <1> 
   101 0000056B CD40                <1>  int 40h
   794 0000056D 0F82FF000000            	jc	error_exit ; return to text mode and print err msg
   795                                  
   796                                  	; 01/06/2024
   797                                  	; Initialize Audio Device (bh = 3)
   798                                  	sys	_audio, 0301h, 0, audio_int_handler
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000573 BB01030000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00000578 B900000000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 0000057D BA[E2090000]        <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000582 B820000000          <1>  mov eax, %1
   100                              <1> 
   101 00000587 CD40                <1>  int 40h
   799                                  	;jc	short error_exit
   800 00000589 0F82C3000000            	jc	init_err ; return to text mode and print err msg
   801                                  
   802                                  	; 30/05/2024
   803                                  	; playwav4.asm
   804                                  ;_2:	; 24/12/2024
   805                                  	;call	check4keyboardstop	; flush keyboard buffer
   806                                  	;jc	short _2		; 07/11/2023
   807                                  
   808                                  	;;;
   809                                  	; 26/12/2024
   810                                  	; 14/11/2024
   811                                  	;mov	al, 3	; 0 = max, 31 = min
   812                                  	; 15/11/2024
   813 0000058F E86E030000              	call	SetMasterVolume
   814                                  
   815                                  	; 26/12/2024
   816 00000594 803D[0D430000]00        	cmp 	byte [IsInSplash], 0
   817 0000059B 770A                    	ja	short _2
   818                                  
   819                                  	; 07/12/2024
   820                                  	;call	SetPCMOutVolume
   821 0000059D E8E2220000              	call	UpdateVolume
   822                                  	;;;
   823                                  	; 14/11/2024
   824 000005A2 E86D230000              	call	UpdateProgressBar
   825                                  	;;;
   826                                  
   827                                  	; 26/12/2024
   828                                  _2:
   829                                  
   830                                  ; play the .wav file. Most of the good stuff is in here.
   831                                  	
   832                                  	; 05/12/2024
   833 000005A7 E86A010000              	call    PlayWav
   834                                  
   835                                  ; close the .wav file and exit.
   836                                  
   837                                  	; 25/12/2024
   838 000005AC E8D8030000              	call	closeFile
   839                                  
   840                                  	; 25/12/2024
   841                                  	;;;
   842                                  	; reset file loading and EOF parameters
   843                                  	; 18/12/2024
   844 000005B1 C705[54810000]0000-     	mov	dword [count], 0
   844 000005B9 0000               
   845 000005BB C705[58810000]0000-     	mov	dword [LoadedDataBytes], 0
   845 000005C3 0000               
   846 000005C5 C605[CE800000]00        	mov	byte [flags], 0
   847 000005CC C605[8C800000]00        	mov	byte [stopped], 0
   848                                  	; 26/12/2024
   849 000005D3 C605[98800000]FF        	mov	byte [pbuf_s], 0FFh
   850                                  	;;;
   851                                  
   852                                  ;	cmp	byte [IsInSplash], 0
   853                                  ;	jna	short _6
   854                                  ;	mov	byte [IsInSplash], 0
   855                                  ;	mov	esi, [argvf]
   856                                  ;	jmp	Player_ParseNextParameter
   857                                  ;
   858                                  ;	; 29/11/2024
   859                                  ;_6:
   860                                  ;	cmp	byte [command], 'Q'
   861                                  ;	je	short _7	; 25/12/2024
   862                                  ;	jmp	check_p_command
   863                                  ;
   864                                  ;_7:
   865                                  	; 07/12/2024
   866                                  	;;;
   867                                  	; Stop Playing
   868                                  	;sys	_audio, 0700h
   869                                  	; Cancel callback service (for user)
   870                                  	sys	_audio, 0900h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000005DA BB00090000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000005DF B820000000          <1>  mov eax, %1
   100                              <1> 
   101 000005E4 CD40                <1>  int 40h
   871                                  	; Deallocate Audio Buffer (for user)
   872                                  	sys	_audio, 0A00h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000005E6 BB000A0000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000005EB B820000000          <1>  mov eax, %1
   100                              <1> 
   101 000005F0 CD40                <1>  int 40h
   873                                  	; Disable Audio Device
   874                                  	sys	_audio, 0C00h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000005F2 BB000C0000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000005F7 B820000000          <1>  mov eax, %1
   100                              <1> 
   101 000005FC CD40                <1>  int 40h
   875                                  	;;;
   876                                  
   877                                  	; 27/12/2024
   878                                  	; 26/12/2024
   879 000005FE 803D[0D430000]00        	cmp	byte [IsInSplash], 0
   880 00000605 7612                    	jna	short _6
   881 00000607 C605[0D430000]00        	mov	byte [IsInSplash], 0
   882 0000060E 8B35[D8800000]          	mov	esi, [argvf]
   883 00000614 E9E6FAFFFF              	jmp	Player_ParseNextParameter
   884                                  _6:
   885 00000619 803D[9C800000]51        	cmp	byte [command], 'Q'
   886 00000620 7405                    	je	short terminate
   887 00000622 E9AEFAFFFF              	jmp	check_p_command
   888                                  
   889                                  terminate:
   890 00000627 E8E3000000              	call	set_text_mode
   891                                  Exit:
   892                                  	sys	_exit
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91                              <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 0000062C B801000000          <1>  mov eax, %1
   100                              <1> 
   101 00000631 CD40                <1>  int 40h
   893                                  halt:
   894 00000633 EBFE                    	jmp	short halt
   895                                  
   896                                  ; -------------------------------------------------------------
   897                                  
   898                                  	; 30/05/2024
   899                                  pmsg_usage:
   900                                  	; 21/12/2024
   901 00000635 E8D5000000              	call	set_text_mode
   902                                  	; 01/12/2024
   903                                  	sys	_msg, msg_usage, 255, 0Fh
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 0000063A BB[2A2C0000]        <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000063F B9FF000000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00000644 BA0F000000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000649 B823000000          <1>  mov eax, %1
   100                              <1> 
   101 0000064E CD40                <1>  int 40h
   904 00000650 EBDA                    	jmp	short Exit
   905                                  
   906                                  ; -------------------------------------------------------------
   907                                  
   908                                  	; 30/05/2024
   909                                  init_err:
   910                                  	; 21/12/2024
   911 00000652 E8B8000000              	call	set_text_mode
   912                                  	; 01/12/2024
   913                                  	sys	_msg, msg_init_err, 255, 0Fh
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000657 BB[BE2C0000]        <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000065C B9FF000000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00000661 BA0F000000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000666 B823000000          <1>  mov eax, %1
   100                              <1> 
   101 0000066B CD40                <1>  int 40h
   914 0000066D EBBD                    	jmp	short Exit
   915                                  
   916                                  ; -------------------------------------------------------------
   917                                  
   918                                  	; 02/12/2024
   919                                  Player_Quit@:
   920 0000066F 58                      	pop	eax ; return addr (call PlayWav@)
   921                                  	
   922                                  	; 29/11/2024
   923                                  Player_Quit:
   924 00000670 EBB5                    	jmp	 short terminate
   925                                  
   926                                  
   927                                  ; -------------------------------------------------------------
   928                                  
   929                                  	; 07/12/2024
   930                                  error_exit:
   931                                  	; 21/12/2024
   932 00000672 E898000000              	call	set_text_mode
   933                                  trdos386_error:
   934                                  	sys	_msg, trdos386_err_msg, 255, 0Eh
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000677 BB[9E2C0000]        <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000067C B9FF000000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00000681 BA0E000000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000686 B823000000          <1>  mov eax, %1
   100                              <1> 
   101 0000068B CD40                <1>  int 40h
   935 0000068D EB9D                    	jmp	short Exit
   936                                  
   937                                  ; -------------------------------------------------------------
   938                                  
   939                                  	; 21/12/2024
   940                                  print_msg:
   941 0000068F B40E                    	mov	ah, 0Eh
   942 00000691 BB07000000              	mov	ebx, 7
   943                                  	;mov	bl, 7 ; char attribute & color
   944                                  p_next_chr:
   945 00000696 AC                      	lodsb
   946 00000697 08C0                    	or	al, al
   947 00000699 7404                    	jz	short p_retn ; retn
   948 0000069B CD31                    	int	31h
   949 0000069D EBF7                    	jmp	short p_next_chr
   950                                  p_retn:
   951 0000069F C3                      	retn
   952                                  
   953                                  ; -------------------------------------------------------------
   954                                  
   955                                  	; 21/12/2024
   956                                  clearscreen:
   957                                  	; fast clear
   958                                  	; 640*480, 256 colors
   959 000006A0 8B3D[7C760000]          	mov	edi, [LFB_ADDR]
   960 000006A6 B9002C0100              	mov	ecx, (640*480*1)/4 ; 22/12/2024
   961 000006AB 31C0                    	xor	eax, eax
   962 000006AD F3AB                    	rep	stosd
   963 000006AF C3                      	retn
   964                                  
   965                                  ; -------------------------------------------------------------
   966                                  
   967                                  	; 26/12/2024
   968                                  	; 21/12/2024
   969                                  drawsplashscreen:
   970 000006B0 BD[1C2E0000]            	mov	ebp, SplashScreen
   971                                  	;;mov	dword [nextrow], 00100000h ; 8*16
   972                                  	;mov	dword [nextrow], 000E0000h ; 8*14
   973                                  	;mov	esi, 0 ; row 0, column 0
   974 000006B5 BE00000200              	mov	esi, 00020000h ; row 2, column 0 ; top margin = 2
   975 000006BA EB0A                    	jmp	short p_d_x
   976                                  drawplayingscreen:
   977 000006BC BD[BD380000]            	mov	ebp, PlayingScreen
   978                                  	;mov	dword [nextrow], 000E0000h ; 8*14
   979                                  	;mov	esi, 0 ; row 0, column 0
   980 000006C1 BE00000700              	mov	esi, 00070000h ; row 7, column 0 ; top margin = 7
   981                                  p_d_x:
   982 000006C6 C605[88760000]50        	mov	byte [columns], 80
   983                                  p_d_x_n:
   984 000006CD 31D2                    	xor	edx, edx
   985 000006CF 8A5500                  	mov	dl, [ebp]
   986 000006D2 20D2                    	and	dl, dl
   987 000006D4 7438                    	jz	short p_d_x_ok
   988 000006D6 C1E204                  	shl	edx, 4 ; * 16 (for 8x16 font)
   989                                  
   990 000006D9 BF[34510000]            	mov	edi, fontbuff2 ; start of user font data
   991 000006DE 01D7                    	add	edi, edx
   992                                  	
   993                                  	;; NOTE: Following system call writes fonts at
   994                                  	;; Std VGA video memory 0A0000h, BL bit 7 selects
   995                                  	;; screen width as 640 pixels (instead of 320 pixels)
   996                                  	;; so 8Fh is sub function 0Fh (write char)
   997                                  	;; with 640 pixels screen witdh. 
   998                                  	;; (Even if VESA VBE mode -LFB- is in use, QEMU and
   999                                  	;; a real computer with NVIDIA GEFORCE FX 550 uses
  1000                                  	;; A0000h, so.. even if fonts are written at A0000h-B0000h
  1001                                  	;; region, the text is appeared on screen
  1002                                  	;; while LFB is at C0000000h or E0000000h.)
  1003                                  
  1004                                  	;sys	_video, 018Fh, [tcolor], 8001h
  1005                                  			;; use STD VGA video memory
  1006                                  			;; (0A0000h)
  1007                                  	;sys	_video, 020Fh, [tcolor], 8001h ; 8x16 user font
  1008                                  		 ; use LFB for current VBE mode
  1009                                  		 ; for writing fonts on screen
  1010                                  	; 26/12/2024
  1011                                  	sys	_video, 020Fh, 0Fh, 8001h ; 8x16 user font
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000006E0 BB0F020000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 000006E5 B90F000000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 000006EA BA01800000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000006EF B81F000000          <1>  mov eax, %1
   100                              <1> 
   101 000006F4 CD40                <1>  int 40h
  1012                                  
  1013 000006F6 45                      	inc	ebp
  1014 000006F7 6683C608                	add	si, 8 ; next char pos
  1015 000006FB FE0D[88760000]          	dec	byte [columns]
  1016 00000701 75CA                    	jnz	short p_d_x_n	; next column
  1017 00000703 6631F6                  	xor	si, si
  1018                                  	;;add	esi, 00100000h	; next row ; 8*16
  1019                                  	;add	esi, [nextrow]
  1020 00000706 81C600000E00            	add	esi, 000E0000h	; next row ; 8*14
  1021 0000070C EBB8                    	jmp	short p_d_x
  1022                                  p_d_x_ok:
  1023 0000070E C3                      	retn
  1024                                  
  1025                                  ; -------------------------------------------------------------
  1026                                  
  1027                                  	; 21/12/2024
  1028                                  set_text_mode:
  1029 0000070F 30E4                    	xor    ah, ah
  1030 00000711 B003                    	mov    al, 3                        
  1031                                   	;int   10h ; al = 03h text mode, int 10 video
  1032 00000713 CD31                    	int    31h ; TRDOS 386 - Video interrupt
  1033 00000715 C3                      	retn
  1034                                  
  1035                                  ; -------------------------------------------------------------
  1036                                  
  1037                                  	; 07/12/2024 (playwav9.s)
  1038                                  	; 26/11/2023 (playwav8.s)
  1039                                  PlayWav:
  1040                                  	; 19/11/2024
  1041 00000716 C605[8F800000]01        	mov	byte [wleds], 1
  1042                                  
  1043                                  	;;;
  1044                                  	; 09/12/2024
  1045 0000071D B834290000              	mov	eax, 10548 ; (48000*10/182)*4
  1046 00000722 803D[9A800000]00        	cmp	byte [VRA], 0
  1047 00000729 7614                    	jna	short _3 ; 48kHZ (interpolation)
  1048                                  	;;;
  1049                                  	; 01/12/2024 (32bit)
  1050                                  	;movzx	eax, word [WAVE_SampleRate]
  1051                                  	; 09/12/2024
  1052 0000072B 66A1[B8800000]          	mov	ax, [WAVE_SampleRate]
  1053 00000731 B90A000000              	mov	ecx, 10
  1054 00000736 F7E1                    	mul	ecx
  1055 00000738 B1B6                    	mov	cl, 182
  1056 0000073A F7F1                    	div	ecx
  1057                                  	; ax = samples per 1/18.2 second
  1058                                  	;mov	cl, byte [WAVE_BlockAlign]
  1059                                  	; 09/12/2024 
  1060                                  	;mov	cl, 4 ; 16 bit, stereo
  1061                                  	;mul	ecx
  1062 0000073C C1E002                  	shl	eax, 2 ; * 4
  1063                                  _3:
  1064 0000073F A3[90800000]            	mov	[wleds_dif], eax ; buffer read differential (distance)
  1065                                  				; for wave volume leds update
  1066                                  				; (byte stream per 1/18.2 second)
  1067                                  	;;;
  1068                                  	; 24/12/2024
  1069 00000744 3D000A0000              	cmp	eax, 640*4 ; 640 samples (for 640 wave light points)
  1070 00000749 7305                    	jnb	short _4
  1071 0000074B B8000A0000              	mov	eax, 640*4	
  1072                                  _4:
  1073 00000750 A3[74760000]            	mov	[wpoints_dif], eax
  1074                                  	;;;
  1075                                  
  1076                                  RePlayWav:
  1077                                  	; 07/12/2024
  1078 00000755 BF[00900000]            	mov	edi, audio_buffer
  1079 0000075A FF15[40810000]          	call	dword [loadfromwavfile]
  1080 00000760 0F820CFFFFFF            	jc	error_exit
  1081                                  
  1082 00000766 C605[99800000]01        	mov	byte [half_buffer], 1 ; (DMA) Buffer 1
  1083                                  
  1084 0000076D A1[54810000]            	mov	eax, [count]
  1085 00000772 0105[58810000]          	add	[LoadedDataBytes], eax
  1086                                  
  1087 00000778 F605[CE800000]01        	test    byte [flags], ENDOFFILE  ; end of file
  1088 0000077F 752C                    	jnz	short _5 ; yes
  1089                                  			 ; bypass filling dma half buffer 2
  1090                                  
  1091                                  	; bh = 16 : update (current, first) dma half buffer
  1092                                  	; bl = 0  : then switch to the next (second) half buffer
  1093                                  	sys	_audio, 1000h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000781 BB00100000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000786 B820000000          <1>  mov eax, %1
   100                              <1> 
   101 0000078B CD40                <1>  int 40h
  1094                                  
  1095                                  	; 18/12/2024
  1096 0000078D C705[54810000]0000-     	mov	dword [count], 0
  1096 00000795 0000               
  1097                                  
  1098                                  	; 07/12/2024
  1099 00000797 BF[00900000]            	mov	edi, audio_buffer
  1100 0000079C FF15[40810000]          	call	dword [loadfromwavfile]
  1101                                  	;jc	error_exit
  1102                                  	
  1103 000007A2 A1[54810000]            	mov	eax, [count]
  1104 000007A7 0105[58810000]          	add	[LoadedDataBytes], eax
  1105                                  _5:
  1106                                  	; 07/12/2024
  1107 000007AD 668B0D[B8800000]         	mov	cx, [WAVE_SampleRate]
  1108 000007B4 B303                    	mov	bl, 3	; 16 bit, stereo
  1109 000007B6 B704                    	mov	bh, 4	; start to play
  1110                                  	sys	_audio
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91                              <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000007B8 B820000000          <1>  mov eax, %1
   100                              <1> 
   101 000007BD CD40                <1>  int 40h
  1111                                  
  1112                                  	;;;
  1113                                  	; 26/12/2024
  1114                                  SplashLoop:
  1115 000007BF 803D[0D430000]00        	cmp	byte [IsInSplash], 0
  1116 000007C6 7648                    	jna	short _10
  1117                                  	;; skip 1st signal without sound data loading
  1118                                  	;nop
  1119                                  	;nop
  1120                                  	;nop
  1121                                  	;cmp	byte [SRB], 0
  1122                                  	;jna	short SplashLoop
  1123                                  	;mov	byte [SRB], 0
  1124                                  _8:
  1125 000007C8 F605[CE800000]01        	test    byte [flags], ENDOFFILE  ; end of file
  1126 000007CF 0F85CC1C0000            	jnz	ac97_stop ; yes
  1127                                  
  1128                                  	; bh = 16 : update (current, first) dma half buffer
  1129                                  	; bl = 0  : then switch to the next (second) half buffer
  1130                                  	sys	_audio, 1000h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000007D5 BB00100000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000007DA B820000000          <1>  mov eax, %1
   100                              <1> 
   101 000007DF CD40                <1>  int 40h
  1131                                  
  1132 000007E1 803D[33810000]00        	cmp	byte [SRB], 0
  1133 000007E8 7619                    	jna	short _9
  1134 000007EA C605[33810000]00        	mov	byte [SRB], 0
  1135 000007F1 BF[00900000]            	mov	edi, audio_buffer
  1136 000007F6 FF15[40810000]          	call	dword [loadfromwavfile]
  1137 000007FC 7305                    	jnc	short _9
  1138                                  	; end of file
  1139                                  	;call	ac97_stop
  1140                                  	;retn
  1141 000007FE E99E1C0000              	jmp	ac97_stop
  1142                                  _9:
  1143 00000803 E8AA1E0000              	call	check4keyboardstop
  1144 00000808 0F82B1000000            	jc	_exitt_
  1145 0000080E EBB8                    	jmp	short _8
  1146                                  _10:
  1147                                  	; 26/12/2024
  1148 00000810 803D[9B800000]00        	cmp	byte [p_mode], 0
  1149 00000817 7705                    	ja	short tuneLoop
  1150                                  	;;;
  1151                                  
  1152                                  ; -------------------------------------------
  1153                                  
  1154                                  	; 22/12/2024
  1155                                   	; prepare all leds as turned off
  1156 00000819 E8F8210000              	call	reset_wave_leds
  1157                                  
  1158                                  ; -------------------------------------------
  1159                                  
  1160                                  	; 07/12/2024 (playwav9.s)
  1161                                  	; 01/12/2024 (32bit)
  1162                                  	; 29/11/2024
  1163                                  tuneLoop:
  1164                                  	; 30/05/2024
  1165                                  	; 18/11/2023 (ich_wav4.asm)
  1166                                  	; 08/11/2023
  1167                                  	; 06/11/2023
  1168                                  tLWait:
  1169                                  	; 18/11/2024
  1170 0000081E 803D[8C800000]00        	cmp	byte [stopped], 0
  1171                                  	; 24/11/2024
  1172 00000825 7641                    	jna	short tL1
  1173                                  
  1174                                  tLWait@:	; 21/11/2024
  1175                                  	;;;
  1176                                  	; 25/12/2024
  1177                                  	; 09/12/2024
  1178 00000827 803D[8C800000]03        	cmp	byte [stopped], 3
  1179 0000082E 0F838B000000            	jnb	_exitt_
  1180                                  	;;;
  1181 00000834 E8A41C0000              	call	checkUpdateEvents
  1182 00000839 0F8280000000            	jc	_exitt_
  1183                                  	;;;
  1184                                  	; 25/12/2024
  1185                                  	; 29/11/2024
  1186 0000083F 803D[9C800000]4E        	cmp	byte [command], 'N'
  1187 00000846 7477                    	je	_exitt_
  1188 00000848 803D[9C800000]50        	cmp	byte [command], 'P'
  1189 0000084F 746E                    	je	_exitt_
  1190                                  	;;;
  1191 00000851 803D[8D800000]30        	cmp	byte [tLO], '0'
  1192 00000858 74C4                    	je	short tLWait
  1193 0000085A E86A000000              	call	tLZ
  1194 0000085F C605[8D800000]30        	mov	byte [tLO], '0'
  1195 00000866 EBB6                    	jmp	short tLWait
  1196                                  tL1:
  1197                                  	; 27/11/2024
  1198                                  	; Check AC'97 interrupt status
  1199 00000868 803D[33810000]00        	cmp	byte [SRB], 0
  1200 0000086F 7709                    	ja	short tL3
  1201                                  tL2:
  1202 00000871 E8671C0000              	call	checkUpdateEvents
  1203 00000876 7247                    	jc	_exitt_
  1204 00000878 EBA4                    	jmp	short tLWait
  1205                                  tL3:
  1206 0000087A 8035[99800000]01        	xor	byte [half_buffer], 1
  1207                                  	; 07/12/2024
  1208 00000881 C605[33810000]00        	mov	byte [SRB], 0
  1209                                  
  1210                                  	; 07/12/2024
  1211 00000888 BF[00900000]            	mov	edi, audio_buffer
  1212                                  	;call	loadFromFile
  1213                                  	; 18/11/2023
  1214                                  	;call	word [loadfromwavfile]
  1215                                  	; 01/12/2024
  1216 0000088D FF15[40810000]          	call	dword [loadfromwavfile]
  1217 00000893 722A                    	jc	short _exitt_	; end of file
  1218                                  
  1219                                  	; 07/12/2024
  1220                                  	;;;;
  1221                                  	; bh = 16 : update (current, first) dma half buffer
  1222                                  	; bl = 0  : then switch to the other half buffer
  1223                                  	sys	_audio, 1000h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000895 BB00100000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 0000089A B820000000          <1>  mov eax, %1
   100                              <1> 
   101 0000089F CD40                <1>  int 40h
  1224                                  	;;;;
  1225                                  
  1226                                  	; 26/11/2024
  1227 000008A1 A0[99800000]            	mov	al, [half_buffer]
  1228 000008A6 0431                    	add	al, '1'
  1229                                  	; 19/11/2024
  1230 000008A8 A2[8D800000]            	mov	[tLO], al
  1231 000008AD E819000000              	call	tL0
  1232                                  
  1233                                  	; 24/11/2024
  1234                                  	; 14/11/2024
  1235                                  	;mov	ax, [count]
  1236                                  	;add	[LoadedDataBytes], ax
  1237                                  	;adc	word [LoadedDataBytes+2], 0
  1238                                  	; 01/12/2024
  1239 000008B2 A1[54810000]            	mov	eax, [count]
  1240 000008B7 0105[58810000]          	add	[LoadedDataBytes], eax
  1241                                  
  1242                                  	; 07/12/2024 (playwav9.s)
  1243                                  	; 27/11/2024 (playwav9.asm)
  1244 000008BD EBB2                    	jmp	short tL2
  1245                                  
  1246                                  _exitt_:
  1247                                  	; 07/12/2024
  1248                                  	; Stop Playing
  1249                                  	;mov	byte [stopped], 2
  1250                                  	;sys	_audio, 0700h
  1251 000008BF E8DD1B0000              	call	ac97_stop
  1252                                  
  1253                                  	;;;
  1254                                  	; 14/11/2024
  1255 000008C4 E84B200000              	call	UpdateProgressBar
  1256                                  	;;;
  1257                                  
  1258                                  	; 18/11/2024
  1259                                  tLZ:
  1260                                  	; 30/05/2024
  1261 000008C9 B030                    	mov	al, '0'
  1262                                  
  1263                                  	;add	al, '0'
  1264                                  	;call	tL0
  1265                                  	;
  1266                                  	;retn
  1267                                  	; 06/11/2023
  1268                                  	;jmp	short tL0
  1269                                  	;retn
  1270                                  
  1271                                  	; 06/11/2023
  1272                                  tL0:
  1273                                  	; 29/05/2024 (TRDOS 386)
  1274                                  	; 08/11/2023
  1275                                  	; 05/11/2023
  1276                                  	; 17/02/2017 - Buffer switch test (temporary)
  1277                                  	; 06/11/2023
  1278                                  	; al = buffer indicator ('1', '2' or '0' -stop- )
  1279                                  
  1280                                  	; 22/12/2024 (graphics mode modification)
  1281                                  	; (640*480, 256 colors)
  1282                                  	;;;
  1283                                  	;mov	ebp, 16
  1284 000008CB BD0E000000              	mov	ebp, 14
  1285 000008D0 8B3D[7C760000]          	mov	edi, [LFB_ADDR]
  1286 000008D6 0FB6F0                  	movzx	esi, al
  1287 000008D9 C1E604                  	shl	esi, 4 ; * 16
  1288 000008DC 81C6[34510000]          	add	esi, fontbuff2
  1289                                  tL0_1:
  1290 000008E2 BA08000000              	mov	edx, 8 ; 8 pixels (8*16 pixel font)
  1291 000008E7 8A26                    	mov	ah, [esi]
  1292                                  tL0_2:
  1293 000008E9 B00C                    	mov	al, 0Ch ; red
  1294 000008EB D0E4                    	shl	ah, 1
  1295 000008ED 7302                    	jnc	short tL0_3
  1296 000008EF B00E                    	mov	al, 0Eh ; yellow
  1297                                  tL0_3:
  1298 000008F1 AA                      	stosb
  1299 000008F2 4A                      	dec	edx
  1300 000008F3 75F4                    	jnz	short tL0_2
  1301 000008F5 4D                      	dec	ebp
  1302 000008F6 7409                    	jz	short tL0_4
  1303 000008F8 81C778020000            	add	edi, 640-8 ; next line
  1304 000008FE 46                      	inc	esi
  1305 000008FF EBE1                    	jmp	short tL0_1
  1306                                  tL0_4:
  1307                                  	;;;
  1308 00000901 C3                      	retn
  1309                                  
  1310                                  ; -------------------------------------------
  1311                                  
  1312                                  	; 26/12/2024
  1313                                  	; 07/12/2024
  1314                                  SetMasterVolume:
  1315 00000902 A0[15270000]            	mov	al, [volume]
  1316                                  	; 26/12/2024
  1317                                  	;mov	[volume], al  ; max = 0, min = 31
  1318                                  
  1319 00000907 B41F                    	mov	ah, 31
  1320 00000909 28C4                    	sub	ah, al
  1321 0000090B 88E0                    	mov	al, ah
  1322                                  
  1323                                  	; Set Master Volume Level (BL=0 or 80h)
  1324                                  	; 	for next playing (BL>=80h)
  1325                                  	;sys	_audio, 0B80h, eax
  1326                                  	sys	_audio, 0B00h, eax
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 0000090D BB000B0000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00000912 89C1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000914 B820000000          <1>  mov eax, %1
   100                              <1> 
   101 00000919 CD40                <1>  int 40h
  1327                                  	
  1328                                  setvolume_ok:
  1329                                  ac97_not_detected:
  1330 0000091B C3                      	retn
  1331                                  
  1332                                  ; -------------------------------------------
  1333                                  
  1334                                  	; 07/12/2024 (playwav9.s)
  1335                                  DetectAC97:
  1336                                  DetectICH:
  1337                                  	; 25/11/2023 (playwav8.s)
  1338                                  	; Detect (BH=1) AC'97 (BL=2) Audio Device
  1339                                          sys	_audio, 0102h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 0000091C BB02010000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000921 B820000000          <1>  mov eax, %1
   100                              <1> 
   101 00000926 CD40                <1>  int 40h
  1340                                  	;jnc	short d_ac97_@
  1341                                  	;retn
  1342 00000928 72F1                    	jc	short ac97_not_detected
  1343                                  d_ac97_@:
  1344                                  	; 07/12/2024 (playwav9.s)
  1345                                  	; 06/06/2017
  1346                                  	sys	_audio, 0E00h ; get audio controller info
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 0000092A BB000E0000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 0000092F B820000000          <1>  mov eax, %1
   100                              <1> 
   101 00000934 CD40                <1>  int 40h
  1347 00000936 0F8236FDFFFF            	jc	error_exit ; 25/11/2023
  1348                                  
  1349                                  	;cmp	ah, 2 ; ICH ? (Intel AC'97 Audio Controller)
  1350                                  	;jne	_dev_not_ready	
  1351                                  
  1352                                  	; EAX = IRQ Number in AL
  1353                                  	;	Audio Device Number in AH 
  1354                                  	; EBX = DEV/VENDOR ID
  1355                                  	;       (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV)
  1356                                  	; ECX = BUS/DEV/FN 
  1357                                  	;       (00000000BBBBBBBBDDDDDFFF00000000)
  1358                                  	; EDX = NABMBAR/NAMBAR (for AC97)
  1359                                  	;      (Low word, DX = NAMBAR address)
  1360                                  	; EDX = Base IO Addr (DX) for SB16 & VT8233
  1361                                  
  1362 0000093C 891D[38810000]          	mov	[dev_vendor], ebx
  1363 00000942 890D[34810000]          	mov	[bus_dev_fn], ecx
  1364                                  
  1365 00000948 668915[3C810000]                mov     [NAMBAR], dx			; save audio mixer base addr
  1366                                  	;shr	edx, 16
  1367                                          ;mov    [NABMBAR], dx			; save bus master base addr
  1368 0000094F 8915[3C810000]          	mov	[NAMBAR], edx
  1369                                  
  1370 00000955 A2[CF800000]            	mov	[ac97_int_ln_reg], al
  1371                                  
  1372                                  	; 07/12/2024
  1373                                  	; 01/06/2024
  1374                                  	; 25/11/2023
  1375                                  	; Get AC'97 Codec info
  1376                                  	; (Function 14, sub function 1)
  1377                                  	sys	_audio, 0E01h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 0000095A BB010E0000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 0000095F B820000000          <1>  mov eax, %1
   100                              <1> 
   101 00000964 CD40                <1>  int 40h
  1378                                  	; Save Variable Rate Audio support bit
  1379 00000966 2401                    	and	al, 1
  1380 00000968 A2[9A800000]            	mov	[VRA], al
  1381                                  
  1382                                  	;clc
  1383                                  
  1384 0000096D C3                      	retn
  1385                                  
  1386                                  ; ----------------------------------
  1387                                  	
  1388                                  	; 26/12/2024
  1389                                  	; 07/12/2024
  1390                                  	; 01/12/2024
  1391                                  	; 14/11/2024
  1392                                  	; INPUT: ds:dx = file name address
  1393                                  	; OUTPUT: [filehandle] = ; -1 = not open
  1394                                  openFile:
  1395                                  	; 26/12/2024
  1396                                  	; 01/12/2024
  1397                                  	sys	_open, edx, 0
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 0000096E 89D3                <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00000970 B900000000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000975 B805000000          <1>  mov eax, %1
   100                              <1> 
   101 0000097A CD40                <1>  int 40h
  1398                                  	; 07/12/2024
  1399                                  	;sys	_open, wav_file_name, 0
  1400 0000097C 7305                    	jnc	short _of1
  1401                                  
  1402 0000097E B8FFFFFFFF              	mov	eax, -1
  1403                                  	; cf = 1 -> not found or access error
  1404                                  _of1:
  1405 00000983 A3[D0800000]            	mov	[filehandle], eax
  1406 00000988 C3                      	retn
  1407                                  
  1408                                  ; ----------------------------------
  1409                                  
  1410                                  ; close the currently open file
  1411                                  
  1412                                  	; 01/12/2024
  1413                                  	; 14/11/2024
  1414                                  	; INPUT: [filehandle] ; -1 = not open
  1415                                  	; OUTPUT: none
  1416                                  closeFile:
  1417 00000989 833D[D0800000]FF        	cmp	dword [filehandle], -1
  1418 00000990 740D                    	jz	short _cf1
  1419                                  	; 01/12/2024
  1420                                  	sys	_close, [filehandle]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000992 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000998 B806000000          <1>  mov eax, %1
   100                              <1> 
   101 0000099D CD40                <1>  int 40h
  1421                                  	;mov 	dword [filehandle], -1
  1422                                  _cf1:
  1423 0000099F C3                      	retn
  1424                                  
  1425                                  ; ----------------------------------
  1426                                  
  1427                                  	; 05/02/2025
  1428                                  	; 01/12/2024
  1429                                  	; 14/11/2024 - Erdogan Tan
  1430                                  getWAVParameters:
  1431                                  ; reads WAV file header(s) (44 bytes) from the .wav file.
  1432                                  ; entry: none - assumes file is already open
  1433                                  ; exit: ax = sample rate (11025, 22050, 44100, 48000)
  1434                                  ;	cx = number of channels (mono=1, stereo=2)
  1435                                  ;	dx = bits per sample (8, 16)
  1436                                  ;	bx = number of bytes per sample (1 to 4)
  1437                                  
  1438                                          ;mov	dx, WAVFILEHEADERbuff
  1439                                  	;mov	bx, [filehandle]
  1440                                          ;mov	cx, 44			; 44 bytes
  1441                                  	;mov	ah, 3Fh
  1442                                          ;int	21h
  1443                                  	;jc	short gwavp_retn
  1444                                  	; 01/12/2024 (TRDOS 386)
  1445                                  	sys	_read, [filehandle], WAVFILEHEADERbuff, 44
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000009A0 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 000009A6 B9[A0800000]        <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 000009AB BA2C000000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000009B0 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 000009B5 CD40                <1>  int 40h
  1446 000009B7 7228                    	jc	short gwavp_retn
  1447                                  
  1448 000009B9 83F82C                  	cmp	eax, 44
  1449 000009BC 7223                    	jb	short gwavp_retn
  1450                                  
  1451 000009BE 813D[A8800000]5741-     	cmp	dword [RIFF_Format], 'WAVE'
  1451 000009C6 5645               
  1452 000009C8 7516                    	jne	short gwavp_stc_retn
  1453                                  
  1454 000009CA 66833D[B4800000]01      	cmp	word [WAVE_AudioFormat], 1 ; Offset 20, must be 1 (= PCM)
  1455                                  	; 05/02/2025
  1456 000009D2 750C                    	jne	short gwavp_stc_retn
  1457                                  	;je	short gwavp_retn ; 15/11/2024
  1458                                  
  1459                                  	; 05/02/2025
  1460                                  	; (Open MPT creates wav files with a new type header,
  1461                                  	;  this program can not use the new type
  1462                                  	;  because of 'data' offset is not at DATA_SubchunkID.)
  1463                                  	; ((GoldWave creates common type wav file.))
  1464 000009D4 813D[C4800000]6461-     	cmp	dword [DATA_SubchunkID], 'data'
  1464 000009DC 7461               
  1465 000009DE 7401                    	je	short gwavp_retn
  1466                                  
  1467                                  	; 15/11/2024
  1468                                  	;mov	cx, [WAVE_NumChannels]	; return num of channels in CX
  1469                                          ;mov    ax, [WAVE_SampleRate]	; return sample rate in AX
  1470                                  	;mov	dx, [WAVE_BitsPerSample] 
  1471                                  					; return bits per sample value in DX
  1472                                  	;mov	bx, [WAVE_BlockAlign]	; return bytes per sample in BX
  1473                                  ;gwavp_retn:
  1474                                          ;retn
  1475                                  
  1476                                  gwavp_stc_retn:
  1477 000009E0 F9                      	stc
  1478                                  gwavp_retn:
  1479 000009E1 C3                      	retn
  1480                                  
  1481                                  ; --------------------------------------------------------
  1482                                  ; 07/12/2024
  1483                                  ; --------------------------------------------------------
  1484                                  ; ref: playwav8.s (04/06/2024)
  1485                                  
  1486                                  audio_int_handler:
  1487                                  	; 18/08/2020 (14/10/2020, 'wavplay2.s')
  1488                                  
  1489                                  	; 07/12/2024
  1490                                  	;mov	al, [stopped]
  1491                                  	;cmp	al, 2
  1492                                  	;je	short _callback_retn
  1493                                  
  1494                                  	; 18/08/2020
  1495                                  	;mov	byte [SRB], 1
  1496                                  	; 07/12/2024
  1497 000009E2 FE05[33810000]          	inc	byte [SRB]
  1498                                  
  1499                                  ;_callback_retn:
  1500                                  	sys	_rele ; return from callback service 
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91                              <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000009E8 B827000000          <1>  mov eax, %1
   100                              <1> 
   101 000009ED CD40                <1>  int 40h
  1501                                  	; we must not come here !
  1502                                  	sys	_exit
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91                              <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000009EF B801000000          <1>  mov eax, %1
   100                              <1> 
   101 000009F4 CD40                <1>  int 40h
  1503                                  
  1504                                  ; --------------------------------------------------------
  1505                                  ; 07/12/2024
  1506                                  ; --------------------------------------------------------
  1507                                  
  1508                                  ; /////
  1509                                  	; 14/12/2024
  1510                                  	; 07/12/2024
  1511                                  	; 01/12/2024
  1512                                  	; 30/05/2024 (ich_wav4.asm, 19/05/2024)
  1513                                  loadFromFile:
  1514                                  	; 07/11/2023
  1515                                  
  1516 000009F6 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1517                                  					; last of the file?
  1518 000009FD 7402                    	jz	short lff_0		; no
  1519 000009FF F9                      	stc
  1520 00000A00 C3                      	retn
  1521                                  
  1522                                  lff_0:
  1523                                  	; 07/12/2024
  1524                                  	; 26/11/2023 (playwav8.s)
  1525                                  	;mov	edi, audio_buffer
  1526                                  
  1527                                  	; 01/12/2024 (TRDOS 386)
  1528                                  	; edi = audio buffer address
  1529                                  
  1530                                  	; 14/12/2024
  1531                                  	; 01/12/2024
  1532                                  	; 17/11/2024
  1533                                  	;mov	ebx, [filehandle]
  1534                                  	; 02/12/2024
  1535                                  	;mov	edx, [loadsize] 
  1536                                  
  1537                                  	; 17/11/2024
  1538 00000A01 803D[32810000]00        	cmp	byte [fbs_shift], 0
  1539 00000A08 7677                    	jna	short lff_1 ; stereo, 16 bit
  1540                                  
  1541                                  lff_2:
  1542                                  	; 01/12/2024
  1543 00000A0A BE[00900100]            	mov	esi, temp_buffer 
  1544                                  	; 14/12/2024
  1545                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000A0F 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00000A15 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00000A17 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000A1D B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00000A22 CD40                <1>  int 40h
  1546 00000A24 0F8289000000            	jc	lff_4 ; error !
  1547                                  
  1548                                  	; 01/12/2024
  1549                                  	; 14/11/2024
  1550 00000A2A A3[54810000]            	mov	[count], eax
  1551                                  
  1552                                  	; 01/12/2024
  1553 00000A2F 21C0                    	and	eax, eax
  1554                                  	;jz	short lff_3
  1555                                  	; 14/12/2024
  1556 00000A31 0F8485000000            	jz	lff_10
  1557                                  
  1558 00000A37 8A1D[32810000]          	mov	bl, [fbs_shift]
  1559                                  
  1560                                  	; 14/12/2024
  1561 00000A3D 89FA                    	mov	edx, edi ; audio buffer start address
  1562                                  
  1563                                  	; 01/12/2024
  1564 00000A3F 89C1                    	mov	ecx, eax
  1565 00000A41 803D[C2800000]08        	cmp	byte [WAVE_BitsPerSample], 8 ; bits per sample (8 or 16)
  1566 00000A48 751E                    	jne	short lff_7 ; 16 bit samples
  1567                                  	; 8 bit samples
  1568 00000A4A FECB                    	dec	bl  ; shift count, 1 = stereo, 2 = mono
  1569 00000A4C 740E                    	jz	short lff_6 ; 8 bit, stereo
  1570                                  	; 01/12/2024 (32bit registers)
  1571                                  lff_5:
  1572                                  	; mono & 8 bit
  1573 00000A4E AC                      	lodsb
  1574 00000A4F 2C80                    	sub	al, 80h ; 08/11/2023
  1575 00000A51 C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
  1576 00000A54 66AB                    	stosw	; left channel
  1577 00000A56 66AB                    	stosw	; right channel
  1578 00000A58 E2F4                    	loop	lff_5
  1579 00000A5A EB16                    	jmp	short lff_9
  1580                                  lff_6:
  1581                                  	; stereo & 8 bit
  1582 00000A5C AC                      	lodsb
  1583 00000A5D 2C80                    	sub	al, 80h ; 08/11/2023
  1584 00000A5F C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
  1585 00000A62 66AB                    	stosw
  1586 00000A64 E2F6                    	loop	lff_6
  1587 00000A66 EB0A                    	jmp	short lff_9
  1588                                  lff_7:
  1589 00000A68 D1E9                    	shr	ecx, 1 ; word count
  1590                                  lff_8:
  1591 00000A6A 66AD                    	lodsw
  1592 00000A6C 66AB                    	stosw	; left channel
  1593 00000A6E 66AB                    	stosw	; right channel
  1594 00000A70 E2F8                    	loop	lff_8
  1595                                  lff_9:
  1596                                  	; 14/12/2024
  1597 00000A72 89F8                    	mov	eax, edi
  1598 00000A74 8B0D[48810000]          	mov	ecx, [buffersize] 
  1599 00000A7A 01D1                    	add	ecx, edx ; + buffer start address
  1600 00000A7C 39C8                    	cmp	eax, ecx	
  1601 00000A7E 7225                    	jb	short lff_3
  1602 00000A80 C3                      	retn
  1603                                  	
  1604                                  lff_1:  
  1605                                  	; 07/12/2024
  1606                                  	; 01/12/2024
  1607                                  	;sys 	_read, [filehandle], esi, [loadsize] ; edx
  1608                                  	; 14/12/2024
  1609                                  	sys 	_read, [filehandle], edi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000A81 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00000A87 89F9                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00000A89 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000A8F B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00000A94 CD40                <1>  int 40h
  1610                                  	; 07/11/2023
  1611 00000A96 721B                    	jc	short lff_4 ; error !
  1612                                  
  1613                                  	; 01/12/2024
  1614                                  	; 14/11/2024
  1615 00000A98 A3[54810000]            	mov	[count], eax
  1616                                  
  1617                                  	; 02/12/2024
  1618 00000A9D 39D0                    	cmp	eax, edx ; cmp eax, [loadsize]	
  1619 00000A9F 7411                    	je	short endLFF
  1620                                  	; edi = buffer (start) address
  1621 00000AA1 01C7                    	add	edi, eax
  1622 00000AA3 89D1                    	mov	ecx, edx
  1623                                  lff_3:
  1624                                  	;call	padfill			; blank pad the remainder
  1625                                  	; 21/12/2024
  1626                                  padfill:
  1627                                  	; 14/12/2024
  1628                                  	; 01/12/2024 (TRDOS 386, 32bit registers)
  1629                                  	; 17/11/2024
  1630                                  	;   di = offset (to be filled with ZEROs)
  1631                                  	;   bp = buffer segment
  1632                                  	;   ax = di = number of bytes loaded
  1633                                  	;   cx = buffer size (> loaded bytes)	
  1634                                  	; 07/11/2023
  1635                                  	; 06/11/2023
  1636                                  	; 17/02/2017
  1637                                  	; 01/12/2024
  1638 00000AA5 29C1                    	sub	ecx, eax
  1639                                  	; 01/12/2024
  1640                                  	; 25/11/2024
  1641 00000AA7 31C0                    	xor	eax, eax
  1642                                  	; 14/12/2024
  1643 00000AA9 F3AA                    	rep	stosb
  1644                                  	; 21/12/2024
  1645                                  	;retn
  1646                                  	; ----------
  1647                                          ;clc				; don't exit with CY yet.
  1648 00000AAB 800D[CE800000]01                or	byte [flags], ENDOFFILE	; end of file flag
  1649                                  endLFF:
  1650 00000AB2 C3                              retn
  1651                                  lff_4:
  1652                                  	; 08/11/2023
  1653 00000AB3 B021                    	mov	al, '!'  ; error
  1654 00000AB5 E811FEFFFF              	call	tL0
  1655                                  
  1656                                  	; 01/12/2024
  1657 00000ABA 31C0                    	xor	eax, eax
  1658                                  lff_10:
  1659                                  	; 14/12/2024
  1660 00000ABC 8B0D[48810000]          	mov	ecx, [buffersize]
  1661 00000AC2 EBE1                    	jmp	short lff_3
  1662                                  
  1663                                  ; /////
  1664                                  
  1665                                  ; --------------------------------------------------------
  1666                                  ; --------------------------------------------------------
  1667                                  	
  1668                                  write_audio_dev_info:
  1669                                  	; 30/05/2024
  1670                                       	;sys_msg msgAudioCardInfo, 0Fh
  1671                                  	; 01/12/2024
  1672                                  	sys 	_msg, msgAudioCardInfo, 255, 0Fh
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000AC4 BB[012C0000]        <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00000AC9 B9FF000000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00000ACE BA0F000000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000AD3 B823000000          <1>  mov eax, %1
   100                              <1> 
   101 00000AD8 CD40                <1>  int 40h
  1673 00000ADA C3                      	retn
  1674                                  
  1675                                  ; --------------------------------------------------------
  1676                                  
  1677                                  write_ac97_pci_dev_info:
  1678                                  	; 19/11/2024
  1679                                  	; 30/05/2024
  1680                                  	; 06/06/2017
  1681                                  	; 03/06/2017
  1682                                  	; BUS/DEV/FN
  1683                                  	;	00000000BBBBBBBBDDDDDFFF00000000
  1684                                  	; DEV/VENDOR
  1685                                  	;	DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV
  1686                                  
  1687 00000ADB A1[38810000]            	mov	eax, [dev_vendor]
  1688 00000AE0 31DB                    	xor	ebx, ebx
  1689 00000AE2 88C3                    	mov	bl, al
  1690 00000AE4 88DA                    	mov	dl, bl
  1691 00000AE6 80E30F                  	and	bl, 0Fh
  1692 00000AE9 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1693 00000AEF A2[6F2D0000]            	mov	[msgVendorId+3], al
  1694 00000AF4 88D3                    	mov	bl, dl
  1695 00000AF6 C0EB04                  	shr	bl, 4
  1696 00000AF9 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1697 00000AFF A2[6E2D0000]            	mov	[msgVendorId+2], al
  1698 00000B04 88E3                    	mov	bl, ah
  1699 00000B06 88DA                    	mov	dl, bl
  1700 00000B08 80E30F                  	and	bl, 0Fh
  1701 00000B0B 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1702 00000B11 A2[6D2D0000]            	mov	[msgVendorId+1], al
  1703 00000B16 88D3                    	mov	bl, dl
  1704 00000B18 C0EB04                  	shr	bl, 4
  1705 00000B1B 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1706 00000B21 A2[6C2D0000]            	mov	[msgVendorId], al
  1707 00000B26 C1E810                  	shr	eax, 16
  1708 00000B29 88C3                    	mov	bl, al
  1709 00000B2B 88DA                    	mov	dl, bl
  1710 00000B2D 80E30F                  	and	bl, 0Fh
  1711 00000B30 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1712 00000B36 A2[802D0000]            	mov	[msgDevId+3], al
  1713 00000B3B 88D3                    	mov	bl, dl
  1714 00000B3D C0EB04                  	shr	bl, 4
  1715 00000B40 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1716 00000B46 A2[7F2D0000]            	mov	[msgDevId+2], al
  1717 00000B4B 88E3                    	mov	bl, ah
  1718 00000B4D 88DA                    	mov	dl, bl
  1719 00000B4F 80E30F                  	and	bl, 0Fh
  1720 00000B52 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1721 00000B58 A2[7E2D0000]            	mov	[msgDevId+1], al
  1722 00000B5D 88D3                    	mov	bl, dl
  1723 00000B5F C0EB04                  	shr	bl, 4
  1724 00000B62 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1725 00000B68 A2[7D2D0000]            	mov	[msgDevId], al
  1726                                  
  1727 00000B6D A1[34810000]            	mov	eax, [bus_dev_fn]
  1728 00000B72 C1E808                  	shr	eax, 8
  1729 00000B75 88C3                    	mov	bl, al
  1730 00000B77 88DA                    	mov	dl, bl
  1731 00000B79 80E307                  	and	bl, 7 ; bit 0,1,2
  1732 00000B7C 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1733 00000B82 A2[A52D0000]            	mov	[msgFncNo+1], al
  1734 00000B87 88D3                    	mov	bl, dl
  1735 00000B89 C0EB03                  	shr	bl, 3
  1736 00000B8C 88DA                    	mov	dl, bl
  1737 00000B8E 80E30F                  	and	bl, 0Fh
  1738 00000B91 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1739 00000B97 A2[972D0000]            	mov	[msgDevNo+1], al
  1740 00000B9C 88D3                    	mov	bl, dl
  1741 00000B9E C0EB04                  	shr	bl, 4
  1742 00000BA1 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1743 00000BA7 A2[962D0000]            	mov	[msgDevNo], al
  1744 00000BAC 88E3                    	mov	bl, ah
  1745 00000BAE 88DA                    	mov	dl, bl
  1746 00000BB0 80E30F                  	and	bl, 0Fh
  1747 00000BB3 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1748 00000BB9 A2[8B2D0000]            	mov	[msgBusNo+1], al
  1749 00000BBE 88D3                    	mov	bl, dl
  1750 00000BC0 C0EB04                  	shr	bl, 4
  1751 00000BC3 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1752 00000BC9 A2[8A2D0000]            	mov	[msgBusNo], al
  1753                                  
  1754                                  	;mov	ax, [ac97_NamBar]
  1755 00000BCE 66A1[3C810000]          	mov	ax, [NAMBAR]
  1756 00000BD4 88C3                    	mov	bl, al
  1757 00000BD6 88DA                    	mov	dl, bl
  1758 00000BD8 80E30F                  	and	bl, 0Fh
  1759 00000BDB 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1760 00000BE1 A2[B52D0000]            	mov	[msgNamBar+3], al
  1761 00000BE6 88D3                    	mov	bl, dl
  1762 00000BE8 C0EB04                  	shr	bl, 4
  1763 00000BEB 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1764 00000BF1 A2[B42D0000]            	mov	[msgNamBar+2], al
  1765 00000BF6 88E3                    	mov	bl, ah
  1766 00000BF8 88DA                    	mov	dl, bl
  1767 00000BFA 80E30F                  	and	bl, 0Fh
  1768 00000BFD 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1769 00000C03 A2[B32D0000]            	mov	[msgNamBar+1], al
  1770 00000C08 88D3                    	mov	bl, dl
  1771 00000C0A C0EB04                  	shr	bl, 4
  1772 00000C0D 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1773 00000C13 A2[B22D0000]            	mov	[msgNamBar], al
  1774                                  
  1775                                  	;mov	ax, [ac97_NabmBar]
  1776 00000C18 66A1[3E810000]          	mov	ax, [NABMBAR]
  1777 00000C1E 88C3                    	mov	bl, al
  1778 00000C20 88DA                    	mov	dl, bl
  1779 00000C22 80E30F                  	and	bl, 0Fh
  1780 00000C25 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1781 00000C2B A2[C52D0000]            	mov	[msgNabmBar+3], al
  1782 00000C30 88D3                    	mov	bl, dl
  1783 00000C32 C0EB04                  	shr	bl, 4
  1784 00000C35 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1785 00000C3B A2[C42D0000]            	mov	[msgNabmBar+2], al
  1786 00000C40 88E3                    	mov	bl, ah
  1787 00000C42 88DA                    	mov	dl, bl
  1788 00000C44 80E30F                  	and	bl, 0Fh
  1789 00000C47 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1790 00000C4D A2[C32D0000]            	mov	[msgNabmBar+1], al
  1791 00000C52 88D3                    	mov	bl, dl
  1792 00000C54 C0EB04                  	shr	bl, 4
  1793 00000C57 8A83[282D0000]          	mov	al, [hex_chars+ebx]
  1794 00000C5D A2[C22D0000]            	mov	[msgNabmBar], al
  1795                                  
  1796 00000C62 31C0                    	xor	eax, eax
  1797 00000C64 A0[CF800000]            	mov	al, [ac97_int_ln_reg]
  1798 00000C69 B10A                    	mov	cl, 10
  1799 00000C6B F6F1                    	div	cl
  1800                                  	; 23/11/2024
  1801                                  	;add	[msgIRQ], ax
  1802 00000C6D 66053030                	add	ax, 3030h
  1803 00000C71 66A3[CE2D0000]          	mov	[msgIRQ], ax
  1804                                  	;and	al, al
  1805 00000C77 3C30                    	cmp	al, 30h
  1806 00000C79 750D                    	jnz	short _w_ac97imsg_
  1807 00000C7B A0[CF2D0000]            	mov	al, byte [msgIRQ+1]
  1808 00000C80 B420                    	mov	ah, ' '
  1809 00000C82 66A3[CE2D0000]          	mov	[msgIRQ], ax
  1810                                  _w_ac97imsg_:
  1811                                  	; 19/11/2024
  1812 00000C88 E86E1D0000              	call 	clear_window
  1813 00000C8D B60D                    	mov	dh, 13
  1814 00000C8F B200                    	mov	dl, 0
  1815 00000C91 E8801A0000              	call	setCursorPosition
  1816                                  	;;;
  1817                                  	; 21/12/2024
  1818 00000C96 BD[392D0000]            	mov	ebp, msgAC97Info ; message
  1819                                  	; 22/12/2024
  1820                                  	;mov	cl, 07h ; color 
  1821 00000C9B E81F000000              	call	sys_gmsg
  1822                                  	;
  1823                                  	; 30/05/2024
  1824                                  write_VRA_info:
  1825                                  	; 21/12/2024
  1826 00000CA0 BD[D32D0000]            	mov	ebp, msgVRAheader ; message
  1827                                  	;mov	cl, 07h ; color 
  1828 00000CA5 E815000000              	call	sys_gmsg
  1829                                  	;
  1830 00000CAA 803D[9A800000]00        	cmp	byte [VRA], 0
  1831 00000CB1 7607                    	jna	short _w_VRAi_no
  1832                                  _w_VRAi_yes:
  1833 00000CB3 BD[E22D0000]            	mov	ebp, msgVRAyes
  1834 00000CB8 EB05                    	jmp	short _w_VRAi_yn_msg
  1835                                  _w_VRAi_no:
  1836 00000CBA BD[E82D0000]            	mov	ebp, msgVRAno
  1837                                  _w_VRAi_yn_msg:
  1838                                  	;mov	cl, 07h ; color 
  1839                                  	;call	sys_msg
  1840                                  	;retn
  1841                                  	;jmp	short sys_gmsg
  1842                                  	;;;
  1843                                  ; --------------------------------------------------------
  1844                                  
  1845                                  	; 22/12/2024
  1846                                  	;;;
  1847                                  	; 21/12/2024
  1848                                  	; (write message in VGA/VESA-VBE mode)
  1849                                  sys_gmsg:
  1850 00000CBF 8A4500                  	mov	al, [ebp]
  1851 00000CC2 20C0                    	and	al, al
  1852 00000CC4 7458                    	jz	short sys_gmsg_ok
  1853 00000CC6 3C20                    	cmp	al, 20h
  1854 00000CC8 731E                    	jnb	short sys_gmsg_3
  1855 00000CCA 3C0D                    	cmp	al, CR ; 13
  1856 00000CCC 750C                    	jne	short sys_gmsg_2
  1857                                  	; carriege return, move cursor to column 0
  1858 00000CCE 66C705[80760000]00-     	mov	word [screenpos], 0
  1858 00000CD6 00                 
  1859                                  sys_gmsg_1:
  1860 00000CD7 45                      	inc	ebp
  1861 00000CD8 EBE5                    	jmp	short sys_gmsg
  1862                                  sys_gmsg_2:
  1863 00000CDA 3C0A                    	cmp	al, LF ; 10
  1864 00000CDC 7540                    	jne	short sys_gmsg_ok ; 22/12/2024
  1865                                  	; line feed, move cursor to next row
  1866 00000CDE 668305[82760000]10      	add	word [screenpos+2], 16
  1867 00000CE6 EBEF                    	jmp	short sys_gmsg_1
  1868                                  sys_gmsg_3:
  1869 00000CE8 8B35[80760000]          	mov	esi, [screenpos]
  1870                                  		; hw = (cursor) row
  1871                                  		; si = (cursor) column
  1872 00000CEE B907000000              	mov	ecx, 07h ; gray (light)
  1873 00000CF3 E8D71B0000              	call	write_character
  1874 00000CF8 83C608                  	add	esi, 8
  1875                                  	;;;
  1876 00000CFB 6681FE8002              	cmp	si, 640
  1877 00000D00 7213                    	jb	short sys_gmsg_5
  1878 00000D02 C1EE10                  	shr	esi, 16
  1879 00000D05 6683C610                	add	si, 16
  1880 00000D09 6681FEE001              	cmp	si, 480
  1881 00000D0E 7202                    	jb	short sys_gmsg_4
  1882 00000D10 31F6                    	xor	esi, esi
  1883                                  sys_gmsg_4:
  1884 00000D12 C1E610                  	shl	esi, 16
  1885                                  	;;;
  1886                                  sys_gmsg_5:
  1887 00000D15 8935[80760000]          	mov	[screenpos], esi
  1888 00000D1B 45                      	inc	ebp
  1889 00000D1C EBA1                    	jmp	short sys_gmsg
  1890                                  sys_gmsg_ok:
  1891 00000D1E C3                      	retn
  1892                                  	;;;
  1893                                  
  1894                                  ; --------------------------------------------------------
  1895                                  
  1896                                  ; 05/02/2025 - vgaplay.s - cgaplay.s - cgaplay1.s - vgaplay2.s
  1897                                  ; 02/02/2025 - playwav9.s - ac97play.s - dplaywav.s - dplayw2.s
  1898                                  ; 29/12/2024 - vgaplay3.s
  1899                                  ; 18/12/2024
  1900                                  ; 07/12/2024 - playwav9.s
  1901                                  ; 01/12/2024 - ac97play.s
  1902                                  ; 29/05/2024
  1903                                  ; 26/11/2023
  1904                                  ; 25/11/2023 - playwav6.s (32 bit registers, TRDOS 386 adaption)
  1905                                  ; 15/11/2023 - PLAYWAV5.COM, ich_wav5.asm
  1906                                  ; 14/11/2023
  1907                                  ; 13/11/2023 - Erdogan Tan - (VRA, sample rate conversion)
  1908                                  ; --------------------------------------------------------
  1909                                  
  1910                                  ;;Note:	At the end of every buffer load,
  1911                                  ;;	during buffer switch/swap, there will be discontinuity
  1912                                  ;;	between the last converted sample and the 1st sample
  1913                                  ;;	of the next buffer.
  1914                                  ;;	(like as a dot noises vaguely between normal sound samples)
  1915                                  ;;	-To avoid this defect, the 1st sample of
  1916                                  ;;	the next buffer may be read from the wav file but
  1917                                  ;;	the file pointer would need to be set to 1 sample back
  1918                                  ;;	again via seek system call. Time comsumption problem! -
  1919                                  ;;
  1920                                  ;;	Erdogan Tan - 15/11/2023
  1921                                  ;;
  1922                                  ;;	((If entire wav data would be loaded at once.. conversion
  1923                                  ;;	defect/noise would disappear.. but for DOS, to keep
  1924                                  ;;	64KB buffer limit is important also it is important
  1925                                  ;;	for running under 1MB barrier without HIMEM.SYS or DPMI.
  1926                                  ;;	I have tested this program by using 2-30MB wav files.))
  1927                                  ;;
  1928                                  ;;	Test Computer:	ASUS desktop/mainboard, M2N4-SLI, 2010.
  1929                                  ;;			AMD Athlon 64 X2 2200 MHZ CPU.
  1930                                  ;;		       	NFORCE4 (CK804) AC97 audio hardware.
  1931                                  ;;			Realtek ALC850 codec.
  1932                                  ;;		       	Retro DOS v4.2 (MSDOS 6.22) operating system.
  1933                                  
  1934                                  load_8khz_mono_8_bit:
  1935                                  	; 02/02/2025
  1936                                  	; 15/11/2023
  1937                                  	; 14/11/2023
  1938                                  	; 13/11/2023
  1939 00000D1F F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1940                                  					; last of the file?
  1941 00000D26 7402                    	jz	short lff8m_0		; no
  1942 00000D28 F9                      	stc
  1943 00000D29 C3                      	retn
  1944                                  
  1945                                  lff8m_0:
  1946                                  	; 01/12/2024
  1947                                  	; edi = audio buffer address
  1948 00000D2A BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  1949                                          ;mov	edx, [loadsize]
  1950                                  
  1951                                  	; esi = buffer address
  1952                                  	;; edx = buffer size
  1953                                  
  1954                                  	; load file into memory
  1955                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000D2F 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00000D35 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00000D37 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000D3D B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00000D42 CD40                <1>  int 40h
  1956 00000D44 7305                    	jnc	short lff8m_6
  1957 00000D46 E9AF000000              	jmp	lff8m_5  ; error !
  1958                                  
  1959                                  lff8m_6:
  1960                                  	; 01/12/2024
  1961 00000D4B A3[54810000]            	mov	[count], eax
  1962                                  	;;;
  1963                                  	; 07/12/2024
  1964                                  	;mov	edi, audio_buffer
  1965                                  	;;;
  1966 00000D50 21C0                    	and	eax, eax
  1967 00000D52 0F8499000000            	jz	lff8_eof
  1968                                  
  1969 00000D58 89C1                    	mov	ecx, eax		; byte count
  1970                                  lff8m_1:
  1971 00000D5A AC                      	lodsb
  1972 00000D5B A2[98240000]            	mov	[previous_val], al
  1973 00000D60 2C80                    	sub	al, 80h
  1974 00000D62 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  1975 00000D66 66AB                    	stosw		; original sample (left channel)
  1976 00000D68 66AB                    	stosw		; original sample (right channel)
  1977                                  	; 02/02/2025
  1978                                  	;xor	eax, eax
  1979 00000D6A 8A06                    	mov	al, [esi]
  1980 00000D6C 49                      	dec	ecx
  1981 00000D6D 7502                    	jnz	short lff8m_2
  1982 00000D6F B080                    	mov	al, 80h
  1983                                  lff8m_2:
  1984                                  	;mov	[next_val], ax
  1985 00000D71 88C7                    	mov	bh, al	; [next_val]
  1986 00000D73 8A25[98240000]          	mov	ah, [previous_val]
  1987 00000D79 00E0                    	add	al, ah	; [previous_val]
  1988 00000D7B D0D8                    	rcr	al, 1
  1989 00000D7D 88C2                    	mov	dl, al	; this is interpolated middle (3th) sample
  1990 00000D7F 00E0                    	add	al, ah	; [previous_val]
  1991 00000D81 D0D8                    	rcr	al, 1	
  1992 00000D83 88C3                    	mov	bl, al 	; this is temporary interpolation value
  1993 00000D85 00E0                    	add	al, ah	; [previous_val]
  1994 00000D87 D0D8                    	rcr	al, 1
  1995 00000D89 2C80                    	sub	al, 80h
  1996 00000D8B 66C1E008                	shl	ax, 8
  1997 00000D8F 66AB                    	stosw		; this is 1st interpolated sample (L)
  1998 00000D91 66AB                    	stosw		; this is 1st interpolated sample (R)
  1999 00000D93 88D8                    	mov	al, bl
  2000 00000D95 00D0                    	add	al, dl
  2001 00000D97 D0D8                    	rcr	al, 1
  2002 00000D99 2C80                    	sub	al, 80h
  2003 00000D9B 66C1E008                	shl	ax, 8
  2004 00000D9F 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2005 00000DA1 66AB                    	stosw		; this is 2nd interpolated sample (R)
  2006 00000DA3 88D0                    	mov	al, dl
  2007 00000DA5 2C80                    	sub	al, 80h
  2008 00000DA7 66C1E008                	shl	ax, 8
  2009 00000DAB 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  2010 00000DAD 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  2011                                  	;mov	al, [next_val]
  2012 00000DAF 88F8                    	mov	al, bh
  2013 00000DB1 00D0                    	add	al, dl
  2014 00000DB3 D0D8                    	rcr	al, 1
  2015 00000DB5 88C3                    	mov	bl, al	; this is temporary interpolation value
  2016 00000DB7 00D0                    	add	al, dl
  2017 00000DB9 D0D8                    	rcr	al, 1
  2018 00000DBB 2C80                    	sub	al, 80h
  2019 00000DBD 66C1E008                	shl	ax, 8
  2020 00000DC1 66AB                    	stosw		; this is 4th interpolated sample (L)
  2021 00000DC3 66AB                    	stosw		; this is 4th interpolated sample (R)
  2022                                  	;mov	al, [next_val]
  2023 00000DC5 88F8                    	mov	al, bh
  2024 00000DC7 00D8                    	add	al, bl
  2025 00000DC9 D0D8                    	rcr	al, 1
  2026 00000DCB 2C80                    	sub	al, 80h
  2027 00000DCD 66C1E008                	shl	ax, 8
  2028 00000DD1 66AB                    	stosw		; this is 5th interpolated sample (L)
  2029 00000DD3 66AB                    	stosw		; this is 5th interpolated sample (R)
  2030                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2031 00000DD5 09C9                    	or	ecx, ecx
  2032 00000DD7 7581                    	jnz	short lff8m_1
  2033                                  
  2034                                  	; --------------
  2035                                  
  2036                                  lff8s_3:
  2037                                  lff8m_3:
  2038                                  lff8s2_3:
  2039                                  lff8m2_3:
  2040                                  lff16s_3:
  2041                                  lff16m_3:
  2042                                  lff16s2_3:
  2043                                  lff16m2_3:
  2044                                  lff24_3:
  2045                                  lff32_3:
  2046                                  lff44_3:
  2047                                  lff22_3:
  2048                                  lff11_3:
  2049                                  lff12_3: 	; 02/02/2025
  2050                                  	; 08/12/2024 (BugFix)
  2051                                  	; 31/05/2024 (BugFix)
  2052 00000DD9 8B0D[48810000]          	mov	ecx, [buffersize] ; 16 bit (48 kHZ, stereo) sample size
  2053                                  	;shl	ecx, 1	; byte count ; Bug !
  2054                                  	; 08/12/2024
  2055 00000DDF 81C1[00900000]          	add	ecx, audio_buffer
  2056 00000DE5 29F9                    	sub	ecx, edi
  2057 00000DE7 7607                    	jna	short lff8m_4
  2058                                  	;inc	ecx
  2059 00000DE9 C1E902                  	shr	ecx, 2
  2060 00000DEC 31C0                    	xor	eax, eax ; fill (remain part of) buffer with zeros
  2061 00000DEE F3AB                    	rep	stosd
  2062                                  lff8m_4:
  2063                                  	; 31/05/2024 (BugFix)
  2064                                  	; cf=1 ; Bug !
  2065                                  	; 08/12/2024
  2066                                  	;clc
  2067 00000DF0 C3                      	retn
  2068                                  
  2069                                  lff8_eof:
  2070                                  lff16_eof:
  2071                                  lff24_eof:
  2072                                  lff32_eof:
  2073                                  lff44_eof:
  2074                                  lff22_eof:
  2075                                  lff11_eof:
  2076                                  lff12_eof:	; 02/02/2025
  2077                                  	; 15/11/2023
  2078 00000DF1 C605[CE800000]01        	mov	byte [flags], ENDOFFILE
  2079 00000DF8 EBDF                    	jmp	short lff8m_3
  2080                                  
  2081                                  lff8s_5:
  2082                                  lff8m_5:
  2083                                  lff8s2_5:
  2084                                  lff8m2_5:
  2085                                  lff16s_5:
  2086                                  lff16m_5:
  2087                                  lff16s2_5:
  2088                                  lff16m2_5:
  2089                                  lff24_5:
  2090                                  lff32_5:
  2091                                  lff44_5:
  2092                                  lff22_5:
  2093                                  lff11_5:
  2094                                  lff12_5:	; 02/02/2025
  2095 00000DFA B021                    	mov	al, '!'  ; error
  2096 00000DFC E8CAFAFFFF              	call	tL0
  2097                                  	
  2098                                  	;jmp	short lff8m_3
  2099                                  	; 15/11/2023
  2100 00000E01 EBEE                    	jmp	lff8_eof
  2101                                  
  2102                                  	; --------------
  2103                                  
  2104                                  load_8khz_stereo_8_bit:
  2105                                  	; 02/02/2025
  2106                                  	; 15/11/2023
  2107                                  	; 14/11/2023
  2108                                  	; 13/11/2023
  2109 00000E03 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2110                                  					; last of the file?
  2111 00000E0A 7402                    	jz	short lff8s_0		; no
  2112 00000E0C F9                      	stc
  2113 00000E0D C3                      	retn
  2114                                  
  2115                                  lff8s_0:
  2116                                  	; 01/12/2024
  2117                                  	; edi = audio buffer address
  2118 00000E0E BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2119                                          ;mov	edx, [loadsize]
  2120                                  
  2121                                  	; esi = buffer address
  2122                                  	;; edx = buffer size
  2123                                  
  2124                                  	; load file into memory
  2125                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000E13 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00000E19 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00000E1B 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000E21 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00000E26 CD40                <1>  int 40h
  2126 00000E28 72D0                    	jc	short lff8s_5 ; error !
  2127                                  
  2128                                  	; 01/12/2024
  2129 00000E2A A3[54810000]            	mov	[count], eax
  2130                                  	;;;
  2131                                  	; 07/12/2024
  2132                                  	;mov	edi, audio_buffer
  2133                                  	;;;
  2134 00000E2F D1E8                    	shr	eax, 1
  2135 00000E31 74BE                    	jz	short lff8_eof
  2136                                  
  2137 00000E33 89C1                    	mov	ecx, eax	; word count
  2138                                  lff8s_1:
  2139 00000E35 AC                      	lodsb
  2140 00000E36 A2[98240000]            	mov	[previous_val_l], al
  2141 00000E3B 2C80                    	sub	al, 80h
  2142 00000E3D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2143 00000E41 66AB                    	stosw		; original sample (L)
  2144 00000E43 AC                      	lodsb
  2145 00000E44 A2[9A240000]            	mov	[previous_val_r], al
  2146 00000E49 2C80                    	sub	al, 80h
  2147 00000E4B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2148 00000E4F 66AB                    	stosw		; original sample (R)
  2149                                  
  2150                                  	;xor	eax, eax
  2151                                  	; 02/02/2025
  2152 00000E51 668B06                  	mov	ax, [esi]
  2153 00000E54 49                      	dec	ecx
  2154 00000E55 7504                    	jnz	short lff8s_2
  2155                                  		; convert 8 bit sample to 16 bit sample
  2156 00000E57 66B88080                	mov	ax, 8080h
  2157                                  lff8s_2:
  2158 00000E5B A2[9C240000]            	mov	[next_val_l], al
  2159 00000E60 8825[9E240000]          	mov	[next_val_r], ah
  2160 00000E66 8A25[98240000]          	mov	ah, [previous_val_l]
  2161 00000E6C 00E0                    	add	al, ah
  2162 00000E6E D0D8                    	rcr	al, 1
  2163 00000E70 88C2                    	mov	dl, al	; this is interpolated middle (3th) sample (L)
  2164 00000E72 00E0                    	add	al, ah
  2165 00000E74 D0D8                    	rcr	al, 1
  2166 00000E76 88C3                    	mov	bl, al	; this is temporary interpolation value (L)
  2167 00000E78 00E0                    	add	al, ah
  2168 00000E7A D0D8                    	rcr	al, 1
  2169 00000E7C 2C80                    	sub	al, 80h
  2170 00000E7E 66C1E008                	shl	ax, 8
  2171 00000E82 66AB                    	stosw		; this is 1st interpolated sample (L)
  2172 00000E84 A0[9E240000]            	mov	al, [next_val_r]
  2173 00000E89 8A25[9A240000]          	mov	ah, [previous_val_r]
  2174 00000E8F 00E0                    	add	al, ah
  2175 00000E91 D0D8                    	rcr	al, 1
  2176 00000E93 88C6                    	mov	dh, al	; this is interpolated middle (3th) sample (R)
  2177 00000E95 00E0                    	add	al, ah
  2178 00000E97 D0D8                    	rcr	al, 1
  2179 00000E99 88C7                    	mov	bh, al	; this is temporary interpolation value (R)
  2180 00000E9B 00E0                    	add	al, ah
  2181 00000E9D D0D8                    	rcr	al, 1
  2182 00000E9F 2C80                    	sub	al, 80h
  2183 00000EA1 66C1E008                	shl	ax, 8
  2184 00000EA5 66AB                    	stosw		; this is 1st interpolated sample (R)
  2185 00000EA7 88D8                    	mov	al, bl
  2186 00000EA9 00D0                    	add	al, dl
  2187 00000EAB D0D8                    	rcr	al, 1
  2188 00000EAD 2C80                    	sub	al, 80h
  2189 00000EAF 66C1E008                	shl	ax, 8
  2190 00000EB3 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2191 00000EB5 88F8                    	mov	al, bh
  2192 00000EB7 00F0                    	add	al, dh
  2193 00000EB9 D0D8                    	rcr	al, 1
  2194 00000EBB 2C80                    	sub	al, 80h
  2195 00000EBD 66C1E008                	shl	ax, 8
  2196 00000EC1 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  2197 00000EC3 88D0                    	mov	al, dl
  2198 00000EC5 2C80                    	sub	al, 80h
  2199 00000EC7 66C1E008                	shl	ax, 8
  2200 00000ECB 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  2201 00000ECD 88F0                    	mov	al, dh
  2202 00000ECF 2C80                    	sub	al, 80h
  2203 00000ED1 66C1E008                	shl	ax, 8
  2204 00000ED5 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  2205 00000ED7 A0[9C240000]            	mov	al, [next_val_l]
  2206 00000EDC 00D0                    	add	al, dl
  2207 00000EDE D0D8                    	rcr	al, 1
  2208 00000EE0 88C3                    	mov	bl, al	; this is temporary interpolation value (L)
  2209 00000EE2 00D0                    	add	al, dl
  2210 00000EE4 D0D8                    	rcr	al, 1
  2211 00000EE6 2C80                    	sub	al, 80h
  2212 00000EE8 66C1E008                	shl	ax, 8
  2213 00000EEC 66AB                    	stosw		; this is 4th interpolated sample (L)
  2214 00000EEE A0[9E240000]            	mov	al, [next_val_r]
  2215 00000EF3 00F0                    	add	al, dh
  2216 00000EF5 D0D8                    	rcr	al, 1
  2217 00000EF7 88C7                    	mov	bh, al	; this is temporary interpolation value (R)
  2218 00000EF9 00F0                    	add	al, dh
  2219 00000EFB D0D8                    	rcr	al, 1
  2220 00000EFD 2C80                    	sub	al, 80h
  2221 00000EFF 66C1E008                	shl	ax, 8
  2222 00000F03 66AB                    	stosw		; this is 4th interpolated sample (R)
  2223 00000F05 A0[9C240000]            	mov	al, [next_val_l]
  2224 00000F0A 00D8                    	add	al, bl
  2225 00000F0C D0D8                    	rcr	al, 1
  2226 00000F0E 2C80                    	sub	al, 80h
  2227 00000F10 66C1E008                	shl	ax, 8
  2228 00000F14 66AB                    	stosw		; this is 5th interpolated sample (L)
  2229 00000F16 A0[9E240000]            	mov	al, [next_val_r]
  2230 00000F1B 00F8                    	add	al, bh
  2231 00000F1D D0D8                    	rcr	al, 1
  2232 00000F1F 2C80                    	sub	al, 80h
  2233 00000F21 66C1E008                	shl	ax, 8
  2234 00000F25 66AB                    	stosw		; this is 5th interpolated sample (R)
  2235                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2236 00000F27 E305                    	jecxz	lff8s_6
  2237 00000F29 E907FFFFFF              	jmp	lff8s_1
  2238                                  lff8s_6:
  2239 00000F2E E9A6FEFFFF              	jmp	lff8s_3
  2240                                  
  2241                                  load_8khz_mono_16_bit:
  2242                                  	; 02/02/2025
  2243                                  	; 13/11/2023
  2244 00000F33 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2245                                  					; last of the file?
  2246 00000F3A 7402                    	jz	short lff8m2_0		; no
  2247 00000F3C F9                      	stc
  2248 00000F3D C3                      	retn
  2249                                  
  2250                                  lff8m2_0:
  2251                                  	; 01/12/2024
  2252                                  	; edi = audio buffer address
  2253 00000F3E BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2254                                          ;mov	edx, [loadsize]
  2255                                  
  2256                                  	; esi = buffer address
  2257                                  	;; edx = buffer size
  2258                                  
  2259                                  	; load file into memory
  2260                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00000F43 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00000F49 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00000F4B 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00000F51 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00000F56 CD40                <1>  int 40h
  2261 00000F58 0F82A0000000            	jc	lff8m2_7 ; error !
  2262                                  
  2263                                  	; 01/12/2024
  2264 00000F5E A3[54810000]            	mov	[count], eax
  2265                                  	;;;
  2266                                  	; 07/12/2024
  2267                                  	;mov	edi, audio_buffer
  2268                                  	;;;
  2269 00000F63 D1E8                    	shr	eax, 1
  2270 00000F65 7505                    	jnz	short lff8m2_8
  2271 00000F67 E985FEFFFF              	jmp	lff8_eof
  2272                                  
  2273                                  lff8m2_8:
  2274 00000F6C 89C1                    	mov	ecx, eax	; word count
  2275                                  lff8m2_1:
  2276 00000F6E 66AD                    	lodsw
  2277 00000F70 66AB                    	stosw		; original sample (left channel)
  2278 00000F72 66AB                    	stosw		; original sample (right channel)
  2279 00000F74 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  2280 00000F77 66A3[98240000]          	mov	[previous_val], ax
  2281                                  	; 02/02/2025
  2282 00000F7D 668B06                  	mov	ax, [esi]
  2283 00000F80 49                      	dec	ecx
  2284 00000F81 7502                    	jnz	short lff8m2_2
  2285 00000F83 31C0                    	xor	eax, eax
  2286                                  lff8m2_2:
  2287 00000F85 80C480                  	add	ah, 80h ; convert sound level to 0-65535 format
  2288 00000F88 89C5                    	mov	ebp, eax	; [next_val]
  2289 00000F8A 660305[98240000]        	add	ax, [previous_val]
  2290 00000F91 66D1D8                  	rcr	ax, 1
  2291 00000F94 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample
  2292 00000F96 660305[98240000]        	add	ax, [previous_val]
  2293 00000F9D 66D1D8                  	rcr	ax, 1	; this is temporary interpolation value
  2294 00000FA0 89C3                    	mov	ebx, eax 		
  2295 00000FA2 660305[98240000]        	add	ax, [previous_val]
  2296 00000FA9 66D1D8                  	rcr	ax, 1
  2297 00000FAC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2298 00000FAF 66AB                    	stosw		; this is 1st interpolated sample (L)
  2299 00000FB1 66AB                    	stosw		; this is 1st interpolated sample (R)
  2300 00000FB3 89D8                    	mov	eax, ebx
  2301 00000FB5 6601D0                  	add	ax, dx
  2302 00000FB8 66D1D8                  	rcr	ax, 1
  2303 00000FBB 80EC80                  	sub	ah, 80h
  2304 00000FBE 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2305 00000FC0 66AB                    	stosw		; this is 2nd interpolated sample (R)
  2306 00000FC2 89D0                    	mov	eax, edx
  2307 00000FC4 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2308 00000FC7 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  2309 00000FC9 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  2310 00000FCB 89E8                    	mov	eax, ebp
  2311 00000FCD 6601D0                  	add	ax, dx
  2312 00000FD0 66D1D8                  	rcr	ax, 1
  2313 00000FD3 89C3                    	mov	ebx, eax ; this is temporary interpolation value
  2314 00000FD5 6601D0                  	add	ax, dx
  2315 00000FD8 66D1D8                  	rcr	ax, 1
  2316 00000FDB 80EC80                  	sub	ah, 80h
  2317 00000FDE 66AB                    	stosw		; this is 4th interpolated sample (L)
  2318 00000FE0 66AB                    	stosw		; this is 4th interpolated sample (R)
  2319 00000FE2 89E8                    	mov	eax, ebp
  2320 00000FE4 6601D8                  	add	ax, bx
  2321 00000FE7 66D1D8                  	rcr	ax, 1
  2322 00000FEA 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2323 00000FED 66AB                    	stosw		; this is 5th interpolated sample (L)
  2324 00000FEF 66AB                    	stosw		; this is 5th interpolated sample (R)
  2325                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2326 00000FF1 09C9                    	or	ecx, ecx
  2327 00000FF3 0F8575FFFFFF            	jnz	lff8m2_1
  2328 00000FF9 E9DBFDFFFF              	jmp	lff8m2_3
  2329                                  
  2330                                  lff8m2_7:
  2331                                  lff8s2_7:
  2332 00000FFE E9F7FDFFFF              	jmp	lff8m2_5  ; error
  2333                                  
  2334                                  load_8khz_stereo_16_bit:
  2335                                  	; 02/02/2025
  2336                                  	; 16/11/2023
  2337                                  	; 15/11/2023
  2338                                  	; 13/11/2023
  2339 00001003 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2340                                  					; last of the file?
  2341 0000100A 7402                    	jz	short lff8s2_0		; no
  2342 0000100C F9                      	stc
  2343 0000100D C3                      	retn
  2344                                  
  2345                                  lff8s2_0:
  2346                                  	; 01/12/2024
  2347                                  	; edi = audio buffer address
  2348 0000100E BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2349                                          ;mov	edx, [loadsize]
  2350                                  
  2351                                  	; esi = buffer address
  2352                                  	;; edx = buffer size
  2353                                  
  2354                                  	; load file into memory
  2355                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001013 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001019 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 0000101B 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001021 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001026 CD40                <1>  int 40h
  2356 00001028 72D4                    	jc	short lff8s2_7 ; error !
  2357                                  
  2358                                  	; 01/12/2024
  2359 0000102A A3[54810000]            	mov	[count], eax
  2360                                  	;;;
  2361                                  	; 07/12/2024
  2362                                  	;mov	edi, audio_buffer
  2363                                  	;;;
  2364 0000102F C1E802                  	shr	eax, 2
  2365 00001032 7505                    	jnz	short lff8s2_8
  2366 00001034 E9B8FDFFFF              	jmp	lff8_eof
  2367                                  
  2368                                  lff8s2_8:
  2369 00001039 89C1                    	mov	ecx, eax ; dword count
  2370                                  lff8s2_1:
  2371 0000103B 66AD                    	lodsw
  2372 0000103D 66AB                    	stosw		; original sample (L)
  2373                                  	; 15/11/2023
  2374 0000103F 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  2375 00001042 66A3[98240000]          	mov	[previous_val_l], ax
  2376 00001048 66AD                    	lodsw
  2377 0000104A 66AB                    	stosw		; original sample (R)
  2378 0000104C 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  2379 0000104F 66A3[9A240000]          	mov	[previous_val_r], ax
  2380                                  	; 02/02/2025
  2381 00001055 668B06                  	mov	ax, [esi]
  2382 00001058 668B5602                	mov	dx, [esi+2]
  2383                                  	; 16/11/2023
  2384 0000105C 49                      	dec	ecx
  2385 0000105D 7504                    	jnz	short lff8s2_2
  2386 0000105F 31D2                    	xor	edx, edx
  2387 00001061 31C0                    	xor	eax, eax
  2388                                  lff8s2_2:
  2389 00001063 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  2390 00001066 66A3[9C240000]          	mov	[next_val_l], ax
  2391 0000106C 80C680                  	add	dh, 80h	; convert sound level to 0-65535 format
  2392 0000106F 668915[9E240000]        	mov	[next_val_r], dx
  2393 00001076 660305[98240000]        	add	ax, [previous_val_l]
  2394 0000107D 66D1D8                  	rcr	ax, 1
  2395 00001080 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample (L)
  2396 00001082 660305[98240000]        	add	ax, [previous_val_l]
  2397 00001089 66D1D8                  	rcr	ax, 1	
  2398 0000108C 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
  2399 0000108E 660305[98240000]        	add	ax, [previous_val_l]
  2400 00001095 66D1D8                  	rcr	ax, 1
  2401 00001098 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2402 0000109B 66AB                    	stosw		; this is 1st interpolated sample (L)
  2403 0000109D 66A1[9E240000]          	mov	ax, [next_val_r]
  2404 000010A3 660305[9A240000]        	add	ax, [previous_val_r]
  2405 000010AA 66D1D8                  	rcr	ax, 1
  2406 000010AD 89C5                    	mov	ebp, eax ; this is interpolated middle (3th) sample (R)
  2407 000010AF 660305[9A240000]        	add	ax, [previous_val_r]
  2408 000010B6 66D1D8                  	rcr	ax, 1
  2409 000010B9 50                      	push	eax ; *	; this is temporary interpolation value (R)
  2410 000010BA 660305[9A240000]        	add	ax, [previous_val_r]
  2411 000010C1 66D1D8                  	rcr	ax, 1
  2412 000010C4 80EC80                  	sub	ah, 80h
  2413 000010C7 66AB                    	stosw		; this is 1st interpolated sample (R)
  2414 000010C9 89D8                    	mov	eax, ebx
  2415 000010CB 6601D0                  	add	ax, dx
  2416 000010CE 66D1D8                  	rcr	ax, 1
  2417 000010D1 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2418 000010D4 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2419 000010D6 58                      	pop	eax ; *
  2420 000010D7 6601E8                  	add	ax, bp
  2421 000010DA 66D1D8                  	rcr	ax, 1
  2422 000010DD 80EC80                  	sub	ah, 80h
  2423 000010E0 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  2424 000010E2 89D0                    	mov	eax, edx
  2425 000010E4 80EC80                  	sub	ah, 80h
  2426 000010E7 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  2427 000010E9 89E8                    	mov	eax, ebp
  2428 000010EB 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2429 000010EE 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  2430 000010F0 66A1[9C240000]          	mov	ax, [next_val_l]
  2431 000010F6 6601D0                  	add	ax, dx
  2432 000010F9 66D1D8                  	rcr	ax, 1
  2433 000010FC 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
  2434 000010FE 6601D0                  	add	ax, dx
  2435 00001101 66D1D8                  	rcr	ax, 1
  2436 00001104 80EC80                  	sub	ah, 80h
  2437 00001107 66AB                    	stosw		; this is 4th interpolated sample (L)
  2438 00001109 66A1[9E240000]          	mov	ax, [next_val_r]
  2439 0000110F 6601E8                  	add	ax, bp
  2440 00001112 66D1D8                  	rcr	ax, 1
  2441 00001115 50                      	push	eax ; ** ; this is temporary interpolation value (R)
  2442 00001116 6601E8                  	add	ax, bp
  2443 00001119 66D1D8                  	rcr	ax, 1
  2444 0000111C 80EC80                  	sub	ah, 80h
  2445 0000111F 66AB                    	stosw		; this is 4th interpolated sample (R)
  2446 00001121 66A1[9C240000]          	mov	ax, [next_val_l]
  2447 00001127 6601D8                  	add	ax, bx
  2448 0000112A 66D1D8                  	rcr	ax, 1
  2449 0000112D 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2450 00001130 66AB                    	stosw		; this is 5th interpolated sample (L)
  2451 00001132 58                      	pop	eax ; **
  2452 00001133 660305[9E240000]        	add	ax, [next_val_r]
  2453 0000113A 66D1D8                  	rcr	ax, 1
  2454 0000113D 80EC80                  	sub	ah, 80h
  2455 00001140 66AB                    	stosw		; this is 5th interpolated sample (R)
  2456                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2457 00001142 E305                    	jecxz	lff8_s2_9
  2458 00001144 E9F2FEFFFF              	jmp	lff8s2_1
  2459                                  lff8_s2_9:
  2460 00001149 E98BFCFFFF              	jmp	lff8s2_3
  2461                                  
  2462                                  ; .....................
  2463                                  
  2464                                  load_16khz_mono_8_bit:
  2465                                  	; 02/02/2025
  2466                                  	; 14/11/2023
  2467                                  	; 13/11/2023
  2468 0000114E F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2469                                  					; last of the file?
  2470 00001155 7402                    	jz	short lff16m_0		; no
  2471 00001157 F9                      	stc
  2472 00001158 C3                      	retn
  2473                                  
  2474                                  lff16m_0:
  2475                                  	; 01/12/2024
  2476                                  	; edi = audio buffer address
  2477 00001159 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2478                                          ;mov	edx, [loadsize]
  2479                                  
  2480                                  	; esi = buffer address
  2481                                  	;; edx = buffer size
  2482                                  
  2483                                  	; load file into memory
  2484                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 0000115E 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001164 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001166 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 0000116C B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001171 CD40                <1>  int 40h
  2485 00001173 7253                    	jc	short lff16m_7 ; error !
  2486                                  
  2487                                  	; 01/12/2024
  2488 00001175 A3[54810000]            	mov	[count], eax
  2489                                  	;;;
  2490                                  	; 07/12/2024
  2491                                  	;mov	edi, audio_buffer
  2492                                  	;;;
  2493 0000117A 21C0                    	and	eax, eax
  2494 0000117C 7505                    	jnz	short lff16m_8
  2495 0000117E E96EFCFFFF              	jmp	lff16_eof
  2496                                  
  2497                                  lff16m_8:
  2498 00001183 89C1                    	mov	ecx, eax		; byte count
  2499                                  lff16m_1:
  2500 00001185 AC                      	lodsb
  2501                                  	;mov	[previous_val], al
  2502 00001186 88C3                    	mov	bl, al
  2503 00001188 2C80                    	sub	al, 80h
  2504 0000118A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2505 0000118E 66AB                    	stosw		; original sample (left channel)
  2506 00001190 66AB                    	stosw		; original sample (right channel)
  2507                                  	;xor	eax, eax
  2508                                  	; 02/02/2025
  2509 00001192 8A06                    	mov	al, [esi]
  2510 00001194 49                      	dec	ecx
  2511 00001195 7502                    	jnz	short lff16m_2
  2512                                  	; 14/11/2023
  2513 00001197 B080                    	mov	al, 80h
  2514                                  lff16m_2:
  2515                                  	;mov	[next_val], al
  2516 00001199 88C7                    	mov	bh, al
  2517                                  	;add	al, [previous_val]
  2518 0000119B 00D8                    	add	al, bl
  2519 0000119D D0D8                    	rcr	al, 1
  2520 0000119F 88C2                    	mov	dl, al	; this is interpolated middle (temp) sample
  2521                                  	;add	al, [previous_val]
  2522 000011A1 00D8                    	add	al, bl
  2523 000011A3 D0D8                    	rcr	al, 1
  2524 000011A5 2C80                    	sub	al, 80h
  2525 000011A7 66C1E008                	shl	ax, 8
  2526 000011AB 66AB                    	stosw		; this is 1st interpolated sample (L)
  2527 000011AD 66AB                    	stosw		; this is 1st interpolated sample (R)
  2528                                  	;mov	al, [next_val]
  2529 000011AF 88F8                    	mov	al, bh
  2530 000011B1 00D0                    	add	al, dl
  2531 000011B3 D0D8                    	rcr	al, 1
  2532 000011B5 2C80                    	sub	al, 80h
  2533 000011B7 66C1E008                	shl	ax, 8
  2534 000011BB 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2535 000011BD 66AB                    	stosw		; this is 2nd interpolated sample (R)
  2536                                  	
  2537                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2538 000011BF 09C9                    	or	ecx, ecx
  2539 000011C1 75C2                    	jnz	short lff16m_1
  2540 000011C3 E911FCFFFF              	jmp	lff16m_3
  2541                                  
  2542                                  lff16m_7:
  2543                                  lff16s_7:
  2544 000011C8 E92DFCFFFF              	jmp	lff16m_5  ; error
  2545                                  
  2546                                  load_16khz_stereo_8_bit:
  2547                                  	; 02/02/2025
  2548                                  	; 14/11/2023
  2549                                  	; 13/11/2023
  2550 000011CD F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2551                                  					; last of the file?
  2552 000011D4 7402                    	jz	short lff16s_0		; no
  2553 000011D6 F9                      	stc
  2554 000011D7 C3                      	retn
  2555                                  
  2556                                  lff16s_0:
  2557                                  	; 01/12/2024
  2558                                  	; edi = audio buffer address
  2559 000011D8 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2560                                          ;mov	edx, [loadsize]
  2561                                  
  2562                                  	; esi = buffer address
  2563                                  	;; edx = buffer size
  2564                                  
  2565                                  	; load file into memory
  2566                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000011DD 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 000011E3 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 000011E5 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000011EB B803000000          <1>  mov eax, %1
   100                              <1> 
   101 000011F0 CD40                <1>  int 40h
  2567 000011F2 72D4                    	jc	short lff16s_7 ; error !
  2568                                  
  2569                                  	; 01/12/2024
  2570 000011F4 A3[54810000]            	mov	[count], eax
  2571                                  	;;;
  2572                                  	; 07/12/2024
  2573                                  	;mov	edi, audio_buffer
  2574                                  	;;;
  2575 000011F9 D1E8                    	shr	eax, 1
  2576 000011FB 7505                    	jnz	short lff16s_8
  2577 000011FD E9EFFBFFFF              	jmp	lff16_eof
  2578                                  
  2579                                  lff16s_8:
  2580 00001202 89C1                    	mov	ecx, eax	; word count
  2581                                  lff16s_1:
  2582 00001204 AC                      	lodsb
  2583 00001205 A2[98240000]            	mov	[previous_val_l], al
  2584 0000120A 2C80                    	sub	al, 80h
  2585 0000120C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2586 00001210 66AB                    	stosw		; original sample (L)
  2587 00001212 AC                      	lodsb
  2588 00001213 A2[9A240000]            	mov	[previous_val_r], al
  2589 00001218 2C80                    	sub	al, 80h
  2590 0000121A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2591 0000121E 66AB                    	stosw		; original sample (R)
  2592                                  
  2593                                  	;xor	eax, eax
  2594                                  	; 02/02/2025
  2595 00001220 668B06                  	mov	ax, [esi]
  2596 00001223 49                      	dec	ecx
  2597 00001224 7504                    	jnz	short lff16s_2
  2598                                  		; convert 8 bit sample to 16 bit sample
  2599                                  	; 14/11/2023
  2600 00001226 66B88080                	mov	ax, 8080h
  2601                                  lff16s_2:
  2602                                  	;mov	[next_val_l], al
  2603                                  	;mov	[next_val_r], ah
  2604 0000122A 89C3                    	mov	ebx, eax
  2605 0000122C 0205[98240000]          	add	al, [previous_val_l]
  2606 00001232 D0D8                    	rcr	al, 1
  2607 00001234 88C2                    	mov	dl, al	; this is temporary interpolation value (L)
  2608 00001236 0205[98240000]          	add	al, [previous_val_l]
  2609 0000123C D0D8                    	rcr	al, 1
  2610 0000123E 2C80                    	sub	al, 80h
  2611 00001240 66C1E008                	shl	ax, 8
  2612 00001244 66AB                    	stosw		; this is 1st interpolated sample (L)
  2613 00001246 88F8                    	mov	al, bh	; [next_val_r]
  2614 00001248 0205[9A240000]          	add	al, [previous_val_r]
  2615 0000124E D0D8                    	rcr	al, 1
  2616 00001250 88C6                    	mov	dh, al	; this is temporary interpolation value (R)
  2617 00001252 0205[9A240000]          	add	al, [previous_val_r]
  2618 00001258 D0D8                    	rcr	al, 1
  2619 0000125A 2C80                    	sub	al, 80h
  2620 0000125C 66C1E008                	shl	ax, 8
  2621 00001260 66AB                    	stosw		; this is 1st interpolated sample (R)
  2622 00001262 88D0                    	mov	al, dl
  2623 00001264 00D8                    	add	al, bl	; [next_val_l]
  2624 00001266 D0D8                    	rcr	al, 1
  2625 00001268 2C80                    	sub	al, 80h
  2626 0000126A 66C1E008                	shl	ax, 8
  2627 0000126E 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2628 00001270 88F0                    	mov	al, dh
  2629 00001272 00F8                    	add	al, bh	; [next_val_r]
  2630 00001274 D0D8                    	rcr	al, 1
  2631 00001276 2C80                    	sub	al, 80h
  2632 00001278 66C1E008                	shl	ax, 8
  2633 0000127C 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  2634                                  	
  2635                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2636 0000127E 09C9                    	or	ecx, ecx
  2637 00001280 7582                    	jnz	short lff16s_1
  2638 00001282 E952FBFFFF              	jmp	lff16s_3
  2639                                  
  2640                                  load_16khz_mono_16_bit:
  2641                                  	; 02/02/2025
  2642                                  	; 15/11/2023
  2643                                  	; 13/11/2023
  2644 00001287 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2645                                  					; last of the file?
  2646 0000128E 7402                    	jz	short lff16m2_0		; no
  2647 00001290 F9                      	stc
  2648 00001291 C3                      	retn
  2649                                  
  2650                                  lff16m2_0:
  2651                                  	; 01/12/2024
  2652                                  	; edi = audio buffer address
  2653 00001292 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2654                                          ;mov	edx, [loadsize]
  2655                                  
  2656                                  	; esi = buffer address
  2657                                  	;; edx = buffer size
  2658                                  
  2659                                  	; load file into memory
  2660                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001297 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000129D 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 0000129F 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000012A5 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 000012AA CD40                <1>  int 40h
  2661 000012AC 7255                    	jc	short lff16m2_7 ; error !
  2662                                  
  2663                                  	; 01/12/2024
  2664 000012AE A3[54810000]            	mov	[count], eax
  2665                                  	;;;
  2666                                  	; 07/12/2024
  2667                                  	;mov	edi, audio_buffer
  2668                                  	;;;
  2669 000012B3 D1E8                    	shr	eax, 1
  2670 000012B5 7505                    	jnz	short lff16m2_8
  2671 000012B7 E935FBFFFF              	jmp	lff16_eof
  2672                                  
  2673                                  lff16m2_8:
  2674 000012BC 89C1                    	mov	ecx, eax  ; word count
  2675                                  lff16m2_1:
  2676 000012BE 66AD                    	lodsw
  2677 000012C0 66AB                    	stosw		; original sample (left channel)
  2678 000012C2 66AB                    	stosw		; original sample (right channel)
  2679 000012C4 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  2680                                  	;mov	[previous_val], ax
  2681 000012C7 89C3                    	mov	ebx, eax
  2682                                  	; 02/02/2025
  2683 000012C9 668B06                  	mov	ax, [esi]
  2684 000012CC 49                      	dec	ecx
  2685 000012CD 7502                    	jnz	short lff16m2_2
  2686 000012CF 31C0                    	xor	eax, eax
  2687                                  lff16m2_2:
  2688 000012D1 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  2689 000012D4 89C5                    	mov	ebp, eax	; [next_val]
  2690                                  	;add	ax, [previous_val]
  2691 000012D6 6601D8                  	add	ax, bx
  2692 000012D9 66D1D8                  	rcr	ax, 1
  2693 000012DC 89C2                    	mov	edx, eax ; this is temporary interpolation value
  2694                                  	;add	ax, [previous_val]
  2695 000012DE 6601D8                  	add	ax, bx
  2696 000012E1 66D1D8                  	rcr	ax, 1
  2697 000012E4 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2698 000012E7 66AB                    	stosw		; this is 1st interpolated sample (L)
  2699 000012E9 66AB                    	stosw		; this is 1st interpolated sample (R)
  2700 000012EB 89E8                    	mov	eax, ebp
  2701 000012ED 6601D0                  	add	ax, dx
  2702 000012F0 66D1D8                  	rcr	ax, 1
  2703 000012F3 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2704 000012F6 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2705 000012F8 66AB                    	stosw		; this is 2nd interpolated sample (R)
  2706                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2707 000012FA 09C9                    	or	ecx, ecx
  2708 000012FC 75C0                    	jnz	short lff16m2_1
  2709 000012FE E9D6FAFFFF              	jmp	lff16m2_3
  2710                                  
  2711                                  lff16m2_7:
  2712                                  lff16s2_7:
  2713 00001303 E9F2FAFFFF              	jmp	lff16m2_5  ; error
  2714                                  
  2715                                  load_16khz_stereo_16_bit:
  2716                                  	; 02/02/2025
  2717                                  	; 16/11/2023
  2718                                  	; 15/11/2023
  2719                                  	; 13/11/2023
  2720 00001308 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2721                                  					; last of the file?
  2722 0000130F 7402                    	jz	short lff16s2_0		; no
  2723 00001311 F9                      	stc
  2724 00001312 C3                      	retn
  2725                                  
  2726                                  lff16s2_0:
  2727                                  	; 01/12/2024
  2728                                  	; edi = audio buffer address
  2729 00001313 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2730                                          ;mov	edx, [loadsize]
  2731                                  
  2732                                  	; esi = buffer address
  2733                                  	;; edx = buffer size
  2734                                  
  2735                                  	; load file into memory
  2736                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001318 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000131E 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001320 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001326 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 0000132B CD40                <1>  int 40h
  2737 0000132D 72D4                    	jc	short lff16s2_7 ; error !
  2738                                  
  2739                                  	; 01/12/2024
  2740 0000132F A3[54810000]            	mov	[count], eax
  2741                                  	;;;
  2742                                  	; 07/12/2024
  2743                                  	;mov	edi, audio_buffer
  2744                                  	;;;
  2745 00001334 C1E802                  	shr	eax, 2
  2746 00001337 7505                    	jnz	short lff16s2_8
  2747 00001339 E9B3FAFFFF              	jmp	lff16_eof
  2748                                  
  2749                                  lff16s2_8:
  2750 0000133E 89C1                    	mov	ecx, eax  ; dword count
  2751                                  lff16s2_1:
  2752 00001340 66AD                    	lodsw
  2753 00001342 66AB                    	stosw		; original sample (L)
  2754 00001344 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  2755 00001347 66A3[98240000]          	mov	[previous_val_l], ax
  2756 0000134D 66AD                    	lodsw
  2757 0000134F 66AB                    	stosw		; original sample (R)
  2758 00001351 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  2759 00001354 66A3[9A240000]          	mov	[previous_val_r], ax
  2760                                  	; 02/02/2025
  2761 0000135A 668B06                  	mov	ax, [esi]
  2762 0000135D 668B5602                	mov	dx, [esi+2]
  2763                                  	; 16/11/2023
  2764 00001361 49                      	dec	ecx
  2765 00001362 7504                    	jnz	short lff16s2_2
  2766 00001364 31D2                    	xor	edx, edx
  2767 00001366 31C0                    	xor	eax, eax
  2768                                  lff16s2_2:
  2769 00001368 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  2770                                  	;mov	[next_val_l], ax
  2771 0000136B 89C5                    	mov	ebp, eax
  2772 0000136D 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  2773 00001370 668915[9E240000]        	mov	[next_val_r], dx
  2774 00001377 660305[98240000]        	add	ax, [previous_val_l]
  2775 0000137E 66D1D8                  	rcr	ax, 1
  2776 00001381 89C2                    	mov	edx, eax ; this is temporary interpolation value (L)
  2777 00001383 660305[98240000]        	add	ax, [previous_val_l]
  2778 0000138A 66D1D8                  	rcr	ax, 1
  2779 0000138D 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  2780 00001390 66AB                    	stosw		; this is 1st interpolated sample (L)
  2781 00001392 66A1[9E240000]          	mov	ax, [next_val_r]
  2782 00001398 660305[9A240000]        	add	ax, [previous_val_r]
  2783 0000139F 66D1D8                  	rcr	ax, 1
  2784 000013A2 89C3                    	mov	ebx, eax ; this is temporary interpolation value (R)
  2785 000013A4 660305[9A240000]        	add	ax, [previous_val_r]
  2786 000013AB 66D1D8                  	rcr	ax, 1
  2787 000013AE 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2788 000013B1 66AB                    	stosw		; this is 1st interpolated sample (R)
  2789                                  	;mov	ax, [next_val_l]
  2790 000013B3 89E8                    	mov	eax, ebp
  2791 000013B5 6601D0                  	add	ax, dx
  2792 000013B8 66D1D8                  	rcr	ax, 1
  2793 000013BB 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2794 000013BE 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2795 000013C0 66A1[9E240000]          	mov	ax, [next_val_r]
  2796 000013C6 6601D8                  	add	ax, bx
  2797 000013C9 66D1D8                  	rcr	ax, 1
  2798 000013CC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2799 000013CF 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  2800                                  	
  2801                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2802 000013D1 09C9                    	or	ecx, ecx
  2803 000013D3 0F8567FFFFFF            	jnz	lff16s2_1
  2804 000013D9 E9FBF9FFFF              	jmp	lff16s2_3
  2805                                  
  2806                                  ; .....................
  2807                                  
  2808                                  load_24khz_mono_8_bit:
  2809                                  	; 02/02/2025
  2810                                  	; 15/11/2023
  2811 000013DE F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2812                                  					; last of the file?
  2813 000013E5 7402                    	jz	short lff24m_0		; no
  2814 000013E7 F9                      	stc
  2815 000013E8 C3                      	retn
  2816                                  
  2817                                  lff24m_0:
  2818                                  	; 01/12/2024
  2819                                  	; edi = audio buffer address
  2820 000013E9 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2821                                          ;mov	edx, [loadsize]
  2822                                  
  2823                                  	; esi = buffer address
  2824                                  	;; edx = buffer size
  2825                                  
  2826                                  	; load file into memory
  2827                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000013EE 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 000013F4 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 000013F6 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000013FC B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001401 CD40                <1>  int 40h
  2828 00001403 723B                    	jc	short lff24m_7 ; error !
  2829                                  
  2830                                  	; 01/12/2024
  2831 00001405 A3[54810000]            	mov	[count], eax
  2832                                  	;;;
  2833                                  	; 07/12/2024
  2834                                  	;mov	edi, audio_buffer
  2835                                  	;;;
  2836 0000140A 21C0                    	and	eax, eax
  2837 0000140C 7505                    	jnz	short lff24m_8
  2838 0000140E E9DEF9FFFF              	jmp	lff24_eof
  2839                                  
  2840                                  lff24m_8:
  2841 00001413 89C1                    	mov	ecx, eax	; byte count
  2842                                  lff24m_1:
  2843 00001415 AC                      	lodsb
  2844                                  	;mov	[previous_val], al
  2845 00001416 88C3                    	mov	bl, al
  2846 00001418 2C80                    	sub	al, 80h
  2847 0000141A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2848 0000141E 66AB                    	stosw		; original sample (left channel)
  2849 00001420 66AB                    	stosw		; original sample (right channel)
  2850                                  	;xor	eax, eax
  2851                                  	; 02/02/2025
  2852 00001422 8A06                    	mov	al, [esi]
  2853 00001424 49                      	dec	ecx
  2854 00001425 7502                    	jnz	short lff24m_2
  2855 00001427 B080                    	mov	al, 80h
  2856                                  lff24m_2:
  2857                                  	;;mov	[next_val], al
  2858                                  	;mov	bh, al
  2859                                  	;add	al, [previous_val]
  2860 00001429 00D8                    	add	al, bl
  2861 0000142B D0D8                    	rcr	al, 1
  2862 0000142D 2C80                    	sub	al, 80h
  2863 0000142F 66C1E008                	shl	ax, 8
  2864 00001433 66AB                    	stosw		; this is interpolated sample (L)
  2865 00001435 66AB                    	stosw		; this is interpolated sample (R)
  2866                                  	
  2867                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2868 00001437 09C9                    	or	ecx, ecx
  2869 00001439 75DA                    	jnz	short lff24m_1
  2870 0000143B E999F9FFFF              	jmp	lff24_3
  2871                                  
  2872                                  lff24m_7:
  2873                                  lff24s_7:
  2874 00001440 E9B5F9FFFF              	jmp	lff24_5  ; error
  2875                                  
  2876                                  load_24khz_stereo_8_bit:
  2877                                  	; 02/02/2025
  2878                                  	; 15/11/2023
  2879 00001445 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2880                                  					; last of the file?
  2881 0000144C 7402                    	jz	short lff24s_0		; no
  2882 0000144E F9                      	stc
  2883 0000144F C3                      	retn
  2884                                  
  2885                                  lff24s_0:
  2886                                  	; 01/12/2024
  2887                                  	; edi = audio buffer address
  2888 00001450 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2889                                          ;mov	edx, [loadsize]
  2890                                  
  2891                                  	; esi = buffer address
  2892                                  	;; edx = buffer size
  2893                                  
  2894                                  	; load file into memory
  2895                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001455 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000145B 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 0000145D 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001463 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001468 CD40                <1>  int 40h
  2896 0000146A 72D4                    	jc	short lff24s_7 ; error !
  2897                                  
  2898                                  	; 01/12/2024
  2899 0000146C A3[54810000]            	mov	[count], eax
  2900                                  	;;;
  2901                                  	; 07/12/2024
  2902                                  	;mov	edi, audio_buffer
  2903                                  	;;;
  2904 00001471 D1E8                    	shr	eax, 1
  2905 00001473 7505                    	jnz	short lff24s_8
  2906 00001475 E977F9FFFF              	jmp	lff24_eof
  2907                                  
  2908                                  lff24s_8:
  2909 0000147A 89C1                    	mov	ecx, eax  ; word count
  2910                                  lff24s_1:
  2911 0000147C AC                      	lodsb
  2912 0000147D A2[98240000]            	mov	[previous_val_l], al
  2913 00001482 2C80                    	sub	al, 80h
  2914 00001484 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2915 00001488 66AB                    	stosw		; original sample (L)
  2916 0000148A AC                      	lodsb
  2917 0000148B A2[9A240000]            	mov	[previous_val_r], al
  2918 00001490 2C80                    	sub	al, 80h
  2919 00001492 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2920 00001496 66AB                    	stosw		; original sample (R)
  2921                                  
  2922                                  	;xor	eax, eax
  2923                                  	; 02/02/2025
  2924 00001498 668B06                  	mov	ax, [esi]
  2925 0000149B 49                      	dec	ecx
  2926 0000149C 7504                    	jnz	short lff24s_2
  2927                                  		; convert 8 bit sample to 16 bit sample
  2928 0000149E 66B88080                	mov	ax, 8080h
  2929                                  lff24s_2:
  2930                                  	;;mov	[next_val_l], al
  2931                                  	;;mov	[next_val_r], ah
  2932                                  	;mov	bx, ax
  2933 000014A2 88E7                    	mov	bh, ah
  2934 000014A4 0205[98240000]          	add	al, [previous_val_l]
  2935 000014AA D0D8                    	rcr	al, 1
  2936                                  	;mov	dl, al
  2937 000014AC 2C80                    	sub	al, 80h
  2938 000014AE 66C1E008                	shl	ax, 8
  2939 000014B2 66AB                    	stosw		; this is interpolated sample (L)
  2940 000014B4 88F8                    	mov	al, bh	; [next_val_r]
  2941 000014B6 0205[9A240000]          	add	al, [previous_val_r]
  2942 000014BC D0D8                    	rcr	al, 1
  2943                                  	;mov	dh, al
  2944 000014BE 2C80                    	sub	al, 80h
  2945 000014C0 66C1E008                	shl	ax, 8
  2946 000014C4 66AB                    	stosw		; this is interpolated sample (R)
  2947                                  		
  2948                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2949 000014C6 09C9                    	or	ecx, ecx
  2950 000014C8 75B2                    	jnz	short lff24s_1
  2951 000014CA E90AF9FFFF              	jmp	lff24_3
  2952                                  
  2953                                  load_24khz_mono_16_bit:
  2954                                  	; 02/02/2025
  2955                                  	; 15/11/2023
  2956 000014CF F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2957                                  					; last of the file?
  2958 000014D6 7402                    	jz	short lff24m2_0		; no
  2959 000014D8 F9                      	stc
  2960 000014D9 C3                      	retn
  2961                                  
  2962                                  lff24m2_0:
  2963                                  	; 01/12/2024
  2964                                  	; edi = audio buffer address
  2965 000014DA BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2966                                          ;mov	edx, [loadsize]
  2967                                  
  2968                                  	; esi = buffer address
  2969                                  	;; edx = buffer size
  2970                                  
  2971                                  	; load file into memory
  2972                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000014DF 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 000014E5 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 000014E7 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000014ED B803000000          <1>  mov eax, %1
   100                              <1> 
   101 000014F2 CD40                <1>  int 40h
  2973 000014F4 723A                    	jc	short lff24m2_7 ; error !
  2974                                  
  2975                                  	; 01/12/2024
  2976 000014F6 A3[54810000]            	mov	[count], eax
  2977                                  	;;;
  2978                                  	; 07/12/2024
  2979                                  	;mov	edi, audio_buffer
  2980                                  	;;;
  2981 000014FB D1E8                    	shr	eax, 1
  2982 000014FD 7505                    	jnz	short lff24m2_8
  2983 000014FF E9EDF8FFFF              	jmp	lff24_eof
  2984                                  
  2985                                  lff24m2_8:
  2986 00001504 89C1                    	mov	ecx, eax  ; word count
  2987                                  lff24m2_1:
  2988 00001506 66AD                    	lodsw
  2989 00001508 66AB                    	stosw		; original sample (left channel)
  2990 0000150A 66AB                    	stosw		; original sample (right channel)
  2991 0000150C 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  2992                                  	;mov	[previous_val], ax
  2993                                  	;mov	ebx, eax
  2994                                  	; 02/02/2025
  2995 0000150F 668B1E                  	mov	bx, [esi]
  2996 00001512 49                      	dec	ecx
  2997 00001513 7502                    	jnz	short lff24m2_2
  2998                                  	;xor	eax, eax
  2999 00001515 31DB                    	xor	ebx, ebx
  3000                                  lff24m2_2:
  3001                                  	; 02/02/2025
  3002 00001517 80C780                  	add	bh, 80h ; convert sound level 0 to 65535 format
  3003                                  	;add	ah, 80h
  3004                                  	;mov	ebp, eax	; [next_val]
  3005                                  	;add	ax, [previous_val]
  3006                                  	; ax = [previous_val]
  3007                                  	; bx = [next_val]
  3008 0000151A 6601D8                  	add	ax, bx
  3009 0000151D 66D1D8                  	rcr	ax, 1
  3010 00001520 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3011 00001523 66AB                    	stosw		; this is interpolated sample (L)
  3012 00001525 66AB                    	stosw		; this is interpolated sample (R)
  3013                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3014 00001527 09C9                    	or	ecx, ecx
  3015 00001529 75DB                    	jnz	short lff24m2_1
  3016 0000152B E9A9F8FFFF              	jmp	lff24_3
  3017                                  
  3018                                  lff24m2_7:
  3019                                  lff24s2_7:
  3020 00001530 E9C5F8FFFF              	jmp	lff24_5  ; error
  3021                                  
  3022                                  load_24khz_stereo_16_bit:
  3023                                  	; 02/02/2025
  3024                                  	; 16/11/2023
  3025                                  	; 15/11/2023
  3026 00001535 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3027                                  					; last of the file?
  3028 0000153C 7402                    	jz	short lff24s2_0		; no
  3029 0000153E F9                      	stc
  3030 0000153F C3                      	retn
  3031                                  
  3032                                  lff24s2_0:
  3033                                  	; 01/12/2024
  3034                                  	; edi = audio buffer address
  3035 00001540 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3036                                          ;mov	edx, [loadsize]
  3037                                  
  3038                                  	; esi = buffer address
  3039                                  	;; edx = buffer size
  3040                                  
  3041                                  	; load file into memory
  3042                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001545 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000154B 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 0000154D 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001553 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001558 CD40                <1>  int 40h
  3043 0000155A 72D4                    	jc	short lff24s2_7 ; error !
  3044                                  
  3045                                  	; 01/12/2024
  3046 0000155C A3[54810000]            	mov	[count], eax
  3047                                  	;;;
  3048                                  	; 07/12/2024
  3049                                  	;mov	edi, audio_buffer
  3050                                  	;;;
  3051 00001561 C1E802                  	shr	eax, 2
  3052 00001564 7505                    	jnz	short lff24s2_8
  3053 00001566 E986F8FFFF              	jmp	lff24_eof
  3054                                  
  3055                                  lff24s2_8:
  3056 0000156B 89C1                    	mov	ecx, eax  ; dword count
  3057                                  lff24s2_1:
  3058 0000156D 66AD                    	lodsw
  3059 0000156F 66AB                    	stosw		; original sample (L)
  3060 00001571 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  3061 00001574 66A3[98240000]          	mov	[previous_val_l], ax
  3062 0000157A 66AD                    	lodsw
  3063 0000157C 66AB                    	stosw		; original sample (R)
  3064 0000157E 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  3065                                  	;mov	[previous_val_r], ax
  3066 00001581 89C3                    	mov	ebx, eax
  3067                                  	; 02/02/2025
  3068 00001583 668B06                  	mov	ax, [esi]
  3069 00001586 668B5602                	mov	dx, [esi+2]
  3070                                  	; 16/11/2023
  3071 0000158A 49                      	dec	ecx
  3072 0000158B 7504                    	jnz	short lff24s2_2
  3073 0000158D 31D2                    	xor	edx, edx
  3074 0000158F 31C0                    	xor	eax, eax
  3075                                  lff24s2_2:
  3076 00001591 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  3077                                  	;;mov	[next_val_l], ax
  3078                                  	;mov	ebp, eax
  3079 00001594 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  3080                                  	;mov	[next_val_r], dx
  3081 00001597 660305[98240000]        	add	ax, [previous_val_l]
  3082 0000159E 66D1D8                  	rcr	ax, 1
  3083 000015A1 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  3084 000015A4 66AB                    	stosw		; this is interpolated sample (L)
  3085                                  	;mov	ax, [next_val_r]
  3086 000015A6 89D0                    	mov	eax, edx
  3087                                  	;add	ax, [previous_val_r]
  3088 000015A8 6601D8                  	add	ax, bx
  3089 000015AB 66D1D8                  	rcr	ax, 1
  3090 000015AE 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3091 000015B1 66AB                    	stosw		; this is interpolated sample (R)
  3092                                  	
  3093                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3094 000015B3 09C9                    	or	ecx, ecx
  3095 000015B5 75B6                    	jnz	short lff24s2_1
  3096 000015B7 E91DF8FFFF              	jmp	lff24_3
  3097                                  
  3098                                  ; .....................
  3099                                  
  3100                                  load_32khz_mono_8_bit:
  3101                                  	; 02/02/2025
  3102                                  	; 15/11/2023
  3103 000015BC F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3104                                  					; last of the file?
  3105 000015C3 7402                    	jz	short lff32m_0		; no
  3106 000015C5 F9                      	stc
  3107 000015C6 C3                      	retn
  3108                                  
  3109                                  lff32m_0:
  3110                                  	; 01/12/2024
  3111                                  	; edi = audio buffer address
  3112 000015C7 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3113                                          ;mov	edx, [loadsize]
  3114                                  
  3115                                  	; esi = buffer address
  3116                                  	;; edx = buffer size
  3117                                  
  3118                                  	; load file into memory
  3119                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000015CC 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 000015D2 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 000015D4 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000015DA B803000000          <1>  mov eax, %1
   100                              <1> 
   101 000015DF CD40                <1>  int 40h
  3120 000015E1 7247                    	jc	short lff32m_7 ; error !
  3121                                  
  3122                                  	; 01/12/2024
  3123 000015E3 A3[54810000]            	mov	[count], eax
  3124                                  	;;;
  3125                                  	; 07/12/2024
  3126                                  	;mov	edi, audio_buffer
  3127                                  	;;;
  3128 000015E8 21C0                    	and	eax, eax
  3129 000015EA 7505                    	jnz	short lff32m_8
  3130 000015EC E900F8FFFF              	jmp	lff32_eof
  3131                                  
  3132                                  lff32m_8:
  3133 000015F1 89C1                    	mov	ecx, eax	; byte count
  3134                                  lff32m_1:
  3135 000015F3 AC                      	lodsb
  3136                                  	;mov	[previous_val], al
  3137 000015F4 88C3                    	mov	bl, al
  3138 000015F6 2C80                    	sub	al, 80h
  3139 000015F8 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3140 000015FC 66AB                    	stosw		; original sample (left channel)
  3141 000015FE 66AB                    	stosw		; original sample (right channel)
  3142                                  	;xor	eax, eax
  3143                                  	; 02/02/2025
  3144 00001600 8A06                    	mov	al, [esi]
  3145 00001602 49                      	dec	ecx
  3146 00001603 7502                    	jnz	short lff32m_2
  3147 00001605 B080                    	mov	al, 80h
  3148                                  lff32m_2:
  3149                                  	;;mov	[next_val], al
  3150                                  	;mov	bh, al
  3151                                  	;add	al, [previous_val]
  3152 00001607 00D8                    	add	al, bl
  3153 00001609 D0D8                    	rcr	al, 1
  3154 0000160B 2C80                    	sub	al, 80h
  3155 0000160D 66C1E008                	shl	ax, 8
  3156 00001611 66AB                    	stosw		; this is interpolated sample (L)
  3157 00001613 66AB                    	stosw		; this is interpolated sample (R)
  3158                                  	
  3159                                  	; different than 8-16-24 kHZ !
  3160                                  	; 'original-interpolated-original' trio samples
  3161 00001615 E30E                    	jecxz	lff32m_3
  3162                                  
  3163 00001617 AC                      	lodsb
  3164 00001618 2C80                    	sub	al, 80h
  3165 0000161A 66C1E008                	shl	ax, 8
  3166 0000161E 66AB                    	stosw		; original sample (left channel)
  3167 00001620 66AB                    	stosw		; original sample (right channel)
  3168                                  
  3169                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3170 00001622 49                      	dec	ecx
  3171 00001623 75CE                    	jnz	short lff32m_1
  3172                                  lff32m_3:
  3173 00001625 E9AFF7FFFF              	jmp	lff32_3
  3174                                  
  3175                                  lff32m_7:
  3176                                  lff32s_7:
  3177 0000162A E9CBF7FFFF              	jmp	lff32_5  ; error
  3178                                  
  3179                                  load_32khz_stereo_8_bit:
  3180                                  	; 02/02/2025
  3181                                  	; 15/11/2023
  3182 0000162F F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3183                                  					; last of the file?
  3184 00001636 7402                    	jz	short lff32s_0		; no
  3185 00001638 F9                      	stc
  3186 00001639 C3                      	retn
  3187                                  
  3188                                  lff32s_0:
  3189                                  	; 01/12/2024
  3190                                  	; edi = audio buffer address
  3191 0000163A BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3192                                          ;mov	edx, [loadsize]
  3193                                  
  3194                                  	; esi = buffer address
  3195                                  	;; edx = buffer size
  3196                                  
  3197                                  	; load file into memory
  3198                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 0000163F 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001645 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001647 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 0000164D B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001652 CD40                <1>  int 40h
  3199 00001654 72D4                    	jc	short lff32s_7 ; error !
  3200                                  
  3201                                  	; 01/12/2024
  3202 00001656 A3[54810000]            	mov	[count], eax
  3203                                  	;;;
  3204                                  	; 07/12/2024
  3205                                  	;mov	edi, audio_buffer
  3206                                  	;;;
  3207 0000165B D1E8                    	shr	eax, 1
  3208 0000165D 7505                    	jnz	short lff32s_8
  3209 0000165F E98DF7FFFF              	jmp	lff32_eof
  3210                                  
  3211                                  lff32s_8:
  3212 00001664 89C1                    	mov	ecx, eax  ; word count
  3213                                  lff32s_1:
  3214 00001666 AC                      	lodsb
  3215 00001667 A2[98240000]            	mov	[previous_val_l], al
  3216 0000166C 2C80                    	sub	al, 80h
  3217 0000166E 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3218 00001672 66AB                    	stosw		; original sample (L)
  3219 00001674 AC                      	lodsb
  3220 00001675 A2[9A240000]            	mov	[previous_val_r], al
  3221 0000167A 2C80                    	sub	al, 80h
  3222 0000167C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3223 00001680 66AB                    	stosw		; original sample (R)
  3224                                  
  3225                                  	;xor	eax, eax
  3226                                  	; 02/02/2025
  3227 00001682 668B06                  	mov	ax, [esi]
  3228 00001685 49                      	dec	ecx
  3229 00001686 7504                    	jnz	short lff32s_2
  3230                                  		; convert 8 bit sample to 16 bit sample
  3231 00001688 66B88080                	mov	ax, 8080h
  3232                                  lff32s_2:
  3233                                  	;;mov	[next_val_l], al
  3234                                  	;;mov	[next_val_r], ah
  3235                                  	;mov	bx, ax
  3236 0000168C 88E7                    	mov	bh, ah
  3237 0000168E 0205[98240000]          	add	al, [previous_val_l]
  3238 00001694 D0D8                    	rcr	al, 1
  3239                                  	;mov	dl, al
  3240 00001696 2C80                    	sub	al, 80h
  3241 00001698 66C1E008                	shl	ax, 8
  3242 0000169C 66AB                    	stosw		; this is interpolated sample (L)
  3243 0000169E 88F8                    	mov	al, bh	; [next_val_r]
  3244 000016A0 0205[9A240000]          	add	al, [previous_val_r]
  3245 000016A6 D0D8                    	rcr	al, 1
  3246                                  	;mov	dh, al
  3247 000016A8 2C80                    	sub	al, 80h
  3248 000016AA 66C1E008                	shl	ax, 8
  3249 000016AE 66AB                    	stosw		; this is interpolated sample (R)
  3250                                  
  3251                                  	; different than 8-16-24 kHZ !
  3252                                  	; 'original-interpolated-original' trio samples
  3253 000016B0 E315                    	jecxz	lff32s_3
  3254                                  
  3255 000016B2 AC                      	lodsb
  3256 000016B3 2C80                    	sub	al, 80h
  3257 000016B5 66C1E008                	shl	ax, 8
  3258 000016B9 66AB                    	stosw		; original sample (left channel)
  3259                                  
  3260 000016BB AC                      	lodsb
  3261 000016BC 2C80                    	sub	al, 80h
  3262 000016BE 66C1E008                	shl	ax, 8
  3263 000016C2 66AB                    	stosw		; original sample (right channel)
  3264                                  		
  3265                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3266 000016C4 49                      	dec	ecx
  3267 000016C5 759F                    	jnz	short lff32s_1
  3268                                  lff32s_3:
  3269 000016C7 E90DF7FFFF              	jmp	lff32_3
  3270                                  
  3271                                  load_32khz_mono_16_bit:
  3272                                  	; 02/02/2025
  3273                                  	; 15/11/2023
  3274 000016CC F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3275                                  					; last of the file?
  3276 000016D3 7402                    	jz	short lff32m2_0		; no
  3277 000016D5 F9                      	stc
  3278 000016D6 C3                      	retn
  3279                                  
  3280                                  lff32m2_0:
  3281                                  	; 01/12/2024
  3282                                  	; edi = audio buffer address
  3283 000016D7 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3284                                          ;mov	edx, [loadsize]
  3285                                  
  3286                                  	; esi = buffer address
  3287                                  	;; edx = buffer size
  3288                                  
  3289                                  	; load file into memory
  3290                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000016DC 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 000016E2 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 000016E4 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000016EA B803000000          <1>  mov eax, %1
   100                              <1> 
   101 000016EF CD40                <1>  int 40h
  3291 000016F1 7241                    	jc	short lff32m2_7 ; error !
  3292                                  
  3293                                  	; 01/12/2024
  3294 000016F3 A3[54810000]            	mov	[count], eax
  3295                                  	;;;
  3296                                  	; 07/12/2024
  3297                                  	;mov	edi, audio_buffer
  3298                                  	;;;
  3299 000016F8 D1E8                    	shr	eax, 1
  3300 000016FA 7505                    	jnz	short lff32m2_8
  3301 000016FC E9F0F6FFFF              	jmp	lff32_eof
  3302                                  
  3303                                  lff32m2_8:
  3304 00001701 89C1                    	mov	ecx, eax  ; word count
  3305                                  lff32m2_1:
  3306 00001703 66AD                    	lodsw
  3307 00001705 66AB                    	stosw		; original sample (left channel)
  3308 00001707 66AB                    	stosw		; original sample (right channel)
  3309 00001709 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  3310                                  	;mov	[previous_val], ax
  3311                                  	;mov	ebx, eax
  3312                                  	;xor	eax, eax
  3313                                  	; 02/02/2025
  3314                                  	;mov	ax, [esi]
  3315 0000170C 668B1E                  	mov	bx, [esi]
  3316 0000170F 49                      	dec	ecx
  3317 00001710 7502                    	jnz	short lff32m2_2
  3318 00001712 31DB                    	xor	ebx, ebx
  3319                                  lff32m2_2:
  3320                                  	; 02/02/2025
  3321 00001714 80C780                  	add	bh, 80h ; convert sound level 0 to 65535 format
  3322                                  	;add	ah, 80h
  3323                                  	;mov	ebp, eax ; [next_val]
  3324                                  	;add	ax, [previous_val]
  3325                                  	; ax = [previous_val]
  3326                                  	; bx = [next_val]
  3327 00001717 6601D8                  	add	ax, bx
  3328 0000171A 66D1D8                  	rcr	ax, 1
  3329 0000171D 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3330 00001720 66AB                    	stosw		; this is interpolated sample (L)
  3331 00001722 66AB                    	stosw		; this is interpolated sample (R)
  3332                                  
  3333                                  	; different than 8-16-24 kHZ !
  3334                                  	; 'original-interpolated-original' trio samples 
  3335 00001724 E309                    	jecxz	lff32m2_3
  3336                                  
  3337 00001726 66AD                    	lodsw
  3338 00001728 66AB                    	stosw		; original sample (left channel)
  3339 0000172A 66AB                    	stosw		; original sample (right channel)
  3340                                  
  3341                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3342 0000172C 49                      	dec	ecx
  3343 0000172D 75D4                    	jnz	short lff32m2_1
  3344                                  lff32m2_3:
  3345 0000172F E9A5F6FFFF              	jmp	lff32_3
  3346                                  
  3347                                  lff32m2_7:
  3348                                  lff32s2_7:
  3349 00001734 E9C1F6FFFF              	jmp	lff32_5  ; error
  3350                                  
  3351                                  load_32khz_stereo_16_bit:
  3352                                  	; 02/02/2025
  3353                                  	; 16/11/2023
  3354                                  	; 15/11/2023
  3355 00001739 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3356                                  					; last of the file?
  3357 00001740 7402                    	jz	short lff32s2_0		; no
  3358 00001742 F9                      	stc
  3359 00001743 C3                      	retn
  3360                                  
  3361                                  lff32s2_0:
  3362                                  	; 01/12/2024
  3363                                  	; edi = audio buffer address
  3364 00001744 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3365                                          ;mov	edx, [loadsize]
  3366                                  
  3367                                  	; esi = buffer address
  3368                                  	;; edx = buffer size
  3369                                  
  3370                                  	; load file into memory
  3371                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001749 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000174F 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001751 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001757 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 0000175C CD40                <1>  int 40h
  3372 0000175E 72D4                    	jc	short lff32s2_7 ; error !
  3373                                  
  3374                                  	; 01/12/2024
  3375 00001760 A3[54810000]            	mov	[count], eax
  3376                                  	;;;
  3377                                  	; 07/12/2024
  3378                                  	;mov	edi, audio_buffer
  3379                                  	;;;
  3380 00001765 C1E802                  	shr	eax, 2
  3381 00001768 7505                    	jnz	short lff32s2_8
  3382 0000176A E982F6FFFF              	jmp	lff32_eof
  3383                                  
  3384                                  lff32s2_8:
  3385 0000176F 89C1                    	mov	ecx, eax ; dword count
  3386                                  lff32s2_1:
  3387 00001771 66AD                    	lodsw
  3388 00001773 66AB                    	stosw		; original sample (L)
  3389 00001775 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  3390 00001778 66A3[98240000]          	mov	[previous_val_l], ax
  3391 0000177E 66AD                    	lodsw
  3392 00001780 66AB                    	stosw		; original sample (R)
  3393 00001782 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  3394                                  	;mov	[previous_val_r], ax
  3395 00001785 89C3                    	mov	ebx, eax
  3396                                  	; 02/02/2025
  3397 00001787 668B06                  	mov	ax, [esi]
  3398 0000178A 668B5602                	mov	dx, [esi+2]
  3399                                  	; 16/11/2023
  3400 0000178E 49                      	dec	ecx
  3401 0000178F 7504                    	jnz	short lff32s2_2
  3402 00001791 31D2                    	xor	edx, edx
  3403 00001793 31C0                    	xor	eax, eax
  3404                                  lff32s2_2:
  3405 00001795 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  3406                                  	;;mov	[next_val_l], ax
  3407                                  	;mov	ebp, eax
  3408 00001798 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  3409                                  	;mov	[next_val_r], dx
  3410 0000179B 660305[98240000]        	add	ax, [previous_val_l]
  3411 000017A2 66D1D8                  	rcr	ax, 1
  3412 000017A5 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  3413 000017A8 66AB                    	stosw		; this is interpolated sample (L)
  3414                                  	;mov	ax, [next_val_r]
  3415 000017AA 89D0                    	mov	eax, edx
  3416                                  	;add	ax, [previous_val_r]
  3417 000017AC 6601D8                  	add	ax, bx
  3418 000017AF 66D1D8                  	rcr	ax, 1
  3419 000017B2 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3420 000017B5 66AB                    	stosw		; this is interpolated sample (R)
  3421                                  
  3422                                  	; different than 8-16-24 kHZ !
  3423                                  	; 'original-interpolated-original' trio samples
  3424 000017B7 E30B                    	jecxz	lff32s2_3
  3425                                  
  3426 000017B9 66AD                    	lodsw
  3427 000017BB 66AB                    	stosw	; original sample (L)
  3428 000017BD 66AD                    	lodsw
  3429 000017BF 66AB                    	stosw	; original sample (R)
  3430                                  	
  3431                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3432 000017C1 49                      	dec	ecx
  3433 000017C2 75AD                    	jnz	short lff32s2_1
  3434                                  lff32s2_3:
  3435 000017C4 E910F6FFFF              	jmp	lff32_3
  3436                                  
  3437                                  ; .....................
  3438                                  
  3439                                  load_22khz_mono_8_bit:
  3440                                  	; 02/02/2025
  3441                                  	; 16/11/2023
  3442 000017C9 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3443                                  					; last of the file?
  3444 000017D0 7402                    	jz	short lff22m_0		; no
  3445 000017D2 F9                      	stc
  3446 000017D3 C3                      	retn
  3447                                  
  3448                                  lff22m_0:
  3449                                  	; 01/12/2024
  3450                                  	; edi = audio buffer address
  3451 000017D4 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3452                                          ;mov	edx, [loadsize]
  3453                                  
  3454                                  	; esi = buffer address
  3455                                  	;; edx = buffer size
  3456                                  
  3457                                  	; load file into memory
  3458                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000017D9 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 000017DF 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 000017E1 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000017E7 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 000017EC CD40                <1>  int 40h
  3459 000017EE 725D                    	jc	short lff22m_7 ; error !
  3460                                  
  3461                                  	; 01/12/2024
  3462 000017F0 A3[54810000]            	mov	[count], eax
  3463                                  	;;;
  3464                                  	; 07/12/2024
  3465                                  	;mov	edi, audio_buffer
  3466                                  	;;;
  3467 000017F5 21C0                    	and	eax, eax
  3468 000017F7 7505                    	jnz	short lff22m_8
  3469 000017F9 E9F3F5FFFF              	jmp	lff22_eof
  3470                                  
  3471                                  lff22m_8:
  3472 000017FE 89C1                    	mov	ecx, eax	; byte count
  3473                                  lff22m_9:
  3474 00001800 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  3475 00001805 C605[A0240000]03        	mov	byte [faz], 3  ; 3 steps/phases
  3476                                  lff22m_1:
  3477                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  3478 0000180C AC                      	lodsb
  3479                                  	; 02/02/2025
  3480 0000180D 8A16                    	mov	dl, [esi]
  3481 0000180F 49                      	dec	ecx
  3482 00001810 7502                    	jnz	short lff22m_2_1
  3483 00001812 B280                    	mov	dl, 80h
  3484                                  lff22m_2_1:	
  3485                                  	; al = [previous_val]
  3486                                  	; dl = [next_val]
  3487 00001814 E835070000              	call	interpolating_3_8bit_mono ; 1 of 17
  3488 00001819 E32D                    	jecxz	lff22m_3
  3489                                  lff22m_2_2:
  3490 0000181B AC                      	lodsb
  3491                                  	; 02/02/2025
  3492 0000181C 8A16                    	mov	dl, [esi]
  3493 0000181E 49                      	dec	ecx
  3494 0000181F 7502                    	jnz	short lff22m_2_3
  3495 00001821 B280                    	mov	dl, 80h
  3496                                  lff22m_2_3:
  3497 00001823 E8B0070000               	call	interpolating_2_8bit_mono ; 2 of 17 .. 6 of 17
  3498 00001828 E31E                    	jecxz	lff22m_3
  3499 0000182A 4D                      	dec	ebp
  3500 0000182B 75EE                    	jnz	short lff22m_2_2
  3501                                  
  3502 0000182D A0[A0240000]            	mov	al, [faz]
  3503 00001832 FEC8                    	dec	al
  3504 00001834 74CA                    	jz	short lff22m_9
  3505 00001836 FE0D[A0240000]          	dec	byte [faz]
  3506 0000183C BD04000000              	mov	ebp, 4
  3507 00001841 FEC8                    	dec	al
  3508 00001843 75C7                    	jnz	short lff22m_1 ; 3:2:2:2:2 ; 7-11 of 17
  3509 00001845 45                      	inc	ebp ; 5
  3510 00001846 EBC4                    	jmp	short lff22m_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  3511                                  
  3512                                  lff22m_3:
  3513                                  lff22s_3:
  3514 00001848 E98CF5FFFF              	jmp	lff22_3	; padfill
  3515                                  		; (put zeros in the remain words of the buffer)
  3516                                  lff22m_7:
  3517                                  lff22s_7:
  3518 0000184D E9A8F5FFFF              	jmp	lff22_5  ; error
  3519                                  
  3520                                  load_22khz_stereo_8_bit:
  3521                                  	; 02/02/2025
  3522                                  	; 16/11/2023
  3523 00001852 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3524                                  					; last of the file?
  3525 00001859 7402                    	jz	short lff22s_0		; no
  3526 0000185B F9                      	stc
  3527 0000185C C3                      	retn
  3528                                  
  3529                                  lff22s_0:
  3530                                  	; 01/12/2024
  3531                                  	; edi = audio buffer address
  3532 0000185D BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3533                                          ;mov	edx, [loadsize]
  3534                                  
  3535                                  	; esi = buffer address
  3536                                  	;; edx = buffer size
  3537                                  
  3538                                  	; load file into memory
  3539                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001862 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001868 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 0000186A 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001870 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001875 CD40                <1>  int 40h
  3540 00001877 72D4                    	jc	short lff22s_7 ; error !
  3541                                  
  3542                                  	; 01/12/2024
  3543 00001879 A3[54810000]            	mov	[count], eax
  3544                                  	;;;
  3545                                  	; 07/12/2024
  3546                                  	;mov	edi, audio_buffer
  3547                                  	;;;
  3548 0000187E D1E8                    	shr	eax, 1
  3549 00001880 7505                    	jnz	short lff22s_8
  3550 00001882 E96AF5FFFF              	jmp	lff22_eof
  3551                                  
  3552                                  lff22s_8:
  3553 00001887 89C1                    	mov	ecx, eax	; word count
  3554                                  lff22s_9:
  3555 00001889 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  3556 0000188E C605[A0240000]03        	mov	byte [faz], 3  ; 3 steps/phase
  3557                                  lff22s_1:
  3558                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  3559 00001895 66AD                    	lodsw
  3560                                  	; 02/02/2025
  3561 00001897 668B16                  	mov	dx, [esi]
  3562 0000189A 49                      	dec	ecx
  3563 0000189B 7504                    	jnz	short lff22s_2_1
  3564 0000189D 66BA8080                	mov	dx, 8080h
  3565                                  lff22s_2_1:	
  3566                                  	; al = [previous_val_l]
  3567                                  	; ah = [previous_val_r]
  3568                                  	; dl = [next_val_l]
  3569                                  	; dh = [next_val_r]
  3570 000018A1 E8DB060000              	call	interpolating_3_8bit_stereo ; 1 of 17
  3571 000018A6 E3A0                    	jecxz	lff22s_3
  3572                                  lff22s_2_2:
  3573 000018A8 66AD                    	lodsw
  3574                                  	; 02/02/2025
  3575 000018AA 668B16                  	mov	dx, [esi]
  3576 000018AD 49                      	dec	ecx
  3577 000018AE 7504                    	jnz	short lff22s_2_3
  3578 000018B0 66BA8080                	mov	dx, 8080h
  3579                                  lff22s_2_3:
  3580 000018B4 E83C070000               	call	interpolating_2_8bit_stereo ; 2 of 17 .. 6 of 17
  3581 000018B9 E38D                    	jecxz	lff22s_3
  3582 000018BB 4D                      	dec	ebp
  3583 000018BC 75EA                    	jnz	short lff22s_2_2
  3584                                  
  3585 000018BE A0[A0240000]            	mov	al, [faz]
  3586 000018C3 FEC8                    	dec	al
  3587 000018C5 74C2                    	jz	short lff22s_9
  3588 000018C7 FE0D[A0240000]          	dec	byte [faz]
  3589 000018CD BD04000000              	mov	ebp, 4
  3590 000018D2 FEC8                    	dec	al
  3591 000018D4 75BF                    	jnz	short lff22s_1 ; 3:2:2:2:2 ; 7-11 of 17
  3592 000018D6 45                      	inc	ebp ; 5
  3593 000018D7 EBBC                    	jmp	short lff22s_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  3594                                  
  3595                                  load_22khz_mono_16_bit:
  3596                                  	; 02/02/2025
  3597                                  	; 16/11/2023
  3598 000018D9 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3599                                  					; last of the file?
  3600 000018E0 7402                    	jz	short lff22m2_0		; no
  3601 000018E2 F9                      	stc
  3602 000018E3 C3                      	retn
  3603                                  
  3604                                  lff22m2_0:
  3605                                  	; 01/12/2024
  3606                                  	; edi = audio buffer address
  3607 000018E4 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3608                                          ;mov	edx, [loadsize]
  3609                                  
  3610                                  	; esi = buffer address
  3611                                  	;; edx = buffer size
  3612                                  
  3613                                  	; load file into memory
  3614                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000018E9 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 000018EF 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 000018F1 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000018F7 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 000018FC CD40                <1>  int 40h
  3615 000018FE 7261                    	jc	short lff22m2_7 ; error !
  3616                                  
  3617                                  	; 01/12/2024
  3618 00001900 A3[54810000]            	mov	[count], eax
  3619                                  	;;;
  3620                                  	; 07/12/2024
  3621                                  	;mov	edi, audio_buffer
  3622                                  	;;;
  3623 00001905 D1E8                    	shr	eax, 1
  3624 00001907 7505                    	jnz	short lff22m2_8
  3625 00001909 E9E3F4FFFF              	jmp	lff22_eof
  3626                                  
  3627                                  lff22m2_8:
  3628 0000190E 89C1                    	mov	ecx, eax	; word count
  3629                                  lff22m2_9:
  3630 00001910 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  3631 00001915 C605[A0240000]03        	mov	byte [faz], 3  ; 3 steps/phases
  3632                                  lff22m2_1:
  3633                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  3634 0000191C 66AD                    	lodsw
  3635                                  	; 02/02/2025
  3636 0000191E 668B16                  	mov	dx, [esi]
  3637 00001921 49                      	dec	ecx
  3638 00001922 7502                    	jnz	short lff22m2_2_1
  3639 00001924 31D2                    	xor	edx, edx
  3640                                  lff22m2_2_1:	
  3641                                  	; ax = [previous_val]
  3642                                  	; dx = [next_val]
  3643 00001926 E8FB060000              	call	interpolating_3_16bit_mono ; 1 of 17
  3644 0000192B E32F                    	jecxz	lff22m2_3
  3645                                  lff22m2_2_2:
  3646 0000192D 66AD                    	lodsw
  3647                                  	; 02/02/2025
  3648 0000192F 668B16                  	mov	dx, [esi]
  3649 00001932 49                      	dec	ecx
  3650 00001933 7502                    	jnz	short lff22m2_2_3
  3651 00001935 31D2                    	xor	edx, edx
  3652                                  lff22m2_2_3:
  3653 00001937 E87D070000               	call	interpolating_2_16bit_mono ; 2 of 17 .. 6 of 17
  3654 0000193C E31E                    	jecxz	lff22m2_3
  3655 0000193E 4D                      	dec	ebp
  3656 0000193F 75EC                    	jnz	short lff22m2_2_2
  3657                                  
  3658 00001941 A0[A0240000]            	mov	al, [faz]
  3659 00001946 FEC8                    	dec	al
  3660 00001948 74C6                    	jz	short lff22m2_9
  3661 0000194A FE0D[A0240000]          	dec	byte [faz]
  3662 00001950 BD04000000              	mov	ebp, 4
  3663 00001955 FEC8                    	dec	al
  3664 00001957 75C3                    	jnz	short lff22m2_1 ; 3:2:2:2:2 ; 7-11 of 17
  3665 00001959 45                      	inc	ebp ; 5
  3666 0000195A EBC0                    	jmp	short lff22m2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  3667                                  
  3668                                  lff22m2_3:
  3669                                  lff22s2_3:
  3670 0000195C E978F4FFFF              	jmp	lff22_3	; padfill
  3671                                  		; (put zeros in the remain words of the buffer)
  3672                                  lff22m2_7:
  3673                                  lff22s2_7:
  3674 00001961 E994F4FFFF              	jmp	lff22_5  ; error
  3675                                  
  3676                                  load_22khz_stereo_16_bit:
  3677                                  	; 16/11/2023
  3678 00001966 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3679                                  					; last of the file?
  3680 0000196D 7402                    	jz	short lff22s2_0		; no
  3681 0000196F F9                      	stc
  3682 00001970 C3                      	retn
  3683                                  
  3684                                  lff22s2_0:
  3685                                  	; 01/12/2024
  3686                                  	; edi = audio buffer address
  3687 00001971 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3688                                          ;mov	edx, [loadsize]
  3689                                  
  3690                                  	; esi = buffer address
  3691                                  	;; edx = buffer size
  3692                                  
  3693                                  	; load file into memory
  3694                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001976 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000197C 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 0000197E 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001984 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001989 CD40                <1>  int 40h
  3695 0000198B 72D4                    	jc	short lff22s2_7 ; error !
  3696                                  
  3697                                  	; 01/12/2024
  3698 0000198D A3[54810000]            	mov	[count], eax
  3699                                  	;;;
  3700                                  	; 07/12/2024
  3701                                  	;mov	edi, audio_buffer
  3702                                  	;;;
  3703 00001992 C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  3704 00001995 7505                    	jnz	short lff22s2_8
  3705 00001997 E955F4FFFF              	jmp	lff22_eof
  3706                                  
  3707                                  lff22s2_8:
  3708 0000199C 89C1                    	mov	ecx, eax	; dword count
  3709                                  lff22s2_9:
  3710 0000199E BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  3711 000019A3 C605[A0240000]03        	mov	byte [faz], 3  ; 3 steps/phase
  3712                                  lff22s2_1:
  3713                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  3714 000019AA 66AD                    	lodsw
  3715 000019AC 89C3                    	mov	ebx, eax
  3716 000019AE 66AD                    	lodsw
  3717 000019B0 8B16                    	mov	edx, [esi]
  3718 000019B2 668915[9C240000]        	mov	[next_val_l], dx
  3719                                  	; 26/11/2023
  3720 000019B9 C1EA10                  	shr	edx, 16
  3721 000019BC 49                      	dec	ecx
  3722 000019BD 7509                    	jnz	short lff22s2_2_1
  3723 000019BF 31D2                    	xor	edx, edx ; 0
  3724 000019C1 668915[9C240000]        	mov	[next_val_l], dx
  3725                                  lff22s2_2_1:
  3726                                  	; bx = [previous_val_l]
  3727                                  	; ax = [previous_val_r]
  3728                                  	; [next_val_l]
  3729                                  	; dx = [next_val_r]
  3730 000019C8 E889060000              	call	interpolating_3_16bit_stereo ; 1 of 17
  3731 000019CD E38D                    	jecxz	lff22s2_3
  3732                                  lff22s2_2_2:
  3733 000019CF 66AD                    	lodsw
  3734 000019D1 89C3                    	mov	ebx, eax
  3735 000019D3 66AD                    	lodsw
  3736 000019D5 8B16                    	mov	edx, [esi]
  3737 000019D7 668915[9C240000]        	mov	[next_val_l], dx
  3738                                  	; 26/11/2023
  3739 000019DE C1EA10                  	shr	edx, 16
  3740 000019E1 49                      	dec	ecx
  3741 000019E2 7509                    	jnz	short lff22s2_2_3
  3742 000019E4 31D2                    	xor	edx, edx ; 0
  3743 000019E6 668915[9C240000]        	mov	[next_val_l], dx
  3744                                  lff22s2_2_3:
  3745 000019ED E8DF060000               	call	interpolating_2_16bit_stereo ; 2 of 17 .. 6 of 17
  3746 000019F2 E31E                    	jecxz	lff22s2_2_4
  3747                                  
  3748 000019F4 4D                      	dec	ebp
  3749 000019F5 75D8                    	jnz	short lff22s2_2_2
  3750                                  
  3751 000019F7 A0[A0240000]            	mov	al, [faz]
  3752 000019FC FEC8                    	dec	al
  3753 000019FE 749E                    	jz	short lff22s2_9
  3754 00001A00 FE0D[A0240000]          	dec	byte [faz]
  3755 00001A06 BD04000000              	mov	ebp, 4
  3756 00001A0B FEC8                    	dec	al
  3757 00001A0D 759B                    	jnz	short lff22s2_1 ; 3:2:2:2:2 ; 7-11 of 17
  3758 00001A0F 45                      	inc	ebp ; 5
  3759 00001A10 EB98                    	jmp	short lff22s2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  3760                                  
  3761                                  lff22s2_2_4:
  3762                                  	; 26/11/2023
  3763 00001A12 E9C2F3FFFF              	jmp	lff22_3	; padfill
  3764                                  
  3765                                  ; .....................
  3766                                  
  3767                                  load_11khz_mono_8_bit:
  3768                                  	; 02/02/2025
  3769                                  	; 18/11/2023
  3770 00001A17 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3771                                  					; last of the file?
  3772 00001A1E 7402                    	jz	short lff11m_0		; no
  3773 00001A20 F9                      	stc
  3774 00001A21 C3                      	retn
  3775                                  
  3776                                  lff11m_0:
  3777                                  	; 01/12/2024
  3778                                  	; edi = audio buffer address
  3779 00001A22 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3780                                          ;mov	edx, [loadsize]
  3781                                  
  3782                                  	; esi = buffer address
  3783                                  	;; edx = buffer size
  3784                                  
  3785                                  	; load file into memory
  3786                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001A27 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001A2D 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001A2F 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001A35 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001A3A CD40                <1>  int 40h
  3787 00001A3C 7247                    	jc	short lff11m_7 ; error !
  3788                                  
  3789                                  	; 01/12/2024
  3790 00001A3E A3[54810000]            	mov	[count], eax
  3791                                  	;;;
  3792                                  	; 07/12/2024
  3793                                  	;mov	edi, audio_buffer
  3794                                  	;;;
  3795 00001A43 21C0                    	and	eax, eax
  3796 00001A45 7505                    	jnz	short lff11m_8
  3797 00001A47 E9A5F3FFFF              	jmp	lff11_eof
  3798                                  
  3799                                  lff11m_8:
  3800 00001A4C 89C1                    	mov	ecx, eax		; byte count
  3801                                  lff11m_9:
  3802 00001A4E BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  3803                                  lff11m_1:
  3804                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  3805 00001A53 AC                      	lodsb
  3806                                  	; 02/02/2025
  3807 00001A54 8A16                    	mov	dl, [esi]
  3808 00001A56 49                      	dec	ecx
  3809 00001A57 7502                    	jnz	short lff11m_2_1
  3810 00001A59 B280                    	mov	dl, 80h
  3811                                  lff11m_2_1:	
  3812                                  	; al = [previous_val]
  3813                                  	; dl = [next_val]
  3814 00001A5B E8A0060000              	call	interpolating_5_8bit_mono
  3815 00001A60 E328                    	jecxz	lff11m_3
  3816                                  lff11m_2_2:
  3817 00001A62 AC                      	lodsb
  3818                                  	; 02/02/2025
  3819 00001A63 8A16                    	mov	dl, [esi]
  3820 00001A65 49                      	dec	ecx
  3821 00001A66 7502                    	jnz	short lff11m_2_3
  3822 00001A68 B280                    	mov	dl, 80h
  3823                                  lff11m_2_3:
  3824 00001A6A E89D070000               	call	interpolating_4_8bit_mono
  3825 00001A6F E319                    	jecxz	lff11m_3
  3826                                  
  3827 00001A71 4D                      	dec	ebp
  3828 00001A72 74DA                    	jz	short lff11m_9
  3829                                  
  3830 00001A74 AC                      	lodsb
  3831                                  	; 02/02/2025
  3832 00001A75 8A16                    	mov	dl, [esi]
  3833 00001A77 49                      	dec	ecx
  3834 00001A78 7502                    	jnz	short lff11m_2_4
  3835 00001A7A B280                    	mov	dl, 80h
  3836                                  lff11m_2_4:
  3837 00001A7C E88B070000              	call	interpolating_4_8bit_mono
  3838 00001A81 E307                    	jecxz	lff11m_3
  3839 00001A83 EBCE                    	jmp	short lff11m_1
  3840                                  
  3841                                  lff11m_7:
  3842                                  lff11s_7:
  3843 00001A85 E970F3FFFF              	jmp	lff11_5  ; error
  3844                                  
  3845                                  lff11m_3:
  3846                                  lff11s_3:
  3847 00001A8A E94AF3FFFF              	jmp	lff11_3	; padfill
  3848                                  		; (put zeros in the remain words of the buffer)
  3849                                  
  3850                                  load_11khz_stereo_8_bit:
  3851                                  	; 02/02/2025
  3852                                  	; 18/11/2023
  3853 00001A8F F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3854                                  					; last of the file?
  3855 00001A96 7402                    	jz	short lff11s_0		; no
  3856 00001A98 F9                      	stc
  3857 00001A99 C3                      	retn
  3858                                  
  3859                                  lff11s_0:
  3860                                  	; 01/12/2024
  3861                                  	; edi = audio buffer address
  3862 00001A9A BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3863                                          ;mov	edx, [loadsize]
  3864                                  
  3865                                  	; esi = buffer address
  3866                                  	;; edx = buffer size
  3867                                  
  3868                                  	; load file into memory
  3869                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001A9F 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001AA5 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001AA7 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001AAD B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001AB2 CD40                <1>  int 40h
  3870 00001AB4 72CF                    	jc	short lff11s_7 ; error !
  3871                                  
  3872                                  	; 01/12/2024
  3873 00001AB6 A3[54810000]            	mov	[count], eax
  3874                                  	;;;
  3875                                  	; 07/12/2024
  3876                                  	;mov	edi, audio_buffer
  3877                                  	;;;
  3878 00001ABB D1E8                    	shr	eax, 1
  3879 00001ABD 7505                    	jnz	short lff11s_8
  3880 00001ABF E92DF3FFFF              	jmp	lff11_eof
  3881                                  
  3882                                  lff11s_8:
  3883 00001AC4 89C1                    	mov	ecx, eax	; word count
  3884                                  lff11s_9:
  3885 00001AC6 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  3886                                  lff11s_1:
  3887                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  3888 00001ACB 66AD                    	lodsw
  3889                                  	; 02/02/2025
  3890 00001ACD 668B16                  	mov	dx, [esi]
  3891 00001AD0 49                      	dec	ecx
  3892 00001AD1 7504                    	jnz	short lff11s_2_1
  3893 00001AD3 66BA8080                	mov	dx, 8080h
  3894                                  lff11s_2_1:	
  3895                                  	; al = [previous_val_l]
  3896                                  	; ah = [previous_val_r]
  3897                                  	; dl = [next_val_l]
  3898                                  	; dh = [next_val_r]
  3899 00001AD7 E883060000              	call	interpolating_5_8bit_stereo
  3900 00001ADC E3AC                    	jecxz	lff11s_3
  3901                                  lff11s_2_2:
  3902 00001ADE 66AD                    	lodsw
  3903                                  	; 02/02/2025
  3904 00001AE0 668B16                  	mov	dx, [esi]
  3905 00001AE3 49                      	dec	ecx
  3906 00001AE4 7504                    	jnz	short lff11s_2_3
  3907 00001AE6 66BA8080                	mov	dx, 8080h
  3908                                  lff11s_2_3:
  3909 00001AEA E85C070000               	call	interpolating_4_8bit_stereo
  3910 00001AEF E399                    	jecxz	lff11s_3
  3911                                  	
  3912 00001AF1 4D                      	dec	ebp
  3913 00001AF2 74D2                    	jz	short lff11s_9
  3914                                  
  3915 00001AF4 66AD                    	lodsw
  3916                                  	; 02/02/2025
  3917 00001AF6 668B16                  	mov	dx, [esi]
  3918 00001AF9 49                      	dec	ecx
  3919 00001AFA 7504                    	jnz	short lff11s_2_4
  3920 00001AFC 66BA8080                	mov	dx, 8080h
  3921                                  lff11s_2_4:
  3922 00001B00 E846070000              	call	interpolating_4_8bit_stereo
  3923 00001B05 E383                    	jecxz	lff11s_3
  3924 00001B07 EBC2                    	jmp	short lff11s_1
  3925                                  
  3926                                  load_11khz_mono_16_bit:
  3927                                  	; 02/02/2025
  3928                                  	; 18/11/2023
  3929 00001B09 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3930                                  					; last of the file?
  3931 00001B10 7402                    	jz	short lff11m2_0		; no
  3932 00001B12 F9                      	stc
  3933 00001B13 C3                      	retn
  3934                                  
  3935                                  lff11m2_0:
  3936                                  	; 01/12/2024
  3937                                  	; edi = audio buffer address
  3938 00001B14 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3939                                          ;mov	edx, [loadsize]
  3940                                  
  3941                                  	; esi = buffer address
  3942                                  	;; edx = buffer size
  3943                                  
  3944                                  	; load file into memory
  3945                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001B19 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001B1F 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001B21 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001B27 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001B2C CD40                <1>  int 40h
  3946 00001B2E 724D                    	jc	short lff11m2_7 ; error !
  3947                                  
  3948                                  	; 01/12/2024
  3949 00001B30 A3[54810000]            	mov	[count], eax
  3950                                  	;;;
  3951                                  	; 07/12/2024
  3952                                  	;mov	edi, audio_buffer
  3953                                  	;;;
  3954 00001B35 D1E8                    	shr	eax, 1
  3955 00001B37 7505                    	jnz	short lff11m2_8
  3956 00001B39 E9B3F2FFFF              	jmp	lff11_eof
  3957                                  
  3958                                  lff11m2_8:
  3959 00001B3E 89C1                    	mov	ecx, eax	; word count
  3960                                  lff11m2_9:
  3961 00001B40 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  3962                                  lff11m2_1:
  3963                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  3964 00001B45 66AD                    	lodsw
  3965                                  	; 02/02/2025
  3966 00001B47 668B16                  	mov	dx, [esi]
  3967 00001B4A 49                      	dec	ecx
  3968 00001B4B 7502                    	jnz	short lff11m2_2_1
  3969 00001B4D 31D2                    	xor	edx, edx
  3970                                  lff11m2_2_1:	
  3971                                  	; ax = [previous_val]
  3972                                  	; dx = [next_val]
  3973 00001B4F E864070000              	call	interpolating_5_16bit_mono
  3974 00001B54 E362                    	jecxz	lff11m2_3
  3975                                  lff11m2_2_2:
  3976 00001B56 66AD                    	lodsw
  3977                                  	; 02/02/2025
  3978 00001B58 668B16                  	mov	dx, [esi]
  3979 00001B5B 49                      	dec	ecx
  3980 00001B5C 7502                    	jnz	short lff11m2_2_3
  3981 00001B5E 31D2                    	xor	edx, edx
  3982                                  lff11m2_2_3:
  3983 00001B60 E87D080000               	call	interpolating_4_16bit_mono
  3984 00001B65 E351                    	jecxz	lff11m2_3
  3985                                  
  3986 00001B67 4D                      	dec	ebp
  3987 00001B68 74D6                    	jz	short lff11m2_9
  3988                                  
  3989 00001B6A 66AD                    	lodsw
  3990                                  	; 02/02/2025
  3991 00001B6C 668B16                  	mov	dx, [esi]
  3992 00001B6F 49                      	dec	ecx
  3993 00001B70 7502                    	jnz	short lff11m2_2_4
  3994 00001B72 31D2                    	xor	edx, edx
  3995                                  lff11m2_2_4:
  3996 00001B74 E869080000               	call	interpolating_4_16bit_mono
  3997 00001B79 E33D                    	jecxz	lff11m2_3
  3998 00001B7B EBC8                    	jmp	short lff11m2_1
  3999                                  
  4000                                  lff11m2_7:
  4001                                  lff11s2_7:
  4002 00001B7D E978F2FFFF              	jmp	lff11_5  ; error
  4003                                  
  4004                                  load_11khz_stereo_16_bit:
  4005                                  	; 17/01/2025
  4006                                  	; 18/11/2023
  4007 00001B82 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4008                                  					; last of the file?
  4009 00001B89 7402                    	jz	short lff11s2_0		; no
  4010 00001B8B F9                      	stc
  4011 00001B8C C3                      	retn
  4012                                  
  4013                                  lff11s2_0:
  4014                                  	; 01/12/2024
  4015                                  	; edi = audio buffer address
  4016 00001B8D BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4017                                          ;mov	edx, [loadsize]
  4018                                  
  4019                                  	; esi = buffer address
  4020                                  	;; edx = buffer size
  4021                                  
  4022                                  	; load file into memory
  4023                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001B92 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001B98 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001B9A 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001BA0 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001BA5 CD40                <1>  int 40h
  4024 00001BA7 72D4                    	jc	short lff11s2_7 ; error !
  4025                                  
  4026                                  	; 01/12/2024
  4027 00001BA9 A3[54810000]            	mov	[count], eax
  4028                                  	;;;
  4029                                  	; 07/12/2024
  4030                                  	;mov	edi, audio_buffer
  4031                                  	;;;
  4032 00001BAE C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  4033 00001BB1 750A                    	jnz	short lff11s2_8
  4034 00001BB3 E939F2FFFF              	jmp	lff11_eof
  4035                                  
  4036                                  lff11m2_3:
  4037                                  lff11s2_3:
  4038 00001BB8 E91CF2FFFF              	jmp	lff11_3	; padfill
  4039                                  		; (put zeros in the remain words of the buffer)
  4040                                  
  4041                                  lff11s2_8:
  4042 00001BBD 89C1                    	mov	ecx, eax	; dword count
  4043                                  lff11s2_9:
  4044 00001BBF BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  4045                                  lff11s2_1:
  4046                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  4047 00001BC4 66AD                    	lodsw
  4048 00001BC6 89C3                    	mov	ebx, eax
  4049 00001BC8 66AD                    	lodsw
  4050 00001BCA 8B16                    	mov	edx, [esi]
  4051                                  	; 17/01/2025
  4052                                  	;mov	[next_val_l], edx
  4053                                  	; 26/11/2023
  4054                                  	;shr	edx, 16
  4055                                  	;mov	[next_val_r], dx
  4056 00001BCC 49                      	dec	ecx
  4057 00001BCD 7502                    	jnz	short lff11s2_2_1
  4058 00001BCF 31D2                    	xor	edx, edx ; 0
  4059                                  	;mov	[next_val_l], dx
  4060                                  	;mov	[next_val_r], dx
  4061                                  lff11s2_2_1:
  4062                                  	; bx = [previous_val_l]
  4063                                  	; ax = [previous_val_r]
  4064                                  	; [next_val_l]
  4065                                  	; dx = [next_val_r]
  4066                                  	;;;
  4067                                  	; 17/01/2025 (BugFix)
  4068 00001BD1 8915[9C240000]          	mov	[next_val_l], edx
  4069                                  	;;;
  4070 00001BD7 E837070000              	call	interpolating_5_16bit_stereo
  4071 00001BDC E3DA                    	jecxz	lff11s2_3
  4072                                  lff11s2_2_2:
  4073 00001BDE 66AD                    	lodsw
  4074 00001BE0 89C3                    	mov	ebx, eax
  4075 00001BE2 66AD                    	lodsw
  4076 00001BE4 8B16                    	mov	edx, [esi]
  4077                                  	; 17/01/2025
  4078                                  	;mov	[next_val_l], dx
  4079                                  	; 26/11/2023
  4080                                  	;shr	edx, 16
  4081                                  	;mov	[next_val_r], dx
  4082 00001BE6 49                      	dec	ecx
  4083 00001BE7 7502                    	jnz	short lff11s2_2_3
  4084 00001BE9 31D2                    	xor	edx, edx ; 0
  4085                                  	;mov	[next_val_l], dx
  4086                                  	;mov	[next_val_r], dx
  4087                                  lff11s2_2_3:
  4088                                  	;;;
  4089                                  	; 17/01/2025 (BugFix)
  4090 00001BEB 8915[9C240000]          	mov	[next_val_l], edx
  4091                                  	;;;
  4092 00001BF1 E825080000              	call	interpolating_4_16bit_stereo
  4093 00001BF6 E3C0                    	jecxz	lff11s2_3
  4094                                  	
  4095 00001BF8 4D                      	dec	ebp
  4096 00001BF9 74C4                    	jz	short lff11s2_9
  4097                                  
  4098 00001BFB 66AD                    	lodsw
  4099 00001BFD 89C3                    	mov	ebx, eax
  4100 00001BFF 66AD                    	lodsw
  4101 00001C01 8B16                    	mov	edx, [esi]
  4102                                  	; 17/01/2025
  4103                                  	;mov	[next_val_l], dx
  4104                                  	; 26/11/2023
  4105                                  	;shr	edx, 16
  4106                                  	;mov	[next_val_r], dx
  4107 00001C03 49                      	dec	ecx
  4108 00001C04 7502                    	jnz	short lff11s2_2_4
  4109 00001C06 31D2                    	xor	edx, edx ; 0
  4110                                  	;mov	[next_val_l], dx
  4111                                  	;mov	[next_val_r], dx
  4112                                  lff11s2_2_4:
  4113                                  	;;;
  4114                                  	; 17/01/2025 (BugFix)
  4115 00001C08 8915[9C240000]          	mov	[next_val_l], edx
  4116                                  	;;;
  4117 00001C0E E808080000               	call	interpolating_4_16bit_stereo
  4118 00001C13 E3A3                    	jecxz	lff11s2_3
  4119 00001C15 EBAD                    	jmp	short lff11s2_1
  4120                                  
  4121                                  ; .....................
  4122                                  
  4123                                  load_44khz_mono_8_bit:
  4124                                  	; 02/02/2025
  4125                                  	; 18/11/2023
  4126 00001C17 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4127                                  					; last of the file?
  4128 00001C1E 7402                    	jz	short lff44m_0		; no
  4129 00001C20 F9                      	stc
  4130 00001C21 C3                      	retn
  4131                                  
  4132                                  lff44m_0:
  4133                                  	; 01/12/2024
  4134                                  	; edi = audio buffer address
  4135 00001C22 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4136                                          ;mov	edx, [loadsize]
  4137                                  
  4138                                  	; esi = buffer address
  4139                                  	;; edx = buffer size
  4140                                  
  4141                                  	; load file into memory
  4142                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001C27 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001C2D 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001C2F 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001C35 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001C3A CD40                <1>  int 40h
  4143 00001C3C 7250                    	jc	short lff44m_7 ; error !
  4144                                  
  4145                                  	; 01/12/2024
  4146 00001C3E A3[54810000]            	mov	[count], eax
  4147                                  	;;;
  4148                                  	; 07/12/2024
  4149                                  	;mov	edi, audio_buffer
  4150                                  	;;;
  4151 00001C43 21C0                    	and	eax, eax
  4152 00001C45 7505                    	jnz	short lff44m_8
  4153 00001C47 E9A5F1FFFF              	jmp	lff44_eof
  4154                                  
  4155                                  lff44m_8:
  4156 00001C4C 89C1                    	mov	ecx, eax	; byte count
  4157                                  lff44m_9:
  4158 00001C4E BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  4159 00001C53 C605[A0240000]02        	mov	byte [faz], 2  ; 2 steps/phases
  4160                                  lff44m_1:
  4161                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  4162                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  4163 00001C5A AC                      	lodsb
  4164                                  	; 02/02/2025
  4165 00001C5B 8A16                    	mov	dl, [esi]
  4166 00001C5D 49                      	dec	ecx
  4167 00001C5E 7502                    	jnz	short lff44m_2_1
  4168 00001C60 B280                    	mov	dl, 80h
  4169                                  lff44m_2_1:	
  4170                                  	; al = [previous_val]
  4171                                  	; dl = [next_val]
  4172 00001C62 E871030000              	call	interpolating_2_8bit_mono
  4173 00001C67 E320                    	jecxz	lff44m_3
  4174                                  lff44m_2_2:
  4175 00001C69 AC                      	lodsb
  4176 00001C6A 2C80                    	sub	al, 80h
  4177 00001C6C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4178 00001C70 66AB                    	stosw		; (L)
  4179 00001C72 66AB                    	stosw		; (R)
  4180                                  
  4181 00001C74 49                      	dec	ecx
  4182 00001C75 7412                    	jz	short lff44m_3
  4183 00001C77 4D                      	dec	ebp
  4184 00001C78 75EF                    	jnz	short lff44m_2_2
  4185                                  	
  4186 00001C7A FE0D[A0240000]          	dec	byte [faz]
  4187 00001C80 74CC                    	jz	short lff44m_9
  4188 00001C82 BD0B000000              	mov	ebp, 11
  4189 00001C87 EBD1                    	jmp	short lff44m_1
  4190                                  
  4191                                  lff44m_3:
  4192                                  lff44s_3:
  4193 00001C89 E94BF1FFFF              	jmp	lff44_3	; padfill
  4194                                  		; (put zeros in the remain words of the buffer)
  4195                                  lff44m_7:
  4196                                  lff44s_7:
  4197 00001C8E E967F1FFFF              	jmp	lff44_5  ; error
  4198                                  
  4199                                  load_44khz_stereo_8_bit:
  4200                                  	; 02/02/2025
  4201                                  	; 16/11/2023
  4202 00001C93 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4203                                  					; last of the file?
  4204 00001C9A 7402                    	jz	short lff44s_0		; no
  4205 00001C9C F9                      	stc
  4206 00001C9D C3                      	retn
  4207                                  
  4208                                  lff44s_0:
  4209                                  	; 01/12/2024
  4210                                  	; edi = audio buffer address
  4211 00001C9E BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4212                                          ;mov	edx, [loadsize]
  4213                                  
  4214                                  	; esi = buffer address
  4215                                  	;; edx = buffer size
  4216                                  
  4217                                  	; load file into memory
  4218                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001CA3 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001CA9 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001CAB 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001CB1 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001CB6 CD40                <1>  int 40h
  4219 00001CB8 72D4                    	jc	short lff44s_7 ; error !
  4220                                  
  4221                                  	; 01/12/2024
  4222 00001CBA A3[54810000]            	mov	[count], eax
  4223                                  	;;;
  4224                                  	; 07/12/2024
  4225                                  	;mov	edi, audio_buffer
  4226                                  	;;;
  4227 00001CBF D1E8                    	shr	eax, 1
  4228 00001CC1 7505                    	jnz	short lff44s_8
  4229 00001CC3 E929F1FFFF              	jmp	lff44_eof
  4230                                  
  4231                                  lff44s_8:
  4232 00001CC8 89C1                    	mov	ecx, eax	; word count
  4233                                  lff44s_9:
  4234 00001CCA BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  4235 00001CCF C605[A0240000]02        	mov	byte [faz], 2  ; 2 steps/phase
  4236                                  lff44s_1:
  4237                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  4238                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  4239 00001CD6 66AD                    	lodsw
  4240                                  	; 02/02/2025
  4241 00001CD8 668B16                  	mov	dx, [esi]
  4242 00001CDB 49                      	dec	ecx
  4243 00001CDC 7504                    	jnz	short lff44s_2_1
  4244 00001CDE 66BA8080                	mov	dx, 8080h
  4245                                  lff44s_2_1:	
  4246                                  	; al = [previous_val_l]
  4247                                  	; ah = [previous_val_r]
  4248                                  	; dl = [next_val_l]
  4249                                  	; dh = [next_val_r]
  4250 00001CE2 E80E030000              	call	interpolating_2_8bit_stereo
  4251 00001CE7 E3A0                    	jecxz	lff44s_3
  4252                                  lff44s_2_2:
  4253 00001CE9 AC                      	lodsb
  4254 00001CEA 2C80                    	sub	al, 80h
  4255 00001CEC 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4256 00001CF0 66AB                    	stosw		; (L)
  4257 00001CF2 AC                      	lodsb
  4258 00001CF3 2C80                    	sub	al, 80h
  4259 00001CF5 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4260 00001CF9 66AB                    	stosw		; (R)
  4261                                  
  4262 00001CFB 49                      	dec	ecx
  4263 00001CFC 748B                    	jz	short lff44s_3
  4264 00001CFE 4D                      	dec	ebp
  4265 00001CFF 75E8                    	jnz	short lff44s_2_2
  4266                                  	
  4267 00001D01 FE0D[A0240000]          	dec	byte [faz]
  4268 00001D07 74C1                    	jz	short lff44s_9
  4269 00001D09 BD0B000000              	mov	ebp, 11
  4270 00001D0E EBC6                    	jmp	short lff44s_1
  4271                                  
  4272                                  load_44khz_mono_16_bit:
  4273                                  	; 02/02/2025
  4274                                  	; 18/11/2023
  4275 00001D10 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4276                                  					; last of the file?
  4277 00001D17 7402                    	jz	short lff44m2_0		; no
  4278 00001D19 F9                      	stc
  4279 00001D1A C3                      	retn
  4280                                  
  4281                                  lff44m2_0:
  4282                                  	; 01/12/2024
  4283                                  	; edi = audio buffer address
  4284 00001D1B BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4285                                          ;mov	edx, [loadsize]
  4286                                  
  4287                                  	; esi = buffer address
  4288                                  	;; edx = buffer size
  4289                                  
  4290                                  	; load file into memory
  4291                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001D20 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001D26 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001D28 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001D2E B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001D33 CD40                <1>  int 40h
  4292 00001D35 724D                    	jc	short lff44m2_7 ; error !
  4293                                  
  4294                                  	; 01/12/2024
  4295 00001D37 A3[54810000]            	mov	[count], eax
  4296                                  	;;;
  4297                                  	; 07/12/2024
  4298                                  	;mov	edi, audio_buffer
  4299                                  	;;;
  4300 00001D3C D1E8                    	shr	eax, 1
  4301 00001D3E 7505                    	jnz	short lff44m2_8
  4302 00001D40 E9ACF0FFFF              	jmp	lff44_eof
  4303                                  
  4304                                  lff44m2_8:
  4305 00001D45 89C1                    	mov	ecx, eax	; word count
  4306                                  lff44m2_9:
  4307 00001D47 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  4308 00001D4C C605[A0240000]02        	mov	byte [faz], 2  ; 2 steps/phases
  4309                                  lff44m2_1:
  4310                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  4311                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  4312 00001D53 66AD                    	lodsw
  4313                                  	; 02/02/2025
  4314 00001D55 668B16                  	mov	dx, [esi]
  4315 00001D58 49                      	dec	ecx
  4316 00001D59 7502                    	jnz	short lff44m2_2_1
  4317 00001D5B 31D2                    	xor	edx, edx
  4318                                  lff44m2_2_1:	
  4319                                  	; ax = [previous_val]
  4320                                  	; dx = [next_val]
  4321 00001D5D E857030000              	call	interpolating_2_16bit_mono
  4322 00001D62 E31B                    	jecxz	lff44m2_3
  4323                                  lff44m2_2_2:
  4324 00001D64 66AD                    	lodsw
  4325 00001D66 66AB                    	stosw		; (L)eft Channel
  4326 00001D68 66AB                    	stosw		; (R)ight Channel
  4327                                  
  4328 00001D6A 49                      	dec	ecx
  4329 00001D6B 7412                    	jz	short lff44m2_3
  4330 00001D6D 4D                      	dec	ebp
  4331 00001D6E 75F4                    	jnz	short lff44m2_2_2
  4332                                  	
  4333 00001D70 FE0D[A0240000]          	dec	byte [faz]
  4334 00001D76 74CF                    	jz	short lff44m2_9
  4335 00001D78 BD0B000000              	mov	ebp, 11
  4336 00001D7D EBD4                    	jmp	short lff44m2_1
  4337                                  
  4338                                  lff44m2_3:
  4339                                  lff44s2_3:
  4340 00001D7F E955F0FFFF              	jmp	lff44_3	; padfill
  4341                                  		; (put zeros in the remain words of the buffer)
  4342                                  lff44m2_7:
  4343                                  lff44s2_7:
  4344 00001D84 E971F0FFFF              	jmp	lff44_5  ; error
  4345                                  
  4346                                  load_44khz_stereo_16_bit:
  4347                                  	; 18/11/2023
  4348 00001D89 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4349                                  					; last of the file?
  4350 00001D90 7402                    	jz	short lff44s2_0		; no
  4351 00001D92 F9                      	stc
  4352 00001D93 C3                      	retn
  4353                                  
  4354                                  lff44s2_0:
  4355                                  	; 01/12/2024
  4356                                  	; edi = audio buffer address
  4357 00001D94 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4358                                          ;mov	edx, [loadsize]
  4359                                  
  4360                                  	; esi = buffer address
  4361                                  	;; edx = buffer size
  4362                                  
  4363                                  	; load file into memory
  4364                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001D99 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001D9F 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001DA1 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001DA7 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001DAC CD40                <1>  int 40h
  4365 00001DAE 72D4                    	jc	short lff44s2_7 ; error !
  4366                                  
  4367                                  	; 01/12/2024
  4368 00001DB0 A3[54810000]            	mov	[count], eax
  4369                                  	;;;
  4370                                  	; 07/12/2024
  4371                                  	;mov	edi, audio_buffer
  4372                                  	;;;
  4373 00001DB5 C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  4374 00001DB8 7505                    	jnz	short lff44s2_8
  4375 00001DBA E932F0FFFF              	jmp	lff44_eof
  4376                                  
  4377                                  lff44s2_8:
  4378 00001DBF 89C1                    	mov	ecx, eax	; dword count
  4379                                  lff44s2_9:
  4380 00001DC1 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  4381 00001DC6 C605[A0240000]02        	mov	byte [faz], 2  ; 2 steps/phase
  4382                                  lff44s2_1:
  4383                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  4384                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  4385 00001DCD 66AD                    	lodsw
  4386 00001DCF 89C3                    	mov	ebx, eax
  4387 00001DD1 66AD                    	lodsw
  4388                                  	;mov	dx, [esi]
  4389                                  	;mov	[next_val_l], dx
  4390                                  	;mov	dx, [esi+2]
  4391                                  	; 26/11/2023
  4392 00001DD3 8B16                    	mov	edx, [esi]
  4393 00001DD5 668915[9C240000]        	mov	[next_val_l], dx
  4394 00001DDC C1EA10                  	shr	edx, 16
  4395 00001DDF 49                      	dec	ecx
  4396 00001DE0 7509                    	jnz	short lff44s2_2_1
  4397 00001DE2 31D2                    	xor	edx, edx ; 0
  4398 00001DE4 668915[9C240000]        	mov	[next_val_l], dx
  4399                                  lff44s2_2_1:
  4400                                  	; bx = [previous_val_l]
  4401                                  	; ax = [previous_val_r]
  4402                                  	; [next_val_l]
  4403                                  	; dx = [next_val_r]
  4404 00001DEB E8E1020000              	call	interpolating_2_16bit_stereo
  4405 00001DF0 E38D                    	jecxz	lff44s2_3
  4406                                  lff44s2_2_2:
  4407                                  	;movsw		; (L)eft Channel
  4408                                  	;movsw		; (R)ight Channel
  4409 00001DF2 A5                      	movsd
  4410                                  
  4411 00001DF3 49                      	dec	ecx
  4412 00001DF4 7489                    	jz	short lff44s2_3	
  4413 00001DF6 4D                      	dec	ebp
  4414 00001DF7 75F9                    	jnz	short lff44s2_2_2
  4415                                  	
  4416 00001DF9 FE0D[A0240000]          	dec	byte [faz]
  4417 00001DFF 74C0                    	jz	short lff44s2_9 
  4418 00001E01 BD0B000000              	mov	ebp, 11
  4419 00001E06 EBC5                    	jmp	short lff44s2_1
  4420                                  
  4421                                  ; .....................
  4422                                  
  4423                                  	; 02/02/2025
  4424                                  load_12khz_mono_8_bit:
  4425 00001E08 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4426                                  					; last of the file?
  4427 00001E0F 7402                    	jz	short lff12m_0		; no
  4428 00001E11 F9                      	stc
  4429 00001E12 C3                      	retn
  4430                                  
  4431                                  lff12m_0:
  4432                                  	; edi = audio buffer address
  4433 00001E13 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4434                                  
  4435                                  	; load file into memory
  4436                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001E18 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001E1E 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001E20 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001E26 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001E2B CD40                <1>  int 40h
  4437 00001E2D 7256                    	jc	short lff12m_7 ; error !
  4438                                  
  4439 00001E2F A3[54810000]            	mov	[count], eax
  4440                                  
  4441 00001E34 21C0                    	and	eax, eax
  4442 00001E36 7505                    	jnz	short lff12m_8
  4443 00001E38 E9B4EFFFFF              	jmp	lff12_eof
  4444                                  
  4445                                  lff12m_8:
  4446 00001E3D 89C1                    	mov	ecx, eax		; byte count
  4447                                  lff12m_1:
  4448                                  	; original-interpolated-interpolated-interpolated
  4449 00001E3F AC                      	lodsb
  4450                                  	; 02/02/2025
  4451 00001E40 8A16                    	mov	dl, [esi]
  4452 00001E42 49                      	dec	ecx
  4453 00001E43 7502                    	jnz	short lff12m_2
  4454 00001E45 B280                    	mov	dl, 80h
  4455                                  lff12m_2:	
  4456                                  	; al = [previous_val]
  4457                                  	; dl = [next_val]
  4458 00001E47 E8C0030000               	call	interpolating_4_8bit_mono
  4459 00001E4C E353                    	jecxz	lff12m_3
  4460 00001E4E EBEF                    	jmp	short lff12m_1
  4461                                  
  4462                                  	; 02/02/2025
  4463                                  load_12khz_stereo_8_bit:
  4464 00001E50 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4465                                  					; last of the file?
  4466 00001E57 7402                    	jz	short lff12s_0		; no
  4467 00001E59 F9                      	stc
  4468 00001E5A C3                      	retn
  4469                                  
  4470                                  lff12s_0:
  4471                                  	; edi = audio buffer address
  4472 00001E5B BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4473                                  
  4474                                  	; load file into memory
  4475                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001E60 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001E66 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001E68 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001E6E B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001E73 CD40                <1>  int 40h
  4476 00001E75 720E                    	jc	short lff12s_7 ; error !
  4477                                  
  4478 00001E77 A3[54810000]            	mov	[count], eax
  4479                                  
  4480 00001E7C D1E8                    	shr	eax, 1
  4481 00001E7E 750A                    	jnz	short lff12s_8
  4482 00001E80 E96CEFFFFF              	jmp	lff12_eof
  4483                                  
  4484                                  lff12m_7:
  4485                                  lff12s_7:
  4486 00001E85 E970EFFFFF              	jmp	lff12_5  ; error
  4487                                  
  4488                                  lff12s_8:
  4489 00001E8A 89C1                    	mov	ecx, eax	; word count
  4490                                  lff12s_1:
  4491                                  	; original-interpolated-interpolated-interpolated
  4492 00001E8C 66AD                    	lodsw
  4493                                  	; 02/02/2025
  4494 00001E8E 668B16                  	mov	dx, [esi]
  4495 00001E91 49                      	dec	ecx
  4496 00001E92 7504                    	jnz	short lff12s_2
  4497 00001E94 66BA8080                	mov	dx, 8080h
  4498                                  lff12s_2:	
  4499                                  	; al = [previous_val_l]
  4500                                  	; ah = [previous_val_r]
  4501                                  	; dl = [next_val_l]
  4502                                  	; dh = [next_val_r]
  4503 00001E98 E8AE030000              	call	interpolating_4_8bit_stereo
  4504 00001E9D E302                    	jecxz	lff12s_3
  4505 00001E9F EBEB                    	jmp	short lff12s_1
  4506                                  
  4507                                  lff12m_3:
  4508                                  lff12s_3:
  4509 00001EA1 E933EFFFFF              	jmp	lff12_3	; padfill
  4510                                  		; (put zeros in the remain words of the buffer)
  4511                                  
  4512                                  	; 02/02/2025
  4513                                  load_12khz_mono_16_bit:
  4514 00001EA6 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4515                                  					; last of the file?
  4516 00001EAD 7402                    	jz	short lff12m2_0		; no
  4517 00001EAF F9                      	stc
  4518 00001EB0 C3                      	retn
  4519                                  
  4520                                  lff12m2_0:
  4521                                  	; edi = audio buffer address
  4522 00001EB1 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4523                                  
  4524                                  	; load file into memory
  4525                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001EB6 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001EBC 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001EBE 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001EC4 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001EC9 CD40                <1>  int 40h
  4526 00001ECB 7223                    	jc	short lff12m2_7 ; error !
  4527                                  
  4528 00001ECD A3[54810000]            	mov	[count], eax
  4529                                  
  4530 00001ED2 D1E8                    	shr	eax, 1
  4531 00001ED4 7505                    	jnz	short lff12m2_8
  4532 00001ED6 E916EFFFFF              	jmp	lff12_eof
  4533                                  
  4534                                  lff12m2_8:
  4535 00001EDB 89C1                    	mov	ecx, eax	; word count
  4536                                  lff12m2_1:
  4537                                  	; original-interpolated-interpolated-interpolated
  4538 00001EDD 66AD                    	lodsw
  4539                                  	; 02/02/2025
  4540 00001EDF 668B16                  	mov	dx, [esi]
  4541 00001EE2 49                      	dec	ecx
  4542 00001EE3 7502                    	jnz	short lff12m2_2
  4543 00001EE5 31D2                    	xor	edx, edx
  4544                                  lff12m2_2:	
  4545                                  	; ax = [previous_val]
  4546                                  	; dx = [next_val]
  4547 00001EE7 E8F6040000               	call	interpolating_4_16bit_mono
  4548 00001EEC E3B3                    	jecxz	lff12m_3
  4549 00001EEE EBED                    	jmp	short lff12m2_1
  4550                                  
  4551                                  lff12m2_7:
  4552                                  lff12s2_7:
  4553 00001EF0 E905EFFFFF              	jmp	lff12_5  ; error
  4554                                  
  4555                                  	; 02/02/2025
  4556                                  load_12khz_stereo_16_bit:
  4557 00001EF5 F605[CE800000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4558                                  					; last of the file?
  4559 00001EFC 7402                    	jz	short lff12s2_0		; no
  4560 00001EFE F9                      	stc
  4561 00001EFF C3                      	retn
  4562                                  
  4563                                  lff12s2_0:
  4564                                  	; edi = audio buffer address
  4565 00001F00 BE[00900100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4566                                  
  4567                                  	; load file into memory
  4568                                  	sys 	_read, [filehandle], esi, [loadsize]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00001F05 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00001F0B 89F1                <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00001F0D 8B15[44810000]      <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00001F13 B803000000          <1>  mov eax, %1
   100                              <1> 
   101 00001F18 CD40                <1>  int 40h
  4569 00001F1A 72D4                    	jc	short lff12s2_7 ; error !
  4570                                  
  4571 00001F1C A3[54810000]            	mov	[count], eax
  4572                                  
  4573 00001F21 C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  4574 00001F24 750A                    	jnz	short lff12s2_8
  4575 00001F26 E9C6EEFFFF              	jmp	lff12_eof
  4576                                  
  4577                                  lff12m2_3:
  4578                                  lff12s2_3:
  4579 00001F2B E9A9EEFFFF              	jmp	lff12_3	; padfill
  4580                                  		; (put zeros in the remain words of the buffer)
  4581                                  
  4582                                  lff12s2_8:
  4583 00001F30 89C1                    	mov	ecx, eax	; dword count
  4584                                  lff12s2_1:
  4585                                  	; original-interpolated-interpolated-interpolated
  4586 00001F32 66AD                    	lodsw
  4587 00001F34 89C3                    	mov	ebx, eax
  4588 00001F36 66AD                    	lodsw
  4589 00001F38 8B16                    	mov	edx, [esi]
  4590 00001F3A 49                      	dec	ecx
  4591 00001F3B 7502                    	jnz	short lff12s2_2
  4592 00001F3D 31D2                    	xor	edx, edx ; 0
  4593                                  lff12s2_2:
  4594                                  	;mov	[next_val_l], dx
  4595                                  	;shr	edx, 16
  4596                                  	;mov	[next_val_r], dx
  4597                                  	; 02/02/2025
  4598 00001F3F 8915[9C240000]          	mov	[next_val_l], edx
  4599                                  
  4600                                  	; bx = [previous_val_l]
  4601                                  	; ax = [previous_val_r]
  4602                                  	; [next_val_l]
  4603                                  	; [next_val_r]
  4604 00001F45 E8D1040000              	call	interpolating_4_16bit_stereo
  4605 00001F4A E3DF                    	jecxz	lff12s2_3
  4606 00001F4C EBE4                    	jmp	short lff12s2_1
  4607                                  
  4608                                  ; .....................
  4609                                  
  4610                                  interpolating_3_8bit_mono:
  4611                                  	; 02/02/2025
  4612                                  	; 16/11/2023
  4613                                  	; al = [previous_val]
  4614                                  	; dl = [next_val]
  4615                                  	; original-interpolated-interpolated
  4616 00001F4E 88C3                    	mov	bl, al
  4617 00001F50 2C80                    	sub	al, 80h
  4618 00001F52 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4619 00001F56 66AB                    	stosw		; original sample (L)
  4620 00001F58 66AB                    	stosw		; original sample (R)
  4621 00001F5A 88D8                    	mov	al, bl
  4622 00001F5C 00D0                    	add	al, dl
  4623 00001F5E D0D8                    	rcr	al, 1
  4624 00001F60 88C7                    	mov	bh, al	; interpolated middle (temporary)
  4625 00001F62 00D8                    	add	al, bl
  4626 00001F64 D0D8                    	rcr	al, 1
  4627 00001F66 2C80                    	sub	al, 80h
  4628 00001F68 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4629 00001F6C 66AB                    	stosw		; interpolated sample 1 (L)
  4630 00001F6E 66AB                    	stosw		; interpolated sample 1 (R)
  4631 00001F70 88F8                    	mov	al, bh
  4632 00001F72 00D0                    	add	al, dl	; [next_val]
  4633 00001F74 D0D8                    	rcr	al, 1
  4634                                  	; 02/02/2025
  4635 00001F76 2C80                    	sub	al, 80h
  4636 00001F78 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4637 00001F7C 66AB                    	stosw		; interpolated sample 2 (L)
  4638 00001F7E 66AB                    	stosw		; interpolated sample 2 (R)
  4639 00001F80 C3                      	retn
  4640                                  
  4641                                  interpolating_3_8bit_stereo:
  4642                                  	; 02/02/2025
  4643                                  	; 16/11/2023
  4644                                  	; al = [previous_val_l]
  4645                                  	; ah = [previous_val_r]
  4646                                  	; dl = [next_val_l]
  4647                                  	; dh = [next_val_r]	
  4648                                  	; original-interpolated-interpolated
  4649 00001F81 89C3                    	mov	ebx, eax
  4650 00001F83 2C80                    	sub	al, 80h
  4651 00001F85 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4652 00001F89 66AB                    	stosw		; original sample (L)
  4653 00001F8B 88F8                    	mov	al, bh
  4654 00001F8D 2C80                    	sub	al, 80h
  4655 00001F8F 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4656 00001F93 66AB                    	stosw		; original sample (R)
  4657 00001F95 88D8                    	mov	al, bl
  4658 00001F97 00D0                    	add	al, dl	; [next_val_l]
  4659 00001F99 D0D8                    	rcr	al, 1
  4660 00001F9B 50                      	push	eax ; *	; al = interpolated middle (L) (temporary)
  4661 00001F9C 00D8                    	add	al, bl	; [previous_val_l]
  4662 00001F9E D0D8                    	rcr	al, 1
  4663 00001FA0 2C80                    	sub	al, 80h
  4664 00001FA2 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4665 00001FA6 66AB                    	stosw		; interpolated sample 1 (L)
  4666 00001FA8 88F8                    	mov	al, bh
  4667 00001FAA 00F0                    	add	al, dh	; [next_val_r]
  4668 00001FAC D0D8                    	rcr	al, 1
  4669 00001FAE 50                      	push	eax ; ** ; al = interpolated middle (R) (temporary)
  4670 00001FAF 00F8                    	add	al, bh	; [previous_val_r]
  4671 00001FB1 D0D8                    	rcr	al, 1
  4672 00001FB3 2C80                    	sub	al, 80h
  4673 00001FB5 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4674 00001FB9 66AB                    	stosw		; interpolated sample 1 (R)
  4675 00001FBB 5B                      	pop	ebx ; **
  4676 00001FBC 58                      	pop	eax ; *
  4677 00001FBD 00D0                    	add	al, dl	; [next_val_l]
  4678 00001FBF D0D8                    	rcr	al, 1
  4679                                  	; 02/02/2025
  4680 00001FC1 2C80                    	sub	al, 80h
  4681 00001FC3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4682 00001FC7 66AB                    	stosw		; interpolated sample 2 (L)
  4683 00001FC9 88D8                    	mov	al, bl
  4684 00001FCB 00F0                    	add	al, dh	; [next_val_r]
  4685 00001FCD D0D8                    	rcr	al, 1
  4686                                  	; 02/02/2025
  4687 00001FCF 2C80                    	sub	al, 80h
  4688 00001FD1 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4689 00001FD5 66AB                    	stosw		; interpolated sample 2 (R)
  4690 00001FD7 C3                      	retn
  4691                                  
  4692                                  interpolating_2_8bit_mono:
  4693                                  	; 16/11/2023
  4694                                  	; al = [previous_val]
  4695                                  	; dl = [next_val]
  4696                                  	; original-interpolated
  4697 00001FD8 88C3                    	mov	bl, al
  4698 00001FDA 2C80                    	sub	al, 80h
  4699 00001FDC 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4700 00001FE0 66AB                    	stosw		; original sample (L)
  4701 00001FE2 66AB                    	stosw		; original sample (R)
  4702 00001FE4 88D8                    	mov	al, bl
  4703 00001FE6 00D0                    	add	al, dl
  4704 00001FE8 D0D8                    	rcr	al, 1
  4705 00001FEA 2C80                    	sub	al, 80h
  4706 00001FEC 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4707 00001FF0 66AB                    	stosw		; interpolated sample (L)
  4708 00001FF2 66AB                    	stosw		; interpolated sample (R)
  4709 00001FF4 C3                      	retn
  4710                                  
  4711                                  interpolating_2_8bit_stereo:
  4712                                  	; 16/11/2023
  4713                                  	; al = [previous_val_l]
  4714                                  	; ah = [previous_val_r]
  4715                                  	; dl = [next_val_l]
  4716                                  	; dh = [next_val_r]
  4717                                  	; original-interpolated
  4718 00001FF5 89C3                    	mov	ebx, eax
  4719 00001FF7 2C80                    	sub	al, 80h
  4720 00001FF9 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4721 00001FFD 66AB                    	stosw		; original sample (L)
  4722 00001FFF 88F8                    	mov	al, bh
  4723 00002001 2C80                    	sub	al, 80h
  4724 00002003 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4725 00002007 66AB                    	stosw		; original sample (R)
  4726 00002009 88D8                    	mov	al, bl	; [previous_val_l]
  4727 0000200B 00D0                    	add	al, dl	; [next_val_l]
  4728 0000200D D0D8                    	rcr	al, 1
  4729 0000200F 2C80                    	sub	al, 80h
  4730 00002011 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4731 00002015 66AB                    	stosw		; interpolated sample (L)
  4732 00002017 88F8                    	mov	al, bh
  4733 00002019 00F0                    	add	al, dh	; [next_val_r]
  4734 0000201B D0D8                    	rcr	al, 1
  4735 0000201D 2C80                    	sub	al, 80h
  4736 0000201F 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4737 00002023 66AB                    	stosw		; interpolated sample (R)
  4738 00002025 C3                      	retn
  4739                                  
  4740                                  interpolating_3_16bit_mono:
  4741                                  	; 16/11/2023
  4742                                  	; ax = [previous_val]
  4743                                  	; dx = [next_val]
  4744                                  	; original-interpolated-interpolated
  4745                                  
  4746 00002026 66AB                    	stosw		; original sample (L)
  4747 00002028 66AB                    	stosw		; original sample (R)
  4748 0000202A 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4749 0000202D 50                      	push	eax ; *	; [previous_val]
  4750 0000202E 80C680                  	add	dh, 80h
  4751 00002031 6601D0                  	add	ax, dx
  4752 00002034 66D1D8                  	rcr	ax, 1
  4753 00002037 5B                      	pop	ebx ; *
  4754 00002038 93                      	xchg	ebx, eax ; bx  = interpolated middle (temporary)
  4755 00002039 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
  4756 0000203C 66D1D8                  	rcr	ax, 1
  4757 0000203F 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4758 00002042 66AB                    	stosw 		; interpolated sample 1 (L)
  4759 00002044 66AB                    	stosw		; interpolated sample 1 (R)
  4760 00002046 89D8                    	mov	eax, ebx
  4761 00002048 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  4762 0000204B 66D1D8                  	rcr	ax, 1
  4763 0000204E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4764 00002051 66AB                    	stosw		; interpolated sample 2 (L)
  4765 00002053 66AB                    	stosw		; interpolated sample 2 (R)
  4766 00002055 C3                      	retn
  4767                                  
  4768                                  interpolating_3_16bit_stereo:
  4769                                  	; 16/11/2023
  4770                                  	; bx = [previous_val_l]
  4771                                  	; ax = [previous_val_r]
  4772                                  	; [next_val_l]
  4773                                  	; dx = [next_val_r]
  4774                                  	; original-interpolated-interpolated
  4775                                  
  4776 00002056 93                      	xchg	eax, ebx
  4777 00002057 66AB                    	stosw		; original sample (L)
  4778 00002059 93                      	xchg	eax, ebx
  4779 0000205A 66AB                    	stosw		; original sample (R)
  4780 0000205C 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4781 0000205F 50                      	push	eax ; *	; [previous_val_r]
  4782 00002060 80C780                  	add	bh, 80h
  4783 00002063 8005[9D240000]80        	add	byte [next_val_l+1], 80h
  4784 0000206A 66A1[9C240000]          	mov	ax, [next_val_l]
  4785 00002070 6601D8                  	add	ax, bx	; [previous_val_l]
  4786 00002073 66D1D8                  	rcr	ax, 1
  4787 00002076 93                      	xchg	eax, ebx ; ax = [previous_val_l]
  4788 00002077 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
  4789 0000207A 66D1D8                  	rcr	ax, 1
  4790 0000207D 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4791 00002080 66AB                    	stosw 		; interpolated sample 1 (L)
  4792 00002082 58                      	pop	eax  ; *
  4793 00002083 80C680                  	add	dh, 80h ; convert sound level 0 to 65535 format
  4794 00002086 52                      	push	edx  ; * ; [next_val_r]
  4795 00002087 92                      	xchg	eax, edx
  4796 00002088 6601D0                  	add	ax, dx	; [next_val_r] + [previous_val_r]
  4797 0000208B 66D1D8                  	rcr	ax, 1	; / 2
  4798 0000208E 50                      	push	eax ; ** ; interpolated middle (R)
  4799 0000208F 6601D0                  	add	ax, dx	; + [previous_val_r]
  4800 00002092 66D1D8                  	rcr	ax, 1
  4801 00002095 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4802 00002098 66AB                    	stosw 		; interpolated sample 1 (R)
  4803 0000209A 66A1[9C240000]          	mov	ax, [next_val_l]
  4804 000020A0 6601D8                  	add	ax, bx	; + interpolated middle (L)
  4805 000020A3 66D1D8                  	rcr	ax, 1
  4806 000020A6 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4807 000020A9 66AB                    	stosw 		; interpolated sample 2 (L)
  4808 000020AB 58                      	pop	eax ; **
  4809 000020AC 5A                      	pop	edx ; *
  4810 000020AD 6601D0                  	add	ax, dx	; interpolated middle + [next_val_r]
  4811 000020B0 66D1D8                  	rcr	ax, 1	; / 2
  4812 000020B3 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4813 000020B6 66AB                    	stosw 		; interpolated sample 2 (L)
  4814 000020B8 C3                      	retn
  4815                                  
  4816                                  interpolating_2_16bit_mono:
  4817                                  	; 16/11/2023
  4818                                  	; ax = [previous_val]
  4819                                  	; dx = [next_val]
  4820                                  	; original-interpolated
  4821                                  
  4822 000020B9 66AB                    	stosw		; original sample (L)
  4823 000020BB 66AB                    	stosw		; original sample (R)
  4824 000020BD 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4825 000020C0 80C680                  	add	dh, 80h
  4826 000020C3 6601D0                  	add	ax, dx
  4827 000020C6 66D1D8                  	rcr	ax, 1
  4828 000020C9 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4829 000020CC 66AB                    	stosw		; interpolated sample (L)
  4830 000020CE 66AB                    	stosw		; interpolated sample (R)
  4831 000020D0 C3                      	retn
  4832                                  
  4833                                  interpolating_2_16bit_stereo:
  4834                                  	; 17/01/2025
  4835                                  	; 16/11/2023
  4836                                  	; bx = [previous_val_l]
  4837                                  	; ax = [previous_val_r]
  4838                                  	; [next_val_l]
  4839                                  	; dx = [next_val_r]
  4840                                  	; original-interpolated
  4841                                  
  4842 000020D1 93                      	xchg	eax, ebx
  4843 000020D2 66AB                    	stosw		; original sample (L)
  4844 000020D4 93                      	xchg	eax, ebx
  4845 000020D5 66AB                    	stosw		; original sample (R)
  4846 000020D7 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4847 000020DA 80C680                  	add	dh, 80h
  4848 000020DD 6601D0                  	add	ax, dx	; [previous_val_r] + [next_val_r]
  4849 000020E0 66D1D8                  	rcr	ax, 1	; / 2
  4850                                  	; 17/01/2025
  4851 000020E3 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4852                                  	;push	eax ; *	; interpolated sample (R)
  4853                                  	; 17/01/2025
  4854 000020E6 C1E010                  	shl	eax, 16
  4855 000020E9 66A1[9C240000]          	mov	ax, [next_val_l]
  4856 000020EF 80C480                  	add	ah, 80h
  4857 000020F2 80C780                  	add	bh, 80h
  4858 000020F5 6601D8                  	add	ax, bx	; [next_val_l] + [previous_val_l]
  4859 000020F8 66D1D8                  	rcr	ax, 1	; / 2
  4860 000020FB 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4861                                  	; 17/01/2025
  4862                                  	;stosw 		; interpolated sample (L)
  4863                                  	;pop	eax ; *
  4864                                  	;sub	ah, 80h	; -32768 to +32767 format again
  4865                                  	;stosw 		; interpolated sample (R)
  4866                                  	; 17/01/2025
  4867 000020FE AB                      	stosd
  4868 000020FF C3                      	retn
  4869                                  
  4870                                  interpolating_5_8bit_mono:
  4871                                  	; 17/11/2023
  4872                                  	; al = [previous_val]
  4873                                  	; dl = [next_val]
  4874                                  	; original-interpltd-interpltd-interpltd-interpltd
  4875 00002100 88C3                    	mov	bl, al
  4876 00002102 2C80                    	sub	al, 80h
  4877 00002104 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4878 00002108 66AB                    	stosw		; original sample (L)
  4879 0000210A 66AB                    	stosw		; original sample (R)
  4880 0000210C 88D8                    	mov	al, bl
  4881 0000210E 00D0                    	add	al, dl
  4882 00002110 D0D8                    	rcr	al, 1
  4883 00002112 88C7                    	mov	bh, al	; interpolated middle (temporary)
  4884 00002114 00D8                    	add	al, bl  ; [previous_val]
  4885 00002116 D0D8                    	rcr	al, 1
  4886 00002118 88C6                    	mov	dh, al	; interpolated 1st quarter (temporary)
  4887 0000211A 00D8                    	add	al, bl
  4888 0000211C D0D8                    	rcr	al, 1
  4889 0000211E 2C80                    	sub	al, 80h
  4890 00002120 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4891 00002124 66AB                    	stosw		; interpolated sample 1 (L)
  4892 00002126 66AB                    	stosw		; interpolated sample 1 (R)
  4893 00002128 88F8                    	mov	al, bh
  4894 0000212A 00F0                    	add	al, dh
  4895 0000212C D0D8                    	rcr	al, 1
  4896 0000212E 2C80                    	sub	al, 80h
  4897 00002130 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4898 00002134 66AB                    	stosw		; interpolated sample 2 (L)
  4899 00002136 66AB                    	stosw		; interpolated sample 2 (R)
  4900 00002138 88F8                    	mov	al, bh
  4901 0000213A 00D0                    	add	al, dl	; [next_val]
  4902 0000213C D0D8                    	rcr	al, 1
  4903 0000213E 88C6                    	mov	dh, al	; interpolated 3rd quarter (temporary)
  4904 00002140 00F8                    	add	al, bh
  4905 00002142 D0D8                    	rcr	al, 1
  4906 00002144 2C80                    	sub	al, 80h
  4907 00002146 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4908 0000214A 66AB                    	stosw		; interpolated sample 3 (L)
  4909 0000214C 66AB                    	stosw		; interpolated sample 3 (R)
  4910 0000214E 88F0                    	mov	al, dh
  4911 00002150 00D0                    	add	al, dl
  4912 00002152 D0D8                    	rcr	al, 1
  4913 00002154 2C80                    	sub	al, 80h
  4914 00002156 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4915 0000215A 66AB                    	stosw		; interpolated sample 4 (L)
  4916 0000215C 66AB                    	stosw		; interpolated sample 4 (R)
  4917 0000215E C3                      	retn
  4918                                  
  4919                                  interpolating_5_8bit_stereo:
  4920                                  	; 17/11/2023
  4921                                  	; al = [previous_val_l]
  4922                                  	; ah = [previous_val_r]
  4923                                  	; dl = [next_val_l]
  4924                                  	; dh = [next_val_r]
  4925                                  	; original-interpltd-interpltd-interpltd-interpltd
  4926 0000215F 89C3                    	mov	ebx, eax
  4927 00002161 2C80                    	sub	al, 80h
  4928 00002163 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4929 00002167 66AB                    	stosw		; original sample (L)
  4930 00002169 88F8                    	mov	al, bh
  4931 0000216B 2C80                    	sub	al, 80h
  4932 0000216D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4933 00002171 66AB                    	stosw		; original sample (R)
  4934 00002173 52                      	push	edx ; *
  4935 00002174 88D8                    	mov	al, bl
  4936 00002176 00D0                    	add	al, dl	; [next_val_l]
  4937 00002178 D0D8                    	rcr	al, 1
  4938 0000217A 50                      	push	eax ; ** ; al = interpolated middle (L) (temporary)
  4939 0000217B 00D8                    	add	al, bl	; [previous_val_l]
  4940 0000217D D0D8                    	rcr	al, 1
  4941 0000217F 86D8                    	xchg	al, bl
  4942 00002181 00D8                    	add	al, bl	; bl = interpolated 1st quarter (L) (temp)
  4943 00002183 D0D8                    	rcr	al, 1
  4944 00002185 2C80                    	sub	al, 80h
  4945 00002187 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4946 0000218B 66AB                    	stosw		; interpolated sample 1 (L)
  4947 0000218D 88F8                    	mov	al, bh
  4948 0000218F 00F0                    	add	al, dh	; [next_val_r]
  4949 00002191 D0D8                    	rcr	al, 1
  4950 00002193 50                      	push	eax ; *** ; al = interpolated middle (R) (temporary)
  4951 00002194 00F8                    	add	al, bh	; [previous_val_r]
  4952 00002196 D0D8                    	rcr	al, 1
  4953 00002198 86F8                    	xchg	al, bh
  4954 0000219A 00F8                    	add	al, bh	; bh = interpolated 1st quarter (R) (temp)
  4955 0000219C D0D8                    	rcr	al, 1
  4956 0000219E 2C80                    	sub	al, 80h
  4957 000021A0 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4958 000021A4 66AB                    	stosw		; interpolated sample 1 (R)
  4959 000021A6 5A                      	pop	edx ; ***
  4960 000021A7 58                      	pop	eax ; ** ; al = interpolated middle (L) (temporary)
  4961 000021A8 86D8                    	xchg	al, bl	; al = interpolated 1st quarter (L) (temp)
  4962 000021AA 00D8                    	add	al, bl	; bl = interpolated middle (L) (temporary)
  4963 000021AC D0D8                    	rcr	al, 1
  4964 000021AE 2C80                    	sub	al, 80h
  4965 000021B0 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4966 000021B4 66AB                    	stosw		; interpolated sample 2 (L)	
  4967 000021B6 88D0                    	mov	al, dl 	; interpolated middle (R) (temporary)
  4968 000021B8 86F8                    	xchg	al, bh	; al = interpolated 1st quarter (R) (temp)
  4969 000021BA 00F8                    	add	al, bh	; bh = interpolated middle (R) (temporary)
  4970 000021BC D0D8                    	rcr	al, 1
  4971 000021BE 2C80                    	sub	al, 80h
  4972 000021C0 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4973 000021C4 66AB                    	stosw		; interpolated sample 2 (R)
  4974 000021C6 5A                      	pop	edx ; *
  4975 000021C7 88D8                    	mov	al, bl	; interpolated middle (L) (temporary)
  4976 000021C9 00D0                    	add	al, dl	; [next_val_l]
  4977 000021CB D0D8                    	rcr	al, 1
  4978 000021CD 86D8                    	xchg	al, bl	; al = interpolated middle (R) (temporary)
  4979 000021CF 00D8                    	add	al, bl	; bl = interpolated 3rd quarter (L) (temp)
  4980 000021D1 D0D8                    	rcr	al, 1
  4981 000021D3 2C80                    	sub	al, 80h
  4982 000021D5 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4983 000021D9 66AB                    	stosw		; interpolated sample 3 (L)
  4984 000021DB 88F8                    	mov	al, bh	
  4985 000021DD 00F0                    	add	al, dh	; interpolated middle (R) + [next_val_r]
  4986 000021DF D0D8                    	rcr	al, 1
  4987 000021E1 86F8                    	xchg	al, bh	; al = interpolated middle (R)
  4988 000021E3 00F8                    	add	al, bh	; bh = interpolated 3rd quarter (R) (temp)
  4989 000021E5 D0D8                    	rcr	al, 1
  4990 000021E7 2C80                    	sub	al, 80h
  4991 000021E9 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4992 000021ED 66AB                    	stosw		; interpolated sample 3 (R)
  4993 000021EF 88D8                    	mov	al, bl
  4994 000021F1 00D0                    	add	al, dl	; [next_val_l]
  4995 000021F3 D0D8                    	rcr	al, 1
  4996 000021F5 2C80                    	sub	al, 80h
  4997 000021F7 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4998 000021FB 66AB                    	stosw		; interpolated sample 4 (L)
  4999 000021FD 88F8                    	mov	al, bh
  5000 000021FF 00F0                    	add	al, dh	; [next_val_r]
  5001 00002201 D0D8                    	rcr	al, 1
  5002 00002203 2C80                    	sub	al, 80h
  5003 00002205 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5004 00002209 66AB                    	stosw		; interpolated sample 4 (R)
  5005 0000220B C3                      	retn
  5006                                  
  5007                                  interpolating_4_8bit_mono:
  5008                                  	; 17/11/2023
  5009                                  	; al = [previous_val]
  5010                                  	; dl = [next_val]
  5011                                  	; original-interpolated-interpolated-interpolated
  5012 0000220C 88C3                    	mov	bl, al
  5013 0000220E 2C80                    	sub	al, 80h
  5014 00002210 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5015 00002214 66AB                    	stosw		; original sample (L)
  5016 00002216 66AB                    	stosw		; original sample (R)
  5017 00002218 88D8                    	mov	al, bl
  5018 0000221A 00D0                    	add	al, dl
  5019 0000221C D0D8                    	rcr	al, 1
  5020 0000221E 86D8                    	xchg	al, bl  ; al = [previous_val]
  5021 00002220 00D8                    	add	al, bl	; bl = interpolated middle (sample 2)
  5022 00002222 D0D8                    	rcr	al, 1
  5023 00002224 2C80                    	sub	al, 80h
  5024 00002226 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5025 0000222A 66AB                    	stosw		; interpolated sample 1 (L)
  5026 0000222C 66AB                    	stosw		; interpolated sample 1 (R)
  5027 0000222E 88D8                    	mov	al, bl	; interpolated middle (sample 2)
  5028 00002230 2C80                    	sub	al, 80h
  5029 00002232 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5030 00002236 66AB                    	stosw		; interpolated sample 2 (L)
  5031 00002238 66AB                    	stosw		; interpolated sample 2 (R)
  5032 0000223A 88D8                    	mov	al, bl
  5033 0000223C 00D0                    	add	al, dl	; [next_val]
  5034 0000223E D0D8                    	rcr	al, 1
  5035 00002240 2C80                    	sub	al, 80h
  5036 00002242 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5037 00002246 66AB                    	stosw		; interpolated sample 3 (L)
  5038 00002248 66AB                    	stosw		; interpolated sample 3 (R)
  5039 0000224A C3                      	retn
  5040                                  
  5041                                  interpolating_4_8bit_stereo:
  5042                                  	; 17/11/2023
  5043                                  	; al = [previous_val_l]
  5044                                  	; ah = [previous_val_r]
  5045                                  	; dl = [next_val_l]
  5046                                  	; dh = [next_val_r]
  5047                                  	; original-interpolated-interpolated-interpolated
  5048 0000224B 89C3                    	mov	ebx, eax
  5049 0000224D 2C80                    	sub	al, 80h
  5050 0000224F 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5051 00002253 66AB                    	stosw		; original sample (L)
  5052 00002255 88F8                    	mov	al, bh
  5053 00002257 2C80                    	sub	al, 80h
  5054 00002259 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5055 0000225D 66AB                    	stosw		; original sample (R)
  5056 0000225F 88D8                    	mov	al, bl
  5057 00002261 00D0                    	add	al, dl	; [next_val_l]
  5058 00002263 D0D8                    	rcr	al, 1
  5059 00002265 86D8                    	xchg	al, bl	; al = [previous_val_l]
  5060 00002267 00D8                    	add	al, bl	; bl = interpolated middle (L) (sample 2)
  5061 00002269 D0D8                    	rcr	al, 1
  5062 0000226B 2C80                    	sub	al, 80h
  5063 0000226D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5064 00002271 66AB                    	stosw		; interpolated sample 1 (L)
  5065 00002273 88F8                    	mov	al, bh
  5066 00002275 00F0                    	add	al, dh	; [next_val_r]
  5067 00002277 D0D8                    	rcr	al, 1
  5068 00002279 86F8                    	xchg	al, bh	; al = [previous_val_h]
  5069 0000227B 00F8                    	add	al, bh	; bh = interpolated middle (R) (sample 2)
  5070 0000227D D0D8                    	rcr	al, 1
  5071 0000227F 2C80                    	sub	al, 80h
  5072 00002281 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5073 00002285 66AB                    	stosw		; interpolated sample 1 (R)
  5074 00002287 88D8                    	mov	al, bl	; interpolated middle (L) (sample 2)
  5075 00002289 2C80                    	sub	al, 80h
  5076 0000228B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5077 0000228F 66AB                    	stosw		; interpolated sample 2 (L)
  5078 00002291 88F8                    	mov	al, bh	; interpolated middle (L) (sample 2)
  5079 00002293 2C80                    	sub	al, 80h
  5080 00002295 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5081 00002299 66AB                    	stosw		; interpolated sample 2 (L)
  5082 0000229B 88D8                    	mov	al, bl
  5083 0000229D 00D0                    	add	al, dl	; [next_val_l]
  5084 0000229F D0D8                    	rcr	al, 1
  5085 000022A1 2C80                    	sub	al, 80h
  5086 000022A3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5087 000022A7 66AB                    	stosw		; interpolated sample 3 (L)
  5088 000022A9 88F8                    	mov	al, bh
  5089 000022AB 00F0                    	add	al, dh	; [next_val_r]
  5090 000022AD D0D8                    	rcr	al, 1
  5091 000022AF 2C80                    	sub	al, 80h
  5092 000022B1 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5093 000022B5 66AB                    	stosw		; interpolated sample 3 (R)
  5094 000022B7 C3                      	retn
  5095                                  
  5096                                  interpolating_5_16bit_mono:
  5097                                  	; 18/11/2023
  5098                                  	; ax = [previous_val]
  5099                                  	; dx = [next_val]
  5100                                  	; original-interpltd-interpltd-interpltd-interpltd
  5101 000022B8 66AB                    	stosw		; original sample (L)
  5102 000022BA 66AB                    	stosw		; original sample (R)
  5103 000022BC 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5104 000022BF 89C3                    	mov	ebx, eax ; [previous_val]
  5105 000022C1 80C680                  	add	dh, 80h
  5106 000022C4 6601D0                  	add	ax, dx
  5107 000022C7 66D1D8                  	rcr	ax, 1
  5108 000022CA 50                      	push	eax ; *	; interpolated middle (temporary)
  5109 000022CB 6601D8                  	add	ax, bx	; interpolated middle + [previous_val]
  5110 000022CE 66D1D8                  	rcr	ax, 1
  5111 000022D1 50                      	push	eax ; **	; interpolated 1st quarter (temporary)
  5112 000022D2 6601D8                  	add	ax, bx	; 1st quarter + [previous_val]
  5113 000022D5 66D1D8                  	rcr	ax, 1	
  5114 000022D8 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5115 000022DB 66AB                    	stosw 		; interpolated sample 1 (L)
  5116 000022DD 66AB                    	stosw		; interpolated sample 1 (R)
  5117 000022DF 58                      	pop	eax ; **
  5118 000022E0 5B                      	pop	ebx ; *
  5119 000022E1 6601D8                  	add	ax, bx	; 1st quarter + middle
  5120 000022E4 66D1D8                  	rcr	ax, 1	; / 2
  5121 000022E7 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again	
  5122 000022EA 66AB                    	stosw		; interpolated sample 2 (L)
  5123 000022EC 66AB                    	stosw		; interpolated sample 2 (R)
  5124 000022EE 89D8                    	mov	eax, ebx
  5125 000022F0 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  5126 000022F3 66D1D8                  	rcr	ax, 1
  5127 000022F6 50                      	push	eax ; *	; interpolated 3rd quarter (temporary)
  5128 000022F7 6601D8                  	add	ax, bx	; + interpolated middle
  5129 000022FA 66D1D8                  	rcr	ax, 1
  5130 000022FD 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5131 00002300 66AB                    	stosw		; interpolated sample 3 (L)
  5132 00002302 66AB                    	stosw		; interpolated sample 3 (R)
  5133 00002304 58                      	pop	eax ; *
  5134 00002305 6601D0                  	add	ax, dx	; 3rd quarter + [next_val]
  5135 00002308 66D1D8                  	rcr	ax, 1	; / 2
  5136 0000230B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5137 0000230E 66AB                    	stosw		; interpolated sample 4 (L)
  5138 00002310 66AB                    	stosw		; interpolated sample 4 (R)
  5139 00002312 C3                      	retn
  5140                                  
  5141                                  interpolating_5_16bit_stereo:
  5142                                  	; 18/11/2023
  5143                                  	; bx = [previous_val_l]
  5144                                  	; ax = [previous_val_r]
  5145                                  	; [next_val_l]
  5146                                  	; [next_val_r]
  5147                                  	; original-interpltd-interpltd-interpltd-interpltd
  5148 00002313 51                      	push	ecx ; !
  5149 00002314 93                      	xchg	eax, ebx
  5150 00002315 66AB                    	stosw		; original sample (L)
  5151 00002317 93                      	xchg	eax, ebx
  5152 00002318 66AB                    	stosw		; original sample (R)
  5153 0000231A 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5154 0000231D 50                      	push	eax ; *	; [previous_val_r]
  5155 0000231E 80C780                  	add	bh, 80h
  5156 00002321 8005[9D240000]80        	add	byte [next_val_l+1], 80h
  5157 00002328 66A1[9C240000]          	mov	ax, [next_val_l]
  5158 0000232E 6601D8                  	add	ax, bx	; [previous_val_l]
  5159 00002331 66D1D8                  	rcr	ax, 1
  5160 00002334 89C1                    	mov	ecx, eax ; interpolated middle (L)
  5161 00002336 6601D8                  	add	ax, bx
  5162 00002339 66D1D8                  	rcr	ax, 1
  5163 0000233C 89C2                    	mov	edx, eax ; interpolated 1st quarter (L)
  5164 0000233E 6601D8                  	add	ax, bx	; [previous_val_l]
  5165 00002341 66D1D8                  	rcr	ax, 1
  5166 00002344 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5167 00002347 66AB                    	stosw 		; interpolated sample 1 (L)
  5168 00002349 89C8                    	mov	eax, ecx
  5169 0000234B 6601D0                  	add	ax, dx	; middle (L) + 1st quarter (L)
  5170 0000234E 66D1D8                  	rcr	ax, 1	; / 2
  5171 00002351 89C3                    	mov	ebx, eax  ; interpolated sample 2 (L)
  5172 00002353 5A                      	pop	edx ; *	; [previous_val_r]
  5173 00002354 89D0                    	mov	eax, edx
  5174 00002356 8005[9F240000]80        	add	byte [next_val_r+1], 80h
  5175 0000235D 660305[9E240000]        	add	ax, [next_val_r]
  5176 00002364 66D1D8                  	rcr	ax, 1
  5177 00002367 50                      	push	eax ; *	; interpolated middle (R)
  5178 00002368 6601D0                  	add	ax, dx
  5179 0000236B 66D1D8                  	rcr	ax, 1
  5180 0000236E 50                      	push	eax ; ** ; interpolated 1st quarter (R)
  5181 0000236F 6601D0                  	add	ax, dx	; [previous_val_r]
  5182 00002372 66D1D8                  	rcr	ax, 1
  5183 00002375 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5184 00002378 66AB                    	stosw 		; interpolated sample 1 (R)
  5185 0000237A 89D8                    	mov	eax, ebx
  5186 0000237C 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5187 0000237F 66AB                    	stosw 		; interpolated sample 2 (L)
  5188 00002381 58                      	pop	eax ; **
  5189 00002382 5A                      	pop	edx ; *
  5190 00002383 6601D0                  	add	ax, dx	; 1st quarter (R) + middle (R)
  5191 00002386 66D1D8                  	rcr	ax, 1	; / 2
  5192 00002389 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5193 0000238C 66AB                    	stosw 		; interpolated sample 2 (R)
  5194 0000238E 89C8                    	mov	eax, ecx
  5195 00002390 660305[9C240000]        	add	ax, [next_val_l]
  5196 00002397 66D1D8                  	rcr	ax, 1
  5197 0000239A 50                      	push	eax ; * ; interpolated 3rd quarter (L)
  5198 0000239B 6601C8                  	add	ax, cx	; interpolated middle (L)
  5199 0000239E 66D1D8                  	rcr	ax, 1
  5200 000023A1 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5201 000023A4 66AB                    	stosw 		; interpolated sample 3 (L)
  5202 000023A6 89D0                    	mov	eax, edx
  5203 000023A8 660305[9E240000]        	add	ax, [next_val_r]
  5204 000023AF 66D1D8                  	rcr	ax, 1
  5205 000023B2 50                      	push	eax ; ** ; interpolated 3rd quarter (R)
  5206 000023B3 6601D0                  	add	ax, dx	; interpolated middle (R)
  5207 000023B6 66D1D8                  	rcr	ax, 1
  5208 000023B9 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5209 000023BC 66AB                    	stosw 		; interpolated sample 3 (R)
  5210 000023BE 5B                      	pop	ebx ; **
  5211 000023BF 58                      	pop	eax ; *
  5212 000023C0 660305[9C240000]        	add	ax, [next_val_l]
  5213 000023C7 66D1D8                  	rcr	ax, 1
  5214 000023CA 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5215 000023CD 66AB                    	stosw 		; interpolated sample 4 (L)
  5216 000023CF 89D8                    	mov	eax, ebx	
  5217 000023D1 660305[9E240000]        	add	ax, [next_val_r]
  5218 000023D8 66D1D8                  	rcr	ax, 1
  5219 000023DB 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5220 000023DE 66AB                    	stosw 		; interpolated sample 4 (R)
  5221 000023E0 59                      	pop	ecx ; !
  5222 000023E1 C3                      	retn
  5223                                  
  5224                                  interpolating_4_16bit_mono:
  5225                                  	; 18/11/2023
  5226                                  	; ax = [previous_val]
  5227                                  	; dx = [next_val]
  5228                                  	; 02/02/2025
  5229                                  	; original-interpolated-interpolated-interpolated
  5230                                  
  5231 000023E2 66AB                    	stosw		; original sample (L)
  5232 000023E4 66AB                    	stosw		; original sample (R)
  5233 000023E6 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5234 000023E9 89C3                    	mov	ebx, eax ; [previous_val]
  5235 000023EB 80C680                  	add	dh, 80h
  5236 000023EE 6601D0                  	add	ax, dx	; [previous_val] + [next_val]
  5237 000023F1 66D1D8                  	rcr	ax, 1
  5238 000023F4 93                      	xchg	eax, ebx
  5239 000023F5 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
  5240 000023F8 66D1D8                  	rcr	ax, 1
  5241 000023FB 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5242 000023FE 66AB                    	stosw 		; interpolated sample 1 (L)
  5243 00002400 66AB                    	stosw		; interpolated sample 1 (R)
  5244 00002402 89D8                    	mov	eax, ebx ; interpolated middle
  5245 00002404 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5246 00002407 66AB                    	stosw 		; interpolated sample 2 (L)
  5247 00002409 66AB                    	stosw		; interpolated sample 2 (R)
  5248 0000240B 89D8                    	mov	eax, ebx
  5249 0000240D 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  5250 00002410 66D1D8                  	rcr	ax, 1
  5251 00002413 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5252 00002416 66AB                    	stosw		; interpolated sample 3 (L)
  5253 00002418 66AB                    	stosw		; interpolated sample 3 (R)
  5254 0000241A C3                      	retn
  5255                                  
  5256                                  interpolating_4_16bit_stereo:
  5257                                  	; 18/11/2023
  5258                                  	; bx = [previous_val_l]
  5259                                  	; ax = [previous_val_r]
  5260                                  	; [next_val_l]
  5261                                  	; [next_val_r]
  5262                                  	; original-interpolated-interpolated-interpolated
  5263 0000241B 93                      	xchg	eax, ebx
  5264 0000241C 66AB                    	stosw		; original sample (L)
  5265 0000241E 93                      	xchg	eax, ebx
  5266 0000241F 66AB                    	stosw		; original sample (R)
  5267 00002421 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5268 00002424 89C2                    	mov	edx, eax ; [previous_val_r]
  5269 00002426 80C780                  	add	bh, 80h
  5270 00002429 8005[9D240000]80        	add	byte [next_val_l+1], 80h
  5271 00002430 66A1[9C240000]          	mov	ax, [next_val_l]
  5272 00002436 6601D8                  	add	ax, bx	; [previous_val_l]
  5273 00002439 66D1D8                  	rcr	ax, 1
  5274 0000243C 93                      	xchg	eax, ebx
  5275 0000243D 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
  5276 00002440 66D1D8                  	rcr	ax, 1
  5277 00002443 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5278 00002446 66AB                    	stosw 		; interpolated sample 1 (L)
  5279 00002448 8005[9F240000]80        	add	byte [next_val_r+1], 80h
  5280 0000244F 89D0                    	mov	eax, edx ; [previous_val_r]
  5281 00002451 660305[9E240000]        	add	ax, [next_val_r]
  5282 00002458 66D1D8                  	rcr	ax, 1
  5283 0000245B 92                      	xchg	eax, edx
  5284 0000245C 6601D0                  	add	ax, dx	; dx = interpolated middle (R)
  5285 0000245F 66D1D8                  	rcr	ax, 1
  5286 00002462 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5287 00002465 66AB                    	stosw 		; interpolated sample 1 (R)
  5288 00002467 89D8                    	mov	eax, ebx
  5289 00002469 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5290 0000246C 66AB                    	stosw 		; interpolated sample 2 (L)
  5291 0000246E 89D0                    	mov	eax, edx
  5292 00002470 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5293 00002473 66AB                    	stosw 		; interpolated sample 2 (R)
  5294 00002475 89D8                    	mov	eax, ebx
  5295 00002477 660305[9C240000]        	add	ax, [next_val_l]
  5296 0000247E 66D1D8                  	rcr	ax, 1
  5297 00002481 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5298 00002484 66AB                    	stosw 		; interpolated sample 3 (L)
  5299 00002486 89D0                    	mov	eax, edx
  5300 00002488 660305[9E240000]        	add	ax, [next_val_r]
  5301 0000248F 66D1D8                  	rcr	ax, 1
  5302 00002492 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5303 00002495 66AB                    	stosw 		; interpolated sample 3 (R)
  5304 00002497 C3                      	retn
  5305                                  
  5306                                  ; 13/11/2023
  5307                                  previous_val:
  5308 00002498 0000                    previous_val_l: dw 0
  5309 0000249A 0000                    previous_val_r: dw 0
  5310                                  next_val:
  5311 0000249C 0000                    next_val_l: dw 0
  5312 0000249E 0000                    next_val_r: dw 0
  5313                                  
  5314                                  ; 16/11/2023
  5315 000024A0 00                      faz:	db 0
  5316                                  
  5317                                  ; --------------------------------------------------------
  5318                                  ; --------------------------------------------------------
  5319                                  
  5320                                  ; 07/12/2024
  5321                                  ; Ref: TRDOS 386 v2.0.9, trdosk8.s (18/09/2024)
  5322                                  ;		'sysaudio' system call (23/08/2024)
  5323                                  ; 18/11/2024
  5324                                  ; Ref: TRDOS 386 v2.0.9, audio.s, Erdogan Tan, 06/06/2024
  5325                                  
  5326                                  ac97_stop: 
  5327                                  	; 18/11/2024
  5328 000024A1 C605[8C800000]02        	mov	byte [stopped], 2
  5329                                  	; 07/12/2024
  5330                                  	sys	_audio, 0700h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000024A8 BB00070000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000024AD B820000000          <1>  mov eax, %1
   100                              <1> 
   101 000024B2 CD40                <1>  int 40h
  5331 000024B4 C3                      	retn
  5332                                  
  5333                                  ac97_pause:
  5334                                  	; 18/11/2024
  5335 000024B5 C605[8C800000]01        	mov	byte [stopped], 1 ; paused
  5336                                  	; 07/12/2024
  5337                                  	sys	_audio, 0500h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000024BC BB00050000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000024C1 B820000000          <1>  mov eax, %1
   100                              <1> 
   101 000024C6 CD40                <1>  int 40h
  5338 000024C8 C3                      	retn
  5339                                  
  5340                                  ac97_play: ; continue to play (after pause)
  5341                                  	; 18/11/2024
  5342 000024C9 C605[8C800000]00        	mov	byte [stopped], 0
  5343                                  	; 07/12/2024	
  5344                                  	sys	_audio, 0600h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000024D0 BB00060000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000024D5 B820000000          <1>  mov eax, %1
   100                              <1> 
   101 000024DA CD40                <1>  int 40h
  5345 000024DC C3                      	retn
  5346                                  	
  5347                                  ; --------------------------------------------------------
  5348                                  ; 14/11/2024 - Erdogan Tan
  5349                                  ; --------------------------------------------------------
  5350                                  
  5351                                  	; 07/12/2024
  5352                                  	; 01/12/2024 (32bit registers)
  5353                                  	; 29/11/2024
  5354                                  checkUpdateEvents:
  5355 000024DD E8D0010000              	call	check4keyboardstop
  5356 000024E2 7279                    	jc	short c4ue_ok
  5357                                  
  5358                                  	; 18/11/2024
  5359 000024E4 50                      	push	eax ; *
  5360 000024E5 09C0                    	or	eax, eax
  5361 000024E7 0F8406010000            	jz	c4ue_cpt
  5362                                  
  5363                                  	; 18/11/2024
  5364 000024ED 3C20                    	cmp	al, 20h ; SPACE (spacebar) ; pause/play
  5365 000024EF 7543                    	jne	short c4ue_chk_s
  5366 000024F1 803D[8C800000]00        	cmp	byte [stopped], 0
  5367 000024F8 7714                    	ja	short c4ue_chk_ps
  5368                                  	; pause
  5369 000024FA E8B6FFFFFF              	call	ac97_pause
  5370                                  	; 21/11/2024
  5371 000024FF A0[8D800000]            	mov	al, [tLO]
  5372 00002504 A2[8E800000]            	mov	byte [tLP], al
  5373 00002509 E9E5000000              	jmp	c4ue_cpt
  5374                                  c4ue_chk_ps:
  5375 0000250E 803D[8C800000]01        	cmp	byte [stopped], 1
  5376 00002515 770A                    	ja	short c4ue_replay
  5377                                  	; continue to play (after a pause)
  5378 00002517 E8ADFFFFFF              	call	ac97_play 
  5379 0000251C E9D2000000              	jmp	c4ue_cpt
  5380                                  c4ue_replay:
  5381                                  	; 19/11/2024
  5382 00002521 58                      	pop	eax ; *
  5383 00002522 58                      	pop	eax ; return address
  5384                                  	; 07/02/2024
  5385                                  	;mov	al, [volume]
  5386                                  	;call	SetmasterVolume
  5387 00002523 C605[8C800000]00        	mov	byte [stopped], 0
  5388 0000252A E89D040000              	call	move_to_beginning
  5389                                  	;jmp	PlayWav
  5390                                  	; 07/12/2024
  5391 0000252F E921E2FFFF              	jmp	RePlayWav
  5392                                  
  5393                                  c4ue_chk_s:
  5394 00002534 3C53                    	cmp	al, 'S'	; stop
  5395 00002536 7526                    	jne	short c4ue_chk_fb
  5396 00002538 803D[8C800000]00        	cmp	byte [stopped], 0
  5397 0000253F 0F87AE000000            	ja	c4ue_cpt ; Already stopped/paused
  5398 00002545 E857FFFFFF              	call	ac97_stop
  5399                                  	; 19/11/2024
  5400 0000254A C605[8D800000]00        	mov	byte [tLO], 0
  5401                                  	; 21/11/2024
  5402 00002551 C605[8E800000]30        	mov	byte [tLP], '0'
  5403 00002558 E996000000              	jmp	c4ue_cpt
  5404                                  
  5405                                  	; 01/12/2024
  5406                                  	; 18/11/2024
  5407                                  c4ue_ok:
  5408 0000255D C3                      	retn
  5409                                  
  5410                                  c4ue_chk_fb:
  5411                                  	; 17/11/2024
  5412 0000255E 3C46                    	cmp	al, 'F'
  5413 00002560 750A                    	jne	short c4ue_chk_b
  5414 00002562 E83D040000              	call 	Player_ProcessKey_Forwards
  5415 00002567 E987000000              	jmp	c4ue_cpt
  5416                                  
  5417                                  c4ue_chk_b:
  5418 0000256C 3C42                    	cmp	al, 'B'
  5419                                  	;;jne	short c4ue_cpt
  5420                                  	; 19/11/2024
  5421                                  	;jne	short c4ue_chk_h
  5422                                  	; 25/12/2024
  5423                                  	; 29/11/2024
  5424 0000256E 7507                    	jne	short c4ue_chk_n
  5425 00002570 E82B040000              	call 	Player_ProcessKey_Backwards
  5426 00002575 EB7C                    	jmp	short c4ue_cpt
  5427                                  
  5428                                  	;;;
  5429                                  	; 25/12/2024
  5430                                  	; 29/11/2024
  5431                                  c4ue_chk_n:
  5432 00002577 3C4E                    	cmp	al, 'N'
  5433 00002579 7404                    	je	short c4ue_nps
  5434                                  c4ue_chk_p:
  5435 0000257B 3C50                    	cmp	al, 'P'
  5436 0000257D 7509                    	jne	short c4ue_chk_h
  5437                                  c4ue_nps:
  5438 0000257F C605[8C800000]03        	mov	byte [stopped], 3
  5439 00002586 EB6B                    	jmp	short c4ue_cpt
  5440                                  	;;;
  5441                                  
  5442                                  c4ue_chk_h:
  5443                                  	; 19/11/2024
  5444 00002588 3C48                    	cmp	al, 'H'
  5445 0000258A 7515                    	jne	short c4ue_chk_cr
  5446 0000258C C605[8F800000]00        	mov	byte [wleds], 0
  5447 00002593 E843E5FFFF              	call 	write_ac97_pci_dev_info
  5448                                  	;;;
  5449                                  	;24/12/2024 (wave lighting points option)
  5450 00002598 C605[9B800000]01        	mov	byte [p_mode], 1
  5451                                  	;;;
  5452                                  	;mov	dh, 24
  5453                                  	;mov	dl, 79
  5454                                  	;call	setCursorPosition
  5455                                  	; 21/12/2024
  5456 0000259F EB52                    	jmp	short c4ue_cpt
  5457                                  c4ue_chk_cr:
  5458                                  	;;;
  5459                                  	; 24/12/2024 (wave lighting points option)
  5460 000025A1 8A25[8F800000]          	mov	ah, [wleds]
  5461 000025A7 3C47                    	cmp	al, 'G'
  5462 000025A9 7432                    	je	short c4ue_g
  5463                                  ;	;;;
  5464                                  ;	; 26/12/2024
  5465                                  ;	cmp	al, 'T'
  5466                                  ;	jne	short c4ue_chk_cr_@
  5467                                  ;	inc	byte [tcolor]
  5468                                  ;	and 	byte [tcolor], 0Fh
  5469                                  ;	jnz	short c4ue_cpt
  5470                                  ;	inc	byte [tcolor]
  5471                                  ;	jmp	short c4ue_cpt
  5472                                  ;c4ue_chk_cr_@:
  5473                                  ;	;;;
  5474                                  	; 19/11/2024
  5475 000025AB 3C0D                    	cmp	al, 0Dh ; ENTER/CR key
  5476 000025AD 7544                    	jne	short c4ue_cpt
  5477                                  	;inc	byte [wleds]
  5478                                  	;jnz	short c4ue_cpt
  5479                                  	;inc	byte [wleds]
  5480                                  	;;;
  5481                                  	; 24/12/2024
  5482                                  	; 22/12/2024 (faster method)
  5483                                  	; (UpdateWaveLeds procedure turns off previously
  5484                                  	;  lighting wave leds only)
  5485                                  	;call	reset_wave_leds ; prepare all leds as turned off
  5486                                  	;;;
  5487                                  	; 23/11/2024
  5488 000025AF 31DB                    	xor	ebx, ebx
  5489                                  	; 24/12/2024 (wave lighting points option)
  5490 000025B1 881D[9B800000]          	mov	[p_mode], bl ; 0
  5491                                  	;
  5492                                  	;mov	bl, [wleds]
  5493 000025B7 88E3                    	mov	bl, ah ; 24/12/2024
  5494 000025B9 FEC3                    	inc	bl
  5495 000025BB 80E30F                  	and	bl, 0Fh
  5496 000025BE 7501                    	jnz	short c4ue_sc
  5497 000025C0 43                      	inc	ebx
  5498                                  c4ue_sc:
  5499 000025C1 881D[8F800000]          	mov	[wleds], bl
  5500 000025C7 D0EB                    	shr	bl, 1
  5501 000025C9 8A83[29430000]          	mov	al, [ebx+colors]
  5502                                  	; 24/12/2024
  5503 000025CF A2[31430000]            	mov	[ccolor], al
  5504 000025D4 7211                    	jc	short c4ue_g_@
  5505                                  	; 24/12/2024
  5506 000025D6 E83B040000              	call	reset_wave_leds ; prepare all leds as turned off
  5507 000025DB EB16                    	jmp	short c4ue_cpt
  5508                                  	; 24/12/2024
  5509                                  c4ue_g:
  5510 000025DD 08E4                    	or	ah, ah	; byte [wleds]
  5511 000025DF 7506                    	jnz	short c4ue_g_@
  5512 000025E1 FE05[8F800000]          	inc	byte [wleds]	; force wave lighting ('G' key)
  5513                                  c4ue_g_@:
  5514                                  	; 24/12/2024 (wave lighting points option)
  5515 000025E7 C605[9B800000]01        	mov	byte [p_mode], 1
  5516 000025EE E808040000              	call	clear_window
  5517                                  	;;;
  5518                                  c4ue_cpt:
  5519                                  	; 24/12/2024
  5520                                  	; 18/11/2024
  5521 000025F3 59                      	pop	ecx ; *
  5522                                  	;;;
  5523                                  	; 24/12/2024 (skip wave lighting if data is not loaded yet)
  5524 000025F4 803D[33810000]00        	cmp	byte [SRB], 0
  5525 000025FB 7751                    	ja	short c4ue_vb_ok
  5526                                  	;;;
  5527                                  	; 01/12/2024 (TRDOS 386)
  5528                                  	sys	_time, 4 ; get timer ticks (18.2 ticks/second),
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000025FD BB04000000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00002602 B80D000000          <1>  mov eax, %1
   100                              <1> 
   101 00002607 CD40                <1>  int 40h
  5529                                  	; 24/12/2024
  5530                                  	; 18/11/2024
  5531                                  	;pop	ecx ; *
  5532                                  	; 01/12/2024
  5533 00002609 3B05[5C810000]          	cmp	eax, [timerticks]
  5534                                  	;je	short c4ue_ok
  5535                                  	; 18/11/2024
  5536 0000260F 7407                    	je	short c4ue_skip_utt
  5537                                  c4ue_utt:	
  5538                                  	; 01/12/2024
  5539 00002611 A3[5C810000]            	mov	[timerticks], eax
  5540 00002616 EB04                    	jmp	short c4ue_cpt_@
  5541                                  c4ue_skip_utt:
  5542                                  	; 18/11/2024
  5543 00002618 21C9                    	and	ecx, ecx
  5544 0000261A 7432                    	jz	short c4ue_vb_ok
  5545                                  c4ue_cpt_@:
  5546                                  	; 18/11/2024
  5547 0000261C 803D[8C800000]00        	cmp	byte [stopped], 0
  5548 00002623 7729                    	ja	short c4ue_vb_ok
  5549                                  	
  5550 00002625 E8B9010000              	call	CalcProgressTime
  5551                                  
  5552                                  	;cmp	ax, [ProgressTime]
  5553                                  	; 01/12/2024
  5554 0000262A 3B05[50810000]          	cmp	eax, [ProgressTime]
  5555                                  	;je	short c4ue_vb_ok
  5556                                  			; same second, no need to update
  5557                                  	; 23/11/2024
  5558 00002630 7405                    	je	short c4ue_uvb
  5559                                  
  5560                                  	;call	UpdateProgressTime
  5561                                  	;call	UpdateProgressBar@
  5562 00002632 E8DD020000              	call	UpdateProgressBar
  5563                                  
  5564                                  	; 23/11/2024
  5565                                  c4ue_uvb:
  5566 00002637 803D[8F800000]00        	cmp	byte [wleds], 0
  5567 0000263E 760E                    	jna	short c4ue_vb_ok
  5568                                  
  5569                                  	; 24/12/2024 (wave points mode)
  5570 00002640 803D[9B800000]00        	cmp	byte [p_mode], 0
  5571 00002647 7706                    	ja	short c4ue_uwp
  5572                                  
  5573 00002649 E812040000              	call	UpdateWaveLeds
  5574                                  
  5575                                  c4ue_vb_ok:
  5576 0000264E C3                      	retn
  5577                                  
  5578                                  	; 22/12/2024
  5579                                  c4ue_uwp:
  5580                                  	;call	UpdateWavePoints
  5581                                  	;retn
  5582                                  
  5583                                  ; --------------------------------------------------------
  5584                                  ; 27/12/2024 - Erdogan Tan
  5585                                  ; --------------------------------------------------------
  5586                                  
  5587                                  	; 27/12/2024 (DMA Buffer Tracking)
  5588                                  	; 26/12/2024
  5589                                  	; 24/12/2024
  5590                                  UpdateWavePoints:
  5591 0000264F BE[8C760000]            	mov	esi, prev_points
  5592 00002654 833E00                  	cmp	dword [esi], 0
  5593 00002657 740B                    	jz	short lights_off_ok
  5594 00002659 B980020000              	mov	ecx, 640
  5595                                  light_off:
  5596 0000265E AD                      	lodsd
  5597                                  	; eax = wave point (lighting point) address
  5598 0000265F C60000                  	mov	byte [eax], 0 ; black point (light off)
  5599 00002662 E2FA                    	loop	light_off	
  5600                                  
  5601                                  lights_off_ok:
  5602                                  	; 27/12/2024
  5603                                  	; ref: modplay8.s (02/06/2024)
  5604                                  	; ----------------------------
  5605                                  	; Get Current Sound Data (in DMA buffer) ((320 bytes))
  5606                                  	; 23/06/2017
  5607                                  	; 22/06/2017
  5608                                  	; bh = 15, get current sound data/samples
  5609                                  	; bl = 0, for PCM OUT
  5610                                  	; ecx = count of sample/data bytes (1 to 4096)
  5611                                  	; edx = destination buffer address 
  5612                                  	;	(page aligned address is better)
  5613                                  
  5614 00002664 BE[00900200]            	mov	esi, g_buff
  5615                                  
  5616                                  	sys	_audio, 0F00h, 640*4, esi ; 27/12/2024
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 00002669 BB000F0000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 0000266E B9000A0000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00002673 89F2                <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 00002675 B820000000          <1>  mov eax, %1
   100                              <1> 
   101 0000267A CD40                <1>  int 40h
  5617                                  	;jnc	short lgbuff_ok
  5618                                  	; clear g_buff content
  5619                                  	;mov	edi, esi
  5620                                  	;sub	eax, eax
  5621                                  	;shr	ecx, 2
  5622                                  	;rep	stosd
  5623                                  	;mov	ecx, 640
  5624                                  ;lgbuff_ok:
  5625                                  
  5626 0000267C B980020000              	mov	ecx, 640	
  5627 00002681 89CD                    	mov	ebp, ecx
  5628                                  	; 26/12/2024
  5629 00002683 BF[8C760000]            	mov	edi, prev_points
  5630 00002688 8B1D[78760000]          	mov	ebx, [graphstart] ; start (top) line
  5631                                  lights_on_4:
  5632 0000268E 31C0                    	xor	eax, eax ; 0
  5633 00002690 66AD                    	lodsw	; left
  5634 00002692 80C480                  	add	ah, 80h
  5635 00002695 89C2                    	mov	edx, eax
  5636 00002697 66AD                    	lodsw	; right
  5637                                  	;add	ax, dx
  5638 00002699 80C480                  	add	ah, 80h
  5639                                  	;shr	eax, 9	; 128 volume levels
  5640 0000269C 01D0                    	add	eax, edx
  5641                                  	;shr	eax, 10	; (L+R/2) & 128 volume levels
  5642 0000269E C1E809                  	shr	eax, 9	; (L+R/2) & 256 volume levels
  5643 000026A1 F7E5                    	mul	ebp	; * 640 (row)
  5644 000026A3 01D8                    	add	eax, ebx ; + column
  5645 000026A5 8A15[31430000]          	mov	dl, [ccolor]
  5646 000026AB 8810                    	mov	[eax], dl ; pixel (light on) color
  5647 000026AD AB                      	stosd		; save light on addr in prev_points
  5648 000026AE 43                      	inc	ebx
  5649 000026AF E2DD                    	loop	lights_on_4
  5650 000026B1 C3                      	retn
  5651                                  
  5652                                  ; --------------------------------------------------------
  5653                                  ; 19/05/2024 - (playwav4.asm) ich_wav4.asm
  5654                                  ; --------------------------------------------------------
  5655                                  
  5656                                  	; 25/12/2024
  5657                                  	; 07/12/2024
  5658                                  	; 01/12/2024 (TRDOS 386)
  5659                                  	; 29/11/2024
  5660                                  check4keyboardstop:
  5661                                  	; 19/05/2024
  5662                                  	; 08/11/2023
  5663                                  	; 04/11/2023
  5664 000026B2 B401                    	mov	ah, 1
  5665                                  	;int	16h
  5666                                  	; 01/12/2024 (TRDOS 386 keyboard interrupt)
  5667 000026B4 CD32                    	int	32h
  5668                                  	;clc
  5669 000026B6 7433                    	jz	short _cksr
  5670                                  
  5671 000026B8 30E4                    	xor	ah, ah
  5672                                  	;int	16h
  5673                                  	; 01/12/2024 (TRDOS 386 keyboard interrupt)
  5674 000026BA CD32                    	int	32h
  5675                                  
  5676                                  	; 25/12/2024
  5677                                  	; 29/11/2024
  5678                                  	;mov	[command], al
  5679                                  
  5680                                  	;;;
  5681                                  	; 19/05/2024 (change PCM out volume)
  5682 000026BC 3C2B                    	cmp	al, '+'
  5683 000026BE 750D                    	jne	short p_1
  5684                                  	
  5685 000026C0 A0[15270000]            	mov	al, [volume]
  5686 000026C5 3C00                    	cmp	al, 0
  5687 000026C7 7624                    	jna	short p_3
  5688 000026C9 FEC8                    	dec	al
  5689 000026CB EB0F                    	jmp	short p_2
  5690                                  p_1:
  5691 000026CD 3C2D                    	cmp	al, '-'
  5692 000026CF 751D                    	jne	short p_4
  5693                                  
  5694 000026D1 A0[15270000]            	mov	al, [volume]
  5695 000026D6 3C1F                    	cmp	al, 31
  5696 000026D8 7313                    	jnb	short p_3
  5697 000026DA FEC0                    	inc	al
  5698                                  p_2:
  5699 000026DC A2[15270000]            	mov	[volume], al
  5700                                  	; 14/11/2024
  5701                                  	;call	SetPCMOutVolume
  5702                                  	; 15/11/2024 (QEMU)
  5703                                  	; 07/12/2024
  5704 000026E1 E81CE2FFFF              	call	SetMasterVolume
  5705                                  	;call	UpdateVolume
  5706                                  	;;clc
  5707                                  	;retn
  5708 000026E6 E999010000              	jmp	UpdateVolume
  5709                                  	;mov	ah, al
  5710                                  	;mov    dx, [NAMBAR]
  5711                                    	;;add   dx, CODEC_MASTER_VOL_REG
  5712                                  	;add	dx, CODEC_PCM_OUT_REG
  5713                                  	;out    dx, ax
  5714                                  	;
  5715                                  	;call   delay1_4ms
  5716                                          ;call   delay1_4ms
  5717                                          ;call   delay1_4ms
  5718                                          ;call   delay1_4ms
  5719                                  _cksr:		; 19/05/2024
  5720                                  	; 18/12/2024
  5721 000026EB 31C0                    	xor	eax, eax
  5722                                  	;clc
  5723                                  p_3:
  5724 000026ED C3                      	retn
  5725                                  p_4:
  5726                                  	; 17/11/2024
  5727 000026EE 80FC01                  	cmp	ah, 01h  ; ESC
  5728 000026F1 7419                        	je	short p_q
  5729                                  	;cmp	ax, 2E03h ; 21/12/2024 
  5730 000026F3 3C03                    	cmp	al, 03h  ; CTRL+C
  5731 000026F5 7415                    	je	short p_q
  5732                                  
  5733                                  	; 18/11/2024
  5734 000026F7 3C20                    	cmp	al, 20h
  5735 000026F9 7419                    	je	short p_r
  5736                                  
  5737                                  	; 19/11/2024
  5738 000026FB 3C0D                    	cmp	al, 0Dh ; CR/ENTER
  5739 000026FD 7415                    	je	short p_r
  5740                                  
  5741 000026FF 24DF                    	and	al, 0DFh
  5742                                  
  5743                                  	; 25/12/2024
  5744                                  	; 29/11/2024
  5745 00002701 A2[9C800000]            	mov	[command], al
  5746                                  
  5747                                  	;cmp	al, 'B'
  5748                                  	;je	short p_r
  5749                                  	;cmp	al, 'F'
  5750                                  	;je	short p_r
  5751                                  
  5752                                  	; 29/11/2024
  5753                                  	;cmp	al, 'N'
  5754                                  	;je	short p_r
  5755                                  	;cmp	al, 'P'
  5756                                  	;je	short p_r
  5757                                  
  5758 00002706 3C51                    	cmp	al, 'Q'
  5759                                  	;je	short p_q
  5760 00002708 7409                    	je	short p_quit ; 29/11/2024
  5761                                  
  5762 0000270A F8                      	clc
  5763 0000270B C3                      	retn
  5764                                  
  5765                                  	;;;
  5766                                  ;_cskr:	
  5767                                  p_q:
  5768                                  	; 27/12/2024
  5769 0000270C C605[9C800000]51        	mov	byte [command], 'Q'
  5770                                  p_quit:
  5771 00002713 F9                      	stc
  5772                                  p_r:
  5773 00002714 C3                      	retn
  5774                                  
  5775                                  ; 29/05/2024
  5776                                  ; 19/05/2024
  5777                                  volume: 
  5778                                  	;db	02h
  5779                                  ; 26/12/2024
  5780 00002715 03                      	db	03h
  5781                                  
  5782                                  ; --------------------------------------------------------
  5783                                  
  5784                                  	; 22/12/2024
  5785                                  	; 21/12/2024
  5786                                  	; simulate cursor position in VGA (VESA VBE) mode
  5787                                  	; ! for 640*480, 256 colors (1 byte/pixel) !
  5788                                  setCursorPosition:
  5789                                  	; dh = Row
  5790                                  	; dl = Column
  5791                                  	
  5792 00002716 31C0                    	xor	eax, eax
  5793 00002718 B00E                    	mov	al, 14	; row height is 14 pixels (8*14)
  5794 0000271A F6E6                    	mul	dh
  5795 0000271C 6683C007                	add	ax, 7	; top margin
  5796 00002720 C1E010                  	shl	eax, 16
  5797 00002723 88D0                    	mov	al, dl	; * 8 ; character width = 8 pixels
  5798 00002725 66C1E003                	shl	ax, 3
  5799                                  			; hw = row, ax = column
  5800 00002729 A3[80760000]            	mov	[screenpos], eax
  5801                                  	; 22/12/2024
  5802 0000272E 31C0                    	xor	eax, eax
  5803 00002730 C3                      	retn
  5804                                  	
  5805                                  ; --------------------------------------------------------
  5806                                  ; 14/11/2024
  5807                                  ; (Ref: player.asm, out_cs.asm, Matan Alfasi, 2017)
  5808                                  
  5809                                  ;; NAME:	SetTotalTime
  5810                                  ;; DESCRIPTION: Calculates the total time in seconds in file
  5811                                  ;; INPUT:	DATA_SubchunkSize, WAVE_SampleRate, WAVE_BlockAlign
  5812                                  ;; OUTPUT:	CurrentTotalTime=Total time in seconds in file,
  5813                                  ;; 		Output on the screen of the total time in seconds
  5814                                  
  5815                                  	; 01/12/2024 (32 bit registers)
  5816                                  SetTotalTime:
  5817                                  	;; Calculate total seconds in file
  5818                                  	;mov	ax, [DATA_SubchunkSize]
  5819                                  	;mov	dx, [DATA_SubchunkSize + 2]
  5820                                  	;mov	bx, [WAVE_SampleRate]
  5821                                  	;div	bx
  5822                                  	;xor	dx, dx
  5823                                  	; 01/12/2024
  5824 00002731 A1[C8800000]            	mov	eax, [DATA_SubchunkSize]
  5825 00002736 0FB71D[B8800000]        	movzx	ebx, word [WAVE_SampleRate]
  5826 0000273D 31D2                    	xor	edx, edx
  5827 0000273F F7F3                    	div	ebx
  5828                                  
  5829                                  	;mov	bx, [WAVE_BlockAlign]
  5830                                  	;div	bx
  5831                                  	; 01/12/2024
  5832 00002741 668B1D[C0800000]        	mov	bx, [WAVE_BlockAlign]
  5833 00002748 31D2                    	xor	edx, edx
  5834 0000274A F7F3                    	div	ebx
  5835                                  
  5836                                  	;mov	[TotalTime], ax
  5837 0000274C A3[4C810000]            	mov	[TotalTime], eax
  5838                                  
  5839 00002751 B33C                    	mov	bl, 60
  5840 00002753 F6F3                    	div	bl
  5841                                  
  5842                                  	;; al = minutes, ah = seconds
  5843 00002755 50                      	push	eax ; **
  5844 00002756 50                      	push	eax ; *
  5845                                  
  5846                                  	;mov	dh, 24
  5847                                  	; 21/12/2024 (640*480)
  5848 00002757 B620                    	mov	dh, 32
  5849 00002759 B22A                    	mov	dl, 42
  5850 0000275B E8B6FFFFFF              	call	setCursorPosition
  5851                                  
  5852 00002760 58                      	pop	eax ; *
  5853 00002761 30E4                    	xor	ah, ah
  5854 00002763 BD02000000              	mov	ebp, 2
  5855 00002768 E812000000              	call	PrintNumber
  5856                                  	
  5857                                  	;mov	dh, 24
  5858                                  	; 21/12/2024 (640*480)
  5859 0000276D B620                    	mov	dh, 32
  5860 0000276F B22D                    	mov	dl, 45
  5861 00002771 E8A0FFFFFF              	call	setCursorPosition
  5862                                  
  5863 00002776 58                      	pop	eax ; **
  5864 00002777 88E0                    	mov	al, ah
  5865 00002779 30E4                    	xor	ah, ah
  5866                                  	; 21/12/2024
  5867 0000277B 66BD0200                	mov	bp, 2
  5868                                  	;jmp	short PrintNumber
  5869                                  
  5870                                  ; --------------------------------------------------------
  5871                                  
  5872                                  	; 21/12/2024 (write numbers in VESA VBE graphics mode)
  5873                                  	; 01/12/2024 (32bit registers)
  5874                                  PrintNumber:
  5875                                  	; eax = binary number
  5876                                  	; ebp = digits
  5877 0000277F 8B35[80760000]          	mov	esi, [screenpos]
  5878                                  		; hw = row, si = column
  5879 00002785 BB0A000000              	mov	ebx, 10
  5880 0000278A 31C9                    	xor	ecx, ecx
  5881                                  printNumber_CutNumber:
  5882 0000278C 41                      	inc	ecx
  5883 0000278D 31D2                    	xor	edx, edx
  5884 0000278F F7F3                    	div	ebx
  5885 00002791 52                      	push	edx
  5886 00002792 39E9                    	cmp	ecx, ebp
  5887 00002794 7402                    	je	short printNumber_printloop
  5888 00002796 EBF4                    	jmp	printNumber_CutNumber
  5889                                  
  5890                                  printNumber_printloop:
  5891 00002798 58                      	pop	eax
  5892                                  	; 21/12/2024
  5893                                  	; ebp = count of digits
  5894                                  	; eax <= 9
  5895                                  
  5896 00002799 0430                    	add	al, '0'
  5897                                  	
  5898                                  	; esi = pixel position (hw = row, si = column)
  5899                                  	; eax = al = character
  5900                                  	;call	write_character
  5901                                  	; 22/12/2024
  5902 0000279B E82A010000              	call	write_character_white
  5903                                  
  5904 000027A0 4D                      	dec	ebp
  5905 000027A1 7405                     	jz	short printNumber_ok
  5906 000027A3 83C608                  	add	esi, 8	; next column
  5907 000027A6 EBF0                    	jmp	short printNumber_printloop
  5908                                  printNumber_ok:
  5909 000027A8 C3                      	retn
  5910                                  
  5911                                  ; --------------------------------------------------------
  5912                                  
  5913                                  	; 14/11/2024 - Erdogan Tan
  5914                                  SetProgressTime:
  5915                                  	;; Calculate playing/progress seconds in file
  5916 000027A9 E835000000              	call	CalcProgressTime
  5917                                  
  5918                                  	; 01/12/2024 (32bit registers)
  5919                                  UpdateProgressTime:
  5920                                  	; eax = (new) progress time 
  5921                                  
  5922 000027AE A3[50810000]            	mov	[ProgressTime], eax
  5923                                  
  5924 000027B3 B33C                    	mov	bl, 60
  5925 000027B5 F6F3                    	div	bl
  5926                                  
  5927                                  	;; al = minutes, ah = seconds
  5928 000027B7 50                      	push	eax ; **
  5929 000027B8 50                      	push	eax ; *
  5930                                  
  5931                                  	;mov	dh, 24
  5932                                  	; 21/12/2024 (640*480)
  5933 000027B9 B620                    	mov	dh, 32
  5934 000027BB B221                    	mov	dl, 33
  5935 000027BD E854FFFFFF              	call	setCursorPosition
  5936                                  
  5937 000027C2 58                      	pop	eax ; *
  5938 000027C3 30E4                    	xor	ah, ah
  5939 000027C5 BD02000000              	mov	ebp, 2
  5940 000027CA E8B0FFFFFF              	call	PrintNumber
  5941                                  	
  5942                                  	;mov	dh, 24
  5943                                  	; 21/12/2024 (640*480)
  5944 000027CF B620                    	mov	dh, 32
  5945 000027D1 B224                    	mov	dl, 36
  5946 000027D3 E83EFFFFFF              	call	setCursorPosition
  5947                                  
  5948 000027D8 58                      	pop	eax ; **
  5949 000027D9 88E0                    	mov	al, ah
  5950 000027DB 30E4                    	xor	ah, ah
  5951                                  	; 21/12/2024
  5952 000027DD 66BD0200                	mov	bp, 2
  5953 000027E1 EB9C                    	jmp	short PrintNumber
  5954                                  
  5955                                  ; --------------------------------------------------------
  5956                                  
  5957                                  	; 01/12/2024 (32bit registers)
  5958                                  	; 17/11/2024
  5959                                  	; 14/11/2024
  5960                                  CalcProgressTime:
  5961                                  	;mov	ax, [LoadedDataBytes]
  5962                                  	;mov	dx, [LoadedDataBytes+2]
  5963                                  	;mov	bx, ax
  5964                                  	;or	bx, dx
  5965                                  	;jz	short cpt_ok
  5966                                  	; 01/12/2024
  5967 000027E3 A1[58810000]            	mov	eax, [LoadedDataBytes]
  5968 000027E8 09C0                    	or	eax, eax
  5969 000027EA 7416                    	jz	short cpt_ok
  5970                                  
  5971                                  	;mov	bx, [WAVE_SampleRate]
  5972                                  	;div	bx
  5973                                  	;xor	dx, dx
  5974                                  	;mov	bx, [WAVE_BlockAlign]
  5975                                  	;div	bx
  5976                                  	; 01/12/2024
  5977 000027EC 0FB71D[B8800000]        	movzx	ebx, word [WAVE_SampleRate]
  5978 000027F3 31D2                    	xor	edx, edx
  5979 000027F5 F7F3                    	div	ebx
  5980 000027F7 31D2                    	xor	edx, edx
  5981 000027F9 668B1D[C0800000]        	mov	bx, [WAVE_BlockAlign]
  5982 00002800 F7F3                    	div	ebx
  5983                                  cpt_ok:
  5984                                  	; eax = (new) progress time
  5985 00002802 C3                      	retn
  5986                                  
  5987                                  ; --------------------------------------------------------
  5988                                  ; 14/11/2024
  5989                                  ; (Ref: player.asm, out_cs.asm, Matan Alfasi, 2017)
  5990                                  
  5991                                  ;; DESCRIPTION: Update file information on template
  5992                                  ;; PARAMS:	WAVE parameters and other variables
  5993                                  ;; REGS:	AX(RW)
  5994                                  ;; VARS:	CurrentFileName, WAVE_SampleRate, 
  5995                                  ;; RETURNS:	On-screen file info is updated.
  5996                                  
  5997                                  	; 01/12/2024 (32bit registers)
  5998                                  UpdateFileInfo:
  5999                                  	;; Print File Name
  6000                                  	;mov	dh, 9
  6001                                  	; 21/12/2024 (640*480 graphics display)
  6002 00002803 B608                    	mov	dh, 8
  6003 00002805 B217                    	mov	dl, 23
  6004 00002807 E80AFFFFFF              	call	setCursorPosition
  6005                                  	
  6006 0000280C BE[E0800000]            	mov	esi, wav_file_name
  6007                                  	
  6008                                  	;;;
  6009                                  	; 14/11/2024
  6010                                  	; skip directory separators
  6011                                  	; (note: asciiz string, max. 79 bytes except zero tail)
  6012 00002811 89F3                    	mov	ebx, esi
  6013                                  chk4_nxt_sep:
  6014 00002813 AC                      	lodsb
  6015 00002814 3C2F                    	cmp	al, '/'	; 14/12/2024
  6016 00002816 7406                    	je	short chg_fpos
  6017 00002818 20C0                    	and	al, al
  6018 0000281A 7406                    	jz	short chg_fpos_ok
  6019 0000281C EBF5                    	jmp	short chk4_nxt_sep
  6020                                  chg_fpos:
  6021 0000281E 89F3                    	mov	ebx, esi
  6022 00002820 EBF1                    	jmp	short chk4_nxt_sep
  6023                                  chg_fpos_ok:
  6024 00002822 89DE                    	mov	esi, ebx ; file name (without its path/directory)
  6025                                  	;;;
  6026                                  _fnl_chk:
  6027                                  	; 26/12/2024 (file name length limit -display-)
  6028                                  	;mov	ebx, 12
  6029 00002824 BB11000000              	mov	ebx, 17 ; ????????.wav?????
  6030 00002829 56                      	push	esi
  6031                                  _fnl_chk_loop:
  6032 0000282A AC                      	lodsb
  6033 0000282B 20C0                    	and	al, al
  6034 0000282D 7406                    	jz	short _fnl_ok
  6035 0000282F 4B                       	dec	ebx
  6036 00002830 75F8                    	jnz	short _fnl_chk_loop
  6037 00002832 C60600                  	mov	byte [esi], 0
  6038                                  _fnl_ok:
  6039 00002835 5E                      	pop	esi
  6040                                  	;;;
  6041                                  
  6042 00002836 E870000000              	call	PrintString
  6043                                  	
  6044                                  	;; Print Frequency
  6045                                  	;mov	dh, 10
  6046                                  	; 21/12/2024 (640*480 graphics display)
  6047 0000283B B609                    	mov	dh, 9
  6048 0000283D B217                    	mov	dl, 23
  6049 0000283F E8D2FEFFFF              	call	setCursorPosition
  6050                                  	;movzx	eax, word [WAVE_SampleRate]
  6051                                  	; 22/12/2024
  6052                                  	; eax = 0
  6053 00002844 66A1[B8800000]          	mov	ax, [WAVE_SampleRate]
  6054 0000284A BD05000000              	mov	ebp, 5
  6055 0000284F E82BFFFFFF              	call	PrintNumber
  6056                                  
  6057                                  	;; Print BitRate
  6058                                  	;mov	dh, 9
  6059                                  	; 21/12/2024 (640*480 graphics display)
  6060 00002854 B608                    	mov	dh, 8
  6061 00002856 B239                    	mov	dl, 57
  6062 00002858 E8B9FEFFFF              	call	setCursorPosition
  6063 0000285D 66A1[C2800000]          	mov	ax, [WAVE_BitsPerSample]
  6064 00002863 66BD0200                	mov	bp, 2
  6065 00002867 E813FFFFFF              	call	PrintNumber
  6066                                  
  6067                                  	;; Print Channel Number
  6068                                  	;mov	dh, 10
  6069                                  	; 21/12/2024 (640*480 graphics display)
  6070 0000286C B609                    	mov	dh, 9
  6071 0000286E B239                    	mov	dl, 57
  6072 00002870 E8A1FEFFFF              	call	setCursorPosition
  6073 00002875 66A1[B6800000]          	mov	ax, [WAVE_NumChannels]
  6074 0000287B 66BD0100                	mov	bp, 1
  6075 0000287F E8FBFEFFFF              	call	PrintNumber
  6076                                  
  6077                                  	;call	UpdateVolume
  6078                                  	;retn
  6079                                  
  6080                                  ; --------------------------------------------------------
  6081                                  
  6082                                  	; 14/11/2024
  6083                                  UpdateVolume:
  6084                                  	;; Print Volume
  6085                                  	;mov	dh, 24
  6086                                  	; 21/12/2024 (640*480)
  6087 00002884 B620                    	mov	dh, 32
  6088 00002886 B24B                    	mov	dl, 75
  6089 00002888 E889FEFFFF              	call	setCursorPosition
  6090                                  	; 22/12/2024
  6091                                  	; eax = 0
  6092                                  
  6093 0000288D A0[15270000]            	mov	al, [volume]
  6094                                  
  6095 00002892 B364                    	mov	bl, 100
  6096 00002894 F6E3                    	mul	bl
  6097                                  
  6098 00002896 B31F                    	mov	bl, 31
  6099 00002898 F6F3                    	div	bl
  6100                                  
  6101                                  	;neg	ax
  6102                                  	;add	ax, 100	
  6103                                  	; 01/12/2024
  6104 0000289A B464                    	mov	ah, 100
  6105 0000289C 28C4                    	sub	ah, al
  6106 0000289E 0FB6C4                  	movzx	eax, ah
  6107                                  	;xor	ah, ah
  6108                                  	;mov	bp, 3
  6109 000028A1 BD03000000              	mov	ebp, 3
  6110                                  	;call	PrintNumber
  6111                                  	;retn
  6112 000028A6 E9D4FEFFFF              	jmp	PrintNumber	
  6113                                  
  6114                                  ; --------------------------------------------------------
  6115                                  
  6116                                  	; 21/12/2024
  6117                                  	; write text in VESA VBE graphics mode
  6118                                  PrintString:
  6119                                  	; esi = string address
  6120                                  printstr_loop:
  6121 000028AB 31C0                    	xor	eax, eax
  6122 000028AD AC                      	lodsb
  6123 000028AE 08C0                    	or	al, al
  6124 000028B0 7417                    	jz	short printstr_ok
  6125                                  
  6126 000028B2 56                      	push	esi
  6127                                  
  6128 000028B3 8B35[80760000]          	mov	esi, [screenpos]
  6129                                  
  6130                                  	; esi = pixel position (hw = row, si = column)
  6131                                  	; eax = al = character
  6132                                  	;call	write_character
  6133                                  	; 22/12/2024
  6134 000028B9 E80C000000              	call	write_character_white
  6135                                  
  6136 000028BE 668305[80760000]08      	add	word [screenpos], 8 ; update column (only, not row)
  6137                                  
  6138 000028C6 5E                      	pop	esi
  6139 000028C7 EBE2                    	jmp	short printstr_loop
  6140                                  
  6141                                  printstr_ok:
  6142 000028C9 C3                      	retn
  6143                                  
  6144                                  ; --------------------------------------------------------
  6145                                  
  6146                                  	; 21/12/2024
  6147                                  	; write character (at cursor position)
  6148                                  	; in graphics mode (640*480, 256 colors)
  6149                                  	; 22/12/2024
  6150                                  write_character_white:
  6151 000028CA B90F000000              	mov	ecx, 0Fh
  6152                                  	; 26/12/2024
  6153                                  	;movzx	ecx, byte [tcolor]
  6154                                  write_character:
  6155                                  	; esi = pixel position (hw = row, si = column)
  6156                                  	; eax = al = character
  6157                                  	; cl = color
  6158 000028CF 890D[84760000]          	mov	[wcolor], ecx ; 22/12/2024
  6159                                  
  6160                                  	; 22/12/2024
  6161 000028D5 50                      	push	eax
  6162                                  	; clear previous character pixels
  6163 000028D6 BF[19430000]            	mov	edi, fillblock
  6164                                  	sys	_video, 020Fh, 0, 8001h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000028DB BB0F020000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 000028E0 B900000000          <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 000028E5 BA01800000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000028EA B81F000000          <1>  mov eax, %1
   100                              <1> 
   101 000028EF CD40                <1>  int 40h
  6165 000028F1 58                      	pop	eax
  6166                                  
  6167 000028F2 C1E004                  	shl	eax, 4 ; 8*16 pixel user font
  6168 000028F5 BF[34510000]            	mov	edi, fontbuff2 ; start of user font data
  6169 000028FA 01C7                    	add	edi, eax
  6170                                  
  6171                                  	; 21/12/2024
  6172                                  	; NOTE:
  6173                                  	; TRDOS 386 does not use 8*14 pixel fonts in sysvideo
  6174                                  	; system calls -in graphics mode-
  6175                                  	; because 8*16 pixel operations are faster
  6176                                  	;			than 8*14 pixel operations.
  6177                                  	; ((so, 8*14 fonts can be converted to 8*16 fonts by
  6178                                  	; adding 2 empty lines))
  6179                                  	; (8*14 characters can be written via pixel operations)
  6180                                    	
  6181                                  	; 21/12/2024 (TRDOS 386 v2.0.9, trdosk6.s, 27/09/2024)
  6182                                  	;;;;;;;;;;;;;;;;; ; sysvideo system call
  6183                                  	;sysvideo:
  6184                                  	;   function in BH
  6185                                  	;	02h: Super VGA, LINEAR FRAME BUFFER data transfers
  6186                                  	;   sub function in BL
  6187                                  	;	0Fh: WRITE CHARACTER (FONT)
  6188                                  	;          CL = char's color (8 bit, 256 colors)
  6189                                  	;	If DH bit 7 = 1
  6190                                  	;	   USER FONT (from user buffer)
  6191                                  	;	         DL = 1 -> 8x16 pixel font
  6192                                   	;	   EDI = user's font buffer address
  6193                                  	;		(NOTE: byte order is as row0,row1,row2..)
  6194                                  	;	   ESI = start position (row, column)
  6195                                  	;		(HW = row, SI = column)
  6196                                  	;;;;;;;;;;;;;;;;;
  6197                                  
  6198                                  	sys	_video, 020Fh, [wcolor], 8001h
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000028FC BB0F020000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93 00002901 8B0D[84760000]      <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95 00002907 BA01800000          <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 0000290C B81F000000          <1>  mov eax, %1
   100                              <1> 
   101 00002911 CD40                <1>  int 40h
  6199                                  
  6200 00002913 C3                      	retn
  6201                                  
  6202                                  ; --------------------------------------------------------
  6203                                  
  6204                                  	; 22/12/2024
  6205                                  	; 21/12/2024
  6206                                  	; (write chars in VESA VBE graphics mode)
  6207                                  	; 14/11/2024
  6208                                  	; (Ref: player.asm, Matan Alfasi, 2017)
  6209                                  	; (Modification: Erdogan Tan, 14/11/2024)
  6210                                  
  6211                                  	;PROGRESSBAR_ROW equ 23
  6212                                  	; 21/12/2024 (640*480)
  6213                                  	PROGRESSBAR_ROW equ 31
  6214                                  
  6215                                  UpdateProgressBar:
  6216 00002914 E890FEFFFF              	call	SetProgressTime	; 14/11/2024
  6217                                  
  6218                                  	; 01/12/2024 (32bit registers)
  6219 00002919 A1[50810000]            	mov	eax, [ProgressTime]
  6220                                  UpdateProgressBar@:
  6221 0000291E BA50000000              	mov	edx, 80
  6222 00002923 F7E2                    	mul	edx
  6223 00002925 8B1D[4C810000]          	mov	ebx, [TotalTime]
  6224 0000292B F7F3                    	div	ebx
  6225                                  
  6226                                  	; 22/12/2024
  6227                                  	; check progress bar indicator position if it is same 
  6228 0000292D 3A05[89760000]          	cmp	al, [pbprev]
  6229 00002933 7430                    	je	short UpdateProgressBar_ok
  6230 00002935 A2[89760000]            	mov	[pbprev], al
  6231                                  
  6232                                  UpdateProgressBar@@:
  6233                                  	;; Push for the 'Clean' part
  6234 0000293A 50                      	push	eax ; **
  6235 0000293B 50                      	push	eax ; *
  6236                                  
  6237                                  	;; Set cursor position
  6238 0000293C B61F                    	mov	dh, PROGRESSBAR_ROW
  6239 0000293E B200                    	mov	dl, 0
  6240 00002940 E8D1FDFFFF              	call	setCursorPosition
  6241                                  
  6242 00002945 58                      	pop	eax ; *
  6243 00002946 09C0                    	or	eax, eax
  6244 00002948 742D                    	jz	short UpdateProgressBar_Clean
  6245                                  
  6246                                  UpdateProgressBar_DrawProgress:
  6247                                  	; 22/12/2024
  6248                                  	; 21/12/2024
  6249                                  	; (write progress bar chars in graphics mode)
  6250                                  	;;;;
  6251 0000294A 89C5                    	mov	ebp, eax
  6252 0000294C 50                      	push	eax ; ***
  6253 0000294D 8B35[80760000]          	mov	esi, [screenpos]
  6254                                  UpdateProgressBar_DrawProgress_@:
  6255 00002953 B8DF000000              	mov	eax, 223
  6256                                  	
  6257                                  	; esi = pixel position (hw = row, si = column)
  6258                                  	; eax = al = character
  6259                                  	;call	write_character
  6260                                  	; 22/12/2024
  6261 00002958 E86DFFFFFF              	call	write_character_white
  6262                                  
  6263 0000295D 4D                      	dec	ebp
  6264 0000295E 7406                    	jz	short UpdateProgressBar_DrawCursor
  6265                                  
  6266 00002960 83C608                  	add	esi, 8 ; next column
  6267 00002963 EBEE                    	jmp	short UpdateProgressBar_DrawProgress_@
  6268                                  	;;;
  6269                                  
  6270                                  UpdateProgressBar_ok:
  6271 00002965 C3                      	retn
  6272                                  
  6273                                  UpdateProgressBar_DrawCursor:
  6274                                  	; 22/12/2024
  6275 00002966 5A                      	pop	edx ; ***
  6276 00002967 B61F                    	mov	dh, PROGRESSBAR_ROW
  6277 00002969 E8A8FDFFFF              	call	setCursorPosition
  6278                                  
  6279                                  	; 21/12/2024
  6280                                  	; (write progress bar character in graphics mode)
  6281                                  	;;;;
  6282                                  	;;;mov	eax, 223
  6283                                  	;;;shl	eax, 4 ; 8*16 pixel user font
  6284                                  	;;mov	eax, 223*16
  6285                                  	;;mov	edi, fontbuff2 ; start of user font data
  6286                                  	;;add	edi, eax
  6287                                  	;mov	edi, fontbuff2+(223*16)
  6288                                  	;
  6289                                  	;sys	_video, 020Fh, 0Ch, 8001h
  6290                                  	; 22/12/2024
  6291                                  	;mov	eax, 223
  6292                                  	; eax = 0
  6293 0000296E B0DF                    	mov	al, 223
  6294 00002970 B10C                    	mov	cl, 0Ch ; red
  6295 00002972 E858FFFFFF              	call	write_character
  6296                                  	;;;;
  6297                                  
  6298                                  UpdateProgressBar_Clean:
  6299                                  	;pop	eax  ; **
  6300                                  	; 22/12/2024
  6301 00002977 5A                      	pop	edx  ; **
  6302                                  	; 21/12/2024
  6303 00002978 BD50000000              	mov	ebp, 80
  6304                                  	;sub	bp, ax
  6305 0000297D 6629D5                  	sub	bp, dx ; 22/12/2024
  6306 00002980 74E3                    	jz	short UpdateProgressBar_ok
  6307                                  
  6308 00002982 B61F                    	mov	dh, PROGRESSBAR_ROW
  6309                                  	;mov	dl, al ; 22/12/2024
  6310 00002984 E88DFDFFFF              	call	setCursorPosition
  6311                                  
  6312                                  	; 21/12/2024
  6313                                  	; (write progress bar chars in graphics mode)
  6314                                  	;;;;
  6315 00002989 8B35[80760000]          	mov	esi, [screenpos]
  6316                                  UpdateProgressBar_Clean_@:
  6317                                  	;;;mov	eax, 223
  6318                                  	;;;shl	eax, 4 ; 8*16 pixel user font
  6319                                  	;;mov	eax, 223*16
  6320                                  	;mov	edi, fontbuff2 ; start of user font data
  6321                                  	;add	edi, eax
  6322                                  	;mov	edi, fontbuff2+(223*16)
  6323                                  	;
  6324                                  	;sys	_video, 020Fh, 08h, 8001h
  6325                                  	; 22/12/2024
  6326                                  	;mov	eax, 223
  6327                                  	; eax = 0
  6328 0000298F B0DF                    	mov	al, 223
  6329 00002991 B108                    	mov	cl, 08h ; gray (dark)
  6330 00002993 E837FFFFFF              	call	write_character
  6331                                  	;;;;
  6332                                  
  6333 00002998 4D                      	dec	ebp
  6334 00002999 74CA                    	jz	short UpdateProgressBar_ok
  6335                                  
  6336 0000299B 83C608                  	add	esi, 8 ; next column
  6337 0000299E EBEF                    	jmp	short UpdateProgressBar_Clean_@
  6338                                  	;;;;
  6339                                  
  6340                                  ; --------------------------------------------------------
  6341                                  ; 17/11/2024
  6342                                  
  6343                                  Player_ProcessKey_Backwards:
  6344                                  	;; In order to go backwards 5 seconds:
  6345                                  	;; Update file pointer to the beginning, skip headers
  6346 000029A0 B142                    	mov	cl, 'B'
  6347 000029A2 EB02                    	jmp	short Player_ProcessKey_B_or_F
  6348                                  
  6349                                  Player_ProcessKey_Forwards:
  6350                                  	;; In order to fast-forward 5 seconds, set the file pointer
  6351                                  	;; to CUR_SEEK + 5 * Freq
  6352                                  
  6353 000029A4 B146                    	mov	cl, 'F'
  6354                                  	;jmp	short Player_ProcessKey_B_or_F
  6355                                  
  6356                                  	; 01/12/2024 (32bit regsisters)
  6357                                  Player_ProcessKey_B_or_F:
  6358                                  	; 17/11/2024
  6359                                  	; 04/11/2024
  6360                                  	; (Ref: player.asm, Matan Alfasi, 2017)
  6361                                    
  6362                                  	; 04/11/2024
  6363 000029A6 B805000000              	mov	eax, 5
  6364 000029AB 0FB71D[C0800000]        	movzx	ebx, word [WAVE_BlockAlign]
  6365 000029B2 F7E3                    	mul	ebx
  6366 000029B4 668B1D[B8800000]        	mov	bx, [WAVE_SampleRate]
  6367 000029BB F7E3                    	mul	ebx
  6368                                  	; eax = transfer byte count for 5 seconds
  6369                                  	
  6370                                  	; 17/11/2024
  6371 000029BD 80F942                  	cmp	cl, 'B'
  6372                                  	;mov	bx, [LoadedDataBytes]
  6373                                  	;mov	cx, [LoadedDataBytes+2]
  6374                                  	; 01/12/2024
  6375 000029C0 8B0D[58810000]          	mov	ecx, [LoadedDataBytes]
  6376 000029C6 7508                    	jne	short move_forward ; cl = 'F'
  6377                                  move_backward:
  6378                                  	;sub	bx, ax
  6379                                  	;sbb	cx, dx
  6380 000029C8 29C1                    	sub	ecx, eax
  6381 000029CA 7316                    	jnc	short move_file_pointer
  6382                                  move_to_beginning:
  6383                                  	;xor	cx, cx ; 0
  6384                                  	;xor	bx, bx ; 0
  6385 000029CC 31C9                    	xor	ecx, ecx
  6386 000029CE EB12                    	jmp	short move_file_pointer
  6387                                  move_forward: 
  6388                                  	;add	bx, ax
  6389                                  	;adc	cx, dx
  6390 000029D0 01C1                    	add	ecx, eax
  6391 000029D2 7208                    	jc	short move_to_end
  6392                                  	;cmp	cx, [DATA_SubchunkSize+2]
  6393                                  	;ja	short move_to_end
  6394                                  	;jb	short move_file_pointer
  6395                                  	;cmp	bx, [DATA_SubchunkSize]
  6396                                  	;jna	short move_file_pointer
  6397 000029D4 3B0D[C8800000]          	cmp	ecx, [DATA_SubchunkSize]
  6398 000029DA 7606                    	jna	short move_file_pointer
  6399                                  move_to_end:
  6400                                  	;mov	bx, [DATA_SubchunkSize]
  6401                                  	;mov	cx, [DATA_SubchunkSize+2]
  6402 000029DC 8B0D[C8800000]          	mov	ecx, [DATA_SubchunkSize]
  6403                                  move_file_pointer:
  6404                                  	;mov	dx, bx    
  6405                                  	;mov	[LoadedDataBytes], dx
  6406                                  	;mov	[LoadedDataBytes+2], cx
  6407 000029E2 890D[58810000]          	mov	[LoadedDataBytes], ecx
  6408                                  	;add	dx, 44 ; + header
  6409                                  	;adc	cx, 0
  6410 000029E8 83C12C                  	add	ecx, 44 
  6411                                  
  6412                                  	; seek
  6413                                  	;mov	bx, [filehandle]
  6414                                  	;mov	ax, 4200h
  6415                                  	;int	21h
  6416                                  	; 01/12/2024
  6417 000029EB 31D2                    	xor	edx, edx ; offset from beginning of the file
  6418                                  	; ecx = offset	
  6419                                  	; ebx = file handle
  6420                                  	; edx = 0
  6421                                  	sys	_seek, [filehandle]
    86                              <1> 
    87                              <1> 
    88                              <1> 
    89                              <1> 
    90                              <1>  %if %0 >= 2
    91 000029ED 8B1D[D0800000]      <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    93                              <1>  mov ecx, %3
    94                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    96                              <1>  %endif
    97                              <1>  %endif
    98                              <1>  %endif
    99 000029F3 B813000000          <1>  mov eax, %1
   100                              <1> 
   101 000029F8 CD40                <1>  int 40h
  6422 000029FA C3                      	retn
  6423                                  
  6424                                  ; --------------------------------------------------------
  6425                                  
  6426                                  	; 25/12/2024
  6427                                  	; 22/12/2024 (VESA VBE mode graphics) 
  6428                                  	; (640*480, 256 colors)
  6429                                  clear_window:
  6430 000029FB 8B3D[7C760000]          	mov	edi, [LFB_ADDR]
  6431                                  	;add	edi, (13*80*8*14)
  6432                                  	; 25/12/2024
  6433 00002A01 81C7009A0100            	add	edi, 164*640
  6434 00002A07 29C0                    	sub	eax, eax
  6435                                  	;mov	ecx, (16*640*14)/4 ; 16 rows
  6436 00002A09 B900A00000              	mov	ecx, 64*640 ; 256 volume level points
  6437 00002A0E F3AB                    	rep	stosd
  6438                                  	; 24/12/2024
  6439 00002A10 A3[8C760000]            	mov	[prev_points], eax ; 0
  6440                                  	;
  6441 00002A15 C3                      	retn
  6442                                  
  6443                                  ; --------------------------------------------------------
  6444                                  
  6445                                  	; 22/12/2024
  6446                                  	; 21/12/2024
  6447                                  	; (simulate wave leds in graphics mode)
  6448                                  	; (640*480, 256 colors)
  6449                                  reset_wave_leds:
  6450                                  	; 22/12/2024
  6451 00002A16 C705[34750000]0000-     	mov	dword [prev_leds], 0
  6451 00002A1E 0000               
  6452                                  	;
  6453 00002A20 BD00050000              	mov	ebp, 16*80 ; 80 columns with 16 levels
  6454 00002A25 BE[34610000]            	mov	esi, wleds_addr
  6455                                  next_led:
  6456 00002A2A AD                      	lodsd
  6457 00002A2B 89C7                    	mov	edi, eax
  6458 00002A2D BA0E000000              	mov	edx, 14 ; 14 lines (8*14 pixel font)
  6459 00002A32 BB[14610000]            	mov	ebx, fontbuff2+(254*16) ; char = 254
  6460                                  led_line:
  6461 00002A37 8A23                    	mov	ah, [ebx]
  6462 00002A39 B908000000              	mov	ecx, 8 ; 8 pixels (8*16 pixel font)
  6463                                  next_pixel:
  6464 00002A3E D0E4                    	shl	ah, 1
  6465 00002A40 7308                    	jnc	short skip_this
  6466 00002A42 B008                    	mov	al, 8 ; gray
  6467 00002A44 AA                      	stosb
  6468 00002A45 49                      	dec	ecx
  6469 00002A46 75F6                    	jnz	short next_pixel
  6470 00002A48 EB06                    	jmp	short next_line
  6471                                  skip_this:
  6472 00002A4A B000                    	mov	al, 0 ; black
  6473 00002A4C AA                      	stosb
  6474 00002A4D 49                      	dec	ecx
  6475 00002A4E 75EE                    	jnz	short next_pixel
  6476                                  next_line:
  6477 00002A50 4A                      	dec	edx
  6478 00002A51 7504                    	jnz	short next_line_@
  6479 00002A53 4D                      	dec	ebp
  6480 00002A54 75D4                    	jnz	short next_led
  6481                                  	;clc	; 25/12/2024
  6482 00002A56 C3                      	retn
  6483                                  next_line_@:
  6484                                  	; 22/12/2024
  6485 00002A57 81C778020000            	add	edi, 640-8 ; next line
  6486 00002A5D 43                      	inc	ebx
  6487 00002A5E EBD7                    	jmp	short led_line	
  6488                                  
  6489                                  ; --------------------------------------------------------
  6490                                  
  6491                                  	; 22/12/2024 (graphics mode)
  6492                                  	; 09/12/2024
  6493                                  	; 19/11/2024
  6494                                  UpdateWaveLeds:
  6495                                  	; 23/11/2024
  6496                                  	;call	reset_wave_leds
  6497                                  	; 22/12/2024 (faster method, 80 against 80*16)
  6498                                  	; turn off previously lighting wave leds at first
  6499                                  	;;;
  6500 00002A60 BE[34750000]            	mov	esi, prev_leds
  6501 00002A65 833E00                  	cmp	dword [esi], 0
  6502 00002A68 7433                    	jz	short UpdateWaveLeds_ok
  6503 00002A6A B950000000              	mov	ecx, 80
  6504                                  turn_off_led:
  6505 00002A6F AD                      	lodsd
  6506 00002A70 89C7                    	mov	edi, eax
  6507                                  	; edi = wave led address
  6508 00002A72 BD0E000000              	mov	ebp, 14
  6509 00002A77 BB[14610000]            	mov	ebx, fontbuff2+(254*16) ; char = 254
  6510 00002A7C 31D2                    	xor	edx, edx
  6511 00002A7E B008                    	mov	al, 8 ; gray (dark)
  6512                                  toffl_next_line:
  6513                                  	;;mov	edx, 8 ; 8 pixels (8*14 pixel font)
  6514                                  	;mov	dl, 8
  6515 00002A80 88C2                    	mov	dl, al ; 8
  6516 00002A82 8A23                    	mov	ah, [ebx]
  6517                                  toffl_next_pixel:
  6518 00002A84 D0E4                    	shl	ah, 1
  6519 00002A86 7310                    	jnc	short toffl_skip_this
  6520 00002A88 AA                      	stosb
  6521                                  toffl_next_pixel_@:
  6522 00002A89 4A                      	dec	edx
  6523 00002A8A 75F8                    	jnz	short toffl_next_pixel
  6524 00002A8C 4D                      	dec	ebp
  6525 00002A8D 740C                    	jz	short toffl_next_led
  6526 00002A8F 81C778020000            	add	edi, 640-8 ; next line
  6527 00002A95 43                      	inc	ebx
  6528 00002A96 EBE8                    	jmp	short toffl_next_line
  6529                                  toffl_skip_this:
  6530 00002A98 47                      	inc	edi
  6531 00002A99 EBEE                    	jmp	short toffl_next_pixel_@
  6532                                  toffl_next_led:
  6533 00002A9B E2D2                    	loop	turn_off_led
  6534                                  UpdateWaveLeds_ok:
  6535                                  	;;;
  6536                                  	; 09/12/2024
  6537                                  	;jmp	short turn_on_leds
  6538                                  
  6539                                  ; --------------------------------------------------------
  6540                                  
  6541                                  	; 21/12/2024 (VESA VBE Mode, 640*480, 256 colors)
  6542                                  	; 09/12/2024
  6543                                  	; 01/12/2024 (TRDOS 386, 32bit registers, flat memory)
  6544                                  	; 23/11/2024 (Retro DOS, 16bit registers, segmented)
  6545                                  	; 21/11/2024, 22/11/2024
  6546                                  	; 19/11/2024
  6547                                  turn_on_leds:
  6548                                  	; 09/12/2024
  6549                                  	; 07/12/2024
  6550 00002A9D 8A15[99800000]          	mov	dl, [half_buffer]
  6551                                  tol_@:
  6552                                  	; 07/12/2024
  6553 00002AA3 3815[98800000]          	cmp	[pbuf_s], dl
  6554 00002AA9 7520                    	jne	short tol_ns_buf
  6555 00002AAB 8B1D[90800000]          	mov	ebx, [wleds_dif]
  6556 00002AB1 8B35[94800000]          	mov	esi, [pbuf_o]
  6557 00002AB7 8B0D[48810000]          	mov	ecx, [buffersize] ; bytes
  6558 00002ABD 29D9                    	sub	ecx, ebx ; sub ecx, [wleds_dif]
  6559 00002ABF 01DE                    	add	esi, ebx
  6560 00002AC1 7204                    	jc	short tol_o_@
  6561 00002AC3 39CE                    	cmp	esi, ecx
  6562 00002AC5 760C                    	jna	short tol_s_buf
  6563                                  tol_o_@:
  6564 00002AC7 89CE                    	mov	esi, ecx
  6565 00002AC9 EB08                    	jmp	short tol_s_buf
  6566                                  
  6567                                  tol_ns_buf:
  6568 00002ACB 8815[98800000]          	mov	[pbuf_s], dl
  6569 00002AD1 31F6                    	xor	esi, esi ; 0
  6570                                  tol_s_buf:
  6571 00002AD3 8935[94800000]          	mov	[pbuf_o], esi
  6572                                  
  6573                                  tol_buf_@:
  6574                                  	; 07/12/2024
  6575 00002AD9 81C6[00900000]          	add	esi, audio_buffer
  6576 00002ADF B950000000              	mov	ecx, 80
  6577                                  	;xor	eax, eax ; 0
  6578 00002AE4 BB[34610000]            	mov	ebx, wleds_addr
  6579                                  	; 22/12/2024
  6580 00002AE9 BF[34750000]            	mov	edi, prev_leds
  6581                                  tol_fill_c:
  6582 00002AEE 31C0                    	xor	eax, eax ; 0 ; 22/12/2024
  6583 00002AF0 66AD                    	lodsw	; left
  6584 00002AF2 80C480                  	add	ah, 80h	; 24/12/2024
  6585 00002AF5 89C2                    	mov	edx, eax
  6586 00002AF7 66AD                    	lodsw	; right
  6587                                  	;add	ax, dx
  6588 00002AF9 80C480                  	add	ah, 80h
  6589                                  	;; 21/12/2024 (16 volume levels)
  6590                                  	;shr	eax, 12
  6591                                  	; 24/12/2024
  6592 00002AFC 01D0                    	add	eax, edx
  6593 00002AFE C1E80D                  	shr	eax, 13	; (L+R/2) & 16 volume levels
  6594                                  
  6595 00002B01 53                      	push	ebx ; *
  6596                                  	; 01/12/2024
  6597 00002B02 C1E002                  	shl	eax, 2
  6598 00002B05 01C3                    	add	ebx, eax
  6599                                  	; 01/12/2024 (32bit address)
  6600                                  	;mov	edi, [ebx]
  6601                                  	; 22/12/2024
  6602 00002B07 8B03                    	mov	eax, [ebx]
  6603 00002B09 AB                      	stosd
  6604 00002B0A 57                      	push	edi ; **
  6605 00002B0B 89C7                    	mov	edi, eax
  6606                                  	;;;
  6607                                  	; 21/12/2024
  6608                                  	; (simulate wave leds in graphics mode)
  6609                                  	; (640*480, 256 colors)
  6610                                  turn_on_led:
  6611                                  	; edi = wave led address
  6612 00002B0D BD0E000000              	mov	ebp, 14
  6613 00002B12 BB[14610000]            	mov	ebx, fontbuff2+(254*16) ; char = 254
  6614 00002B17 A0[31430000]            	mov	al, [ccolor]
  6615                                  tol_next_line:
  6616 00002B1C BA08000000              	mov	edx, 8 ; 8 pixels (8*14 pixel font)
  6617 00002B21 8A23                    	mov	ah, [ebx]
  6618                                  tol_next_pixel:
  6619 00002B23 D0E4                    	shl	ah, 1
  6620 00002B25 7310                    	jnc	short tol_skip_this
  6621 00002B27 AA                      	stosb
  6622                                  tol_next_pixel_@:
  6623 00002B28 4A                      	dec	edx
  6624 00002B29 75F8                    	jnz	short tol_next_pixel
  6625 00002B2B 4D                      	dec	ebp
  6626 00002B2C 740C                    	jz	short tol_next_led
  6627                                  	; 22/12/2024
  6628 00002B2E 81C778020000            	add	edi, 640-8 ; next line
  6629 00002B34 43                      	inc	ebx
  6630 00002B35 EBE5                    	jmp	short tol_next_line
  6631                                  tol_skip_this:
  6632 00002B37 47                      	inc	edi
  6633 00002B38 EBEE                    	jmp	short tol_next_pixel_@
  6634                                  tol_next_led:
  6635                                  	; 22/12/2024
  6636 00002B3A 5F                      	pop	edi ; **
  6637                                  	;;;
  6638 00002B3B 5B                      	pop	ebx ; *
  6639 00002B3C 83C340                  	add	ebx, 16*4
  6640 00002B3F E2AD                    	loop	tol_fill_c
  6641                                  
  6642 00002B41 C3                      	retn
  6643                                  
  6644                                  ; -------------------------------------------------------------
  6645                                  
  6646                                  ; -------------------------------------------------------------
  6647                                  ; ac97.inc (11/11/2023)
  6648                                  ; -------------------------------------------------------------
  6649                                  
  6650                                  ; special characters
  6651                                  LF      EQU 10
  6652                                  CR      EQU 13
  6653                                  
  6654                                  ; PCI stuff
  6655                                  
  6656                                  ; Intel ICH2 equates. It is assumed that ICH0 and plain ole ICH are compatible.
  6657                                  
  6658                                  INTEL_VID       equ     8086h           ; Intel's PCI vendor ID
  6659                                  ; 03/11/2023 - Erdogan Tan (Ref: MenuetOS AC97 WAV Player source code, 2004)
  6660                                  SIS_VID		equ	1039h
  6661                                  NVIDIA_VID	equ	10DEh	 ; Ref: MPXPLAY/SBEMU/KOLIBRIOS AC97 source c.
  6662                                  AMD_VID		equ	1022h
  6663                                  
  6664                                  ICH_DID         equ     2415h           ; ICH device ID
  6665                                  ICH0_DID        equ     2425h           ; ICH0
  6666                                  ICH2_DID        equ     2445h           ; ICH2 I think there are more ICHes.
  6667                                                                          ; they all should be compatible.
  6668                                  
  6669                                  ; 17/02/2017 (Erdogan Tan, ref: ALSA Device IDs, ALSA project)
  6670                                  ICH3_DID	equ     2485h           ; ICH3
  6671                                  ICH4_DID        equ     24C5h           ; ICH4
  6672                                  ICH5_DID	equ     24D5h           ; ICH5
  6673                                  ICH6_DID	equ     266Eh           ; ICH6
  6674                                  ESB6300_DID	equ     25A6h           ; 6300ESB
  6675                                  ESB631X_DID	equ     2698h           ; 631XESB
  6676                                  ICH7_DID	equ	27DEh		; ICH7
  6677                                  ; 03/11/2023 - Erdogan Tan (Ref: MenuetOS AC97 WAV Player source code, 2004)
  6678                                  MX82440_DID	equ	7195h
  6679                                  SI7012_DID	equ	7012h
  6680                                  NFORCE_DID	equ	01B1h
  6681                                  NFORCE2_DID	equ	006Ah
  6682                                  AMD8111_DID	equ	746Dh
  6683                                  AMD768_DID	equ	7445h
  6684                                  ; 03/11/2023 - Erdogan Tan - Ref: MPXPLAY/SBEMU/KOLIBRIOS AC97 source code
  6685                                  CK804_DID	equ	0059h
  6686                                  MCP04_DID	equ	003Ah
  6687                                  CK8_DID		equ	008Ah
  6688                                  NFORCE3_DID	equ	00DAh
  6689                                  CK8S_DID	equ	00EAh
  6690                                  
  6691                                  ; -------------------------------------------------------------
  6692                                  
  6693                                  ; 22/12/2024
  6694 00002B42 90<rep 2h>              align 4
  6695                                  
  6696                                  ; 13/11/2024
  6697                                  ; ('<<' to 'shl' conversion for FASM)
  6698                                  ;
  6699                                  ; 29/05/2024 (TRDOS 386)
  6700                                  ; 17/02/2017
  6701                                  ; Valid ICH device IDs
  6702                                  
  6703                                  valid_ids:
  6704                                  	;dd (ICH_DID shl 16) + INTEL_VID	; 8086h:2415h
  6705 00002B44 86801524                	dd (ICH_DID << 16) + INTEL_VID		; 8086h:2415h
  6706 00002B48 86802524                	dd (ICH0_DID << 16) + INTEL_VID		; 8086h:2425h
  6707 00002B4C 86804524                	dd (ICH2_DID << 16) + INTEL_VID		; 8086h:2445h
  6708 00002B50 86808524                	dd (ICH3_DID << 16) + INTEL_VID		; 8086h:2485h
  6709 00002B54 8680C524                	dd (ICH4_DID << 16) + INTEL_VID		; 8086h:24C5h
  6710 00002B58 8680D524                	dd (ICH5_DID << 16) + INTEL_VID		; 8086h:24D5h
  6711 00002B5C 86806E26                	dd (ICH6_DID << 16) + INTEL_VID		; 8086h:266Eh
  6712 00002B60 8680A625                	dd (ESB6300_DID << 16) + INTEL_VID	; 8086h:25A6h
  6713 00002B64 86809826                	dd (ESB631X_DID << 16) + INTEL_VID	; 8086h:2698h
  6714 00002B68 8680DE27                	dd (ICH7_DID << 16) + INTEL_VID		; 8086h:27DEh
  6715                                  	; 03/11/2023 - Erdogan Tan
  6716 00002B6C 86809571                	dd (MX82440_DID << 16) + INTEL_VID	; 8086h:7195h
  6717 00002B70 39101270                	dd (SI7012_DID << 16)  + SIS_VID	; 1039h:7012h
  6718 00002B74 DE10B101                	dd (NFORCE_DID << 16)  + NVIDIA_VID	; 10DEh:01B1h
  6719 00002B78 DE106A00                	dd (NFORCE2_DID << 16) + NVIDIA_VID	; 10DEh:006Ah
  6720 00002B7C 22106D74                	dd (AMD8111_DID << 16) + AMD_VID	; 1022h:746Dh
  6721 00002B80 22104574                	dd (AMD768_DID << 16)  + AMD_VID	; 1022h:7445h
  6722 00002B84 DE105900                	dd (CK804_DID << 16) + NVIDIA_VID	; 10DEh:0059h
  6723 00002B88 DE103A00                	dd (MCP04_DID << 16) + NVIDIA_VID	; 10DEh:003Ah
  6724 00002B8C DE108A00                	dd (CK8_DID << 16) + NVIDIA_VID		; 1022h:008Ah
  6725 00002B90 DE10DA00                	dd (NFORCE3_DID << 16) + NVIDIA_VID	; 10DEh:00DAh
  6726 00002B94 DE10EA00                	dd (CK8S_DID << 16) + NVIDIA_VID	; 10DEh:00EAh
  6727                                  
  6728                                  valid_id_count equ (($ - valid_ids)>>2)	; 05/11/2023
  6729                                  ; 13/11/2024
  6730                                  ;valid_id_count = ($ - valid_ids) shr 2	; 05/11/2023
  6731                                  
  6732 00002B98 00000000                	dd 0
  6733                                  
  6734                                  Credits:
  6735 00002B9C 564741205741562050-     	db 'VGA WAV Player for TRDOS 386 by Erdogan Tan. '
  6735 00002BA5 6C6179657220666F72-
  6735 00002BAE 205452444F53203338-
  6735 00002BB7 36206279204572646F-
  6735 00002BC0 67616E2054616E2E20 
  6736                                  	;;db 'December 2024.', 10,13,0
  6737                                  	;db 'January 2025.', 10,13,0
  6738 00002BC9 466562727561727920-     	db 'February 2025.', 10,13,0
  6738 00002BD2 323032352E0A0D00   
  6739 00002BDA 32372F31322F323032-     	db '27/12/2024', 10,13,0
  6739 00002BE3 340A0D00           
  6740 00002BE7 31382F30312F323032-     	db '18/01/2025', 10,13,0
  6740 00002BF0 350A0D00           
  6741 00002BF4 30352F30322F323032-     	db '05/02/2025', 10,13
  6741 00002BFD 350A0D             
  6742                                  ; 15/11/2024
  6743                                  reset:
  6744 00002C00 00                      	db 0
  6745                                  
  6746                                  msgAudioCardInfo:
  6747 00002C01 666F7220496E74656C-     	db 'for Intel AC97 (ICH) Audio Controller.', 10,13,0
  6747 00002C0A 204143393720284943-
  6747 00002C13 482920417564696F20-
  6747 00002C1C 436F6E74726F6C6C65-
  6747 00002C25 722E0A0D00         
  6748                                  
  6749                                  	; 27/12/2024
  6750                                  msg_usage:
  6751 00002C2A 75736167653A205647-     	db 'usage: VGAPLAY2 <FileName1> <FileName2> <...>',10,13,0
  6751 00002C33 41504C415932203C46-
  6751 00002C3C 696C654E616D65313E-
  6751 00002C45 203C46696C654E616D-
  6751 00002C4E 65323E203C2E2E2E3E-
  6751 00002C57 0A0D00             
  6752                                  
  6753                                  noDevMsg:
  6754 00002C5A 4572726F723A20556E-     	db 'Error: Unable to find AC97 audio device!'
  6754 00002C63 61626C6520746F2066-
  6754 00002C6C 696E64204143393720-
  6754 00002C75 617564696F20646576-
  6754 00002C7E 69636521           
  6755 00002C82 0A0D00                  	db 10,13,0
  6756                                  
  6757                                  noFileErrMsg:
  6758 00002C85 4572726F723A206669-     	db 'Error: file not found.',10,13,0
  6758 00002C8E 6C65206E6F7420666F-
  6758 00002C97 756E642E0A0D00     
  6759                                  
  6760                                  ; 07/12/2024
  6761                                  trdos386_err_msg:
  6762 00002C9E 5452444F5320333836-     	db 'TRDOS 386 System call error !',10,13,0
  6762 00002CA7 2053797374656D2063-
  6762 00002CB0 616C6C206572726F72-
  6762 00002CB9 20210A0D00         
  6763                                  
  6764                                  ; 29/05/2024
  6765                                  ; 11/11/2023
  6766                                  msg_init_err:
  6767 00002CBE 0D0A                    	db CR, LF
  6768 00002CC0 4143393720436F6E74-     	db 'AC97 Controller/Codec initialization error !'
  6768 00002CC9 726F6C6C65722F436F-
  6768 00002CD2 64656320696E697469-
  6768 00002CDB 616C697A6174696F6E-
  6768 00002CE4 206572726F722021   
  6769 00002CEC 0D0A00                  	db CR, LF, 0 ; 07/12/2024
  6770                                  
  6771                                  ; 25/11/2023
  6772                                  msg_no_vra:
  6773 00002CEF 0A0D                    	db 10,13
  6774 00002CF1 4E6F20565241207375-     	db 'No VRA support ! Only 48 kHZ sample rate supported !'
  6774 00002CFA 70706F72742021204F-
  6774 00002D03 6E6C79203438206B48-
  6774 00002D0C 5A2073616D706C6520-
  6774 00002D15 726174652073757070-
  6774 00002D1E 6F727465642021     
  6775 00002D25 0A0D00                  	db 10,13,0
  6776                                  
  6777                                  ; 19/11/2024
  6778                                  ; 03/06/2017
  6779                                  hex_chars:
  6780 00002D28 303132333435363738-     	db '0123456789ABCDEF', 0
  6780 00002D31 3941424344454600   
  6781                                  msgAC97Info:
  6782 00002D39 0D0A                    	db 0Dh, 0Ah
  6783 00002D3B 204143393720417564-     	db ' AC97 Audio Controller & Codec Info', 0Dh, 0Ah 
  6783 00002D44 696F20436F6E74726F-
  6783 00002D4D 6C6C6572202620436F-
  6783 00002D56 64656320496E666F0D-
  6783 00002D5F 0A                 
  6784 00002D60 2056656E646F722049-     	db ' Vendor ID: '
  6784 00002D69 443A20             
  6785                                  msgVendorId:
  6786 00002D6C 303030306820446576-     	db '0000h Device ID: '
  6786 00002D75 6963652049443A20   
  6787                                  msgDevId:
  6788 00002D7D 30303030680D0A          	db '0000h', 0Dh, 0Ah
  6789 00002D84 204275733A20            	db ' Bus: '
  6790                                  msgBusNo:
  6791 00002D8A 303068204465766963-     	db '00h Device: '
  6791 00002D93 653A20             
  6792                                  msgDevNo:
  6793 00002D96 3030682046756E6374-     	db '00h Function: '
  6793 00002D9F 696F6E3A20         
  6794                                  msgFncNo:
  6795 00002DA4 303068                  	db '00h'
  6796 00002DA7 0D0A                    	db 0Dh, 0Ah
  6797 00002DA9 204E414D4241523A20      	db ' NAMBAR: '
  6798                                  msgNamBar:
  6799 00002DB2 30303030682020          	db '0000h  '
  6800 00002DB9 4E41424D4241523A20      	db 'NABMBAR: '
  6801                                  msgNabmBar:
  6802 00002DC2 303030306820204952-     	db '0000h  IRQ: '
  6802 00002DCB 513A20             
  6803                                  msgIRQ:
  6804 00002DCE 3030                    	dw 3030h
  6805 00002DD0 0D0A00                  	db 0Dh, 0Ah, 0
  6806                                  ; 25/11/2023
  6807                                  msgVRAheader:
  6808 00002DD3 205652412073757070-     	db ' VRA support: '
  6808 00002DDC 6F72743A20         
  6809 00002DE1 00                      	db 0	
  6810                                  msgVRAyes:
  6811 00002DE2 5945530D0A00            	db 'YES', 0Dh, 0Ah, 0
  6812                                  msgVRAno:
  6813 00002DE8 4E4F200D0A              	db 'NO ', 0Dh, 0Ah
  6814 00002DED 2028496E746572706F-     	db ' (Interpolated sample rate playing method)'
  6814 00002DF6 6C617465642073616D-
  6814 00002DFF 706C65207261746520-
  6814 00002E08 706C6179696E67206D-
  6814 00002E11 6574686F6429       
  6815 00002E17 0D0A00                  	db 0Dh, 0Ah, 0
  6816                                  
  6817 00002E1A 90<rep 2h>              align 4
  6818                                  
  6819                                  ; -------------------------------------------------------------
  6820                                  
  6821                                  	; 21/12/2024
  6822                                  SplashScreen:
  6823 00002E1C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6823 00002E25 202020202020202020-
  6823 00002E2E 202020202020202020-
  6823 00002E37 202020202020202020-
  6823 00002E40 202020202020202020-
  6823 00002E49 202020202020202020-
  6823 00002E52 202020202020202020-
  6823 00002E5B 202020202020202020-
  6823 00002E64 2020202020DDDBDE   
  6824 00002E6C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6824 00002E75 202020202020202020-
  6824 00002E7E 202020202020202020-
  6824 00002E87 202020202020202020-
  6824 00002E90 202020202020202020-
  6824 00002E99 202020202020202020-
  6824 00002EA2 202020202020202020-
  6824 00002EAB 202020202020202020-
  6824 00002EB4 2020202020DDDBDE   
  6825 00002EBC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6825 00002EC5 202020202020202020-
  6825 00002ECE 202020202020202020-
  6825 00002ED7 202020202020202020-
  6825 00002EE0 202020202020202020-
  6825 00002EE9 202020202020202020-
  6825 00002EF2 202020202020202020-
  6825 00002EFB 202020202020202020-
  6825 00002F04 2020202020DDDBDE   
  6826 00002F0C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6826 00002F15 202020202020202020-
  6826 00002F1E 202020202020202020-
  6826 00002F27 202020202020202020-
  6826 00002F30 202020202020202020-
  6826 00002F39 202020202020202020-
  6826 00002F42 202020202020202020-
  6826 00002F4B 202020202020202020-
  6826 00002F54 2020202020DDDBDE   
  6827 00002F5C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6827 00002F65 202020202020202020-
  6827 00002F6E 202020202020202020-
  6827 00002F77 202020202020202020-
  6827 00002F80 202020202020202020-
  6827 00002F89 202020202020202020-
  6827 00002F92 202020202020202020-
  6827 00002F9B 202020202020202020-
  6827 00002FA4 2020202020DDDBDE   
  6828 00002FAC DDDBDE202020202020-     	db  221, 219, 222, "                     _______   ______        _______.                     ", 221, 219, 222
  6828 00002FB5 202020202020202020-
  6828 00002FBE 2020202020205F5F5F-
  6828 00002FC7 5F5F5F5F2020205F5F-
  6828 00002FD0 5F5F5F5F2020202020-
  6828 00002FD9 2020205F5F5F5F5F5F-
  6828 00002FE2 5F2E20202020202020-
  6828 00002FEB 202020202020202020-
  6828 00002FF4 2020202020DDDBDE   
  6829 00002FFC DDDBDE202020202020-     	db  221, 219, 222, "                    |       \ /  __  \      /       |                     ", 221, 219, 222
  6829 00003005 202020202020202020-
  6829 0000300E 20202020207C202020-
  6829 00003017 202020205C202F2020-
  6829 00003020 5F5F20205C20202020-
  6829 00003029 20202F202020202020-
  6829 00003032 207C20202020202020-
  6829 0000303B 202020202020202020-
  6829 00003044 2020202020DDDBDE   
  6830 0000304C DDDBDE202020202020-     	db  221, 219, 222, "                    |  .--.  |  |  |  |    |   (----`                     ", 221, 219, 222
  6830 00003055 202020202020202020-
  6830 0000305E 20202020207C20202E-
  6830 00003067 2D2D2E20207C20207C-
  6830 00003070 20207C20207C202020-
  6830 00003079 207C202020282D2D2D-
  6830 00003082 2D6020202020202020-
  6830 0000308B 202020202020202020-
  6830 00003094 2020202020DDDBDE   
  6831 0000309C DDDBDE202020202020-     	db  221, 219, 222, "                    |  |  |  |  |  |  |     \   \                         ", 221, 219, 222
  6831 000030A5 202020202020202020-
  6831 000030AE 20202020207C20207C-
  6831 000030B7 20207C20207C20207C-
  6831 000030C0 20207C20207C202020-
  6831 000030C9 20205C2020205C2020-
  6831 000030D2 202020202020202020-
  6831 000030DB 202020202020202020-
  6831 000030E4 2020202020DDDBDE   
  6832 000030EC DDDBDE202020202020-     	db  221, 219, 222, "                    |  '--'  |  `--'  | .----)   |                        ", 221, 219, 222
  6832 000030F5 202020202020202020-
  6832 000030FE 20202020207C202027-
  6832 00003107 2D2D2720207C202060-
  6832 00003110 2D2D2720207C202E2D-
  6832 00003119 2D2D2D292020207C20-
  6832 00003122 202020202020202020-
  6832 0000312B 202020202020202020-
  6832 00003134 2020202020DDDBDE   
  6833 0000313C DDDBDE202020202020-     	db  221, 219, 222, "                    |_______/ \______/  |_______/                         ", 221, 219, 222
  6833 00003145 202020202020202020-
  6833 0000314E 20202020207C5F5F5F-
  6833 00003157 5F5F5F5F2F205C5F5F-
  6833 00003160 5F5F5F5F2F20207C5F-
  6833 00003169 5F5F5F5F5F5F2F2020-
  6833 00003172 202020202020202020-
  6833 0000317B 202020202020202020-
  6833 00003184 2020202020DDDBDE   
  6834 0000318C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6834 00003195 202020202020202020-
  6834 0000319E 202020202020202020-
  6834 000031A7 202020202020202020-
  6834 000031B0 202020202020202020-
  6834 000031B9 202020202020202020-
  6834 000031C2 202020202020202020-
  6834 000031CB 202020202020202020-
  6834 000031D4 2020202020DDDBDE   
  6835 000031DC DDDBDE20202020202E-     	db  221, 219, 222, "     .______    __          ___   ____    ____  _______ .______           ", 221, 219, 222
  6835 000031E5 5F5F5F5F5F5F202020-
  6835 000031EE 205F5F202020202020-
  6835 000031F7 202020205F5F5F2020-
  6835 00003200 205F5F5F5F20202020-
  6835 00003209 5F5F5F5F20205F5F5F-
  6835 00003212 5F5F5F5F202E5F5F5F-
  6835 0000321B 5F5F5F202020202020-
  6835 00003224 2020202020DDDBDE   
  6836 0000322C DDDBDE20202020207C-     	db  221, 219, 222, "     |   _  \  |  |        /   \  \   \  /   / |   ____||   _  \          ", 221, 219, 222
  6836 00003235 2020205F20205C2020-
  6836 0000323E 7C20207C2020202020-
  6836 00003247 2020202F2020205C20-
  6836 00003250 205C2020205C20202F-
  6836 00003259 2020202F207C202020-
  6836 00003262 5F5F5F5F7C7C202020-
  6836 0000326B 5F20205C2020202020-
  6836 00003274 2020202020DDDBDE   
  6837 0000327C DDDBDE20202020207C-     	db  221, 219, 222, "     |  |_)  | |  |       /  ^  \  \   \/   /  |  |__   |  |_)  |         ", 221, 219, 222
  6837 00003285 20207C5F2920207C20-
  6837 0000328E 7C20207C2020202020-
  6837 00003297 20202F20205E20205C-
  6837 000032A0 20205C2020205C2F20-
  6837 000032A9 20202F20207C20207C-
  6837 000032B2 5F5F2020207C20207C-
  6837 000032BB 5F2920207C20202020-
  6837 000032C4 2020202020DDDBDE   
  6838 000032CC DDDBDE20202020207C-     	db  221, 219, 222, "     |   ___/  |  |      /  /_\  \  \_    _/   |   __|  |      /          ", 221, 219, 222
  6838 000032D5 2020205F5F5F2F2020-
  6838 000032DE 7C20207C2020202020-
  6838 000032E7 202F20202F5F5C2020-
  6838 000032F0 5C20205C5F20202020-
  6838 000032F9 5F2F2020207C202020-
  6838 00003302 5F5F7C20207C202020-
  6838 0000330B 2020202F2020202020-
  6838 00003314 2020202020DDDBDE   
  6839 0000331C DDDBDE20202020207C-     	db  221, 219, 222, "     |  |      |  `----./  _____  \   |  |     |  |____ |  |\  \----.     ", 221, 219, 222
  6839 00003325 20207C202020202020-
  6839 0000332E 7C2020602D2D2D2D2E-
  6839 00003337 2F20205F5F5F5F5F20-
  6839 00003340 205C2020207C20207C-
  6839 00003349 20202020207C20207C-
  6839 00003352 5F5F5F5F207C20207C-
  6839 0000335B 5C20205C2D2D2D2D2E-
  6839 00003364 2020202020DDDBDE   
  6840 0000336C DDDBDE20202020207C-     	db  221, 219, 222, "     | _|      |_______/__/     \__\  |__|     |_______|| _| `._____|     ", 221, 219, 222
  6840 00003375 205F7C202020202020-
  6840 0000337E 7C5F5F5F5F5F5F5F2F-
  6840 00003387 5F5F2F20202020205C-
  6840 00003390 5F5F5C20207C5F5F7C-
  6840 00003399 20202020207C5F5F5F-
  6840 000033A2 5F5F5F5F7C7C205F7C-
  6840 000033AB 20602E5F5F5F5F5F7C-
  6840 000033B4 2020202020DDDBDE   
  6841 000033BC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6841 000033C5 202020202020202020-
  6841 000033CE 202020202020202020-
  6841 000033D7 202020202020202020-
  6841 000033E0 202020202020202020-
  6841 000033E9 202020202020202020-
  6841 000033F2 202020202020202020-
  6841 000033FB 202020202020202020-
  6841 00003404 2020202020DDDBDE   
  6842 0000340C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6842 00003415 202020202020202020-
  6842 0000341E 202020202020202020-
  6842 00003427 202020202020202020-
  6842 00003430 202020202020202020-
  6842 00003439 202020202020202020-
  6842 00003442 202020202020202020-
  6842 0000344B 202020202020202020-
  6842 00003454 2020202020DDDBDE   
  6843 0000345C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6843 00003465 202020202020202020-
  6843 0000346E 202020202020202020-
  6843 00003477 202020202020202020-
  6843 00003480 202020202020202020-
  6843 00003489 202020202020202020-
  6843 00003492 202020202020202020-
  6843 0000349B 202020202020202020-
  6843 000034A4 2020202020DDDBDE   
  6844 000034AC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6844 000034B5 202020202020202020-
  6844 000034BE 202020202020202020-
  6844 000034C7 202020202020202020-
  6844 000034D0 202020202020202020-
  6844 000034D9 202020202020202020-
  6844 000034E2 202020202020202020-
  6844 000034EB 202020202020202020-
  6844 000034F4 2020202020DDDBDE   
  6845 000034FC DDDBDE202020202020-     	db  221, 219, 222, "                                WELCOME TO                                ", 221, 219, 222
  6845 00003505 202020202020202020-
  6845 0000350E 202020202020202020-
  6845 00003517 202020202020202057-
  6845 00003520 454C434F4D4520544F-
  6845 00003529 202020202020202020-
  6845 00003532 202020202020202020-
  6845 0000353B 202020202020202020-
  6845 00003544 2020202020DDDBDE   
  6846 0000354C DDDBDE202020202020-     	db  221, 219, 222, "                                DOS PLAYER                                ", 221, 219, 222
  6846 00003555 202020202020202020-
  6846 0000355E 202020202020202020-
  6846 00003567 202020202020202044-
  6846 00003570 4F5320504C41594552-
  6846 00003579 202020202020202020-
  6846 00003582 202020202020202020-
  6846 0000358B 202020202020202020-
  6846 00003594 2020202020DDDBDE   
  6847 0000359C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6847 000035A5 202020202020202020-
  6847 000035AE 202020202020202020-
  6847 000035B7 202020202020202020-
  6847 000035C0 202020202020202020-
  6847 000035C9 202020202020202020-
  6847 000035D2 202020202020202020-
  6847 000035DB 202020202020202020-
  6847 000035E4 2020202020DDDBDE   
  6848 000035EC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6848 000035F5 202020202020202020-
  6848 000035FE 202020202020202020-
  6848 00003607 202020202020202020-
  6848 00003610 202020202020202020-
  6848 00003619 202020202020202020-
  6848 00003622 202020202020202020-
  6848 0000362B 202020202020202020-
  6848 00003634 2020202020DDDBDE   
  6849 0000363C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6849 00003645 202020202020202020-
  6849 0000364E 202020202020202020-
  6849 00003657 202020202020202020-
  6849 00003660 202020202020202020-
  6849 00003669 202020202020202020-
  6849 00003672 202020202020202020-
  6849 0000367B 202020202020202020-
  6849 00003684 2020202020DDDBDE   
  6850 0000368C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6850 00003695 202020202020202020-
  6850 0000369E 202020202020202020-
  6850 000036A7 202020202020202020-
  6850 000036B0 202020202020202020-
  6850 000036B9 202020202020202020-
  6850 000036C2 202020202020202020-
  6850 000036CB 202020202020202020-
  6850 000036D4 2020202020DDDBDE   
  6851 000036DC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6851 000036E5 202020202020202020-
  6851 000036EE 202020202020202020-
  6851 000036F7 202020202020202020-
  6851 00003700 202020202020202020-
  6851 00003709 202020202020202020-
  6851 00003712 202020202020202020-
  6851 0000371B 202020202020202020-
  6851 00003724 2020202020DDDBDE   
  6852 0000372C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6852 00003735 202020202020202020-
  6852 0000373E 202020202020202020-
  6852 00003747 202020202020202020-
  6852 00003750 202020202020202020-
  6852 00003759 202020202020202020-
  6852 00003762 202020202020202020-
  6852 0000376B 202020202020202020-
  6852 00003774 2020202020DDDBDE   
  6853 0000377C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6853 00003785 202020202020202020-
  6853 0000378E 202020202020202020-
  6853 00003797 202020202020202020-
  6853 000037A0 202020202020202020-
  6853 000037A9 202020202020202020-
  6853 000037B2 202020202020202020-
  6853 000037BB 202020202020202020-
  6853 000037C4 2020202020DDDBDE   
  6854 000037CC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6854 000037D5 202020202020202020-
  6854 000037DE 202020202020202020-
  6854 000037E7 202020202020202020-
  6854 000037F0 202020202020202020-
  6854 000037F9 202020202020202020-
  6854 00003802 202020202020202020-
  6854 0000380B 202020202020202020-
  6854 00003814 2020202020DDDBDE   
  6855 0000381C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6855 00003825 202020202020202020-
  6855 0000382E 202020202020202020-
  6855 00003837 202020202020202020-
  6855 00003840 202020202020202020-
  6855 00003849 202020202020202020-
  6855 00003852 202020202020202020-
  6855 0000385B 202020202020202020-
  6855 00003864 2020202020DDDBDE   
  6856 0000386C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6856 00003875 202020202020202020-
  6856 0000387E 202020202020202020-
  6856 00003887 202020202020202020-
  6856 00003890 202020202020202020-
  6856 00003899 202020202020202020-
  6856 000038A2 202020202020202020-
  6856 000038AB 202020202020202020-
  6856 000038B4 2020202020DDDBDE   
  6857 000038BC 00                      	db 0
  6858                                  
  6859                                  ; -------------------------------------------------------------
  6860                                  
  6861                                  	; 25/12/2024
  6862                                  PlayingScreen:
  6863 000038BD DBDBDBDBDBDBDBDBDB-     	db  34 dup(219), " DOS Player ", 34 dup(219)
  6863 000038C6 DBDBDBDBDBDBDBDBDB-
  6863 000038CF DBDBDBDBDBDBDBDBDB-
  6863 000038D8 DBDBDBDBDBDBDB2044-
  6863 000038E1 4F5320506C61796572-
  6863 000038EA 20DBDBDBDBDBDBDBDB-
  6863 000038F3 DBDBDBDBDBDBDBDBDB-
  6863 000038FC DBDBDBDBDBDBDBDBDB-
  6863 00003905 DBDBDBDBDBDBDBDB   
  6864 0000390D C9CDCDCDCDCDCDCDCD-     	db  201, 78 dup(205), 187
  6864 00003916 CDCDCDCDCDCDCDCDCD-
  6864 0000391F CDCDCDCDCDCDCDCDCD-
  6864 00003928 CDCDCDCDCDCDCDCDCD-
  6864 00003931 CDCDCDCDCDCDCDCDCD-
  6864 0000393A CDCDCDCDCDCDCDCDCD-
  6864 00003943 CDCDCDCDCDCDCDCDCD-
  6864 0000394C CDCDCDCDCDCDCDCDCD-
  6864 00003955 CDCDCDCDCDCDCDBB   
  6865 0000395D BA2020202020202020-     	db  186, 33 dup(32), " User Guide ", 33 dup(32), 186
  6865 00003966 202020202020202020-
  6865 0000396F 202020202020202020-
  6865 00003978 202020202020202055-
  6865 00003981 736572204775696465-
  6865 0000398A 202020202020202020-
  6865 00003993 202020202020202020-
  6865 0000399C 202020202020202020-
  6865 000039A5 20202020202020BA   
  6866 000039AD BA2020202020203C53-     	db  186, 6  dup(32), "<Space>         Play/Pause    ", 4 dup(32), "<N>/<P>         Next/Previous", 9 dup(32), 186
  6866 000039B6 706163653E20202020-
  6866 000039BF 2020202020506C6179-
  6866 000039C8 2F5061757365202020-
  6866 000039D1 20202020203C4E3E2F-
  6866 000039DA 3C503E202020202020-
  6866 000039E3 2020204E6578742F50-
  6866 000039EC 726576696F75732020-
  6866 000039F5 20202020202020BA   
  6867 000039FD BA2020202020203C53-     	db  186, 6  dup(32), "<S>             Stop          ", 4 dup(32), "<Enter>/<G>     Wave Lighting", 9 dup(32), 186
  6867 00003A06 3E2020202020202020-
  6867 00003A0F 202020202053746F70-
  6867 00003A18 202020202020202020-
  6867 00003A21 20202020203C456E74-
  6867 00003A2A 65723E2F3C473E2020-
  6867 00003A33 20202057617665204C-
  6867 00003A3C 69676874696E672020-
  6867 00003A45 20202020202020BA   
  6868 00003A4D BA2020202020203C46-     	db  186, 6  dup(32), "<F>             Forwards      ", 4 dup(32), "<+>/<->         Inc/Dec Volume", 8 dup(32), 186
  6868 00003A56 3E2020202020202020-
  6868 00003A5F 2020202020466F7277-
  6868 00003A68 617264732020202020-
  6868 00003A71 20202020203C2B3E2F-
  6868 00003A7A 3C2D3E202020202020-
  6868 00003A83 202020496E632F4465-
  6868 00003A8C 6320566F6C756D6520-
  6868 00003A95 20202020202020BA   
  6869 00003A9D BA2020202020203C42-     	db  186, 6  dup(32), "<B>             Backwards     ", 4 dup(32), "<Q>             Quit Program ", 9 dup(32), 186
  6869 00003AA6 3E2020202020202020-
  6869 00003AAF 20202020204261636B-
  6869 00003AB8 776172647320202020-
  6869 00003AC1 20202020203C513E20-
  6869 00003ACA 202020202020202020-
  6869 00003AD3 202020517569742050-
  6869 00003ADC 726F6772616D202020-
  6869 00003AE5 20202020202020BA   
  6870 00003AED CCCDCDCDCDCDCDCDCD-     	db  204, 78 dup(205), 185
  6870 00003AF6 CDCDCDCDCDCDCDCDCD-
  6870 00003AFF CDCDCDCDCDCDCDCDCD-
  6870 00003B08 CDCDCDCDCDCDCDCDCD-
  6870 00003B11 CDCDCDCDCDCDCDCDCD-
  6870 00003B1A CDCDCDCDCDCDCDCDCD-
  6870 00003B23 CDCDCDCDCDCDCDCDCD-
  6870 00003B2C CDCDCDCDCDCDCDCDCD-
  6870 00003B35 CDCDCDCDCDCDCDB9   
  6871 00003B3D BA2020202020204669-     	db  186, 6  dup(32), "File Name :                   ", 4 dup(32), "Bit-Rate  :     0  Bits      ", 9 dup(32), 186
  6871 00003B46 6C65204E616D65203A-
  6871 00003B4F 202020202020202020-
  6871 00003B58 202020202020202020-
  6871 00003B61 20202020204269742D-
  6871 00003B6A 5261746520203A2020-
  6871 00003B73 202020302020426974-
  6871 00003B7C 732020202020202020-
  6871 00003B85 20202020202020BA   
  6872 00003B8D BA2020202020204672-     	db  186, 6  dup(32), "Frequency :     0     Hz      ", 4 dup(32), "#-Channels:     0            ", 9 dup(32), 186
  6872 00003B96 657175656E6379203A-
  6872 00003B9F 202020202030202020-
  6872 00003BA8 2020487A2020202020-
  6872 00003BB1 2020202020232D4368-
  6872 00003BBA 616E6E656C733A2020-
  6872 00003BC3 202020302020202020-
  6872 00003BCC 202020202020202020-
  6872 00003BD5 20202020202020BA   
  6873 00003BDD C8CDCDCDCDCDCDCDCD-     	db  200, 78 dup(205), 188
  6873 00003BE6 CDCDCDCDCDCDCDCDCD-
  6873 00003BEF CDCDCDCDCDCDCDCDCD-
  6873 00003BF8 CDCDCDCDCDCDCDCDCD-
  6873 00003C01 CDCDCDCDCDCDCDCDCD-
  6873 00003C0A CDCDCDCDCDCDCDCDCD-
  6873 00003C13 CDCDCDCDCDCDCDCDCD-
  6873 00003C1C CDCDCDCDCDCDCDCDCD-
  6873 00003C25 CDCDCDCDCDCDCDBC   
  6874 00003C2D 202020202020202020-     	db  80 dup(32)
  6874 00003C36 202020202020202020-
  6874 00003C3F 202020202020202020-
  6874 00003C48 202020202020202020-
  6874 00003C51 202020202020202020-
  6874 00003C5A 202020202020202020-
  6874 00003C63 202020202020202020-
  6874 00003C6C 202020202020202020-
  6874 00003C75 2020202020202020   
  6875                                  improper_samplerate_txt:
  6876                                  read_error_txt:
  6877 00003C7D 202020202020202020-     	db  80 dup(32)
  6877 00003C86 202020202020202020-
  6877 00003C8F 202020202020202020-
  6877 00003C98 202020202020202020-
  6877 00003CA1 202020202020202020-
  6877 00003CAA 202020202020202020-
  6877 00003CB3 202020202020202020-
  6877 00003CBC 202020202020202020-
  6877 00003CC5 2020202020202020   
  6878 00003CCD 202020202020202020-     	db  80 dup(32)
  6878 00003CD6 202020202020202020-
  6878 00003CDF 202020202020202020-
  6878 00003CE8 202020202020202020-
  6878 00003CF1 202020202020202020-
  6878 00003CFA 202020202020202020-
  6878 00003D03 202020202020202020-
  6878 00003D0C 202020202020202020-
  6878 00003D15 2020202020202020   
  6879 00003D1D 202020202020202020-     	db  80 dup(32)
  6879 00003D26 202020202020202020-
  6879 00003D2F 202020202020202020-
  6879 00003D38 202020202020202020-
  6879 00003D41 202020202020202020-
  6879 00003D4A 202020202020202020-
  6879 00003D53 202020202020202020-
  6879 00003D5C 202020202020202020-
  6879 00003D65 2020202020202020   
  6880 00003D6D 202020202020202020-     	db  80 dup(32)
  6880 00003D76 202020202020202020-
  6880 00003D7F 202020202020202020-
  6880 00003D88 202020202020202020-
  6880 00003D91 202020202020202020-
  6880 00003D9A 202020202020202020-
  6880 00003DA3 202020202020202020-
  6880 00003DAC 202020202020202020-
  6880 00003DB5 2020202020202020   
  6881 00003DBD 202020202020202020-     	db  80 dup(32)
  6881 00003DC6 202020202020202020-
  6881 00003DCF 202020202020202020-
  6881 00003DD8 202020202020202020-
  6881 00003DE1 202020202020202020-
  6881 00003DEA 202020202020202020-
  6881 00003DF3 202020202020202020-
  6881 00003DFC 202020202020202020-
  6881 00003E05 2020202020202020   
  6882 00003E0D 202020202020202020-     	db  80 dup(32)
  6882 00003E16 202020202020202020-
  6882 00003E1F 202020202020202020-
  6882 00003E28 202020202020202020-
  6882 00003E31 202020202020202020-
  6882 00003E3A 202020202020202020-
  6882 00003E43 202020202020202020-
  6882 00003E4C 202020202020202020-
  6882 00003E55 2020202020202020   
  6883 00003E5D 202020202020202020-     	db  80 dup(32)
  6883 00003E66 202020202020202020-
  6883 00003E6F 202020202020202020-
  6883 00003E78 202020202020202020-
  6883 00003E81 202020202020202020-
  6883 00003E8A 202020202020202020-
  6883 00003E93 202020202020202020-
  6883 00003E9C 202020202020202020-
  6883 00003EA5 2020202020202020   
  6884 00003EAD 202020202020202020-     	db  80 dup(32)
  6884 00003EB6 202020202020202020-
  6884 00003EBF 202020202020202020-
  6884 00003EC8 202020202020202020-
  6884 00003ED1 202020202020202020-
  6884 00003EDA 202020202020202020-
  6884 00003EE3 202020202020202020-
  6884 00003EEC 202020202020202020-
  6884 00003EF5 2020202020202020   
  6885 00003EFD 202020202020202020-     	db  80 dup(32)
  6885 00003F06 202020202020202020-
  6885 00003F0F 202020202020202020-
  6885 00003F18 202020202020202020-
  6885 00003F21 202020202020202020-
  6885 00003F2A 202020202020202020-
  6885 00003F33 202020202020202020-
  6885 00003F3C 202020202020202020-
  6885 00003F45 2020202020202020   
  6886 00003F4D 202020202020202020-     	db  80 dup(32)
  6886 00003F56 202020202020202020-
  6886 00003F5F 202020202020202020-
  6886 00003F68 202020202020202020-
  6886 00003F71 202020202020202020-
  6886 00003F7A 202020202020202020-
  6886 00003F83 202020202020202020-
  6886 00003F8C 202020202020202020-
  6886 00003F95 2020202020202020   
  6887 00003F9D 202020202020202020-     	db  80 dup(32)
  6887 00003FA6 202020202020202020-
  6887 00003FAF 202020202020202020-
  6887 00003FB8 202020202020202020-
  6887 00003FC1 202020202020202020-
  6887 00003FCA 202020202020202020-
  6887 00003FD3 202020202020202020-
  6887 00003FDC 202020202020202020-
  6887 00003FE5 2020202020202020   
  6888 00003FED 202020202020202020-     	db  80 dup(32)
  6888 00003FF6 202020202020202020-
  6888 00003FFF 202020202020202020-
  6888 00004008 202020202020202020-
  6888 00004011 202020202020202020-
  6888 0000401A 202020202020202020-
  6888 00004023 202020202020202020-
  6888 0000402C 202020202020202020-
  6888 00004035 2020202020202020   
  6889 0000403D 202020202020202020-     	db  80 dup(32)
  6889 00004046 202020202020202020-
  6889 0000404F 202020202020202020-
  6889 00004058 202020202020202020-
  6889 00004061 202020202020202020-
  6889 0000406A 202020202020202020-
  6889 00004073 202020202020202020-
  6889 0000407C 202020202020202020-
  6889 00004085 2020202020202020   
  6890 0000408D 202020202020202020-     	db  80 dup(32)
  6890 00004096 202020202020202020-
  6890 0000409F 202020202020202020-
  6890 000040A8 202020202020202020-
  6890 000040B1 202020202020202020-
  6890 000040BA 202020202020202020-
  6890 000040C3 202020202020202020-
  6890 000040CC 202020202020202020-
  6890 000040D5 2020202020202020   
  6891 000040DD 202020202020202020-     	db  80 dup(32)
  6891 000040E6 202020202020202020-
  6891 000040EF 202020202020202020-
  6891 000040F8 202020202020202020-
  6891 00004101 202020202020202020-
  6891 0000410A 202020202020202020-
  6891 00004113 202020202020202020-
  6891 0000411C 202020202020202020-
  6891 00004125 2020202020202020   
  6892 0000412D 202020202020202020-     	db  80 dup(32)
  6892 00004136 202020202020202020-
  6892 0000413F 202020202020202020-
  6892 00004148 202020202020202020-
  6892 00004151 202020202020202020-
  6892 0000415A 202020202020202020-
  6892 00004163 202020202020202020-
  6892 0000416C 202020202020202020-
  6892 00004175 2020202020202020   
  6893 0000417D 202020202020202020-     	db  80 dup(32)
  6893 00004186 202020202020202020-
  6893 0000418F 202020202020202020-
  6893 00004198 202020202020202020-
  6893 000041A1 202020202020202020-
  6893 000041AA 202020202020202020-
  6893 000041B3 202020202020202020-
  6893 000041BC 202020202020202020-
  6893 000041C5 2020202020202020   
  6894 000041CD 202020202020202020-     	db  80 dup(32)
  6894 000041D6 202020202020202020-
  6894 000041DF 202020202020202020-
  6894 000041E8 202020202020202020-
  6894 000041F1 202020202020202020-
  6894 000041FA 202020202020202020-
  6894 00004203 202020202020202020-
  6894 0000420C 202020202020202020-
  6894 00004215 2020202020202020   
  6895 0000421D CDCDCDCDCDCDCDCDCD-     	db  80 dup(205)
  6895 00004226 CDCDCDCDCDCDCDCDCD-
  6895 0000422F CDCDCDCDCDCDCDCDCD-
  6895 00004238 CDCDCDCDCDCDCDCDCD-
  6895 00004241 CDCDCDCDCDCDCDCDCD-
  6895 0000424A CDCDCDCDCDCDCDCDCD-
  6895 00004253 CDCDCDCDCDCDCDCDCD-
  6895 0000425C CDCDCDCDCDCDCDCDCD-
  6895 00004265 CDCDCDCDCDCDCDCD   
  6896 0000426D 202020202020202020-     	db  80 dup(32)
  6896 00004276 202020202020202020-
  6896 0000427F 202020202020202020-
  6896 00004288 202020202020202020-
  6896 00004291 202020202020202020-
  6896 0000429A 202020202020202020-
  6896 000042A3 202020202020202020-
  6896 000042AC 202020202020202020-
  6896 000042B5 2020202020202020   
  6897 000042BD 202020202020202020-     	db  33 dup(32), "00:00 ", 174, 175, " 00:00", 24 dup(32), "VOL 000%"
  6897 000042C6 202020202020202020-
  6897 000042CF 202020202020202020-
  6897 000042D8 20202020202030303A-
  6897 000042E1 303020AEAF2030303A-
  6897 000042EA 303020202020202020-
  6897 000042F3 202020202020202020-
  6897 000042FC 202020202020202056-
  6897 00004305 4F4C2030303025     
  6898 0000430C 00                      	db 0
  6899                                  
  6900                                  ; 25/12/2024
  6901                                  ; 28/11/2024
  6902                                  IsInSplash:
  6903 0000430D 01                      	db 1
  6904                                  
  6905                                  SplashFileName:
  6906 0000430E 53504C4153482E5741-     	db "SPLASH.WAV", 0
  6906 00004317 5600               
  6907                                  
  6908                                  ; -------------------------------------------------------------
  6909                                  
  6910                                  	; 22/12/2024
  6911                                  fillblock:
  6912 00004319 FF<rep Eh>              	times 14 db 0FFh
  6913 00004327 0000                    	dw 0
  6914                                  
  6915                                  ; -------------------------------------------------------------
  6916                                  
  6917                                  ; 23/11/2024
  6918                                  colors:
  6919 00004329 0F0B0A0C0E090D0F        	db 0Fh, 0Bh, 0Ah, 0Ch, 0Eh, 09h, 0Dh, 0Fh
  6920                                  	; white, cyan, green, red, yellow, blue, magenta
  6921 00004331 0B                      ccolor:	db 0Bh	; cyan
  6922                                  
  6923                                  EOF: 
  6924                                  
  6925                                  ; -------------------------------------------------------------
  6926                                  
  6927                                  bss:
  6928                                  
  6929                                  ABSOLUTE bss
  6930                                  
  6931 00004332 ????                    alignb 4
  6932                                  
  6933                                  ; 21/12/2024
  6934                                  fontbuff1:
  6935 00004334 <res E00h>              	resb 256*14 ; 8x14 font data (from system)
  6936                                  fontbuff2:
  6937 00005134 <res 1000h>             	resb 256*16 ; 8x16 font data (modif. from 8x14)
  6938                                  
  6939                                  ; 11/12/2024
  6940                                  wleds_addr:
  6941 00006134 <res 1400h>             	resd 80*16 ; 32 bit addrs, 80 leds, 16 volume levels
  6942                                  ; 22/12/2024
  6943                                  prev_leds:
  6944 00007534 <res 140h>              	resd 80	; previous lighting leds
  6945                                  
  6946                                  ; 24/12/2024
  6947                                  wpoints_dif:	; wave lighting points factor (differential) 
  6948 00007674 ????????                	resd 1	; required bytes for 1/18 second wave lighting
  6949                                  graphstart:
  6950 00007678 ????????                	resd 1	; start (top) line/row for wave lighting points 	 
  6951                                  
  6952                                  LFB_ADDR:
  6953 0000767C ????????                	resd 1
  6954                                  ;nextrow:
  6955                                  	;resd 1
  6956                                  screenpos: ; hw = (cursor) row, lw = (cursor) column
  6957 00007680 ????????                	resd 1
  6958 00007684 ????????                wcolor:	resd 1
  6959                                  ; 26/12/2024
  6960                                  ;tcolor: resb 1 ; text color
  6961                                  columns:
  6962 00007688 ??                      	resb 1
  6963 00007689 ??                      pbprev:	resb 1 ; previous progress bar indicator position
  6964                                  
  6965 0000768A ????                    alignb 4
  6966                                  
  6967                                  bss_start:
  6968                                  
  6969                                  ; 24/12/2024
  6970                                  prev_points:
  6971 0000768C <res A00h>              	resd 640 ; previous wave points (which are lighting)	
  6972                                  
  6973                                  ; 18/11/2024
  6974                                  stopped:
  6975 0000808C ??                      	resb 1
  6976 0000808D ??                      tLO:	resb 1
  6977                                  ; 21/11/2024
  6978 0000808E ??                      tLP:	resb 1
  6979                                  ; 19/11/2024
  6980 0000808F ??                      wleds:	resb 1
  6981                                  wleds_dif:
  6982 00008090 ????????                	resd 1
  6983 00008094 ????????                pbuf_o:	resd 1
  6984                                  ; 07/12/2024
  6985 00008098 ??                      pbuf_s:	resb 1
  6986                                  
  6987                                  ; 07/12/2024
  6988                                  ; 24/11/2024
  6989                                  half_buffer:
  6990 00008099 ??                      	resb 1	; dma half buffer 1 or 2 (0 or 1)
  6991                                  
  6992                                  ; 30/05/2024
  6993 0000809A ??                      VRA:	resb 1	; Variable Rate Audio Support Status
  6994                                  
  6995                                  ; 24/12/2024
  6996 0000809B ??                      p_mode: resb 1	; point mode (as alternative to LED mode)
  6997                                  
  6998                                  ; 25/12/2024
  6999                                  ; 29/11/2024
  7000                                  command:
  7001 0000809C ??                      	resb 1
  7002                                  filecount:
  7003 0000809D ??                      	resb 1
  7004                                  
  7005                                  ; 30/11/2024
  7006 0000809E ????                    alignb 4
  7007                                  
  7008                                  ;;;;;;;;;;;;;;
  7009                                  ; 14/11/2024
  7010                                  ; (Ref: player.asm, Matan Alfasi, 2017)  
  7011                                  WAVFILEHEADERbuff:
  7012                                  RIFF_ChunkID:
  7013 000080A0 ????????                	resd 1	; Must be equal to "RIFF" - big-endian
  7014                                  		; 0x52494646
  7015                                  RIFF_ChunkSize:
  7016 000080A4 ????????                	resd 1	; Represents total file size, not 
  7017                                          	; including the first 2 fields 
  7018                                  		; (Total_File_Size - 8), little-endian
  7019                                  RIFF_Format:
  7020 000080A8 ????????                	resd 1	; Must be equal to "WAVE" - big-endian
  7021                                  		; 0x57415645
  7022                                  
  7023                                  ;; WAVE header parameters ("Sub-chunk")
  7024                                  WAVE_SubchunkID:
  7025 000080AC ????????                	resd 1	; Must be equal to "fmt " - big-endian
  7026                                  		; 0x666d7420
  7027                                  WAVE_SubchunkSize:
  7028 000080B0 ????????                	resd 1	; Represents total chunk size
  7029                                  WAVE_AudioFormat:
  7030 000080B4 ????                    	resw 1	; PCM (Raw) - is 1, other - is a form 
  7031                                  		; of compression, not supported.
  7032                                  WAVE_NumChannels:
  7033 000080B6 ????                    	resw 1	; Number of channels, Mono-1, Stereo-2
  7034                                  WAVE_SampleRate:
  7035 000080B8 ????????                	resd 1	; Frequency rate, in Hz (8000, 44100 ...)
  7036                                  WAVE_ByteRate:
  7037 000080BC ????????                	resd 1	; SampleRate * NumChannels * BytesPerSample
  7038                                  WAVE_BlockAlign:
  7039 000080C0 ????                    	resw 1	; NumChannels * BytesPerSample
  7040                                  		; Number of bytes for one sample.
  7041                                  WAVE_BitsPerSample:
  7042 000080C2 ????                    	resw 1	; 8 = 8 bits, 16 = 16 bits, etc.
  7043                                  
  7044                                  ;; DATA header parameters
  7045                                  DATA_SubchunkID:
  7046 000080C4 ????????                	resd 1	; Must be equal to "data" - big-endian
  7047                                          	; 0x64617461
  7048                                  DATA_SubchunkSize:
  7049 000080C8 ????????                	resd 1	; NumSamples * NumChannels * BytesPerSample
  7050                                          	; Number of bytes in the data.
  7051                                  ;;;;;;;;;;;;;;
  7052                                  
  7053                                  ; 15/11/2024
  7054                                  cursortype:
  7055 000080CC ????                    	resw 1
  7056 000080CE ??                      flags:	resb 1
  7057                                  ; 06/11/2023
  7058                                  ac97_int_ln_reg:
  7059 000080CF ??                      	resb 1
  7060                                  filehandle:
  7061 000080D0 ????????                	resd 1
  7062                                  
  7063                                  ; 25/12/2024
  7064                                  ; 30/11/2024
  7065                                  ;argc:	resb 1	; argument count
  7066 000080D4 ????????                argv:	resd 1	; current argument (wav file) ptr
  7067 000080D8 ????????                argvf:	resd 1	; 1st argument (wav file) ptr
  7068 000080DC ????????                argvl:	resd 1	; last argument (wav file) ptr
  7069                                  
  7070                                  ; 30/05/2024
  7071                                  wav_file_name:
  7072 000080E0 <res 50h>               	resb 80	; wave file, path name (<= 80 bytes)
  7073 00008130 ????                    	resw 1	; 30/11/2024
  7074                                  
  7075                                  ; 08/11/2023
  7076                                  ; 07/11/2023
  7077                                  fbs_shift:
  7078 00008132 ??                      	resb 1
  7079                                  ; 07/12/2024
  7080 00008133 ??                      SRB:	resb 1
  7081                                  
  7082                                  ; 12/11/2016 - Erdogan Tan
  7083                                  bus_dev_fn:
  7084 00008134 ????????                	resd 1
  7085                                  dev_vendor:
  7086 00008138 ????????                	resd 1
  7087                                  
  7088                                  ; 17/02/2017
  7089                                  ; NAMBAR:  Native Audio Mixer Base Address Register
  7090                                  ;    (ICH, Audio D31:F5, PCI Config Space) Address offset: 10h-13h
  7091                                  ; NABMBAR: Native Audio Bus Mastering Base Address register
  7092                                  ;    (ICH, Audio D31:F5, PCI Config Space) Address offset: 14h-17h
  7093 0000813C ????                    NAMBAR:	resw 1	; BAR for mixer
  7094                                  NABMBAR:
  7095 0000813E ????                    	resw 1	; BAR for bus master regs
  7096                                  
  7097                                  ; 15/11/2024
  7098                                  loadfromwavfile:
  7099 00008140 ????????                	resd 1	; 'loadfromfile' or load+conversion proc address
  7100                                  loadsize:
  7101 00008144 ????????                	resd 1	; (.wav file) read count (bytes) per one time
  7102                                  buffersize:
  7103 00008148 ????????                	resd 1	; 16 bit samples (not bytes)
  7104                                  		
  7105                                  ; 14/11/2024
  7106                                  TotalTime:
  7107 0000814C ????????                	resd 1	; Total (WAV File) Playing Time in seconds
  7108                                  ProgressTime:
  7109 00008150 ????????                	resd 1
  7110 00008154 ????????                count:	resd 1	; byte count of one (wav file) read
  7111                                  LoadedDataBytes:
  7112 00008158 ????????                	resd 1	; total read/load count
  7113                                  
  7114                                  timerticks:
  7115 0000815C ????????                	resd 1	; (to eliminate excessive lookup of events in tuneloop)
  7116                                  		; (in order to get the emulator/qemu to run correctly)
  7117                                  ; 14/11/2024
  7118                                  bss_end:
  7119                                  
  7120                                  ; 02/12/2024
  7121 00008160 <res EA0h>              alignb 4096
  7122                                  
  7123                                  ; 07/12/2024
  7124                                  ; 26/11/2023
  7125                                  audio_buffer:
  7126 00009000 <res 10000h>            	resb 65536  ; DMA Buffer Size / 2	
  7127                                  
  7128                                  ; 01/12/2024
  7129                                  ; 26/11/2023
  7130                                  temp_buffer:
  7131 00019000 <res 10000h>            	resb 65536  ;  rb BUFFERSIZE
  7132                                  
  7133                                  ; 27/12/2024
  7134                                  alignb 4096
  7135 00029000 <res A00h>              g_buff:	resb 640*4
