     1                                  ; ****************************************************************************
     2                                  ; vgaplay.s - TRDOS 386 (TRDOS v2.0.9) WAV PLAYER - VESA VBE Video Mode 101h
     3                                  ; ----------------------------------------------------------------------------
     4                                  ; VGAPLAY.PRG ! AC'97 (ICH) .WAV PLAYER program by Erdogan TAN
     5                                  ;
     6                                  ; 25/12/2024				- play music from multiple wav files -
     7                                  ;
     8                                  ; [ Last Modification: 27/12/2024 ]
     9                                  ;
    10                                  ; Modified from DPLAYWAV.PRG .wav player program by Erdogan Tan, 25/12/2024
    11                                  ;	    and AC97PLAY.PRG, 18/12/2024	
    12                                  ;
    13                                  ; ****************************************************************************
    14                                  ; nasm vgaplay.s -l vgaplay.txt -o VGAPLAY.PRG -Z error.txt
    15                                  
    16                                  ; dplayvga.s (25/12/2024) - play music from single wav file -
    17                                  ; ac97play.s (18/12/2024) - play music from multiple wav files -
    18                                  
    19                                  ; 07/12/2024 - playwav9.s - interrupt (srb) + tuneloop version
    20                                  ; ------------------------------------------------------------
    21                                  ; INTERRUPT (SRB) + TUNELOOP version ; 24/11/2024 (PLAYWAV9.ASM)
    22                                  ;	(running in DOSBOX, VIRTUALBOX, QEMU is ok)
    23                                  ; Signal Response Byte = message/signal to user about an event/interrupt
    24                                  ;	    as requested (TuneLoop procedure continuously checks this SRB)
    25                                  ; (TRDOS 386 v2 feature is used here as very simple interrupt handler output)
    26                                  
    27                                  ; ------------------------------------------------------------
    28                                  
    29                                  ; 30/11/2024
    30                                  ; 20/08/2024 ; TRDOS 386 v2.0.9
    31                                  ; 29/04/2016
    32                                  _ver 	equ 0
    33                                  _exit 	equ 1
    34                                  _fork 	equ 2
    35                                  _read 	equ 3
    36                                  _write	equ 4
    37                                  _open	equ 5
    38                                  _close 	equ 6
    39                                  _wait 	equ 7
    40                                  _creat 	equ 8
    41                                  _link 	equ 9
    42                                  _unlink	equ 10
    43                                  _exec	equ 11
    44                                  _chdir	equ 12
    45                                  _time 	equ 13
    46                                  _mkdir 	equ 14
    47                                  _chmod	equ 15
    48                                  _chown	equ 16
    49                                  _break	equ 17
    50                                  _stat	equ 18
    51                                  _seek	equ 19
    52                                  _tell 	equ 20
    53                                  _mount	equ 21
    54                                  _umount	equ 22
    55                                  _setuid	equ 23
    56                                  _getuid	equ 24
    57                                  _stime	equ 25
    58                                  _quit	equ 26
    59                                  _intr	equ 27
    60                                  _fstat	equ 28
    61                                  _emt 	equ 29
    62                                  _mdate 	equ 30
    63                                  _video 	equ 31
    64                                  _audio	equ 32
    65                                  _timer	equ 33
    66                                  _sleep	equ 34
    67                                  _msg    equ 35
    68                                  _geterr	equ 36
    69                                  _fpsave	equ 37
    70                                  _pri	equ 38
    71                                  _rele	equ 39
    72                                  _fff	equ 40
    73                                  _fnf	equ 41
    74                                  _alloc	equ 42
    75                                  _dalloc equ 43
    76                                  _calbac equ 44
    77                                  _dma	equ 45
    78                                  _stdio  equ 46
    79                                  
    80                                  ; ------------------------------------------------------------
    81                                  
    82                                  %macro sys 1-4
    83                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)
    84                                      ; 03/09/2015
    85                                      ; 13/04/2015
    86                                      ; Retro UNIX 386 v1 system call.
    87                                      %if %0 >= 2
    88                                          mov ebx, %2
    89                                          %if %0 >= 3
    90                                              mov ecx, %3
    91                                              %if %0 = 4
    92                                                 mov edx, %4
    93                                              %endif
    94                                          %endif
    95                                      %endif
    96                                      mov eax, %1
    97                                      ;int 30h
    98                                      int 40h ; TRDOS 386 (TRDOS v2.0)
    99                                  %endmacro
   100                                  
   101                                  ; Retro UNIX 386 v1 system call format:
   102                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
   103                                  
   104                                  ; ------------------------------------------------------------
   105                                  
   106                                  ; player internal variables and other equates.
   107                                  BUFFERSIZE	equ 65536
   108                                  ENDOFFILE	equ 1		; flag for knowing end of file
   109                                  
   110                                  ; ------------------------------------------------------------
   111                                  
   112                                  [BITS 32] ; 32-bit intructions
   113                                  
   114                                  [ORG 0]
   115                                  
   116                                  START_CODE:
   117                                  	; Prints the Credits Text.
   118                                  	sys	_msg, Credits, 255, 0Bh
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000000 BB[3C2A0000]        <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000005 B9FF000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 0000000A BA0B000000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000000F B823000000          <1>  mov eax, %1
    97                              <1> 
    98 00000014 CD40                <1>  int 40h
   119                                  
   120                                  	; clear bss
   121 00000016 BF[10750000]            	mov	edi, bss_start
   122 0000001B B9B5020000              	mov	ecx, (bss_end - bss_start)/4
   123 00000020 31C0                    	xor	eax, eax
   124 00000022 F3AB                    	rep	stosd
   125                                  
   126                                  ; -------------------------------------------------------------
   127                                  
   128                                  	; 21/12/2024
   129                                  	; Detect (& Enable) AC'97 Audio Device
   130 00000024 E8A6080000              	call	DetectAC97
   131 00000029 731B                    	jnc	short ac97_hardware_ready
   132                                  
   133                                  	; 30/11/2024
   134                                  	; 30/05/2024
   135                                  _dev_not_ready:
   136                                  	; couldn't find the audio device!
   137                                  	sys	_msg, noDevMsg, 255, 0Fh
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000002B BB[DF2A0000]        <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000030 B9FF000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000035 BA0F000000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000003A B823000000          <1>  mov eax, %1
    97                              <1> 
    98 0000003F CD40                <1>  int 40h
   138 00000041 E999050000                      jmp     Exit
   139                                  
   140                                  ac97_hardware_ready:
   141 00000046 E8200A0000              	call	write_audio_dev_info
   142                                  
   143                                  ; -------------------------------------------------------------
   144                                  
   145                                  	; 21/12/2024
   146                                  	;;;
   147                                  	; Read (copy) 8x14 system fonts
   148 0000004B BE[B8410000]            	mov	esi, fontbuff1
   149                                  	sys	_video, 0C03h, 256, 0
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000050 BB030C0000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000055 B900010000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 0000005A BA00000000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000005F B81F000000          <1>  mov eax, %1
    97                              <1> 
    98 00000064 CD40                <1>  int 40h
   150                                  
   151                                  	; convert 8x14 fonts to 8x16 fonts
   152                                  	; by inserting 2 empty rows to each characters
   153                                  	;mov	esi, fontbuff1
   154 00000066 BF[B84F0000]            	mov	edi, fontbuff2
   155                                  	; 18/02/2021
   156                                  	;mov	cx, 256
   157                                  fontconvert:
   158 0000006B 51                      	push	ecx
   159 0000006C 66B90E00                	mov	cx, 14
   160 00000070 F3A4                    	rep	movsb
   161 00000072 28C0                    	sub	al, al
   162 00000074 AA                      	stosb
   163 00000075 AA                      	stosb
   164 00000076 59                      	pop	ecx
   165 00000077 E2F2                    	loop	fontconvert
   166                                  	;;;
   167                                  
   168                                  ; ------------------------------------------------------------- 
   169                                  
   170                                  	; 21/12/2024
   171                                  	; Set Video Mode to 101h ; 640x480, 256 colors
   172                                  	sys	_video, 08FFh, 101h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000079 BBFF080000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 0000007E B901010000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000083 B81F000000          <1>  mov eax, %1
    97                              <1> 
    98 00000088 CD40                <1>  int 40h
   173 0000008A 09C0                    	or	eax, eax
   174 0000008C 0F8448050000            	jz	terminate    ; nothing to do				
   175                                  	;jz	trdos386_err ; write (OS) error msg and exit
   176                                  
   177                                  set_vesa_mode_101h_ok:
   178                                  	; linear frame buffer access
   179                                  	sys	_video, 06FFh
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000092 BBFF060000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000097 B81F000000          <1>  mov eax, %1
    97                              <1> 
    98 0000009C CD40                <1>  int 40h
   180 0000009E 21C0                    	and	eax, eax
   181 000000A0 0F847F050000            	jz	error_exit ; set text mode and write err msg
   182 000000A6 A3[00750000]            	mov	[LFB_ADDR], eax
   183                                  
   184                                  ; -------------------------------------------------------------
   185                                  
   186                                  	; 25/12/2024
   187                                  	; 28/11/2024
   188                                  Player_InitalizePSP:
   189                                  	; 30/11/2024
   190                                  	; (TRDOS 386 -Retro UNIX 386- argument transfer method)
   191                                  	; (stack: argc,argv0addr,argv1addr,argv2addr ..
   192                                  	;			.. argv0text, argv1text ..) 
   193                                  	; ---- argc, argv[] ----
   194 000000AB 89E6                    	mov	esi, esp
   195 000000AD AD                      	lodsd
   196 000000AE 83F802                  	cmp	eax, 2 ; two arguments 
   197                                  		; (program file name & mod file name)
   198 000000B1 0F8231050000            	jb	pmsg_usage ; nothing to do
   199                                  	;mov	[argc], al
   200 000000B7 C1E002                  	shl	eax, 2 ; *4
   201 000000BA 01E0                    	add	eax, esp
   202                                  	; eax = last argument's address pointer
   203 000000BC A3[607F0000]            	mov	[argvl], eax ; last wav file (argument)
   204 000000C1 8935[587F0000]          	mov	[argv], esi ; current argument (PRG file name)
   205 000000C7 AD                      	lodsd	; skip program (PRG) file name
   206 000000C8 8935[5C7F0000]          	mov	[argvf], esi ; 1st wav file (argument)
   207                                  
   208                                  	; 25/12/2024
   209                                  Player_ParseParameters:
   210                                  	; 30/11/2024
   211                                  	; 29/11/2024
   212                                  	; 18/12/2024
   213                                  	;mov	edx, wav_file_name
   214                                  	
   215                                  	; 26/12/2024
   216                                  	;cmp	byte [IsInSplash], 0
   217                                  	;jna	short check_p_command
   218                                  
   219 000000CE BA[92410000]            	mov	edx, SplashFileName
   220 000000D3 EB3E                    	jmp	short _1
   221                                  
   222                                  	; 25/12/2024
   223                                  check_p_command:
   224                                  	; 07/12/2024
   225 000000D5 8B35[587F0000]          	mov	esi, [argv]
   226                                  	;
   227 000000DB 803D[207F0000]50          	cmp	byte [command], 'P'
   228 000000E2 7410                    	je	short Player_ParsePreviousParameter
   229                                      
   230                                  	; 07/12/2024
   231                                  	; 30/11/2024
   232                                  	;mov	esi, [argv] ; current argument (wav file) ptr
   233 000000E4 83C604                  	add	esi, 4
   234 000000E7 3B35[607F0000]          	cmp	esi, [argvl] ; last argument (wav file) ptr
   235 000000ED 7610                    	jna	short Player_ParseNextParameter
   236                                  jmp_Player_Quit:
   237 000000EF E92F050000              	jmp	Player_Quit
   238                                  
   239                                  Player_ParsePreviousParameter:
   240                                  	; 29/11/2024
   241                                  	;mov	byte [command], 0
   242                                  	; 30/11/2024
   243                                  	;mov	esi, [argv] ; 07/12/2024	
   244 000000F4 3B35[5C7F0000]          	cmp	esi, [argvf] ; first argument (wav file) ptr
   245 000000FA 7603                    	jna	short Player_ParseNextParameter
   246 000000FC 83EE04                  	sub	esi, 4
   247                                  Player_ParseNextParameter:
   248                                  	; 30/11/2024
   249 000000FF 8935[587F0000]          	mov	[argv], esi  ; set as current argument
   250                                  	; 01/12/2024
   251 00000105 8B36                    	mov	esi, [esi]
   252                                  	; 07/12/2024
   253                                  	;mov	ecx, esi
   254                                  	;mov	esi, [ecx]
   255                                  
   256                                  	; 29/11/2024
   257 00000107 E84D000000              	call	GetFileName
   258                                  	;jcxz	jmp_Player_Quit
   259 0000010C E3E1                    	jecxz	jmp_Player_Quit ; 30/11/2024
   260                                  
   261                                  	; 30/11/2024
   262                                  	; 28/11/2024
   263 0000010E BA[647F0000]            	mov	edx, wav_file_name
   264                                  	;;;
   265                                  _1:
   266                                  
   267                                  ; open the file
   268                                          ; open existing file
   269                                  	; 28/11/2024
   270                                  	;mov	edx, wav_file_name
   271 00000113 E809080000                      call	openFile ; no error? ok.
   272 00000118 0F8383000000                    jnc	getwavparms	; 14/11/2024
   273                                  
   274                                  	; 28/11/2024
   275 0000011E 803D[91410000]00        	cmp	byte [IsInSplash], 0
   276 00000125 0F8799000000            	ja	Player_SplashScreen
   277                                  
   278                                  	; 29/11/2024
   279 0000012B 803D[217F0000]00        	cmp	byte [filecount], 0
   280 00000132 77A1                    	ja	short check_p_command
   281                                  
   282                                  	; 25/12/2024
   283                                  	; 21/12/2024
   284 00000134 E889050000              	call	set_text_mode
   285                                  	; file not found!
   286                                  	; 30/11/2024
   287                                  	sys	_msg, noFileErrMsg, 255, 0Ch
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000139 BB[0A2B0000]        <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 0000013E B9FF000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000143 BA0C000000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000148 B823000000          <1>  mov eax, %1
    97                              <1> 
    98 0000014D CD40                <1>  int 40h
   288 0000014F E98B040000                      jmp     Exit
   289                                  
   290                                  _exit_:
   291 00000154 E981040000              	jmp	terminate
   292                                  
   293                                  ; -------------------------------------------------------------
   294                                  
   295                                  	; 26/12/2024
   296                                  	; 25/12/2024
   297                                  	; 30/11/2024 (32bit)
   298                                  	; 29/11/2024
   299                                  	; 30/05/2024
   300                                  GetFileName:
   301 00000159 BF[647F0000]            	mov	edi, wav_file_name 
   302                                  	; 30/11/2024
   303                                  	;mov	esi, [argv]
   304 0000015E 31C9                    	xor	ecx, ecx ; 0
   305                                  ScanName:
   306 00000160 AC                      	lodsb
   307                                  	;test	al, al
   308                                  	;jz	short a_4
   309                                  	; 29/11/2024
   310 00000161 3C0D                    	cmp	al, 0Dh
   311 00000163 7638                    	jna	short a_4
   312 00000165 3C20                    	cmp	al, 20h
   313 00000167 74F7                    	je	short ScanName	; scan start of name.
   314 00000169 AA                      	stosb
   315 0000016A B4FF                    	mov	ah, 0FFh
   316                                  	;;;
   317                                  	; 14/11/2024
   318                                  	; (max. path length = 64 bytes for MSDOS ?) (*)
   319                                  	;xor	ecx, ecx ; 0
   320                                  	;;;
   321                                  a_0:	
   322 0000016C FEC4                    	inc	ah
   323                                  a_1:
   324                                  	;;;
   325                                  	; 14/11/2024
   326 0000016E 41                      	inc	ecx
   327                                  	;;;
   328 0000016F AC                      	lodsb
   329 00000170 AA                      	stosb
   330 00000171 3C2E                    	cmp	al, '.'
   331 00000173 74F7                    	je	short a_0
   332                                  	; 29/11/2024
   333 00000175 3C20                    	cmp	al, 20h
   334                                  	;and	al, al
   335                                  	;jnz	short a_1
   336                                  	;;;
   337                                  	; 14/11/2024
   338 00000177 7613                    	jna	short a_3
   339 00000179 20E4                    	and	ah, ah
   340 0000017B 7406                    	jz	short a_2
   341 0000017D 3C2F                    	cmp	al, '/'	; 14/12/2024
   342 0000017F 7502                    	jne	short a_2
   343 00000181 B400                    	mov	ah, 0
   344                                  a_2:
   345 00000183 80F94B                  	cmp	cl, 75	; 64+8+'.'+3 -> offset 75 is the last chr
   346 00000186 72E6                    	jb	short a_1
   347                                  	; 29/11/2024
   348 00000188 29C9                    	sub	ecx, ecx
   349 0000018A EB11                    	jmp	short a_4
   350                                  a_3:
   351                                  	; 29/11/2024
   352 0000018C 4F                      	dec	edi
   353                                  	;;;
   354 0000018D 08E4                    	or	ah, ah		; if period NOT found,
   355 0000018F 750C                    	jnz	short a_4 	; then add a .WAV extension.
   356                                  SetExt:
   357                                  	; 29/11/2024
   358                                  	;dec	edi
   359 00000191 C7072E574156            	mov	dword [edi], '.WAV'
   360                                  				; ! 64+12 is DOS limit
   361                                  				; but writing +4 must not
   362                                  				; destroy the following data	 
   363                                  	;mov	byte [edi+4], 0	; so, 80 bytes path + 0 is possible here
   364                                  	; 29/11/2024
   365 00000197 83C104                  	add	ecx, 4
   366 0000019A 83C704                  	add	edi, 4
   367                                  a_4:	
   368 0000019D C60700                  	mov	byte [edi], 0
   369                                  	; 30/11/2024
   370 000001A0 C3                      	retn
   371                                  
   372                                  ; -------------------------------------------------------------
   373                                  
   374                                  getwavparms:
   375                                  	; 14/11/2024
   376 000001A1 E8AD070000                     	call    getWAVParameters
   377 000001A6 72AC                    	jc	short _exit_		; nothing to do
   378                                  
   379                                  	; 17/11/2024
   380 000001A8 B304                    	mov	bl, 4
   381 000001AA 2A1D[447F0000]          	sub	bl, byte [WAVE_BlockAlign]
   382                                  			; = 0 for 16 bit stereo
   383                                  			; = 2 for 8 bit stereo or 16 bit mono
   384                                  			; = 3 for 8 bit mono	
   385                                  
   386 000001B0 D0EB                    	shr	bl, 1	;  0 -->  0,  2 -->  1,  3 -->  1
   387                                  	; 15/11/2024
   388 000001B2 80D300                  	adc	bl, 0	; 3 --> 1 --> 2
   389 000001B5 881D[B67F0000]          	mov	byte [fbs_shift], bl	; = 2 mono and 8 bit
   390                                  					; = 0 stereo and 16 bit
   391                                  					; = 1 mono or 8 bit
   392                                  
   393                                  ; -------------------------------------------------------------
   394                                  
   395                                  	; 25/12/2024
   396 000001BB 803D[91410000]00        	cmp 	byte [IsInSplash], 0
   397                                  	;jna	short StartPlay
   398                                  	; 27/12/2024
   399 000001C2 7672                    	jna	short StartPlay@
   400                                  
   401                                  ; -------------------------------------------------------------
   402                                  
   403                                  	; 26/12/2024
   404                                  Player_SplashScreen:
   405                                  	; 21/12/2024
   406                                  	;mov	byte [tcolor], 15
   407                                  _0:
   408 000001C4 E89A040000              	call	drawsplashscreen
   409                                  
   410                                  	; 21/12/2024
   411                                  	;;;
   412                                  	; set wave volume led addresses
   413 000001C9 8B1D[00750000]          	mov	ebx, [LFB_ADDR]
   414 000001CF 81C300C70100            	add	ebx, (13*80*8*14)
   415 000001D5 BD50000000              	mov	ebp, 80
   416 000001DA BF[B85F0000]            	mov	edi, wleds_addr
   417                                  wleds_sa_1:
   418 000001DF B90F000000              	mov	ecx, 15
   419                                  wleds_sa_2:
   420 000001E4 B800230000              	mov	eax, 80*8*14 ; 640*14 pixels (next row)
   421 000001E9 F7E1                    	mul	ecx
   422 000001EB 01D8                    	add	eax, ebx
   423 000001ED AB                      	stosd
   424 000001EE E2F4                    	loop	wleds_sa_2
   425 000001F0 89D8                    	mov	eax, ebx
   426 000001F2 AB                      	stosd
   427 000001F3 83C308                  	add	ebx, 8
   428 000001F6 4D                      	dec	ebp
   429 000001F7 75E6                    	jnz	short wleds_sa_1
   430                                  	;;;
   431                                  
   432                                  	; 25/12/5024
   433                                  	; 28/11/2024 
   434 000001F9 833D[547F0000]FF        	cmp	dword [filehandle], -1
   435 00000200 7540                    	jne	short StartPlay
   436                                  
   437                                  	; 24/12/2024
   438                                  	; 07/12/2024
   439                                  	;;; wait for 3 seconds
   440                                  	sys	_time, 0 ; get time in unix epoch format
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000202 BB00000000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000207 B80D000000          <1>  mov eax, %1
    97                              <1> 
    98 0000020C CD40                <1>  int 40h
   441 0000020E 89C1                    	mov	ecx, eax
   442 00000210 83C103                  	add	ecx, 3
   443                                  _wait_3s:
   444 00000213 90                      	nop
   445                                  	sys	_time, 0
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000214 BB00000000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000219 B80D000000          <1>  mov eax, %1
    97                              <1> 
    98 0000021E CD40                <1>  int 40h
   446 00000220 39C8                    	cmp	eax, ecx
   447 00000222 72EF                    	jb	short _wait_3s
   448                                  	;;;
   449                                  
   450                                  	; 25/12/2024
   451                                  	; 28/11/2024
   452 00000224 C605[91410000]00        	mov	byte [IsInSplash], 0
   453                                  	;mov	edx, wav_file_name
   454                                  	; 30/11/2024
   455 0000022B 8B35[5C7F0000]          	mov	esi, [argvf]
   456                                  	; 29/11/2024
   457 00000231 E9C9FEFFFF              	jmp	Player_ParseNextParameter
   458                                  
   459                                  ; -------------------------------------------------------------
   460                                  
   461                                  	; 27/12/2024
   462                                  StartPlay@:
   463                                  
   464                                  	; 27/12/2024 (Detect & Enable AC97 hardware again)
   465                                  	; (this is needed after disabling audio system)
   466                                  	; Detect (BH=1) AC'97 (BL=2) Audio Device
   467                                          sys	_audio, 0102h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000236 BB02010000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000023B B820000000          <1>  mov eax, %1
    97                              <1> 
    98 00000240 CD40                <1>  int 40h
   468                                  	; ignore error at this stage
   469                                  	;jc	short ac97_not_detected
   470                                  
   471                                  ; -------------------------------------------------------------
   472                                  
   473                                  	; 25/12/2024
   474                                  StartPlay:
   475 00000242 FE05[217F0000]          	inc	byte [filecount]
   476 00000248 C605[207F0000]00        	mov	byte [command], 0
   477                                  
   478                                  ; -------------------------------------------------------------
   479                                  
   480                                  	; 07/12/2024 (playwav9.s)
   481                                  
   482                                  	; 18/11/2023 (ich_wav4.asm)
   483                                  	; 13/11/2023 (ich_wav3.asm)
   484                                  
   485 0000024F 803D[1E7F0000]01        	cmp	byte [VRA], 1
   486 00000256 7226                    	jb	short chk_sample_rate
   487                                  
   488                                  playwav_48_khz:
   489 00000258 C705[C47F0000]-         	mov	dword [loadfromwavfile], loadFromFile
   489 0000025E [9D090000]         
   490                                  	;mov	dword [loadsize], 0 ; 65536
   491                                  	;;;
   492                                  	; 17/11/2024
   493                                  	;mov	word [buffersize], 32768
   494                                  	;mov	ax, BUFFERSIZE/2 ; 32760
   495                                  	; 30/11/2024
   496                                  	;mov	eax, BUFFERSIZE/2 ; 32768
   497                                  	; 07/12/2024
   498 00000262 B800000100              	mov	eax, BUFFERSIZE ; 65536
   499 00000267 A3[CC7F0000]            	mov	[buffersize], eax	; 16 bit samples
   500                                  	; 07/12/2024
   501                                  	;shl	eax, 1			; bytes
   502 0000026C 8A0D[B67F0000]          	mov	cl, [fbs_shift]
   503 00000272 D3E8                    	shr	eax, cl 
   504                                  	;mov	[loadsize], ax ; 16380 or 32760 or 65520
   505 00000274 A3[C87F0000]            	mov	[loadsize], eax ; 16384 or 32768 or 65536
   506                                  	;;;
   507                                  	;jmp	PlayNow ; 30/05/2024
   508                                  	; 07/12/2024
   509 00000279 E95D020000              	jmp	Player_Template
   510                                  
   511                                  chk_sample_rate:
   512                                  	; set conversion parameters
   513                                  	; (for 8, 11.025, 16, 22.050, 24, 32 kHZ)
   514 0000027E 66A1[3C7F0000]          	mov	ax, [WAVE_SampleRate]
   515 00000284 663D80BB                	cmp	ax, 48000
   516 00000288 74CE                    	je	short playwav_48_khz
   517                                  chk_22khz:
   518 0000028A 663D2256                	cmp	ax, 22050
   519 0000028E 7545                    	jne	short chk_11khz
   520 00000290 803D[467F0000]08        	cmp	byte [WAVE_BitsPerSample], 8
   521 00000297 7615                    	jna	short chk_22khz_1
   522 00000299 BB[07190000]            	mov	ebx, load_22khz_stereo_16_bit
   523 0000029E 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1
   524 000002A5 751A                    	jne	short chk_22khz_2
   525 000002A7 BB[7A180000]            	mov	ebx, load_22khz_mono_16_bit
   526 000002AC EB13                    	jmp	short chk_22khz_2
   527                                  chk_22khz_1:
   528 000002AE BB[F3170000]            	mov	ebx, load_22khz_stereo_8_bit
   529 000002B3 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1
   530 000002BA 7505                    	jne	short chk_22khz_2
   531 000002BC BB[6A170000]            	mov	ebx, load_22khz_mono_8_bit
   532                                  chk_22khz_2:
   533 000002C1 B85A1D0000              	mov	eax, 7514  ; (442*17)
   534 000002C6 BA25000000              	mov	edx, 37
   535 000002CB B911000000              	mov	ecx, 17
   536 000002D0 E9D9010000              	jmp	set_sizes
   537                                  chk_11khz:
   538 000002D5 663D112B                	cmp	ax, 11025
   539 000002D9 7545                    	jne	short chk_44khz
   540 000002DB 803D[467F0000]08        	cmp	byte [WAVE_BitsPerSample], 8
   541 000002E2 7615                    	jna	short chk_11khz_1
   542 000002E4 BB[231B0000]            	mov	ebx, load_11khz_stereo_16_bit
   543 000002E9 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1
   544 000002F0 751A                    	jne	short chk_11khz_2
   545 000002F2 BB[AA1A0000]            	mov	ebx, load_11khz_mono_16_bit
   546 000002F7 EB13                    	jmp	short chk_11khz_2
   547                                  chk_11khz_1:
   548 000002F9 BB[301A0000]            	mov	ebx, load_11khz_stereo_8_bit
   549 000002FE 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1 
   550 00000305 7505                    	jne	short chk_11khz_2
   551 00000307 BB[B8190000]            	mov	ebx, load_11khz_mono_8_bit
   552                                  chk_11khz_2:
   553 0000030C B8AD0E0000              	mov	eax, 3757  ; (221*17)
   554 00000311 BA4A000000              	mov	edx, 74
   555 00000316 B911000000              	mov	ecx, 17
   556 0000031B E98E010000              	jmp	set_sizes
   557                                  chk_44khz:
   558 00000320 663D44AC                	cmp	ax, 44100
   559 00000324 7545                    	jne	short chk_16khz
   560 00000326 803D[467F0000]08        	cmp	byte [WAVE_BitsPerSample], 8
   561 0000032D 7615                    	jna	short chk_44khz_1
   562 0000032F BB[4A1D0000]            	mov	ebx, load_44khz_stereo_16_bit
   563 00000334 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1
   564 0000033B 751A                    	jne	short chk_44khz_2
   565 0000033D BB[D11C0000]            	mov	ebx, load_44khz_mono_16_bit
   566 00000342 EB13                    	jmp	short chk_44khz_2
   567                                  chk_44khz_1:
   568 00000344 BB[541C0000]            	mov	ebx, load_44khz_stereo_8_bit
   569 00000349 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1
   570 00000350 7505                    	jne	short chk_44khz_2
   571 00000352 BB[D81B0000]            	mov	ebx, load_44khz_mono_8_bit
   572                                  chk_44khz_2:
   573                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   574 00000357 B8D93A0000              	mov	eax, 15065 ; (655*23)
   575                                  	; 18/11/2023 ((file size + bss + stack) <= 64KB)
   576                                  	;mov	ax, 14076 ; (612*23)
   577                                  	; 17/11/2024
   578                                  	;mov	ax, 12650 ; (550*23)
   579 0000035C BA19000000              	mov	edx, 25
   580 00000361 B917000000              	mov	ecx, 23
   581 00000366 E943010000              	jmp	set_sizes
   582                                  chk_16khz:
   583 0000036B 663D803E                	cmp	ax, 16000
   584 0000036F 7545                    	jne	short chk_8khz
   585 00000371 803D[467F0000]08        	cmp	byte [WAVE_BitsPerSample], 8
   586 00000378 7615                    	jna	short chk_16khz_1
   587 0000037A BB[AF120000]            	mov	ebx, load_16khz_stereo_16_bit
   588 0000037F 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1 
   589 00000386 751A                    	jne	short chk_16khz_2
   590 00000388 BB[2E120000]            	mov	ebx, load_16khz_mono_16_bit
   591 0000038D EB13                    	jmp	short chk_16khz_2
   592                                  chk_16khz_1:
   593 0000038F BB[74110000]            	mov	ebx, load_16khz_stereo_8_bit
   594 00000394 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1
   595 0000039B 7505                    	jne	short chk_16khz_2
   596 0000039D BB[F5100000]            	mov	ebx, load_16khz_mono_8_bit
   597                                  chk_16khz_2:
   598                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   599 000003A2 B855150000              	mov	eax, 5461
   600                                  	; 17/11/2024
   601                                  	;mov	ax, 5460
   602 000003A7 BA03000000              	mov	edx, 3
   603 000003AC B901000000              	mov	ecx, 1
   604 000003B1 E9F8000000              	jmp	set_sizes
   605                                  chk_8khz:
   606 000003B6 663D401F                	cmp	ax, 8000
   607 000003BA 7545                    	jne	short chk_24khz
   608 000003BC 803D[467F0000]08        	cmp	byte [WAVE_BitsPerSample], 8
   609 000003C3 7615                    	jna	short chk_8khz_1
   610 000003C5 BB[AA0F0000]            	mov	ebx, load_8khz_stereo_16_bit
   611 000003CA 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1
   612 000003D1 751A                    	jne	short chk_8khz_2
   613 000003D3 BB[DA0E0000]            	mov	ebx, load_8khz_mono_16_bit
   614 000003D8 EB13                    	jmp	short chk_8khz_2
   615                                  chk_8khz_1:
   616 000003DA BB[AA0D0000]            	mov	ebx, load_8khz_stereo_8_bit
   617 000003DF 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1 
   618 000003E6 7505                    	jne	short chk_8khz_2
   619 000003E8 BB[C60C0000]            	mov	ebx, load_8khz_mono_8_bit
   620                                  chk_8khz_2:
   621 000003ED B8AA0A0000              	mov	eax, 2730
   622 000003F2 BA06000000              	mov	edx, 6
   623 000003F7 B901000000              	mov	ecx, 1
   624 000003FC E9AD000000              	jmp	set_sizes
   625                                  chk_24khz:
   626 00000401 663DC05D                	cmp	ax, 24000
   627 00000405 7561                    	jne	short chk_32khz
   628 00000407 803D[467F0000]08        	cmp	byte [WAVE_BitsPerSample], 8
   629 0000040E 7613                    	jna	short chk_24khz_1
   630 00000410 66BB[D914]              	mov	bx, load_24khz_stereo_16_bit
   631 00000414 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1 
   632 0000041B 7519                    	jne	short chk_24khz_2
   633 0000041D 66BB[7614]              	mov	bx, load_24khz_mono_16_bit
   634 00000421 EB13                    	jmp	short chk_24khz_2
   635                                  chk_24khz_1:
   636 00000423 BB[EC130000]            	mov	ebx, load_24khz_stereo_8_bit
   637 00000428 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1 
   638 0000042F 7505                    	jne	short chk_24khz_2
   639 00000431 BB[85130000]            	mov	ebx, load_24khz_mono_8_bit
   640                                  chk_24khz_2:
   641                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   642 00000436 B800200000              	mov	eax, 8192
   643                                  	; 17/11/2024
   644                                  	;mov	ax, 8190
   645 0000043B BA02000000              	mov	edx, 2
   646 00000440 B901000000              	mov	ecx, 1
   647 00000445 EB67                    	jmp	short set_sizes
   648                                  
   649                                  	; 07/12/2024
   650                                  vra_needed:
   651                                  	; 30/11/2024 (TRDOS 386, ax -> eax)
   652                                  	; 13/11/2023
   653 00000447 58                      	pop	eax ; discard return address to the caller
   654                                  	; 30/05/2024
   655                                  vra_err:
   656                                  	; 21/12/2024
   657 00000448 E875020000              	call	set_text_mode
   658                                  	; 30/11/2024
   659                                  	sys	_msg, msg_no_vra, 255, 0Fh
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000044D BB[742B0000]        <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000452 B9FF000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000457 BA0F000000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000045C B823000000          <1>  mov eax, %1
    97                              <1> 
    98 00000461 CD40                <1>  int 40h
   660 00000463 E977010000              	jmp	Exit
   661                                  
   662                                  chk_32khz:
   663 00000468 663D007D                	cmp	ax, 32000
   664 0000046C 75D9                    	jne	short vra_needed
   665 0000046E 803D[467F0000]08        	cmp	byte [WAVE_BitsPerSample], 8
   666 00000475 7615                    	jna	short chk_32khz_1
   667 00000477 BB[DA160000]            	mov	ebx, load_32khz_stereo_16_bit
   668 0000047C 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1
   669 00000483 751A                    	jne	short chk_32khz_2
   670 00000485 BB[70160000]            	mov	ebx, load_32khz_mono_16_bit
   671 0000048A EB13                    	jmp	short chk_32khz_2
   672                                  chk_32khz_1:
   673 0000048C BB[D3150000]            	mov	ebx, load_32khz_stereo_8_bit
   674 00000491 803D[3A7F0000]01        	cmp	byte [WAVE_NumChannels], 1
   675 00000498 7505                    	jne	short chk_32khz_2
   676 0000049A BB[60150000]            	mov	ebx, load_32khz_mono_8_bit
   677                                  chk_32khz_2:
   678                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   679 0000049F B8AA2A0000              	mov	eax, 10922
   680                                  	; 17/11/2024
   681                                  	;mov	ax, 10920
   682 000004A4 BA03000000              	mov	edx, 3
   683 000004A9 B902000000              	mov	ecx, 2
   684                                  	;jmp	short set_sizes
   685                                  set_sizes:
   686                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   687                                  	;;;
   688                                  	; 17/11/2024
   689 000004AE 51                      	push	ecx
   690 000004AF B102                    	mov	cl, 2
   691 000004B1 2A0D[B67F0000]          	sub	cl, [fbs_shift]
   692                                  		; = 2 for 16 bit stereo
   693                                  		; = 1 for 16 bit mono or 8 bit stereo
   694                                  		; = 0 for 8 bit mono
   695 000004B7 D3E0                    	shl	eax, cl
   696 000004B9 59                      	pop	ecx	
   697 000004BA A3[C87F0000]            	mov	[loadsize], eax	; (one) read count in bytes
   698                                  	;;;
   699 000004BF F7E2                    	mul	edx
   700 000004C1 83F901                  	cmp	ecx, 1
   701 000004C4 7402                    	je	short s_2
   702                                  s_1:
   703 000004C6 F7F1                    	div	ecx
   704                                  s_2:
   705                                  	;;;
   706                                  	; eax = byte count of (to be) converted samples 
   707                                  	
   708                                  	; 17/11/2024
   709                                  	;;;
   710 000004C8 8A0D[B67F0000]          	mov	cl, [fbs_shift]
   711                                  
   712 000004CE D3E0                    	shl	eax, cl
   713                                  		; *1 for 16 bit stereo
   714                                  		; *2 for 16 bit mono or 8 bit stereo
   715                                  		; *4 for for 8 bit mono
   716                                  	;;;
   717                                  
   718                                  	; eax = 16 bit stereo byte count (target buffer size)
   719                                  	
   720                                  	; 07/12/2024
   721                                  	;shr	eax, 1	; buffer size is 16 bit sample count
   722 000004D0 A3[CC7F0000]            	mov	[buffersize], eax ; buffer size in bytes
   723 000004D5 891D[C47F0000]          	mov	[loadfromwavfile], ebx
   724                                  
   725                                  ; -------------------------------------------------------------
   726                                  
   727                                  Player_Template:
   728                                  
   729                                  	; 26/12/2024
   730 000004DB 803D[91410000]00        	cmp 	byte [IsInSplash], 0
   731 000004E2 7611                    	jna	short Player_Template_@
   732                                  
   733                                  	; 24/12/2024 (setting for wave lighting points)
   734 000004E4 A1[00750000]            	mov	eax, [LFB_ADDR]
   735                                  	;add	eax, 228*640 ; wave graphics start (top) line/row
   736 000004E9 05009A0100              	add	eax, 164*640 ; 256 volume levels ; 24/12/2024
   737 000004EE A3[FC740000]            	mov	[graphstart], eax
   738                                  
   739                                  	; 26/12/2024
   740 000004F3 EB14                    	jmp	short PlayNow
   741                                  
   742                                  Player_Template_@:
   743                                  	; 21/12/2024
   744 000004F5 E859010000              	call	clearscreen
   745 000004FA E870010000              	call	drawplayingscreen
   746                                  
   747                                  	; 14/11/2024
   748 000004FF E8CE200000              	call	SetTotalTime
   749 00000504 E89B210000              	call	UpdateFileInfo
   750                                  
   751                                  ; -------------------------------------------------------------
   752                                  
   753                                  	; 21/12/2024 (VGA/LFB modifications)
   754                                  	; (Direct access/map to the LFB is already done here)
   755                                  	; ((this program is in VESA/VBE graphics mode here))
   756                                  PlayNow:
   757                                  	; 07/12/2024
   758                                  	sys	_audio, 0200h, [buffersize], audio_buffer
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000509 BB00020000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 0000050E 8B0D[CC7F0000]      <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000514 BA[00800000]        <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000519 B820000000          <1>  mov eax, %1
    97                              <1> 
    98 0000051E CD40                <1>  int 40h
   759 00000520 0F82FF000000            	jc	error_exit ; return to text mode and print err msg
   760                                  
   761                                  	; 01/06/2024
   762                                  	; Initialize Audio Device (bh = 3)
   763                                  	sys	_audio, 0301h, 0, audio_int_handler
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000526 BB01030000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 0000052B B900000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000530 BA[89090000]        <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000535 B820000000          <1>  mov eax, %1
    97                              <1> 
    98 0000053A CD40                <1>  int 40h
   764                                  	;jc	short error_exit
   765 0000053C 0F82C3000000            	jc	init_err ; return to text mode and print err msg
   766                                  
   767                                  	; 30/05/2024
   768                                  	; playwav4.asm
   769                                  ;_2:	; 24/12/2024
   770                                  	;call	check4keyboardstop	; flush keyboard buffer
   771                                  	;jc	short _2		; 07/11/2023
   772                                  
   773                                  	;;;
   774                                  	; 26/12/2024
   775                                  	; 14/11/2024
   776                                  	;mov	al, 3	; 0 = max, 31 = min
   777                                  	; 15/11/2024
   778 00000542 E86E030000              	call	SetMasterVolume
   779                                  
   780                                  	; 26/12/2024
   781 00000547 803D[91410000]00        	cmp 	byte [IsInSplash], 0
   782 0000054E 770A                    	ja	short _2
   783                                  
   784                                  	; 07/12/2024
   785                                  	;call	SetPCMOutVolume
   786 00000550 E8D0210000              	call	UpdateVolume
   787                                  	;;;
   788                                  	; 14/11/2024
   789 00000555 E85B220000              	call	UpdateProgressBar
   790                                  	;;;
   791                                  
   792                                  	; 26/12/2024
   793                                  _2:
   794                                  
   795                                  ; play the .wav file. Most of the good stuff is in here.
   796                                  	
   797                                  	; 05/12/2024
   798 0000055A E86A010000              	call    PlayWav
   799                                  
   800                                  ; close the .wav file and exit.
   801                                  
   802                                  	; 25/12/2024
   803 0000055F E8D8030000              	call	closeFile
   804                                  
   805                                  	; 25/12/2024
   806                                  	;;;
   807                                  	; reset file loading and EOF parameters
   808                                  	; 18/12/2024
   809 00000564 C705[D87F0000]0000-     	mov	dword [count], 0
   809 0000056C 0000               
   810 0000056E C705[DC7F0000]0000-     	mov	dword [LoadedDataBytes], 0
   810 00000576 0000               
   811 00000578 C605[527F0000]00        	mov	byte [flags], 0
   812 0000057F C605[107F0000]00        	mov	byte [stopped], 0
   813                                  	; 26/12/2024
   814 00000586 C605[1C7F0000]FF        	mov	byte [pbuf_s], 0FFh
   815                                  	;;;
   816                                  
   817                                  ;	cmp	byte [IsInSplash], 0
   818                                  ;	jna	short _6
   819                                  ;	mov	byte [IsInSplash], 0
   820                                  ;	mov	esi, [argvf]
   821                                  ;	jmp	Player_ParseNextParameter
   822                                  ;
   823                                  ;	; 29/11/2024
   824                                  ;_6:
   825                                  ;	cmp	byte [command], 'Q'
   826                                  ;	je	short _7	; 25/12/2024
   827                                  ;	jmp	check_p_command
   828                                  ;
   829                                  ;_7:
   830                                  	; 07/12/2024
   831                                  	;;;
   832                                  	; Stop Playing
   833                                  	;sys	_audio, 0700h
   834                                  	; Cancel callback service (for user)
   835                                  	sys	_audio, 0900h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000058D BB00090000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000592 B820000000          <1>  mov eax, %1
    97                              <1> 
    98 00000597 CD40                <1>  int 40h
   836                                  	; Deallocate Audio Buffer (for user)
   837                                  	sys	_audio, 0A00h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000599 BB000A0000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000059E B820000000          <1>  mov eax, %1
    97                              <1> 
    98 000005A3 CD40                <1>  int 40h
   838                                  	; Disable Audio Device
   839                                  	sys	_audio, 0C00h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 000005A5 BB000C0000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000005AA B820000000          <1>  mov eax, %1
    97                              <1> 
    98 000005AF CD40                <1>  int 40h
   840                                  	;;;
   841                                  
   842                                  	; 27/12/2024
   843                                  	; 26/12/2024
   844 000005B1 803D[91410000]00        	cmp	byte [IsInSplash], 0
   845 000005B8 7612                    	jna	short _6
   846 000005BA C605[91410000]00        	mov	byte [IsInSplash], 0
   847 000005C1 8B35[5C7F0000]          	mov	esi, [argvf]
   848 000005C7 E933FBFFFF              	jmp	Player_ParseNextParameter
   849                                  _6:
   850 000005CC 803D[207F0000]51        	cmp	byte [command], 'Q'
   851 000005D3 7405                    	je	short terminate
   852 000005D5 E9FBFAFFFF              	jmp	check_p_command
   853                                  
   854                                  terminate:
   855 000005DA E8E3000000              	call	set_text_mode
   856                                  Exit:
   857                                  	sys	_exit
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88                              <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000005DF B801000000          <1>  mov eax, %1
    97                              <1> 
    98 000005E4 CD40                <1>  int 40h
   858                                  halt:
   859 000005E6 EBFE                    	jmp	short halt
   860                                  
   861                                  ; -------------------------------------------------------------
   862                                  
   863                                  	; 30/05/2024
   864                                  pmsg_usage:
   865                                  	; 21/12/2024
   866 000005E8 E8D5000000              	call	set_text_mode
   867                                  	; 01/12/2024
   868                                  	sys	_msg, msg_usage, 255, 0Fh
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 000005ED BB[B02A0000]        <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 000005F2 B9FF000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 000005F7 BA0F000000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000005FC B823000000          <1>  mov eax, %1
    97                              <1> 
    98 00000601 CD40                <1>  int 40h
   869 00000603 EBDA                    	jmp	short Exit
   870                                  
   871                                  ; -------------------------------------------------------------
   872                                  
   873                                  	; 30/05/2024
   874                                  init_err:
   875                                  	; 21/12/2024
   876 00000605 E8B8000000              	call	set_text_mode
   877                                  	; 01/12/2024
   878                                  	sys	_msg, msg_init_err, 255, 0Fh
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000060A BB[432B0000]        <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 0000060F B9FF000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000614 BA0F000000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000619 B823000000          <1>  mov eax, %1
    97                              <1> 
    98 0000061E CD40                <1>  int 40h
   879 00000620 EBBD                    	jmp	short Exit
   880                                  
   881                                  ; -------------------------------------------------------------
   882                                  
   883                                  	; 02/12/2024
   884                                  Player_Quit@:
   885 00000622 58                      	pop	eax ; return addr (call PlayWav@)
   886                                  	
   887                                  	; 29/11/2024
   888                                  Player_Quit:
   889 00000623 EBB5                    	jmp	 short terminate
   890                                  
   891                                  
   892                                  ; -------------------------------------------------------------
   893                                  
   894                                  	; 07/12/2024
   895                                  error_exit:
   896                                  	; 21/12/2024
   897 00000625 E898000000              	call	set_text_mode
   898                                  trdos386_error:
   899                                  	sys	_msg, trdos386_err_msg, 255, 0Eh
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000062A BB[232B0000]        <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 0000062F B9FF000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000634 BA0E000000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000639 B823000000          <1>  mov eax, %1
    97                              <1> 
    98 0000063E CD40                <1>  int 40h
   900 00000640 EB9D                    	jmp	short Exit
   901                                  
   902                                  ; -------------------------------------------------------------
   903                                  
   904                                  	; 21/12/2024
   905                                  print_msg:
   906 00000642 B40E                    	mov	ah, 0Eh
   907 00000644 BB07000000              	mov	ebx, 7
   908                                  	;mov	bl, 7 ; char attribute & color
   909                                  p_next_chr:
   910 00000649 AC                      	lodsb
   911 0000064A 08C0                    	or	al, al
   912 0000064C 7404                    	jz	short p_retn ; retn
   913 0000064E CD31                    	int	31h
   914 00000650 EBF7                    	jmp	short p_next_chr
   915                                  p_retn:
   916 00000652 C3                      	retn
   917                                  
   918                                  ; -------------------------------------------------------------
   919                                  
   920                                  	; 21/12/2024
   921                                  clearscreen:
   922                                  	; fast clear
   923                                  	; 640*480, 256 colors
   924 00000653 8B3D[00750000]          	mov	edi, [LFB_ADDR]
   925 00000659 B9002C0100              	mov	ecx, (640*480*1)/4 ; 22/12/2024
   926 0000065E 31C0                    	xor	eax, eax
   927 00000660 F3AB                    	rep	stosd
   928 00000662 C3                      	retn
   929                                  
   930                                  ; -------------------------------------------------------------
   931                                  
   932                                  	; 26/12/2024
   933                                  	; 21/12/2024
   934                                  drawsplashscreen:
   935 00000663 BD[A02C0000]            	mov	ebp, SplashScreen
   936                                  	;;mov	dword [nextrow], 00100000h ; 8*16
   937                                  	;mov	dword [nextrow], 000E0000h ; 8*14
   938                                  	;mov	esi, 0 ; row 0, column 0
   939 00000668 BE00000200              	mov	esi, 00020000h ; row 2, column 0 ; top margin = 2
   940 0000066D EB0A                    	jmp	short p_d_x
   941                                  drawplayingscreen:
   942 0000066F BD[41370000]            	mov	ebp, PlayingScreen
   943                                  	;mov	dword [nextrow], 000E0000h ; 8*14
   944                                  	;mov	esi, 0 ; row 0, column 0
   945 00000674 BE00000700              	mov	esi, 00070000h ; row 7, column 0 ; top margin = 7
   946                                  p_d_x:
   947 00000679 C605[0C750000]50        	mov	byte [columns], 80
   948                                  p_d_x_n:
   949 00000680 31D2                    	xor	edx, edx
   950 00000682 8A5500                  	mov	dl, [ebp]
   951 00000685 20D2                    	and	dl, dl
   952 00000687 7438                    	jz	short p_d_x_ok
   953 00000689 C1E204                  	shl	edx, 4 ; * 16 (for 8x16 font)
   954                                  
   955 0000068C BF[B84F0000]            	mov	edi, fontbuff2 ; start of user font data
   956 00000691 01D7                    	add	edi, edx
   957                                  	
   958                                  	;; NOTE: Following system call writes fonts at
   959                                  	;; Std VGA video memory 0A0000h, BL bit 7 selects
   960                                  	;; screen width as 640 pixels (instead of 320 pixels)
   961                                  	;; so 8Fh is sub function 0Fh (write char)
   962                                  	;; with 640 pixels screen witdh. 
   963                                  	;; (Even if VESA VBE mode -LFB- is in use, QEMU and
   964                                  	;; a real computer with NVIDIA GEFORCE FX 550 uses
   965                                  	;; A0000h, so.. even if fonts are written at A0000h-B0000h
   966                                  	;; region, the text is appeared on screen
   967                                  	;; while LFB is at C0000000h or E0000000h.)
   968                                  
   969                                  	;sys	_video, 018Fh, [tcolor], 8001h
   970                                  			;; use STD VGA video memory
   971                                  			;; (0A0000h)
   972                                  	;sys	_video, 020Fh, [tcolor], 8001h ; 8x16 user font
   973                                  		 ; use LFB for current VBE mode
   974                                  		 ; for writing fonts on screen
   975                                  	; 26/12/2024
   976                                  	sys	_video, 020Fh, 0Fh, 8001h ; 8x16 user font
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000693 BB0F020000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000698 B90F000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 0000069D BA01800000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000006A2 B81F000000          <1>  mov eax, %1
    97                              <1> 
    98 000006A7 CD40                <1>  int 40h
   977                                  
   978 000006A9 45                      	inc	ebp
   979 000006AA 6683C608                	add	si, 8 ; next char pos
   980 000006AE FE0D[0C750000]          	dec	byte [columns]
   981 000006B4 75CA                    	jnz	short p_d_x_n	; next column
   982 000006B6 6631F6                  	xor	si, si
   983                                  	;;add	esi, 00100000h	; next row ; 8*16
   984                                  	;add	esi, [nextrow]
   985 000006B9 81C600000E00            	add	esi, 000E0000h	; next row ; 8*14
   986 000006BF EBB8                    	jmp	short p_d_x
   987                                  p_d_x_ok:
   988 000006C1 C3                      	retn
   989                                  
   990                                  ; -------------------------------------------------------------
   991                                  
   992                                  	; 21/12/2024
   993                                  set_text_mode:
   994 000006C2 30E4                    	xor    ah, ah
   995 000006C4 B003                    	mov    al, 3                        
   996                                   	;int   10h ; al = 03h text mode, int 10 video
   997 000006C6 CD31                    	int    31h ; TRDOS 386 - Video interrupt
   998 000006C8 C3                      	retn
   999                                  
  1000                                  ; -------------------------------------------------------------
  1001                                  
  1002                                  	; 07/12/2024 (playwav9.s)
  1003                                  	; 26/11/2023 (playwav8.s)
  1004                                  PlayWav:
  1005                                  	; 19/11/2024
  1006 000006C9 C605[137F0000]01        	mov	byte [wleds], 1
  1007                                  
  1008                                  	;;;
  1009                                  	; 09/12/2024
  1010 000006D0 B834290000              	mov	eax, 10548 ; (48000*10/182)*4
  1011 000006D5 803D[1E7F0000]00        	cmp	byte [VRA], 0
  1012 000006DC 7614                    	jna	short _3 ; 48kHZ (interpolation)
  1013                                  	;;;
  1014                                  	; 01/12/2024 (32bit)
  1015                                  	;movzx	eax, word [WAVE_SampleRate]
  1016                                  	; 09/12/2024
  1017 000006DE 66A1[3C7F0000]          	mov	ax, [WAVE_SampleRate]
  1018 000006E4 B90A000000              	mov	ecx, 10
  1019 000006E9 F7E1                    	mul	ecx
  1020 000006EB B1B6                    	mov	cl, 182
  1021 000006ED F7F1                    	div	ecx
  1022                                  	; ax = samples per 1/18.2 second
  1023                                  	;mov	cl, byte [WAVE_BlockAlign]
  1024                                  	; 09/12/2024 
  1025                                  	;mov	cl, 4 ; 16 bit, stereo
  1026                                  	;mul	ecx
  1027 000006EF C1E002                  	shl	eax, 2 ; * 4
  1028                                  _3:
  1029 000006F2 A3[147F0000]            	mov	[wleds_dif], eax ; buffer read differential (distance)
  1030                                  				; for wave volume leds update
  1031                                  				; (byte stream per 1/18.2 second)
  1032                                  	;;;
  1033                                  	; 24/12/2024
  1034 000006F7 3D000A0000              	cmp	eax, 640*4 ; 640 samples (for 640 wave light points)
  1035 000006FC 7305                    	jnb	short _4
  1036 000006FE B8000A0000              	mov	eax, 640*4	
  1037                                  _4:
  1038 00000703 A3[F8740000]            	mov	[wpoints_dif], eax
  1039                                  	;;;
  1040                                  
  1041                                  RePlayWav:
  1042                                  	; 07/12/2024
  1043 00000708 BF[00800000]            	mov	edi, audio_buffer
  1044 0000070D FF15[C47F0000]          	call	dword [loadfromwavfile]
  1045 00000713 0F820CFFFFFF            	jc	error_exit
  1046                                  
  1047 00000719 C605[1D7F0000]01        	mov	byte [half_buffer], 1 ; (DMA) Buffer 1
  1048                                  
  1049 00000720 A1[D87F0000]            	mov	eax, [count]
  1050 00000725 0105[DC7F0000]          	add	[LoadedDataBytes], eax
  1051                                  
  1052 0000072B F605[527F0000]01        	test    byte [flags], ENDOFFILE  ; end of file
  1053 00000732 752C                    	jnz	short _5 ; yes
  1054                                  			 ; bypass filling dma half buffer 2
  1055                                  
  1056                                  	; bh = 16 : update (current, first) dma half buffer
  1057                                  	; bl = 0  : then switch to the next (second) half buffer
  1058                                  	sys	_audio, 1000h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000734 BB00100000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000739 B820000000          <1>  mov eax, %1
    97                              <1> 
    98 0000073E CD40                <1>  int 40h
  1059                                  
  1060                                  	; 18/12/2024
  1061 00000740 C705[D87F0000]0000-     	mov	dword [count], 0
  1061 00000748 0000               
  1062                                  
  1063                                  	; 07/12/2024
  1064 0000074A BF[00800000]            	mov	edi, audio_buffer
  1065 0000074F FF15[C47F0000]          	call	dword [loadfromwavfile]
  1066                                  	;jc	error_exit
  1067                                  	
  1068 00000755 A1[D87F0000]            	mov	eax, [count]
  1069 0000075A 0105[DC7F0000]          	add	[LoadedDataBytes], eax
  1070                                  _5:
  1071                                  	; 07/12/2024
  1072 00000760 668B0D[3C7F0000]         	mov	cx, [WAVE_SampleRate]
  1073 00000767 B303                    	mov	bl, 3	; 16 bit, stereo
  1074 00000769 B704                    	mov	bh, 4	; start to play
  1075                                  	sys	_audio
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88                              <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000076B B820000000          <1>  mov eax, %1
    97                              <1> 
    98 00000770 CD40                <1>  int 40h
  1076                                  
  1077                                  	;;;
  1078                                  	; 26/12/2024
  1079                                  SplashLoop:
  1080 00000772 803D[91410000]00        	cmp	byte [IsInSplash], 0
  1081 00000779 7648                    	jna	short _10
  1082                                  	;; skip 1st signal without sound data loading
  1083                                  	;nop
  1084                                  	;nop
  1085                                  	;nop
  1086                                  	;cmp	byte [SRB], 0
  1087                                  	;jna	short SplashLoop
  1088                                  	;mov	byte [SRB], 0
  1089                                  _8:
  1090 0000077B F605[527F0000]01        	test    byte [flags], ENDOFFILE  ; end of file
  1091 00000782 0F85901B0000            	jnz	ac97_stop ; yes
  1092                                  
  1093                                  	; bh = 16 : update (current, first) dma half buffer
  1094                                  	; bl = 0  : then switch to the next (second) half buffer
  1095                                  	sys	_audio, 1000h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000788 BB00100000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000078D B820000000          <1>  mov eax, %1
    97                              <1> 
    98 00000792 CD40                <1>  int 40h
  1096                                  
  1097 00000794 803D[B77F0000]00        	cmp	byte [SRB], 0
  1098 0000079B 7619                    	jna	short _9
  1099 0000079D C605[B77F0000]00        	mov	byte [SRB], 0
  1100 000007A4 BF[00800000]            	mov	edi, audio_buffer
  1101 000007A9 FF15[C47F0000]          	call	dword [loadfromwavfile]
  1102 000007AF 7305                    	jnc	short _9
  1103                                  	; end of file
  1104                                  	;call	ac97_stop
  1105                                  	;retn
  1106 000007B1 E9621B0000              	jmp	ac97_stop
  1107                                  _9:
  1108 000007B6 E8981D0000              	call	check4keyboardstop
  1109 000007BB 0F82B1000000            	jc	_exitt_
  1110 000007C1 EBB8                    	jmp	short _8
  1111                                  _10:
  1112                                  	; 26/12/2024
  1113 000007C3 803D[1F7F0000]00        	cmp	byte [p_mode], 0
  1114 000007CA 7705                    	ja	short tuneLoop
  1115                                  	;;;
  1116                                  
  1117                                  ; -------------------------------------------
  1118                                  
  1119                                  	; 22/12/2024
  1120                                   	; prepare all leds as turned off
  1121 000007CC E8E6200000              	call	reset_wave_leds
  1122                                  
  1123                                  ; -------------------------------------------
  1124                                  
  1125                                  	; 07/12/2024 (playwav9.s)
  1126                                  	; 01/12/2024 (32bit)
  1127                                  	; 29/11/2024
  1128                                  tuneLoop:
  1129                                  	; 30/05/2024
  1130                                  	; 18/11/2023 (ich_wav4.asm)
  1131                                  	; 08/11/2023
  1132                                  	; 06/11/2023
  1133                                  tLWait:
  1134                                  	; 18/11/2024
  1135 000007D1 803D[107F0000]00        	cmp	byte [stopped], 0
  1136                                  	; 24/11/2024
  1137 000007D8 7641                    	jna	short tL1
  1138                                  
  1139                                  tLWait@:	; 21/11/2024
  1140                                  	;;;
  1141                                  	; 25/12/2024
  1142                                  	; 09/12/2024
  1143 000007DA 803D[107F0000]03        	cmp	byte [stopped], 3
  1144 000007E1 0F838B000000            	jnb	_exitt_
  1145                                  	;;;
  1146 000007E7 E8681B0000              	call	checkUpdateEvents
  1147 000007EC 0F8280000000            	jc	_exitt_
  1148                                  	;;;
  1149                                  	; 25/12/2024
  1150                                  	; 29/11/2024
  1151 000007F2 803D[207F0000]4E        	cmp	byte [command], 'N'
  1152 000007F9 7477                    	je	_exitt_
  1153 000007FB 803D[207F0000]50        	cmp	byte [command], 'P'
  1154 00000802 746E                    	je	_exitt_
  1155                                  	;;;
  1156 00000804 803D[117F0000]30        	cmp	byte [tLO], '0'
  1157 0000080B 74C4                    	je	short tLWait
  1158 0000080D E86A000000              	call	tLZ
  1159 00000812 C605[117F0000]30        	mov	byte [tLO], '0'
  1160 00000819 EBB6                    	jmp	short tLWait
  1161                                  tL1:
  1162                                  	; 27/11/2024
  1163                                  	; Check AC'97 interrupt status
  1164 0000081B 803D[B77F0000]00        	cmp	byte [SRB], 0
  1165 00000822 7709                    	ja	short tL3
  1166                                  tL2:
  1167 00000824 E82B1B0000              	call	checkUpdateEvents
  1168 00000829 7247                    	jc	_exitt_
  1169 0000082B EBA4                    	jmp	short tLWait
  1170                                  tL3:
  1171 0000082D 8035[1D7F0000]01        	xor	byte [half_buffer], 1
  1172                                  	; 07/12/2024
  1173 00000834 C605[B77F0000]00        	mov	byte [SRB], 0
  1174                                  
  1175                                  	; 07/12/2024
  1176 0000083B BF[00800000]            	mov	edi, audio_buffer
  1177                                  	;call	loadFromFile
  1178                                  	; 18/11/2023
  1179                                  	;call	word [loadfromwavfile]
  1180                                  	; 01/12/2024
  1181 00000840 FF15[C47F0000]          	call	dword [loadfromwavfile]
  1182 00000846 722A                    	jc	short _exitt_	; end of file
  1183                                  
  1184                                  	; 07/12/2024
  1185                                  	;;;;
  1186                                  	; bh = 16 : update (current, first) dma half buffer
  1187                                  	; bl = 0  : then switch to the other half buffer
  1188                                  	sys	_audio, 1000h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000848 BB00100000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000084D B820000000          <1>  mov eax, %1
    97                              <1> 
    98 00000852 CD40                <1>  int 40h
  1189                                  	;;;;
  1190                                  
  1191                                  	; 26/11/2024
  1192 00000854 A0[1D7F0000]            	mov	al, [half_buffer]
  1193 00000859 0431                    	add	al, '1'
  1194                                  	; 19/11/2024
  1195 0000085B A2[117F0000]            	mov	[tLO], al
  1196 00000860 E819000000              	call	tL0
  1197                                  
  1198                                  	; 24/11/2024
  1199                                  	; 14/11/2024
  1200                                  	;mov	ax, [count]
  1201                                  	;add	[LoadedDataBytes], ax
  1202                                  	;adc	word [LoadedDataBytes+2], 0
  1203                                  	; 01/12/2024
  1204 00000865 A1[D87F0000]            	mov	eax, [count]
  1205 0000086A 0105[DC7F0000]          	add	[LoadedDataBytes], eax
  1206                                  
  1207                                  	; 07/12/2024 (playwav9.s)
  1208                                  	; 27/11/2024 (playwav9.asm)
  1209 00000870 EBB2                    	jmp	short tL2
  1210                                  
  1211                                  _exitt_:
  1212                                  	; 07/12/2024
  1213                                  	; Stop Playing
  1214                                  	;mov	byte [stopped], 2
  1215                                  	;sys	_audio, 0700h
  1216 00000872 E8A11A0000              	call	ac97_stop
  1217                                  
  1218                                  	;;;
  1219                                  	; 14/11/2024
  1220 00000877 E8391F0000              	call	UpdateProgressBar
  1221                                  	;;;
  1222                                  
  1223                                  	; 18/11/2024
  1224                                  tLZ:
  1225                                  	; 30/05/2024
  1226 0000087C B030                    	mov	al, '0'
  1227                                  
  1228                                  	;add	al, '0'
  1229                                  	;call	tL0
  1230                                  	;
  1231                                  	;retn
  1232                                  	; 06/11/2023
  1233                                  	;jmp	short tL0
  1234                                  	;retn
  1235                                  
  1236                                  	; 06/11/2023
  1237                                  tL0:
  1238                                  	; 29/05/2024 (TRDOS 386)
  1239                                  	; 08/11/2023
  1240                                  	; 05/11/2023
  1241                                  	; 17/02/2017 - Buffer switch test (temporary)
  1242                                  	; 06/11/2023
  1243                                  	; al = buffer indicator ('1', '2' or '0' -stop- )
  1244                                  
  1245                                  	; 22/12/2024 (graphics mode modification)
  1246                                  	; (640*480, 256 colors)
  1247                                  	;;;
  1248                                  	;mov	ebp, 16
  1249 0000087E BD0E000000              	mov	ebp, 14
  1250 00000883 8B3D[00750000]          	mov	edi, [LFB_ADDR]
  1251 00000889 0FB6F0                  	movzx	esi, al
  1252 0000088C C1E604                  	shl	esi, 4 ; * 16
  1253 0000088F 81C6[B84F0000]          	add	esi, fontbuff2
  1254                                  tL0_1:
  1255 00000895 BA08000000              	mov	edx, 8 ; 8 pixels (8*16 pixel font)
  1256 0000089A 8A26                    	mov	ah, [esi]
  1257                                  tL0_2:
  1258 0000089C B00C                    	mov	al, 0Ch ; red
  1259 0000089E D0E4                    	shl	ah, 1
  1260 000008A0 7302                    	jnc	short tL0_3
  1261 000008A2 B00E                    	mov	al, 0Eh ; yellow
  1262                                  tL0_3:
  1263 000008A4 AA                      	stosb
  1264 000008A5 4A                      	dec	edx
  1265 000008A6 75F4                    	jnz	short tL0_2
  1266 000008A8 4D                      	dec	ebp
  1267 000008A9 7409                    	jz	short tL0_4
  1268 000008AB 81C778020000            	add	edi, 640-8 ; next line
  1269 000008B1 46                      	inc	esi
  1270 000008B2 EBE1                    	jmp	short tL0_1
  1271                                  tL0_4:
  1272                                  	;;;
  1273 000008B4 C3                      	retn
  1274                                  
  1275                                  ; -------------------------------------------
  1276                                  
  1277                                  	; 26/12/2024
  1278                                  	; 07/12/2024
  1279                                  SetMasterVolume:
  1280 000008B5 A0[B6250000]            	mov	al, [volume]
  1281                                  	; 26/12/2024
  1282                                  	;mov	[volume], al  ; max = 0, min = 31
  1283                                  
  1284 000008BA B41F                    	mov	ah, 31
  1285 000008BC 28C4                    	sub	ah, al
  1286 000008BE 88E0                    	mov	al, ah
  1287                                  
  1288                                  	; Set Master Volume Level (BL=0 or 80h)
  1289                                  	; 	for next playing (BL>=80h)
  1290                                  	;sys	_audio, 0B80h, eax
  1291                                  	sys	_audio, 0B00h, eax
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 000008C0 BB000B0000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 000008C5 89C1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000008C7 B820000000          <1>  mov eax, %1
    97                              <1> 
    98 000008CC CD40                <1>  int 40h
  1292                                  	
  1293                                  setvolume_ok:
  1294                                  ac97_not_detected:
  1295 000008CE C3                      	retn
  1296                                  
  1297                                  ; -------------------------------------------
  1298                                  
  1299                                  	; 07/12/2024 (playwav9.s)
  1300                                  DetectAC97:
  1301                                  DetectICH:
  1302                                  	; 25/11/2023 (playwav8.s)
  1303                                  	; Detect (BH=1) AC'97 (BL=2) Audio Device
  1304                                          sys	_audio, 0102h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 000008CF BB02010000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000008D4 B820000000          <1>  mov eax, %1
    97                              <1> 
    98 000008D9 CD40                <1>  int 40h
  1305                                  	;jnc	short d_ac97_@
  1306                                  	;retn
  1307 000008DB 72F1                    	jc	short ac97_not_detected
  1308                                  d_ac97_@:
  1309                                  	; 07/12/2024 (playwav9.s)
  1310                                  	; 06/06/2017
  1311                                  	sys	_audio, 0E00h ; get audio controller info
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 000008DD BB000E0000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000008E2 B820000000          <1>  mov eax, %1
    97                              <1> 
    98 000008E7 CD40                <1>  int 40h
  1312 000008E9 0F8236FDFFFF            	jc	error_exit ; 25/11/2023
  1313                                  
  1314                                  	;cmp	ah, 2 ; ICH ? (Intel AC'97 Audio Controller)
  1315                                  	;jne	_dev_not_ready	
  1316                                  
  1317                                  	; EAX = IRQ Number in AL
  1318                                  	;	Audio Device Number in AH 
  1319                                  	; EBX = DEV/VENDOR ID
  1320                                  	;       (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV)
  1321                                  	; ECX = BUS/DEV/FN 
  1322                                  	;       (00000000BBBBBBBBDDDDDFFF00000000)
  1323                                  	; EDX = NABMBAR/NAMBAR (for AC97)
  1324                                  	;      (Low word, DX = NAMBAR address)
  1325                                  	; EDX = Base IO Addr (DX) for SB16 & VT8233
  1326                                  
  1327 000008EF 891D[BC7F0000]          	mov	[dev_vendor], ebx
  1328 000008F5 890D[B87F0000]          	mov	[bus_dev_fn], ecx
  1329                                  
  1330 000008FB 668915[C07F0000]                mov     [NAMBAR], dx			; save audio mixer base addr
  1331                                  	;shr	edx, 16
  1332                                          ;mov    [NABMBAR], dx			; save bus master base addr
  1333 00000902 8915[C07F0000]          	mov	[NAMBAR], edx
  1334                                  
  1335 00000908 A2[537F0000]            	mov	[ac97_int_ln_reg], al
  1336                                  
  1337                                  	; 07/12/2024
  1338                                  	; 01/06/2024
  1339                                  	; 25/11/2023
  1340                                  	; Get AC'97 Codec info
  1341                                  	; (Function 14, sub function 1)
  1342                                  	sys	_audio, 0E01h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000090D BB010E0000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000912 B820000000          <1>  mov eax, %1
    97                              <1> 
    98 00000917 CD40                <1>  int 40h
  1343                                  	; Save Variable Rate Audio support bit
  1344 00000919 2401                    	and	al, 1
  1345 0000091B A2[1E7F0000]            	mov	[VRA], al
  1346                                  
  1347                                  	;clc
  1348                                  
  1349 00000920 C3                      	retn
  1350                                  
  1351                                  ; ----------------------------------
  1352                                  	
  1353                                  	; 26/12/2024
  1354                                  	; 07/12/2024
  1355                                  	; 01/12/2024
  1356                                  	; 14/11/2024
  1357                                  	; INPUT: ds:dx = file name address
  1358                                  	; OUTPUT: [filehandle] = ; -1 = not open
  1359                                  openFile:
  1360                                  	; 26/12/2024
  1361                                  	; 01/12/2024
  1362                                  	sys	_open, edx, 0
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000921 89D3                <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000923 B900000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000928 B805000000          <1>  mov eax, %1
    97                              <1> 
    98 0000092D CD40                <1>  int 40h
  1363                                  	; 07/12/2024
  1364                                  	;sys	_open, wav_file_name, 0
  1365 0000092F 7305                    	jnc	short _of1
  1366                                  
  1367 00000931 B8FFFFFFFF              	mov	eax, -1
  1368                                  	; cf = 1 -> not found or access error
  1369                                  _of1:
  1370 00000936 A3[547F0000]            	mov	[filehandle], eax
  1371 0000093B C3                      	retn
  1372                                  
  1373                                  ; ----------------------------------
  1374                                  
  1375                                  ; close the currently open file
  1376                                  
  1377                                  	; 01/12/2024
  1378                                  	; 14/11/2024
  1379                                  	; INPUT: [filehandle] ; -1 = not open
  1380                                  	; OUTPUT: none
  1381                                  closeFile:
  1382 0000093C 833D[547F0000]FF        	cmp	dword [filehandle], -1
  1383 00000943 740D                    	jz	short _cf1
  1384                                  	; 01/12/2024
  1385                                  	sys	_close, [filehandle]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000945 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000094B B806000000          <1>  mov eax, %1
    97                              <1> 
    98 00000950 CD40                <1>  int 40h
  1386                                  	;mov 	dword [filehandle], -1
  1387                                  _cf1:
  1388 00000952 C3                      	retn
  1389                                  
  1390                                  ; ----------------------------------
  1391                                  
  1392                                  	; 01/12/2024
  1393                                  	; 14/11/2024 - Erdogan Tan
  1394                                  getWAVParameters:
  1395                                  ; reads WAV file header(s) (44 bytes) from the .wav file.
  1396                                  ; entry: none - assumes file is already open
  1397                                  ; exit: ax = sample rate (11025, 22050, 44100, 48000)
  1398                                  ;	cx = number of channels (mono=1, stereo=2)
  1399                                  ;	dx = bits per sample (8, 16)
  1400                                  ;	bx = number of bytes per sample (1 to 4)
  1401                                  
  1402                                          ;mov	dx, WAVFILEHEADERbuff
  1403                                  	;mov	bx, [filehandle]
  1404                                          ;mov	cx, 44			; 44 bytes
  1405                                  	;mov	ah, 3Fh
  1406                                          ;int	21h
  1407                                  	;jc	short gwavp_retn
  1408                                  	; 01/12/2024 (TRDOS 386)
  1409                                  	sys	_read, [filehandle], WAVFILEHEADERbuff, 44
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000953 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000959 B9[247F0000]        <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 0000095E BA2C000000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000963 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00000968 CD40                <1>  int 40h
  1410 0000096A 721C                    	jc	short gwavp_retn
  1411                                  
  1412 0000096C 83F82C                  	cmp	eax, 44
  1413 0000096F 7217                    	jb	short gwavp_retn
  1414                                  
  1415 00000971 813D[2C7F0000]5741-     	cmp	dword [RIFF_Format], 'WAVE'
  1415 00000979 5645               
  1416 0000097B 750A                    	jne	short gwavp_stc_retn
  1417                                  
  1418 0000097D 66833D[387F0000]01      	cmp	word [WAVE_AudioFormat], 1 ; Offset 20, must be 1 (= PCM)
  1419                                  	;jne	short gwavp_stc_retn
  1420 00000985 7401                    	je	short gwavp_retn ; 15/11/2024
  1421                                  
  1422                                  	; 15/11/2024
  1423                                  	;mov	cx, [WAVE_NumChannels]	; return num of channels in CX
  1424                                          ;mov    ax, [WAVE_SampleRate]	; return sample rate in AX
  1425                                  	;mov	dx, [WAVE_BitsPerSample] 
  1426                                  					; return bits per sample value in DX
  1427                                  	;mov	bx, [WAVE_BlockAlign]	; return bytes per sample in BX
  1428                                  ;gwavp_retn:
  1429                                          ;retn
  1430                                  
  1431                                  gwavp_stc_retn:
  1432 00000987 F9                      	stc
  1433                                  gwavp_retn:
  1434 00000988 C3                      	retn
  1435                                  
  1436                                  ; --------------------------------------------------------
  1437                                  ; 07/12/2024
  1438                                  ; --------------------------------------------------------
  1439                                  ; ref: playwav8.s (04/06/2024)
  1440                                  
  1441                                  audio_int_handler:
  1442                                  	; 18/08/2020 (14/10/2020, 'wavplay2.s')
  1443                                  
  1444                                  	; 07/12/2024
  1445                                  	;mov	al, [stopped]
  1446                                  	;cmp	al, 2
  1447                                  	;je	short _callback_retn
  1448                                  
  1449                                  	; 18/08/2020
  1450                                  	;mov	byte [SRB], 1
  1451                                  	; 07/12/2024
  1452 00000989 FE05[B77F0000]          	inc	byte [SRB]
  1453                                  
  1454                                  ;_callback_retn:
  1455                                  	sys	_rele ; return from callback service 
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88                              <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000098F B827000000          <1>  mov eax, %1
    97                              <1> 
    98 00000994 CD40                <1>  int 40h
  1456                                  	; we must not come here !
  1457                                  	sys	_exit
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88                              <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000996 B801000000          <1>  mov eax, %1
    97                              <1> 
    98 0000099B CD40                <1>  int 40h
  1458                                  
  1459                                  ; --------------------------------------------------------
  1460                                  ; 07/12/2024
  1461                                  ; --------------------------------------------------------
  1462                                  
  1463                                  ; /////
  1464                                  	; 14/12/2024
  1465                                  	; 07/12/2024
  1466                                  	; 01/12/2024
  1467                                  	; 30/05/2024 (ich_wav4.asm, 19/05/2024)
  1468                                  loadFromFile:
  1469                                  	; 07/11/2023
  1470                                  
  1471 0000099D F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1472                                  					; last of the file?
  1473 000009A4 7402                    	jz	short lff_0		; no
  1474 000009A6 F9                      	stc
  1475 000009A7 C3                      	retn
  1476                                  
  1477                                  lff_0:
  1478                                  	; 07/12/2024
  1479                                  	; 26/11/2023 (playwav8.s)
  1480                                  	;mov	edi, audio_buffer
  1481                                  
  1482                                  	; 01/12/2024 (TRDOS 386)
  1483                                  	; edi = audio buffer address
  1484                                  
  1485                                  	; 14/12/2024
  1486                                  	; 01/12/2024
  1487                                  	; 17/11/2024
  1488                                  	;mov	ebx, [filehandle]
  1489                                  	; 02/12/2024
  1490                                  	;mov	edx, [loadsize] 
  1491                                  
  1492                                  	; 17/11/2024
  1493 000009A8 803D[B67F0000]00        	cmp	byte [fbs_shift], 0
  1494 000009AF 7677                    	jna	short lff_1 ; stereo, 16 bit
  1495                                  
  1496                                  lff_2:
  1497                                  	; 01/12/2024
  1498 000009B1 BE[00800100]            	mov	esi, temp_buffer 
  1499                                  	; 14/12/2024
  1500                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 000009B6 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 000009BC 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 000009BE 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000009C4 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 000009C9 CD40                <1>  int 40h
  1501 000009CB 0F8289000000            	jc	lff_4 ; error !
  1502                                  
  1503                                  	; 01/12/2024
  1504                                  	; 14/11/2024
  1505 000009D1 A3[D87F0000]            	mov	[count], eax
  1506                                  
  1507                                  	; 01/12/2024
  1508 000009D6 21C0                    	and	eax, eax
  1509                                  	;jz	short lff_3
  1510                                  	; 14/12/2024
  1511 000009D8 0F8485000000            	jz	lff_10
  1512                                  
  1513 000009DE 8A1D[B67F0000]          	mov	bl, [fbs_shift]
  1514                                  
  1515                                  	; 14/12/2024
  1516 000009E4 89FA                    	mov	edx, edi ; audio buffer start address
  1517                                  
  1518                                  	; 01/12/2024
  1519 000009E6 89C1                    	mov	ecx, eax
  1520 000009E8 803D[467F0000]08        	cmp	byte [WAVE_BitsPerSample], 8 ; bits per sample (8 or 16)
  1521 000009EF 751E                    	jne	short lff_7 ; 16 bit samples
  1522                                  	; 8 bit samples
  1523 000009F1 FECB                    	dec	bl  ; shift count, 1 = stereo, 2 = mono
  1524 000009F3 740E                    	jz	short lff_6 ; 8 bit, stereo
  1525                                  	; 01/12/2024 (32bit registers)
  1526                                  lff_5:
  1527                                  	; mono & 8 bit
  1528 000009F5 AC                      	lodsb
  1529 000009F6 2C80                    	sub	al, 80h ; 08/11/2023
  1530 000009F8 C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
  1531 000009FB 66AB                    	stosw	; left channel
  1532 000009FD 66AB                    	stosw	; right channel
  1533 000009FF E2F4                    	loop	lff_5
  1534 00000A01 EB16                    	jmp	short lff_9
  1535                                  lff_6:
  1536                                  	; stereo & 8 bit
  1537 00000A03 AC                      	lodsb
  1538 00000A04 2C80                    	sub	al, 80h ; 08/11/2023
  1539 00000A06 C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
  1540 00000A09 66AB                    	stosw
  1541 00000A0B E2F6                    	loop	lff_6
  1542 00000A0D EB0A                    	jmp	short lff_9
  1543                                  lff_7:
  1544 00000A0F D1E9                    	shr	ecx, 1 ; word count
  1545                                  lff_8:
  1546 00000A11 66AD                    	lodsw
  1547 00000A13 66AB                    	stosw	; left channel
  1548 00000A15 66AB                    	stosw	; right channel
  1549 00000A17 E2F8                    	loop	lff_8
  1550                                  lff_9:
  1551                                  	; 14/12/2024
  1552 00000A19 89F8                    	mov	eax, edi
  1553 00000A1B 8B0D[CC7F0000]          	mov	ecx, [buffersize] 
  1554 00000A21 01D1                    	add	ecx, edx ; + buffer start address
  1555 00000A23 39C8                    	cmp	eax, ecx	
  1556 00000A25 7225                    	jb	short lff_3
  1557 00000A27 C3                      	retn
  1558                                  	
  1559                                  lff_1:  
  1560                                  	; 07/12/2024
  1561                                  	; 01/12/2024
  1562                                  	;sys 	_read, [filehandle], esi, [loadsize] ; edx
  1563                                  	; 14/12/2024
  1564                                  	sys 	_read, [filehandle], edi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000A28 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000A2E 89F9                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000A30 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000A36 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00000A3B CD40                <1>  int 40h
  1565                                  	; 07/11/2023
  1566 00000A3D 721B                    	jc	short lff_4 ; error !
  1567                                  
  1568                                  	; 01/12/2024
  1569                                  	; 14/11/2024
  1570 00000A3F A3[D87F0000]            	mov	[count], eax
  1571                                  
  1572                                  	; 02/12/2024
  1573 00000A44 39D0                    	cmp	eax, edx ; cmp eax, [loadsize]	
  1574 00000A46 7411                    	je	short endLFF
  1575                                  	; edi = buffer (start) address
  1576 00000A48 01C7                    	add	edi, eax
  1577 00000A4A 89D1                    	mov	ecx, edx
  1578                                  lff_3:
  1579                                  	;call	padfill			; blank pad the remainder
  1580                                  	; 21/12/2024
  1581                                  padfill:
  1582                                  	; 14/12/2024
  1583                                  	; 01/12/2024 (TRDOS 386, 32bit registers)
  1584                                  	; 17/11/2024
  1585                                  	;   di = offset (to be filled with ZEROs)
  1586                                  	;   bp = buffer segment
  1587                                  	;   ax = di = number of bytes loaded
  1588                                  	;   cx = buffer size (> loaded bytes)	
  1589                                  	; 07/11/2023
  1590                                  	; 06/11/2023
  1591                                  	; 17/02/2017
  1592                                  	; 01/12/2024
  1593 00000A4C 29C1                    	sub	ecx, eax
  1594                                  	; 01/12/2024
  1595                                  	; 25/11/2024
  1596 00000A4E 31C0                    	xor	eax, eax
  1597                                  	; 14/12/2024
  1598 00000A50 F3AA                    	rep	stosb
  1599                                  	; 21/12/2024
  1600                                  	;retn
  1601                                  	; ----------
  1602                                          ;clc				; don't exit with CY yet.
  1603 00000A52 800D[527F0000]01                or	byte [flags], ENDOFFILE	; end of file flag
  1604                                  endLFF:
  1605 00000A59 C3                              retn
  1606                                  lff_4:
  1607                                  	; 08/11/2023
  1608 00000A5A B021                    	mov	al, '!'  ; error
  1609 00000A5C E81DFEFFFF              	call	tL0
  1610                                  
  1611                                  	; 01/12/2024
  1612 00000A61 31C0                    	xor	eax, eax
  1613                                  lff_10:
  1614                                  	; 14/12/2024
  1615 00000A63 8B0D[CC7F0000]          	mov	ecx, [buffersize]
  1616 00000A69 EBE1                    	jmp	short lff_3
  1617                                  
  1618                                  ; /////
  1619                                  
  1620                                  ; --------------------------------------------------------
  1621                                  ; --------------------------------------------------------
  1622                                  	
  1623                                  write_audio_dev_info:
  1624                                  	; 30/05/2024
  1625                                       	;sys_msg msgAudioCardInfo, 0Fh
  1626                                  	; 01/12/2024
  1627                                  	sys 	_msg, msgAudioCardInfo, 255, 0Fh
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000A6B BB[872A0000]        <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000A70 B9FF000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000A75 BA0F000000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000A7A B823000000          <1>  mov eax, %1
    97                              <1> 
    98 00000A7F CD40                <1>  int 40h
  1628 00000A81 C3                      	retn
  1629                                  
  1630                                  ; --------------------------------------------------------
  1631                                  
  1632                                  write_ac97_pci_dev_info:
  1633                                  	; 19/11/2024
  1634                                  	; 30/05/2024
  1635                                  	; 06/06/2017
  1636                                  	; 03/06/2017
  1637                                  	; BUS/DEV/FN
  1638                                  	;	00000000BBBBBBBBDDDDDFFF00000000
  1639                                  	; DEV/VENDOR
  1640                                  	;	DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV
  1641                                  
  1642 00000A82 A1[BC7F0000]            	mov	eax, [dev_vendor]
  1643 00000A87 31DB                    	xor	ebx, ebx
  1644 00000A89 88C3                    	mov	bl, al
  1645 00000A8B 88DA                    	mov	dl, bl
  1646 00000A8D 80E30F                  	and	bl, 0Fh
  1647 00000A90 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1648 00000A96 A2[F42B0000]            	mov	[msgVendorId+3], al
  1649 00000A9B 88D3                    	mov	bl, dl
  1650 00000A9D C0EB04                  	shr	bl, 4
  1651 00000AA0 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1652 00000AA6 A2[F32B0000]            	mov	[msgVendorId+2], al
  1653 00000AAB 88E3                    	mov	bl, ah
  1654 00000AAD 88DA                    	mov	dl, bl
  1655 00000AAF 80E30F                  	and	bl, 0Fh
  1656 00000AB2 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1657 00000AB8 A2[F22B0000]            	mov	[msgVendorId+1], al
  1658 00000ABD 88D3                    	mov	bl, dl
  1659 00000ABF C0EB04                  	shr	bl, 4
  1660 00000AC2 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1661 00000AC8 A2[F12B0000]            	mov	[msgVendorId], al
  1662 00000ACD C1E810                  	shr	eax, 16
  1663 00000AD0 88C3                    	mov	bl, al
  1664 00000AD2 88DA                    	mov	dl, bl
  1665 00000AD4 80E30F                  	and	bl, 0Fh
  1666 00000AD7 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1667 00000ADD A2[052C0000]            	mov	[msgDevId+3], al
  1668 00000AE2 88D3                    	mov	bl, dl
  1669 00000AE4 C0EB04                  	shr	bl, 4
  1670 00000AE7 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1671 00000AED A2[042C0000]            	mov	[msgDevId+2], al
  1672 00000AF2 88E3                    	mov	bl, ah
  1673 00000AF4 88DA                    	mov	dl, bl
  1674 00000AF6 80E30F                  	and	bl, 0Fh
  1675 00000AF9 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1676 00000AFF A2[032C0000]            	mov	[msgDevId+1], al
  1677 00000B04 88D3                    	mov	bl, dl
  1678 00000B06 C0EB04                  	shr	bl, 4
  1679 00000B09 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1680 00000B0F A2[022C0000]            	mov	[msgDevId], al
  1681                                  
  1682 00000B14 A1[B87F0000]            	mov	eax, [bus_dev_fn]
  1683 00000B19 C1E808                  	shr	eax, 8
  1684 00000B1C 88C3                    	mov	bl, al
  1685 00000B1E 88DA                    	mov	dl, bl
  1686 00000B20 80E307                  	and	bl, 7 ; bit 0,1,2
  1687 00000B23 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1688 00000B29 A2[2A2C0000]            	mov	[msgFncNo+1], al
  1689 00000B2E 88D3                    	mov	bl, dl
  1690 00000B30 C0EB03                  	shr	bl, 3
  1691 00000B33 88DA                    	mov	dl, bl
  1692 00000B35 80E30F                  	and	bl, 0Fh
  1693 00000B38 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1694 00000B3E A2[1C2C0000]            	mov	[msgDevNo+1], al
  1695 00000B43 88D3                    	mov	bl, dl
  1696 00000B45 C0EB04                  	shr	bl, 4
  1697 00000B48 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1698 00000B4E A2[1B2C0000]            	mov	[msgDevNo], al
  1699 00000B53 88E3                    	mov	bl, ah
  1700 00000B55 88DA                    	mov	dl, bl
  1701 00000B57 80E30F                  	and	bl, 0Fh
  1702 00000B5A 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1703 00000B60 A2[102C0000]            	mov	[msgBusNo+1], al
  1704 00000B65 88D3                    	mov	bl, dl
  1705 00000B67 C0EB04                  	shr	bl, 4
  1706 00000B6A 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1707 00000B70 A2[0F2C0000]            	mov	[msgBusNo], al
  1708                                  
  1709                                  	;mov	ax, [ac97_NamBar]
  1710 00000B75 66A1[C07F0000]          	mov	ax, [NAMBAR]
  1711 00000B7B 88C3                    	mov	bl, al
  1712 00000B7D 88DA                    	mov	dl, bl
  1713 00000B7F 80E30F                  	and	bl, 0Fh
  1714 00000B82 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1715 00000B88 A2[3A2C0000]            	mov	[msgNamBar+3], al
  1716 00000B8D 88D3                    	mov	bl, dl
  1717 00000B8F C0EB04                  	shr	bl, 4
  1718 00000B92 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1719 00000B98 A2[392C0000]            	mov	[msgNamBar+2], al
  1720 00000B9D 88E3                    	mov	bl, ah
  1721 00000B9F 88DA                    	mov	dl, bl
  1722 00000BA1 80E30F                  	and	bl, 0Fh
  1723 00000BA4 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1724 00000BAA A2[382C0000]            	mov	[msgNamBar+1], al
  1725 00000BAF 88D3                    	mov	bl, dl
  1726 00000BB1 C0EB04                  	shr	bl, 4
  1727 00000BB4 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1728 00000BBA A2[372C0000]            	mov	[msgNamBar], al
  1729                                  
  1730                                  	;mov	ax, [ac97_NabmBar]
  1731 00000BBF 66A1[C27F0000]          	mov	ax, [NABMBAR]
  1732 00000BC5 88C3                    	mov	bl, al
  1733 00000BC7 88DA                    	mov	dl, bl
  1734 00000BC9 80E30F                  	and	bl, 0Fh
  1735 00000BCC 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1736 00000BD2 A2[4A2C0000]            	mov	[msgNabmBar+3], al
  1737 00000BD7 88D3                    	mov	bl, dl
  1738 00000BD9 C0EB04                  	shr	bl, 4
  1739 00000BDC 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1740 00000BE2 A2[492C0000]            	mov	[msgNabmBar+2], al
  1741 00000BE7 88E3                    	mov	bl, ah
  1742 00000BE9 88DA                    	mov	dl, bl
  1743 00000BEB 80E30F                  	and	bl, 0Fh
  1744 00000BEE 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1745 00000BF4 A2[482C0000]            	mov	[msgNabmBar+1], al
  1746 00000BF9 88D3                    	mov	bl, dl
  1747 00000BFB C0EB04                  	shr	bl, 4
  1748 00000BFE 8A83[AD2B0000]          	mov	al, [hex_chars+ebx]
  1749 00000C04 A2[472C0000]            	mov	[msgNabmBar], al
  1750                                  
  1751 00000C09 31C0                    	xor	eax, eax
  1752 00000C0B A0[537F0000]            	mov	al, [ac97_int_ln_reg]
  1753 00000C10 B10A                    	mov	cl, 10
  1754 00000C12 F6F1                    	div	cl
  1755                                  	; 23/11/2024
  1756                                  	;add	[msgIRQ], ax
  1757 00000C14 66053030                	add	ax, 3030h
  1758 00000C18 66A3[532C0000]          	mov	[msgIRQ], ax
  1759                                  	;and	al, al
  1760 00000C1E 3C30                    	cmp	al, 30h
  1761 00000C20 750D                    	jnz	short _w_ac97imsg_
  1762 00000C22 A0[542C0000]            	mov	al, byte [msgIRQ+1]
  1763 00000C27 B420                    	mov	ah, ' '
  1764 00000C29 66A3[532C0000]          	mov	[msgIRQ], ax
  1765                                  _w_ac97imsg_:
  1766                                  	; 19/11/2024
  1767 00000C2F E8681C0000              	call 	clear_window
  1768 00000C34 B60D                    	mov	dh, 13
  1769 00000C36 B200                    	mov	dl, 0
  1770 00000C38 E87A190000              	call	setCursorPosition
  1771                                  	;;;
  1772                                  	; 21/12/2024
  1773 00000C3D BD[BE2B0000]            	mov	ebp, msgAC97Info ; message
  1774                                  	; 22/12/2024
  1775                                  	;mov	cl, 07h ; color 
  1776 00000C42 E81F000000              	call	sys_gmsg
  1777                                  	;
  1778                                  	; 30/05/2024
  1779                                  write_VRA_info:
  1780                                  	; 21/12/2024
  1781 00000C47 BD[582C0000]            	mov	ebp, msgVRAheader ; message
  1782                                  	;mov	cl, 07h ; color 
  1783 00000C4C E815000000              	call	sys_gmsg
  1784                                  	;
  1785 00000C51 803D[1E7F0000]00        	cmp	byte [VRA], 0
  1786 00000C58 7607                    	jna	short _w_VRAi_no
  1787                                  _w_VRAi_yes:
  1788 00000C5A BD[672C0000]            	mov	ebp, msgVRAyes
  1789 00000C5F EB05                    	jmp	short _w_VRAi_yn_msg
  1790                                  _w_VRAi_no:
  1791 00000C61 BD[6D2C0000]            	mov	ebp, msgVRAno
  1792                                  _w_VRAi_yn_msg:
  1793                                  	;mov	cl, 07h ; color 
  1794                                  	;call	sys_msg
  1795                                  	;retn
  1796                                  	;jmp	short sys_gmsg
  1797                                  	;;;
  1798                                  ; --------------------------------------------------------
  1799                                  
  1800                                  	; 22/12/2024
  1801                                  	;;;
  1802                                  	; 21/12/2024
  1803                                  	; (write message in VGA/VESA-VBE mode)
  1804                                  sys_gmsg:
  1805 00000C66 8A4500                  	mov	al, [ebp]
  1806 00000C69 20C0                    	and	al, al
  1807 00000C6B 7458                    	jz	short sys_gmsg_ok
  1808 00000C6D 3C20                    	cmp	al, 20h
  1809 00000C6F 731E                    	jnb	short sys_gmsg_3
  1810 00000C71 3C0D                    	cmp	al, CR ; 13
  1811 00000C73 750C                    	jne	short sys_gmsg_2
  1812                                  	; carriege return, move cursor to column 0
  1813 00000C75 66C705[04750000]00-     	mov	word [screenpos], 0
  1813 00000C7D 00                 
  1814                                  sys_gmsg_1:
  1815 00000C7E 45                      	inc	ebp
  1816 00000C7F EBE5                    	jmp	short sys_gmsg
  1817                                  sys_gmsg_2:
  1818 00000C81 3C0A                    	cmp	al, LF ; 10
  1819 00000C83 7540                    	jne	short sys_gmsg_ok ; 22/12/2024
  1820                                  	; line feed, move cursor to next row
  1821 00000C85 668305[06750000]10      	add	word [screenpos+2], 16
  1822 00000C8D EBEF                    	jmp	short sys_gmsg_1
  1823                                  sys_gmsg_3:
  1824 00000C8F 8B35[04750000]          	mov	esi, [screenpos]
  1825                                  		; hw = (cursor) row
  1826                                  		; si = (cursor) column
  1827 00000C95 B907000000              	mov	ecx, 07h ; gray (light)
  1828 00000C9A E8D11A0000              	call	write_character
  1829 00000C9F 83C608                  	add	esi, 8
  1830                                  	;;;
  1831 00000CA2 6681FE8002              	cmp	si, 640
  1832 00000CA7 7213                    	jb	short sys_gmsg_5
  1833 00000CA9 C1EE10                  	shr	esi, 16
  1834 00000CAC 6683C610                	add	si, 16
  1835 00000CB0 6681FEE001              	cmp	si, 480
  1836 00000CB5 7202                    	jb	short sys_gmsg_4
  1837 00000CB7 31F6                    	xor	esi, esi
  1838                                  sys_gmsg_4:
  1839 00000CB9 C1E610                  	shl	esi, 16
  1840                                  	;;;
  1841                                  sys_gmsg_5:
  1842 00000CBC 8935[04750000]          	mov	[screenpos], esi
  1843 00000CC2 45                      	inc	ebp
  1844 00000CC3 EBA1                    	jmp	short sys_gmsg
  1845                                  sys_gmsg_ok:
  1846 00000CC5 C3                      	retn
  1847                                  	;;;
  1848                                  
  1849                                  ; --------------------------------------------------------
  1850                                  
  1851                                  ; 07/12/2024 - playwav9.s
  1852                                  ; 01/12/2024 - ac97play.s
  1853                                  ; 29/05/2024
  1854                                  ; 26/11/2023
  1855                                  ; 25/11/2023 - playwav6.s (32 bit registers, TRDOS 386 adaption)
  1856                                  ; 15/11/2023 - PLAYWAV5.COM, ich_wav5.asm
  1857                                  ; 14/11/2023
  1858                                  ; 13/11/2023 - Erdogan Tan - (VRA, sample rate conversion)
  1859                                  ; --------------------------------------------------------
  1860                                  
  1861                                  ;;Note:	At the end of every buffer load,
  1862                                  ;;	during buffer switch/swap, there will be discontinuity
  1863                                  ;;	between the last converted sample and the 1st sample
  1864                                  ;;	of the next buffer.
  1865                                  ;;	(like as a dot noises vaguely between normal sound samples)
  1866                                  ;;	-To avoid this defect, the 1st sample of
  1867                                  ;;	the next buffer may be read from the wav file but
  1868                                  ;;	the file pointer would need to be set to 1 sample back
  1869                                  ;;	again via seek system call. Time comsumption problem! -
  1870                                  ;;
  1871                                  ;;	Erdogan Tan - 15/11/2023
  1872                                  ;;
  1873                                  ;;	((If entire wav data would be loaded at once.. conversion
  1874                                  ;;	defect/noise would disappear.. but for DOS, to keep
  1875                                  ;;	64KB buffer limit is important also it is important
  1876                                  ;;	for running under 1MB barrier without HIMEM.SYS or DPMI.
  1877                                  ;;	I have tested this program by using 2-30MB wav files.))
  1878                                  ;;
  1879                                  ;;	Test Computer:	ASUS desktop/mainboard, M2N4-SLI, 2010.
  1880                                  ;;			AMD Athlon 64 X2 2200 MHZ CPU.
  1881                                  ;;		       	NFORCE4 (CK804) AC97 audio hardware.
  1882                                  ;;			Realtek ALC850 codec.
  1883                                  ;;		       	Retro DOS v4.2 (MSDOS 6.22) operating system.
  1884                                  
  1885                                  load_8khz_mono_8_bit:
  1886                                  	; 15/11/2023
  1887                                  	; 14/11/2023
  1888                                  	; 13/11/2023
  1889 00000CC6 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1890                                  					; last of the file?
  1891 00000CCD 7402                    	jz	short lff8m_0		; no
  1892 00000CCF F9                      	stc
  1893 00000CD0 C3                      	retn
  1894                                  
  1895                                  lff8m_0:
  1896                                  	; 01/12/2024
  1897                                  	; edi = audio buffer address
  1898 00000CD1 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  1899                                          ;mov	edx, [loadsize]
  1900                                  
  1901                                  	; esi = buffer address
  1902                                  	;; edx = buffer size
  1903                                  
  1904                                  	; load file into memory
  1905                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000CD6 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000CDC 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000CDE 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000CE4 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00000CE9 CD40                <1>  int 40h
  1906 00000CEB 7305                    	jnc	short lff8m_6
  1907 00000CED E9AF000000              	jmp	lff8m_5  ; error !
  1908                                  
  1909                                  lff8m_6:
  1910                                  	; 01/12/2024
  1911 00000CF2 A3[D87F0000]            	mov	[count], eax
  1912                                  	;;;
  1913                                  	; 07/12/2024
  1914                                  	;mov	edi, audio_buffer
  1915                                  	;;;
  1916 00000CF7 21C0                    	and	eax, eax
  1917 00000CF9 0F8499000000            	jz	lff8_eof
  1918                                  
  1919 00000CFF 89C1                    	mov	ecx, eax		; byte count
  1920                                  lff8m_1:
  1921 00000D01 AC                      	lodsb
  1922 00000D02 A2[0F230000]            	mov	[previous_val], al
  1923 00000D07 2C80                    	sub	al, 80h
  1924 00000D09 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  1925 00000D0D 66AB                    	stosw		; original sample (left channel)
  1926 00000D0F 66AB                    	stosw		; original sample (right channel)
  1927                                  	;xor	eax, eax
  1928 00000D11 B080                    	mov	al, 80h
  1929 00000D13 49                      	dec	ecx
  1930 00000D14 7402                    	jz	short lff8m_2
  1931 00000D16 8A06                    	mov	al, [esi]
  1932                                  lff8m_2:
  1933                                  	;mov	[next_val], ax
  1934 00000D18 88C7                    	mov	bh, al	; [next_val]
  1935 00000D1A 8A25[0F230000]          	mov	ah, [previous_val]
  1936 00000D20 00E0                    	add	al, ah	; [previous_val]
  1937 00000D22 D0D8                    	rcr	al, 1
  1938 00000D24 88C2                    	mov	dl, al	; this is interpolated middle (3th) sample
  1939 00000D26 00E0                    	add	al, ah	; [previous_val]
  1940 00000D28 D0D8                    	rcr	al, 1	
  1941 00000D2A 88C3                    	mov	bl, al 	; this is temporary interpolation value
  1942 00000D2C 00E0                    	add	al, ah	; [previous_val]
  1943 00000D2E D0D8                    	rcr	al, 1
  1944 00000D30 2C80                    	sub	al, 80h
  1945 00000D32 66C1E008                	shl	ax, 8	
  1946 00000D36 66AB                    	stosw		; this is 1st interpolated sample (L)
  1947 00000D38 66AB                    	stosw		; this is 1st interpolated sample (R)
  1948 00000D3A 88D8                    	mov	al, bl
  1949 00000D3C 00D0                    	add	al, dl
  1950 00000D3E D0D8                    	rcr	al, 1
  1951 00000D40 2C80                    	sub	al, 80h
  1952 00000D42 66C1E008                	shl	ax, 8
  1953 00000D46 66AB                    	stosw		; this is 2nd interpolated sample (L)
  1954 00000D48 66AB                    	stosw		; this is 2nd interpolated sample (R)
  1955 00000D4A 88D0                    	mov	al, dl
  1956 00000D4C 2C80                    	sub	al, 80h
  1957 00000D4E 66C1E008                	shl	ax, 8
  1958 00000D52 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  1959 00000D54 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  1960                                  	;mov	al, [next_val]
  1961 00000D56 88F8                    	mov	al, bh
  1962 00000D58 00D0                    	add	al, dl
  1963 00000D5A D0D8                    	rcr	al, 1
  1964 00000D5C 88C3                    	mov	bl, al	; this is temporary interpolation value
  1965 00000D5E 00D0                    	add	al, dl
  1966 00000D60 D0D8                    	rcr	al, 1
  1967 00000D62 2C80                    	sub	al, 80h
  1968 00000D64 66C1E008                	shl	ax, 8
  1969 00000D68 66AB                    	stosw		; this is 4th interpolated sample (L)
  1970 00000D6A 66AB                    	stosw		; this is 4th interpolated sample (R)
  1971                                  	;mov	al, [next_val]
  1972 00000D6C 88F8                    	mov	al, bh
  1973 00000D6E 00D8                    	add	al, bl
  1974 00000D70 D0D8                    	rcr	al, 1
  1975 00000D72 2C80                    	sub	al, 80h
  1976 00000D74 66C1E008                	shl	ax, 8
  1977 00000D78 66AB                    	stosw		; this is 5th interpolated sample (L)
  1978 00000D7A 66AB                    	stosw		; this is 5th interpolated sample (R)
  1979                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  1980 00000D7C 09C9                    	or	ecx, ecx
  1981 00000D7E 7581                    	jnz	short lff8m_1
  1982                                  
  1983                                  	; --------------
  1984                                  
  1985                                  lff8s_3:
  1986                                  lff8m_3:
  1987                                  lff8s2_3:
  1988                                  lff8m2_3:
  1989                                  lff16s_3:
  1990                                  lff16m_3:
  1991                                  lff16s2_3:
  1992                                  lff16m2_3:
  1993                                  lff24_3:
  1994                                  lff32_3:
  1995                                  lff44_3:
  1996                                  lff22_3:
  1997                                  lff11_3:
  1998                                  	; 08/12/2024 (BugFix)
  1999                                  	; 31/05/2024 (BugFix)
  2000 00000D80 8B0D[CC7F0000]          	mov	ecx, [buffersize] ; 16 bit (48 kHZ, stereo) sample size
  2001                                  	;shl	ecx, 1	; byte count ; Bug !
  2002                                  	; 08/12/2024
  2003 00000D86 81C1[00800000]          	add	ecx, audio_buffer
  2004 00000D8C 29F9                    	sub	ecx, edi
  2005 00000D8E 7607                    	jna	short lff8m_4
  2006                                  	;inc	ecx
  2007 00000D90 C1E902                  	shr	ecx, 2
  2008 00000D93 31C0                    	xor	eax, eax ; fill (remain part of) buffer with zeros
  2009 00000D95 F3AB                    	rep	stosd
  2010                                  lff8m_4:
  2011                                  	; 31/05/2024 (BugFix)
  2012                                  	; cf=1 ; Bug !
  2013                                  	; 08/12/2024
  2014                                  	;clc
  2015 00000D97 C3                      	retn
  2016                                  
  2017                                  lff8_eof:
  2018                                  lff16_eof:
  2019                                  lff24_eof:
  2020                                  lff32_eof:
  2021                                  lff44_eof:
  2022                                  lff22_eof:
  2023                                  lff11_eof:
  2024                                  	; 15/11/2023
  2025 00000D98 C605[527F0000]01        	mov	byte [flags], ENDOFFILE
  2026 00000D9F EBDF                    	jmp	short lff8m_3
  2027                                  
  2028                                  lff8s_5:
  2029                                  lff8m_5:
  2030                                  lff8s2_5:
  2031                                  lff8m2_5:
  2032                                  lff16s_5:
  2033                                  lff16m_5:
  2034                                  lff16s2_5:
  2035                                  lff16m2_5:
  2036                                  lff24_5:
  2037                                  lff32_5:
  2038                                  lff44_5:
  2039                                  lff22_5:
  2040                                  lff11_5:
  2041 00000DA1 B021                    	mov	al, '!'  ; error
  2042 00000DA3 E8D6FAFFFF              	call	tL0
  2043                                  	
  2044                                  	;jmp	short lff8m_3
  2045                                  	; 15/11/2023
  2046 00000DA8 EBEE                    	jmp	lff8_eof
  2047                                  
  2048                                  	; --------------
  2049                                  
  2050                                  load_8khz_stereo_8_bit:
  2051                                  	; 15/11/2023
  2052                                  	; 14/11/2023
  2053                                  	; 13/11/2023
  2054 00000DAA F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2055                                  					; last of the file?
  2056 00000DB1 7402                    	jz	short lff8s_0		; no
  2057 00000DB3 F9                      	stc
  2058 00000DB4 C3                      	retn
  2059                                  
  2060                                  lff8s_0:
  2061                                  	; 01/12/2024
  2062                                  	; edi = audio buffer address
  2063 00000DB5 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2064                                          ;mov	edx, [loadsize]
  2065                                  
  2066                                  	; esi = buffer address
  2067                                  	;; edx = buffer size
  2068                                  
  2069                                  	; load file into memory
  2070                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000DBA 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000DC0 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000DC2 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000DC8 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00000DCD CD40                <1>  int 40h
  2071 00000DCF 72D0                    	jc	short lff8s_5 ; error !
  2072                                  
  2073                                  	; 01/12/2024
  2074 00000DD1 A3[D87F0000]            	mov	[count], eax
  2075                                  	;;;
  2076                                  	; 07/12/2024
  2077                                  	;mov	edi, audio_buffer
  2078                                  	;;;
  2079 00000DD6 D1E8                    	shr	eax, 1
  2080 00000DD8 74BE                    	jz	short lff8_eof
  2081                                  
  2082 00000DDA 89C1                    	mov	ecx, eax	; word count
  2083                                  lff8s_1:
  2084 00000DDC AC                      	lodsb
  2085 00000DDD A2[0F230000]            	mov	[previous_val_l], al
  2086 00000DE2 2C80                    	sub	al, 80h
  2087 00000DE4 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2088 00000DE8 66AB                    	stosw		; original sample (L)
  2089 00000DEA AC                      	lodsb
  2090 00000DEB A2[11230000]            	mov	[previous_val_r], al
  2091 00000DF0 2C80                    	sub	al, 80h
  2092 00000DF2 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2093 00000DF6 66AB                    	stosw		; original sample (R)
  2094                                  
  2095                                  	;xor	eax, eax
  2096 00000DF8 66B88080                	mov	ax, 8080h
  2097 00000DFC 49                      	dec	ecx
  2098 00000DFD 7403                    	jz	short lff8s_2
  2099                                  		; convert 8 bit sample to 16 bit sample
  2100 00000DFF 668B06                  	mov	ax, [esi]
  2101                                  lff8s_2:
  2102 00000E02 A2[13230000]            	mov	[next_val_l], al
  2103 00000E07 8825[15230000]          	mov	[next_val_r], ah
  2104 00000E0D 8A25[0F230000]          	mov	ah, [previous_val_l]
  2105 00000E13 00E0                    	add	al, ah
  2106 00000E15 D0D8                    	rcr	al, 1
  2107 00000E17 88C2                    	mov	dl, al	; this is interpolated middle (3th) sample (L)
  2108 00000E19 00E0                    	add	al, ah
  2109 00000E1B D0D8                    	rcr	al, 1
  2110 00000E1D 88C3                    	mov	bl, al	; this is temporary interpolation value (L)
  2111 00000E1F 00E0                    	add	al, ah
  2112 00000E21 D0D8                    	rcr	al, 1
  2113 00000E23 2C80                    	sub	al, 80h
  2114 00000E25 66C1E008                	shl	ax, 8
  2115 00000E29 66AB                    	stosw		; this is 1st interpolated sample (L)
  2116 00000E2B A0[15230000]            	mov	al, [next_val_r]
  2117 00000E30 8A25[11230000]          	mov	ah, [previous_val_r]
  2118 00000E36 00E0                    	add	al, ah
  2119 00000E38 D0D8                    	rcr	al, 1
  2120 00000E3A 88C6                    	mov	dh, al	; this is interpolated middle (3th) sample (R)
  2121 00000E3C 00E0                    	add	al, ah
  2122 00000E3E D0D8                    	rcr	al, 1
  2123 00000E40 88C7                    	mov	bh, al	; this is temporary interpolation value (R)
  2124 00000E42 00E0                    	add	al, ah
  2125 00000E44 D0D8                    	rcr	al, 1
  2126 00000E46 2C80                    	sub	al, 80h
  2127 00000E48 66C1E008                	shl	ax, 8
  2128 00000E4C 66AB                    	stosw		; this is 1st interpolated sample (R)
  2129 00000E4E 88D8                    	mov	al, bl
  2130 00000E50 00D0                    	add	al, dl
  2131 00000E52 D0D8                    	rcr	al, 1
  2132 00000E54 2C80                    	sub	al, 80h
  2133 00000E56 66C1E008                	shl	ax, 8
  2134 00000E5A 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2135 00000E5C 88F8                    	mov	al, bh
  2136 00000E5E 00F0                    	add	al, dh
  2137 00000E60 D0D8                    	rcr	al, 1
  2138 00000E62 2C80                    	sub	al, 80h
  2139 00000E64 66C1E008                	shl	ax, 8
  2140 00000E68 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  2141 00000E6A 88D0                    	mov	al, dl
  2142 00000E6C 2C80                    	sub	al, 80h
  2143 00000E6E 66C1E008                	shl	ax, 8
  2144 00000E72 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  2145 00000E74 88F0                    	mov	al, dh
  2146 00000E76 2C80                    	sub	al, 80h
  2147 00000E78 66C1E008                	shl	ax, 8
  2148 00000E7C 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  2149 00000E7E A0[13230000]            	mov	al, [next_val_l]
  2150 00000E83 00D0                    	add	al, dl
  2151 00000E85 D0D8                    	rcr	al, 1
  2152 00000E87 88C3                    	mov	bl, al	; this is temporary interpolation value (L)
  2153 00000E89 00D0                    	add	al, dl
  2154 00000E8B D0D8                    	rcr	al, 1
  2155 00000E8D 2C80                    	sub	al, 80h
  2156 00000E8F 66C1E008                	shl	ax, 8
  2157 00000E93 66AB                    	stosw		; this is 4th interpolated sample (L)
  2158 00000E95 A0[15230000]            	mov	al, [next_val_r]
  2159 00000E9A 00F0                    	add	al, dh
  2160 00000E9C D0D8                    	rcr	al, 1
  2161 00000E9E 88C7                    	mov	bh, al	; this is temporary interpolation value (R)
  2162 00000EA0 00F0                    	add	al, dh
  2163 00000EA2 D0D8                    	rcr	al, 1
  2164 00000EA4 2C80                    	sub	al, 80h
  2165 00000EA6 66C1E008                	shl	ax, 8
  2166 00000EAA 66AB                    	stosw		; this is 4th interpolated sample (R)
  2167 00000EAC A0[13230000]            	mov	al, [next_val_l]
  2168 00000EB1 00D8                    	add	al, bl
  2169 00000EB3 D0D8                    	rcr	al, 1
  2170 00000EB5 2C80                    	sub	al, 80h
  2171 00000EB7 66C1E008                	shl	ax, 8
  2172 00000EBB 66AB                    	stosw		; this is 5th interpolated sample (L)
  2173 00000EBD A0[15230000]            	mov	al, [next_val_r]
  2174 00000EC2 00F8                    	add	al, bh
  2175 00000EC4 D0D8                    	rcr	al, 1
  2176 00000EC6 2C80                    	sub	al, 80h
  2177 00000EC8 66C1E008                	shl	ax, 8
  2178 00000ECC 66AB                    	stosw		; this is 5th interpolated sample (R)
  2179                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2180 00000ECE E305                    	jecxz	lff8s_6
  2181 00000ED0 E907FFFFFF              	jmp	lff8s_1
  2182                                  lff8s_6:
  2183 00000ED5 E9A6FEFFFF              	jmp	lff8s_3
  2184                                  
  2185                                  load_8khz_mono_16_bit:
  2186                                  	; 13/11/2023
  2187 00000EDA F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2188                                  					; last of the file?
  2189 00000EE1 7402                    	jz	short lff8m2_0		; no
  2190 00000EE3 F9                      	stc
  2191 00000EE4 C3                      	retn
  2192                                  
  2193                                  lff8m2_0:
  2194                                  	; 01/12/2024
  2195                                  	; edi = audio buffer address
  2196 00000EE5 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2197                                          ;mov	edx, [loadsize]
  2198                                  
  2199                                  	; esi = buffer address
  2200                                  	;; edx = buffer size
  2201                                  
  2202                                  	; load file into memory
  2203                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000EEA 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000EF0 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000EF2 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000EF8 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00000EFD CD40                <1>  int 40h
  2204 00000EFF 0F82A0000000            	jc	lff8m2_7 ; error !
  2205                                  
  2206                                  	; 01/12/2024
  2207 00000F05 A3[D87F0000]            	mov	[count], eax
  2208                                  	;;;
  2209                                  	; 07/12/2024
  2210                                  	;mov	edi, audio_buffer
  2211                                  	;;;
  2212 00000F0A D1E8                    	shr	eax, 1
  2213 00000F0C 7505                    	jnz	short lff8m2_8
  2214 00000F0E E985FEFFFF              	jmp	lff8_eof
  2215                                  
  2216                                  lff8m2_8:
  2217 00000F13 89C1                    	mov	ecx, eax	; word count
  2218                                  lff8m2_1:
  2219 00000F15 66AD                    	lodsw
  2220 00000F17 66AB                    	stosw		; original sample (left channel)
  2221 00000F19 66AB                    	stosw		; original sample (right channel)
  2222 00000F1B 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  2223 00000F1E 66A3[0F230000]          	mov	[previous_val], ax
  2224 00000F24 31C0                    	xor	eax, eax
  2225 00000F26 49                      	dec	ecx
  2226 00000F27 7403                    	jz	short lff8m2_2
  2227 00000F29 668B06                  	mov	ax, [esi]
  2228                                  lff8m2_2:
  2229 00000F2C 80C480                  	add	ah, 80h ; convert sound level to 0-65535 format
  2230 00000F2F 89C5                    	mov	ebp, eax	; [next_val]
  2231 00000F31 660305[0F230000]        	add	ax, [previous_val]
  2232 00000F38 66D1D8                  	rcr	ax, 1
  2233 00000F3B 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample
  2234 00000F3D 660305[0F230000]        	add	ax, [previous_val]
  2235 00000F44 66D1D8                  	rcr	ax, 1	; this is temporary interpolation value
  2236 00000F47 89C3                    	mov	ebx, eax 		
  2237 00000F49 660305[0F230000]        	add	ax, [previous_val]
  2238 00000F50 66D1D8                  	rcr	ax, 1
  2239 00000F53 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2240 00000F56 66AB                    	stosw		; this is 1st interpolated sample (L)
  2241 00000F58 66AB                    	stosw		; this is 1st interpolated sample (R)
  2242 00000F5A 89D8                    	mov	eax, ebx
  2243 00000F5C 6601D0                  	add	ax, dx
  2244 00000F5F 66D1D8                  	rcr	ax, 1
  2245 00000F62 80EC80                  	sub	ah, 80h
  2246 00000F65 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2247 00000F67 66AB                    	stosw		; this is 2nd interpolated sample (R)
  2248 00000F69 89D0                    	mov	eax, edx
  2249 00000F6B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2250 00000F6E 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  2251 00000F70 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  2252 00000F72 89E8                    	mov	eax, ebp
  2253 00000F74 6601D0                  	add	ax, dx
  2254 00000F77 66D1D8                  	rcr	ax, 1
  2255 00000F7A 89C3                    	mov	ebx, eax ; this is temporary interpolation value
  2256 00000F7C 6601D0                  	add	ax, dx
  2257 00000F7F 66D1D8                  	rcr	ax, 1
  2258 00000F82 80EC80                  	sub	ah, 80h
  2259 00000F85 66AB                    	stosw		; this is 4th interpolated sample (L)
  2260 00000F87 66AB                    	stosw		; this is 4th interpolated sample (R)
  2261 00000F89 89E8                    	mov	eax, ebp
  2262 00000F8B 6601D8                  	add	ax, bx
  2263 00000F8E 66D1D8                  	rcr	ax, 1
  2264 00000F91 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2265 00000F94 66AB                    	stosw		; this is 5th interpolated sample (L)
  2266 00000F96 66AB                    	stosw		; this is 5th interpolated sample (R)
  2267                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2268 00000F98 09C9                    	or	ecx, ecx
  2269 00000F9A 0F8575FFFFFF            	jnz	lff8m2_1
  2270 00000FA0 E9DBFDFFFF              	jmp	lff8m2_3
  2271                                  
  2272                                  lff8m2_7:
  2273                                  lff8s2_7:
  2274 00000FA5 E9F7FDFFFF              	jmp	lff8m2_5  ; error
  2275                                  
  2276                                  load_8khz_stereo_16_bit:
  2277                                  	; 16/11/2023
  2278                                  	; 15/11/2023
  2279                                  	; 13/11/2023
  2280 00000FAA F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2281                                  					; last of the file?
  2282 00000FB1 7402                    	jz	short lff8s2_0		; no
  2283 00000FB3 F9                      	stc
  2284 00000FB4 C3                      	retn
  2285                                  
  2286                                  lff8s2_0:
  2287                                  	; 01/12/2024
  2288                                  	; edi = audio buffer address
  2289 00000FB5 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2290                                          ;mov	edx, [loadsize]
  2291                                  
  2292                                  	; esi = buffer address
  2293                                  	;; edx = buffer size
  2294                                  
  2295                                  	; load file into memory
  2296                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00000FBA 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00000FC0 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00000FC2 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00000FC8 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00000FCD CD40                <1>  int 40h
  2297 00000FCF 72D4                    	jc	short lff8s2_7 ; error !
  2298                                  
  2299                                  	; 01/12/2024
  2300 00000FD1 A3[D87F0000]            	mov	[count], eax
  2301                                  	;;;
  2302                                  	; 07/12/2024
  2303                                  	;mov	edi, audio_buffer
  2304                                  	;;;
  2305 00000FD6 C1E802                  	shr	eax, 2
  2306 00000FD9 7505                    	jnz	short lff8s2_8
  2307 00000FDB E9B8FDFFFF              	jmp	lff8_eof
  2308                                  
  2309                                  lff8s2_8:
  2310 00000FE0 89C1                    	mov	ecx, eax ; dword count
  2311                                  lff8s2_1:
  2312 00000FE2 66AD                    	lodsw
  2313 00000FE4 66AB                    	stosw		; original sample (L)
  2314                                  	; 15/11/2023
  2315 00000FE6 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  2316 00000FE9 66A3[0F230000]          	mov	[previous_val_l], ax
  2317 00000FEF 66AD                    	lodsw
  2318 00000FF1 66AB                    	stosw		; original sample (R)
  2319 00000FF3 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  2320 00000FF6 66A3[11230000]          	mov	[previous_val_r], ax
  2321 00000FFC 31D2                    	xor	edx, edx
  2322 00000FFE 31C0                    	xor	eax, eax
  2323                                  	; 16/11/2023
  2324 00001000 49                      	dec	ecx
  2325 00001001 7407                    	jz	short lff8s2_2
  2326 00001003 668B06                  	mov	ax, [esi]
  2327 00001006 668B5602                	mov	dx, [esi+2]
  2328                                  lff8s2_2:
  2329 0000100A 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  2330 0000100D 66A3[13230000]          	mov	[next_val_l], ax
  2331 00001013 80C680                  	add	dh, 80h	; convert sound level to 0-65535 format
  2332 00001016 668915[15230000]        	mov	[next_val_r], dx
  2333 0000101D 660305[0F230000]        	add	ax, [previous_val_l]
  2334 00001024 66D1D8                  	rcr	ax, 1
  2335 00001027 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample (L)
  2336 00001029 660305[0F230000]        	add	ax, [previous_val_l]
  2337 00001030 66D1D8                  	rcr	ax, 1	
  2338 00001033 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
  2339 00001035 660305[0F230000]        	add	ax, [previous_val_l]
  2340 0000103C 66D1D8                  	rcr	ax, 1
  2341 0000103F 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2342 00001042 66AB                    	stosw		; this is 1st interpolated sample (L)
  2343 00001044 66A1[15230000]          	mov	ax, [next_val_r]
  2344 0000104A 660305[11230000]        	add	ax, [previous_val_r]
  2345 00001051 66D1D8                  	rcr	ax, 1
  2346 00001054 89C5                    	mov	ebp, eax ; this is interpolated middle (3th) sample (R)
  2347 00001056 660305[11230000]        	add	ax, [previous_val_r]
  2348 0000105D 66D1D8                  	rcr	ax, 1
  2349 00001060 50                      	push	eax ; *	; this is temporary interpolation value (R)
  2350 00001061 660305[11230000]        	add	ax, [previous_val_r]
  2351 00001068 66D1D8                  	rcr	ax, 1
  2352 0000106B 80EC80                  	sub	ah, 80h
  2353 0000106E 66AB                    	stosw		; this is 1st interpolated sample (R)
  2354 00001070 89D8                    	mov	eax, ebx
  2355 00001072 6601D0                  	add	ax, dx
  2356 00001075 66D1D8                  	rcr	ax, 1
  2357 00001078 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2358 0000107B 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2359 0000107D 58                      	pop	eax ; *
  2360 0000107E 6601E8                  	add	ax, bp
  2361 00001081 66D1D8                  	rcr	ax, 1
  2362 00001084 80EC80                  	sub	ah, 80h
  2363 00001087 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  2364 00001089 89D0                    	mov	eax, edx
  2365 0000108B 80EC80                  	sub	ah, 80h
  2366 0000108E 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  2367 00001090 89E8                    	mov	eax, ebp
  2368 00001092 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2369 00001095 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  2370 00001097 66A1[13230000]          	mov	ax, [next_val_l]
  2371 0000109D 6601D0                  	add	ax, dx
  2372 000010A0 66D1D8                  	rcr	ax, 1
  2373 000010A3 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
  2374 000010A5 6601D0                  	add	ax, dx
  2375 000010A8 66D1D8                  	rcr	ax, 1
  2376 000010AB 80EC80                  	sub	ah, 80h
  2377 000010AE 66AB                    	stosw		; this is 4th interpolated sample (L)
  2378 000010B0 66A1[15230000]          	mov	ax, [next_val_r]
  2379 000010B6 6601E8                  	add	ax, bp
  2380 000010B9 66D1D8                  	rcr	ax, 1
  2381 000010BC 50                      	push	eax ; ** ; this is temporary interpolation value (R)
  2382 000010BD 6601E8                  	add	ax, bp
  2383 000010C0 66D1D8                  	rcr	ax, 1
  2384 000010C3 80EC80                  	sub	ah, 80h
  2385 000010C6 66AB                    	stosw		; this is 4th interpolated sample (R)
  2386 000010C8 66A1[13230000]          	mov	ax, [next_val_l]
  2387 000010CE 6601D8                  	add	ax, bx
  2388 000010D1 66D1D8                  	rcr	ax, 1
  2389 000010D4 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2390 000010D7 66AB                    	stosw		; this is 5th interpolated sample (L)
  2391 000010D9 58                      	pop	eax ; **
  2392 000010DA 660305[15230000]        	add	ax, [next_val_r]
  2393 000010E1 66D1D8                  	rcr	ax, 1
  2394 000010E4 80EC80                  	sub	ah, 80h
  2395 000010E7 66AB                    	stosw		; this is 5th interpolated sample (R)
  2396                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2397 000010E9 E305                    	jecxz	lff8_s2_9
  2398 000010EB E9F2FEFFFF              	jmp	lff8s2_1
  2399                                  lff8_s2_9:
  2400 000010F0 E98BFCFFFF              	jmp	lff8s2_3
  2401                                  
  2402                                  ; .....................
  2403                                  
  2404                                  load_16khz_mono_8_bit:
  2405                                  	; 14/11/2023
  2406                                  	; 13/11/2023
  2407 000010F5 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2408                                  					; last of the file?
  2409 000010FC 7402                    	jz	short lff16m_0		; no
  2410 000010FE F9                      	stc
  2411 000010FF C3                      	retn
  2412                                  
  2413                                  lff16m_0:
  2414                                  	; 01/12/2024
  2415                                  	; edi = audio buffer address
  2416 00001100 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2417                                          ;mov	edx, [loadsize]
  2418                                  
  2419                                  	; esi = buffer address
  2420                                  	;; edx = buffer size
  2421                                  
  2422                                  	; load file into memory
  2423                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001105 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 0000110B 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 0000110D 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001113 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001118 CD40                <1>  int 40h
  2424 0000111A 7253                    	jc	short lff16m_7 ; error !
  2425                                  
  2426                                  	; 01/12/2024
  2427 0000111C A3[D87F0000]            	mov	[count], eax
  2428                                  	;;;
  2429                                  	; 07/12/2024
  2430                                  	;mov	edi, audio_buffer
  2431                                  	;;;
  2432 00001121 21C0                    	and	eax, eax
  2433 00001123 7505                    	jnz	short lff16m_8
  2434 00001125 E96EFCFFFF              	jmp	lff16_eof
  2435                                  
  2436                                  lff16m_8:
  2437 0000112A 89C1                    	mov	ecx, eax		; byte count
  2438                                  lff16m_1:
  2439 0000112C AC                      	lodsb
  2440                                  	;mov	[previous_val], al
  2441 0000112D 88C3                    	mov	bl, al
  2442 0000112F 2C80                    	sub	al, 80h
  2443 00001131 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2444 00001135 66AB                    	stosw		; original sample (left channel)
  2445 00001137 66AB                    	stosw		; original sample (right channel)
  2446                                  	;xor	ax, ax
  2447                                  	; 14/11/22023
  2448 00001139 B080                    	mov	al, 80h
  2449 0000113B 49                      	dec	ecx
  2450 0000113C 7402                    	jz	short lff16m_2
  2451 0000113E 8A06                    	mov	al, [esi]
  2452                                  lff16m_2:
  2453                                  	;mov	[next_val], al
  2454 00001140 88C7                    	mov	bh, al
  2455                                  	;add	al, [previous_val]
  2456 00001142 00D8                    	add	al, bl
  2457 00001144 D0D8                    	rcr	al, 1
  2458 00001146 88C2                    	mov	dl, al	; this is interpolated middle (temp) sample
  2459                                  	;add	al, [previous_val]
  2460 00001148 00D8                    	add	al, bl
  2461 0000114A D0D8                    	rcr	al, 1
  2462 0000114C 2C80                    	sub	al, 80h
  2463 0000114E 66C1E008                	shl	ax, 8
  2464 00001152 66AB                    	stosw		; this is 1st interpolated sample (L)
  2465 00001154 66AB                    	stosw		; this is 1st interpolated sample (R)
  2466                                  	;mov	al, [next_val]
  2467 00001156 88F8                    	mov	al, bh
  2468 00001158 00D0                    	add	al, dl
  2469 0000115A D0D8                    	rcr	al, 1
  2470 0000115C 2C80                    	sub	al, 80h
  2471 0000115E 66C1E008                	shl	ax, 8
  2472 00001162 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2473 00001164 66AB                    	stosw		; this is 2nd interpolated sample (R)
  2474                                  	
  2475                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2476 00001166 09C9                    	or	ecx, ecx
  2477 00001168 75C2                    	jnz	short lff16m_1
  2478 0000116A E911FCFFFF              	jmp	lff16m_3
  2479                                  
  2480                                  lff16m_7:
  2481                                  lff16s_7:
  2482 0000116F E92DFCFFFF              	jmp	lff16m_5  ; error
  2483                                  
  2484                                  load_16khz_stereo_8_bit:
  2485                                  	; 14/11/2023
  2486                                  	; 13/11/2023
  2487 00001174 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2488                                  					; last of the file?
  2489 0000117B 7402                    	jz	short lff16s_0		; no
  2490 0000117D F9                      	stc
  2491 0000117E C3                      	retn
  2492                                  
  2493                                  lff16s_0:
  2494                                  	; 01/12/2024
  2495                                  	; edi = audio buffer address
  2496 0000117F BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2497                                          ;mov	edx, [loadsize]
  2498                                  
  2499                                  	; esi = buffer address
  2500                                  	;; edx = buffer size
  2501                                  
  2502                                  	; load file into memory
  2503                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001184 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 0000118A 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 0000118C 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001192 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001197 CD40                <1>  int 40h
  2504 00001199 72D4                    	jc	short lff16s_7 ; error !
  2505                                  
  2506                                  	; 01/12/2024
  2507 0000119B A3[D87F0000]            	mov	[count], eax
  2508                                  	;;;
  2509                                  	; 07/12/2024
  2510                                  	;mov	edi, audio_buffer
  2511                                  	;;;
  2512 000011A0 D1E8                    	shr	eax, 1
  2513 000011A2 7505                    	jnz	short lff16s_8
  2514 000011A4 E9EFFBFFFF              	jmp	lff16_eof
  2515                                  
  2516                                  lff16s_8:
  2517 000011A9 89C1                    	mov	ecx, eax	; word count
  2518                                  lff16s_1:
  2519 000011AB AC                      	lodsb
  2520 000011AC A2[0F230000]            	mov	[previous_val_l], al
  2521 000011B1 2C80                    	sub	al, 80h
  2522 000011B3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2523 000011B7 66AB                    	stosw		; original sample (L)
  2524 000011B9 AC                      	lodsb
  2525 000011BA A2[11230000]            	mov	[previous_val_r], al
  2526 000011BF 2C80                    	sub	al, 80h
  2527 000011C1 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2528 000011C5 66AB                    	stosw		; original sample (R)
  2529                                  
  2530                                  	;xor	eax, eax
  2531 000011C7 66B88080                	mov	ax, 8080h
  2532 000011CB 49                      	dec	ecx
  2533 000011CC 7403                    	jz	short lff16s_2
  2534                                  		; convert 8 bit sample to 16 bit sample
  2535 000011CE 668B06                  	mov	ax, [esi]
  2536                                  lff16s_2:
  2537                                  	;mov	[next_val_l], al
  2538                                  	;mov	[next_val_r], ah
  2539 000011D1 89C3                    	mov	ebx, eax
  2540 000011D3 0205[0F230000]          	add	al, [previous_val_l]
  2541 000011D9 D0D8                    	rcr	al, 1
  2542 000011DB 88C2                    	mov	dl, al	; this is temporary interpolation value (L)
  2543 000011DD 0205[0F230000]          	add	al, [previous_val_l]
  2544 000011E3 D0D8                    	rcr	al, 1
  2545 000011E5 2C80                    	sub	al, 80h
  2546 000011E7 66C1E008                	shl	ax, 8
  2547 000011EB 66AB                    	stosw		; this is 1st interpolated sample (L)
  2548 000011ED 88F8                    	mov	al, bh	; [next_val_r]
  2549 000011EF 0205[11230000]          	add	al, [previous_val_r]
  2550 000011F5 D0D8                    	rcr	al, 1
  2551 000011F7 88C6                    	mov	dh, al	; this is temporary interpolation value (R)
  2552 000011F9 0205[11230000]          	add	al, [previous_val_r]
  2553 000011FF D0D8                    	rcr	al, 1
  2554 00001201 2C80                    	sub	al, 80h
  2555 00001203 66C1E008                	shl	ax, 8
  2556 00001207 66AB                    	stosw		; this is 1st interpolated sample (R)
  2557 00001209 88D0                    	mov	al, dl
  2558 0000120B 00D8                    	add	al, bl	; [next_val_l]
  2559 0000120D D0D8                    	rcr	al, 1
  2560 0000120F 2C80                    	sub	al, 80h
  2561 00001211 66C1E008                	shl	ax, 8
  2562 00001215 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2563 00001217 88F0                    	mov	al, dh
  2564 00001219 00F8                    	add	al, bh	; [next_val_r]
  2565 0000121B D0D8                    	rcr	al, 1
  2566 0000121D 2C80                    	sub	al, 80h
  2567 0000121F 66C1E008                	shl	ax, 8
  2568 00001223 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  2569                                  	
  2570                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2571 00001225 09C9                    	or	ecx, ecx
  2572 00001227 7582                    	jnz	short lff16s_1
  2573 00001229 E952FBFFFF              	jmp	lff16s_3
  2574                                  
  2575                                  load_16khz_mono_16_bit:
  2576                                  	; 15/11/2023
  2577                                  	; 13/11/2023
  2578 0000122E F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2579                                  					; last of the file?
  2580 00001235 7402                    	jz	short lff16m2_0		; no
  2581 00001237 F9                      	stc
  2582 00001238 C3                      	retn
  2583                                  
  2584                                  lff16m2_0:
  2585                                  	; 01/12/2024
  2586                                  	; edi = audio buffer address
  2587 00001239 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2588                                          ;mov	edx, [loadsize]
  2589                                  
  2590                                  	; esi = buffer address
  2591                                  	;; edx = buffer size
  2592                                  
  2593                                  	; load file into memory
  2594                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000123E 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001244 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001246 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000124C B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001251 CD40                <1>  int 40h
  2595 00001253 7255                    	jc	short lff16m2_7 ; error !
  2596                                  
  2597                                  	; 01/12/2024
  2598 00001255 A3[D87F0000]            	mov	[count], eax
  2599                                  	;;;
  2600                                  	; 07/12/2024
  2601                                  	;mov	edi, audio_buffer
  2602                                  	;;;
  2603 0000125A D1E8                    	shr	eax, 1
  2604 0000125C 7505                    	jnz	short lff16m2_8
  2605 0000125E E935FBFFFF              	jmp	lff16_eof
  2606                                  
  2607                                  lff16m2_8:
  2608 00001263 89C1                    	mov	ecx, eax  ; word count
  2609                                  lff16m2_1:
  2610 00001265 66AD                    	lodsw
  2611 00001267 66AB                    	stosw		; original sample (left channel)
  2612 00001269 66AB                    	stosw		; original sample (right channel)
  2613 0000126B 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  2614                                  	;mov	[previous_val], ax
  2615 0000126E 89C3                    	mov	ebx, eax
  2616 00001270 31C0                    	xor	eax, eax
  2617 00001272 49                      	dec	ecx
  2618 00001273 7403                    	jz	short lff16m2_2
  2619 00001275 668B06                  	mov	ax, [esi]
  2620                                  lff16m2_2:
  2621 00001278 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  2622 0000127B 89C5                    	mov	ebp, eax	; [next_val]
  2623                                  	;add	ax, [previous_val]
  2624 0000127D 6601D8                  	add	ax, bx
  2625 00001280 66D1D8                  	rcr	ax, 1
  2626 00001283 89C2                    	mov	edx, eax ; this is temporary interpolation value
  2627                                  	;add	ax, [previous_val]
  2628 00001285 6601D8                  	add	ax, bx
  2629 00001288 66D1D8                  	rcr	ax, 1
  2630 0000128B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2631 0000128E 66AB                    	stosw		; this is 1st interpolated sample (L)
  2632 00001290 66AB                    	stosw		; this is 1st interpolated sample (R)
  2633 00001292 89E8                    	mov	eax, ebp
  2634 00001294 6601D0                  	add	ax, dx
  2635 00001297 66D1D8                  	rcr	ax, 1
  2636 0000129A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2637 0000129D 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2638 0000129F 66AB                    	stosw		; this is 2nd interpolated sample (R)
  2639                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2640 000012A1 09C9                    	or	ecx, ecx
  2641 000012A3 75C0                    	jnz	short lff16m2_1
  2642 000012A5 E9D6FAFFFF              	jmp	lff16m2_3
  2643                                  
  2644                                  lff16m2_7:
  2645                                  lff16s2_7:
  2646 000012AA E9F2FAFFFF              	jmp	lff16m2_5  ; error
  2647                                  
  2648                                  load_16khz_stereo_16_bit:
  2649                                  	; 16/11/2023
  2650                                  	; 15/11/2023
  2651                                  	; 13/11/2023
  2652 000012AF F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2653                                  					; last of the file?
  2654 000012B6 7402                    	jz	short lff16s2_0		; no
  2655 000012B8 F9                      	stc
  2656 000012B9 C3                      	retn
  2657                                  
  2658                                  lff16s2_0:
  2659                                  	; 01/12/2024
  2660                                  	; edi = audio buffer address
  2661 000012BA BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2662                                          ;mov	edx, [loadsize]
  2663                                  
  2664                                  	; esi = buffer address
  2665                                  	;; edx = buffer size
  2666                                  
  2667                                  	; load file into memory
  2668                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 000012BF 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 000012C5 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 000012C7 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000012CD B803000000          <1>  mov eax, %1
    97                              <1> 
    98 000012D2 CD40                <1>  int 40h
  2669 000012D4 72D4                    	jc	short lff16s2_7 ; error !
  2670                                  
  2671                                  	; 01/12/2024
  2672 000012D6 A3[D87F0000]            	mov	[count], eax
  2673                                  	;;;
  2674                                  	; 07/12/2024
  2675                                  	;mov	edi, audio_buffer
  2676                                  	;;;
  2677 000012DB C1E802                  	shr	eax, 2
  2678 000012DE 7505                    	jnz	short lff16s2_8
  2679 000012E0 E9B3FAFFFF              	jmp	lff16_eof
  2680                                  
  2681                                  lff16s2_8:
  2682 000012E5 89C1                    	mov	ecx, eax  ; dword count
  2683                                  lff16s2_1:
  2684 000012E7 66AD                    	lodsw
  2685 000012E9 66AB                    	stosw		; original sample (L)
  2686 000012EB 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  2687 000012EE 66A3[0F230000]          	mov	[previous_val_l], ax
  2688 000012F4 66AD                    	lodsw
  2689 000012F6 66AB                    	stosw		; original sample (R)
  2690 000012F8 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  2691 000012FB 66A3[11230000]          	mov	[previous_val_r], ax
  2692 00001301 31D2                    	xor	edx, edx
  2693 00001303 31C0                    	xor	eax, eax
  2694                                  	; 16/11/2023
  2695 00001305 49                      	dec	ecx
  2696 00001306 7407                    	jz	short lff16s2_2
  2697 00001308 668B06                  	mov	ax, [esi]
  2698 0000130B 668B5602                	mov	dx, [esi+2]
  2699                                  lff16s2_2:
  2700 0000130F 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  2701                                  	;mov	[next_val_l], ax
  2702 00001312 89C5                    	mov	ebp, eax
  2703 00001314 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  2704 00001317 668915[15230000]        	mov	[next_val_r], dx
  2705 0000131E 660305[0F230000]        	add	ax, [previous_val_l]
  2706 00001325 66D1D8                  	rcr	ax, 1
  2707 00001328 89C2                    	mov	edx, eax ; this is temporary interpolation value (L)
  2708 0000132A 660305[0F230000]        	add	ax, [previous_val_l]
  2709 00001331 66D1D8                  	rcr	ax, 1
  2710 00001334 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  2711 00001337 66AB                    	stosw		; this is 1st interpolated sample (L)
  2712 00001339 66A1[15230000]          	mov	ax, [next_val_r]
  2713 0000133F 660305[11230000]        	add	ax, [previous_val_r]
  2714 00001346 66D1D8                  	rcr	ax, 1
  2715 00001349 89C3                    	mov	ebx, eax ; this is temporary interpolation value (R)
  2716 0000134B 660305[11230000]        	add	ax, [previous_val_r]
  2717 00001352 66D1D8                  	rcr	ax, 1
  2718 00001355 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2719 00001358 66AB                    	stosw		; this is 1st interpolated sample (R)
  2720                                  	;mov	ax, [next_val_l]
  2721 0000135A 89E8                    	mov	eax, ebp
  2722 0000135C 6601D0                  	add	ax, dx
  2723 0000135F 66D1D8                  	rcr	ax, 1
  2724 00001362 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2725 00001365 66AB                    	stosw		; this is 2nd interpolated sample (L)
  2726 00001367 66A1[15230000]          	mov	ax, [next_val_r]
  2727 0000136D 6601D8                  	add	ax, bx
  2728 00001370 66D1D8                  	rcr	ax, 1
  2729 00001373 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2730 00001376 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  2731                                  	
  2732                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2733 00001378 09C9                    	or	ecx, ecx
  2734 0000137A 0F8567FFFFFF            	jnz	lff16s2_1
  2735 00001380 E9FBF9FFFF              	jmp	lff16s2_3
  2736                                  
  2737                                  ; .....................
  2738                                  
  2739                                  load_24khz_mono_8_bit:
  2740                                  	; 15/11/2023
  2741 00001385 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2742                                  					; last of the file?
  2743 0000138C 7402                    	jz	short lff24m_0		; no
  2744 0000138E F9                      	stc
  2745 0000138F C3                      	retn
  2746                                  
  2747                                  lff24m_0:
  2748                                  	; 01/12/2024
  2749                                  	; edi = audio buffer address
  2750 00001390 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2751                                          ;mov	edx, [loadsize]
  2752                                  
  2753                                  	; esi = buffer address
  2754                                  	;; edx = buffer size
  2755                                  
  2756                                  	; load file into memory
  2757                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001395 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 0000139B 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 0000139D 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000013A3 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 000013A8 CD40                <1>  int 40h
  2758 000013AA 723B                    	jc	short lff24m_7 ; error !
  2759                                  
  2760                                  	; 01/12/2024
  2761 000013AC A3[D87F0000]            	mov	[count], eax
  2762                                  	;;;
  2763                                  	; 07/12/2024
  2764                                  	;mov	edi, audio_buffer
  2765                                  	;;;
  2766 000013B1 21C0                    	and	eax, eax
  2767 000013B3 7505                    	jnz	short lff24m_8
  2768 000013B5 E9DEF9FFFF              	jmp	lff24_eof
  2769                                  
  2770                                  lff24m_8:
  2771 000013BA 89C1                    	mov	ecx, eax	; byte count
  2772                                  lff24m_1:
  2773 000013BC AC                      	lodsb
  2774                                  	;mov	[previous_val], al
  2775 000013BD 88C3                    	mov	bl, al
  2776 000013BF 2C80                    	sub	al, 80h
  2777 000013C1 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2778 000013C5 66AB                    	stosw		; original sample (left channel)
  2779 000013C7 66AB                    	stosw		; original sample (right channel)
  2780                                  	;xor	eax, eax
  2781 000013C9 B080                    	mov	al, 80h
  2782 000013CB 49                      	dec	ecx
  2783 000013CC 7402                    	jz	short lff24m_2
  2784 000013CE 8A06                    	mov	al, [esi]
  2785                                  lff24m_2:
  2786                                  	;;mov	[next_val], al
  2787                                  	;mov	bh, al
  2788                                  	;add	al, [previous_val]
  2789 000013D0 00D8                    	add	al, bl
  2790 000013D2 D0D8                    	rcr	al, 1
  2791 000013D4 2C80                    	sub	al, 80h
  2792 000013D6 66C1E008                	shl	ax, 8
  2793 000013DA 66AB                    	stosw		; this is interpolated sample (L)
  2794 000013DC 66AB                    	stosw		; this is interpolated sample (R)
  2795                                  	
  2796                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2797 000013DE 09C9                    	or	ecx, ecx
  2798 000013E0 75DA                    	jnz	short lff24m_1
  2799 000013E2 E999F9FFFF              	jmp	lff24_3
  2800                                  
  2801                                  lff24m_7:
  2802                                  lff24s_7:
  2803 000013E7 E9B5F9FFFF              	jmp	lff24_5  ; error
  2804                                  
  2805                                  load_24khz_stereo_8_bit:
  2806                                  	; 15/11/2023
  2807 000013EC F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2808                                  					; last of the file?
  2809 000013F3 7402                    	jz	short lff24s_0		; no
  2810 000013F5 F9                      	stc
  2811 000013F6 C3                      	retn
  2812                                  
  2813                                  lff24s_0:
  2814                                  	; 01/12/2024
  2815                                  	; edi = audio buffer address
  2816 000013F7 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2817                                          ;mov	edx, [loadsize]
  2818                                  
  2819                                  	; esi = buffer address
  2820                                  	;; edx = buffer size
  2821                                  
  2822                                  	; load file into memory
  2823                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 000013FC 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001402 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001404 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000140A B803000000          <1>  mov eax, %1
    97                              <1> 
    98 0000140F CD40                <1>  int 40h
  2824 00001411 72D4                    	jc	short lff24s_7 ; error !
  2825                                  
  2826                                  	; 01/12/2024
  2827 00001413 A3[D87F0000]            	mov	[count], eax
  2828                                  	;;;
  2829                                  	; 07/12/2024
  2830                                  	;mov	edi, audio_buffer
  2831                                  	;;;
  2832 00001418 D1E8                    	shr	eax, 1
  2833 0000141A 7505                    	jnz	short lff24s_8
  2834 0000141C E977F9FFFF              	jmp	lff24_eof
  2835                                  
  2836                                  lff24s_8:
  2837 00001421 89C1                    	mov	ecx, eax  ; word count
  2838                                  lff24s_1:
  2839 00001423 AC                      	lodsb
  2840 00001424 A2[0F230000]            	mov	[previous_val_l], al
  2841 00001429 2C80                    	sub	al, 80h
  2842 0000142B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2843 0000142F 66AB                    	stosw		; original sample (L)
  2844 00001431 AC                      	lodsb
  2845 00001432 A2[11230000]            	mov	[previous_val_r], al
  2846 00001437 2C80                    	sub	al, 80h
  2847 00001439 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2848 0000143D 66AB                    	stosw		; original sample (R)
  2849                                  
  2850                                  	;xor	eax, eax
  2851 0000143F 66B88080                	mov	ax, 8080h
  2852 00001443 49                      	dec	ecx
  2853 00001444 7403                    	jz	short lff24s_2
  2854                                  		; convert 8 bit sample to 16 bit sample
  2855 00001446 668B06                  	mov	ax, [esi]
  2856                                  lff24s_2:
  2857                                  	;;mov	[next_val_l], al
  2858                                  	;;mov	[next_val_r], ah
  2859                                  	;mov	bx, ax
  2860 00001449 88E7                    	mov	bh, ah
  2861 0000144B 0205[0F230000]          	add	al, [previous_val_l]
  2862 00001451 D0D8                    	rcr	al, 1
  2863                                  	;mov	dl, al
  2864 00001453 2C80                    	sub	al, 80h
  2865 00001455 66C1E008                	shl	ax, 8
  2866 00001459 66AB                    	stosw		; this is interpolated sample (L)
  2867 0000145B 88F8                    	mov	al, bh	; [next_val_r]
  2868 0000145D 0205[11230000]          	add	al, [previous_val_r]
  2869 00001463 D0D8                    	rcr	al, 1
  2870                                  	;mov	dh, al
  2871 00001465 2C80                    	sub	al, 80h
  2872 00001467 66C1E008                	shl	ax, 8
  2873 0000146B 66AB                    	stosw		; this is interpolated sample (R)
  2874                                  		
  2875                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2876 0000146D 09C9                    	or	ecx, ecx
  2877 0000146F 75B2                    	jnz	short lff24s_1
  2878 00001471 E90AF9FFFF              	jmp	lff24_3
  2879                                  
  2880                                  load_24khz_mono_16_bit:
  2881                                  	; 15/11/2023
  2882 00001476 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2883                                  					; last of the file?
  2884 0000147D 7402                    	jz	short lff24m2_0		; no
  2885 0000147F F9                      	stc
  2886 00001480 C3                      	retn
  2887                                  
  2888                                  lff24m2_0:
  2889                                  	; 01/12/2024
  2890                                  	; edi = audio buffer address
  2891 00001481 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2892                                          ;mov	edx, [loadsize]
  2893                                  
  2894                                  	; esi = buffer address
  2895                                  	;; edx = buffer size
  2896                                  
  2897                                  	; load file into memory
  2898                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001486 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 0000148C 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 0000148E 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001494 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001499 CD40                <1>  int 40h
  2899 0000149B 7237                    	jc	short lff24m2_7 ; error !
  2900                                  
  2901                                  	; 01/12/2024
  2902 0000149D A3[D87F0000]            	mov	[count], eax
  2903                                  	;;;
  2904                                  	; 07/12/2024
  2905                                  	;mov	edi, audio_buffer
  2906                                  	;;;
  2907 000014A2 D1E8                    	shr	eax, 1
  2908 000014A4 7505                    	jnz	short lff24m2_8
  2909 000014A6 E9EDF8FFFF              	jmp	lff24_eof
  2910                                  
  2911                                  lff24m2_8:
  2912 000014AB 89C1                    	mov	ecx, eax  ; word count
  2913                                  lff24m2_1:
  2914 000014AD 66AD                    	lodsw
  2915 000014AF 66AB                    	stosw		; original sample (left channel)
  2916 000014B1 66AB                    	stosw		; original sample (right channel)
  2917 000014B3 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  2918                                  	;mov	[previous_val], ax
  2919                                  	;mov	ebx, eax
  2920                                  	;xor	eax, eax
  2921 000014B6 31DB                    	xor	ebx, ebx
  2922 000014B8 49                      	dec	ecx
  2923 000014B9 7403                    	jz	short lff24m2_2
  2924                                  	;mov	ax, [esi]
  2925 000014BB 668B1E                  	mov	bx, [esi]
  2926                                  lff24m2_2:
  2927                                  	;add	ah, 80h ; convert sound level 0 to 65535 format
  2928                                  	;mov	ebp, eax	; [next_val]
  2929                                  	;add	ax, [previous_val]
  2930                                  	; ax = [previous_val]
  2931                                  	; bx = [next_val]
  2932 000014BE 6601D8                  	add	ax, bx
  2933 000014C1 66D1D8                  	rcr	ax, 1
  2934 000014C4 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2935 000014C7 66AB                    	stosw		; this is interpolated sample (L)
  2936 000014C9 66AB                    	stosw		; this is interpolated sample (R)
  2937                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2938 000014CB 09C9                    	or	ecx, ecx
  2939 000014CD 75DE                    	jnz	short lff24m2_1
  2940 000014CF E9ACF8FFFF              	jmp	lff24_3
  2941                                  
  2942                                  lff24m2_7:
  2943                                  lff24s2_7:
  2944 000014D4 E9C8F8FFFF              	jmp	lff24_5  ; error
  2945                                  
  2946                                  load_24khz_stereo_16_bit:
  2947                                  	; 16/11/2023
  2948                                  	; 15/11/2023
  2949 000014D9 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2950                                  					; last of the file?
  2951 000014E0 7402                    	jz	short lff24s2_0		; no
  2952 000014E2 F9                      	stc
  2953 000014E3 C3                      	retn
  2954                                  
  2955                                  lff24s2_0:
  2956                                  	; 01/12/2024
  2957                                  	; edi = audio buffer address
  2958 000014E4 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2959                                          ;mov	edx, [loadsize]
  2960                                  
  2961                                  	; esi = buffer address
  2962                                  	;; edx = buffer size
  2963                                  
  2964                                  	; load file into memory
  2965                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 000014E9 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 000014EF 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 000014F1 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000014F7 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 000014FC CD40                <1>  int 40h
  2966 000014FE 72D4                    	jc	short lff24s2_7 ; error !
  2967                                  
  2968                                  	; 01/12/2024
  2969 00001500 A3[D87F0000]            	mov	[count], eax
  2970                                  	;;;
  2971                                  	; 07/12/2024
  2972                                  	;mov	edi, audio_buffer
  2973                                  	;;;
  2974 00001505 C1E802                  	shr	eax, 2
  2975 00001508 7505                    	jnz	short lff24s2_8
  2976 0000150A E989F8FFFF              	jmp	lff24_eof
  2977                                  
  2978                                  lff24s2_8:
  2979 0000150F 89C1                    	mov	ecx, eax  ; dword count
  2980                                  lff24s2_1:
  2981 00001511 66AD                    	lodsw
  2982 00001513 66AB                    	stosw		; original sample (L)
  2983 00001515 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  2984 00001518 66A3[0F230000]          	mov	[previous_val_l], ax
  2985 0000151E 66AD                    	lodsw
  2986 00001520 66AB                    	stosw		; original sample (R)
  2987 00001522 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  2988                                  	;mov	[previous_val_r], ax
  2989 00001525 89C3                    	mov	ebx, eax
  2990 00001527 31D2                    	xor	edx, edx
  2991 00001529 31C0                    	xor	eax, eax
  2992                                  	; 16/11/2023
  2993 0000152B 49                      	dec	ecx
  2994 0000152C 7407                    	jz	short lff24s2_2
  2995 0000152E 668B06                  	mov	ax, [esi]
  2996 00001531 668B5602                	mov	dx, [esi+2]
  2997                                  lff24s2_2:
  2998 00001535 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  2999                                  	;;mov	[next_val_l], ax
  3000                                  	;mov	ebp, eax
  3001 00001538 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  3002                                  	;mov	[next_val_r], dx
  3003 0000153B 660305[0F230000]        	add	ax, [previous_val_l]
  3004 00001542 66D1D8                  	rcr	ax, 1
  3005 00001545 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  3006 00001548 66AB                    	stosw		; this is interpolated sample (L)
  3007                                  	;mov	ax, [next_val_r]
  3008 0000154A 89D0                    	mov	eax, edx
  3009                                  	;add	ax, [previous_val_r]
  3010 0000154C 6601D8                  	add	ax, bx
  3011 0000154F 66D1D8                  	rcr	ax, 1
  3012 00001552 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3013 00001555 66AB                    	stosw		; this is interpolated sample (R)
  3014                                  	
  3015                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3016 00001557 09C9                    	or	ecx, ecx
  3017 00001559 75B6                    	jnz	short lff24s2_1
  3018 0000155B E920F8FFFF              	jmp	lff24_3
  3019                                  
  3020                                  ; .....................
  3021                                  
  3022                                  load_32khz_mono_8_bit:
  3023                                  	; 15/11/2023
  3024 00001560 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3025                                  					; last of the file?
  3026 00001567 7402                    	jz	short lff32m_0		; no
  3027 00001569 F9                      	stc
  3028 0000156A C3                      	retn
  3029                                  
  3030                                  lff32m_0:
  3031                                  	; 01/12/2024
  3032                                  	; edi = audio buffer address
  3033 0000156B BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3034                                          ;mov	edx, [loadsize]
  3035                                  
  3036                                  	; esi = buffer address
  3037                                  	;; edx = buffer size
  3038                                  
  3039                                  	; load file into memory
  3040                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001570 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001576 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001578 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000157E B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001583 CD40                <1>  int 40h
  3041 00001585 7247                    	jc	short lff32m_7 ; error !
  3042                                  
  3043                                  	; 01/12/2024
  3044 00001587 A3[D87F0000]            	mov	[count], eax
  3045                                  	;;;
  3046                                  	; 07/12/2024
  3047                                  	;mov	edi, audio_buffer
  3048                                  	;;;
  3049 0000158C 21C0                    	and	eax, eax
  3050 0000158E 7505                    	jnz	short lff32m_8
  3051 00001590 E903F8FFFF              	jmp	lff32_eof
  3052                                  
  3053                                  lff32m_8:
  3054 00001595 89C1                    	mov	ecx, eax	; byte count
  3055                                  lff32m_1:
  3056 00001597 AC                      	lodsb
  3057                                  	;mov	[previous_val], al
  3058 00001598 88C3                    	mov	bl, al
  3059 0000159A 2C80                    	sub	al, 80h
  3060 0000159C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3061 000015A0 66AB                    	stosw		; original sample (left channel)
  3062 000015A2 66AB                    	stosw		; original sample (right channel)
  3063                                  	;xor	eax, eax
  3064 000015A4 B080                    	mov	al, 80h
  3065 000015A6 49                      	dec	ecx
  3066 000015A7 7402                    	jz	short lff32m_2
  3067 000015A9 8A06                    	mov	al, [esi]
  3068                                  lff32m_2:
  3069                                  	;;mov	[next_val], al
  3070                                  	;mov	bh, al
  3071                                  	;add	al, [previous_val]
  3072 000015AB 00D8                    	add	al, bl
  3073 000015AD D0D8                    	rcr	al, 1
  3074 000015AF 2C80                    	sub	al, 80h
  3075 000015B1 66C1E008                	shl	ax, 8
  3076 000015B5 66AB                    	stosw		; this is interpolated sample (L)
  3077 000015B7 66AB                    	stosw		; this is interpolated sample (R)
  3078                                  	
  3079                                  	; different than 8-16-24 kHZ !
  3080                                  	; 'original-interpolated-original' trio samples
  3081 000015B9 E30E                    	jecxz	lff32m_3
  3082                                  
  3083 000015BB AC                      	lodsb
  3084 000015BC 2C80                    	sub	al, 80h
  3085 000015BE 66C1E008                	shl	ax, 8
  3086 000015C2 66AB                    	stosw		; original sample (left channel)
  3087 000015C4 66AB                    	stosw		; original sample (right channel)
  3088                                  
  3089                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3090 000015C6 49                      	dec	ecx
  3091 000015C7 75CE                    	jnz	short lff32m_1
  3092                                  lff32m_3:
  3093 000015C9 E9B2F7FFFF              	jmp	lff32_3
  3094                                  
  3095                                  lff32m_7:
  3096                                  lff32s_7:
  3097 000015CE E9CEF7FFFF              	jmp	lff32_5  ; error
  3098                                  
  3099                                  load_32khz_stereo_8_bit:
  3100                                  	; 15/11/2023
  3101 000015D3 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3102                                  					; last of the file?
  3103 000015DA 7402                    	jz	short lff32s_0		; no
  3104 000015DC F9                      	stc
  3105 000015DD C3                      	retn
  3106                                  
  3107                                  lff32s_0:
  3108                                  	; 01/12/2024
  3109                                  	; edi = audio buffer address
  3110 000015DE BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3111                                          ;mov	edx, [loadsize]
  3112                                  
  3113                                  	; esi = buffer address
  3114                                  	;; edx = buffer size
  3115                                  
  3116                                  	; load file into memory
  3117                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 000015E3 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 000015E9 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 000015EB 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000015F1 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 000015F6 CD40                <1>  int 40h
  3118 000015F8 72D4                    	jc	short lff32s_7 ; error !
  3119                                  
  3120                                  	; 01/12/2024
  3121 000015FA A3[D87F0000]            	mov	[count], eax
  3122                                  	;;;
  3123                                  	; 07/12/2024
  3124                                  	;mov	edi, audio_buffer
  3125                                  	;;;
  3126 000015FF D1E8                    	shr	eax, 1
  3127 00001601 7505                    	jnz	short lff32s_8
  3128 00001603 E990F7FFFF              	jmp	lff32_eof
  3129                                  
  3130                                  lff32s_8:
  3131 00001608 89C1                    	mov	ecx, eax  ; word count
  3132                                  lff32s_1:
  3133 0000160A AC                      	lodsb
  3134 0000160B A2[0F230000]            	mov	[previous_val_l], al
  3135 00001610 2C80                    	sub	al, 80h
  3136 00001612 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3137 00001616 66AB                    	stosw		; original sample (L)
  3138 00001618 AC                      	lodsb
  3139 00001619 A2[11230000]            	mov	[previous_val_r], al
  3140 0000161E 2C80                    	sub	al, 80h
  3141 00001620 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3142 00001624 66AB                    	stosw		; original sample (R)
  3143                                  
  3144                                  	;xor	eax, eax
  3145 00001626 66B88080                	mov	ax, 8080h
  3146 0000162A 49                      	dec	ecx
  3147 0000162B 7403                    	jz	short lff32s_2
  3148                                  		; convert 8 bit sample to 16 bit sample
  3149 0000162D 668B06                  	mov	ax, [esi]
  3150                                  lff32s_2:
  3151                                  	;;mov	[next_val_l], al
  3152                                  	;;mov	[next_val_r], ah
  3153                                  	;mov	bx, ax
  3154 00001630 88E7                    	mov	bh, ah
  3155 00001632 0205[0F230000]          	add	al, [previous_val_l]
  3156 00001638 D0D8                    	rcr	al, 1
  3157                                  	;mov	dl, al
  3158 0000163A 2C80                    	sub	al, 80h
  3159 0000163C 66C1E008                	shl	ax, 8
  3160 00001640 66AB                    	stosw		; this is interpolated sample (L)
  3161 00001642 88F8                    	mov	al, bh	; [next_val_r]
  3162 00001644 0205[11230000]          	add	al, [previous_val_r]
  3163 0000164A D0D8                    	rcr	al, 1
  3164                                  	;mov	dh, al
  3165 0000164C 2C80                    	sub	al, 80h
  3166 0000164E 66C1E008                	shl	ax, 8
  3167 00001652 66AB                    	stosw		; this is interpolated sample (R)
  3168                                  
  3169                                  	; different than 8-16-24 kHZ !
  3170                                  	; 'original-interpolated-original' trio samples
  3171 00001654 E315                    	jecxz	lff32s_3
  3172                                  
  3173 00001656 AC                      	lodsb
  3174 00001657 2C80                    	sub	al, 80h
  3175 00001659 66C1E008                	shl	ax, 8
  3176 0000165D 66AB                    	stosw		; original sample (left channel)
  3177                                  
  3178 0000165F AC                      	lodsb
  3179 00001660 2C80                    	sub	al, 80h
  3180 00001662 66C1E008                	shl	ax, 8
  3181 00001666 66AB                    	stosw		; original sample (right channel)
  3182                                  		
  3183                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3184 00001668 49                      	dec	ecx
  3185 00001669 759F                    	jnz	short lff32s_1
  3186                                  lff32s_3:
  3187 0000166B E910F7FFFF              	jmp	lff32_3
  3188                                  
  3189                                  load_32khz_mono_16_bit:
  3190                                  	; 15/11/2023
  3191 00001670 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3192                                  					; last of the file?
  3193 00001677 7402                    	jz	short lff32m2_0		; no
  3194 00001679 F9                      	stc
  3195 0000167A C3                      	retn
  3196                                  
  3197                                  lff32m2_0:
  3198                                  	; 01/12/2024
  3199                                  	; edi = audio buffer address
  3200 0000167B BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3201                                          ;mov	edx, [loadsize]
  3202                                  
  3203                                  	; esi = buffer address
  3204                                  	;; edx = buffer size
  3205                                  
  3206                                  	; load file into memory
  3207                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001680 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001686 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001688 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000168E B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001693 CD40                <1>  int 40h
  3208 00001695 723E                    	jc	short lff32m2_7 ; error !
  3209                                  
  3210                                  	; 01/12/2024
  3211 00001697 A3[D87F0000]            	mov	[count], eax
  3212                                  	;;;
  3213                                  	; 07/12/2024
  3214                                  	;mov	edi, audio_buffer
  3215                                  	;;;
  3216 0000169C D1E8                    	shr	eax, 1
  3217 0000169E 7505                    	jnz	short lff32m2_8
  3218 000016A0 E9F3F6FFFF              	jmp	lff32_eof
  3219                                  
  3220                                  lff32m2_8:
  3221 000016A5 89C1                    	mov	ecx, eax  ; word count
  3222                                  lff32m2_1:
  3223 000016A7 66AD                    	lodsw
  3224 000016A9 66AB                    	stosw		; original sample (left channel)
  3225 000016AB 66AB                    	stosw		; original sample (right channel)
  3226 000016AD 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  3227                                  	;mov	[previous_val], ax
  3228                                  	;mov	ebx, eax
  3229                                  	;xor	eax, eax
  3230 000016B0 31DB                    	xor	ebx, ebx
  3231 000016B2 49                      	dec	ecx
  3232 000016B3 7403                    	jz	short lff32m2_2
  3233                                  	;mov	ax, [esi]
  3234 000016B5 668B1E                  	mov	bx, [esi]
  3235                                  lff32m2_2:
  3236                                  	;add	ah, 80h ; convert sound level 0 to 65535 format
  3237                                  	;mov	ebp, eax ; [next_val]
  3238                                  	;add	ax, [previous_val]
  3239                                  	; ax = [previous_val]
  3240                                  	; bx = [next_val]
  3241 000016B8 6601D8                  	add	ax, bx
  3242 000016BB 66D1D8                  	rcr	ax, 1
  3243 000016BE 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3244 000016C1 66AB                    	stosw		; this is interpolated sample (L)
  3245 000016C3 66AB                    	stosw		; this is interpolated sample (R)
  3246                                  
  3247                                  	; different than 8-16-24 kHZ !
  3248                                  	; 'original-interpolated-original' trio samples 
  3249 000016C5 E309                    	jecxz	lff32m2_3
  3250                                  
  3251 000016C7 66AD                    	lodsw
  3252 000016C9 66AB                    	stosw		; original sample (left channel)
  3253 000016CB 66AB                    	stosw		; original sample (right channel)
  3254                                  
  3255                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3256 000016CD 49                      	dec	ecx
  3257 000016CE 75D7                    	jnz	short lff32m2_1
  3258                                  lff32m2_3:
  3259 000016D0 E9ABF6FFFF              	jmp	lff32_3
  3260                                  
  3261                                  lff32m2_7:
  3262                                  lff32s2_7:
  3263 000016D5 E9C7F6FFFF              	jmp	lff32_5  ; error
  3264                                  
  3265                                  load_32khz_stereo_16_bit:
  3266                                  	; 16/11/2023
  3267                                  	; 15/11/2023
  3268 000016DA F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3269                                  					; last of the file?
  3270 000016E1 7402                    	jz	short lff32s2_0		; no
  3271 000016E3 F9                      	stc
  3272 000016E4 C3                      	retn
  3273                                  
  3274                                  lff32s2_0:
  3275                                  	; 01/12/2024
  3276                                  	; edi = audio buffer address
  3277 000016E5 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3278                                          ;mov	edx, [loadsize]
  3279                                  
  3280                                  	; esi = buffer address
  3281                                  	;; edx = buffer size
  3282                                  
  3283                                  	; load file into memory
  3284                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 000016EA 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 000016F0 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 000016F2 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000016F8 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 000016FD CD40                <1>  int 40h
  3285 000016FF 72D4                    	jc	short lff32s2_7 ; error !
  3286                                  
  3287                                  	; 01/12/2024
  3288 00001701 A3[D87F0000]            	mov	[count], eax
  3289                                  	;;;
  3290                                  	; 07/12/2024
  3291                                  	;mov	edi, audio_buffer
  3292                                  	;;;
  3293 00001706 C1E802                  	shr	eax, 2
  3294 00001709 7505                    	jnz	short lff32s2_8
  3295 0000170B E988F6FFFF              	jmp	lff32_eof
  3296                                  
  3297                                  lff32s2_8:
  3298 00001710 89C1                    	mov	ecx, eax ; dword count
  3299                                  lff32s2_1:
  3300 00001712 66AD                    	lodsw
  3301 00001714 66AB                    	stosw		; original sample (L)
  3302 00001716 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  3303 00001719 66A3[0F230000]          	mov	[previous_val_l], ax
  3304 0000171F 66AD                    	lodsw
  3305 00001721 66AB                    	stosw		; original sample (R)
  3306 00001723 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  3307                                  	;mov	[previous_val_r], ax
  3308 00001726 89C3                    	mov	ebx, eax
  3309 00001728 31D2                    	xor	edx, edx
  3310 0000172A 31C0                    	xor	eax, eax
  3311                                  	; 16/11/2023
  3312 0000172C 49                      	dec	ecx
  3313 0000172D 7407                    	jz	short lff32s2_2
  3314 0000172F 668B06                  	mov	ax, [esi]
  3315 00001732 668B5602                	mov	dx, [esi+2]
  3316                                  lff32s2_2:
  3317 00001736 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  3318                                  	;;mov	[next_val_l], ax
  3319                                  	;mov	ebp, eax
  3320 00001739 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  3321                                  	;mov	[next_val_r], dx
  3322 0000173C 660305[0F230000]        	add	ax, [previous_val_l]
  3323 00001743 66D1D8                  	rcr	ax, 1
  3324 00001746 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  3325 00001749 66AB                    	stosw		; this is interpolated sample (L)
  3326                                  	;mov	ax, [next_val_r]
  3327 0000174B 89D0                    	mov	eax, edx
  3328                                  	;add	ax, [previous_val_r]
  3329 0000174D 6601D8                  	add	ax, bx
  3330 00001750 66D1D8                  	rcr	ax, 1
  3331 00001753 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3332 00001756 66AB                    	stosw		; this is interpolated sample (R)
  3333                                  
  3334                                  	; different than 8-16-24 kHZ !
  3335                                  	; 'original-interpolated-original' trio samples
  3336 00001758 E30B                    	jecxz	lff32s2_3
  3337                                  
  3338 0000175A 66AD                    	lodsw
  3339 0000175C 66AB                    	stosw	; original sample (L)
  3340 0000175E 66AD                    	lodsw
  3341 00001760 66AB                    	stosw	; original sample (R)
  3342                                  	
  3343                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3344 00001762 49                      	dec	ecx
  3345 00001763 75AD                    	jnz	short lff32s2_1
  3346                                  lff32s2_3:
  3347 00001765 E916F6FFFF              	jmp	lff32_3
  3348                                  
  3349                                  ; .....................
  3350                                  
  3351                                  load_22khz_mono_8_bit:
  3352                                  	; 16/11/2023
  3353 0000176A F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3354                                  					; last of the file?
  3355 00001771 7402                    	jz	short lff22m_0		; no
  3356 00001773 F9                      	stc
  3357 00001774 C3                      	retn
  3358                                  
  3359                                  lff22m_0:
  3360                                  	; 01/12/2024
  3361                                  	; edi = audio buffer address
  3362 00001775 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3363                                          ;mov	edx, [loadsize]
  3364                                  
  3365                                  	; esi = buffer address
  3366                                  	;; edx = buffer size
  3367                                  
  3368                                  	; load file into memory
  3369                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000177A 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001780 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001782 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001788 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 0000178D CD40                <1>  int 40h
  3370 0000178F 725D                    	jc	short lff22m_7 ; error !
  3371                                  
  3372                                  	; 01/12/2024
  3373 00001791 A3[D87F0000]            	mov	[count], eax
  3374                                  	;;;
  3375                                  	; 07/12/2024
  3376                                  	;mov	edi, audio_buffer
  3377                                  	;;;
  3378 00001796 21C0                    	and	eax, eax
  3379 00001798 7505                    	jnz	short lff22m_8
  3380 0000179A E9F9F5FFFF              	jmp	lff22_eof
  3381                                  
  3382                                  lff22m_8:
  3383 0000179F 89C1                    	mov	ecx, eax	; byte count
  3384                                  lff22m_9:
  3385 000017A1 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  3386 000017A6 C605[17230000]03        	mov	byte [faz], 3  ; 3 steps/phases
  3387                                  lff22m_1:
  3388                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  3389 000017AD AC                      	lodsb
  3390 000017AE B280                    	mov	dl, 80h
  3391 000017B0 49                      	dec	ecx
  3392 000017B1 7402                    	jz	short lff22m_2_1
  3393 000017B3 8A16                    	mov	dl, [esi]
  3394                                  lff22m_2_1:	
  3395                                  	; al = [previous_val]
  3396                                  	; dl = [next_val]
  3397 000017B5 E80F060000              	call	interpolating_3_8bit_mono ; 1 of 17
  3398 000017BA E32D                    	jecxz	lff22m_3
  3399                                  lff22m_2_2:
  3400 000017BC AC                      	lodsb
  3401 000017BD B280                    	mov	dl, 80h
  3402 000017BF 49                      	dec	ecx
  3403 000017C0 7402                    	jz	short lff22m_2_3
  3404 000017C2 8A16                    	mov	dl, [esi]
  3405                                  lff22m_2_3:
  3406 000017C4 E884060000               	call	interpolating_2_8bit_mono ; 2 of 17 .. 6 of 17
  3407 000017C9 E31E                    	jecxz	lff22m_3
  3408 000017CB 4D                      	dec	ebp
  3409 000017CC 75EE                    	jnz	short lff22m_2_2
  3410                                  
  3411 000017CE A0[17230000]            	mov	al, [faz]
  3412 000017D3 FEC8                    	dec	al
  3413 000017D5 74CA                    	jz	short lff22m_9
  3414 000017D7 FE0D[17230000]          	dec	byte [faz]
  3415 000017DD BD04000000              	mov	ebp, 4
  3416 000017E2 FEC8                    	dec	al
  3417 000017E4 75C7                    	jnz	short lff22m_1 ; 3:2:2:2:2 ; 7-11 of 17
  3418 000017E6 45                      	inc	ebp ; 5
  3419 000017E7 EBC4                    	jmp	short lff22m_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  3420                                  
  3421                                  lff22m_3:
  3422                                  lff22s_3:
  3423 000017E9 E992F5FFFF              	jmp	lff22_3	; padfill
  3424                                  		; (put zeros in the remain words of the buffer)
  3425                                  lff22m_7:
  3426                                  lff22s_7:
  3427 000017EE E9AEF5FFFF              	jmp	lff22_5  ; error
  3428                                  
  3429                                  load_22khz_stereo_8_bit:
  3430                                  	; 16/11/2023
  3431 000017F3 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3432                                  					; last of the file?
  3433 000017FA 7402                    	jz	short lff22s_0		; no
  3434 000017FC F9                      	stc
  3435 000017FD C3                      	retn
  3436                                  
  3437                                  lff22s_0:
  3438                                  	; 01/12/2024
  3439                                  	; edi = audio buffer address
  3440 000017FE BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3441                                          ;mov	edx, [loadsize]
  3442                                  
  3443                                  	; esi = buffer address
  3444                                  	;; edx = buffer size
  3445                                  
  3446                                  	; load file into memory
  3447                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001803 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001809 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 0000180B 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001811 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001816 CD40                <1>  int 40h
  3448 00001818 72D4                    	jc	short lff22s_7 ; error !
  3449                                  
  3450                                  	; 01/12/2024
  3451 0000181A A3[D87F0000]            	mov	[count], eax
  3452                                  	;;;
  3453                                  	; 07/12/2024
  3454                                  	;mov	edi, audio_buffer
  3455                                  	;;;
  3456 0000181F D1E8                    	shr	eax, 1
  3457 00001821 7505                    	jnz	short lff22s_8
  3458 00001823 E970F5FFFF              	jmp	lff22_eof
  3459                                  
  3460                                  lff22s_8:
  3461 00001828 89C1                    	mov	ecx, eax	; word count
  3462                                  lff22s_9:
  3463 0000182A BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  3464 0000182F C605[17230000]03        	mov	byte [faz], 3  ; 3 steps/phase
  3465                                  lff22s_1:
  3466                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  3467 00001836 66AD                    	lodsw
  3468 00001838 66BA8080                	mov	dx, 8080h
  3469 0000183C 49                      	dec	ecx
  3470 0000183D 7403                    	jz	short lff22s_2_1
  3471 0000183F 668B16                  	mov	dx, [esi]
  3472                                  lff22s_2_1:	
  3473                                  	; al = [previous_val_l]
  3474                                  	; ah = [previous_val_r]
  3475                                  	; dl = [next_val_l]
  3476                                  	; dh = [next_val_r]
  3477 00001842 E8B3050000              	call	interpolating_3_8bit_stereo ; 1 of 17
  3478 00001847 E3A0                    	jecxz	lff22s_3
  3479                                  lff22s_2_2:
  3480 00001849 66AD                    	lodsw
  3481 0000184B 66BA8080                	mov	dx, 8080h
  3482 0000184F 49                      	dec	ecx
  3483 00001850 7403                    	jz	short lff22s_2_3
  3484 00001852 668B16                  	mov	dx, [esi]
  3485                                  lff22s_2_3:
  3486 00001855 E810060000               	call	interpolating_2_8bit_stereo ; 2 of 17 .. 6 of 17
  3487 0000185A E38D                    	jecxz	lff22s_3
  3488 0000185C 4D                      	dec	ebp
  3489 0000185D 75EA                    	jnz	short lff22s_2_2
  3490                                  
  3491 0000185F A0[17230000]            	mov	al, [faz]
  3492 00001864 FEC8                    	dec	al
  3493 00001866 74C2                    	jz	short lff22s_9
  3494 00001868 FE0D[17230000]          	dec	byte [faz]
  3495 0000186E BD04000000              	mov	ebp, 4
  3496 00001873 FEC8                    	dec	al
  3497 00001875 75BF                    	jnz	short lff22s_1 ; 3:2:2:2:2 ; 7-11 of 17
  3498 00001877 45                      	inc	ebp ; 5
  3499 00001878 EBBC                    	jmp	short lff22s_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  3500                                  
  3501                                  load_22khz_mono_16_bit:
  3502                                  	; 16/11/2023
  3503 0000187A F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3504                                  					; last of the file?
  3505 00001881 7402                    	jz	short lff22m2_0		; no
  3506 00001883 F9                      	stc
  3507 00001884 C3                      	retn
  3508                                  
  3509                                  lff22m2_0:
  3510                                  	; 01/12/2024
  3511                                  	; edi = audio buffer address
  3512 00001885 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3513                                          ;mov	edx, [loadsize]
  3514                                  
  3515                                  	; esi = buffer address
  3516                                  	;; edx = buffer size
  3517                                  
  3518                                  	; load file into memory
  3519                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000188A 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001890 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001892 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001898 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 0000189D CD40                <1>  int 40h
  3520 0000189F 7261                    	jc	short lff22m2_7 ; error !
  3521                                  
  3522                                  	; 01/12/2024
  3523 000018A1 A3[D87F0000]            	mov	[count], eax
  3524                                  	;;;
  3525                                  	; 07/12/2024
  3526                                  	;mov	edi, audio_buffer
  3527                                  	;;;
  3528 000018A6 D1E8                    	shr	eax, 1
  3529 000018A8 7505                    	jnz	short lff22m2_8
  3530 000018AA E9E9F4FFFF              	jmp	lff22_eof
  3531                                  
  3532                                  lff22m2_8:
  3533 000018AF 89C1                    	mov	ecx, eax	; word count
  3534                                  lff22m2_9:
  3535 000018B1 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  3536 000018B6 C605[17230000]03        	mov	byte [faz], 3  ; 3 steps/phases
  3537                                  lff22m2_1:
  3538                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  3539 000018BD 66AD                    	lodsw
  3540 000018BF 31D2                    	xor	edx, edx
  3541 000018C1 49                      	dec	ecx
  3542 000018C2 7403                    	jz	short lff22m2_2_1
  3543 000018C4 668B16                  	mov	dx, [esi]
  3544                                  lff22m2_2_1:	
  3545                                  	; ax = [previous_val]
  3546                                  	; dx = [next_val]
  3547 000018C7 E8CF050000              	call	interpolating_3_16bit_mono ; 1 of 17
  3548 000018CC E32F                    	jecxz	lff22m2_3
  3549                                  lff22m2_2_2:
  3550 000018CE 66AD                    	lodsw
  3551 000018D0 31D2                    	xor	edx, edx
  3552 000018D2 49                      	dec	ecx
  3553 000018D3 7403                    	jz	short lff22m2_2_3
  3554 000018D5 668B16                  	mov	dx, [esi]
  3555                                  lff22m2_2_3:
  3556 000018D8 E851060000               	call	interpolating_2_16bit_mono ; 2 of 17 .. 6 of 17
  3557 000018DD E31E                    	jecxz	lff22m2_3
  3558 000018DF 4D                      	dec	ebp
  3559 000018E0 75EC                    	jnz	short lff22m2_2_2
  3560                                  
  3561 000018E2 A0[17230000]            	mov	al, [faz]
  3562 000018E7 FEC8                    	dec	al
  3563 000018E9 74C6                    	jz	short lff22m2_9
  3564 000018EB FE0D[17230000]          	dec	byte [faz]
  3565 000018F1 BD04000000              	mov	ebp, 4
  3566 000018F6 FEC8                    	dec	al
  3567 000018F8 75C3                    	jnz	short lff22m2_1 ; 3:2:2:2:2 ; 7-11 of 17
  3568 000018FA 45                      	inc	ebp ; 5
  3569 000018FB EBC0                    	jmp	short lff22m2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  3570                                  
  3571                                  lff22m2_3:
  3572                                  lff22s2_3:
  3573 000018FD E97EF4FFFF              	jmp	lff22_3	; padfill
  3574                                  		; (put zeros in the remain words of the buffer)
  3575                                  lff22m2_7:
  3576                                  lff22s2_7:
  3577 00001902 E99AF4FFFF              	jmp	lff22_5  ; error
  3578                                  
  3579                                  load_22khz_stereo_16_bit:
  3580                                  	; 16/11/2023
  3581 00001907 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3582                                  					; last of the file?
  3583 0000190E 7402                    	jz	short lff22s2_0		; no
  3584 00001910 F9                      	stc
  3585 00001911 C3                      	retn
  3586                                  
  3587                                  lff22s2_0:
  3588                                  	; 01/12/2024
  3589                                  	; edi = audio buffer address
  3590 00001912 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3591                                          ;mov	edx, [loadsize]
  3592                                  
  3593                                  	; esi = buffer address
  3594                                  	;; edx = buffer size
  3595                                  
  3596                                  	; load file into memory
  3597                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001917 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 0000191D 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 0000191F 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001925 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 0000192A CD40                <1>  int 40h
  3598 0000192C 72D4                    	jc	short lff22s2_7 ; error !
  3599                                  
  3600                                  	; 01/12/2024
  3601 0000192E A3[D87F0000]            	mov	[count], eax
  3602                                  	;;;
  3603                                  	; 07/12/2024
  3604                                  	;mov	edi, audio_buffer
  3605                                  	;;;
  3606 00001933 C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  3607 00001936 7505                    	jnz	short lff22s2_8
  3608 00001938 E95BF4FFFF              	jmp	lff22_eof
  3609                                  
  3610                                  lff22s2_8:
  3611 0000193D 89C1                    	mov	ecx, eax	; dword count
  3612                                  lff22s2_9:
  3613 0000193F BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  3614 00001944 C605[17230000]03        	mov	byte [faz], 3  ; 3 steps/phase
  3615                                  lff22s2_1:
  3616                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  3617 0000194B 66AD                    	lodsw
  3618 0000194D 89C3                    	mov	ebx, eax
  3619 0000194F 66AD                    	lodsw
  3620 00001951 8B16                    	mov	edx, [esi]
  3621 00001953 668915[13230000]        	mov	[next_val_l], dx
  3622                                  	; 26/11/2023
  3623 0000195A C1EA10                  	shr	edx, 16
  3624 0000195D 49                      	dec	ecx
  3625 0000195E 7509                    	jnz	short lff22s2_2_1
  3626 00001960 31D2                    	xor	edx, edx ; 0
  3627 00001962 668915[13230000]        	mov	[next_val_l], dx
  3628                                  lff22s2_2_1:
  3629                                  	; bx = [previous_val_l]
  3630                                  	; ax = [previous_val_r]
  3631                                  	; [next_val_l]
  3632                                  	; dx = [next_val_r]
  3633 00001969 E85D050000              	call	interpolating_3_16bit_stereo ; 1 of 17 
  3634 0000196E E38D                    	jecxz	lff22s2_3
  3635                                  lff22s2_2_2:
  3636 00001970 66AD                    	lodsw
  3637 00001972 89C3                    	mov	ebx, eax
  3638 00001974 66AD                    	lodsw
  3639 00001976 8B16                    	mov	edx, [esi]
  3640 00001978 668915[13230000]        	mov	[next_val_l], dx
  3641                                  	; 26/11/2023
  3642 0000197F C1EA10                  	shr	edx, 16
  3643 00001982 49                      	dec	ecx
  3644 00001983 7509                    	jnz	short lff22s2_2_3
  3645 00001985 31D2                    	xor	edx, edx ; 0
  3646 00001987 668915[13230000]        	mov	[next_val_l], dx
  3647                                  lff22s2_2_3:
  3648 0000198E E8B3050000               	call	interpolating_2_16bit_stereo ; 2 of 17 .. 6 of 17
  3649 00001993 E31E                    	jecxz	lff22s2_2_4
  3650                                  
  3651 00001995 4D                      	dec	ebp
  3652 00001996 75D8                    	jnz	short lff22s2_2_2
  3653                                  
  3654 00001998 A0[17230000]            	mov	al, [faz]
  3655 0000199D FEC8                    	dec	al
  3656 0000199F 749E                    	jz	short lff22s2_9
  3657 000019A1 FE0D[17230000]          	dec	byte [faz]
  3658 000019A7 BD04000000              	mov	ebp, 4
  3659 000019AC FEC8                    	dec	al
  3660 000019AE 759B                    	jnz	short lff22s2_1 ; 3:2:2:2:2 ; 7-11 of 17
  3661 000019B0 45                      	inc	ebp ; 5
  3662 000019B1 EB98                    	jmp	short lff22s2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  3663                                  
  3664                                  lff22s2_2_4:
  3665                                  	; 26/11/2023
  3666 000019B3 E9C8F3FFFF              	jmp	lff22_3	; padfill
  3667                                  
  3668                                  ; .....................
  3669                                  
  3670                                  load_11khz_mono_8_bit:
  3671                                  	; 18/11/2023
  3672 000019B8 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3673                                  					; last of the file?
  3674 000019BF 7402                    	jz	short lff11m_0		; no
  3675 000019C1 F9                      	stc
  3676 000019C2 C3                      	retn
  3677                                  
  3678                                  lff11m_0:
  3679                                  	; 01/12/2024
  3680                                  	; edi = audio buffer address
  3681 000019C3 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3682                                          ;mov	edx, [loadsize]
  3683                                  
  3684                                  	; esi = buffer address
  3685                                  	;; edx = buffer size
  3686                                  
  3687                                  	; load file into memory
  3688                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 000019C8 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 000019CE 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 000019D0 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000019D6 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 000019DB CD40                <1>  int 40h
  3689 000019DD 7247                    	jc	short lff11m_7 ; error !
  3690                                  
  3691                                  	; 01/12/2024
  3692 000019DF A3[D87F0000]            	mov	[count], eax
  3693                                  	;;;
  3694                                  	; 07/12/2024
  3695                                  	;mov	edi, audio_buffer
  3696                                  	;;;
  3697 000019E4 21C0                    	and	eax, eax
  3698 000019E6 7505                    	jnz	short lff11m_8
  3699 000019E8 E9ABF3FFFF              	jmp	lff11_eof
  3700                                  
  3701                                  lff11m_8:
  3702 000019ED 89C1                    	mov	ecx, eax		; byte count
  3703                                  lff11m_9:
  3704 000019EF BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  3705                                  lff11m_1:
  3706                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  3707 000019F4 AC                      	lodsb
  3708 000019F5 B280                    	mov	dl, 80h
  3709 000019F7 49                      	dec	ecx
  3710 000019F8 7402                    	jz	short lff11m_2_1
  3711 000019FA 8A16                    	mov	dl, [esi]
  3712                                  lff11m_2_1:	
  3713                                  	; al = [previous_val]
  3714                                  	; dl = [next_val]
  3715 000019FC E876050000              	call	interpolating_5_8bit_mono
  3716 00001A01 E328                    	jecxz	lff11m_3
  3717                                  lff11m_2_2:
  3718 00001A03 AC                      	lodsb
  3719 00001A04 B280                    	mov	dl, 80h
  3720 00001A06 49                      	dec	ecx
  3721 00001A07 7402                    	jz	short lff11m_2_3
  3722 00001A09 8A16                    	mov	dl, [esi]
  3723                                  lff11m_2_3:
  3724 00001A0B E873060000               	call	interpolating_4_8bit_mono
  3725 00001A10 E319                    	jecxz	lff11m_3
  3726                                  
  3727 00001A12 4D                      	dec	ebp
  3728 00001A13 74DA                    	jz	short lff11m_9
  3729                                  
  3730 00001A15 AC                      	lodsb
  3731 00001A16 B280                    	mov	dl, 80h
  3732 00001A18 49                      	dec	ecx
  3733 00001A19 7402                    	jz	short lff11m_2_4
  3734 00001A1B 8A16                    	mov	dl, [esi]
  3735                                  lff11m_2_4:
  3736 00001A1D E861060000              	call	interpolating_4_8bit_mono
  3737 00001A22 E307                    	jecxz	lff11m_3
  3738 00001A24 EBCE                    	jmp	short lff11m_1
  3739                                  
  3740                                  lff11m_7:
  3741                                  lff11s_7:
  3742 00001A26 E976F3FFFF              	jmp	lff11_5  ; error
  3743                                  
  3744                                  lff11m_3:
  3745                                  lff11s_3:
  3746 00001A2B E950F3FFFF              	jmp	lff11_3	; padfill
  3747                                  		; (put zeros in the remain words of the buffer)
  3748                                  
  3749                                  load_11khz_stereo_8_bit:
  3750                                  	; 18/11/2023
  3751 00001A30 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3752                                  					; last of the file?
  3753 00001A37 7402                    	jz	short lff11s_0		; no
  3754 00001A39 F9                      	stc
  3755 00001A3A C3                      	retn
  3756                                  
  3757                                  lff11s_0:
  3758                                  	; 01/12/2024
  3759                                  	; edi = audio buffer address
  3760 00001A3B BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3761                                          ;mov	edx, [loadsize]
  3762                                  
  3763                                  	; esi = buffer address
  3764                                  	;; edx = buffer size
  3765                                  
  3766                                  	; load file into memory
  3767                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001A40 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001A46 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001A48 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001A4E B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001A53 CD40                <1>  int 40h
  3768 00001A55 72CF                    	jc	short lff11s_7 ; error !
  3769                                  
  3770                                  	; 01/12/2024
  3771 00001A57 A3[D87F0000]            	mov	[count], eax
  3772                                  	;;;
  3773                                  	; 07/12/2024
  3774                                  	;mov	edi, audio_buffer
  3775                                  	;;;
  3776 00001A5C D1E8                    	shr	eax, 1
  3777 00001A5E 7505                    	jnz	short lff11s_8
  3778 00001A60 E933F3FFFF              	jmp	lff11_eof
  3779                                  
  3780                                  lff11s_8:
  3781 00001A65 89C1                    	mov	ecx, eax	; word count
  3782                                  lff11s_9:
  3783 00001A67 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  3784                                  lff11s_1:
  3785                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  3786 00001A6C 66AD                    	lodsw
  3787 00001A6E 66BA8080                	mov	dx, 8080h
  3788 00001A72 49                      	dec	ecx
  3789 00001A73 7403                    	jz	short lff11s_2_1
  3790 00001A75 668B16                  	mov	dx, [esi]
  3791                                  lff11s_2_1:	
  3792                                  	; al = [previous_val_l]
  3793                                  	; ah = [previous_val_r]
  3794                                  	; dl = [next_val_l]
  3795                                  	; dh = [next_val_r]
  3796 00001A78 E859050000              	call	interpolating_5_8bit_stereo
  3797 00001A7D E3AC                    	jecxz	lff11s_3
  3798                                  lff11s_2_2:
  3799 00001A7F 66AD                    	lodsw
  3800 00001A81 66BA8080                	mov	dx, 8080h
  3801 00001A85 49                      	dec	ecx
  3802 00001A86 7403                    	jz	short lff11s_2_3
  3803 00001A88 668B16                  	mov	dx, [esi]
  3804                                  lff11s_2_3:
  3805 00001A8B E832060000               	call	interpolating_4_8bit_stereo
  3806 00001A90 E399                    	jecxz	lff11s_3
  3807                                  	
  3808 00001A92 4D                      	dec	ebp
  3809 00001A93 74D2                    	jz	short lff11s_9
  3810                                  
  3811 00001A95 66AD                    	lodsw
  3812 00001A97 66BA8080                	mov	dx, 8080h
  3813 00001A9B 49                      	dec	ecx
  3814 00001A9C 7403                    	jz	short lff11s_2_4
  3815 00001A9E 668B16                  	mov	dx, [esi]
  3816                                  lff11s_2_4:
  3817 00001AA1 E81C060000              	call	interpolating_4_8bit_stereo
  3818 00001AA6 E383                    	jecxz	lff11s_3
  3819 00001AA8 EBC2                    	jmp	short lff11s_1
  3820                                  
  3821                                  load_11khz_mono_16_bit:
  3822                                  	; 18/11/2023
  3823 00001AAA F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3824                                  					; last of the file?
  3825 00001AB1 7402                    	jz	short lff11m2_0		; no
  3826 00001AB3 F9                      	stc
  3827 00001AB4 C3                      	retn
  3828                                  
  3829                                  lff11m2_0:
  3830                                  	; 01/12/2024
  3831                                  	; edi = audio buffer address
  3832 00001AB5 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3833                                          ;mov	edx, [loadsize]
  3834                                  
  3835                                  	; esi = buffer address
  3836                                  	;; edx = buffer size
  3837                                  
  3838                                  	; load file into memory
  3839                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001ABA 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001AC0 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001AC2 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001AC8 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001ACD CD40                <1>  int 40h
  3840 00001ACF 724D                    	jc	short lff11m2_7 ; error !
  3841                                  
  3842                                  	; 01/12/2024
  3843 00001AD1 A3[D87F0000]            	mov	[count], eax
  3844                                  	;;;
  3845                                  	; 07/12/2024
  3846                                  	;mov	edi, audio_buffer
  3847                                  	;;;
  3848 00001AD6 D1E8                    	shr	eax, 1
  3849 00001AD8 7505                    	jnz	short lff11m2_8
  3850 00001ADA E9B9F2FFFF              	jmp	lff11_eof
  3851                                  
  3852                                  lff11m2_8:
  3853 00001ADF 89C1                    	mov	ecx, eax	; word count
  3854                                  lff11m2_9:
  3855 00001AE1 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  3856                                  lff11m2_1:
  3857                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  3858 00001AE6 66AD                    	lodsw
  3859 00001AE8 31D2                    	xor	edx, edx
  3860 00001AEA 49                      	dec	ecx
  3861 00001AEB 7403                    	jz	short lff11m2_2_1
  3862 00001AED 668B16                  	mov	dx, [esi]
  3863                                  lff11m2_2_1:	
  3864                                  	; ax = [previous_val]
  3865                                  	; dx = [next_val]
  3866 00001AF0 E83A060000              	call	interpolating_5_16bit_mono
  3867 00001AF5 E362                    	jecxz	lff11m2_3
  3868                                  lff11m2_2_2:
  3869 00001AF7 66AD                    	lodsw
  3870 00001AF9 31D2                    	xor	edx, edx
  3871 00001AFB 49                      	dec	ecx
  3872 00001AFC 7403                    	jz	short lff11m2_2_3
  3873 00001AFE 668B16                  	mov	dx, [esi]
  3874                                  lff11m2_2_3:
  3875 00001B01 E853070000               	call	interpolating_4_16bit_mono
  3876 00001B06 E351                    	jecxz	lff11m2_3
  3877                                  
  3878 00001B08 4D                      	dec	ebp
  3879 00001B09 74D6                    	jz	short lff11m2_9
  3880                                  
  3881 00001B0B 66AD                    	lodsw
  3882 00001B0D 31D2                    	xor	edx, edx
  3883 00001B0F 49                      	dec	ecx
  3884 00001B10 7403                    	jz	short lff11m2_2_4
  3885 00001B12 668B16                  	mov	dx, [esi]
  3886                                  lff11m2_2_4:
  3887 00001B15 E83F070000               	call	interpolating_4_16bit_mono
  3888 00001B1A E33D                    	jecxz	lff11m2_3
  3889 00001B1C EBC8                    	jmp	short lff11m2_1
  3890                                  
  3891                                  lff11m2_7:
  3892                                  lff11s2_7:
  3893 00001B1E E97EF2FFFF              	jmp	lff11_5  ; error
  3894                                  
  3895                                  load_11khz_stereo_16_bit:
  3896                                  	; 18/11/2023
  3897 00001B23 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3898                                  					; last of the file?
  3899 00001B2A 7402                    	jz	short lff11s2_0		; no
  3900 00001B2C F9                      	stc
  3901 00001B2D C3                      	retn
  3902                                  
  3903                                  lff11s2_0:
  3904                                  	; 01/12/2024
  3905                                  	; edi = audio buffer address
  3906 00001B2E BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3907                                          ;mov	edx, [loadsize]
  3908                                  
  3909                                  	; esi = buffer address
  3910                                  	;; edx = buffer size
  3911                                  
  3912                                  	; load file into memory
  3913                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001B33 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001B39 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001B3B 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001B41 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001B46 CD40                <1>  int 40h
  3914 00001B48 72D4                    	jc	short lff11s2_7 ; error !
  3915                                  
  3916                                  	; 01/12/2024
  3917 00001B4A A3[D87F0000]            	mov	[count], eax
  3918                                  	;;;
  3919                                  	; 07/12/2024
  3920                                  	;mov	edi, audio_buffer
  3921                                  	;;;
  3922 00001B4F C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  3923 00001B52 750A                    	jnz	short lff11s2_8
  3924 00001B54 E93FF2FFFF              	jmp	lff11_eof
  3925                                  
  3926                                  lff11m2_3:
  3927                                  lff11s2_3:
  3928 00001B59 E922F2FFFF              	jmp	lff11_3	; padfill
  3929                                  		; (put zeros in the remain words of the buffer)
  3930                                  
  3931                                  lff11s2_8:
  3932 00001B5E 89C1                    	mov	ecx, eax	; dword count
  3933                                  lff11s2_9:
  3934 00001B60 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  3935                                  lff11s2_1:
  3936                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  3937 00001B65 66AD                    	lodsw
  3938 00001B67 89C3                    	mov	ebx, eax
  3939 00001B69 66AD                    	lodsw
  3940 00001B6B 8B16                    	mov	edx, [esi]
  3941 00001B6D 8915[13230000]          	mov	[next_val_l], edx
  3942                                  	; 26/11/2023
  3943 00001B73 C1EA10                  	shr	edx, 16
  3944                                  	;mov	[next_val_r], dx
  3945 00001B76 49                      	dec	ecx
  3946 00001B77 7509                    	jnz	short lff11s2_2_1
  3947 00001B79 31D2                    	xor	edx, edx ; 0
  3948 00001B7B 668915[13230000]        	mov	[next_val_l], dx
  3949                                  	;mov	[next_val_r], dx
  3950                                  lff11s2_2_1:
  3951                                  	; bx = [previous_val_l]
  3952                                  	; ax = [previous_val_r]
  3953                                  	; [next_val_l]
  3954                                  	; dx = [next_val_r]
  3955 00001B82 E803060000              	call	interpolating_5_16bit_stereo
  3956 00001B87 E3D0                    	jecxz	lff11s2_3
  3957                                  lff11s2_2_2:
  3958 00001B89 66AD                    	lodsw
  3959 00001B8B 89C3                    	mov	ebx, eax
  3960 00001B8D 66AD                    	lodsw
  3961 00001B8F 8B16                    	mov	edx, [esi]
  3962 00001B91 668915[13230000]        	mov	[next_val_l], dx
  3963                                  	; 26/11/2023
  3964 00001B98 C1EA10                  	shr	edx, 16
  3965                                  	;mov	[next_val_r], dx
  3966 00001B9B 49                      	dec	ecx
  3967 00001B9C 7509                    	jnz	short lff11s2_2_3
  3968 00001B9E 31D2                    	xor	edx, edx ; 0
  3969 00001BA0 668915[13230000]        	mov	[next_val_l], dx
  3970                                  	;mov	[next_val_r], dx
  3971                                  lff11s2_2_3:
  3972 00001BA7 E8E6060000               	call	interpolating_4_16bit_stereo
  3973 00001BAC E3AB                    	jecxz	lff11s2_3
  3974                                  	
  3975 00001BAE 4D                      	dec	ebp
  3976 00001BAF 74AF                    	jz	short lff11s2_9
  3977                                  
  3978 00001BB1 66AD                    	lodsw
  3979 00001BB3 89C3                    	mov	ebx, eax
  3980 00001BB5 66AD                    	lodsw
  3981 00001BB7 8B16                    	mov	edx, [esi]
  3982 00001BB9 668915[13230000]        	mov	[next_val_l], dx
  3983                                  	; 26/11/2023
  3984 00001BC0 C1EA10                  	shr	edx, 16
  3985                                  	;mov	[next_val_r], dx
  3986 00001BC3 49                      	dec	ecx
  3987 00001BC4 7509                    	jnz	short lff11s2_2_4
  3988 00001BC6 31D2                    	xor	edx, edx ; 0
  3989 00001BC8 668915[13230000]        	mov	[next_val_l], dx
  3990                                  	;mov	[next_val_r], dx
  3991                                  lff11s2_2_4:
  3992 00001BCF E8BE060000               	call	interpolating_4_16bit_stereo
  3993 00001BD4 E383                    	jecxz	lff11s2_3
  3994 00001BD6 EB8D                    	jmp	short lff11s2_1
  3995                                  
  3996                                  ; .....................
  3997                                  
  3998                                  load_44khz_mono_8_bit:
  3999                                  	; 18/11/2023
  4000 00001BD8 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4001                                  					; last of the file?
  4002 00001BDF 7402                    	jz	short lff44m_0		; no
  4003 00001BE1 F9                      	stc
  4004 00001BE2 C3                      	retn
  4005                                  
  4006                                  lff44m_0:
  4007                                  	; 01/12/2024
  4008                                  	; edi = audio buffer address
  4009 00001BE3 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4010                                          ;mov	edx, [loadsize]
  4011                                  
  4012                                  	; esi = buffer address
  4013                                  	;; edx = buffer size
  4014                                  
  4015                                  	; load file into memory
  4016                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001BE8 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001BEE 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001BF0 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001BF6 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001BFB CD40                <1>  int 40h
  4017 00001BFD 7250                    	jc	short lff44m_7 ; error !
  4018                                  
  4019                                  	; 01/12/2024
  4020 00001BFF A3[D87F0000]            	mov	[count], eax
  4021                                  	;;;
  4022                                  	; 07/12/2024
  4023                                  	;mov	edi, audio_buffer
  4024                                  	;;;
  4025 00001C04 21C0                    	and	eax, eax
  4026 00001C06 7505                    	jnz	short lff44m_8
  4027 00001C08 E98BF1FFFF              	jmp	lff44_eof
  4028                                  
  4029                                  lff44m_8:
  4030 00001C0D 89C1                    	mov	ecx, eax	; byte count
  4031                                  lff44m_9:
  4032 00001C0F BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  4033 00001C14 C605[17230000]02        	mov	byte [faz], 2  ; 2 steps/phases
  4034                                  lff44m_1:
  4035                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  4036                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  4037 00001C1B AC                      	lodsb
  4038 00001C1C B280                    	mov	dl, 80h
  4039 00001C1E 49                      	dec	ecx
  4040 00001C1F 7402                    	jz	short lff44m_2_1
  4041 00001C21 8A16                    	mov	dl, [esi]
  4042                                  lff44m_2_1:	
  4043                                  	; al = [previous_val]
  4044                                  	; dl = [next_val]
  4045 00001C23 E825020000              	call	interpolating_2_8bit_mono
  4046 00001C28 E320                    	jecxz	lff44m_3
  4047                                  lff44m_2_2:
  4048 00001C2A AC                      	lodsb
  4049 00001C2B 2C80                    	sub	al, 80h
  4050 00001C2D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4051 00001C31 66AB                    	stosw		; (L)
  4052 00001C33 66AB                    	stosw		; (R)
  4053                                  
  4054 00001C35 49                      	dec	ecx
  4055 00001C36 7412                    	jz	short lff44m_3
  4056 00001C38 4D                      	dec	ebp
  4057 00001C39 75EF                    	jnz	short lff44m_2_2
  4058                                  	
  4059 00001C3B FE0D[17230000]          	dec	byte [faz]
  4060 00001C41 74CC                    	jz	short lff44m_9 
  4061 00001C43 BD0B000000              	mov	ebp, 11
  4062 00001C48 EBD1                    	jmp	short lff44m_1
  4063                                  
  4064                                  lff44m_3:
  4065                                  lff44s_3:
  4066 00001C4A E931F1FFFF              	jmp	lff44_3	; padfill
  4067                                  		; (put zeros in the remain words of the buffer)
  4068                                  lff44m_7:
  4069                                  lff44s_7:
  4070 00001C4F E94DF1FFFF              	jmp	lff44_5  ; error
  4071                                  
  4072                                  load_44khz_stereo_8_bit:
  4073                                  	; 16/11/2023
  4074 00001C54 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4075                                  					; last of the file?
  4076 00001C5B 7402                    	jz	short lff44s_0		; no
  4077 00001C5D F9                      	stc
  4078 00001C5E C3                      	retn
  4079                                  
  4080                                  lff44s_0:
  4081                                  	; 01/12/2024
  4082                                  	; edi = audio buffer address
  4083 00001C5F BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4084                                          ;mov	edx, [loadsize]
  4085                                  
  4086                                  	; esi = buffer address
  4087                                  	;; edx = buffer size
  4088                                  
  4089                                  	; load file into memory
  4090                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001C64 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001C6A 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001C6C 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001C72 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001C77 CD40                <1>  int 40h
  4091 00001C79 72D4                    	jc	short lff44s_7 ; error !
  4092                                  
  4093                                  	; 01/12/2024
  4094 00001C7B A3[D87F0000]            	mov	[count], eax
  4095                                  	;;;
  4096                                  	; 07/12/2024
  4097                                  	;mov	edi, audio_buffer
  4098                                  	;;;
  4099 00001C80 D1E8                    	shr	eax, 1
  4100 00001C82 7505                    	jnz	short lff44s_8
  4101 00001C84 E90FF1FFFF              	jmp	lff44_eof
  4102                                  
  4103                                  lff44s_8:
  4104 00001C89 89C1                    	mov	ecx, eax	; word count
  4105                                  lff44s_9:
  4106 00001C8B BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  4107 00001C90 C605[17230000]02        	mov	byte [faz], 2  ; 2 steps/phase
  4108                                  lff44s_1:
  4109                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  4110                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  4111 00001C97 66AD                    	lodsw
  4112 00001C99 66BA8080                	mov	dx, 8080h
  4113 00001C9D 49                      	dec	ecx
  4114 00001C9E 7403                    	jz	short lff44s_2_1
  4115 00001CA0 668B16                  	mov	dx, [esi]
  4116                                  lff44s_2_1:	
  4117                                  	; al = [previous_val_l]
  4118                                  	; ah = [previous_val_r]
  4119                                  	; dl = [next_val_l]
  4120                                  	; dh = [next_val_r]
  4121 00001CA3 E8C2010000              	call	interpolating_2_8bit_stereo
  4122 00001CA8 E3A0                    	jecxz	lff44s_3
  4123                                  lff44s_2_2:
  4124 00001CAA AC                      	lodsb
  4125 00001CAB 2C80                    	sub	al, 80h
  4126 00001CAD 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4127 00001CB1 66AB                    	stosw		; (L)
  4128 00001CB3 AC                      	lodsb
  4129 00001CB4 2C80                    	sub	al, 80h
  4130 00001CB6 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4131 00001CBA 66AB                    	stosw		; (R)
  4132                                  
  4133 00001CBC 49                      	dec	ecx
  4134 00001CBD 748B                    	jz	short lff44s_3	
  4135 00001CBF 4D                      	dec	ebp
  4136 00001CC0 75E8                    	jnz	short lff44s_2_2
  4137                                  	
  4138 00001CC2 FE0D[17230000]          	dec	byte [faz]
  4139 00001CC8 74C1                    	jz	short lff44s_9 
  4140 00001CCA BD0B000000              	mov	ebp, 11
  4141 00001CCF EBC6                    	jmp	short lff44s_1
  4142                                  
  4143                                  load_44khz_mono_16_bit:
  4144                                  	; 18/11/2023
  4145 00001CD1 F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4146                                  					; last of the file?
  4147 00001CD8 7402                    	jz	short lff44m2_0		; no
  4148 00001CDA F9                      	stc
  4149 00001CDB C3                      	retn
  4150                                  
  4151                                  lff44m2_0:
  4152                                  	; 01/12/2024
  4153                                  	; edi = audio buffer address
  4154 00001CDC BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4155                                          ;mov	edx, [loadsize]
  4156                                  
  4157                                  	; esi = buffer address
  4158                                  	;; edx = buffer size
  4159                                  
  4160                                  	; load file into memory
  4161                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001CE1 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001CE7 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001CE9 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001CEF B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001CF4 CD40                <1>  int 40h
  4162 00001CF6 724D                    	jc	short lff44m2_7 ; error !
  4163                                  
  4164                                  	; 01/12/2024
  4165 00001CF8 A3[D87F0000]            	mov	[count], eax
  4166                                  	;;;
  4167                                  	; 07/12/2024
  4168                                  	;mov	edi, audio_buffer
  4169                                  	;;;
  4170 00001CFD D1E8                    	shr	eax, 1
  4171 00001CFF 7505                    	jnz	short lff44m2_8
  4172 00001D01 E992F0FFFF              	jmp	lff44_eof
  4173                                  
  4174                                  lff44m2_8:
  4175 00001D06 89C1                    	mov	ecx, eax	; word count
  4176                                  lff44m2_9:
  4177 00001D08 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  4178 00001D0D C605[17230000]02        	mov	byte [faz], 2  ; 2 steps/phases
  4179                                  lff44m2_1:
  4180                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  4181                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  4182 00001D14 66AD                    	lodsw
  4183 00001D16 31D2                    	xor	edx, edx
  4184 00001D18 49                      	dec	ecx
  4185 00001D19 7403                    	jz	short lff44m2_2_1
  4186 00001D1B 668B16                  	mov	dx, [esi]
  4187                                  lff44m2_2_1:	
  4188                                  	; ax = [previous_val]
  4189                                  	; dx = [next_val]
  4190 00001D1E E80B020000              	call	interpolating_2_16bit_mono
  4191 00001D23 E31B                    	jecxz	lff44m2_3
  4192                                  lff44m2_2_2:
  4193 00001D25 66AD                    	lodsw
  4194 00001D27 66AB                    	stosw		; (L)eft Channel
  4195 00001D29 66AB                    	stosw		; (R)ight Channel
  4196                                  
  4197 00001D2B 49                      	dec	ecx
  4198 00001D2C 7412                    	jz	short lff44m2_3	
  4199 00001D2E 4D                      	dec	ebp
  4200 00001D2F 75F4                    	jnz	short lff44m2_2_2
  4201                                  	
  4202 00001D31 FE0D[17230000]          	dec	byte [faz]
  4203 00001D37 74CF                    	jz	short lff44m2_9 
  4204 00001D39 BD0B000000              	mov	ebp, 11
  4205 00001D3E EBD4                    	jmp	short lff44m2_1
  4206                                  
  4207                                  lff44m2_3:
  4208                                  lff44s2_3:
  4209 00001D40 E93BF0FFFF              	jmp	lff44_3	; padfill
  4210                                  		; (put zeros in the remain words of the buffer)
  4211                                  lff44m2_7:
  4212                                  lff44s2_7:
  4213 00001D45 E957F0FFFF              	jmp	lff44_5  ; error
  4214                                  
  4215                                  load_44khz_stereo_16_bit:
  4216                                  	; 18/11/2023
  4217 00001D4A F605[527F0000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4218                                  					; last of the file?
  4219 00001D51 7402                    	jz	short lff44s2_0		; no
  4220 00001D53 F9                      	stc
  4221 00001D54 C3                      	retn
  4222                                  
  4223                                  lff44s2_0:
  4224                                  	; 01/12/2024
  4225                                  	; edi = audio buffer address
  4226 00001D55 BE[00800100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4227                                          ;mov	edx, [loadsize]
  4228                                  
  4229                                  	; esi = buffer address
  4230                                  	;; edx = buffer size
  4231                                  
  4232                                  	; load file into memory
  4233                                  	sys 	_read, [filehandle], esi, [loadsize]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00001D5A 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00001D60 89F1                <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00001D62 8B15[C87F0000]      <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00001D68 B803000000          <1>  mov eax, %1
    97                              <1> 
    98 00001D6D CD40                <1>  int 40h
  4234 00001D6F 72D4                    	jc	short lff44s2_7 ; error !
  4235                                  
  4236                                  	; 01/12/2024
  4237 00001D71 A3[D87F0000]            	mov	[count], eax
  4238                                  	;;;
  4239                                  	; 07/12/2024
  4240                                  	;mov	edi, audio_buffer
  4241                                  	;;;
  4242 00001D76 C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  4243 00001D79 7505                    	jnz	short lff44s2_8
  4244 00001D7B E918F0FFFF              	jmp	lff44_eof
  4245                                  
  4246                                  lff44s2_8:
  4247 00001D80 89C1                    	mov	ecx, eax	; dword count
  4248                                  lff44s2_9:
  4249 00001D82 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  4250 00001D87 C605[17230000]02        	mov	byte [faz], 2  ; 2 steps/phase
  4251                                  lff44s2_1:
  4252                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  4253                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  4254 00001D8E 66AD                    	lodsw
  4255 00001D90 89C3                    	mov	ebx, eax
  4256 00001D92 66AD                    	lodsw
  4257                                  	;mov	dx, [esi]
  4258                                  	;mov	[next_val_l], dx
  4259                                  	;mov	dx, [esi+2]
  4260                                  	; 26/11/2023
  4261 00001D94 8B16                    	mov	edx, [esi]
  4262 00001D96 668915[13230000]        	mov	[next_val_l], dx
  4263 00001D9D C1EA10                  	shr	edx, 16
  4264 00001DA0 49                      	dec	ecx
  4265 00001DA1 7509                    	jnz	short lff44s2_2_1
  4266 00001DA3 31D2                    	xor	edx, edx ; 0
  4267 00001DA5 668915[13230000]        	mov	[next_val_l], dx
  4268                                  lff44s2_2_1:
  4269                                  	; bx = [previous_val_l]
  4270                                  	; ax = [previous_val_r]
  4271                                  	; [next_val_l]
  4272                                  	; dx = [next_val_r]
  4273 00001DAC E895010000              	call	interpolating_2_16bit_stereo
  4274 00001DB1 E38D                    	jecxz	lff44s2_3
  4275                                  lff44s2_2_2:
  4276                                  	;movsw		; (L)eft Channel
  4277                                  	;movsw		; (R)ight Channel
  4278 00001DB3 A5                      	movsd
  4279                                  
  4280 00001DB4 49                      	dec	ecx
  4281 00001DB5 7489                    	jz	short lff44s2_3	
  4282 00001DB7 4D                      	dec	ebp
  4283 00001DB8 75F9                    	jnz	short lff44s2_2_2
  4284                                  	
  4285 00001DBA FE0D[17230000]          	dec	byte [faz]
  4286 00001DC0 74C0                    	jz	short lff44s2_9 
  4287 00001DC2 BD0B000000              	mov	ebp, 11
  4288 00001DC7 EBC5                    	jmp	short lff44s2_1
  4289                                  
  4290                                  ; .....................
  4291                                  
  4292                                  interpolating_3_8bit_mono:
  4293                                  	; 16/11/2023
  4294                                  	; al = [previous_val]
  4295                                  	; dl = [next_val]
  4296                                  	; original-interpolated-interpolated
  4297 00001DC9 88C3                    	mov	bl, al
  4298 00001DCB 2C80                    	sub	al, 80h
  4299 00001DCD 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4300 00001DD1 66AB                    	stosw		; original sample (L)
  4301 00001DD3 66AB                    	stosw		; original sample (R)
  4302 00001DD5 88D8                    	mov	al, bl
  4303 00001DD7 00D0                    	add	al, dl
  4304 00001DD9 D0D8                    	rcr	al, 1
  4305 00001DDB 88C7                    	mov	bh, al	; interpolated middle (temporary)
  4306 00001DDD 00D8                    	add	al, bl
  4307 00001DDF D0D8                    	rcr	al, 1
  4308 00001DE1 2C80                    	sub	al, 80h
  4309 00001DE3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4310 00001DE7 66AB                    	stosw		; interpolated sample 1 (L)
  4311 00001DE9 66AB                    	stosw		; interpolated sample 1 (R)
  4312 00001DEB 88F8                    	mov	al, bh
  4313 00001DED 00D0                    	add	al, dl	; [next_val]
  4314 00001DEF D0D8                    	rcr	al, 1
  4315 00001DF1 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4316 00001DF5 66AB                    	stosw		; interpolated sample 2 (L)
  4317 00001DF7 66AB                    	stosw		; interpolated sample 2 (R)
  4318 00001DF9 C3                      	retn
  4319                                  
  4320                                  interpolating_3_8bit_stereo:
  4321                                  	; 16/11/2023
  4322                                  	; al = [previous_val_l]
  4323                                  	; ah = [previous_val_r]
  4324                                  	; dl = [next_val_l]
  4325                                  	; dh = [next_val_r]
  4326                                  	; original-interpolated-interpolated
  4327 00001DFA 89C3                    	mov	ebx, eax
  4328 00001DFC 2C80                    	sub	al, 80h
  4329 00001DFE 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4330 00001E02 66AB                    	stosw		; original sample (L)
  4331 00001E04 88F8                    	mov	al, bh
  4332 00001E06 2C80                    	sub	al, 80h
  4333 00001E08 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4334 00001E0C 66AB                    	stosw		; original sample (R)
  4335 00001E0E 88D8                    	mov	al, bl
  4336 00001E10 00D0                    	add	al, dl	; [next_val_l]
  4337 00001E12 D0D8                    	rcr	al, 1
  4338 00001E14 50                      	push	eax ; *	; al = interpolated middle (L) (temporary)
  4339 00001E15 00D8                    	add	al, bl	; [previous_val_l]
  4340 00001E17 D0D8                    	rcr	al, 1
  4341 00001E19 2C80                    	sub	al, 80h
  4342 00001E1B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4343 00001E1F 66AB                    	stosw		; interpolated sample 1 (L)
  4344 00001E21 88F8                    	mov	al, bh
  4345 00001E23 00F0                    	add	al, dh	; [next_val_r]
  4346 00001E25 D0D8                    	rcr	al, 1
  4347 00001E27 50                      	push	eax ; ** ; al = interpolated middle (R) (temporary)
  4348 00001E28 00F8                    	add	al, bh	; [previous_val_r]
  4349 00001E2A D0D8                    	rcr	al, 1
  4350 00001E2C 2C80                    	sub	al, 80h
  4351 00001E2E 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4352 00001E32 66AB                    	stosw		; interpolated sample 1 (R)
  4353 00001E34 5B                      	pop	ebx ; **
  4354 00001E35 58                      	pop	eax ; *
  4355 00001E36 00D0                    	add	al, dl	; [next_val_l]
  4356 00001E38 D0D8                    	rcr	al, 1
  4357 00001E3A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4358 00001E3E 66AB                    	stosw		; interpolated sample 2 (L)
  4359 00001E40 88D8                    	mov	al, bl
  4360 00001E42 00F0                    	add	al, dh	; [next_val_r]
  4361 00001E44 D0D8                    	rcr	al, 1
  4362 00001E46 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4363 00001E4A 66AB                    	stosw		; interpolated sample 2 (R)
  4364 00001E4C C3                      	retn
  4365                                  
  4366                                  interpolating_2_8bit_mono:
  4367                                  	; 16/11/2023
  4368                                  	; al = [previous_val]
  4369                                  	; dl = [next_val]
  4370                                  	; original-interpolated
  4371 00001E4D 88C3                    	mov	bl, al
  4372 00001E4F 2C80                    	sub	al, 80h
  4373 00001E51 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4374 00001E55 66AB                    	stosw		; original sample (L)
  4375 00001E57 66AB                    	stosw		; original sample (R)
  4376 00001E59 88D8                    	mov	al, bl
  4377 00001E5B 00D0                    	add	al, dl
  4378 00001E5D D0D8                    	rcr	al, 1
  4379 00001E5F 2C80                    	sub	al, 80h
  4380 00001E61 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4381 00001E65 66AB                    	stosw		; interpolated sample (L)
  4382 00001E67 66AB                    	stosw		; interpolated sample (R)
  4383 00001E69 C3                      	retn
  4384                                  
  4385                                  interpolating_2_8bit_stereo:
  4386                                  	; 16/11/2023
  4387                                  	; al = [previous_val_l]
  4388                                  	; ah = [previous_val_r]
  4389                                  	; dl = [next_val_l]
  4390                                  	; dh = [next_val_r]
  4391                                  	; original-interpolated
  4392 00001E6A 89C3                    	mov	ebx, eax
  4393 00001E6C 2C80                    	sub	al, 80h
  4394 00001E6E 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4395 00001E72 66AB                    	stosw		; original sample (L)
  4396 00001E74 88F8                    	mov	al, bh
  4397 00001E76 2C80                    	sub	al, 80h
  4398 00001E78 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4399 00001E7C 66AB                    	stosw		; original sample (R)
  4400 00001E7E 88D8                    	mov	al, bl	; [previous_val_l]
  4401 00001E80 00D0                    	add	al, dl	; [next_val_l]
  4402 00001E82 D0D8                    	rcr	al, 1
  4403 00001E84 2C80                    	sub	al, 80h
  4404 00001E86 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4405 00001E8A 66AB                    	stosw		; interpolated sample (L)
  4406 00001E8C 88F8                    	mov	al, bh
  4407 00001E8E 00F0                    	add	al, dh	; [next_val_r]
  4408 00001E90 D0D8                    	rcr	al, 1
  4409 00001E92 2C80                    	sub	al, 80h
  4410 00001E94 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4411 00001E98 66AB                    	stosw		; interpolated sample (R)
  4412 00001E9A C3                      	retn
  4413                                  
  4414                                  interpolating_3_16bit_mono:
  4415                                  	; 16/11/2023
  4416                                  	; ax = [previous_val]
  4417                                  	; dx = [next_val]
  4418                                  	; original-interpolated-interpolated
  4419                                  
  4420 00001E9B 66AB                    	stosw		; original sample (L)
  4421 00001E9D 66AB                    	stosw		; original sample (R)
  4422 00001E9F 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4423 00001EA2 50                      	push	eax ; *	; [previous_val]
  4424 00001EA3 80C680                  	add	dh, 80h
  4425 00001EA6 6601D0                  	add	ax, dx
  4426 00001EA9 66D1D8                  	rcr	ax, 1
  4427 00001EAC 5B                      	pop	ebx ; *
  4428 00001EAD 93                      	xchg	ebx, eax ; bx  = interpolated middle (temporary)
  4429 00001EAE 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
  4430 00001EB1 66D1D8                  	rcr	ax, 1
  4431 00001EB4 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4432 00001EB7 66AB                    	stosw 		; interpolated sample 1 (L)
  4433 00001EB9 66AB                    	stosw		; interpolated sample 1 (R)
  4434 00001EBB 89D8                    	mov	eax, ebx
  4435 00001EBD 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  4436 00001EC0 66D1D8                  	rcr	ax, 1
  4437 00001EC3 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4438 00001EC6 66AB                    	stosw		; interpolated sample 2 (L)
  4439 00001EC8 66AB                    	stosw		; interpolated sample 2 (R)
  4440 00001ECA C3                      	retn
  4441                                  
  4442                                  interpolating_3_16bit_stereo:
  4443                                  	; 16/11/2023
  4444                                  	; bx = [previous_val_l]
  4445                                  	; ax = [previous_val_r]
  4446                                  	; [next_val_l]
  4447                                  	; dx = [next_val_r]
  4448                                  	; original-interpolated-interpolated
  4449                                  
  4450 00001ECB 93                      	xchg	eax, ebx
  4451 00001ECC 66AB                    	stosw		; original sample (L)
  4452 00001ECE 93                      	xchg	eax, ebx
  4453 00001ECF 66AB                    	stosw		; original sample (R)
  4454 00001ED1 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4455 00001ED4 50                      	push	eax ; *	; [previous_val_r]
  4456 00001ED5 80C780                  	add	bh, 80h
  4457 00001ED8 8005[14230000]80        	add	byte [next_val_l+1], 80h
  4458 00001EDF 66A1[13230000]          	mov	ax, [next_val_l]
  4459 00001EE5 6601D8                  	add	ax, bx	; [previous_val_l]
  4460 00001EE8 66D1D8                  	rcr	ax, 1
  4461 00001EEB 93                      	xchg	eax, ebx ; ax = [previous_val_l]
  4462 00001EEC 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
  4463 00001EEF 66D1D8                  	rcr	ax, 1
  4464 00001EF2 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4465 00001EF5 66AB                    	stosw 		; interpolated sample 1 (L)
  4466 00001EF7 58                      	pop	eax  ; *
  4467 00001EF8 80C680                  	add	dh, 80h ; convert sound level 0 to 65535 format
  4468 00001EFB 52                      	push	edx  ; * ; [next_val_r]
  4469 00001EFC 92                      	xchg	eax, edx
  4470 00001EFD 6601D0                  	add	ax, dx	; [next_val_r] + [previous_val_r]
  4471 00001F00 66D1D8                  	rcr	ax, 1	; / 2
  4472 00001F03 50                      	push	eax ; ** ; interpolated middle (R)
  4473 00001F04 6601D0                  	add	ax, dx	; + [previous_val_r]
  4474 00001F07 66D1D8                  	rcr	ax, 1
  4475 00001F0A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4476 00001F0D 66AB                    	stosw 		; interpolated sample 1 (R)
  4477 00001F0F 66A1[13230000]          	mov	ax, [next_val_l]
  4478 00001F15 6601D8                  	add	ax, bx	; + interpolated middle (L)
  4479 00001F18 66D1D8                  	rcr	ax, 1
  4480 00001F1B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4481 00001F1E 66AB                    	stosw 		; interpolated sample 2 (L)
  4482 00001F20 58                      	pop	eax ; **
  4483 00001F21 5A                      	pop	edx ; *
  4484 00001F22 6601D0                  	add	ax, dx	; interpolated middle + [next_val_r]
  4485 00001F25 66D1D8                  	rcr	ax, 1	; / 2
  4486 00001F28 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4487 00001F2B 66AB                    	stosw 		; interpolated sample 2 (L)
  4488 00001F2D C3                      	retn
  4489                                  
  4490                                  interpolating_2_16bit_mono:
  4491                                  	; 16/11/2023
  4492                                  	; ax = [previous_val]
  4493                                  	; dx = [next_val]
  4494                                  	; original-interpolated
  4495                                  
  4496 00001F2E 66AB                    	stosw		; original sample (L)
  4497 00001F30 66AB                    	stosw		; original sample (R)
  4498 00001F32 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4499 00001F35 80C680                  	add	dh, 80h
  4500 00001F38 6601D0                  	add	ax, dx
  4501 00001F3B 66D1D8                  	rcr	ax, 1
  4502 00001F3E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4503 00001F41 66AB                    	stosw		; interpolated sample (L)
  4504 00001F43 66AB                    	stosw		; interpolated sample (R)
  4505 00001F45 C3                      	retn
  4506                                  
  4507                                  interpolating_2_16bit_stereo:
  4508                                  	; 16/11/2023
  4509                                  	; bx = [previous_val_l]
  4510                                  	; ax = [previous_val_r]
  4511                                  	; [next_val_l]
  4512                                  	; dx = [next_val_r]
  4513                                  	; original-interpolated
  4514                                  
  4515 00001F46 93                      	xchg	eax, ebx
  4516 00001F47 66AB                    	stosw		; original sample (L)
  4517 00001F49 93                      	xchg	eax, ebx
  4518 00001F4A 66AB                    	stosw		; original sample (R)
  4519 00001F4C 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4520 00001F4F 80C680                  	add	dh, 80h
  4521 00001F52 6601D0                  	add	ax, dx	; [previous_val_r] + [next_val_r]
  4522 00001F55 66D1D8                  	rcr	ax, 1	; / 2
  4523 00001F58 50                      	push	eax ; *	; interpolated sample (R)
  4524 00001F59 66A1[13230000]          	mov	ax, [next_val_l]
  4525 00001F5F 80C480                  	add	ah, 80h
  4526 00001F62 80C780                  	add	bh, 80h
  4527 00001F65 6601D8                  	add	ax, bx	; [next_val_l] + [previous_val_l]
  4528 00001F68 66D1D8                  	rcr	ax, 1	; / 2
  4529 00001F6B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4530 00001F6E 66AB                    	stosw 		; interpolated sample (L)
  4531 00001F70 58                      	pop	eax ; *	
  4532 00001F71 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4533 00001F74 66AB                    	stosw 		; interpolated sample (R)
  4534 00001F76 C3                      	retn
  4535                                  
  4536                                  interpolating_5_8bit_mono:
  4537                                  	; 17/11/2023
  4538                                  	; al = [previous_val]
  4539                                  	; dl = [next_val]
  4540                                  	; original-interpltd-interpltd-interpltd-interpltd
  4541 00001F77 88C3                    	mov	bl, al
  4542 00001F79 2C80                    	sub	al, 80h
  4543 00001F7B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4544 00001F7F 66AB                    	stosw		; original sample (L)
  4545 00001F81 66AB                    	stosw		; original sample (R)
  4546 00001F83 88D8                    	mov	al, bl
  4547 00001F85 00D0                    	add	al, dl
  4548 00001F87 D0D8                    	rcr	al, 1
  4549 00001F89 88C7                    	mov	bh, al	; interpolated middle (temporary)
  4550 00001F8B 00D8                    	add	al, bl  ; [previous_val]
  4551 00001F8D D0D8                    	rcr	al, 1 	
  4552 00001F8F 88C6                    	mov	dh, al	; interpolated 1st quarter (temporary)
  4553 00001F91 00D8                    	add	al, bl
  4554 00001F93 D0D8                    	rcr	al, 1
  4555 00001F95 2C80                    	sub	al, 80h
  4556 00001F97 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4557 00001F9B 66AB                    	stosw		; interpolated sample 1 (L)
  4558 00001F9D 66AB                    	stosw		; interpolated sample 1 (R)
  4559 00001F9F 88F8                    	mov	al, bh
  4560 00001FA1 00F0                    	add	al, dh
  4561 00001FA3 D0D8                    	rcr	al, 1
  4562 00001FA5 2C80                    	sub	al, 80h
  4563 00001FA7 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4564 00001FAB 66AB                    	stosw		; interpolated sample 2 (L)
  4565 00001FAD 66AB                    	stosw		; interpolated sample 2 (R)
  4566 00001FAF 88F8                    	mov	al, bh
  4567 00001FB1 00D0                    	add	al, dl	; [next_val]
  4568 00001FB3 D0D8                    	rcr	al, 1
  4569 00001FB5 88C6                    	mov	dh, al	; interpolated 3rd quarter (temporary)
  4570 00001FB7 00F8                    	add	al, bh
  4571 00001FB9 D0D8                    	rcr	al, 1
  4572 00001FBB 2C80                    	sub	al, 80h
  4573 00001FBD 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4574 00001FC1 66AB                    	stosw		; interpolated sample 3 (L)
  4575 00001FC3 66AB                    	stosw		; interpolated sample 3 (R)
  4576 00001FC5 88F0                    	mov	al, dh
  4577 00001FC7 00D0                    	add	al, dl
  4578 00001FC9 D0D8                    	rcr	al, 1
  4579 00001FCB 2C80                    	sub	al, 80h
  4580 00001FCD 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4581 00001FD1 66AB                    	stosw		; interpolated sample 4 (L)
  4582 00001FD3 66AB                    	stosw		; interpolated sample 4 (R)
  4583 00001FD5 C3                      	retn
  4584                                  
  4585                                  interpolating_5_8bit_stereo:
  4586                                  	; 17/11/2023
  4587                                  	; al = [previous_val_l]
  4588                                  	; ah = [previous_val_r]
  4589                                  	; dl = [next_val_l]
  4590                                  	; dh = [next_val_r]
  4591                                  	; original-interpltd-interpltd-interpltd-interpltd
  4592 00001FD6 89C3                    	mov	ebx, eax
  4593 00001FD8 2C80                    	sub	al, 80h
  4594 00001FDA 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4595 00001FDE 66AB                    	stosw		; original sample (L)
  4596 00001FE0 88F8                    	mov	al, bh
  4597 00001FE2 2C80                    	sub	al, 80h
  4598 00001FE4 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4599 00001FE8 66AB                    	stosw		; original sample (R)
  4600 00001FEA 52                      	push	edx ; *
  4601 00001FEB 88D8                    	mov	al, bl
  4602 00001FED 00D0                    	add	al, dl	; [next_val_l]
  4603 00001FEF D0D8                    	rcr	al, 1
  4604 00001FF1 50                      	push	eax ; **	; al = interpolated middle (L) (temporary)
  4605 00001FF2 00D8                    	add	al, bl	; [previous_val_l]
  4606 00001FF4 D0D8                    	rcr	al, 1
  4607 00001FF6 86D8                    	xchg	al, bl
  4608 00001FF8 00D8                    	add	al, bl	; bl = interpolated 1st quarter (L) (temp)
  4609 00001FFA D0D8                    	rcr	al, 1
  4610 00001FFC 2C80                    	sub	al, 80h
  4611 00001FFE 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4612 00002002 66AB                    	stosw		; interpolated sample 1 (L)
  4613 00002004 88F8                    	mov	al, bh
  4614 00002006 00F0                    	add	al, dh	; [next_val_r]
  4615 00002008 D0D8                    	rcr	al, 1
  4616 0000200A 50                      	push	eax ; *** ; al = interpolated middle (R) (temporary)
  4617 0000200B 00F8                    	add	al, bh	; [previous_val_r]
  4618 0000200D D0D8                    	rcr	al, 1
  4619 0000200F 86F8                    	xchg	al, bh
  4620 00002011 00F8                    	add	al, bh	; bh = interpolated 1st quarter (R) (temp)
  4621 00002013 D0D8                    	rcr	al, 1
  4622 00002015 2C80                    	sub	al, 80h
  4623 00002017 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4624 0000201B 66AB                    	stosw		; interpolated sample 1 (R)
  4625 0000201D 5A                      	pop	edx ; ***
  4626 0000201E 58                      	pop	eax ; **	; al = interpolated middle (L) (temporary)
  4627 0000201F 86D8                    	xchg	al, bl	; al = interpolated 1st quarter (L) (temp)
  4628 00002021 00D8                    	add	al, bl	; bl = interpolated middle (L) (temporary)
  4629 00002023 D0D8                    	rcr	al, 1
  4630 00002025 2C80                    	sub	al, 80h
  4631 00002027 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4632 0000202B 66AB                    	stosw		; interpolated sample 2 (L)
  4633 0000202D 88D0                    	mov	al, dl 	; interpolated middle (R) (temporary)
  4634 0000202F 86F8                    	xchg	al, bh	; al = interpolated 1st quarter (R) (temp)
  4635 00002031 00F8                    	add	al, bh	; bh = interpolated middle (R) (temporary)
  4636 00002033 D0D8                    	rcr	al, 1
  4637 00002035 2C80                    	sub	al, 80h
  4638 00002037 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4639 0000203B 66AB                    	stosw		; interpolated sample 2 (R)
  4640 0000203D 5A                      	pop	edx ; *
  4641 0000203E 88D8                    	mov	al, bl	; interpolated middle (L) (temporary)
  4642 00002040 00D0                    	add	al, dl	; [next_val_l]
  4643 00002042 D0D8                    	rcr	al, 1
  4644 00002044 86D8                    	xchg	al, bl	; al = interpolated middle (R) (temporary)
  4645 00002046 00D8                    	add	al, bl	; bl = interpolated 3rd quarter (L) (temp)
  4646 00002048 D0D8                    	rcr	al, 1
  4647 0000204A 2C80                    	sub	al, 80h
  4648 0000204C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4649 00002050 66AB                    	stosw		; interpolated sample 3 (L)
  4650 00002052 88F8                    	mov	al, bh	
  4651 00002054 00F0                    	add	al, dh	; interpolated middle (R) + [next_val_r]
  4652 00002056 D0D8                    	rcr	al, 1
  4653 00002058 86F8                    	xchg	al, bh	; al = interpolated middle (R)
  4654 0000205A 00F8                    	add	al, bh	; bh = interpolated 3rd quarter (R) (temp)
  4655 0000205C D0D8                    	rcr	al, 1
  4656 0000205E 2C80                    	sub	al, 80h
  4657 00002060 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4658 00002064 66AB                    	stosw		; interpolated sample 3 (R)
  4659 00002066 88D8                    	mov	al, bl
  4660 00002068 00D0                    	add	al, dl	; [next_val_l]
  4661 0000206A D0D8                    	rcr	al, 1
  4662 0000206C 2C80                    	sub	al, 80h
  4663 0000206E 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4664 00002072 66AB                    	stosw		; interpolated sample 4 (L)
  4665 00002074 88F8                    	mov	al, bh
  4666 00002076 00F0                    	add	al, dh	; [next_val_r]
  4667 00002078 D0D8                    	rcr	al, 1
  4668 0000207A 2C80                    	sub	al, 80h
  4669 0000207C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4670 00002080 66AB                    	stosw		; interpolated sample 4 (R)
  4671 00002082 C3                      	retn
  4672                                  
  4673                                  interpolating_4_8bit_mono:
  4674                                  	; 17/11/2023
  4675                                  	; al = [previous_val]
  4676                                  	; dl = [next_val]
  4677                                  	; original-interpolated-interpolated-interpolated
  4678 00002083 88C3                    	mov	bl, al
  4679 00002085 2C80                    	sub	al, 80h
  4680 00002087 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4681 0000208B 66AB                    	stosw		; original sample (L)
  4682 0000208D 66AB                    	stosw		; original sample (R)
  4683 0000208F 88D8                    	mov	al, bl
  4684 00002091 00D0                    	add	al, dl	
  4685 00002093 D0D8                    	rcr	al, 1
  4686 00002095 86D8                    	xchg	al, bl  ; al = [previous_val]
  4687 00002097 00D8                    	add	al, bl	; bl = interpolated middle (sample 2)
  4688 00002099 D0D8                    	rcr	al, 1 	
  4689 0000209B 2C80                    	sub	al, 80h
  4690 0000209D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4691 000020A1 66AB                    	stosw		; interpolated sample 1 (L)
  4692 000020A3 66AB                    	stosw		; interpolated sample 1 (R)
  4693 000020A5 88D8                    	mov	al, bl	; interpolated middle (sample 2)
  4694 000020A7 2C80                    	sub	al, 80h
  4695 000020A9 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4696 000020AD 66AB                    	stosw		; interpolated sample 2 (L)
  4697 000020AF 66AB                    	stosw		; interpolated sample 2 (R)
  4698 000020B1 88D8                    	mov	al, bl
  4699 000020B3 00D0                    	add	al, dl	; [next_val]
  4700 000020B5 D0D8                    	rcr	al, 1
  4701 000020B7 2C80                    	sub	al, 80h
  4702 000020B9 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4703 000020BD 66AB                    	stosw		; interpolated sample 3 (L)
  4704 000020BF 66AB                    	stosw		; interpolated sample 3 (R)
  4705 000020C1 C3                      	retn
  4706                                  
  4707                                  interpolating_4_8bit_stereo:
  4708                                  	; 17/11/2023
  4709                                  	; al = [previous_val_l]
  4710                                  	; ah = [previous_val_r]
  4711                                  	; dl = [next_val_l]
  4712                                  	; dh = [next_val_r]	
  4713                                  	; original-interpolated-interpolated-interpolated
  4714 000020C2 89C3                    	mov	ebx, eax
  4715 000020C4 2C80                    	sub	al, 80h
  4716 000020C6 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4717 000020CA 66AB                    	stosw		; original sample (L)
  4718 000020CC 88F8                    	mov	al, bh
  4719 000020CE 2C80                    	sub	al, 80h
  4720 000020D0 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4721 000020D4 66AB                    	stosw		; original sample (R)
  4722 000020D6 88D8                    	mov	al, bl
  4723 000020D8 00D0                    	add	al, dl	; [next_val_l]
  4724 000020DA D0D8                    	rcr	al, 1
  4725 000020DC 86D8                    	xchg	al, bl	; al = [previous_val_l]
  4726 000020DE 00D8                    	add	al, bl	; bl = interpolated middle (L) (sample 2)
  4727 000020E0 D0D8                    	rcr	al, 1
  4728 000020E2 2C80                    	sub	al, 80h
  4729 000020E4 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4730 000020E8 66AB                    	stosw		; interpolated sample 1 (L)
  4731 000020EA 88F8                    	mov	al, bh
  4732 000020EC 00F0                    	add	al, dh	; [next_val_r]
  4733 000020EE D0D8                    	rcr	al, 1
  4734 000020F0 86F8                    	xchg	al, bh	; al = [previous_val_h]
  4735 000020F2 00F8                    	add	al, bh	; bh = interpolated middle (R) (sample 2)
  4736 000020F4 D0D8                    	rcr	al, 1
  4737 000020F6 2C80                    	sub	al, 80h
  4738 000020F8 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4739 000020FC 66AB                    	stosw		; interpolated sample 1 (R)
  4740 000020FE 88D8                    	mov	al, bl	; interpolated middle (L) (sample 2)
  4741 00002100 2C80                    	sub	al, 80h
  4742 00002102 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4743 00002106 66AB                    	stosw		; interpolated sample 2 (L)
  4744 00002108 88F8                    	mov	al, bh	; interpolated middle (L) (sample 2)
  4745 0000210A 2C80                    	sub	al, 80h
  4746 0000210C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4747 00002110 66AB                    	stosw		; interpolated sample 2 (L)
  4748 00002112 88D8                    	mov	al, bl
  4749 00002114 00D0                    	add	al, dl	; [next_val_l]
  4750 00002116 D0D8                    	rcr	al, 1
  4751 00002118 2C80                    	sub	al, 80h
  4752 0000211A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4753 0000211E 66AB                    	stosw		; interpolated sample 3 (L)
  4754 00002120 88F8                    	mov	al, bh
  4755 00002122 00F0                    	add	al, dh	; [next_val_r]
  4756 00002124 D0D8                    	rcr	al, 1
  4757 00002126 2C80                    	sub	al, 80h
  4758 00002128 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4759 0000212C 66AB                    	stosw		; interpolated sample 3 (R)
  4760 0000212E C3                      	retn
  4761                                  
  4762                                  interpolating_5_16bit_mono:
  4763                                  	; 18/11/2023
  4764                                  	; ax = [previous_val]
  4765                                  	; dx = [next_val]
  4766                                  	; original-interpltd-interpltd-interpltd-interpltd
  4767 0000212F 66AB                    	stosw		; original sample (L)
  4768 00002131 66AB                    	stosw		; original sample (R)
  4769 00002133 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4770 00002136 89C3                    	mov	ebx, eax ; [previous_val]
  4771 00002138 80C680                  	add	dh, 80h
  4772 0000213B 6601D0                  	add	ax, dx
  4773 0000213E 66D1D8                  	rcr	ax, 1
  4774 00002141 50                      	push	eax ; *	; interpolated middle (temporary)
  4775 00002142 6601D8                  	add	ax, bx	; interpolated middle + [previous_val] 
  4776 00002145 66D1D8                  	rcr	ax, 1
  4777 00002148 50                      	push	eax ; **	; interpolated 1st quarter (temporary)
  4778 00002149 6601D8                  	add	ax, bx	; 1st quarter + [previous_val]
  4779 0000214C 66D1D8                  	rcr	ax, 1	
  4780 0000214F 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4781 00002152 66AB                    	stosw 		; interpolated sample 1 (L)
  4782 00002154 66AB                    	stosw		; interpolated sample 1 (R)
  4783 00002156 58                      	pop	eax ; **
  4784 00002157 5B                      	pop	ebx ; *
  4785 00002158 6601D8                  	add	ax, bx	; 1st quarter + middle
  4786 0000215B 66D1D8                  	rcr	ax, 1	; / 2
  4787 0000215E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again	
  4788 00002161 66AB                    	stosw		; interpolated sample 2 (L)
  4789 00002163 66AB                    	stosw		; interpolated sample 2 (R)
  4790 00002165 89D8                    	mov	eax, ebx
  4791 00002167 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  4792 0000216A 66D1D8                  	rcr	ax, 1
  4793 0000216D 50                      	push	eax ; *	; interpolated 3rd quarter (temporary)
  4794 0000216E 6601D8                  	add	ax, bx	; + interpolated middle
  4795 00002171 66D1D8                  	rcr	ax, 1
  4796 00002174 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4797 00002177 66AB                    	stosw		; interpolated sample 3 (L)
  4798 00002179 66AB                    	stosw		; interpolated sample 3 (R)
  4799 0000217B 58                      	pop	eax ; *	
  4800 0000217C 6601D0                  	add	ax, dx	; 3rd quarter + [next_val]
  4801 0000217F 66D1D8                  	rcr	ax, 1	; / 2
  4802 00002182 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4803 00002185 66AB                    	stosw		; interpolated sample 4 (L)
  4804 00002187 66AB                    	stosw		; interpolated sample 4 (R)
  4805 00002189 C3                      	retn
  4806                                  
  4807                                  interpolating_5_16bit_stereo:
  4808                                  	; 18/11/2023
  4809                                  	; bx = [previous_val_l]
  4810                                  	; ax = [previous_val_r]
  4811                                  	; [next_val_l]
  4812                                  	; [next_val_r]
  4813                                  	; original-interpltd-interpltd-interpltd-interpltd
  4814 0000218A 51                      	push	ecx ; !
  4815 0000218B 93                      	xchg	eax, ebx
  4816 0000218C 66AB                    	stosw		; original sample (L)
  4817 0000218E 93                      	xchg	eax, ebx
  4818 0000218F 66AB                    	stosw		; original sample (R)
  4819 00002191 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4820 00002194 50                      	push	eax ; *	; [previous_val_r]
  4821 00002195 80C780                  	add	bh, 80h
  4822 00002198 8005[14230000]80        	add	byte [next_val_l+1], 80h
  4823 0000219F 66A1[13230000]          	mov	ax, [next_val_l]
  4824 000021A5 6601D8                  	add	ax, bx	; [previous_val_l]
  4825 000021A8 66D1D8                  	rcr	ax, 1
  4826 000021AB 89C1                    	mov	ecx, eax ; interpolated middle (L)
  4827 000021AD 6601D8                  	add	ax, bx	
  4828 000021B0 66D1D8                  	rcr	ax, 1
  4829 000021B3 89C2                    	mov	edx, eax ; interpolated 1st quarter (L)
  4830 000021B5 6601D8                  	add	ax, bx	; [previous_val_l]
  4831 000021B8 66D1D8                  	rcr	ax, 1
  4832 000021BB 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4833 000021BE 66AB                    	stosw 		; interpolated sample 1 (L)
  4834 000021C0 89C8                    	mov	eax, ecx
  4835 000021C2 6601D0                  	add	ax, dx	; middle (L) + 1st quarter (L)
  4836 000021C5 66D1D8                  	rcr	ax, 1	; / 2
  4837 000021C8 89C3                    	mov	ebx, eax  ; interpolated sample 2 (L)
  4838 000021CA 5A                      	pop	edx ; *	; [previous_val_r]
  4839 000021CB 89D0                    	mov	eax, edx
  4840 000021CD 8005[16230000]80        	add	byte [next_val_r+1], 80h
  4841 000021D4 660305[15230000]        	add	ax, [next_val_r]
  4842 000021DB 66D1D8                  	rcr	ax, 1
  4843 000021DE 50                      	push	eax ; *	; interpolated middle (R)
  4844 000021DF 6601D0                  	add	ax, dx
  4845 000021E2 66D1D8                  	rcr	ax, 1
  4846 000021E5 50                      	push	eax ; ** ; interpolated 1st quarter (R)
  4847 000021E6 6601D0                  	add	ax, dx	; [previous_val_r]
  4848 000021E9 66D1D8                  	rcr	ax, 1
  4849 000021EC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4850 000021EF 66AB                    	stosw 		; interpolated sample 1 (R)
  4851 000021F1 89D8                    	mov	eax, ebx
  4852 000021F3 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4853 000021F6 66AB                    	stosw 		; interpolated sample 2 (L)
  4854 000021F8 58                      	pop	eax ; **
  4855 000021F9 5A                      	pop	edx ; *
  4856 000021FA 6601D0                  	add	ax, dx	; 1st quarter (R) + middle (R)
  4857 000021FD 66D1D8                  	rcr	ax, 1	; / 2
  4858 00002200 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4859 00002203 66AB                    	stosw 		; interpolated sample 2 (R)
  4860 00002205 89C8                    	mov	eax, ecx
  4861 00002207 660305[13230000]        	add	ax, [next_val_l]
  4862 0000220E 66D1D8                  	rcr	ax, 1
  4863 00002211 50                      	push	eax ; * ; interpolated 3rd quarter (L)
  4864 00002212 6601C8                  	add	ax, cx	; interpolated middle (L)
  4865 00002215 66D1D8                  	rcr	ax, 1
  4866 00002218 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4867 0000221B 66AB                    	stosw 		; interpolated sample 3 (L)
  4868 0000221D 89D0                    	mov	eax, edx
  4869 0000221F 660305[15230000]        	add	ax, [next_val_r]
  4870 00002226 66D1D8                  	rcr	ax, 1
  4871 00002229 50                      	push	eax ; ** ; interpolated 3rd quarter (R)
  4872 0000222A 6601D0                  	add	ax, dx	; interpolated middle (R)
  4873 0000222D 66D1D8                  	rcr	ax, 1
  4874 00002230 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4875 00002233 66AB                    	stosw 		; interpolated sample 3 (R)
  4876 00002235 5B                      	pop	ebx ; **
  4877 00002236 58                      	pop	eax ; *
  4878 00002237 660305[13230000]        	add	ax, [next_val_l]
  4879 0000223E 66D1D8                  	rcr	ax, 1
  4880 00002241 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4881 00002244 66AB                    	stosw 		; interpolated sample 4 (L)
  4882 00002246 89D8                    	mov	eax, ebx
  4883 00002248 660305[15230000]        	add	ax, [next_val_r]
  4884 0000224F 66D1D8                  	rcr	ax, 1
  4885 00002252 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4886 00002255 66AB                    	stosw 		; interpolated sample 4 (R)
  4887 00002257 59                      	pop	ecx ; !
  4888 00002258 C3                      	retn
  4889                                  
  4890                                  interpolating_4_16bit_mono:
  4891                                  	; 18/11/2023
  4892                                  	; ax = [previous_val]
  4893                                  	; dx = [next_val]
  4894                                  	; original-interpolated
  4895                                  
  4896 00002259 66AB                    	stosw		; original sample (L)
  4897 0000225B 66AB                    	stosw		; original sample (R)
  4898 0000225D 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4899 00002260 89C3                    	mov	ebx, eax ; [previous_val]
  4900 00002262 80C680                  	add	dh, 80h
  4901 00002265 6601D0                  	add	ax, dx	; [previous_val] + [next_val]
  4902 00002268 66D1D8                  	rcr	ax, 1
  4903 0000226B 93                      	xchg	eax, ebx
  4904 0000226C 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
  4905 0000226F 66D1D8                  	rcr	ax, 1
  4906 00002272 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4907 00002275 66AB                    	stosw 		; interpolated sample 1 (L)
  4908 00002277 66AB                    	stosw		; interpolated sample 1 (R)
  4909 00002279 89D8                    	mov	eax, ebx ; interpolated middle
  4910 0000227B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4911 0000227E 66AB                    	stosw 		; interpolated sample 2 (L)
  4912 00002280 66AB                    	stosw		; interpolated sample 2 (R)
  4913 00002282 89D8                    	mov	eax, ebx
  4914 00002284 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  4915 00002287 66D1D8                  	rcr	ax, 1
  4916 0000228A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4917 0000228D 66AB                    	stosw		; interpolated sample 3 (L)
  4918 0000228F 66AB                    	stosw		; interpolated sample 3 (R)
  4919 00002291 C3                      	retn
  4920                                  
  4921                                  interpolating_4_16bit_stereo:
  4922                                  	; 18/11/2023
  4923                                  	; bx = [previous_val_l]
  4924                                  	; ax = [previous_val_r]
  4925                                  	; [next_val_l]
  4926                                  	; [next_val_r]
  4927                                  	; original-interpolated-interpolated-interpolated
  4928 00002292 93                      	xchg	eax, ebx
  4929 00002293 66AB                    	stosw		; original sample (L)
  4930 00002295 93                      	xchg	eax, ebx
  4931 00002296 66AB                    	stosw		; original sample (R)
  4932 00002298 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4933 0000229B 89C2                    	mov	edx, eax ; [previous_val_r]
  4934 0000229D 80C780                  	add	bh, 80h
  4935 000022A0 8005[14230000]80        	add	byte [next_val_l+1], 80h
  4936 000022A7 66A1[13230000]          	mov	ax, [next_val_l]
  4937 000022AD 6601D8                  	add	ax, bx	; [previous_val_l]
  4938 000022B0 66D1D8                  	rcr	ax, 1
  4939 000022B3 93                      	xchg	eax, ebx
  4940 000022B4 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
  4941 000022B7 66D1D8                  	rcr	ax, 1
  4942 000022BA 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4943 000022BD 66AB                    	stosw 		; interpolated sample 1 (L)
  4944 000022BF 8005[16230000]80        	add	byte [next_val_r+1], 80h
  4945 000022C6 89D0                    	mov	eax, edx ; [previous_val_r]
  4946 000022C8 660305[15230000]        	add	ax, [next_val_r]
  4947 000022CF 66D1D8                  	rcr	ax, 1
  4948 000022D2 92                      	xchg	eax, edx
  4949 000022D3 6601D0                  	add	ax, dx	; dx = interpolated middle (R)
  4950 000022D6 66D1D8                  	rcr	ax, 1
  4951 000022D9 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4952 000022DC 66AB                    	stosw 		; interpolated sample 1 (R)
  4953 000022DE 89D8                    	mov	eax, ebx
  4954 000022E0 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4955 000022E3 66AB                    	stosw 		; interpolated sample 2 (L)
  4956 000022E5 89D0                    	mov	eax, edx
  4957 000022E7 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4958 000022EA 66AB                    	stosw 		; interpolated sample 2 (R)
  4959 000022EC 89D8                    	mov	eax, ebx
  4960 000022EE 660305[13230000]        	add	ax, [next_val_l]
  4961 000022F5 66D1D8                  	rcr	ax, 1
  4962 000022F8 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4963 000022FB 66AB                    	stosw 		; interpolated sample 3 (L)
  4964 000022FD 89D0                    	mov	eax, edx
  4965 000022FF 660305[15230000]        	add	ax, [next_val_r]
  4966 00002306 66D1D8                  	rcr	ax, 1
  4967 00002309 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4968 0000230C 66AB                    	stosw 		; interpolated sample 3 (R)
  4969 0000230E C3                      	retn
  4970                                  
  4971                                  ; 13/11/2023
  4972                                  previous_val:
  4973 0000230F 0000                    previous_val_l: dw 0
  4974 00002311 0000                    previous_val_r: dw 0
  4975                                  next_val:
  4976 00002313 0000                    next_val_l: dw 0
  4977 00002315 0000                    next_val_r: dw 0
  4978                                  
  4979                                  ; 16/11/2023
  4980 00002317 00                      faz:	db 0
  4981                                  
  4982                                  ; --------------------------------------------------------
  4983                                  ; --------------------------------------------------------
  4984                                  
  4985                                  ; 07/12/2024
  4986                                  ; Ref: TRDOS 386 v2.0.9, trdosk8.s (18/09/2024)
  4987                                  ;		'sysaudio' system call (23/08/2024)
  4988                                  ; 18/11/2024
  4989                                  ; Ref: TRDOS 386 v2.0.9, audio.s, Erdogan Tan, 06/06/2024
  4990                                  
  4991                                  ac97_stop: 
  4992                                  	; 18/11/2024
  4993 00002318 C605[107F0000]02        	mov	byte [stopped], 2
  4994                                  	; 07/12/2024
  4995                                  	sys	_audio, 0700h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000231F BB00070000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00002324 B820000000          <1>  mov eax, %1
    97                              <1> 
    98 00002329 CD40                <1>  int 40h
  4996 0000232B C3                      	retn
  4997                                  
  4998                                  ac97_pause:
  4999                                  	; 18/11/2024
  5000 0000232C C605[107F0000]01        	mov	byte [stopped], 1 ; paused
  5001                                  	; 07/12/2024
  5002                                  	sys	_audio, 0500h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00002333 BB00050000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00002338 B820000000          <1>  mov eax, %1
    97                              <1> 
    98 0000233D CD40                <1>  int 40h
  5003 0000233F C3                      	retn
  5004                                  
  5005                                  ac97_play: ; continue to play (after pause)
  5006                                  	; 18/11/2024
  5007 00002340 C605[107F0000]00        	mov	byte [stopped], 0
  5008                                  	; 07/12/2024	
  5009                                  	sys	_audio, 0600h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00002347 BB00060000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000234C B820000000          <1>  mov eax, %1
    97                              <1> 
    98 00002351 CD40                <1>  int 40h
  5010 00002353 C3                      	retn
  5011                                  	
  5012                                  ; --------------------------------------------------------
  5013                                  ; 14/11/2024 - Erdogan Tan
  5014                                  ; --------------------------------------------------------
  5015                                  
  5016                                  	; 07/12/2024
  5017                                  	; 01/12/2024 (32bit registers)
  5018                                  	; 29/11/2024
  5019                                  checkUpdateEvents:
  5020 00002354 E8FA010000              	call	check4keyboardstop
  5021 00002359 7279                    	jc	short c4ue_ok
  5022                                  
  5023                                  	; 18/11/2024
  5024 0000235B 50                      	push	eax ; *
  5025 0000235C 09C0                    	or	eax, eax
  5026 0000235E 0F8406010000            	jz	c4ue_cpt
  5027                                  
  5028                                  	; 18/11/2024
  5029 00002364 3C20                    	cmp	al, 20h ; SPACE (spacebar) ; pause/play
  5030 00002366 7543                    	jne	short c4ue_chk_s
  5031 00002368 803D[107F0000]00        	cmp	byte [stopped], 0
  5032 0000236F 7714                    	ja	short c4ue_chk_ps
  5033                                  	; pause
  5034 00002371 E8B6FFFFFF              	call	ac97_pause
  5035                                  	; 21/11/2024
  5036 00002376 A0[117F0000]            	mov	al, [tLO]
  5037 0000237B A2[127F0000]            	mov	byte [tLP], al
  5038 00002380 E9E5000000              	jmp	c4ue_cpt
  5039                                  c4ue_chk_ps:
  5040 00002385 803D[107F0000]01        	cmp	byte [stopped], 1
  5041 0000238C 770A                    	ja	short c4ue_replay
  5042                                  	; continue to play (after a pause)
  5043 0000238E E8ADFFFFFF              	call	ac97_play 
  5044 00002393 E9D2000000              	jmp	c4ue_cpt
  5045                                  c4ue_replay:
  5046                                  	; 19/11/2024
  5047 00002398 58                      	pop	eax ; *
  5048 00002399 58                      	pop	eax ; return address
  5049                                  	; 07/02/2024
  5050                                  	;mov	al, [volume]
  5051                                  	;call	SetmasterVolume
  5052 0000239A C605[107F0000]00        	mov	byte [stopped], 0
  5053 000023A1 E8C7040000              	call	move_to_beginning
  5054                                  	;jmp	PlayWav
  5055                                  	; 07/12/2024
  5056 000023A6 E95DE3FFFF              	jmp	RePlayWav
  5057                                  
  5058                                  c4ue_chk_s:
  5059 000023AB 3C53                    	cmp	al, 'S'	; stop
  5060 000023AD 7526                    	jne	short c4ue_chk_fb
  5061 000023AF 803D[107F0000]00        	cmp	byte [stopped], 0
  5062 000023B6 0F87AE000000            	ja	c4ue_cpt ; Already stopped/paused
  5063 000023BC E857FFFFFF              	call	ac97_stop
  5064                                  	; 19/11/2024
  5065 000023C1 C605[117F0000]00        	mov	byte [tLO], 0
  5066                                  	; 21/11/2024
  5067 000023C8 C605[127F0000]30        	mov	byte [tLP], '0'
  5068 000023CF E996000000              	jmp	c4ue_cpt
  5069                                  
  5070                                  	; 01/12/2024
  5071                                  	; 18/11/2024
  5072                                  c4ue_ok:
  5073 000023D4 C3                      	retn
  5074                                  
  5075                                  c4ue_chk_fb:
  5076                                  	; 17/11/2024
  5077 000023D5 3C46                    	cmp	al, 'F'
  5078 000023D7 750A                    	jne	short c4ue_chk_b
  5079 000023D9 E867040000              	call 	Player_ProcessKey_Forwards
  5080 000023DE E987000000              	jmp	c4ue_cpt
  5081                                  
  5082                                  c4ue_chk_b:
  5083 000023E3 3C42                    	cmp	al, 'B'
  5084                                  	;;jne	short c4ue_cpt
  5085                                  	; 19/11/2024
  5086                                  	;jne	short c4ue_chk_h
  5087                                  	; 25/12/2024
  5088                                  	; 29/11/2024
  5089 000023E5 7507                    	jne	short c4ue_chk_n
  5090 000023E7 E855040000              	call 	Player_ProcessKey_Backwards
  5091 000023EC EB7C                    	jmp	short c4ue_cpt
  5092                                  
  5093                                  	;;;
  5094                                  	; 25/12/2024
  5095                                  	; 29/11/2024
  5096                                  c4ue_chk_n:
  5097 000023EE 3C4E                    	cmp	al, 'N'
  5098 000023F0 7404                    	je	short c4ue_nps
  5099                                  c4ue_chk_p:
  5100 000023F2 3C50                    	cmp	al, 'P'
  5101 000023F4 7509                    	jne	short c4ue_chk_h
  5102                                  c4ue_nps:
  5103 000023F6 C605[107F0000]03        	mov	byte [stopped], 3
  5104 000023FD EB6B                    	jmp	short c4ue_cpt
  5105                                  	;;;
  5106                                  
  5107                                  c4ue_chk_h:
  5108                                  	; 19/11/2024
  5109 000023FF 3C48                    	cmp	al, 'H'
  5110 00002401 7515                    	jne	short c4ue_chk_cr
  5111 00002403 C605[137F0000]00        	mov	byte [wleds], 0
  5112 0000240A E873E6FFFF              	call 	write_ac97_pci_dev_info
  5113                                  	;;;
  5114                                  	;24/12/2024 (wave lighting points option)
  5115 0000240F C605[1F7F0000]01        	mov	byte [p_mode], 1
  5116                                  	;;;
  5117                                  	;mov	dh, 24
  5118                                  	;mov	dl, 79
  5119                                  	;call	setCursorPosition
  5120                                  	; 21/12/2024
  5121 00002416 EB52                    	jmp	short c4ue_cpt
  5122                                  c4ue_chk_cr:
  5123                                  	;;;
  5124                                  	; 24/12/2024 (wave lighting points option)
  5125 00002418 8A25[137F0000]          	mov	ah, [wleds]
  5126 0000241E 3C47                    	cmp	al, 'G'
  5127 00002420 7432                    	je	short c4ue_g
  5128                                  ;	;;;
  5129                                  ;	; 26/12/2024
  5130                                  ;	cmp	al, 'T'
  5131                                  ;	jne	short c4ue_chk_cr_@
  5132                                  ;	inc	byte [tcolor]
  5133                                  ;	and 	byte [tcolor], 0Fh
  5134                                  ;	jnz	short c4ue_cpt
  5135                                  ;	inc	byte [tcolor]
  5136                                  ;	jmp	short c4ue_cpt
  5137                                  ;c4ue_chk_cr_@:
  5138                                  ;	;;;
  5139                                  	; 19/11/2024
  5140 00002422 3C0D                    	cmp	al, 0Dh ; ENTER/CR key
  5141 00002424 7544                    	jne	short c4ue_cpt
  5142                                  	;inc	byte [wleds]
  5143                                  	;jnz	short c4ue_cpt
  5144                                  	;inc	byte [wleds]
  5145                                  	;;;
  5146                                  	; 24/12/2024
  5147                                  	; 22/12/2024 (faster method)
  5148                                  	; (UpdateWaveLeds procedure turns off previously
  5149                                  	;  lighting wave leds only)
  5150                                  	;call	reset_wave_leds ; prepare all leds as turned off
  5151                                  	;;;
  5152                                  	; 23/11/2024
  5153 00002426 31DB                    	xor	ebx, ebx
  5154                                  	; 24/12/2024 (wave lighting points option)
  5155 00002428 881D[1F7F0000]          	mov	[p_mode], bl ; 0
  5156                                  	;
  5157                                  	;mov	bl, [wleds]
  5158 0000242E 88E3                    	mov	bl, ah ; 24/12/2024
  5159 00002430 FEC3                    	inc	bl
  5160 00002432 80E30F                  	and	bl, 0Fh
  5161 00002435 7501                    	jnz	short c4ue_sc
  5162 00002437 43                      	inc	ebx
  5163                                  c4ue_sc:
  5164 00002438 881D[137F0000]          	mov	[wleds], bl
  5165 0000243E D0EB                    	shr	bl, 1
  5166 00002440 8A83[AD410000]          	mov	al, [ebx+colors]
  5167                                  	; 24/12/2024
  5168 00002446 A2[B5410000]            	mov	[ccolor], al
  5169 0000244B 7211                    	jc	short c4ue_g_@
  5170                                  	; 24/12/2024
  5171 0000244D E865040000              	call	reset_wave_leds ; prepare all leds as turned off
  5172 00002452 EB16                    	jmp	short c4ue_cpt
  5173                                  	; 24/12/2024
  5174                                  c4ue_g:
  5175 00002454 08E4                    	or	ah, ah	; byte [wleds]
  5176 00002456 7506                    	jnz	short c4ue_g_@
  5177 00002458 FE05[137F0000]          	inc	byte [wleds]	; force wave lighting ('G' key)
  5178                                  c4ue_g_@:
  5179                                  	; 24/12/2024 (wave lighting points option)
  5180 0000245E C605[1F7F0000]01        	mov	byte [p_mode], 1
  5181 00002465 E832040000              	call	clear_window
  5182                                  	;;;
  5183                                  c4ue_cpt:
  5184                                  	; 24/12/2024
  5185                                  	; 18/11/2024
  5186 0000246A 59                      	pop	ecx ; *
  5187                                  	;;;
  5188                                  	; 24/12/2024 (skip wave lighting if data is not loaded yet)
  5189 0000246B 803D[B77F0000]00        	cmp	byte [SRB], 0
  5190 00002472 7751                    	ja	short c4ue_vb_ok
  5191                                  	;;;
  5192                                  	; 01/12/2024 (TRDOS 386)
  5193                                  	sys	_time, 4 ; get timer ticks (18.2 ticks/second),
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 00002474 BB04000000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00002479 B80D000000          <1>  mov eax, %1
    97                              <1> 
    98 0000247E CD40                <1>  int 40h
  5194                                  	; 24/12/2024
  5195                                  	; 18/11/2024
  5196                                  	;pop	ecx ; *
  5197                                  	; 01/12/2024
  5198 00002480 3B05[E07F0000]          	cmp	eax, [timerticks]
  5199                                  	;je	short c4ue_ok
  5200                                  	; 18/11/2024
  5201 00002486 7407                    	je	short c4ue_skip_utt
  5202                                  c4ue_utt:	
  5203                                  	; 01/12/2024
  5204 00002488 A3[E07F0000]            	mov	[timerticks], eax
  5205 0000248D EB04                    	jmp	short c4ue_cpt_@
  5206                                  c4ue_skip_utt:
  5207                                  	; 18/11/2024
  5208 0000248F 21C9                    	and	ecx, ecx
  5209 00002491 7432                    	jz	short c4ue_vb_ok
  5210                                  c4ue_cpt_@:
  5211                                  	; 18/11/2024
  5212 00002493 803D[107F0000]00        	cmp	byte [stopped], 0
  5213 0000249A 7729                    	ja	short c4ue_vb_ok
  5214                                  	
  5215 0000249C E8E3010000              	call	CalcProgressTime
  5216                                  
  5217                                  	;cmp	ax, [ProgressTime]
  5218                                  	; 01/12/2024
  5219 000024A1 3B05[D47F0000]          	cmp	eax, [ProgressTime]
  5220                                  	;je	short c4ue_vb_ok
  5221                                  			; same second, no need to update
  5222                                  	; 23/11/2024
  5223 000024A7 7405                    	je	short c4ue_uvb
  5224                                  
  5225                                  	;call	UpdateProgressTime
  5226                                  	;call	UpdateProgressBar@
  5227 000024A9 E807030000              	call	UpdateProgressBar
  5228                                  
  5229                                  	; 23/11/2024
  5230                                  c4ue_uvb:
  5231 000024AE 803D[137F0000]00        	cmp	byte [wleds], 0
  5232 000024B5 760E                    	jna	short c4ue_vb_ok
  5233                                  
  5234                                  	; 24/12/2024 (wave points mode)
  5235 000024B7 803D[1F7F0000]00        	cmp	byte [p_mode], 0
  5236 000024BE 7706                    	ja	short c4ue_uwp
  5237                                  
  5238 000024C0 E83C040000              	call	UpdateWaveLeds
  5239                                  
  5240                                  c4ue_vb_ok:
  5241 000024C5 C3                      	retn
  5242                                  
  5243                                  	; 22/12/2024
  5244                                  c4ue_uwp:
  5245                                  	;call	UpdateWavePoints
  5246                                  	;retn
  5247                                  
  5248                                  ; --------------------------------------------------------
  5249                                  ; 24/12/2024 - Erdogan Tan
  5250                                  ; --------------------------------------------------------
  5251                                  
  5252                                  	; 26/12/2024
  5253                                  	; 24/12/2024
  5254                                  UpdateWavePoints:
  5255 000024C6 BE[10750000]            	mov	esi, prev_points
  5256 000024CB 833E00                  	cmp	dword [esi], 0
  5257 000024CE 740B                    	jz	short lights_off_ok
  5258 000024D0 B980020000              	mov	ecx, 640
  5259                                  light_off:
  5260 000024D5 AD                      	lodsd
  5261                                  	; eax = wave point (lighting point) address
  5262 000024D6 C60000                  	mov	byte [eax], 0 ; black point (light off)
  5263 000024D9 E2FA                    	loop	light_off	
  5264                                  lights_off_ok:
  5265 000024DB 8A15[1D7F0000]          	mov	dl, [half_buffer]
  5266 000024E1 3815[1C7F0000]          	cmp	[pbuf_s], dl
  5267 000024E7 7520                    	jne	short lights_on_2
  5268 000024E9 8B1D[F8740000]          	mov	ebx, [wpoints_dif]
  5269 000024EF 8B35[187F0000]          	mov	esi, [pbuf_o]
  5270 000024F5 8B0D[CC7F0000]          	mov	ecx, [buffersize] ; bytes
  5271 000024FB 29D9                    	sub	ecx, ebx ; sub ecx, [wpoints_dif]
  5272 000024FD 01DE                    	add	esi, ebx
  5273 000024FF 7204                    	jc	short lights_on_1
  5274 00002501 39CE                    	cmp	esi, ecx
  5275 00002503 760C                    	jna	short lights_on_3
  5276                                  lights_on_1:
  5277 00002505 89CE                    	mov	esi, ecx
  5278 00002507 EB08                    	jmp	short lights_on_3
  5279                                  
  5280                                  lights_on_2:
  5281 00002509 8815[1C7F0000]          	mov	[pbuf_s], dl
  5282 0000250F 31F6                    	xor	esi, esi ; 0
  5283                                  lights_on_3:
  5284 00002511 8935[187F0000]          	mov	[pbuf_o], esi
  5285                                  	;
  5286 00002517 81C6[00800000]          	add	esi, audio_buffer
  5287 0000251D B980020000              	mov	ecx, 640
  5288 00002522 89CD                    	mov	ebp, ecx
  5289                                  	; 26/12/2024
  5290 00002524 BF[10750000]            	mov	edi, prev_points
  5291 00002529 8B1D[FC740000]          	mov	ebx, [graphstart] ; start (top) line
  5292                                  lights_on_4:
  5293 0000252F 31C0                    	xor	eax, eax ; 0
  5294 00002531 66AD                    	lodsw	; left
  5295 00002533 80C480                  	add	ah, 80h
  5296 00002536 89C2                    	mov	edx, eax
  5297 00002538 66AD                    	lodsw	; right
  5298                                  	;add	ax, dx
  5299 0000253A 80C480                  	add	ah, 80h
  5300                                  	;shr	eax, 9	; 128 volume levels
  5301 0000253D 01D0                    	add	eax, edx
  5302                                  	;shr	eax, 10	; (L+R/2) & 128 volume levels
  5303 0000253F C1E809                  	shr	eax, 9	; (L+R/2) & 256 volume levels
  5304 00002542 F7E5                    	mul	ebp	; * 640 (row)
  5305 00002544 01D8                    	add	eax, ebx ; + column
  5306 00002546 8A15[B5410000]          	mov	dl, [ccolor]
  5307 0000254C 8810                    	mov	[eax], dl ; pixel (light on) color
  5308 0000254E AB                      	stosd		; save light on addr in prev_points
  5309 0000254F 43                      	inc	ebx
  5310 00002550 E2DD                    	loop	lights_on_4
  5311 00002552 C3                      	retn
  5312                                  
  5313                                  ; --------------------------------------------------------
  5314                                  ; 19/05/2024 - (playwav4.asm) ich_wav4.asm
  5315                                  ; --------------------------------------------------------
  5316                                  
  5317                                  	; 25/12/2024
  5318                                  	; 07/12/2024
  5319                                  	; 01/12/2024 (TRDOS 386)
  5320                                  	; 29/11/2024
  5321                                  check4keyboardstop:
  5322                                  	; 19/05/2024
  5323                                  	; 08/11/2023
  5324                                  	; 04/11/2023
  5325 00002553 B401                    	mov	ah, 1
  5326                                  	;int	16h
  5327                                  	; 01/12/2024 (TRDOS 386 keyboard interrupt)
  5328 00002555 CD32                    	int	32h
  5329                                  	;clc
  5330 00002557 7433                    	jz	short _cksr
  5331                                  
  5332 00002559 30E4                    	xor	ah, ah
  5333                                  	;int	16h
  5334                                  	; 01/12/2024 (TRDOS 386 keyboard interrupt)
  5335 0000255B CD32                    	int	32h
  5336                                  
  5337                                  	; 25/12/2024
  5338                                  	; 29/11/2024
  5339                                  	;mov	[command], al
  5340                                  
  5341                                  	;;;
  5342                                  	; 19/05/2024 (change PCM out volume)
  5343 0000255D 3C2B                    	cmp	al, '+'
  5344 0000255F 750D                    	jne	short p_1
  5345                                  	
  5346 00002561 A0[B6250000]            	mov	al, [volume]
  5347 00002566 3C00                    	cmp	al, 0
  5348 00002568 7624                    	jna	short p_3
  5349 0000256A FEC8                    	dec	al
  5350 0000256C EB0F                    	jmp	short p_2
  5351                                  p_1:
  5352 0000256E 3C2D                    	cmp	al, '-'
  5353 00002570 751D                    	jne	short p_4
  5354                                  
  5355 00002572 A0[B6250000]            	mov	al, [volume]
  5356 00002577 3C1F                    	cmp	al, 31
  5357 00002579 7313                    	jnb	short p_3
  5358 0000257B FEC0                    	inc	al
  5359                                  p_2:
  5360 0000257D A2[B6250000]            	mov	[volume], al
  5361                                  	; 14/11/2024
  5362                                  	;call	SetPCMOutVolume
  5363                                  	; 15/11/2024 (QEMU)
  5364                                  	; 07/12/2024
  5365 00002582 E82EE3FFFF              	call	SetMasterVolume
  5366                                  	;call	UpdateVolume
  5367                                  	;;clc
  5368                                  	;retn
  5369 00002587 E999010000              	jmp	UpdateVolume
  5370                                  	;mov	ah, al
  5371                                  	;mov    dx, [NAMBAR]
  5372                                    	;;add   dx, CODEC_MASTER_VOL_REG
  5373                                  	;add	dx, CODEC_PCM_OUT_REG
  5374                                  	;out    dx, ax
  5375                                  	;
  5376                                  	;call   delay1_4ms
  5377                                          ;call   delay1_4ms
  5378                                          ;call   delay1_4ms
  5379                                          ;call   delay1_4ms
  5380                                  _cksr:		; 19/05/2024
  5381                                  	; 18/12/2024
  5382 0000258C 31C0                    	xor	eax, eax
  5383                                  	;clc
  5384                                  p_3:
  5385 0000258E C3                      	retn
  5386                                  p_4:
  5387                                  	; 17/11/2024
  5388 0000258F 80FC01                  	cmp	ah, 01h  ; ESC
  5389 00002592 7419                        	je	short p_q
  5390                                  	;cmp	ax, 2E03h ; 21/12/2024 
  5391 00002594 3C03                    	cmp	al, 03h  ; CTRL+C
  5392 00002596 7415                    	je	short p_q
  5393                                  
  5394                                  	; 18/11/2024
  5395 00002598 3C20                    	cmp	al, 20h
  5396 0000259A 7419                    	je	short p_r
  5397                                  
  5398                                  	; 19/11/2024
  5399 0000259C 3C0D                    	cmp	al, 0Dh ; CR/ENTER
  5400 0000259E 7415                    	je	short p_r
  5401                                  
  5402 000025A0 24DF                    	and	al, 0DFh
  5403                                  
  5404                                  	; 25/12/2024
  5405                                  	; 29/11/2024
  5406 000025A2 A2[207F0000]            	mov	[command], al
  5407                                  
  5408                                  	;cmp	al, 'B'
  5409                                  	;je	short p_r
  5410                                  	;cmp	al, 'F'
  5411                                  	;je	short p_r
  5412                                  
  5413                                  	; 29/11/2024
  5414                                  	;cmp	al, 'N'
  5415                                  	;je	short p_r
  5416                                  	;cmp	al, 'P'
  5417                                  	;je	short p_r
  5418                                  
  5419 000025A7 3C51                    	cmp	al, 'Q'
  5420                                  	;je	short p_q
  5421 000025A9 7409                    	je	short p_quit ; 29/11/2024
  5422                                  
  5423 000025AB F8                      	clc
  5424 000025AC C3                      	retn
  5425                                  
  5426                                  	;;;
  5427                                  ;_cskr:	
  5428                                  p_q:
  5429                                  	; 27/12/2024
  5430 000025AD C605[207F0000]51        	mov	byte [command], 'Q'
  5431                                  p_quit:
  5432 000025B4 F9                      	stc
  5433                                  p_r:
  5434 000025B5 C3                      	retn
  5435                                  
  5436                                  ; 29/05/2024
  5437                                  ; 19/05/2024
  5438                                  volume: 
  5439                                  	;db	02h
  5440                                  ; 26/12/2024
  5441 000025B6 03                      	db	03h
  5442                                  
  5443                                  ; --------------------------------------------------------
  5444                                  
  5445                                  	; 22/12/2024
  5446                                  	; 21/12/2024
  5447                                  	; simulate cursor position in VGA (VESA VBE) mode
  5448                                  	; ! for 640*480, 256 colors (1 byte/pixel) !
  5449                                  setCursorPosition:
  5450                                  	; dh = Row
  5451                                  	; dl = Column
  5452                                  	
  5453 000025B7 31C0                    	xor	eax, eax
  5454 000025B9 B00E                    	mov	al, 14	; row height is 14 pixels (8*14)
  5455 000025BB F6E6                    	mul	dh
  5456 000025BD 6683C007                	add	ax, 7	; top margin
  5457 000025C1 C1E010                  	shl	eax, 16
  5458 000025C4 88D0                    	mov	al, dl	; * 8 ; character width = 8 pixels
  5459 000025C6 66C1E003                	shl	ax, 3
  5460                                  			; hw = row, ax = column
  5461 000025CA A3[04750000]            	mov	[screenpos], eax
  5462                                  	; 22/12/2024
  5463 000025CF 31C0                    	xor	eax, eax
  5464 000025D1 C3                      	retn
  5465                                  	
  5466                                  ; --------------------------------------------------------
  5467                                  ; 14/11/2024
  5468                                  ; (Ref: player.asm, out_cs.asm, Matan Alfasi, 2017)
  5469                                  
  5470                                  ;; NAME:	SetTotalTime
  5471                                  ;; DESCRIPTION: Calculates the total time in seconds in file
  5472                                  ;; INPUT:	DATA_SubchunkSize, WAVE_SampleRate, WAVE_BlockAlign
  5473                                  ;; OUTPUT:	CurrentTotalTime=Total time in seconds in file,
  5474                                  ;; 		Output on the screen of the total time in seconds
  5475                                  
  5476                                  	; 01/12/2024 (32 bit registers)
  5477                                  SetTotalTime:
  5478                                  	;; Calculate total seconds in file
  5479                                  	;mov	ax, [DATA_SubchunkSize]
  5480                                  	;mov	dx, [DATA_SubchunkSize + 2]
  5481                                  	;mov	bx, [WAVE_SampleRate]
  5482                                  	;div	bx
  5483                                  	;xor	dx, dx
  5484                                  	; 01/12/2024
  5485 000025D2 A1[4C7F0000]            	mov	eax, [DATA_SubchunkSize]
  5486 000025D7 0FB71D[3C7F0000]        	movzx	ebx, word [WAVE_SampleRate]
  5487 000025DE 31D2                    	xor	edx, edx
  5488 000025E0 F7F3                    	div	ebx
  5489                                  
  5490                                  	;mov	bx, [WAVE_BlockAlign]
  5491                                  	;div	bx
  5492                                  	; 01/12/2024
  5493 000025E2 668B1D[447F0000]        	mov	bx, [WAVE_BlockAlign]
  5494 000025E9 31D2                    	xor	edx, edx
  5495 000025EB F7F3                    	div	ebx
  5496                                  
  5497                                  	;mov	[TotalTime], ax
  5498 000025ED A3[D07F0000]            	mov	[TotalTime], eax
  5499                                  
  5500 000025F2 B33C                    	mov	bl, 60
  5501 000025F4 F6F3                    	div	bl
  5502                                  
  5503                                  	;; al = minutes, ah = seconds
  5504 000025F6 50                      	push	eax ; **
  5505 000025F7 50                      	push	eax ; *
  5506                                  
  5507                                  	;mov	dh, 24
  5508                                  	; 21/12/2024 (640*480)
  5509 000025F8 B620                    	mov	dh, 32
  5510 000025FA B22A                    	mov	dl, 42
  5511 000025FC E8B6FFFFFF              	call	setCursorPosition
  5512                                  
  5513 00002601 58                      	pop	eax ; *
  5514 00002602 30E4                    	xor	ah, ah
  5515 00002604 BD02000000              	mov	ebp, 2
  5516 00002609 E812000000              	call	PrintNumber
  5517                                  	
  5518                                  	;mov	dh, 24
  5519                                  	; 21/12/2024 (640*480)
  5520 0000260E B620                    	mov	dh, 32
  5521 00002610 B22D                    	mov	dl, 45
  5522 00002612 E8A0FFFFFF              	call	setCursorPosition
  5523                                  
  5524 00002617 58                      	pop	eax ; **
  5525 00002618 88E0                    	mov	al, ah
  5526 0000261A 30E4                    	xor	ah, ah
  5527                                  	; 21/12/2024
  5528 0000261C 66BD0200                	mov	bp, 2
  5529                                  	;jmp	short PrintNumber
  5530                                  
  5531                                  ; --------------------------------------------------------
  5532                                  
  5533                                  	; 21/12/2024 (write numbers in VESA VBE graphics mode)
  5534                                  	; 01/12/2024 (32bit registers)
  5535                                  PrintNumber:
  5536                                  	; eax = binary number
  5537                                  	; ebp = digits
  5538 00002620 8B35[04750000]          	mov	esi, [screenpos]
  5539                                  		; hw = row, si = column
  5540 00002626 BB0A000000              	mov	ebx, 10
  5541 0000262B 31C9                    	xor	ecx, ecx
  5542                                  printNumber_CutNumber:
  5543 0000262D 41                      	inc	ecx
  5544 0000262E 31D2                    	xor	edx, edx
  5545 00002630 F7F3                    	div	ebx
  5546 00002632 52                      	push	edx
  5547 00002633 39E9                    	cmp	ecx, ebp
  5548 00002635 7402                    	je	short printNumber_printloop
  5549 00002637 EBF4                    	jmp	printNumber_CutNumber
  5550                                  
  5551                                  printNumber_printloop:
  5552 00002639 58                      	pop	eax
  5553                                  	; 21/12/2024
  5554                                  	; ebp = count of digits
  5555                                  	; eax <= 9
  5556                                  
  5557 0000263A 0430                    	add	al, '0'
  5558                                  	
  5559                                  	; esi = pixel position (hw = row, si = column)
  5560                                  	; eax = al = character
  5561                                  	;call	write_character
  5562                                  	; 22/12/2024
  5563 0000263C E82A010000              	call	write_character_white
  5564                                  
  5565 00002641 4D                      	dec	ebp
  5566 00002642 7405                     	jz	short printNumber_ok
  5567 00002644 83C608                  	add	esi, 8	; next column
  5568 00002647 EBF0                    	jmp	short printNumber_printloop
  5569                                  printNumber_ok:
  5570 00002649 C3                      	retn
  5571                                  
  5572                                  ; --------------------------------------------------------
  5573                                  
  5574                                  	; 14/11/2024 - Erdogan Tan
  5575                                  SetProgressTime:
  5576                                  	;; Calculate playing/progress seconds in file
  5577 0000264A E835000000              	call	CalcProgressTime
  5578                                  
  5579                                  	; 01/12/2024 (32bit registers)
  5580                                  UpdateProgressTime:
  5581                                  	; eax = (new) progress time 
  5582                                  
  5583 0000264F A3[D47F0000]            	mov	[ProgressTime], eax
  5584                                  
  5585 00002654 B33C                    	mov	bl, 60
  5586 00002656 F6F3                    	div	bl
  5587                                  
  5588                                  	;; al = minutes, ah = seconds
  5589 00002658 50                      	push	eax ; **
  5590 00002659 50                      	push	eax ; *
  5591                                  
  5592                                  	;mov	dh, 24
  5593                                  	; 21/12/2024 (640*480)
  5594 0000265A B620                    	mov	dh, 32
  5595 0000265C B221                    	mov	dl, 33
  5596 0000265E E854FFFFFF              	call	setCursorPosition
  5597                                  
  5598 00002663 58                      	pop	eax ; *
  5599 00002664 30E4                    	xor	ah, ah
  5600 00002666 BD02000000              	mov	ebp, 2
  5601 0000266B E8B0FFFFFF              	call	PrintNumber
  5602                                  	
  5603                                  	;mov	dh, 24
  5604                                  	; 21/12/2024 (640*480)
  5605 00002670 B620                    	mov	dh, 32
  5606 00002672 B224                    	mov	dl, 36
  5607 00002674 E83EFFFFFF              	call	setCursorPosition
  5608                                  
  5609 00002679 58                      	pop	eax ; **
  5610 0000267A 88E0                    	mov	al, ah
  5611 0000267C 30E4                    	xor	ah, ah
  5612                                  	; 21/12/2024
  5613 0000267E 66BD0200                	mov	bp, 2
  5614 00002682 EB9C                    	jmp	short PrintNumber
  5615                                  
  5616                                  ; --------------------------------------------------------
  5617                                  
  5618                                  	; 01/12/2024 (32bit registers)
  5619                                  	; 17/11/2024
  5620                                  	; 14/11/2024
  5621                                  CalcProgressTime:
  5622                                  	;mov	ax, [LoadedDataBytes]
  5623                                  	;mov	dx, [LoadedDataBytes+2]
  5624                                  	;mov	bx, ax
  5625                                  	;or	bx, dx
  5626                                  	;jz	short cpt_ok
  5627                                  	; 01/12/2024
  5628 00002684 A1[DC7F0000]            	mov	eax, [LoadedDataBytes]
  5629 00002689 09C0                    	or	eax, eax
  5630 0000268B 7416                    	jz	short cpt_ok
  5631                                  
  5632                                  	;mov	bx, [WAVE_SampleRate]
  5633                                  	;div	bx
  5634                                  	;xor	dx, dx
  5635                                  	;mov	bx, [WAVE_BlockAlign]
  5636                                  	;div	bx
  5637                                  	; 01/12/2024
  5638 0000268D 0FB71D[3C7F0000]        	movzx	ebx, word [WAVE_SampleRate]
  5639 00002694 31D2                    	xor	edx, edx
  5640 00002696 F7F3                    	div	ebx
  5641 00002698 31D2                    	xor	edx, edx
  5642 0000269A 668B1D[447F0000]        	mov	bx, [WAVE_BlockAlign]
  5643 000026A1 F7F3                    	div	ebx
  5644                                  cpt_ok:
  5645                                  	; eax = (new) progress time
  5646 000026A3 C3                      	retn
  5647                                  
  5648                                  ; --------------------------------------------------------
  5649                                  ; 14/11/2024
  5650                                  ; (Ref: player.asm, out_cs.asm, Matan Alfasi, 2017)
  5651                                  
  5652                                  ;; DESCRIPTION: Update file information on template
  5653                                  ;; PARAMS:	WAVE parameters and other variables
  5654                                  ;; REGS:	AX(RW)
  5655                                  ;; VARS:	CurrentFileName, WAVE_SampleRate, 
  5656                                  ;; RETURNS:	On-screen file info is updated.
  5657                                  
  5658                                  	; 01/12/2024 (32bit registers)
  5659                                  UpdateFileInfo:
  5660                                  	;; Print File Name
  5661                                  	;mov	dh, 9
  5662                                  	; 21/12/2024 (640*480 graphics display)
  5663 000026A4 B608                    	mov	dh, 8
  5664 000026A6 B217                    	mov	dl, 23
  5665 000026A8 E80AFFFFFF              	call	setCursorPosition
  5666                                  	
  5667 000026AD BE[647F0000]            	mov	esi, wav_file_name
  5668                                  	
  5669                                  	;;;
  5670                                  	; 14/11/2024
  5671                                  	; skip directory separators
  5672                                  	; (note: asciiz string, max. 79 bytes except zero tail)
  5673 000026B2 89F3                    	mov	ebx, esi
  5674                                  chk4_nxt_sep:
  5675 000026B4 AC                      	lodsb
  5676 000026B5 3C2F                    	cmp	al, '/'	; 14/12/2024
  5677 000026B7 7406                    	je	short chg_fpos
  5678 000026B9 20C0                    	and	al, al
  5679 000026BB 7406                    	jz	short chg_fpos_ok
  5680 000026BD EBF5                    	jmp	short chk4_nxt_sep
  5681                                  chg_fpos:
  5682 000026BF 89F3                    	mov	ebx, esi
  5683 000026C1 EBF1                    	jmp	short chk4_nxt_sep
  5684                                  chg_fpos_ok:
  5685 000026C3 89DE                    	mov	esi, ebx ; file name (without its path/directory)
  5686                                  	;;;
  5687                                  _fnl_chk:
  5688                                  	; 26/12/2024 (file name length limit -display-)
  5689                                  	;mov	ebx, 12
  5690 000026C5 BB11000000              	mov	ebx, 17 ; ????????.wav?????
  5691 000026CA 56                      	push	esi
  5692                                  _fnl_chk_loop:
  5693 000026CB AC                      	lodsb
  5694 000026CC 20C0                    	and	al, al
  5695 000026CE 7406                    	jz	short _fnl_ok
  5696 000026D0 4B                       	dec	ebx
  5697 000026D1 75F8                    	jnz	short _fnl_chk_loop
  5698 000026D3 C60600                  	mov	byte [esi], 0
  5699                                  _fnl_ok:
  5700 000026D6 5E                      	pop	esi
  5701                                  	;;;
  5702                                  
  5703 000026D7 E870000000              	call	PrintString
  5704                                  	
  5705                                  	;; Print Frequency
  5706                                  	;mov	dh, 10
  5707                                  	; 21/12/2024 (640*480 graphics display)
  5708 000026DC B609                    	mov	dh, 9
  5709 000026DE B217                    	mov	dl, 23
  5710 000026E0 E8D2FEFFFF              	call	setCursorPosition
  5711                                  	;movzx	eax, word [WAVE_SampleRate]
  5712                                  	; 22/12/2024
  5713                                  	; eax = 0
  5714 000026E5 66A1[3C7F0000]          	mov	ax, [WAVE_SampleRate]
  5715 000026EB BD05000000              	mov	ebp, 5
  5716 000026F0 E82BFFFFFF              	call	PrintNumber
  5717                                  
  5718                                  	;; Print BitRate
  5719                                  	;mov	dh, 9
  5720                                  	; 21/12/2024 (640*480 graphics display)
  5721 000026F5 B608                    	mov	dh, 8
  5722 000026F7 B239                    	mov	dl, 57
  5723 000026F9 E8B9FEFFFF              	call	setCursorPosition
  5724 000026FE 66A1[467F0000]          	mov	ax, [WAVE_BitsPerSample]
  5725 00002704 66BD0200                	mov	bp, 2
  5726 00002708 E813FFFFFF              	call	PrintNumber
  5727                                  
  5728                                  	;; Print Channel Number
  5729                                  	;mov	dh, 10
  5730                                  	; 21/12/2024 (640*480 graphics display)
  5731 0000270D B609                    	mov	dh, 9
  5732 0000270F B239                    	mov	dl, 57
  5733 00002711 E8A1FEFFFF              	call	setCursorPosition
  5734 00002716 66A1[3A7F0000]          	mov	ax, [WAVE_NumChannels]
  5735 0000271C 66BD0100                	mov	bp, 1
  5736 00002720 E8FBFEFFFF              	call	PrintNumber
  5737                                  
  5738                                  	;call	UpdateVolume
  5739                                  	;retn
  5740                                  
  5741                                  ; --------------------------------------------------------
  5742                                  
  5743                                  	; 14/11/2024
  5744                                  UpdateVolume:
  5745                                  	;; Print Volume
  5746                                  	;mov	dh, 24
  5747                                  	; 21/12/2024 (640*480)
  5748 00002725 B620                    	mov	dh, 32
  5749 00002727 B24B                    	mov	dl, 75
  5750 00002729 E889FEFFFF              	call	setCursorPosition
  5751                                  	; 22/12/2024
  5752                                  	; eax = 0
  5753                                  
  5754 0000272E A0[B6250000]            	mov	al, [volume]
  5755                                  
  5756 00002733 B364                    	mov	bl, 100
  5757 00002735 F6E3                    	mul	bl
  5758                                  
  5759 00002737 B31F                    	mov	bl, 31
  5760 00002739 F6F3                    	div	bl
  5761                                  
  5762                                  	;neg	ax
  5763                                  	;add	ax, 100	
  5764                                  	; 01/12/2024
  5765 0000273B B464                    	mov	ah, 100
  5766 0000273D 28C4                    	sub	ah, al
  5767 0000273F 0FB6C4                  	movzx	eax, ah
  5768                                  	;xor	ah, ah
  5769                                  	;mov	bp, 3
  5770 00002742 BD03000000              	mov	ebp, 3
  5771                                  	;call	PrintNumber
  5772                                  	;retn
  5773 00002747 E9D4FEFFFF              	jmp	PrintNumber	
  5774                                  
  5775                                  ; --------------------------------------------------------
  5776                                  
  5777                                  	; 21/12/2024
  5778                                  	; write text in VESA VBE graphics mode
  5779                                  PrintString:
  5780                                  	; esi = string address
  5781                                  printstr_loop:
  5782 0000274C 31C0                    	xor	eax, eax
  5783 0000274E AC                      	lodsb
  5784 0000274F 08C0                    	or	al, al
  5785 00002751 7417                    	jz	short printstr_ok
  5786                                  
  5787 00002753 56                      	push	esi
  5788                                  
  5789 00002754 8B35[04750000]          	mov	esi, [screenpos]
  5790                                  
  5791                                  	; esi = pixel position (hw = row, si = column)
  5792                                  	; eax = al = character
  5793                                  	;call	write_character
  5794                                  	; 22/12/2024
  5795 0000275A E80C000000              	call	write_character_white
  5796                                  
  5797 0000275F 668305[04750000]08      	add	word [screenpos], 8 ; update column (only, not row)
  5798                                  
  5799 00002767 5E                      	pop	esi
  5800 00002768 EBE2                    	jmp	short printstr_loop
  5801                                  
  5802                                  printstr_ok:
  5803 0000276A C3                      	retn
  5804                                  
  5805                                  ; --------------------------------------------------------
  5806                                  
  5807                                  	; 21/12/2024
  5808                                  	; write character (at cursor position)
  5809                                  	; in graphics mode (640*480, 256 colors)
  5810                                  	; 22/12/2024
  5811                                  write_character_white:
  5812 0000276B B90F000000              	mov	ecx, 0Fh
  5813                                  	; 26/12/2024
  5814                                  	;movzx	ecx, byte [tcolor]
  5815                                  write_character:
  5816                                  	; esi = pixel position (hw = row, si = column)
  5817                                  	; eax = al = character
  5818                                  	; cl = color
  5819 00002770 890D[08750000]          	mov	[wcolor], ecx ; 22/12/2024
  5820                                  
  5821                                  	; 22/12/2024
  5822 00002776 50                      	push	eax
  5823                                  	; clear previous character pixels
  5824 00002777 BF[9D410000]            	mov	edi, fillblock
  5825                                  	sys	_video, 020Fh, 0, 8001h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000277C BB0F020000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 00002781 B900000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 00002786 BA01800000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 0000278B B81F000000          <1>  mov eax, %1
    97                              <1> 
    98 00002790 CD40                <1>  int 40h
  5826 00002792 58                      	pop	eax
  5827                                  
  5828 00002793 C1E004                  	shl	eax, 4 ; 8*16 pixel user font
  5829 00002796 BF[B84F0000]            	mov	edi, fontbuff2 ; start of user font data
  5830 0000279B 01C7                    	add	edi, eax
  5831                                  
  5832                                  	; 21/12/2024
  5833                                  	; NOTE:
  5834                                  	; TRDOS 386 does not use 8*14 pixel fonts in sysvideo
  5835                                  	; system calls -in graphics mode-
  5836                                  	; because 8*16 pixel operations are faster
  5837                                  	;			than 8*14 pixel operations.
  5838                                  	; ((so, 8*14 fonts can be converted to 8*16 fonts by
  5839                                  	; adding 2 empty lines))
  5840                                  	; (8*14 characters can be written via pixel operations)
  5841                                    	
  5842                                  	; 21/12/2024 (TRDOS 386 v2.0.9, trdosk6.s, 27/09/2024)
  5843                                  	;;;;;;;;;;;;;;;;; ; sysvideo system call
  5844                                  	;sysvideo:
  5845                                  	;   function in BH
  5846                                  	;	02h: Super VGA, LINEAR FRAME BUFFER data transfers
  5847                                  	;   sub function in BL
  5848                                  	;	0Fh: WRITE CHARACTER (FONT)
  5849                                  	;          CL = char's color (8 bit, 256 colors)
  5850                                  	;	If DH bit 7 = 1
  5851                                  	;	   USER FONT (from user buffer)
  5852                                  	;	         DL = 1 -> 8x16 pixel font
  5853                                   	;	   EDI = user's font buffer address
  5854                                  	;		(NOTE: byte order is as row0,row1,row2..)
  5855                                  	;	   ESI = start position (row, column)
  5856                                  	;		(HW = row, SI = column)
  5857                                  	;;;;;;;;;;;;;;;;;
  5858                                  
  5859                                  	sys	_video, 020Fh, [wcolor], 8001h
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000279D BB0F020000          <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90 000027A2 8B0D[08750000]      <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92 000027A8 BA01800000          <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 000027AD B81F000000          <1>  mov eax, %1
    97                              <1> 
    98 000027B2 CD40                <1>  int 40h
  5860                                  
  5861 000027B4 C3                      	retn
  5862                                  
  5863                                  ; --------------------------------------------------------
  5864                                  
  5865                                  	; 22/12/2024
  5866                                  	; 21/12/2024
  5867                                  	; (write chars in VESA VBE graphics mode)
  5868                                  	; 14/11/2024
  5869                                  	; (Ref: player.asm, Matan Alfasi, 2017)
  5870                                  	; (Modification: Erdogan Tan, 14/11/2024)
  5871                                  
  5872                                  	;PROGRESSBAR_ROW equ 23
  5873                                  	; 21/12/2024 (640*480)
  5874                                  	PROGRESSBAR_ROW equ 31
  5875                                  
  5876                                  UpdateProgressBar:
  5877 000027B5 E890FEFFFF              	call	SetProgressTime	; 14/11/2024
  5878                                  
  5879                                  	; 01/12/2024 (32bit registers)
  5880 000027BA A1[D47F0000]            	mov	eax, [ProgressTime]
  5881                                  UpdateProgressBar@:
  5882 000027BF BA50000000              	mov	edx, 80
  5883 000027C4 F7E2                    	mul	edx
  5884 000027C6 8B1D[D07F0000]          	mov	ebx, [TotalTime]
  5885 000027CC F7F3                    	div	ebx
  5886                                  
  5887                                  	; 22/12/2024
  5888                                  	; check progress bar indicator position if it is same 
  5889 000027CE 3A05[0D750000]          	cmp	al, [pbprev]
  5890 000027D4 7430                    	je	short UpdateProgressBar_ok
  5891 000027D6 A2[0D750000]            	mov	[pbprev], al
  5892                                  
  5893                                  UpdateProgressBar@@:
  5894                                  	;; Push for the 'Clean' part
  5895 000027DB 50                      	push	eax ; **
  5896 000027DC 50                      	push	eax ; *
  5897                                  
  5898                                  	;; Set cursor position
  5899 000027DD B61F                    	mov	dh, PROGRESSBAR_ROW
  5900 000027DF B200                    	mov	dl, 0
  5901 000027E1 E8D1FDFFFF              	call	setCursorPosition
  5902                                  
  5903 000027E6 58                      	pop	eax ; *
  5904 000027E7 09C0                    	or	eax, eax
  5905 000027E9 742D                    	jz	short UpdateProgressBar_Clean
  5906                                  
  5907                                  UpdateProgressBar_DrawProgress:
  5908                                  	; 22/12/2024
  5909                                  	; 21/12/2024
  5910                                  	; (write progress bar chars in graphics mode)
  5911                                  	;;;;
  5912 000027EB 89C5                    	mov	ebp, eax
  5913 000027ED 50                      	push	eax ; ***
  5914 000027EE 8B35[04750000]          	mov	esi, [screenpos]
  5915                                  UpdateProgressBar_DrawProgress_@:
  5916 000027F4 B8DF000000              	mov	eax, 223
  5917                                  	
  5918                                  	; esi = pixel position (hw = row, si = column)
  5919                                  	; eax = al = character
  5920                                  	;call	write_character
  5921                                  	; 22/12/2024
  5922 000027F9 E86DFFFFFF              	call	write_character_white
  5923                                  
  5924 000027FE 4D                      	dec	ebp
  5925 000027FF 7406                    	jz	short UpdateProgressBar_DrawCursor
  5926                                  
  5927 00002801 83C608                  	add	esi, 8 ; next column
  5928 00002804 EBEE                    	jmp	short UpdateProgressBar_DrawProgress_@
  5929                                  	;;;
  5930                                  
  5931                                  UpdateProgressBar_ok:
  5932 00002806 C3                      	retn
  5933                                  
  5934                                  UpdateProgressBar_DrawCursor:
  5935                                  	; 22/12/2024
  5936 00002807 5A                      	pop	edx ; ***
  5937 00002808 B61F                    	mov	dh, PROGRESSBAR_ROW
  5938 0000280A E8A8FDFFFF              	call	setCursorPosition
  5939                                  
  5940                                  	; 21/12/2024
  5941                                  	; (write progress bar character in graphics mode)
  5942                                  	;;;;
  5943                                  	;;;mov	eax, 223
  5944                                  	;;;shl	eax, 4 ; 8*16 pixel user font
  5945                                  	;;mov	eax, 223*16
  5946                                  	;;mov	edi, fontbuff2 ; start of user font data
  5947                                  	;;add	edi, eax
  5948                                  	;mov	edi, fontbuff2+(223*16)
  5949                                  	;
  5950                                  	;sys	_video, 020Fh, 0Ch, 8001h
  5951                                  	; 22/12/2024
  5952                                  	;mov	eax, 223
  5953                                  	; eax = 0
  5954 0000280F B0DF                    	mov	al, 223
  5955 00002811 B10C                    	mov	cl, 0Ch ; red
  5956 00002813 E858FFFFFF              	call	write_character
  5957                                  	;;;;
  5958                                  
  5959                                  UpdateProgressBar_Clean:
  5960                                  	;pop	eax  ; **
  5961                                  	; 22/12/2024
  5962 00002818 5A                      	pop	edx  ; **
  5963                                  	; 21/12/2024
  5964 00002819 BD50000000              	mov	ebp, 80
  5965                                  	;sub	bp, ax
  5966 0000281E 6629D5                  	sub	bp, dx ; 22/12/2024
  5967 00002821 74E3                    	jz	short UpdateProgressBar_ok
  5968                                  
  5969 00002823 B61F                    	mov	dh, PROGRESSBAR_ROW
  5970                                  	;mov	dl, al ; 22/12/2024
  5971 00002825 E88DFDFFFF              	call	setCursorPosition
  5972                                  
  5973                                  	; 21/12/2024
  5974                                  	; (write progress bar chars in graphics mode)
  5975                                  	;;;;
  5976 0000282A 8B35[04750000]          	mov	esi, [screenpos]
  5977                                  UpdateProgressBar_Clean_@:
  5978                                  	;;;mov	eax, 223
  5979                                  	;;;shl	eax, 4 ; 8*16 pixel user font
  5980                                  	;;mov	eax, 223*16
  5981                                  	;mov	edi, fontbuff2 ; start of user font data
  5982                                  	;add	edi, eax
  5983                                  	;mov	edi, fontbuff2+(223*16)
  5984                                  	;
  5985                                  	;sys	_video, 020Fh, 08h, 8001h
  5986                                  	; 22/12/2024
  5987                                  	;mov	eax, 223
  5988                                  	; eax = 0
  5989 00002830 B0DF                    	mov	al, 223
  5990 00002832 B108                    	mov	cl, 08h ; gray (dark)
  5991 00002834 E837FFFFFF              	call	write_character
  5992                                  	;;;;
  5993                                  
  5994 00002839 4D                      	dec	ebp
  5995 0000283A 74CA                    	jz	short UpdateProgressBar_ok
  5996                                  
  5997 0000283C 83C608                  	add	esi, 8 ; next column
  5998 0000283F EBEF                    	jmp	short UpdateProgressBar_Clean_@
  5999                                  	;;;;
  6000                                  
  6001                                  ; --------------------------------------------------------
  6002                                  ; 17/11/2024
  6003                                  
  6004                                  Player_ProcessKey_Backwards:
  6005                                  	;; In order to go backwards 5 seconds:
  6006                                  	;; Update file pointer to the beginning, skip headers
  6007 00002841 B142                    	mov	cl, 'B'
  6008 00002843 EB02                    	jmp	short Player_ProcessKey_B_or_F
  6009                                  
  6010                                  Player_ProcessKey_Forwards:
  6011                                  	;; In order to fast-forward 5 seconds, set the file pointer
  6012                                  	;; to CUR_SEEK + 5 * Freq
  6013                                  
  6014 00002845 B146                    	mov	cl, 'F'
  6015                                  	;jmp	short Player_ProcessKey_B_or_F
  6016                                  
  6017                                  	; 01/12/2024 (32bit regsisters)
  6018                                  Player_ProcessKey_B_or_F:
  6019                                  	; 17/11/2024
  6020                                  	; 04/11/2024
  6021                                  	; (Ref: player.asm, Matan Alfasi, 2017)
  6022                                    
  6023                                  	; 04/11/2024
  6024 00002847 B805000000              	mov	eax, 5
  6025 0000284C 0FB71D[447F0000]        	movzx	ebx, word [WAVE_BlockAlign]
  6026 00002853 F7E3                    	mul	ebx
  6027 00002855 668B1D[3C7F0000]        	mov	bx, [WAVE_SampleRate]
  6028 0000285C F7E3                    	mul	ebx
  6029                                  	; eax = transfer byte count for 5 seconds
  6030                                  	
  6031                                  	; 17/11/2024
  6032 0000285E 80F942                  	cmp	cl, 'B'
  6033                                  	;mov	bx, [LoadedDataBytes]
  6034                                  	;mov	cx, [LoadedDataBytes+2]
  6035                                  	; 01/12/2024
  6036 00002861 8B0D[DC7F0000]          	mov	ecx, [LoadedDataBytes]
  6037 00002867 7508                    	jne	short move_forward ; cl = 'F'
  6038                                  move_backward:
  6039                                  	;sub	bx, ax
  6040                                  	;sbb	cx, dx
  6041 00002869 29C1                    	sub	ecx, eax
  6042 0000286B 7316                    	jnc	short move_file_pointer
  6043                                  move_to_beginning:
  6044                                  	;xor	cx, cx ; 0
  6045                                  	;xor	bx, bx ; 0
  6046 0000286D 31C9                    	xor	ecx, ecx
  6047 0000286F EB12                    	jmp	short move_file_pointer
  6048                                  move_forward: 
  6049                                  	;add	bx, ax
  6050                                  	;adc	cx, dx
  6051 00002871 01C1                    	add	ecx, eax
  6052 00002873 7208                    	jc	short move_to_end
  6053                                  	;cmp	cx, [DATA_SubchunkSize+2]
  6054                                  	;ja	short move_to_end
  6055                                  	;jb	short move_file_pointer
  6056                                  	;cmp	bx, [DATA_SubchunkSize]
  6057                                  	;jna	short move_file_pointer
  6058 00002875 3B0D[4C7F0000]          	cmp	ecx, [DATA_SubchunkSize]
  6059 0000287B 7606                    	jna	short move_file_pointer
  6060                                  move_to_end:
  6061                                  	;mov	bx, [DATA_SubchunkSize]
  6062                                  	;mov	cx, [DATA_SubchunkSize+2]
  6063 0000287D 8B0D[4C7F0000]          	mov	ecx, [DATA_SubchunkSize]
  6064                                  move_file_pointer:
  6065                                  	;mov	dx, bx    
  6066                                  	;mov	[LoadedDataBytes], dx
  6067                                  	;mov	[LoadedDataBytes+2], cx
  6068 00002883 890D[DC7F0000]          	mov	[LoadedDataBytes], ecx
  6069                                  	;add	dx, 44 ; + header
  6070                                  	;adc	cx, 0
  6071 00002889 83C12C                  	add	ecx, 44 
  6072                                  
  6073                                  	; seek
  6074                                  	;mov	bx, [filehandle]
  6075                                  	;mov	ax, 4200h
  6076                                  	;int	21h
  6077                                  	; 01/12/2024
  6078 0000288C 31D2                    	xor	edx, edx ; offset from beginning of the file
  6079                                  	; ecx = offset	
  6080                                  	; ebx = file handle
  6081                                  	; edx = 0
  6082                                  	sys	_seek, [filehandle]
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1> 
    87                              <1>  %if %0 >= 2
    88 0000288E 8B1D[547F0000]      <1>  mov ebx, %2
    89                              <1>  %if %0 >= 3
    90                              <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    93                              <1>  %endif
    94                              <1>  %endif
    95                              <1>  %endif
    96 00002894 B813000000          <1>  mov eax, %1
    97                              <1> 
    98 00002899 CD40                <1>  int 40h
  6083 0000289B C3                      	retn
  6084                                  
  6085                                  ; --------------------------------------------------------
  6086                                  
  6087                                  	; 25/12/2024
  6088                                  	; 22/12/2024 (VESA VBE mode graphics) 
  6089                                  	; (640*480, 256 colors)
  6090                                  clear_window:
  6091 0000289C 8B3D[00750000]          	mov	edi, [LFB_ADDR]
  6092                                  	;add	edi, (13*80*8*14)
  6093                                  	; 25/12/2024
  6094 000028A2 81C7009A0100            	add	edi, 164*640
  6095 000028A8 29C0                    	sub	eax, eax
  6096                                  	;mov	ecx, (16*640*14)/4 ; 16 rows
  6097 000028AA B900A00000              	mov	ecx, 64*640 ; 256 volume level points
  6098 000028AF F3AB                    	rep	stosd
  6099                                  	; 24/12/2024
  6100 000028B1 A3[10750000]            	mov	[prev_points], eax ; 0
  6101                                  	;
  6102 000028B6 C3                      	retn
  6103                                  
  6104                                  ; --------------------------------------------------------
  6105                                  
  6106                                  	; 22/12/2024
  6107                                  	; 21/12/2024
  6108                                  	; (simulate wave leds in graphics mode)
  6109                                  	; (640*480, 256 colors)
  6110                                  reset_wave_leds:
  6111                                  	; 22/12/2024
  6112 000028B7 C705[B8730000]0000-     	mov	dword [prev_leds], 0
  6112 000028BF 0000               
  6113                                  	;
  6114 000028C1 BD00050000              	mov	ebp, 16*80 ; 80 columns with 16 levels
  6115 000028C6 BE[B85F0000]            	mov	esi, wleds_addr
  6116                                  next_led:
  6117 000028CB AD                      	lodsd
  6118 000028CC 89C7                    	mov	edi, eax
  6119 000028CE BA0E000000              	mov	edx, 14 ; 14 lines (8*14 pixel font)
  6120 000028D3 BB[985F0000]            	mov	ebx, fontbuff2+(254*16) ; char = 254
  6121                                  led_line:
  6122 000028D8 8A23                    	mov	ah, [ebx]
  6123 000028DA B908000000              	mov	ecx, 8 ; 8 pixels (8*16 pixel font)
  6124                                  next_pixel:
  6125 000028DF D0E4                    	shl	ah, 1
  6126 000028E1 7308                    	jnc	short skip_this
  6127 000028E3 B008                    	mov	al, 8 ; gray
  6128 000028E5 AA                      	stosb
  6129 000028E6 49                      	dec	ecx
  6130 000028E7 75F6                    	jnz	short next_pixel
  6131 000028E9 EB06                    	jmp	short next_line
  6132                                  skip_this:
  6133 000028EB B000                    	mov	al, 0 ; black
  6134 000028ED AA                      	stosb
  6135 000028EE 49                      	dec	ecx
  6136 000028EF 75EE                    	jnz	short next_pixel
  6137                                  next_line:
  6138 000028F1 4A                      	dec	edx
  6139 000028F2 7504                    	jnz	short next_line_@
  6140 000028F4 4D                      	dec	ebp
  6141 000028F5 75D4                    	jnz	short next_led
  6142                                  	;clc	; 25/12/2024
  6143 000028F7 C3                      	retn
  6144                                  next_line_@:
  6145                                  	; 22/12/2024
  6146 000028F8 81C778020000            	add	edi, 640-8 ; next line
  6147 000028FE 43                      	inc	ebx
  6148 000028FF EBD7                    	jmp	short led_line	
  6149                                  
  6150                                  ; --------------------------------------------------------
  6151                                  
  6152                                  	; 22/12/2024 (graphics mode)
  6153                                  	; 09/12/2024
  6154                                  	; 19/11/2024
  6155                                  UpdateWaveLeds:
  6156                                  	; 23/11/2024
  6157                                  	;call	reset_wave_leds
  6158                                  	; 22/12/2024 (faster method, 80 against 80*16)
  6159                                  	; turn off previously lighting wave leds at first
  6160                                  	;;;
  6161 00002901 BE[B8730000]            	mov	esi, prev_leds
  6162 00002906 833E00                  	cmp	dword [esi], 0
  6163 00002909 7433                    	jz	short UpdateWaveLeds_ok
  6164 0000290B B950000000              	mov	ecx, 80
  6165                                  turn_off_led:
  6166 00002910 AD                      	lodsd
  6167 00002911 89C7                    	mov	edi, eax
  6168                                  	; edi = wave led address
  6169 00002913 BD0E000000              	mov	ebp, 14
  6170 00002918 BB[985F0000]            	mov	ebx, fontbuff2+(254*16) ; char = 254
  6171 0000291D 31D2                    	xor	edx, edx
  6172 0000291F B008                    	mov	al, 8 ; gray (dark)
  6173                                  toffl_next_line:
  6174                                  	;;mov	edx, 8 ; 8 pixels (8*14 pixel font)
  6175                                  	;mov	dl, 8
  6176 00002921 88C2                    	mov	dl, al ; 8
  6177 00002923 8A23                    	mov	ah, [ebx]
  6178                                  toffl_next_pixel:
  6179 00002925 D0E4                    	shl	ah, 1
  6180 00002927 7310                    	jnc	short toffl_skip_this
  6181 00002929 AA                      	stosb
  6182                                  toffl_next_pixel_@:
  6183 0000292A 4A                      	dec	edx
  6184 0000292B 75F8                    	jnz	short toffl_next_pixel
  6185 0000292D 4D                      	dec	ebp
  6186 0000292E 740C                    	jz	short toffl_next_led
  6187 00002930 81C778020000            	add	edi, 640-8 ; next line
  6188 00002936 43                      	inc	ebx
  6189 00002937 EBE8                    	jmp	short toffl_next_line
  6190                                  toffl_skip_this:
  6191 00002939 47                      	inc	edi
  6192 0000293A EBEE                    	jmp	short toffl_next_pixel_@
  6193                                  toffl_next_led:
  6194 0000293C E2D2                    	loop	turn_off_led
  6195                                  UpdateWaveLeds_ok:
  6196                                  	;;;
  6197                                  	; 09/12/2024
  6198                                  	;jmp	short turn_on_leds
  6199                                  
  6200                                  ; --------------------------------------------------------
  6201                                  
  6202                                  	; 21/12/2024 (VESA VBE Mode, 640*480, 256 colors)
  6203                                  	; 09/12/2024
  6204                                  	; 01/12/2024 (TRDOS 386, 32bit registers, flat memory)
  6205                                  	; 23/11/2024 (Retro DOS, 16bit registers, segmented)
  6206                                  	; 21/11/2024, 22/11/2024
  6207                                  	; 19/11/2024
  6208                                  turn_on_leds:
  6209                                  	; 09/12/2024
  6210                                  	; 07/12/2024
  6211 0000293E 8A15[1D7F0000]          	mov	dl, [half_buffer]
  6212                                  tol_@:
  6213                                  	; 07/12/2024
  6214 00002944 3815[1C7F0000]          	cmp	[pbuf_s], dl
  6215 0000294A 7520                    	jne	short tol_ns_buf
  6216 0000294C 8B1D[147F0000]          	mov	ebx, [wleds_dif]
  6217 00002952 8B35[187F0000]          	mov	esi, [pbuf_o]
  6218 00002958 8B0D[CC7F0000]          	mov	ecx, [buffersize] ; bytes
  6219 0000295E 29D9                    	sub	ecx, ebx ; sub ecx, [wleds_dif]
  6220 00002960 01DE                    	add	esi, ebx
  6221 00002962 7204                    	jc	short tol_o_@
  6222 00002964 39CE                    	cmp	esi, ecx
  6223 00002966 760C                    	jna	short tol_s_buf
  6224                                  tol_o_@:
  6225 00002968 89CE                    	mov	esi, ecx
  6226 0000296A EB08                    	jmp	short tol_s_buf
  6227                                  
  6228                                  tol_ns_buf:
  6229 0000296C 8815[1C7F0000]          	mov	[pbuf_s], dl
  6230 00002972 31F6                    	xor	esi, esi ; 0
  6231                                  tol_s_buf:
  6232 00002974 8935[187F0000]          	mov	[pbuf_o], esi
  6233                                  
  6234                                  tol_buf_@:
  6235                                  	; 07/12/2024
  6236 0000297A 81C6[00800000]          	add	esi, audio_buffer
  6237 00002980 B950000000              	mov	ecx, 80
  6238                                  	;xor	eax, eax ; 0
  6239 00002985 BB[B85F0000]            	mov	ebx, wleds_addr
  6240                                  	; 22/12/2024
  6241 0000298A BF[B8730000]            	mov	edi, prev_leds
  6242                                  tol_fill_c:
  6243 0000298F 31C0                    	xor	eax, eax ; 0 ; 22/12/2024
  6244 00002991 66AD                    	lodsw	; left
  6245 00002993 80C480                  	add	ah, 80h	; 24/12/2024
  6246 00002996 89C2                    	mov	edx, eax
  6247 00002998 66AD                    	lodsw	; right
  6248                                  	;add	ax, dx
  6249 0000299A 80C480                  	add	ah, 80h
  6250                                  	;; 21/12/2024 (16 volume levels)
  6251                                  	;shr	eax, 12
  6252                                  	; 24/12/2024
  6253 0000299D 01D0                    	add	eax, edx
  6254 0000299F C1E80D                  	shr	eax, 13	; (L+R/2) & 16 volume levels
  6255                                  
  6256 000029A2 53                      	push	ebx ; *
  6257                                  	; 01/12/2024
  6258 000029A3 C1E002                  	shl	eax, 2
  6259 000029A6 01C3                    	add	ebx, eax
  6260                                  	; 01/12/2024 (32bit address)
  6261                                  	;mov	edi, [ebx]
  6262                                  	; 22/12/2024
  6263 000029A8 8B03                    	mov	eax, [ebx]
  6264 000029AA AB                      	stosd
  6265 000029AB 57                      	push	edi ; **
  6266 000029AC 89C7                    	mov	edi, eax
  6267                                  	;;;
  6268                                  	; 21/12/2024
  6269                                  	; (simulate wave leds in graphics mode)
  6270                                  	; (640*480, 256 colors)
  6271                                  turn_on_led:
  6272                                  	; edi = wave led address
  6273 000029AE BD0E000000              	mov	ebp, 14
  6274 000029B3 BB[985F0000]            	mov	ebx, fontbuff2+(254*16) ; char = 254
  6275 000029B8 A0[B5410000]            	mov	al, [ccolor]
  6276                                  tol_next_line:
  6277 000029BD BA08000000              	mov	edx, 8 ; 8 pixels (8*14 pixel font)
  6278 000029C2 8A23                    	mov	ah, [ebx]
  6279                                  tol_next_pixel:
  6280 000029C4 D0E4                    	shl	ah, 1
  6281 000029C6 7310                    	jnc	short tol_skip_this
  6282 000029C8 AA                      	stosb
  6283                                  tol_next_pixel_@:
  6284 000029C9 4A                      	dec	edx
  6285 000029CA 75F8                    	jnz	short tol_next_pixel
  6286 000029CC 4D                      	dec	ebp
  6287 000029CD 740C                    	jz	short tol_next_led
  6288                                  	; 22/12/2024
  6289 000029CF 81C778020000            	add	edi, 640-8 ; next line
  6290 000029D5 43                      	inc	ebx
  6291 000029D6 EBE5                    	jmp	short tol_next_line
  6292                                  tol_skip_this:
  6293 000029D8 47                      	inc	edi
  6294 000029D9 EBEE                    	jmp	short tol_next_pixel_@
  6295                                  tol_next_led:
  6296                                  	; 22/12/2024
  6297 000029DB 5F                      	pop	edi ; **
  6298                                  	;;;
  6299 000029DC 5B                      	pop	ebx ; *
  6300 000029DD 83C340                  	add	ebx, 16*4
  6301 000029E0 E2AD                    	loop	tol_fill_c
  6302                                  
  6303 000029E2 C3                      	retn
  6304                                  
  6305                                  ; -------------------------------------------------------------
  6306                                  
  6307                                  ; -------------------------------------------------------------
  6308                                  ; ac97.inc (11/11/2023)
  6309                                  ; -------------------------------------------------------------
  6310                                  
  6311                                  ; special characters
  6312                                  LF      EQU 10
  6313                                  CR      EQU 13
  6314                                  
  6315                                  ; PCI stuff
  6316                                  
  6317                                  ; Intel ICH2 equates. It is assumed that ICH0 and plain ole ICH are compatible.
  6318                                  
  6319                                  INTEL_VID       equ     8086h           ; Intel's PCI vendor ID
  6320                                  ; 03/11/2023 - Erdogan Tan (Ref: MenuetOS AC97 WAV Player source code, 2004)
  6321                                  SIS_VID		equ	1039h
  6322                                  NVIDIA_VID	equ	10DEh	 ; Ref: MPXPLAY/SBEMU/KOLIBRIOS AC97 source c.
  6323                                  AMD_VID		equ	1022h
  6324                                  
  6325                                  ICH_DID         equ     2415h           ; ICH device ID
  6326                                  ICH0_DID        equ     2425h           ; ICH0
  6327                                  ICH2_DID        equ     2445h           ; ICH2 I think there are more ICHes.
  6328                                                                          ; they all should be compatible.
  6329                                  
  6330                                  ; 17/02/2017 (Erdogan Tan, ref: ALSA Device IDs, ALSA project)
  6331                                  ICH3_DID	equ     2485h           ; ICH3
  6332                                  ICH4_DID        equ     24C5h           ; ICH4
  6333                                  ICH5_DID	equ     24D5h           ; ICH5
  6334                                  ICH6_DID	equ     266Eh           ; ICH6
  6335                                  ESB6300_DID	equ     25A6h           ; 6300ESB
  6336                                  ESB631X_DID	equ     2698h           ; 631XESB
  6337                                  ICH7_DID	equ	27DEh		; ICH7
  6338                                  ; 03/11/2023 - Erdogan Tan (Ref: MenuetOS AC97 WAV Player source code, 2004)
  6339                                  MX82440_DID	equ	7195h
  6340                                  SI7012_DID	equ	7012h
  6341                                  NFORCE_DID	equ	01B1h
  6342                                  NFORCE2_DID	equ	006Ah
  6343                                  AMD8111_DID	equ	746Dh
  6344                                  AMD768_DID	equ	7445h
  6345                                  ; 03/11/2023 - Erdogan Tan - Ref: MPXPLAY/SBEMU/KOLIBRIOS AC97 source code
  6346                                  CK804_DID	equ	0059h
  6347                                  MCP04_DID	equ	003Ah
  6348                                  CK8_DID		equ	008Ah
  6349                                  NFORCE3_DID	equ	00DAh
  6350                                  CK8S_DID	equ	00EAh
  6351                                  
  6352                                  ; -------------------------------------------------------------
  6353                                  
  6354                                  ; 22/12/2024
  6355 000029E3 90                      align 4
  6356                                  
  6357                                  ; 13/11/2024
  6358                                  ; ('<<' to 'shl' conversion for FASM)
  6359                                  ;
  6360                                  ; 29/05/2024 (TRDOS 386)
  6361                                  ; 17/02/2017
  6362                                  ; Valid ICH device IDs
  6363                                  
  6364                                  valid_ids:
  6365                                  	;dd (ICH_DID shl 16) + INTEL_VID	; 8086h:2415h
  6366 000029E4 86801524                	dd (ICH_DID << 16) + INTEL_VID		; 8086h:2415h
  6367 000029E8 86802524                	dd (ICH0_DID << 16) + INTEL_VID		; 8086h:2425h
  6368 000029EC 86804524                	dd (ICH2_DID << 16) + INTEL_VID		; 8086h:2445h
  6369 000029F0 86808524                	dd (ICH3_DID << 16) + INTEL_VID		; 8086h:2485h
  6370 000029F4 8680C524                	dd (ICH4_DID << 16) + INTEL_VID		; 8086h:24C5h
  6371 000029F8 8680D524                	dd (ICH5_DID << 16) + INTEL_VID		; 8086h:24D5h
  6372 000029FC 86806E26                	dd (ICH6_DID << 16) + INTEL_VID		; 8086h:266Eh
  6373 00002A00 8680A625                	dd (ESB6300_DID << 16) + INTEL_VID	; 8086h:25A6h
  6374 00002A04 86809826                	dd (ESB631X_DID << 16) + INTEL_VID	; 8086h:2698h
  6375 00002A08 8680DE27                	dd (ICH7_DID << 16) + INTEL_VID		; 8086h:27DEh
  6376                                  	; 03/11/2023 - Erdogan Tan
  6377 00002A0C 86809571                	dd (MX82440_DID << 16) + INTEL_VID	; 8086h:7195h
  6378 00002A10 39101270                	dd (SI7012_DID << 16)  + SIS_VID	; 1039h:7012h
  6379 00002A14 DE10B101                	dd (NFORCE_DID << 16)  + NVIDIA_VID	; 10DEh:01B1h
  6380 00002A18 DE106A00                	dd (NFORCE2_DID << 16) + NVIDIA_VID	; 10DEh:006Ah
  6381 00002A1C 22106D74                	dd (AMD8111_DID << 16) + AMD_VID	; 1022h:746Dh
  6382 00002A20 22104574                	dd (AMD768_DID << 16)  + AMD_VID	; 1022h:7445h
  6383 00002A24 DE105900                	dd (CK804_DID << 16) + NVIDIA_VID	; 10DEh:0059h
  6384 00002A28 DE103A00                	dd (MCP04_DID << 16) + NVIDIA_VID	; 10DEh:003Ah
  6385 00002A2C DE108A00                	dd (CK8_DID << 16) + NVIDIA_VID		; 1022h:008Ah
  6386 00002A30 DE10DA00                	dd (NFORCE3_DID << 16) + NVIDIA_VID	; 10DEh:00DAh
  6387 00002A34 DE10EA00                	dd (CK8S_DID << 16) + NVIDIA_VID	; 10DEh:00EAh
  6388                                  
  6389                                  valid_id_count equ (($ - valid_ids)>>2)	; 05/11/2023
  6390                                  ; 13/11/2024
  6391                                  ;valid_id_count = ($ - valid_ids) shr 2	; 05/11/2023
  6392                                  
  6393 00002A38 00000000                	dd 0
  6394                                  
  6395                                  Credits:
  6396 00002A3C 564741205741562050-     	db 'VGA WAV Player for TRDOS 386 by Erdogan Tan. '
  6396 00002A45 6C6179657220666F72-
  6396 00002A4E 205452444F53203338-
  6396 00002A57 36206279204572646F-
  6396 00002A60 67616E2054616E2E20 
  6397 00002A69 446563656D62657220-     	db 'December 2024.',10,13,0
  6397 00002A72 323032342E0A0D00   
  6398 00002A7A 32372F31322F323032-     	db '27/12/2024', 10,13
  6398 00002A83 340A0D             
  6399                                  ; 15/11/2024
  6400                                  reset:
  6401 00002A86 00                      	db 0
  6402                                  
  6403                                  msgAudioCardInfo:
  6404 00002A87 666F7220496E74656C-     	db 'for Intel AC97 (ICH) Audio Controller.', 10,13,0
  6404 00002A90 204143393720284943-
  6404 00002A99 482920417564696F20-
  6404 00002AA2 436F6E74726F6C6C65-
  6404 00002AAB 722E0A0D00         
  6405                                  
  6406                                  	; 25/12/2024
  6407                                  msg_usage:
  6408 00002AB0 75736167653A205647-     	db 'usage: VGAPLAY <FileName1> <FileName2> <...>',10,13,0
  6408 00002AB9 41504C4159203C4669-
  6408 00002AC2 6C654E616D65313E20-
  6408 00002ACB 3C46696C654E616D65-
  6408 00002AD4 323E203C2E2E2E3E0A-
  6408 00002ADD 0D00               
  6409                                  
  6410                                  noDevMsg:
  6411 00002ADF 4572726F723A20556E-     	db 'Error: Unable to find AC97 audio device!'
  6411 00002AE8 61626C6520746F2066-
  6411 00002AF1 696E64204143393720-
  6411 00002AFA 617564696F20646576-
  6411 00002B03 69636521           
  6412 00002B07 0A0D00                  	db 10,13,0
  6413                                  
  6414                                  noFileErrMsg:
  6415 00002B0A 4572726F723A206669-     	db 'Error: file not found.',10,13,0
  6415 00002B13 6C65206E6F7420666F-
  6415 00002B1C 756E642E0A0D00     
  6416                                  
  6417                                  ; 07/12/2024
  6418                                  trdos386_err_msg:
  6419 00002B23 5452444F5320333836-     	db 'TRDOS 386 System call error !',10,13,0
  6419 00002B2C 2053797374656D2063-
  6419 00002B35 616C6C206572726F72-
  6419 00002B3E 20210A0D00         
  6420                                  
  6421                                  ; 29/05/2024
  6422                                  ; 11/11/2023
  6423                                  msg_init_err:
  6424 00002B43 0D0A                    	db CR, LF
  6425 00002B45 4143393720436F6E74-     	db 'AC97 Controller/Codec initialization error !'
  6425 00002B4E 726F6C6C65722F436F-
  6425 00002B57 64656320696E697469-
  6425 00002B60 616C697A6174696F6E-
  6425 00002B69 206572726F722021   
  6426 00002B71 0D0A00                  	db CR, LF, 0 ; 07/12/2024
  6427                                  
  6428                                  ; 25/11/2023
  6429                                  msg_no_vra:
  6430 00002B74 0A0D                    	db 10,13
  6431 00002B76 4E6F20565241207375-     	db 'No VRA support ! Only 48 kHZ sample rate supported !'
  6431 00002B7F 70706F72742021204F-
  6431 00002B88 6E6C79203438206B48-
  6431 00002B91 5A2073616D706C6520-
  6431 00002B9A 726174652073757070-
  6431 00002BA3 6F727465642021     
  6432 00002BAA 0A0D00                  	db 10,13,0
  6433                                  
  6434                                  ; 19/11/2024
  6435                                  ; 03/06/2017
  6436                                  hex_chars:
  6437 00002BAD 303132333435363738-     	db '0123456789ABCDEF', 0
  6437 00002BB6 3941424344454600   
  6438                                  msgAC97Info:
  6439 00002BBE 0D0A                    	db 0Dh, 0Ah
  6440 00002BC0 204143393720417564-     	db ' AC97 Audio Controller & Codec Info', 0Dh, 0Ah 
  6440 00002BC9 696F20436F6E74726F-
  6440 00002BD2 6C6C6572202620436F-
  6440 00002BDB 64656320496E666F0D-
  6440 00002BE4 0A                 
  6441 00002BE5 2056656E646F722049-     	db ' Vendor ID: '
  6441 00002BEE 443A20             
  6442                                  msgVendorId:
  6443 00002BF1 303030306820446576-     	db '0000h Device ID: '
  6443 00002BFA 6963652049443A20   
  6444                                  msgDevId:
  6445 00002C02 30303030680D0A          	db '0000h', 0Dh, 0Ah
  6446 00002C09 204275733A20            	db ' Bus: '
  6447                                  msgBusNo:
  6448 00002C0F 303068204465766963-     	db '00h Device: '
  6448 00002C18 653A20             
  6449                                  msgDevNo:
  6450 00002C1B 3030682046756E6374-     	db '00h Function: '
  6450 00002C24 696F6E3A20         
  6451                                  msgFncNo:
  6452 00002C29 303068                  	db '00h'
  6453 00002C2C 0D0A                    	db 0Dh, 0Ah
  6454 00002C2E 204E414D4241523A20      	db ' NAMBAR: '
  6455                                  msgNamBar:
  6456 00002C37 30303030682020          	db '0000h  '
  6457 00002C3E 4E41424D4241523A20      	db 'NABMBAR: '
  6458                                  msgNabmBar:
  6459 00002C47 303030306820204952-     	db '0000h  IRQ: '
  6459 00002C50 513A20             
  6460                                  msgIRQ:
  6461 00002C53 3030                    	dw 3030h
  6462 00002C55 0D0A00                  	db 0Dh, 0Ah, 0
  6463                                  ; 25/11/2023
  6464                                  msgVRAheader:
  6465 00002C58 205652412073757070-     	db ' VRA support: '
  6465 00002C61 6F72743A20         
  6466 00002C66 00                      	db 0	
  6467                                  msgVRAyes:
  6468 00002C67 5945530D0A00            	db 'YES', 0Dh, 0Ah, 0
  6469                                  msgVRAno:
  6470 00002C6D 4E4F200D0A              	db 'NO ', 0Dh, 0Ah
  6471 00002C72 2028496E746572706F-     	db ' (Interpolated sample rate playing method)'
  6471 00002C7B 6C617465642073616D-
  6471 00002C84 706C65207261746520-
  6471 00002C8D 706C6179696E67206D-
  6471 00002C96 6574686F6429       
  6472 00002C9C 0D0A00                  	db 0Dh, 0Ah, 0
  6473                                  
  6474 00002C9F 90                      align 4
  6475                                  
  6476                                  ; -------------------------------------------------------------
  6477                                  
  6478                                  	; 21/12/2024
  6479                                  SplashScreen:
  6480 00002CA0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6480 00002CA9 202020202020202020-
  6480 00002CB2 202020202020202020-
  6480 00002CBB 202020202020202020-
  6480 00002CC4 202020202020202020-
  6480 00002CCD 202020202020202020-
  6480 00002CD6 202020202020202020-
  6480 00002CDF 202020202020202020-
  6480 00002CE8 2020202020DDDBDE   
  6481 00002CF0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6481 00002CF9 202020202020202020-
  6481 00002D02 202020202020202020-
  6481 00002D0B 202020202020202020-
  6481 00002D14 202020202020202020-
  6481 00002D1D 202020202020202020-
  6481 00002D26 202020202020202020-
  6481 00002D2F 202020202020202020-
  6481 00002D38 2020202020DDDBDE   
  6482 00002D40 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6482 00002D49 202020202020202020-
  6482 00002D52 202020202020202020-
  6482 00002D5B 202020202020202020-
  6482 00002D64 202020202020202020-
  6482 00002D6D 202020202020202020-
  6482 00002D76 202020202020202020-
  6482 00002D7F 202020202020202020-
  6482 00002D88 2020202020DDDBDE   
  6483 00002D90 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6483 00002D99 202020202020202020-
  6483 00002DA2 202020202020202020-
  6483 00002DAB 202020202020202020-
  6483 00002DB4 202020202020202020-
  6483 00002DBD 202020202020202020-
  6483 00002DC6 202020202020202020-
  6483 00002DCF 202020202020202020-
  6483 00002DD8 2020202020DDDBDE   
  6484 00002DE0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6484 00002DE9 202020202020202020-
  6484 00002DF2 202020202020202020-
  6484 00002DFB 202020202020202020-
  6484 00002E04 202020202020202020-
  6484 00002E0D 202020202020202020-
  6484 00002E16 202020202020202020-
  6484 00002E1F 202020202020202020-
  6484 00002E28 2020202020DDDBDE   
  6485 00002E30 DDDBDE202020202020-     	db  221, 219, 222, "                     _______   ______        _______.                     ", 221, 219, 222
  6485 00002E39 202020202020202020-
  6485 00002E42 2020202020205F5F5F-
  6485 00002E4B 5F5F5F5F2020205F5F-
  6485 00002E54 5F5F5F5F2020202020-
  6485 00002E5D 2020205F5F5F5F5F5F-
  6485 00002E66 5F2E20202020202020-
  6485 00002E6F 202020202020202020-
  6485 00002E78 2020202020DDDBDE   
  6486 00002E80 DDDBDE202020202020-     	db  221, 219, 222, "                    |       \ /  __  \      /       |                     ", 221, 219, 222
  6486 00002E89 202020202020202020-
  6486 00002E92 20202020207C202020-
  6486 00002E9B 202020205C202F2020-
  6486 00002EA4 5F5F20205C20202020-
  6486 00002EAD 20202F202020202020-
  6486 00002EB6 207C20202020202020-
  6486 00002EBF 202020202020202020-
  6486 00002EC8 2020202020DDDBDE   
  6487 00002ED0 DDDBDE202020202020-     	db  221, 219, 222, "                    |  .--.  |  |  |  |    |   (----`                     ", 221, 219, 222
  6487 00002ED9 202020202020202020-
  6487 00002EE2 20202020207C20202E-
  6487 00002EEB 2D2D2E20207C20207C-
  6487 00002EF4 20207C20207C202020-
  6487 00002EFD 207C202020282D2D2D-
  6487 00002F06 2D6020202020202020-
  6487 00002F0F 202020202020202020-
  6487 00002F18 2020202020DDDBDE   
  6488 00002F20 DDDBDE202020202020-     	db  221, 219, 222, "                    |  |  |  |  |  |  |     \   \                         ", 221, 219, 222
  6488 00002F29 202020202020202020-
  6488 00002F32 20202020207C20207C-
  6488 00002F3B 20207C20207C20207C-
  6488 00002F44 20207C20207C202020-
  6488 00002F4D 20205C2020205C2020-
  6488 00002F56 202020202020202020-
  6488 00002F5F 202020202020202020-
  6488 00002F68 2020202020DDDBDE   
  6489 00002F70 DDDBDE202020202020-     	db  221, 219, 222, "                    |  '--'  |  `--'  | .----)   |                        ", 221, 219, 222
  6489 00002F79 202020202020202020-
  6489 00002F82 20202020207C202027-
  6489 00002F8B 2D2D2720207C202060-
  6489 00002F94 2D2D2720207C202E2D-
  6489 00002F9D 2D2D2D292020207C20-
  6489 00002FA6 202020202020202020-
  6489 00002FAF 202020202020202020-
  6489 00002FB8 2020202020DDDBDE   
  6490 00002FC0 DDDBDE202020202020-     	db  221, 219, 222, "                    |_______/ \______/  |_______/                         ", 221, 219, 222
  6490 00002FC9 202020202020202020-
  6490 00002FD2 20202020207C5F5F5F-
  6490 00002FDB 5F5F5F5F2F205C5F5F-
  6490 00002FE4 5F5F5F5F2F20207C5F-
  6490 00002FED 5F5F5F5F5F5F2F2020-
  6490 00002FF6 202020202020202020-
  6490 00002FFF 202020202020202020-
  6490 00003008 2020202020DDDBDE   
  6491 00003010 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6491 00003019 202020202020202020-
  6491 00003022 202020202020202020-
  6491 0000302B 202020202020202020-
  6491 00003034 202020202020202020-
  6491 0000303D 202020202020202020-
  6491 00003046 202020202020202020-
  6491 0000304F 202020202020202020-
  6491 00003058 2020202020DDDBDE   
  6492 00003060 DDDBDE20202020202E-     	db  221, 219, 222, "     .______    __          ___   ____    ____  _______ .______           ", 221, 219, 222
  6492 00003069 5F5F5F5F5F5F202020-
  6492 00003072 205F5F202020202020-
  6492 0000307B 202020205F5F5F2020-
  6492 00003084 205F5F5F5F20202020-
  6492 0000308D 5F5F5F5F20205F5F5F-
  6492 00003096 5F5F5F5F202E5F5F5F-
  6492 0000309F 5F5F5F202020202020-
  6492 000030A8 2020202020DDDBDE   
  6493 000030B0 DDDBDE20202020207C-     	db  221, 219, 222, "     |   _  \  |  |        /   \  \   \  /   / |   ____||   _  \          ", 221, 219, 222
  6493 000030B9 2020205F20205C2020-
  6493 000030C2 7C20207C2020202020-
  6493 000030CB 2020202F2020205C20-
  6493 000030D4 205C2020205C20202F-
  6493 000030DD 2020202F207C202020-
  6493 000030E6 5F5F5F5F7C7C202020-
  6493 000030EF 5F20205C2020202020-
  6493 000030F8 2020202020DDDBDE   
  6494 00003100 DDDBDE20202020207C-     	db  221, 219, 222, "     |  |_)  | |  |       /  ^  \  \   \/   /  |  |__   |  |_)  |         ", 221, 219, 222
  6494 00003109 20207C5F2920207C20-
  6494 00003112 7C20207C2020202020-
  6494 0000311B 20202F20205E20205C-
  6494 00003124 20205C2020205C2F20-
  6494 0000312D 20202F20207C20207C-
  6494 00003136 5F5F2020207C20207C-
  6494 0000313F 5F2920207C20202020-
  6494 00003148 2020202020DDDBDE   
  6495 00003150 DDDBDE20202020207C-     	db  221, 219, 222, "     |   ___/  |  |      /  /_\  \  \_    _/   |   __|  |      /          ", 221, 219, 222
  6495 00003159 2020205F5F5F2F2020-
  6495 00003162 7C20207C2020202020-
  6495 0000316B 202F20202F5F5C2020-
  6495 00003174 5C20205C5F20202020-
  6495 0000317D 5F2F2020207C202020-
  6495 00003186 5F5F7C20207C202020-
  6495 0000318F 2020202F2020202020-
  6495 00003198 2020202020DDDBDE   
  6496 000031A0 DDDBDE20202020207C-     	db  221, 219, 222, "     |  |      |  `----./  _____  \   |  |     |  |____ |  |\  \----.     ", 221, 219, 222
  6496 000031A9 20207C202020202020-
  6496 000031B2 7C2020602D2D2D2D2E-
  6496 000031BB 2F20205F5F5F5F5F20-
  6496 000031C4 205C2020207C20207C-
  6496 000031CD 20202020207C20207C-
  6496 000031D6 5F5F5F5F207C20207C-
  6496 000031DF 5C20205C2D2D2D2D2E-
  6496 000031E8 2020202020DDDBDE   
  6497 000031F0 DDDBDE20202020207C-     	db  221, 219, 222, "     | _|      |_______/__/     \__\  |__|     |_______|| _| `._____|     ", 221, 219, 222
  6497 000031F9 205F7C202020202020-
  6497 00003202 7C5F5F5F5F5F5F5F2F-
  6497 0000320B 5F5F2F20202020205C-
  6497 00003214 5F5F5C20207C5F5F7C-
  6497 0000321D 20202020207C5F5F5F-
  6497 00003226 5F5F5F5F7C7C205F7C-
  6497 0000322F 20602E5F5F5F5F5F7C-
  6497 00003238 2020202020DDDBDE   
  6498 00003240 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6498 00003249 202020202020202020-
  6498 00003252 202020202020202020-
  6498 0000325B 202020202020202020-
  6498 00003264 202020202020202020-
  6498 0000326D 202020202020202020-
  6498 00003276 202020202020202020-
  6498 0000327F 202020202020202020-
  6498 00003288 2020202020DDDBDE   
  6499 00003290 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6499 00003299 202020202020202020-
  6499 000032A2 202020202020202020-
  6499 000032AB 202020202020202020-
  6499 000032B4 202020202020202020-
  6499 000032BD 202020202020202020-
  6499 000032C6 202020202020202020-
  6499 000032CF 202020202020202020-
  6499 000032D8 2020202020DDDBDE   
  6500 000032E0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6500 000032E9 202020202020202020-
  6500 000032F2 202020202020202020-
  6500 000032FB 202020202020202020-
  6500 00003304 202020202020202020-
  6500 0000330D 202020202020202020-
  6500 00003316 202020202020202020-
  6500 0000331F 202020202020202020-
  6500 00003328 2020202020DDDBDE   
  6501 00003330 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6501 00003339 202020202020202020-
  6501 00003342 202020202020202020-
  6501 0000334B 202020202020202020-
  6501 00003354 202020202020202020-
  6501 0000335D 202020202020202020-
  6501 00003366 202020202020202020-
  6501 0000336F 202020202020202020-
  6501 00003378 2020202020DDDBDE   
  6502 00003380 DDDBDE202020202020-     	db  221, 219, 222, "                                WELCOME TO                                ", 221, 219, 222
  6502 00003389 202020202020202020-
  6502 00003392 202020202020202020-
  6502 0000339B 202020202020202057-
  6502 000033A4 454C434F4D4520544F-
  6502 000033AD 202020202020202020-
  6502 000033B6 202020202020202020-
  6502 000033BF 202020202020202020-
  6502 000033C8 2020202020DDDBDE   
  6503 000033D0 DDDBDE202020202020-     	db  221, 219, 222, "                                DOS PLAYER                                ", 221, 219, 222
  6503 000033D9 202020202020202020-
  6503 000033E2 202020202020202020-
  6503 000033EB 202020202020202044-
  6503 000033F4 4F5320504C41594552-
  6503 000033FD 202020202020202020-
  6503 00003406 202020202020202020-
  6503 0000340F 202020202020202020-
  6503 00003418 2020202020DDDBDE   
  6504 00003420 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6504 00003429 202020202020202020-
  6504 00003432 202020202020202020-
  6504 0000343B 202020202020202020-
  6504 00003444 202020202020202020-
  6504 0000344D 202020202020202020-
  6504 00003456 202020202020202020-
  6504 0000345F 202020202020202020-
  6504 00003468 2020202020DDDBDE   
  6505 00003470 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6505 00003479 202020202020202020-
  6505 00003482 202020202020202020-
  6505 0000348B 202020202020202020-
  6505 00003494 202020202020202020-
  6505 0000349D 202020202020202020-
  6505 000034A6 202020202020202020-
  6505 000034AF 202020202020202020-
  6505 000034B8 2020202020DDDBDE   
  6506 000034C0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6506 000034C9 202020202020202020-
  6506 000034D2 202020202020202020-
  6506 000034DB 202020202020202020-
  6506 000034E4 202020202020202020-
  6506 000034ED 202020202020202020-
  6506 000034F6 202020202020202020-
  6506 000034FF 202020202020202020-
  6506 00003508 2020202020DDDBDE   
  6507 00003510 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6507 00003519 202020202020202020-
  6507 00003522 202020202020202020-
  6507 0000352B 202020202020202020-
  6507 00003534 202020202020202020-
  6507 0000353D 202020202020202020-
  6507 00003546 202020202020202020-
  6507 0000354F 202020202020202020-
  6507 00003558 2020202020DDDBDE   
  6508 00003560 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6508 00003569 202020202020202020-
  6508 00003572 202020202020202020-
  6508 0000357B 202020202020202020-
  6508 00003584 202020202020202020-
  6508 0000358D 202020202020202020-
  6508 00003596 202020202020202020-
  6508 0000359F 202020202020202020-
  6508 000035A8 2020202020DDDBDE   
  6509 000035B0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6509 000035B9 202020202020202020-
  6509 000035C2 202020202020202020-
  6509 000035CB 202020202020202020-
  6509 000035D4 202020202020202020-
  6509 000035DD 202020202020202020-
  6509 000035E6 202020202020202020-
  6509 000035EF 202020202020202020-
  6509 000035F8 2020202020DDDBDE   
  6510 00003600 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6510 00003609 202020202020202020-
  6510 00003612 202020202020202020-
  6510 0000361B 202020202020202020-
  6510 00003624 202020202020202020-
  6510 0000362D 202020202020202020-
  6510 00003636 202020202020202020-
  6510 0000363F 202020202020202020-
  6510 00003648 2020202020DDDBDE   
  6511 00003650 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6511 00003659 202020202020202020-
  6511 00003662 202020202020202020-
  6511 0000366B 202020202020202020-
  6511 00003674 202020202020202020-
  6511 0000367D 202020202020202020-
  6511 00003686 202020202020202020-
  6511 0000368F 202020202020202020-
  6511 00003698 2020202020DDDBDE   
  6512 000036A0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6512 000036A9 202020202020202020-
  6512 000036B2 202020202020202020-
  6512 000036BB 202020202020202020-
  6512 000036C4 202020202020202020-
  6512 000036CD 202020202020202020-
  6512 000036D6 202020202020202020-
  6512 000036DF 202020202020202020-
  6512 000036E8 2020202020DDDBDE   
  6513 000036F0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  6513 000036F9 202020202020202020-
  6513 00003702 202020202020202020-
  6513 0000370B 202020202020202020-
  6513 00003714 202020202020202020-
  6513 0000371D 202020202020202020-
  6513 00003726 202020202020202020-
  6513 0000372F 202020202020202020-
  6513 00003738 2020202020DDDBDE   
  6514 00003740 00                      	db 0
  6515                                  
  6516                                  ; -------------------------------------------------------------
  6517                                  
  6518                                  	; 25/12/2024
  6519                                  PlayingScreen:
  6520 00003741 DBDBDBDBDBDBDBDBDB-     	db  34 dup(219), " DOS Player ", 34 dup(219)
  6520 0000374A DBDBDBDBDBDBDBDBDB-
  6520 00003753 DBDBDBDBDBDBDBDBDB-
  6520 0000375C DBDBDBDBDBDBDB2044-
  6520 00003765 4F5320506C61796572-
  6520 0000376E 20DBDBDBDBDBDBDBDB-
  6520 00003777 DBDBDBDBDBDBDBDBDB-
  6520 00003780 DBDBDBDBDBDBDBDBDB-
  6520 00003789 DBDBDBDBDBDBDBDB   
  6521 00003791 C9CDCDCDCDCDCDCDCD-     	db  201, 78 dup(205), 187
  6521 0000379A CDCDCDCDCDCDCDCDCD-
  6521 000037A3 CDCDCDCDCDCDCDCDCD-
  6521 000037AC CDCDCDCDCDCDCDCDCD-
  6521 000037B5 CDCDCDCDCDCDCDCDCD-
  6521 000037BE CDCDCDCDCDCDCDCDCD-
  6521 000037C7 CDCDCDCDCDCDCDCDCD-
  6521 000037D0 CDCDCDCDCDCDCDCDCD-
  6521 000037D9 CDCDCDCDCDCDCDBB   
  6522 000037E1 BA2020202020202020-     	db  186, 33 dup(32), " User Guide ", 33 dup(32), 186
  6522 000037EA 202020202020202020-
  6522 000037F3 202020202020202020-
  6522 000037FC 202020202020202055-
  6522 00003805 736572204775696465-
  6522 0000380E 202020202020202020-
  6522 00003817 202020202020202020-
  6522 00003820 202020202020202020-
  6522 00003829 20202020202020BA   
  6523 00003831 BA2020202020203C53-     	db  186, 6  dup(32), "<Space>         Play/Pause    ", 4 dup(32), "<N>/<P>         Next/Previous", 9 dup(32), 186
  6523 0000383A 706163653E20202020-
  6523 00003843 2020202020506C6179-
  6523 0000384C 2F5061757365202020-
  6523 00003855 20202020203C4E3E2F-
  6523 0000385E 3C503E202020202020-
  6523 00003867 2020204E6578742F50-
  6523 00003870 726576696F75732020-
  6523 00003879 20202020202020BA   
  6524 00003881 BA2020202020203C53-     	db  186, 6  dup(32), "<S>             Stop          ", 4 dup(32), "<Enter>/<G>     Wave Lighting", 9 dup(32), 186
  6524 0000388A 3E2020202020202020-
  6524 00003893 202020202053746F70-
  6524 0000389C 202020202020202020-
  6524 000038A5 20202020203C456E74-
  6524 000038AE 65723E2F3C473E2020-
  6524 000038B7 20202057617665204C-
  6524 000038C0 69676874696E672020-
  6524 000038C9 20202020202020BA   
  6525 000038D1 BA2020202020203C46-     	db  186, 6  dup(32), "<F>             Forwards      ", 4 dup(32), "<+>/<->         Inc/Dec Volume", 8 dup(32), 186
  6525 000038DA 3E2020202020202020-
  6525 000038E3 2020202020466F7277-
  6525 000038EC 617264732020202020-
  6525 000038F5 20202020203C2B3E2F-
  6525 000038FE 3C2D3E202020202020-
  6525 00003907 202020496E632F4465-
  6525 00003910 6320566F6C756D6520-
  6525 00003919 20202020202020BA   
  6526 00003921 BA2020202020203C42-     	db  186, 6  dup(32), "<B>             Backwards     ", 4 dup(32), "<Q>             Quit Program ", 9 dup(32), 186
  6526 0000392A 3E2020202020202020-
  6526 00003933 20202020204261636B-
  6526 0000393C 776172647320202020-
  6526 00003945 20202020203C513E20-
  6526 0000394E 202020202020202020-
  6526 00003957 202020517569742050-
  6526 00003960 726F6772616D202020-
  6526 00003969 20202020202020BA   
  6527 00003971 CCCDCDCDCDCDCDCDCD-     	db  204, 78 dup(205), 185
  6527 0000397A CDCDCDCDCDCDCDCDCD-
  6527 00003983 CDCDCDCDCDCDCDCDCD-
  6527 0000398C CDCDCDCDCDCDCDCDCD-
  6527 00003995 CDCDCDCDCDCDCDCDCD-
  6527 0000399E CDCDCDCDCDCDCDCDCD-
  6527 000039A7 CDCDCDCDCDCDCDCDCD-
  6527 000039B0 CDCDCDCDCDCDCDCDCD-
  6527 000039B9 CDCDCDCDCDCDCDB9   
  6528 000039C1 BA2020202020204669-     	db  186, 6  dup(32), "File Name :                   ", 4 dup(32), "Bit-Rate  :     0  Bits      ", 9 dup(32), 186
  6528 000039CA 6C65204E616D65203A-
  6528 000039D3 202020202020202020-
  6528 000039DC 202020202020202020-
  6528 000039E5 20202020204269742D-
  6528 000039EE 5261746520203A2020-
  6528 000039F7 202020302020426974-
  6528 00003A00 732020202020202020-
  6528 00003A09 20202020202020BA   
  6529 00003A11 BA2020202020204672-     	db  186, 6  dup(32), "Frequency :     0     Hz      ", 4 dup(32), "#-Channels:     0            ", 9 dup(32), 186
  6529 00003A1A 657175656E6379203A-
  6529 00003A23 202020202030202020-
  6529 00003A2C 2020487A2020202020-
  6529 00003A35 2020202020232D4368-
  6529 00003A3E 616E6E656C733A2020-
  6529 00003A47 202020302020202020-
  6529 00003A50 202020202020202020-
  6529 00003A59 20202020202020BA   
  6530 00003A61 C8CDCDCDCDCDCDCDCD-     	db  200, 78 dup(205), 188
  6530 00003A6A CDCDCDCDCDCDCDCDCD-
  6530 00003A73 CDCDCDCDCDCDCDCDCD-
  6530 00003A7C CDCDCDCDCDCDCDCDCD-
  6530 00003A85 CDCDCDCDCDCDCDCDCD-
  6530 00003A8E CDCDCDCDCDCDCDCDCD-
  6530 00003A97 CDCDCDCDCDCDCDCDCD-
  6530 00003AA0 CDCDCDCDCDCDCDCDCD-
  6530 00003AA9 CDCDCDCDCDCDCDBC   
  6531 00003AB1 202020202020202020-     	db  80 dup(32)
  6531 00003ABA 202020202020202020-
  6531 00003AC3 202020202020202020-
  6531 00003ACC 202020202020202020-
  6531 00003AD5 202020202020202020-
  6531 00003ADE 202020202020202020-
  6531 00003AE7 202020202020202020-
  6531 00003AF0 202020202020202020-
  6531 00003AF9 2020202020202020   
  6532                                  improper_samplerate_txt:
  6533                                  read_error_txt:
  6534 00003B01 202020202020202020-     	db  80 dup(32)
  6534 00003B0A 202020202020202020-
  6534 00003B13 202020202020202020-
  6534 00003B1C 202020202020202020-
  6534 00003B25 202020202020202020-
  6534 00003B2E 202020202020202020-
  6534 00003B37 202020202020202020-
  6534 00003B40 202020202020202020-
  6534 00003B49 2020202020202020   
  6535 00003B51 202020202020202020-     	db  80 dup(32)
  6535 00003B5A 202020202020202020-
  6535 00003B63 202020202020202020-
  6535 00003B6C 202020202020202020-
  6535 00003B75 202020202020202020-
  6535 00003B7E 202020202020202020-
  6535 00003B87 202020202020202020-
  6535 00003B90 202020202020202020-
  6535 00003B99 2020202020202020   
  6536 00003BA1 202020202020202020-     	db  80 dup(32)
  6536 00003BAA 202020202020202020-
  6536 00003BB3 202020202020202020-
  6536 00003BBC 202020202020202020-
  6536 00003BC5 202020202020202020-
  6536 00003BCE 202020202020202020-
  6536 00003BD7 202020202020202020-
  6536 00003BE0 202020202020202020-
  6536 00003BE9 2020202020202020   
  6537 00003BF1 202020202020202020-     	db  80 dup(32)
  6537 00003BFA 202020202020202020-
  6537 00003C03 202020202020202020-
  6537 00003C0C 202020202020202020-
  6537 00003C15 202020202020202020-
  6537 00003C1E 202020202020202020-
  6537 00003C27 202020202020202020-
  6537 00003C30 202020202020202020-
  6537 00003C39 2020202020202020   
  6538 00003C41 202020202020202020-     	db  80 dup(32)
  6538 00003C4A 202020202020202020-
  6538 00003C53 202020202020202020-
  6538 00003C5C 202020202020202020-
  6538 00003C65 202020202020202020-
  6538 00003C6E 202020202020202020-
  6538 00003C77 202020202020202020-
  6538 00003C80 202020202020202020-
  6538 00003C89 2020202020202020   
  6539 00003C91 202020202020202020-     	db  80 dup(32)
  6539 00003C9A 202020202020202020-
  6539 00003CA3 202020202020202020-
  6539 00003CAC 202020202020202020-
  6539 00003CB5 202020202020202020-
  6539 00003CBE 202020202020202020-
  6539 00003CC7 202020202020202020-
  6539 00003CD0 202020202020202020-
  6539 00003CD9 2020202020202020   
  6540 00003CE1 202020202020202020-     	db  80 dup(32)
  6540 00003CEA 202020202020202020-
  6540 00003CF3 202020202020202020-
  6540 00003CFC 202020202020202020-
  6540 00003D05 202020202020202020-
  6540 00003D0E 202020202020202020-
  6540 00003D17 202020202020202020-
  6540 00003D20 202020202020202020-
  6540 00003D29 2020202020202020   
  6541 00003D31 202020202020202020-     	db  80 dup(32)
  6541 00003D3A 202020202020202020-
  6541 00003D43 202020202020202020-
  6541 00003D4C 202020202020202020-
  6541 00003D55 202020202020202020-
  6541 00003D5E 202020202020202020-
  6541 00003D67 202020202020202020-
  6541 00003D70 202020202020202020-
  6541 00003D79 2020202020202020   
  6542 00003D81 202020202020202020-     	db  80 dup(32)
  6542 00003D8A 202020202020202020-
  6542 00003D93 202020202020202020-
  6542 00003D9C 202020202020202020-
  6542 00003DA5 202020202020202020-
  6542 00003DAE 202020202020202020-
  6542 00003DB7 202020202020202020-
  6542 00003DC0 202020202020202020-
  6542 00003DC9 2020202020202020   
  6543 00003DD1 202020202020202020-     	db  80 dup(32)
  6543 00003DDA 202020202020202020-
  6543 00003DE3 202020202020202020-
  6543 00003DEC 202020202020202020-
  6543 00003DF5 202020202020202020-
  6543 00003DFE 202020202020202020-
  6543 00003E07 202020202020202020-
  6543 00003E10 202020202020202020-
  6543 00003E19 2020202020202020   
  6544 00003E21 202020202020202020-     	db  80 dup(32)
  6544 00003E2A 202020202020202020-
  6544 00003E33 202020202020202020-
  6544 00003E3C 202020202020202020-
  6544 00003E45 202020202020202020-
  6544 00003E4E 202020202020202020-
  6544 00003E57 202020202020202020-
  6544 00003E60 202020202020202020-
  6544 00003E69 2020202020202020   
  6545 00003E71 202020202020202020-     	db  80 dup(32)
  6545 00003E7A 202020202020202020-
  6545 00003E83 202020202020202020-
  6545 00003E8C 202020202020202020-
  6545 00003E95 202020202020202020-
  6545 00003E9E 202020202020202020-
  6545 00003EA7 202020202020202020-
  6545 00003EB0 202020202020202020-
  6545 00003EB9 2020202020202020   
  6546 00003EC1 202020202020202020-     	db  80 dup(32)
  6546 00003ECA 202020202020202020-
  6546 00003ED3 202020202020202020-
  6546 00003EDC 202020202020202020-
  6546 00003EE5 202020202020202020-
  6546 00003EEE 202020202020202020-
  6546 00003EF7 202020202020202020-
  6546 00003F00 202020202020202020-
  6546 00003F09 2020202020202020   
  6547 00003F11 202020202020202020-     	db  80 dup(32)
  6547 00003F1A 202020202020202020-
  6547 00003F23 202020202020202020-
  6547 00003F2C 202020202020202020-
  6547 00003F35 202020202020202020-
  6547 00003F3E 202020202020202020-
  6547 00003F47 202020202020202020-
  6547 00003F50 202020202020202020-
  6547 00003F59 2020202020202020   
  6548 00003F61 202020202020202020-     	db  80 dup(32)
  6548 00003F6A 202020202020202020-
  6548 00003F73 202020202020202020-
  6548 00003F7C 202020202020202020-
  6548 00003F85 202020202020202020-
  6548 00003F8E 202020202020202020-
  6548 00003F97 202020202020202020-
  6548 00003FA0 202020202020202020-
  6548 00003FA9 2020202020202020   
  6549 00003FB1 202020202020202020-     	db  80 dup(32)
  6549 00003FBA 202020202020202020-
  6549 00003FC3 202020202020202020-
  6549 00003FCC 202020202020202020-
  6549 00003FD5 202020202020202020-
  6549 00003FDE 202020202020202020-
  6549 00003FE7 202020202020202020-
  6549 00003FF0 202020202020202020-
  6549 00003FF9 2020202020202020   
  6550 00004001 202020202020202020-     	db  80 dup(32)
  6550 0000400A 202020202020202020-
  6550 00004013 202020202020202020-
  6550 0000401C 202020202020202020-
  6550 00004025 202020202020202020-
  6550 0000402E 202020202020202020-
  6550 00004037 202020202020202020-
  6550 00004040 202020202020202020-
  6550 00004049 2020202020202020   
  6551 00004051 202020202020202020-     	db  80 dup(32)
  6551 0000405A 202020202020202020-
  6551 00004063 202020202020202020-
  6551 0000406C 202020202020202020-
  6551 00004075 202020202020202020-
  6551 0000407E 202020202020202020-
  6551 00004087 202020202020202020-
  6551 00004090 202020202020202020-
  6551 00004099 2020202020202020   
  6552 000040A1 CDCDCDCDCDCDCDCDCD-     	db  80 dup(205)
  6552 000040AA CDCDCDCDCDCDCDCDCD-
  6552 000040B3 CDCDCDCDCDCDCDCDCD-
  6552 000040BC CDCDCDCDCDCDCDCDCD-
  6552 000040C5 CDCDCDCDCDCDCDCDCD-
  6552 000040CE CDCDCDCDCDCDCDCDCD-
  6552 000040D7 CDCDCDCDCDCDCDCDCD-
  6552 000040E0 CDCDCDCDCDCDCDCDCD-
  6552 000040E9 CDCDCDCDCDCDCDCD   
  6553 000040F1 202020202020202020-     	db  80 dup(32)
  6553 000040FA 202020202020202020-
  6553 00004103 202020202020202020-
  6553 0000410C 202020202020202020-
  6553 00004115 202020202020202020-
  6553 0000411E 202020202020202020-
  6553 00004127 202020202020202020-
  6553 00004130 202020202020202020-
  6553 00004139 2020202020202020   
  6554 00004141 202020202020202020-     	db  33 dup(32), "00:00 ", 174, 175, " 00:00", 24 dup(32), "VOL 000%"
  6554 0000414A 202020202020202020-
  6554 00004153 202020202020202020-
  6554 0000415C 20202020202030303A-
  6554 00004165 303020AEAF2030303A-
  6554 0000416E 303020202020202020-
  6554 00004177 202020202020202020-
  6554 00004180 202020202020202056-
  6554 00004189 4F4C2030303025     
  6555 00004190 00                      	db 0
  6556                                  
  6557                                  ; 25/12/2024
  6558                                  ; 28/11/2024
  6559                                  IsInSplash:
  6560 00004191 01                      	db 1
  6561                                  
  6562                                  SplashFileName:
  6563 00004192 53504C4153482E5741-     	db "SPLASH.WAV", 0
  6563 0000419B 5600               
  6564                                  
  6565                                  ; -------------------------------------------------------------
  6566                                  
  6567                                  	; 22/12/2024
  6568                                  fillblock:
  6569 0000419D FF<rep Eh>              	times 14 db 0FFh
  6570 000041AB 0000                    	dw 0
  6571                                  
  6572                                  ; -------------------------------------------------------------
  6573                                  
  6574                                  ; 23/11/2024
  6575                                  colors:
  6576 000041AD 0F0B0A0C0E090D0F        	db 0Fh, 0Bh, 0Ah, 0Ch, 0Eh, 09h, 0Dh, 0Fh
  6577                                  	; white, cyan, green, red, yellow, blue, magenta
  6578 000041B5 0B                      ccolor:	db 0Bh	; cyan
  6579                                  
  6580                                  EOF: 
  6581                                  
  6582                                  ; -------------------------------------------------------------
  6583                                  
  6584                                  bss:
  6585                                  
  6586                                  ABSOLUTE bss
  6587                                  
  6588 000041B6 ????                    alignb 4
  6589                                  
  6590                                  ; 21/12/2024
  6591                                  fontbuff1:
  6592 000041B8 <res E00h>              	resb 256*14 ; 8x14 font data (from system)
  6593                                  fontbuff2:
  6594 00004FB8 <res 1000h>             	resb 256*16 ; 8x16 font data (modif. from 8x14)
  6595                                  
  6596                                  ; 11/12/2024
  6597                                  wleds_addr:
  6598 00005FB8 <res 1400h>             	resd 80*16 ; 32 bit addrs, 80 leds, 16 volume levels
  6599                                  ; 22/12/2024
  6600                                  prev_leds:
  6601 000073B8 <res 140h>              	resd 80	; previous lighting leds
  6602                                  
  6603                                  ; 24/12/2024
  6604                                  wpoints_dif:	; wave lighting points factor (differential) 
  6605 000074F8 ????????                	resd 1	; required bytes for 1/18 second wave lighting
  6606                                  graphstart:
  6607 000074FC ????????                	resd 1	; start (top) line/row for wave lighting points 	 
  6608                                  
  6609                                  LFB_ADDR:
  6610 00007500 ????????                	resd 1
  6611                                  ;nextrow:
  6612                                  	;resd 1
  6613                                  screenpos: ; hw = (cursor) row, lw = (cursor) column
  6614 00007504 ????????                	resd 1
  6615 00007508 ????????                wcolor:	resd 1
  6616                                  ; 26/12/2024
  6617                                  ;tcolor: resb 1 ; text color
  6618                                  columns:
  6619 0000750C ??                      	resb 1
  6620 0000750D ??                      pbprev:	resb 1 ; previous progress bar indicator position
  6621                                  
  6622 0000750E ????                    alignb 4
  6623                                  
  6624                                  bss_start:
  6625                                  
  6626                                  ; 24/12/2024
  6627                                  prev_points:
  6628 00007510 <res A00h>              	resd 640 ; previous wave points (which are lighting)	
  6629                                  
  6630                                  ; 18/11/2024
  6631                                  stopped:
  6632 00007F10 ??                      	resb 1
  6633 00007F11 ??                      tLO:	resb 1
  6634                                  ; 21/11/2024
  6635 00007F12 ??                      tLP:	resb 1
  6636                                  ; 19/11/2024
  6637 00007F13 ??                      wleds:	resb 1
  6638                                  wleds_dif:
  6639 00007F14 ????????                	resd 1
  6640 00007F18 ????????                pbuf_o:	resd 1
  6641                                  ; 07/12/2024
  6642 00007F1C ??                      pbuf_s:	resb 1
  6643                                  
  6644                                  ; 07/12/2024
  6645                                  ; 24/11/2024
  6646                                  half_buffer:
  6647 00007F1D ??                      	resb 1	; dma half buffer 1 or 2 (0 or 1)
  6648                                  
  6649                                  ; 30/05/2024
  6650 00007F1E ??                      VRA:	resb 1	; Variable Rate Audio Support Status
  6651                                  
  6652                                  ; 24/12/2024
  6653 00007F1F ??                      p_mode: resb 1	; point mode (as alternative to LED mode)
  6654                                  
  6655                                  ; 25/12/2024
  6656                                  ; 29/11/2024
  6657                                  command:
  6658 00007F20 ??                      	resb 1
  6659                                  filecount:
  6660 00007F21 ??                      	resb 1
  6661                                  
  6662                                  ; 30/11/2024
  6663 00007F22 ????                    alignb 4
  6664                                  
  6665                                  ;;;;;;;;;;;;;;
  6666                                  ; 14/11/2024
  6667                                  ; (Ref: player.asm, Matan Alfasi, 2017)  
  6668                                  WAVFILEHEADERbuff:
  6669                                  RIFF_ChunkID:
  6670 00007F24 ????????                	resd 1	; Must be equal to "RIFF" - big-endian
  6671                                  		; 0x52494646
  6672                                  RIFF_ChunkSize:
  6673 00007F28 ????????                	resd 1	; Represents total file size, not 
  6674                                          	; including the first 2 fields 
  6675                                  		; (Total_File_Size - 8), little-endian
  6676                                  RIFF_Format:
  6677 00007F2C ????????                	resd 1	; Must be equal to "WAVE" - big-endian
  6678                                  		; 0x57415645
  6679                                  
  6680                                  ;; WAVE header parameters ("Sub-chunk")
  6681                                  WAVE_SubchunkID:
  6682 00007F30 ????????                	resd 1	; Must be equal to "fmt " - big-endian
  6683                                  		; 0x666d7420
  6684                                  WAVE_SubchunkSize:
  6685 00007F34 ????????                	resd 1	; Represents total chunk size
  6686                                  WAVE_AudioFormat:
  6687 00007F38 ????                    	resw 1	; PCM (Raw) - is 1, other - is a form 
  6688                                  		; of compression, not supported.
  6689                                  WAVE_NumChannels:
  6690 00007F3A ????                    	resw 1	; Number of channels, Mono-1, Stereo-2
  6691                                  WAVE_SampleRate:
  6692 00007F3C ????????                	resd 1	; Frequency rate, in Hz (8000, 44100 ...)
  6693                                  WAVE_ByteRate:
  6694 00007F40 ????????                	resd 1	; SampleRate * NumChannels * BytesPerSample
  6695                                  WAVE_BlockAlign:
  6696 00007F44 ????                    	resw 1	; NumChannels * BytesPerSample
  6697                                  		; Number of bytes for one sample.
  6698                                  WAVE_BitsPerSample:
  6699 00007F46 ????                    	resw 1	; 8 = 8 bits, 16 = 16 bits, etc.
  6700                                  
  6701                                  ;; DATA header parameters
  6702                                  DATA_SubchunkID:
  6703 00007F48 ????????                	resd 1	; Must be equal to "data" - big-endian
  6704                                          	; 0x64617461
  6705                                  DATA_SubchunkSize:
  6706 00007F4C ????????                	resd 1	; NumSamples * NumChannels * BytesPerSample
  6707                                          	; Number of bytes in the data.
  6708                                  ;;;;;;;;;;;;;;
  6709                                  
  6710                                  ; 15/11/2024
  6711                                  cursortype:
  6712 00007F50 ????                    	resw 1
  6713 00007F52 ??                      flags:	resb 1
  6714                                  ; 06/11/2023
  6715                                  ac97_int_ln_reg:
  6716 00007F53 ??                      	resb 1
  6717                                  filehandle:
  6718 00007F54 ????????                	resd 1
  6719                                  
  6720                                  ; 25/12/2024
  6721                                  ; 30/11/2024
  6722                                  ;argc:	resb 1	; argument count
  6723 00007F58 ????????                argv:	resd 1	; current argument (wav file) ptr
  6724 00007F5C ????????                argvf:	resd 1	; 1st argument (wav file) ptr
  6725 00007F60 ????????                argvl:	resd 1	; last argument (wav file) ptr
  6726                                  
  6727                                  ; 30/05/2024
  6728                                  wav_file_name:
  6729 00007F64 <res 50h>               	resb 80	; wave file, path name (<= 80 bytes)
  6730 00007FB4 ????                    	resw 1	; 30/11/2024
  6731                                  
  6732                                  ; 08/11/2023
  6733                                  ; 07/11/2023
  6734                                  fbs_shift:
  6735 00007FB6 ??                      	resb 1
  6736                                  ; 07/12/2024
  6737 00007FB7 ??                      SRB:	resb 1
  6738                                  
  6739                                  ; 12/11/2016 - Erdogan Tan
  6740                                  bus_dev_fn:
  6741 00007FB8 ????????                	resd 1
  6742                                  dev_vendor:
  6743 00007FBC ????????                	resd 1
  6744                                  
  6745                                  ; 17/02/2017
  6746                                  ; NAMBAR:  Native Audio Mixer Base Address Register
  6747                                  ;    (ICH, Audio D31:F5, PCI Config Space) Address offset: 10h-13h
  6748                                  ; NABMBAR: Native Audio Bus Mastering Base Address register
  6749                                  ;    (ICH, Audio D31:F5, PCI Config Space) Address offset: 14h-17h
  6750 00007FC0 ????                    NAMBAR:	resw 1	; BAR for mixer
  6751                                  NABMBAR:
  6752 00007FC2 ????                    	resw 1	; BAR for bus master regs
  6753                                  
  6754                                  ; 15/11/2024
  6755                                  loadfromwavfile:
  6756 00007FC4 ????????                	resd 1	; 'loadfromfile' or load+conversion proc address
  6757                                  loadsize:
  6758 00007FC8 ????????                	resd 1	; (.wav file) read count (bytes) per one time
  6759                                  buffersize:
  6760 00007FCC ????????                	resd 1	; 16 bit samples (not bytes)
  6761                                  		
  6762                                  ; 14/11/2024
  6763                                  TotalTime:
  6764 00007FD0 ????????                	resd 1	; Total (WAV File) Playing Time in seconds
  6765                                  ProgressTime:
  6766 00007FD4 ????????                	resd 1
  6767 00007FD8 ????????                count:	resd 1	; byte count of one (wav file) read
  6768                                  LoadedDataBytes:
  6769 00007FDC ????????                	resd 1	; total read/load count
  6770                                  
  6771                                  timerticks:
  6772 00007FE0 ????????                	resd 1	; (to eliminate excessive lookup of events in tuneloop)
  6773                                  		; (in order to get the emulator/qemu to run correctly)
  6774                                  ; 14/11/2024	
  6775                                  bss_end:
  6776                                  
  6777                                  ; 02/12/2024
  6778 00007FE4 <res 1Ch>               alignb 4096
  6779                                  
  6780                                  ; 07/12/2024
  6781                                  ; 26/11/2023
  6782                                  audio_buffer:
  6783 00008000 <res 10000h>            	resb 65536  ; DMA Buffer Size / 2	
  6784                                  
  6785                                  ; 01/12/2024
  6786                                  ; 26/11/2023
  6787                                  temp_buffer:
  6788 00018000 <res 10000h>            	resb 65536  ;  rb BUFFERSIZE
