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