     1                                  ; ****************************************************************************
     2                                  ; vgaplay3.s - TRDOS 386 (TRDOS v2.0.9) WAV PLAYER - VESA VBE Video Mode 101h
     3                                  ; ----------------------------------------------------------------------------
     4                                  ; VGAPLAY3.PRG ! AC'97 (ICH) .WAV PLAYER program by Erdogan TAN
     5                                  ;
     6                                  ; 27/12/2024				- play music from multiple wav files -
     7                                  ;
     8                                  ; [ Last Modification: 05/02/2025 ]
     9                                  ;
    10                                  ; Modified from VGAPLAY2.PRG .wav player program by Erdogan Tan, 27/12/2024
    11                                  ;		AC97PLAy.PRG - 18/12/2024
    12                                  ;
    13                                  ; ****************************************************************************
    14                                  ; nasm vgaplay2.s -l vgaplay2.txt -o VGAPLAY2.PRG -Z error.txt
    15                                  
    16                                  ; 27/12/2024
    17                                  ; vgaplay2.s : DMA buffer tracking (instead of user's audio buffer)
    18                                  ; 18/12/2024
    19                                  ; ac97play.s : TUNELOOP version (playing without AC97 interrupt)
    20                                  
    21                                  ; vgaplay.s (26/12/2024) - play music from multiple wav files -
    22                                  ; dplayvga.s (25/12/2024) - play music from single wav file -
    23                                  ; ac97play.s (18/12/2024) - play music from multiple wav files -
    24                                  
    25                                  ; 07/12/2024 - playwav9.s - interrupt (srb) + tuneloop version
    26                                  ; ------------------------------------------------------------
    27                                  ; INTERRUPT (SRB) + TUNELOOP version ; 24/11/2024 (PLAYWAV9.ASM)
    28                                  ;	(running in DOSBOX, VIRTUALBOX, QEMU is ok)
    29                                  ; Signal Response Byte = message/signal to user about an event/interrupt
    30                                  ;	    as requested (TuneLoop procedure continuously checks this SRB)
    31                                  ; (TRDOS 386 v2 feature is used here as very simple interrupt handler output)
    32                                  
    33                                  ; ------------------------------------------------------------
    34                                  
    35                                  ; 30/11/2024
    36                                  ; 20/08/2024 ; TRDOS 386 v2.0.9
    37                                  ; 29/04/2016
    38                                  _ver 	equ 0
    39                                  _exit 	equ 1
    40                                  _fork 	equ 2
    41                                  _read 	equ 3
    42                                  _write	equ 4
    43                                  _open	equ 5
    44                                  _close 	equ 6
    45                                  _wait 	equ 7
    46                                  _creat 	equ 8
    47                                  _link 	equ 9
    48                                  _unlink	equ 10
    49                                  _exec	equ 11
    50                                  _chdir	equ 12
    51                                  _time 	equ 13
    52                                  _mkdir 	equ 14
    53                                  _chmod	equ 15
    54                                  _chown	equ 16
    55                                  _break	equ 17
    56                                  _stat	equ 18
    57                                  _seek	equ 19
    58                                  _tell 	equ 20
    59                                  _mount	equ 21
    60                                  _umount	equ 22
    61                                  _setuid	equ 23
    62                                  _getuid	equ 24
    63                                  _stime	equ 25
    64                                  _quit	equ 26
    65                                  _intr	equ 27
    66                                  _fstat	equ 28
    67                                  _emt 	equ 29
    68                                  _mdate 	equ 30
    69                                  _video 	equ 31
    70                                  _audio	equ 32
    71                                  _timer	equ 33
    72                                  _sleep	equ 34
    73                                  _msg    equ 35
    74                                  _geterr	equ 36
    75                                  _fpsave	equ 37
    76                                  _pri	equ 38
    77                                  _rele	equ 39
    78                                  _fff	equ 40
    79                                  _fnf	equ 41
    80                                  _alloc	equ 42
    81                                  _dalloc equ 43
    82                                  _calbac equ 44
    83                                  _dma	equ 45
    84                                  _stdio  equ 46
    85                                  
    86                                  ; ------------------------------------------------------------
    87                                  
    88                                  %macro sys 1-4
    89                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)
    90                                      ; 03/09/2015
    91                                      ; 13/04/2015
    92                                      ; Retro UNIX 386 v1 system call.
    93                                      %if %0 >= 2
    94                                          mov ebx, %2
    95                                          %if %0 >= 3
    96                                              mov ecx, %3
    97                                              %if %0 = 4
    98                                                 mov edx, %4
    99                                              %endif
   100                                          %endif
   101                                      %endif
   102                                      mov eax, %1
   103                                      ;int 30h
   104                                      int 40h ; TRDOS 386 (TRDOS v2.0)
   105                                  %endmacro
   106                                  
   107                                  ; Retro UNIX 386 v1 system call format:
   108                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
   109                                  
   110                                  ; ------------------------------------------------------------
   111                                  
   112                                  ; player internal variables and other equates.
   113                                  BUFFERSIZE	equ 65536
   114                                  ENDOFFILE	equ 1		; flag for knowing end of file
   115                                  
   116                                  ; ------------------------------------------------------------
   117                                  
   118                                  [BITS 32] ; 32-bit intructions
   119                                  
   120                                  [ORG 0]
   121                                  
   122                                  START_CODE:
   123                                  	; Prints the Credits Text.
   124                                  	sys	_msg, Credits, 255, 0Bh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000000 BB[FC300000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000005 B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 0000000A BA0B000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000000F B823000000          <1>  mov eax, %1
   103                              <1> 
   104 00000014 CD40                <1>  int 40h
   125                                  
   126                                  	; clear bss
   127 00000016 BF[EC7B0000]            	mov	edi, bss_start
   128 0000001B B9B8020000              	mov	ecx, (bss_end - bss_start)/4
   129 00000020 31C0                    	xor	eax, eax
   130 00000022 F3AB                    	rep	stosd
   131                                  
   132                                  ; -------------------------------------------------------------
   133                                  
   134                                  	; 21/12/2024
   135                                  	; Detect (& Enable) AC'97 Audio Device
   136 00000024 E8B3090000              	call	DetectAC97
   137 00000029 731B                    	jnc	short ac97_hardware_ready
   138                                  
   139                                  	; 30/11/2024
   140                                  	; 30/05/2024
   141                                  _dev_not_ready:
   142                                  	; couldn't find the audio device!
   143                                  	sys	_msg, noDevMsg, 255, 0Fh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000002B BB[BA310000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000030 B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000035 BA0F000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000003A B823000000          <1>  mov eax, %1
   103                              <1> 
   104 0000003F CD40                <1>  int 40h
   144 00000041 E9FA050000                      jmp     Exit
   145                                  
   146                                  ac97_hardware_ready:
   147 00000046 E8D40F0000              	call	write_audio_dev_info
   148                                  
   149                                  ; -------------------------------------------------------------
   150                                  
   151                                  	; 21/12/2024
   152                                  	;;;
   153                                  	; Read (copy) 8x14 system fonts
   154 0000004B BE[94480000]            	mov	esi, fontbuff1
   155                                  	sys	_video, 0C03h, 256, 0
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000050 BB030C0000          <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000055 B900010000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 0000005A BA00000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000005F B81F000000          <1>  mov eax, %1
   103                              <1> 
   104 00000064 CD40                <1>  int 40h
   156                                  
   157                                  	; convert 8x14 fonts to 8x16 fonts
   158                                  	; by inserting 2 empty rows to each characters
   159                                  	;mov	esi, fontbuff1
   160 00000066 BF[94560000]            	mov	edi, fontbuff2
   161                                  	; 18/02/2021
   162                                  	;mov	cx, 256
   163                                  fontconvert:
   164 0000006B 51                      	push	ecx
   165 0000006C 66B90E00                	mov	cx, 14
   166 00000070 F3A4                    	rep	movsb
   167 00000072 28C0                    	sub	al, al
   168 00000074 AA                      	stosb
   169 00000075 AA                      	stosb
   170 00000076 59                      	pop	ecx
   171 00000077 E2F2                    	loop	fontconvert
   172                                  	;;;
   173                                  
   174                                  ; ------------------------------------------------------------- 
   175                                  
   176                                  	; 21/12/2024
   177                                  	; Set Video Mode to 101h ; 640x480, 256 colors
   178                                  	sys	_video, 08FFh, 101h
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000079 BBFF080000          <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 0000007E B901010000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98                              <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000083 B81F000000          <1>  mov eax, %1
   103                              <1> 
   104 00000088 CD40                <1>  int 40h
   179 0000008A 09C0                    	or	eax, eax
   180 0000008C 0F84A9050000            	jz	terminate    ; nothing to do				
   181                                  	;jz	trdos386_err ; write (OS) error msg and exit
   182                                  
   183                                  set_vesa_mode_101h_ok:
   184                                  	; linear frame buffer access
   185                                  	sys	_video, 06FFh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000092 BBFF060000          <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96                              <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98                              <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000097 B81F000000          <1>  mov eax, %1
   103                              <1> 
   104 0000009C CD40                <1>  int 40h
   186 0000009E 21C0                    	and	eax, eax
   187 000000A0 0F84DD050000            	jz	error_exit ; set text mode and write err msg
   188 000000A6 A3[DC7B0000]            	mov	[LFB_ADDR], eax
   189                                  
   190                                  ; -------------------------------------------------------------
   191                                  
   192                                  	; 25/12/2024
   193                                  	; 28/11/2024
   194                                  Player_InitalizePSP:
   195                                  	; 30/11/2024
   196                                  	; (TRDOS 386 -Retro UNIX 386- argument transfer method)
   197                                  	; (stack: argc,argv0addr,argv1addr,argv2addr ..
   198                                  	;			.. argv0text, argv1text ..) 
   199                                  	; ---- argc, argv[] ----
   200 000000AB 89E6                    	mov	esi, esp
   201 000000AD AD                      	lodsd
   202 000000AE 83F802                  	cmp	eax, 2 ; two arguments 
   203                                  		; (program file name & mod file name)
   204 000000B1 0F8292050000            	jb	pmsg_usage ; nothing to do
   205                                  	;mov	[argc], al
   206 000000B7 C1E002                  	shl	eax, 2 ; *4
   207 000000BA 01E0                    	add	eax, esp
   208                                  	; eax = last argument's address pointer
   209 000000BC A3[44860000]            	mov	[argvl], eax ; last wav file (argument)
   210 000000C1 8935[3C860000]          	mov	[argv], esi ; current argument (PRG file name)
   211 000000C7 AD                      	lodsd	; skip program (PRG) file name
   212 000000C8 8935[40860000]          	mov	[argvf], esi ; 1st wav file (argument)
   213                                  
   214                                  	; 25/12/2024
   215                                  Player_ParseParameters:
   216                                  	; 30/11/2024
   217                                  	; 29/11/2024
   218                                  	; 18/12/2024
   219                                  	;mov	edx, wav_file_name
   220                                  	
   221                                  	; 26/12/2024
   222                                  	;cmp	byte [IsInSplash], 0
   223                                  	;jna	short check_p_command
   224                                  
   225 000000CE BA[6E480000]            	mov	edx, SplashFileName
   226 000000D3 EB3E                    	jmp	short _1
   227                                  
   228                                  	; 25/12/2024
   229                                  check_p_command:
   230                                  	; 07/12/2024
   231 000000D5 8B35[3C860000]          	mov	esi, [argv]
   232                                  	;
   233 000000DB 803D[03860000]50          	cmp	byte [command], 'P'
   234 000000E2 7410                    	je	short Player_ParsePreviousParameter
   235                                      
   236                                  	; 07/12/2024
   237                                  	; 30/11/2024
   238                                  	;mov	esi, [argv] ; current argument (wav file) ptr
   239 000000E4 83C604                  	add	esi, 4
   240 000000E7 3B35[44860000]          	cmp	esi, [argvl] ; last argument (wav file) ptr
   241 000000ED 7610                    	jna	short Player_ParseNextParameter
   242                                  jmp_Player_Quit:
   243 000000EF E934060000              	jmp	Player_Quit
   244                                  
   245                                  Player_ParsePreviousParameter:
   246                                  	; 29/11/2024
   247                                  	;mov	byte [command], 0
   248                                  	; 30/11/2024
   249                                  	;mov	esi, [argv] ; 07/12/2024	
   250 000000F4 3B35[40860000]          	cmp	esi, [argvf] ; first argument (wav file) ptr
   251 000000FA 7603                    	jna	short Player_ParseNextParameter
   252 000000FC 83EE04                  	sub	esi, 4
   253                                  Player_ParseNextParameter:
   254                                  	; 30/11/2024
   255 000000FF 8935[3C860000]          	mov	[argv], esi  ; set as current argument
   256                                  	; 01/12/2024
   257 00000105 8B36                    	mov	esi, [esi]
   258                                  	; 07/12/2024
   259                                  	;mov	ecx, esi
   260                                  	;mov	esi, [ecx]
   261                                  
   262                                  	; 29/11/2024
   263 00000107 E84D000000              	call	GetFileName
   264                                  	;jcxz	jmp_Player_Quit
   265 0000010C E3E1                    	jecxz	jmp_Player_Quit ; 30/11/2024
   266                                  
   267                                  	; 30/11/2024
   268                                  	; 28/11/2024
   269 0000010E BA[48860000]            	mov	edx, wav_file_name
   270                                  	;;;
   271                                  _1:
   272                                  
   273                                  ; open the file
   274                                          ; open existing file
   275                                  	; 28/11/2024
   276                                  	;mov	edx, wav_file_name
   277 00000113 E814090000                      call	openFile ; no error? ok.
   278 00000118 0F8383000000                    jnc	getwavparms	; 14/11/2024
   279                                  
   280                                  	; 28/11/2024
   281 0000011E 803D[6D480000]00        	cmp	byte [IsInSplash], 0
   282 00000125 0F87A4000000            	ja	Player_SplashScreen
   283                                  
   284                                  	; 29/11/2024
   285 0000012B 803D[04860000]00        	cmp	byte [filecount], 0
   286 00000132 77A1                    	ja	short check_p_command
   287                                  
   288                                  	; 25/12/2024
   289                                  	; 21/12/2024
   290 00000134 E8E7050000              	call	set_text_mode
   291                                  	; file not found!
   292                                  	; 30/11/2024
   293                                  	sys	_msg, noFileErrMsg, 255, 0Ch
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000139 BB[E5310000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 0000013E B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000143 BA0C000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000148 B823000000          <1>  mov eax, %1
   103                              <1> 
   104 0000014D CD40                <1>  int 40h
   294 0000014F E9EC040000                      jmp     Exit
   295                                  
   296                                  _exit_:
   297 00000154 E9E2040000              	jmp	terminate
   298                                  
   299                                  ; -------------------------------------------------------------
   300                                  
   301                                  	; 26/12/2024
   302                                  	; 25/12/2024
   303                                  	; 30/11/2024 (32bit)
   304                                  	; 29/11/2024
   305                                  	; 30/05/2024
   306                                  GetFileName:
   307 00000159 BF[48860000]            	mov	edi, wav_file_name 
   308                                  	; 30/11/2024
   309                                  	;mov	esi, [argv]
   310 0000015E 31C9                    	xor	ecx, ecx ; 0
   311                                  ScanName:
   312 00000160 AC                      	lodsb
   313                                  	;test	al, al
   314                                  	;jz	short a_4
   315                                  	; 29/11/2024
   316 00000161 3C0D                    	cmp	al, 0Dh
   317 00000163 7638                    	jna	short a_4
   318 00000165 3C20                    	cmp	al, 20h
   319 00000167 74F7                    	je	short ScanName	; scan start of name.
   320 00000169 AA                      	stosb
   321 0000016A B4FF                    	mov	ah, 0FFh
   322                                  	;;;
   323                                  	; 14/11/2024
   324                                  	; (max. path length = 64 bytes for MSDOS ?) (*)
   325                                  	;xor	ecx, ecx ; 0
   326                                  	;;;
   327                                  a_0:	
   328 0000016C FEC4                    	inc	ah
   329                                  a_1:
   330                                  	;;;
   331                                  	; 14/11/2024
   332 0000016E 41                      	inc	ecx
   333                                  	;;;
   334 0000016F AC                      	lodsb
   335 00000170 AA                      	stosb
   336 00000171 3C2E                    	cmp	al, '.'
   337 00000173 74F7                    	je	short a_0
   338                                  	; 29/11/2024
   339 00000175 3C20                    	cmp	al, 20h
   340                                  	;and	al, al
   341                                  	;jnz	short a_1
   342                                  	;;;
   343                                  	; 14/11/2024
   344 00000177 7613                    	jna	short a_3
   345 00000179 20E4                    	and	ah, ah
   346 0000017B 7406                    	jz	short a_2
   347 0000017D 3C2F                    	cmp	al, '/'	; 14/12/2024
   348 0000017F 7502                    	jne	short a_2
   349 00000181 B400                    	mov	ah, 0
   350                                  a_2:
   351 00000183 80F94B                  	cmp	cl, 75	; 64+8+'.'+3 -> offset 75 is the last chr
   352 00000186 72E6                    	jb	short a_1
   353                                  	; 29/11/2024
   354 00000188 29C9                    	sub	ecx, ecx
   355 0000018A EB11                    	jmp	short a_4
   356                                  a_3:
   357                                  	; 29/11/2024
   358 0000018C 4F                      	dec	edi
   359                                  	;;;
   360 0000018D 08E4                    	or	ah, ah		; if period NOT found,
   361 0000018F 750C                    	jnz	short a_4 	; then add a .WAV extension.
   362                                  SetExt:
   363                                  	; 29/11/2024
   364                                  	;dec	edi
   365 00000191 C7072E574156            	mov	dword [edi], '.WAV'
   366                                  				; ! 64+12 is DOS limit
   367                                  				; but writing +4 must not
   368                                  				; destroy the following data	 
   369                                  	;mov	byte [edi+4], 0	; so, 80 bytes path + 0 is possible here
   370                                  	; 29/11/2024
   371 00000197 83C104                  	add	ecx, 4
   372 0000019A 83C704                  	add	edi, 4
   373                                  a_4:	
   374 0000019D C60700                  	mov	byte [edi], 0
   375                                  	; 30/11/2024
   376 000001A0 C3                      	retn
   377                                  
   378                                  ; -------------------------------------------------------------
   379                                  
   380                                  getwavparms:
   381                                  	; 14/11/2024
   382 000001A1 E8B8080000                     	call    getWAVParameters
   383 000001A6 72AC                    	jc	short _exit_		; nothing to do
   384                                  
   385                                  	; 17/11/2024
   386 000001A8 B304                    	mov	bl, 4
   387 000001AA 2A1D[28860000]          	sub	bl, byte [WAVE_BlockAlign]
   388                                  			; = 0 for 16 bit stereo
   389                                  			; = 2 for 8 bit stereo or 16 bit mono
   390                                  			; = 3 for 8 bit mono	
   391                                  
   392 000001B0 D0EB                    	shr	bl, 1	;  0 -->  0,  2 -->  1,  3 -->  1
   393                                  	; 15/11/2024
   394 000001B2 80D300                  	adc	bl, 0	; 3 --> 1 --> 2
   395 000001B5 881D[9A860000]          	mov	byte [fbs_shift], bl	; = 2 mono and 8 bit
   396                                  					; = 0 stereo and 16 bit
   397                                  					; = 1 mono or 8 bit
   398                                  	; 29/12/2024
   399                                  	; 30/05/2024
   400 000001BB E80B0A0000              	call	codecConfig		; unmute codec, set rates.
   401 000001C0 0F82A0040000            	jc	init_err
   402                                  
   403                                  ; -------------------------------------------------------------
   404                                  
   405                                  	; 25/12/2024
   406 000001C6 803D[6D480000]00        	cmp 	byte [IsInSplash], 0
   407                                  	;jna	short StartPlay
   408                                  	; 27/12/2024
   409 000001CD 7672                    	jna	short StartPlay@
   410                                  
   411                                  ; -------------------------------------------------------------
   412                                  
   413                                  	; 26/12/2024
   414                                  Player_SplashScreen:
   415                                  	; 21/12/2024
   416                                  	;mov	byte [tcolor], 15
   417                                  _0:
   418 000001CF E8ED040000              	call	drawsplashscreen
   419                                  
   420                                  	; 21/12/2024
   421                                  	;;;
   422                                  	; set wave volume led addresses
   423 000001D4 8B1D[DC7B0000]          	mov	ebx, [LFB_ADDR]
   424 000001DA 81C300C70100            	add	ebx, (13*80*8*14)
   425 000001E0 BD50000000              	mov	ebp, 80
   426 000001E5 BF[94660000]            	mov	edi, wleds_addr
   427                                  wleds_sa_1:
   428 000001EA B90F000000              	mov	ecx, 15
   429                                  wleds_sa_2:
   430 000001EF B800230000              	mov	eax, 80*8*14 ; 640*14 pixels (next row)
   431 000001F4 F7E1                    	mul	ecx
   432 000001F6 01D8                    	add	eax, ebx
   433 000001F8 AB                      	stosd
   434 000001F9 E2F4                    	loop	wleds_sa_2
   435 000001FB 89D8                    	mov	eax, ebx
   436 000001FD AB                      	stosd
   437 000001FE 83C308                  	add	ebx, 8
   438 00000201 4D                      	dec	ebp
   439 00000202 75E6                    	jnz	short wleds_sa_1
   440                                  	;;;
   441                                  
   442                                  	; 25/12/5024
   443                                  	; 28/11/2024 
   444 00000204 833D[38860000]FF        	cmp	dword [filehandle], -1
   445 0000020B 7573                    	jne	short StartPlay
   446                                  
   447                                  	; 24/12/2024
   448                                  	; 07/12/2024
   449                                  	;;; wait for 3 seconds
   450                                  	sys	_time, 0 ; get time in unix epoch format
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000020D BB00000000          <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96                              <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98                              <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000212 B80D000000          <1>  mov eax, %1
   103                              <1> 
   104 00000217 CD40                <1>  int 40h
   451 00000219 89C1                    	mov	ecx, eax
   452 0000021B 83C103                  	add	ecx, 3
   453                                  _wait_3s:
   454 0000021E 90                      	nop
   455                                  	sys	_time, 0
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000021F BB00000000          <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96                              <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98                              <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000224 B80D000000          <1>  mov eax, %1
   103                              <1> 
   104 00000229 CD40                <1>  int 40h
   456 0000022B 39C8                    	cmp	eax, ecx
   457 0000022D 72EF                    	jb	short _wait_3s
   458                                  	;;;
   459                                  
   460                                  	; 25/12/2024
   461                                  	; 28/11/2024
   462 0000022F C605[6D480000]00        	mov	byte [IsInSplash], 0
   463                                  	;mov	edx, wav_file_name
   464                                  	; 30/11/2024
   465 00000236 8B35[40860000]          	mov	esi, [argvf]
   466                                  	; 29/11/2024
   467 0000023C E9BEFEFFFF              	jmp	Player_ParseNextParameter
   468                                  
   469                                  ; -------------------------------------------------------------
   470                                  
   471                                  StartPlay@:
   472                                  	; 29/12/2024
   473                                  	; 19/11/2024
   474 00000241 C605[F3850000]01        	mov	byte [wleds], 1
   475                                  
   476                                  	;;;
   477                                  	; 09/12/2024
   478 00000248 B834290000              	mov	eax, 10548 ; (48000*10/182)*4
   479 0000024D 803D[01860000]00        	cmp	byte [VRA], 0
   480 00000254 7614                    	jna	short _w1 ; 48kHZ (interpolation)
   481                                  	;;;
   482                                  	; 01/12/2024 (32bit)
   483                                  	;movzx	eax, word [WAVE_SampleRate]
   484                                  	; 09/12/2024
   485 00000256 66A1[20860000]          	mov	ax, [WAVE_SampleRate]
   486 0000025C B90A000000              	mov	ecx, 10
   487 00000261 F7E1                    	mul	ecx
   488 00000263 B1B6                    	mov	cl, 182
   489 00000265 F7F1                    	div	ecx
   490                                  	; ax = samples per 1/18.2 second
   491                                  	;mov	cl, byte [WAVE_BlockAlign]
   492                                  	; 09/12/2024 
   493                                  	;mov	cl, 4 ; 16 bit, stereo
   494                                  	;mul	ecx
   495 00000267 C1E002                  	shl	eax, 2 ; * 4
   496                                  _w1:
   497 0000026A A3[F4850000]            	mov	[wleds_dif], eax ; buffer read differential (distance)
   498                                  				; for wave volume leds update
   499                                  				; (byte stream per 1/18.2 second)
   500                                  	;;;
   501                                  	; 24/12/2024
   502 0000026F 3D000A0000              	cmp	eax, 640*4 ; 640 samples (for 640 wave light points)
   503 00000274 7305                    	jnb	short _w2
   504 00000276 B8000A0000              	mov	eax, 640*4	
   505                                  _w2:
   506 0000027B A3[D47B0000]            	mov	[wpoints_dif], eax
   507                                  	;;;
   508                                  
   509                                  ; -------------------------------------------------------------
   510                                  
   511                                  	; 25/12/2024
   512                                  StartPlay:
   513 00000280 FE05[04860000]          	inc	byte [filecount]
   514 00000286 C605[03860000]00        	mov	byte [command], 0
   515                                  
   516                                  ; -------------------------------------------------------------
   517                                  
   518                                  	; 07/12/2024 (playwav9.s)
   519                                  
   520                                  	; 18/11/2023 (ich_wav4.asm)
   521                                  	; 13/11/2023 (ich_wav3.asm)
   522                                  
   523 0000028D 803D[01860000]01        	cmp	byte [VRA], 1
   524 00000294 7226                    	jb	short chk_sample_rate
   525                                  
   526                                  playwav_48_khz:
   527 00000296 C705[A8860000]-         	mov	dword [loadfromwavfile], loadFromFile
   527 0000029C [510F0000]         
   528                                  	;mov	dword [loadsize], 0 ; 65536
   529                                  	;;;
   530                                  	; 17/11/2024
   531                                  	;mov	word [buffersize], 32768
   532                                  	;mov	ax, BUFFERSIZE/2 ; 32760
   533                                  	; 30/11/2024
   534                                  	;mov	eax, BUFFERSIZE/2 ; 32768
   535                                  	; 07/12/2024
   536 000002A0 B800000100              	mov	eax, BUFFERSIZE ; 65536
   537 000002A5 A3[B0860000]            	mov	[buffersize], eax	; 16 bit samples
   538                                  	; 07/12/2024
   539                                  	;shl	eax, 1			; bytes
   540 000002AA 8A0D[9A860000]          	mov	cl, [fbs_shift]
   541 000002B0 D3E8                    	shr	eax, cl 
   542                                  	;mov	[loadsize], ax ; 16380 or 32760 or 65520
   543 000002B2 A3[AC860000]            	mov	[loadsize], eax ; 16384 or 32768 or 65536
   544                                  	;;;
   545                                  	;jmp	PlayNow ; 30/05/2024
   546                                  	; 07/12/2024
   547 000002B7 E9AA020000              	jmp	Player_Template
   548                                  
   549                                  	; 05/02/2025
   550                                  chk_sample_rate:
   551                                  	; set conversion parameters
   552                                  	; (for 8, 11.025, 16, 22.050, 24, 32 kHZ)
   553 000002BC 66A1[20860000]          	mov	ax, [WAVE_SampleRate]
   554 000002C2 663D80BB                	cmp	ax, 48000
   555 000002C6 74CE                    	je	short playwav_48_khz
   556                                  chk_22khz:
   557 000002C8 663D2256                	cmp	ax, 22050
   558 000002CC 7545                    	jne	short chk_11khz
   559 000002CE 803D[2A860000]08        	cmp	byte [WAVE_BitsPerSample], 8
   560 000002D5 7615                    	jna	short chk_22khz_1
   561 000002D7 BB[C11E0000]            	mov	ebx, load_22khz_stereo_16_bit
   562 000002DC 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1
   563 000002E3 751A                    	jne	short chk_22khz_2
   564 000002E5 BB[341E0000]            	mov	ebx, load_22khz_mono_16_bit
   565 000002EA EB13                    	jmp	short chk_22khz_2
   566                                  chk_22khz_1:
   567 000002EC BB[AD1D0000]            	mov	ebx, load_22khz_stereo_8_bit
   568 000002F1 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1
   569 000002F8 7505                    	jne	short chk_22khz_2
   570 000002FA BB[241D0000]            	mov	ebx, load_22khz_mono_8_bit
   571                                  chk_22khz_2:
   572 000002FF B85A1D0000              	mov	eax, 7514  ; (442*17)
   573 00000304 BA25000000              	mov	edx, 37
   574 00000309 B911000000              	mov	ecx, 17
   575 0000030E E926020000              	jmp	set_sizes
   576                                  chk_11khz:
   577 00000313 663D112B                	cmp	ax, 11025
   578 00000317 7545                    	jne	short chk_44khz
   579 00000319 803D[2A860000]08        	cmp	byte [WAVE_BitsPerSample], 8
   580 00000320 7615                    	jna	short chk_11khz_1
   581 00000322 BB[DD200000]            	mov	ebx, load_11khz_stereo_16_bit
   582 00000327 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1
   583 0000032E 751A                    	jne	short chk_11khz_2
   584 00000330 BB[64200000]            	mov	ebx, load_11khz_mono_16_bit
   585 00000335 EB13                    	jmp	short chk_11khz_2
   586                                  chk_11khz_1:
   587 00000337 BB[EA1F0000]            	mov	ebx, load_11khz_stereo_8_bit
   588 0000033C 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1 
   589 00000343 7505                    	jne	short chk_11khz_2
   590 00000345 BB[721F0000]            	mov	ebx, load_11khz_mono_8_bit
   591                                  chk_11khz_2:
   592 0000034A B8AD0E0000              	mov	eax, 3757  ; (221*17)
   593 0000034F BA4A000000              	mov	edx, 74
   594 00000354 B911000000              	mov	ecx, 17
   595 00000359 E9DB010000              	jmp	set_sizes
   596                                  chk_44khz:
   597 0000035E 663D44AC                	cmp	ax, 44100
   598 00000362 7545                    	jne	short chk_16khz
   599 00000364 803D[2A860000]08        	cmp	byte [WAVE_BitsPerSample], 8
   600 0000036B 7615                    	jna	short chk_44khz_1
   601 0000036D BB[E4220000]            	mov	ebx, load_44khz_stereo_16_bit
   602 00000372 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1
   603 00000379 751A                    	jne	short chk_44khz_2
   604 0000037B BB[6B220000]            	mov	ebx, load_44khz_mono_16_bit
   605 00000380 EB13                    	jmp	short chk_44khz_2
   606                                  chk_44khz_1:
   607 00000382 BB[EE210000]            	mov	ebx, load_44khz_stereo_8_bit
   608 00000387 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1
   609 0000038E 7505                    	jne	short chk_44khz_2
   610 00000390 BB[72210000]            	mov	ebx, load_44khz_mono_8_bit
   611                                  chk_44khz_2:
   612                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   613 00000395 B8D93A0000              	mov	eax, 15065 ; (655*23)
   614                                  	; 18/11/2023 ((file size + bss + stack) <= 64KB)
   615                                  	;mov	ax, 14076 ; (612*23)
   616                                  	; 17/11/2024
   617                                  	;mov	ax, 12650 ; (550*23)
   618 0000039A BA19000000              	mov	edx, 25
   619 0000039F B917000000              	mov	ecx, 23
   620 000003A4 E990010000              	jmp	set_sizes
   621                                  chk_16khz:
   622 000003A9 663D803E                	cmp	ax, 16000
   623 000003AD 7545                    	jne	short chk_8khz
   624 000003AF 803D[2A860000]08        	cmp	byte [WAVE_BitsPerSample], 8
   625 000003B6 7615                    	jna	short chk_16khz_1
   626 000003B8 BB[63180000]            	mov	ebx, load_16khz_stereo_16_bit
   627 000003BD 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1 
   628 000003C4 751A                    	jne	short chk_16khz_2
   629 000003C6 BB[E2170000]            	mov	ebx, load_16khz_mono_16_bit
   630 000003CB EB13                    	jmp	short chk_16khz_2
   631                                  chk_16khz_1:
   632 000003CD BB[28170000]            	mov	ebx, load_16khz_stereo_8_bit
   633 000003D2 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1
   634 000003D9 7505                    	jne	short chk_16khz_2
   635 000003DB BB[A9160000]            	mov	ebx, load_16khz_mono_8_bit
   636                                  chk_16khz_2:
   637                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   638 000003E0 B855150000              	mov	eax, 5461
   639                                  	; 17/11/2024
   640                                  	;mov	ax, 5460
   641 000003E5 BA03000000              	mov	edx, 3
   642 000003EA B901000000              	mov	ecx, 1
   643 000003EF E945010000              	jmp	set_sizes
   644                                  chk_8khz:
   645 000003F4 663D401F                	cmp	ax, 8000
   646 000003F8 7545                    	jne	short chk_24khz
   647 000003FA 803D[2A860000]08        	cmp	byte [WAVE_BitsPerSample], 8
   648 00000401 7615                    	jna	short chk_8khz_1
   649 00000403 BB[5E150000]            	mov	ebx, load_8khz_stereo_16_bit
   650 00000408 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1
   651 0000040F 751A                    	jne	short chk_8khz_2
   652 00000411 BB[8E140000]            	mov	ebx, load_8khz_mono_16_bit
   653 00000416 EB13                    	jmp	short chk_8khz_2
   654                                  chk_8khz_1:
   655 00000418 BB[5E130000]            	mov	ebx, load_8khz_stereo_8_bit
   656 0000041D 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1 
   657 00000424 7505                    	jne	short chk_8khz_2
   658 00000426 BB[7A120000]            	mov	ebx, load_8khz_mono_8_bit
   659                                  chk_8khz_2:
   660 0000042B B8AA0A0000              	mov	eax, 2730
   661 00000430 BA06000000              	mov	edx, 6
   662 00000435 B901000000              	mov	ecx, 1
   663 0000043A E9FA000000              	jmp	set_sizes
   664                                  chk_24khz:
   665 0000043F 663DC05D                	cmp	ax, 24000
   666 00000443 7545                    	jne	short chk_32khz
   667 00000445 803D[2A860000]08        	cmp	byte [WAVE_BitsPerSample], 8
   668 0000044C 7615                    	jna	short chk_24khz_1
   669                                  	; 18/01/2025 (BugFix)
   670                                  	; bx -> ebx
   671 0000044E BB[901A0000]            	mov	ebx, load_24khz_stereo_16_bit
   672 00000453 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1
   673 0000045A 751A                    	jne	short chk_24khz_2
   674 0000045C BB[2A1A0000]            	mov	ebx, load_24khz_mono_16_bit
   675 00000461 EB13                    	jmp	short chk_24khz_2
   676                                  chk_24khz_1:
   677 00000463 BB[A0190000]            	mov	ebx, load_24khz_stereo_8_bit
   678 00000468 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1 
   679 0000046F 7505                    	jne	short chk_24khz_2
   680 00000471 BB[39190000]            	mov	ebx, load_24khz_mono_8_bit
   681                                  chk_24khz_2:
   682                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   683 00000476 B800200000              	mov	eax, 8192
   684                                  	; 17/11/2024
   685                                  	;mov	ax, 8190
   686 0000047B BA02000000              	mov	edx, 2
   687 00000480 B901000000              	mov	ecx, 1
   688 00000485 E9AF000000              	jmp	set_sizes ; 02/02/2025	
   689                                  
   690                                  chk_32khz:
   691 0000048A 663D007D                	cmp	ax, 32000
   692                                  	;jne	short vra_needed
   693                                  	; 05/02/2025
   694 0000048E 7563                    	jne	short chk_12khz
   695 00000490 803D[2A860000]08        	cmp	byte [WAVE_BitsPerSample], 8
   696 00000497 7615                    	jna	short chk_32khz_1
   697 00000499 BB[941C0000]            	mov	ebx, load_32khz_stereo_16_bit
   698 0000049E 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1
   699 000004A5 751A                    	jne	short chk_32khz_2
   700 000004A7 BB[271C0000]            	mov	ebx, load_32khz_mono_16_bit
   701 000004AC EB13                    	jmp	short chk_32khz_2
   702                                  chk_32khz_1:
   703 000004AE BB[8A1B0000]            	mov	ebx, load_32khz_stereo_8_bit
   704 000004B3 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1
   705 000004BA 7505                    	jne	short chk_32khz_2
   706 000004BC BB[171B0000]            	mov	ebx, load_32khz_mono_8_bit
   707                                  chk_32khz_2:
   708                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   709 000004C1 B8AA2A0000              	mov	eax, 10922
   710                                  	; 17/11/2024
   711                                  	;mov	ax, 10920
   712 000004C6 BA03000000              	mov	edx, 3
   713 000004CB B902000000              	mov	ecx, 2
   714                                  	; 05/02/2025
   715 000004D0 EB67                    	jmp	short set_sizes
   716                                  
   717                                  	; 07/12/2024
   718                                  vra_needed:
   719                                  	; 30/11/2024 (TRDOS 386, ax -> eax)
   720                                  	; 13/11/2023
   721 000004D2 58                      	pop	eax ; discard return address to the caller
   722                                  	; 30/05/2024
   723                                  vra_err:
   724                                  	; 21/12/2024
   725 000004D3 E848020000              	call	set_text_mode
   726                                  	; 30/11/2024
   727                                  	sys	_msg, msg_no_vra, 255, 0Fh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000004D8 BB[4F320000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000004DD B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000004E2 BA0F000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000004E7 B823000000          <1>  mov eax, %1
   103                              <1> 
   104 000004EC CD40                <1>  int 40h
   728 000004EE E94D010000              	jmp	Exit
   729                                  
   730                                  	;;;;
   731                                  	; 05/02/2025
   732                                  chk_12khz:
   733 000004F3 663DE02E                	cmp	ax, 12000
   734 000004F7 75D9                    	jne	short vra_needed
   735 000004F9 803D[2A860000]08        	cmp	byte [WAVE_BitsPerSample], 8
   736 00000500 7615                    	jna	short chk_12khz_1
   737 00000502 BB[50240000]            	mov	ebx, load_12khz_stereo_16_bit
   738 00000507 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1
   739 0000050E 751A                    	jne	short chk_12khz_2
   740 00000510 BB[01240000]            	mov	ebx, load_12khz_mono_16_bit
   741 00000515 EB13                    	jmp	short chk_12khz_2
   742                                  chk_12khz_1:
   743 00000517 BB[AB230000]            	mov	ebx, load_12khz_stereo_8_bit
   744 0000051C 803D[1E860000]01        	cmp	byte [WAVE_NumChannels], 1
   745 00000523 7505                    	jne	short chk_12khz_2
   746 00000525 BB[63230000]            	mov	ebx, load_12khz_mono_8_bit
   747                                  chk_12khz_2:
   748 0000052A B800100000              	mov	eax, 4096
   749 0000052F BA04000000              	mov	edx, 4
   750 00000534 B901000000              	mov	ecx, 1
   751                                  	; 05/02/2025
   752                                  	;jmp	short set_sizes
   753                                  	;;;;
   754                                  
   755                                  set_sizes:
   756                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   757                                  	;;;
   758                                  	; 17/11/2024
   759 00000539 51                      	push	ecx
   760 0000053A B102                    	mov	cl, 2
   761 0000053C 2A0D[9A860000]          	sub	cl, [fbs_shift]
   762                                  		; = 2 for 16 bit stereo
   763                                  		; = 1 for 16 bit mono or 8 bit stereo
   764                                  		; = 0 for 8 bit mono
   765 00000542 D3E0                    	shl	eax, cl
   766 00000544 59                      	pop	ecx	
   767 00000545 A3[AC860000]            	mov	[loadsize], eax	; (one) read count in bytes
   768                                  	;;;
   769 0000054A F7E2                    	mul	edx
   770 0000054C 83F901                  	cmp	ecx, 1
   771 0000054F 7402                    	je	short s_2
   772                                  s_1:
   773 00000551 F7F1                    	div	ecx
   774                                  s_2:
   775                                  	;;;
   776                                  	; eax = byte count of (to be) converted samples 
   777                                  	
   778                                  	; 17/11/2024
   779                                  	;;;
   780 00000553 8A0D[9A860000]          	mov	cl, [fbs_shift]
   781                                  
   782 00000559 D3E0                    	shl	eax, cl
   783                                  		; *1 for 16 bit stereo
   784                                  		; *2 for 16 bit mono or 8 bit stereo
   785                                  		; *4 for for 8 bit mono
   786                                  	;;;
   787                                  
   788                                  	; eax = 16 bit stereo byte count (target buffer size)
   789                                  	
   790                                  	; 07/12/2024
   791                                  	;shr	eax, 1	; buffer size is 16 bit sample count
   792 0000055B A3[B0860000]            	mov	[buffersize], eax ; buffer size in bytes
   793 00000560 891D[A8860000]          	mov	[loadfromwavfile], ebx
   794                                  
   795                                  ; -------------------------------------------------------------
   796                                  
   797                                  Player_Template:
   798                                  
   799                                  	; 26/12/2024
   800 00000566 803D[6D480000]00        	cmp 	byte [IsInSplash], 0
   801 0000056D 7611                    	jna	short Player_Template_@
   802                                  
   803                                  	; 24/12/2024 (setting for wave lighting points)
   804 0000056F A1[DC7B0000]            	mov	eax, [LFB_ADDR]
   805                                  	;add	eax, 228*640 ; wave graphics start (top) line/row
   806 00000574 05009A0100              	add	eax, 164*640 ; 256 volume levels ; 24/12/2024
   807 00000579 A3[D87B0000]            	mov	[graphstart], eax
   808                                  
   809                                  	; 26/12/2024
   810 0000057E EB14                    	jmp	short PlayNow
   811                                  
   812                                  Player_Template_@:
   813                                  	; 21/12/2024
   814 00000580 E82C010000              	call	clearscreen
   815 00000585 E843010000              	call	drawplayingscreen
   816                                  
   817                                  	; 14/11/2024
   818 0000058A E8ED260000              	call	SetTotalTime
   819 0000058F E8BA270000              	call	UpdateFileInfo
   820                                  
   821                                  ; -------------------------------------------------------------
   822                                  
   823                                  	; 29/12/2024 (vgaplay3.s)
   824                                  	; 18/12/2024 (ac97play.s)
   825                                  PlayNow:
   826                                  	; 01/12/2024 (32bit)
   827                                  	; 14/11/2024
   828                                  	;mov	al, 3	; 0 = max, 31 = min
   829                                  	; 14/12/2024
   830 00000594 A0[602C0000]            	mov	al, [volume]
   831 00000599 E82A040000              	call	SetPCMOutVolume@
   832                                  	; 15/11/2024
   833                                  	;;call	SetMasterVolume
   834                                  	;call	SetPCMOutVolume
   835                                  
   836                                  	;;;
   837                                  	; 18/12/2024
   838 0000059E 833D[C8860000]00        	cmp	dword [_bdl_buffer], 0
   839 000005A5 7707                    	ja	short PlayNow@
   840                                  	;
   841                                  	;; 29/11/2024
   842                                  	;cmp	byte [IsInSplash], 0
   843                                  	;;ja	short PlayNow@
   844                                  	;; 02/12/2024
   845                                  	;jna	short PlayNow@
   846                                  	;;;
   847                                  
   848                                  ;PlayNow@:
   849                                  	; 28/11/2024
   850                                  	;cmp	byte [IsInSplash], 0
   851                                  	;ja	short _3
   852                                  	;
   853                                  	;call	UpdateVolume
   854                                  	;
   855                                  	; 02/12/2024
   856 000005A7 E881010000              	call    PlayWav@
   857 000005AC EB33                    	jmp	short _3
   858                                  
   859                                  	; 02/12/2024
   860                                  PlayNow@:
   861                                  	; reset file loading and EOF parameters
   862                                  	; 18/12/2024
   863 000005AE C705[BC860000]0000-     	mov	dword [count], 0
   863 000005B6 0000               
   864 000005B8 C705[C0860000]0000-     	mov	dword [LoadedDataBytes], 0
   864 000005C0 0000               
   865 000005C2 C605[36860000]00        	mov	byte [flags], 0
   866 000005C9 C605[F0850000]00        	mov	byte [stopped], 0
   867                                  	;jmp	short PlayNow@@
   868                                  	;;;
   869                                  
   870                                  PlayNow@@:
   871                                  	;;;
   872                                  	;
   873                                  	; 14/11/2024
   874 000005D0 E88A280000              	call	UpdateProgressBar
   875                                  	;;;
   876                                  
   877                                   	; 30/05/2024
   878                                  	; playwav4.asm
   879                                  _2:	
   880 000005D5 E823260000              	call	check4keyboardstop	; flush keyboard buffer
   881 000005DA 72F9                    	jc	short _2		; 07/11/2023
   882                                  
   883                                  ; play the .wav file. Most of the good stuff is in here.
   884                                  	
   885                                  	; 05/12/2024
   886                                  	; 02/12/2024
   887                                  	;mov	eax, [_bdl_buffer]	; BDL_BUFFER physical address
   888                                  ;_3:
   889 000005DC E86B010000              	call    PlayWav
   890                                  
   891                                  	; 30/12/2024
   892                                  	; 29/12/2024 (vgaplay3.s)
   893                                  	; 27/12/2024 (vgaplay.s)
   894                                  _3:
   895                                  
   896                                  ; close the .wav file and exit.
   897                                  
   898                                  	; 25/12/2024
   899 000005E1 E861040000              	call	closeFile
   900                                  
   901                                  	; 25/12/2024
   902                                  	;;;
   903                                  	; reset file loading and EOF parameters
   904                                  	; 18/12/2024
   905 000005E6 C705[BC860000]0000-     	mov	dword [count], 0
   905 000005EE 0000               
   906 000005F0 C705[C0860000]0000-     	mov	dword [LoadedDataBytes], 0
   906 000005F8 0000               
   907 000005FA C605[36860000]00        	mov	byte [flags], 0
   908 00000601 C605[F0850000]00        	mov	byte [stopped], 0
   909                                  	; 29/12/2024
   910 00000608 C705[FC850000]0000-     	mov	dword [pbuf_s], 0
   910 00000610 0000               
   911                                  	;;;
   912                                  
   913                                  	; 27/12/2024
   914                                  	; 26/12/2024
   915 00000612 803D[6D480000]00        	cmp	byte [IsInSplash], 0
   916 00000619 7612                    	jna	short _6
   917 0000061B C605[6D480000]00        	mov	byte [IsInSplash], 0
   918 00000622 8B35[40860000]          	mov	esi, [argvf]
   919 00000628 E9D2FAFFFF              	jmp	Player_ParseNextParameter
   920                                  _6:
   921 0000062D 803D[03860000]51        	cmp	byte [command], 'Q'
   922 00000634 7405                    	je	short terminate
   923 00000636 E99AFAFFFF              	jmp	check_p_command
   924                                  
   925                                  terminate:
   926 0000063B E8E0000000              	call	set_text_mode
   927                                  Exit:
   928                                  	sys	_exit
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94                              <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96                              <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98                              <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000640 B801000000          <1>  mov eax, %1
   103                              <1> 
   104 00000645 CD40                <1>  int 40h
   929                                  halt:
   930 00000647 EBFE                    	jmp	short halt
   931                                  
   932                                  ; -------------------------------------------------------------
   933                                  
   934                                  	; 30/05/2024
   935                                  pmsg_usage:
   936                                  	; 21/12/2024
   937 00000649 E8D2000000              	call	set_text_mode
   938                                  	; 01/12/2024
   939                                  	sys	_msg, msg_usage, 255, 0Fh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000064E BB[8A310000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000653 B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000658 BA0F000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000065D B823000000          <1>  mov eax, %1
   103                              <1> 
   104 00000662 CD40                <1>  int 40h
   940 00000664 EBDA                    	jmp	short Exit
   941                                  
   942                                  ; -------------------------------------------------------------
   943                                  
   944                                  	; 30/05/2024
   945                                  init_err:
   946                                  	; 21/12/2024
   947 00000666 E8B5000000              	call	set_text_mode
   948                                  	; 01/12/2024
   949                                  	sys	_msg, msg_init_err, 255, 0Fh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000066B BB[1E320000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000670 B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000675 BA0F000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000067A B823000000          <1>  mov eax, %1
   103                              <1> 
   104 0000067F CD40                <1>  int 40h
   950 00000681 EBBD                    	jmp	short Exit
   951                                  
   952                                  ; -------------------------------------------------------------
   953                                  
   954                                  	; 07/12/2024
   955                                  error_exit:
   956                                  	; 21/12/2024
   957 00000683 E898000000              	call	set_text_mode
   958                                  trdos386_error:
   959                                  	sys	_msg, trdos386_err_msg, 255, 0Eh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000688 BB[FE310000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 0000068D B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000692 BA0E000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000697 B823000000          <1>  mov eax, %1
   103                              <1> 
   104 0000069C CD40                <1>  int 40h
   960 0000069E EBA0                    	jmp	short Exit
   961                                  
   962                                  ; -------------------------------------------------------------
   963                                  
   964                                  	; 21/12/2024
   965                                  print_msg:
   966 000006A0 B40E                    	mov	ah, 0Eh
   967 000006A2 BB07000000              	mov	ebx, 7
   968                                  	;mov	bl, 7 ; char attribute & color
   969                                  p_next_chr:
   970 000006A7 AC                      	lodsb
   971 000006A8 08C0                    	or	al, al
   972 000006AA 7404                    	jz	short p_retn ; retn
   973 000006AC CD31                    	int	31h
   974 000006AE EBF7                    	jmp	short p_next_chr
   975                                  p_retn:
   976 000006B0 C3                      	retn
   977                                  
   978                                  ; -------------------------------------------------------------
   979                                  
   980                                  	; 21/12/2024
   981                                  clearscreen:
   982                                  	; fast clear
   983                                  	; 640*480, 256 colors
   984 000006B1 8B3D[DC7B0000]          	mov	edi, [LFB_ADDR]
   985 000006B7 B9002C0100              	mov	ecx, (640*480*1)/4 ; 22/12/2024
   986 000006BC 31C0                    	xor	eax, eax
   987 000006BE F3AB                    	rep	stosd
   988 000006C0 C3                      	retn
   989                                  
   990                                  ; -------------------------------------------------------------
   991                                  
   992                                  	; 26/12/2024
   993                                  	; 21/12/2024
   994                                  drawsplashscreen:
   995 000006C1 BD[7C330000]            	mov	ebp, SplashScreen
   996                                  	;;mov	dword [nextrow], 00100000h ; 8*16
   997                                  	;mov	dword [nextrow], 000E0000h ; 8*14
   998                                  	;mov	esi, 0 ; row 0, column 0
   999 000006C6 BE00000200              	mov	esi, 00020000h ; row 2, column 0 ; top margin = 2
  1000 000006CB EB0A                    	jmp	short p_d_x
  1001                                  drawplayingscreen:
  1002 000006CD BD[1D3E0000]            	mov	ebp, PlayingScreen
  1003                                  	;mov	dword [nextrow], 000E0000h ; 8*14
  1004                                  	;mov	esi, 0 ; row 0, column 0
  1005 000006D2 BE00000700              	mov	esi, 00070000h ; row 7, column 0 ; top margin = 7
  1006                                  p_d_x:
  1007 000006D7 C605[E87B0000]50        	mov	byte [columns], 80
  1008                                  p_d_x_n:
  1009 000006DE 31D2                    	xor	edx, edx
  1010 000006E0 8A5500                  	mov	dl, [ebp]
  1011 000006E3 20D2                    	and	dl, dl
  1012 000006E5 7438                    	jz	short p_d_x_ok
  1013 000006E7 C1E204                  	shl	edx, 4 ; * 16 (for 8x16 font)
  1014                                  
  1015 000006EA BF[94560000]            	mov	edi, fontbuff2 ; start of user font data
  1016 000006EF 01D7                    	add	edi, edx
  1017                                  	
  1018                                  	;; NOTE: Following system call writes fonts at
  1019                                  	;; Std VGA video memory 0A0000h, BL bit 7 selects
  1020                                  	;; screen width as 640 pixels (instead of 320 pixels)
  1021                                  	;; so 8Fh is sub function 0Fh (write char)
  1022                                  	;; with 640 pixels screen witdh. 
  1023                                  	;; (Even if VESA VBE mode -LFB- is in use, QEMU and
  1024                                  	;; a real computer with NVIDIA GEFORCE FX 550 uses
  1025                                  	;; A0000h, so.. even if fonts are written at A0000h-B0000h
  1026                                  	;; region, the text is appeared on screen
  1027                                  	;; while LFB is at C0000000h or E0000000h.)
  1028                                  
  1029                                  	;sys	_video, 018Fh, [tcolor], 8001h
  1030                                  			;; use STD VGA video memory
  1031                                  			;; (0A0000h)
  1032                                  	;sys	_video, 020Fh, [tcolor], 8001h ; 8x16 user font
  1033                                  		 ; use LFB for current VBE mode
  1034                                  		 ; for writing fonts on screen
  1035                                  	; 26/12/2024
  1036                                  	sys	_video, 020Fh, 0Fh, 8001h ; 8x16 user font
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000006F1 BB0F020000          <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000006F6 B90F000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000006FB BA01800000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000700 B81F000000          <1>  mov eax, %1
   103                              <1> 
   104 00000705 CD40                <1>  int 40h
  1037                                  
  1038 00000707 45                      	inc	ebp
  1039 00000708 6683C608                	add	si, 8 ; next char pos
  1040 0000070C FE0D[E87B0000]          	dec	byte [columns]
  1041 00000712 75CA                    	jnz	short p_d_x_n	; next column
  1042 00000714 6631F6                  	xor	si, si
  1043                                  	;;add	esi, 00100000h	; next row ; 8*16
  1044                                  	;add	esi, [nextrow]
  1045 00000717 81C600000E00            	add	esi, 000E0000h	; next row ; 8*14
  1046 0000071D EBB8                    	jmp	short p_d_x
  1047                                  p_d_x_ok:
  1048 0000071F C3                      	retn
  1049                                  
  1050                                  ; -------------------------------------------------------------
  1051                                  
  1052                                  	; 21/12/2024
  1053                                  set_text_mode:
  1054 00000720 30E4                    	xor    ah, ah
  1055 00000722 B003                    	mov    al, 3                        
  1056                                   	;int   10h ; al = 03h text mode, int 10 video
  1057 00000724 CD31                    	int    31h ; TRDOS 386 - Video interrupt
  1058 00000726 C3                      	retn
  1059                                  
  1060                                  ; -------------------------------------------------------------
  1061                                  
  1062                                  	; 02/12/2024
  1063                                  Player_Quit@:
  1064 00000727 58                      	pop	eax ; return addr (call PlayWav@)
  1065                                  	
  1066                                  	; 29/11/2024
  1067                                  Player_Quit:
  1068 00000728 E90EFFFFFF              	jmp	 terminate
  1069                                  
  1070                                  ; -------------------------------------------------------------
  1071                                  
  1072                                  	; 29/12/2024 (vgaplay3.s)
  1073                                  	; 02/12/2024 (ac97play.s)
  1074                                  PlayWav@:
  1075                                  	; 29/05/2024
  1076                                  	; Allocate memory block (33 pages)
  1077                                  	sys	_alloc, BDL_BUFFER, 33*4096, 0	; no upper limit
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000072D BB[00900000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000732 B900100200          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000737 BA00000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000073C B82A000000          <1>  mov eax, %1
   103                              <1> 
   104 00000741 CD40                <1>  int 40h
  1078                                  	;jc	short Player_Quit ; 01/12/2024
  1079 00000743 72E2                    	jc	short Player_Quit@ ; 02/12/2024
  1080                                  
  1081 00000745 A3[C8860000]            	mov	[_bdl_buffer], eax ; BDL_BUFFER physical address
  1082                                  	; 02/12/2024
  1083 0000074A EB05                    	jmp	short PlayWav@@
  1084                                  
  1085                                  	; 29/12/2024
  1086                                  	; 01/12/2024
  1087                                  	; 29/05/2024 (TRDOS 386, playwav7.s)
  1088                                  	; ((Modified from playwav4.asm, ich_wav4.asm))
  1089                                  	; ------------------
  1090                                  ;playwav_vra:
  1091                                  PlayWav:
  1092                                  	; create Buffer Descriptor List
  1093                                  
  1094                                  	;  Generic Form of Buffer Descriptor
  1095                                  	;  ---------------------------------
  1096                                  	;  63   62    61-48    47-32   31-0
  1097                                  	;  ---  ---  --------  ------- -----
  1098                                  	;  IOC  BUP -reserved- Buffer  Buffer
  1099                                  	;		      Length   Pointer
  1100                                  	;		      [15:0]   [31:0]
  1101                                  
  1102                                  	;mov	esi, eax
  1103                                  
  1104 0000074C A1[C8860000]            	mov	eax, [_bdl_buffer] ; BDL_BUFFER physical address
  1105                                  
  1106                                  PlayWav@@:	; 02/12/2024
  1107                                  
  1108 00000751 0500100000              	add	eax, 4096	; WAVBUFFER_1 physical address
  1109 00000756 89C3                    	mov	ebx, eax
  1110                                  	;mov	[wav_buffer1], eax
  1111                                  	;add	eax, 65536	; WAVBUFFER_2 physical address
  1112                                  	;mov	[wav_buffer2], eax
  1113                                  
  1114 00000758 BF[00900000]            	mov	edi, BDL_BUFFER
  1115 0000075D B910000000              	mov	ecx, 16
  1116                                  _pw0:
  1117                                  	;mov	eax, WAVBUFFER_1
  1118 00000762 89D8                    	mov	eax, ebx	; WAVBUFFER_1 physical address
  1119 00000764 AB                      	stosd
  1120                                  
  1121 00000765 A1[B0860000]            	mov	eax, [buffersize]
  1122                                  	; 02/12/2024
  1123 0000076A D1E8                    	shr	eax, 1 ; buffer size in word
  1124 0000076C 0D00000040              	or	eax, BUP	; tuneloop (without interrupt)
  1125 00000771 AB                      	stosd
  1126                                  
  1127                                  	;mov	eax, WAVBUFFER_2
  1128 00000772 89D8                    	mov	eax, ebx
  1129 00000774 0500000100              	add	eax, 65536	; WAVBUFFER_2 physical address
  1130 00000779 AB                      	stosd
  1131                                  
  1132 0000077A A1[B0860000]            	mov	eax, [buffersize]
  1133                                  	; 02/12/2024
  1134 0000077F D1E8                    	shr	eax, 1 ; buffer size in word
  1135 00000781 0D00000040              	or	eax, BUP	; tuneloop (without interrupt)
  1136 00000786 AB                      	stosd
  1137                                  
  1138 00000787 E2D9                    	loop	_pw0
  1139                                  
  1140                                  	; 14/11/2024
  1141                                  	;mov	dword [count], ecx ; 0
  1142                                  	;mov	dword [LoadedDataBytes], 0
  1143                                  
  1144                                  RePlayWav:
  1145                                  	; 01/12/2024
  1146                                  	; load 64k into buffer 1
  1147 00000789 BF[00A00000]            	mov	edi, WAVBUFFER_1
  1148                                  	; 05/02/2025
  1149 0000078E 893D[EC7B0000]          	mov	[audio_buffer], edi
  1150 00000794 FF15[A8860000]          	call	dword [loadfromwavfile]
  1151                                  	; 01/12/2024
  1152                                  	; 14/11/2024
  1153 0000079A A1[BC860000]            	mov	eax, [count]
  1154 0000079F 0105[C0860000]          	add	[LoadedDataBytes], eax
  1155                                  
  1156                                  	; 18/12/2024
  1157 000007A5 C705[BC860000]0000-     	mov	dword [count], 0
  1157 000007AD 0000               
  1158                                  
  1159                                  	; and 64k into buffer 2
  1160 000007AF BF[00A00100]            	mov	edi, WAVBUFFER_2
  1161                                  	; 05/02/2025
  1162 000007B4 893D[EC7B0000]          	mov	[audio_buffer], edi
  1163 000007BA FF15[A8860000]          	call	dword [loadfromwavfile]
  1164                                  	; 01/12/2024
  1165                                  	; 14/11/2024
  1166 000007C0 A1[BC860000]            	mov	eax, [count]
  1167 000007C5 0105[C0860000]          	add	[LoadedDataBytes], eax
  1168                                  	
  1169                                  	; write NABMBAR+10h with offset of buffer descriptor list
  1170                                  
  1171                                         	;;mov	eax, BDL_BUFFER
  1172                                          ;mov	eax, esi	; BDL_BUFFER physical address
  1173                                  
  1174                                  	;mov	eax, [_bdl_buffer] ; BDL_BUFFER physical address
  1175                                  	; 02/12/2024
  1176 000007CB 8B1D[C8860000]          	mov	ebx, [_bdl_buffer]
  1177                                  
  1178 000007D1 668B15[A6860000]        	mov	dx, [NABMBAR]
  1179 000007D8 6683C210                        add     dx, PO_BDBAR_REG	; set pointer to BDL
  1180                                  	;out	dx, eax 		; write to AC97 controller
  1181                                  	; 29/05/2024
  1182                                  	;mov	ebx, eax ; data, dword
  1183                                  	; 02/12/2024
  1184                                  	; ebx = [_bdl_buffer] ; data, dword
  1185 000007DC B405                    	mov	ah, 5	; write port dword
  1186 000007DE CD34                    	int	34h
  1187                                  
  1188                                  	; 31/05/2024
  1189                                  	; 19/05/2024
  1190                                  	;call	delay1_4ms
  1191                                  
  1192 000007E0 B01F                            mov	al, 31
  1193 000007E2 E85A070000              	call	setLastValidIndex
  1194                                  
  1195                                  	; 31/05/2024
  1196                                  	; 19/05/2024
  1197                                  	;call	delay1_4ms
  1198                                  
  1199                                  	; 17/02/2017
  1200 000007E7 668B15[A6860000]                mov	dx, [NABMBAR]
  1201 000007EE 6683C21B                        add	dx, PO_CR_REG		; PCM out Control Register
  1202                                          ;mov	al, IOCE + RPBM	; Enable 'Interrupt On Completion' + run
  1203                                  	;			; (LVBI interrupt will not be enabled)
  1204                                  	; 06/11/2023 (TUNELOOP version, without interrupt)
  1205 000007F2 B001                    	mov	al, RPBM
  1206                                  	;out	dx, al			; Start bus master operation.
  1207                                  	; 29/05/2024
  1208                                  	; al = data, byte
  1209 000007F4 B401                    	mov	ah, 1 ; write port, byte
  1210 000007F6 CD34                    	int	34h
  1211                                  
  1212                                  	; 29/12/2024
  1213                                  
  1214                                  ; while DMA engine is running, examine current index and wait until it hits 1
  1215                                  ; as soon as it's 1, we need to refresh the data in wavbuffer1 with another
  1216                                  ; 64k. Likewise when it's playing buffer 2, refresh buffer 1 and repeat.
  1217                                  
  1218                                  	; 28/11/2024
  1219 000007F8 803D[6D480000]00        	cmp	byte [IsInSplash], 0
  1220                                  	;jna	short tuneLoop	; 18/12/2024
  1221                                  	; 29/12/2024
  1222 000007FF 7658                    	jna	short _5
  1223                                  sL1:
  1224 00000801 E8FE060000              	call	updateLVI	; /set LVI != CIV/
  1225 00000806 743F                    	jz	short sL3
  1226 00000808 E8E7060000              	call	getCurrentIndex
  1227 0000080D A801                    	test	al, BIT0
  1228 0000080F 74F0                    	jz	short sL1	; loop if buffer 2 is not playing
  1229                                  
  1230                                  	; load buffer 1
  1231                                  	;mov	ax, [WAV_BUFFER1]
  1232                                  	;call	word [loadfromwavfile]
  1233                                  	; 01/12/2024
  1234 00000811 BF[00A00000]            	mov	edi, WAVBUFFER_1
  1235                                  	; 05/02/2025
  1236 00000816 893D[EC7B0000]          	mov	[audio_buffer], edi
  1237 0000081C FF15[A8860000]          	call	dword [loadfromwavfile]
  1238 00000822 7223                    	jc	short sL3
  1239                                  sL2:
  1240 00000824 E8DB060000              	call	updateLVI
  1241 00000829 741C                    	jz	short sL3
  1242 0000082B E8C4060000              	call	getCurrentIndex
  1243 00000830 A801                    	test	al, BIT0
  1244 00000832 75F0                    	jnz	short sL2	; loop if buffer 1 is not playing
  1245                                  
  1246                                  	; load buffer 2
  1247                                  	;mov	ax, [WAV_BUFFER2]
  1248                                  	;call	word [loadfromwavfile]
  1249                                  	; 01/12/2024
  1250 00000834 BF[00A00100]            	mov	edi, WAVBUFFER_2
  1251                                  	; 05/02/2025
  1252 00000839 893D[EC7B0000]          	mov	[audio_buffer], edi
  1253 0000083F FF15[A8860000]          	call	dword [loadfromwavfile]
  1254 00000845 73BA                    	jnc	short sL1
  1255                                  sL3:
  1256 00000847 668B15[A6860000]        	mov	dx, [NABMBAR]
  1257 0000084E 6683C21B                	add	dx, PO_CR_REG	; PCM out Control Register
  1258 00000852 B000                    	mov	al, 0
  1259                                  	;out	dx, al		; stop player
  1260                                  	; 01/12/2024
  1261                                  	; al = data, byte
  1262 00000854 B401                    	mov	ah, 1  ; write port, byte
  1263 00000856 CD34                    	int	34h
  1264                                  
  1265                                  	; 01/12/2024
  1266                                  	; 29/11/2024
  1267                                  	;; reset file loading and EOF parameters
  1268                                  	;;mov	dword [count], 0
  1269                                  	;mov	dword [LoadedDataBytes], 0
  1270                                  	;mov	byte [flags], 0
  1271                                  
  1272 00000858 C3                      	retn
  1273                                  
  1274                                  ; -------------------------------------------
  1275                                  
  1276                                  _5:
  1277                                  	; 26/12/2024
  1278 00000859 803D[02860000]00        	cmp	byte [p_mode], 0
  1279 00000860 7705                    	ja	short tuneLoop
  1280                                  	;;;
  1281                                  
  1282                                  ; -------------------------------------------
  1283                                  
  1284                                  	; 22/12/2024
  1285                                   	; prepare all leds as turned off
  1286 00000862 E8FA260000              	call	reset_wave_leds
  1287                                  
  1288                                  ; -------------------------------------------
  1289                                  
  1290                                  	; 29/12/2024 (vgaplay3.s)
  1291                                  	; 18/12/2024 (ac97play.s)
  1292                                  	; 01/12/2024 (32bit)
  1293                                  	; 29/11/2024
  1294                                  tuneLoop:
  1295                                  	; 30/05/2024
  1296                                  	; 18/11/2023 (ich_wav4.asm)
  1297                                  	; 08/11/2023
  1298                                  	; 06/11/2023
  1299                                  tLWait:
  1300                                  	; 18/11/2024
  1301 00000867 803D[F0850000]00        	cmp	byte [stopped], 0
  1302                                  	;jna	short tL@
  1303                                  	; 21/11/2024
  1304 0000086E 7718                    	ja	short tLWait@
  1305 00000870 A0[F2850000]            	mov	al, [tLP]
  1306 00000875 3C31                    	cmp	al, '1'
  1307 00000877 7458                    	je	short tL1@
  1308 00000879 0F87A9000000            	ja	tL2@
  1309 0000087F B031                    	mov	al, '1'
  1310 00000881 A2[F2850000]            	mov	[tLP], al
  1311 00000886 EB49                    	jmp	short tL1@ 
  1312                                  tLWait@:	; 21/11/2024
  1313                                  	;;;
  1314                                  	; 09/12/2024
  1315 00000888 803D[F0850000]03        	cmp	byte [stopped], 3
  1316 0000088F 0F83EB000000            	jnb	_exitt_
  1317                                  	;;;
  1318 00000895 E862210000              	call	checkUpdateEvents
  1319 0000089A 0F82E0000000            	jc	_exitt_
  1320                                  	;;;
  1321                                  	; 29/11/2024
  1322 000008A0 803D[03860000]4E        	cmp	byte [command], 'N'
  1323 000008A7 0F84D3000000            	je	_exitt_
  1324 000008AD 803D[03860000]50        	cmp	byte [command], 'P'
  1325 000008B4 0F84C6000000            	je	_exitt_
  1326                                  	;;;
  1327 000008BA 803D[F1850000]30        	cmp	byte [tLO], '0'
  1328 000008C1 74A4                    	je	short tLWait
  1329 000008C3 E8C2000000              	call	tLZ
  1330 000008C8 C605[F1850000]30        	mov	byte [tLO], '0'
  1331 000008CF EB96                    	jmp	short tLWait
  1332                                  
  1333                                  ;tLO:	db 0
  1334                                  	
  1335                                  tL1@:
  1336                                  	;mov	al, '1'
  1337                                  	; 19/11/2024
  1338 000008D1 A2[F1850000]            	mov	[tLO], al
  1339 000008D6 E8B1000000              	call	tL0
  1340                                  tL1:
  1341 000008DB E824060000              	call	updateLVI	; /set LVI != CIV/
  1342 000008E0 0F849A000000            	jz	_exitt_		; 08/11/2023
  1343                                  	;;;
  1344                                  	;call	check4keyboardstop
  1345                                  	; 14/11/2024
  1346 000008E6 E811210000              	call	checkUpdateEvents
  1347 000008EB 0F828F000000            	jc	_exitt_
  1348                                  	; 18/11/2024
  1349 000008F1 803D[F0850000]00        	cmp	byte [stopped], 0
  1350 000008F8 778E                    	ja	short tLWait@	; 21/11/2024
  1351                                  	;;;
  1352 000008FA E8F5050000              	call	getCurrentIndex
  1353 000008FF A801                    	test	al, BIT0
  1354 00000901 74D8                    	jz	short tL1	; loop if buffer 2 is not playing
  1355                                  
  1356                                  	; load buffer 1
  1357                                  	;mov	ax, [WAV_BUFFER1]
  1358                                  	; 01/12/2024
  1359 00000903 BF[00A00000]            	mov	edi, WAVBUFFER_1
  1360                                  	; 05/02/2025
  1361 00000908 893D[EC7B0000]          	mov	[audio_buffer], edi
  1362                                  
  1363                                  	;call	loadFromFile
  1364                                  	; 18/11/2023
  1365                                  	;call	word [loadfromwavfile]
  1366                                  	; 01/12/2024
  1367 0000090E FF15[A8860000]          	call	dword [loadfromwavfile]
  1368 00000914 726A                    	jc	short _exitt_	; end of file
  1369                                  
  1370                                  	; 14/11/2024
  1371                                  	;mov	ax, [count]
  1372                                  	;add	[LoadedDataBytes], ax
  1373                                  	;adc	word [LoadedDataBytes+2], 0
  1374                                  	; 01/12/2024
  1375 00000916 A1[BC860000]            	mov	eax, [count]
  1376 0000091B 0105[C0860000]          	add	[LoadedDataBytes], eax
  1377                                  
  1378 00000921 B032                    	mov	al, '2'
  1379                                  	; 21/11/2024
  1380 00000923 A2[F2850000]            	mov	[tLP], al
  1381                                  tL2@:
  1382                                  	; 19/11/2024
  1383 00000928 A2[F1850000]            	mov	[tLO], al
  1384 0000092D E85A000000              	call	tL0
  1385                                  tL2:
  1386 00000932 E8CD050000              	call    updateLVI
  1387 00000937 7447                    	jz	short _exitt_	; 08/11/2023
  1388                                  	;;;
  1389                                  	;call	check4keyboardstop
  1390                                  	; 14/11/2024
  1391 00000939 E8BE200000              	call	checkUpdateEvents
  1392 0000093E 7240                    	jc	short _exitt_
  1393                                  	; 18/11/2024
  1394 00000940 803D[F0850000]00        	cmp	byte [stopped], 0
  1395 00000947 0F873BFFFFFF            	ja	tLWait@		; 21/11/2024 
  1396                                  	;;;
  1397 0000094D E8A2050000              	call    getCurrentIndex
  1398 00000952 A801                    	test	al, BIT0
  1399 00000954 75DC                    	jnz	short tL2	; loop if buffer 1 is not playing
  1400                                  
  1401                                  	; load buffer 2
  1402                                  	;mov	ax, [WAV_BUFFER2]
  1403                                  	; 01/12/2024
  1404 00000956 BF[00A00100]            	mov	edi, WAVBUFFER_2
  1405                                  	; 05/02/2025
  1406 0000095B 893D[EC7B0000]          	mov	[audio_buffer], edi
  1407                                  
  1408                                  	;call	loadFromFile
  1409                                  	; 18/11/2023
  1410                                  	;call	word [loadfromwavfile]
  1411                                  	; 01/12/2024
  1412 00000961 FF15[A8860000]          	call	dword [loadfromwavfile]
  1413                                  	;jnc	short tuneLoop
  1414 00000967 7217                    	jc	short _exitt_
  1415                                  
  1416                                  	; 14/11/2024
  1417                                  	;mov	ax, [count]
  1418                                  	;add	[LoadedDataBytes], ax
  1419                                  	;adc	word [LoadedDataBytes+2], 0
  1420                                  	; 01/12/2024
  1421 00000969 A1[BC860000]            	mov	eax, [count]
  1422 0000096E 0105[C0860000]          	add	[LoadedDataBytes], eax	
  1423                                  
  1424                                  	; 21/11/2024
  1425 00000974 C605[F2850000]31        	mov	byte [tLP], '1'
  1426 0000097B E9E7FEFFFF              	jmp	tuneLoop
  1427                                  
  1428                                  	; 29/12/2024 (vgaplay3.s)
  1429                                  _exitt_:
  1430                                  	; 07/12/2024
  1431                                  	; Stop Playing
  1432                                  	;mov	byte [stopped], 2
  1433                                  	;sys	_audio, 0700h
  1434 00000980 E801050000              	call	ac97_stop
  1435                                  
  1436                                  	;;;
  1437                                  	; 14/11/2024
  1438 00000985 E8D5240000              	call	UpdateProgressBar
  1439                                  	;;;
  1440                                  
  1441                                  	; 18/11/2024
  1442                                  tLZ:
  1443                                  	; 30/05/2024
  1444 0000098A B030                    	mov	al, '0'
  1445                                  
  1446                                  	;add	al, '0'
  1447                                  	;call	tL0
  1448                                  	;
  1449                                  	;retn
  1450                                  	; 06/11/2023
  1451                                  	;jmp	short tL0
  1452                                  	;retn
  1453                                  
  1454                                  	; 06/11/2023
  1455                                  tL0:
  1456                                  	; 29/05/2024 (TRDOS 386)
  1457                                  	; 08/11/2023
  1458                                  	; 05/11/2023
  1459                                  	; 17/02/2017 - Buffer switch test (temporary)
  1460                                  	; 06/11/2023
  1461                                  	; al = buffer indicator ('1', '2' or '0' -stop- )
  1462                                  
  1463                                  	; 22/12/2024 (graphics mode modification)
  1464                                  	; (640*480, 256 colors)
  1465                                  	;;;
  1466                                  	;mov	ebp, 16
  1467 0000098C BD0E000000              	mov	ebp, 14
  1468 00000991 8B3D[DC7B0000]          	mov	edi, [LFB_ADDR]
  1469 00000997 0FB6F0                  	movzx	esi, al
  1470 0000099A C1E604                  	shl	esi, 4 ; * 16
  1471 0000099D 81C6[94560000]          	add	esi, fontbuff2
  1472                                  tL0_1:
  1473 000009A3 BA08000000              	mov	edx, 8 ; 8 pixels (8*16 pixel font)
  1474 000009A8 8A26                    	mov	ah, [esi]
  1475                                  tL0_2:
  1476 000009AA B00C                    	mov	al, 0Ch ; red
  1477 000009AC D0E4                    	shl	ah, 1
  1478 000009AE 7302                    	jnc	short tL0_3
  1479 000009B0 B00E                    	mov	al, 0Eh ; yellow
  1480                                  tL0_3:
  1481 000009B2 AA                      	stosb
  1482 000009B3 4A                      	dec	edx
  1483 000009B4 75F4                    	jnz	short tL0_2
  1484 000009B6 4D                      	dec	ebp
  1485 000009B7 7409                    	jz	short tL0_4
  1486 000009B9 81C778020000            	add	edi, 640-8 ; next line
  1487 000009BF 46                      	inc	esi
  1488 000009C0 EBE1                    	jmp	short tL0_1
  1489                                  tL0_4:
  1490                                  	;;;
  1491 000009C2 C3                      	retn
  1492                                  
  1493                                  ; -------------------------------------------
  1494                                  
  1495                                  	; 29/12/2024 (vgaplay3.s)
  1496                                  	; 18/12/2024 (ac97play.s)
  1497                                  	; 14/11/2024
  1498                                  ;SetMasterVolume:
  1499                                  	; 15/11/2024
  1500                                  SetPCMOutVolume:
  1501                                  	;cmp	al, 31
  1502                                  	;ja	short setvolume_ok
  1503 000009C3 A2[602C0000]            	mov	[volume], al  ; max = 0, min = 31
  1504                                  SetPCMOutVolume@:	; 19/11/2024
  1505 000009C8 88C4                    	mov	ah, al
  1506 000009CA 668B15[A4860000]        	mov	dx, [NAMBAR]
  1507                                  	; 15/11/2024 (QEMU)
  1508                                    	;add	dx, CODEC_MASTER_VOL_REG
  1509 000009D1 6683C218                	add	dx, CODEC_PCM_OUT_REG
  1510                                  	;out	dx, ax
  1511                                  	; 01/12/2024
  1512                                  	; bx = data, word
  1513                                  	; 03/12/2024
  1514 000009D5 89C3                    	mov	ebx, eax
  1515 000009D7 B403                    	mov	ah, 3  ; write port, word
  1516 000009D9 CD34                    	int	34h
  1517                                  ;setvolume_ok:
  1518 000009DB C3                      	retn
  1519                                  
  1520                                  ; -------------------------------------------
  1521                                  
  1522                                  	; 29/12/2024 (vgaplay3.s)
  1523                                  	; 18/12/2024 (ac97play.s)
  1524                                  	; 30/05/2024
  1525                                  DetectAC97:
  1526                                  DetectICH:
  1527                                  	; 22/11/2023
  1528                                  	; 19/11/2023
  1529                                  	; 01/11/2023 - TRDOS 386 Kernel v2.0.7
  1530                                  	;; 10/06/2017
  1531                                  	;; 05/06/2017
  1532                                  	;; 29/05/2017
  1533                                  	;; 28/05/2017
  1534                                  
  1535                                  	; 01/12/2024
  1536                                  	; 19/11/2023
  1537 000009DC BE[A4300000]            	mov	esi, valid_ids	; address of Valid ICH (AC97) Device IDs
  1538 000009E1 B915000000              	mov	ecx, valid_id_count
  1539                                  pfd_1:
  1540 000009E6 AD                      	lodsd
  1541 000009E7 E8B4000000              	call	pciFindDevice
  1542 000009EC 7303                    	jnc	short d_ac97_1
  1543 000009EE E2F6                    	loop	pfd_1
  1544                                  
  1545                                  	;stc
  1546 000009F0 C3                      	retn
  1547                                  
  1548                                  d_ac97_1:
  1549                                  	; eax = BUS/DEV/FN
  1550                                  	;	00000000BBBBBBBBDDDDDFFF00000000
  1551                                  	; edx = DEV/VENDOR
  1552                                  	;	DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV
  1553                                  
  1554                                  	; playwav4.asm - 19/05/2024
  1555                                  
  1556 000009F1 A3[9C860000]            	mov	[bus_dev_fn], eax
  1557 000009F6 8915[A0860000]          	mov	[dev_vendor], edx
  1558                                  
  1559                                  	; get ICH base address regs for mixer and bus master
  1560                                  
  1561 000009FC B010                            mov     al, NAMBAR_REG
  1562 000009FE E82B010000                      call    pciRegRead16			; read PCI registers 10-11
  1563                                          ;and    dx, IO_ADDR_MASK 		; mask off BIT0
  1564                                  	; 19/05/2024
  1565 00000A03 80E2FE                  	and	dl, 0FEh
  1566                                  
  1567 00000A06 668915[A4860000]                mov     [NAMBAR], dx			; save audio mixer base addr
  1568                                  
  1569 00000A0D B014                    	mov     al, NABMBAR_REG
  1570 00000A0F E81A010000                      call    pciRegRead16
  1571                                          ;and    dx, IO_ADDR_MASK
  1572                                  	; 19/05/2024
  1573 00000A14 80E2C0                  	and	dl, 0C0h
  1574                                  
  1575 00000A17 668915[A6860000]                mov     [NABMBAR], dx			; save bus master base addr
  1576                                  
  1577 00000A1E B03C                    	mov	al, AC97_INT_LINE ; Interrupt line register (3Ch)
  1578 00000A20 E802010000              	call	pciRegRead8 ; 17/02/2017
  1579                                  	
  1580 00000A25 8815[37860000]          	mov	[ac97_int_ln_reg], dl
  1581                                  
  1582                                  	;clc
  1583                                  
  1584 00000A2B C3                      	retn
  1585                                  
  1586                                  ; ----------------------------------
  1587                                  	
  1588                                  	; 26/12/2024
  1589                                  	; 07/12/2024
  1590                                  	; 01/12/2024
  1591                                  	; 14/11/2024
  1592                                  	; INPUT: ds:dx = file name address
  1593                                  	; OUTPUT: [filehandle] = ; -1 = not open
  1594                                  openFile:
  1595                                  	; 26/12/2024
  1596                                  	; 01/12/2024
  1597                                  	sys	_open, edx, 0
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000A2C 89D3                <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000A2E B900000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98                              <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000A33 B805000000          <1>  mov eax, %1
   103                              <1> 
   104 00000A38 CD40                <1>  int 40h
  1598                                  	; 07/12/2024
  1599                                  	;sys	_open, wav_file_name, 0
  1600 00000A3A 7305                    	jnc	short _of1
  1601                                  
  1602 00000A3C B8FFFFFFFF              	mov	eax, -1
  1603                                  	; cf = 1 -> not found or access error
  1604                                  _of1:
  1605 00000A41 A3[38860000]            	mov	[filehandle], eax
  1606 00000A46 C3                      	retn
  1607                                  
  1608                                  ; ----------------------------------
  1609                                  
  1610                                  ; close the currently open file
  1611                                  
  1612                                  	; 01/12/2024
  1613                                  	; 14/11/2024
  1614                                  	; INPUT: [filehandle] ; -1 = not open
  1615                                  	; OUTPUT: none
  1616                                  closeFile:
  1617 00000A47 833D[38860000]FF        	cmp	dword [filehandle], -1
  1618 00000A4E 740D                    	jz	short _cf1
  1619                                  	; 01/12/2024
  1620                                  	sys	_close, [filehandle]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000A50 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96                              <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98                              <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000A56 B806000000          <1>  mov eax, %1
   103                              <1> 
   104 00000A5B CD40                <1>  int 40h
  1621                                  	;mov 	dword [filehandle], -1
  1622                                  _cf1:
  1623 00000A5D C3                      	retn
  1624                                  
  1625                                  ; ----------------------------------
  1626                                  
  1627                                  	; 05/02/2025
  1628                                  	; 01/12/2024
  1629                                  	; 14/11/2024 - Erdogan Tan
  1630                                  getWAVParameters:
  1631                                  ; reads WAV file header(s) (44 bytes) from the .wav file.
  1632                                  ; entry: none - assumes file is already open
  1633                                  ; exit: ax = sample rate (11025, 22050, 44100, 48000)
  1634                                  ;	cx = number of channels (mono=1, stereo=2)
  1635                                  ;	dx = bits per sample (8, 16)
  1636                                  ;	bx = number of bytes per sample (1 to 4)
  1637                                  
  1638                                          ;mov	dx, WAVFILEHEADERbuff
  1639                                  	;mov	bx, [filehandle]
  1640                                          ;mov	cx, 44			; 44 bytes
  1641                                  	;mov	ah, 3Fh
  1642                                          ;int	21h
  1643                                  	;jc	short gwavp_retn
  1644                                  	; 01/12/2024 (TRDOS 386)
  1645                                  	sys	_read, [filehandle], WAVFILEHEADERbuff, 44
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000A5E 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000A64 B9[08860000]        <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000A69 BA2C000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000A6E B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00000A73 CD40                <1>  int 40h
  1646 00000A75 7228                    	jc	short gwavp_retn
  1647                                  
  1648 00000A77 83F82C                  	cmp	eax, 44
  1649 00000A7A 7223                    	jb	short gwavp_retn
  1650                                  
  1651 00000A7C 813D[10860000]5741-     	cmp	dword [RIFF_Format], 'WAVE'
  1651 00000A84 5645               
  1652 00000A86 7516                    	jne	short gwavp_stc_retn
  1653                                  
  1654 00000A88 66833D[1C860000]01      	cmp	word [WAVE_AudioFormat], 1 ; Offset 20, must be 1 (= PCM)
  1655                                  	; 05/02/2025
  1656 00000A90 750C                    	jne	short gwavp_stc_retn
  1657                                  	;je	short gwavp_retn ; 15/11/2024
  1658                                  
  1659                                  	; 05/02/2025
  1660                                  	; (Open MPT creates wav files with a new type header,
  1661                                  	;  this program can not use the new type
  1662                                  	;  because of 'data' offset is not at DATA_SubchunkID.)
  1663                                  	; ((GoldWave creates common type wav file.))
  1664 00000A92 813D[2C860000]6461-     	cmp	dword [DATA_SubchunkID], 'data'
  1664 00000A9A 7461               
  1665 00000A9C 7401                    	je	short gwavp_retn
  1666                                  
  1667                                  	; 15/11/2024
  1668                                  	;mov	cx, [WAVE_NumChannels]	; return num of channels in CX
  1669                                          ;mov    ax, [WAVE_SampleRate]	; return sample rate in AX
  1670                                  	;mov	dx, [WAVE_BitsPerSample] 
  1671                                  					; return bits per sample value in DX
  1672                                  	;mov	bx, [WAVE_BlockAlign]	; return bytes per sample in BX
  1673                                  ;gwavp_retn:
  1674                                          ;retn
  1675                                  
  1676                                  gwavp_stc_retn:
  1677 00000A9E F9                      	stc
  1678                                  gwavp_retn:
  1679 00000A9F C3                      	retn
  1680                                  
  1681                                  ; 29/12/2024 (vgaplay3.s)
  1682                                  ; 18/12/2024 (ac97play.s)
  1683                                  ; --------------------------------------------------------
  1684                                  ; 27/05/2024 - (TRDOS 386 Kernel) audio.s
  1685                                  ; --------------------------------------------------------
  1686                                  
  1687                                  NOT_PCI32_PCI16	EQU 03FFFFFFFh ; NOT BIT31+BIT30 ; 19/03/2017
  1688                                  NOT_BIT31 EQU 7FFFFFFFh
  1689                                  
  1690                                  pciFindDevice:
  1691                                  	; 19/11/2023
  1692                                  	; 03/04/2017 ('pci.asm', 20/03/2017)
  1693                                  	;
  1694                                  	; scan through PCI space looking for a device+vendor ID
  1695                                  	;
  1696                                  	; Entry: EAX=Device+Vendor ID
  1697                                  	;
  1698                                  	; Exit: EAX=PCI address if device found
  1699                                  	;	EDX=Device+Vendor ID
  1700                                  	;       CY clear if found, set if not found. EAX invalid if CY set.
  1701                                  	;
  1702                                  	; Destroys: ebx, edi ; 19/11/2023
  1703                                  
  1704                                          ; 19/11/2023
  1705 00000AA0 89C3                    	mov	ebx, eax
  1706 00000AA2 BF00000080              	mov	edi, 80000000h
  1707                                  nextPCIdevice:
  1708 00000AA7 89F8                    	mov 	eax, edi		; read PCI registers
  1709 00000AA9 E88C000000              	call	pciRegRead32
  1710                                  	; 19/11/2023
  1711 00000AAE 39DA                    	cmp	edx, ebx
  1712 00000AB0 7412                    	je	short PCIScanExit	; found
  1713                                  	; 19/11/2023
  1714 00000AB2 81FF00F8FF80            	cmp	edi, 80FFF800h
  1715 00000AB8 7308                    	jnb	short pfd_nf		; not found
  1716 00000ABA 81C700010000            	add	edi, 100h
  1717 00000AC0 EBE5                    	jmp	short nextPCIdevice
  1718                                  pfd_nf:
  1719 00000AC2 F9                      	stc
  1720 00000AC3 C3                      	retn
  1721                                  PCIScanExit:
  1722                                  	;pushf
  1723 00000AC4 B8FFFFFF7F              	mov	eax, NOT_BIT31 	; 19/03/2017
  1724 00000AC9 21F8                    	and	eax, edi	; return only bus/dev/fn #
  1725 00000ACB C3                      	retn
  1726                                  
  1727                                  pciRegRead:
  1728                                  	; 01/12/2024
  1729                                  	; 03/04/2017 ('pci.asm', 20/03/2017)
  1730                                  	;
  1731                                  	; 8/16/32bit PCI reader
  1732                                  	;
  1733                                  	; Entry: EAX=PCI Bus/Device/fn/register number
  1734                                  	;           BIT30 set if 32 bit access requested
  1735                                  	;           BIT29 set if 16 bit access requested
  1736                                  	;           otherwise defaults to 8 bit read
  1737                                  	;
  1738                                  	; Exit:  DL,DX,EDX register data depending on requested read size
  1739                                  	;
  1740                                  	; Note1: this routine is meant to be called via pciRegRead8,
  1741                                  	;	 pciRegread16 or pciRegRead32, listed below.
  1742                                  	;
  1743                                  	; Note2: don't attempt to read 32 bits of data from a non dword
  1744                                  	;	 aligned reg number. Likewise, don't do 16 bit reads from
  1745                                  	;	 non word aligned reg #
  1746                                  
  1747 00000ACC 53                      	push	ebx
  1748 00000ACD 51                      	push	ecx
  1749 00000ACE 89C3                            mov     ebx, eax		; save eax, dh
  1750 00000AD0 88F1                            mov     cl, dh
  1751                                  
  1752 00000AD2 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; clear out data size request
  1753 00000AD7 0D00000080                      or      eax, BIT31		; make a PCI access request
  1754 00000ADC 24FC                            and     al, ~3 ; NOT 3 ; 0FCh	; force index to be dword
  1755                                  
  1756 00000ADE 66BAF80C                        mov     dx, PCI_INDEX_PORT
  1757                                          ;out	dx, eax			; write PCI selector
  1758                                  	; 29/05/2024
  1759 00000AE2 53                      	push	ebx
  1760 00000AE3 89C3                    	mov	ebx, eax ; data, dword
  1761 00000AE5 B405                    	mov	ah, 5 ; write port, dword
  1762                                  	; dx = port number
  1763 00000AE7 CD34                    	int	34h
  1764 00000AE9 5B                      	pop	ebx
  1765                                  	
  1766 00000AEA 66BAFC0C                        mov     dx, PCI_DATA_PORT
  1767 00000AEE 88D8                            mov     al, bl
  1768 00000AF0 2403                            and     al, 3			; figure out which port to
  1769 00000AF2 00C2                            add     dl, al			; read to
  1770                                  
  1771 00000AF4 F7C3000000C0            	test    ebx, PCI32+PCI16
  1772 00000AFA 750A                            jnz     short _pregr0
  1773                                  
  1774                                  	;in	al, dx			; return 8 bits of data
  1775                                  	; 29/05/2024
  1776 00000AFC B400                    	mov	ah, 0 ; read port, byte
  1777                                  	; dx = port number
  1778 00000AFE CD34                    	int	34h
  1779                                          
  1780 00000B00 88C2                    	mov	dl, al
  1781 00000B02 88CE                    	mov     dh, cl			; restore dh for 8 bit read
  1782 00000B04 EB17                    	jmp	short _pregr2
  1783                                  _pregr0:	
  1784 00000B06 F7C300000080            	test    ebx, PCI32
  1785 00000B0C 7509                            jnz	short _pregr1
  1786                                  
  1787                                  	;in	ax, dx
  1788                                  	; 29/05/2024
  1789 00000B0E B402                    	mov	ah, 2 ; read port, word
  1790                                  	; dx = port number
  1791 00000B10 CD34                    	int	34h
  1792                                  
  1793 00000B12 6689C2                  	mov     dx, ax			; return 16 bits of data
  1794 00000B15 EB06                    	jmp	short _pregr2
  1795                                  _pregr1:
  1796                                  	;in	eax, dx			; return 32 bits of data
  1797                                  	; 29/05/2024
  1798 00000B17 B404                    	mov	ah, 4 ; read port, dword
  1799                                  	; dx = port number
  1800 00000B19 CD34                    	int	34h
  1801                                  
  1802 00000B1B 89C2                    	mov	edx, eax
  1803                                  _pregr2:
  1804 00000B1D 89D8                    	mov     eax, ebx		; restore eax
  1805 00000B1F 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; clear out data size request
  1806 00000B24 59                      	pop	ecx
  1807 00000B25 5B                      	pop	ebx
  1808 00000B26 C3                      	retn
  1809                                  
  1810                                  pciRegRead8:
  1811 00000B27 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; set up 8 bit read size
  1812 00000B2C EB9E                            jmp     short pciRegRead	; call generic PCI access
  1813                                  
  1814                                  pciRegRead16:
  1815 00000B2E 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; set up 16 bit read size
  1816 00000B33 0D00000040                      or      eax, PCI16		; call generic PCI access
  1817 00000B38 EB92                            jmp     short pciRegRead
  1818                                  
  1819                                  pciRegRead32:
  1820 00000B3A 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; set up 32 bit read size
  1821 00000B3F 0D00000080                      or      eax, PCI32		; call generic PCI access
  1822 00000B44 EB86                            jmp     pciRegRead
  1823                                  
  1824                                  pciRegWrite:
  1825                                  	; 01/12/2024
  1826                                  	; 03/04/2017 ('pci.asm', 29/11/2016)
  1827                                  	;
  1828                                  	; 8/16/32bit PCI writer
  1829                                  	;
  1830                                  	; Entry: EAX=PCI Bus/Device/fn/register number
  1831                                  	;           BIT31 set if 32 bit access requested
  1832                                  	;           BIT30 set if 16 bit access requested
  1833                                  	;           otherwise defaults to 8bit read
  1834                                  	;        DL/DX/EDX data to write depending on size
  1835                                  	;
  1836                                  	; Note1: this routine is meant to be called via pciRegWrite8,
  1837                                  	;	 pciRegWrite16 or pciRegWrite32 as detailed below.
  1838                                  	;
  1839                                  	; Note2: don't attempt to write 32bits of data from a non dword
  1840                                  	;	 aligned reg number. Likewise, don't do 16 bit writes from
  1841                                  	;	 non word aligned reg #
  1842                                  
  1843 00000B46 53                      	push	ebx
  1844 00000B47 51                      	push	ecx
  1845 00000B48 89C3                            mov     ebx, eax		; save eax, edx
  1846 00000B4A 89D1                            mov     ecx, edx
  1847 00000B4C 25FFFFFF3F              	and     eax, NOT_PCI32_PCI16	; clear out data size request
  1848 00000B51 0D00000080                      or      eax, BIT31		; make a PCI access request
  1849 00000B56 24FC                            and     al, ~3 ; NOT 3 ; 0FCh	; force index to be dword
  1850                                  
  1851 00000B58 66BAF80C                        mov     dx, PCI_INDEX_PORT
  1852                                  	;out	dx, eax			; write PCI selector
  1853                                  	; 29/05/2024
  1854 00000B5C 53                      	push	ebx
  1855 00000B5D 89C3                    	mov	ebx, eax ; data, dword
  1856 00000B5F B405                    	mov	ah, 5 ; write port, dword
  1857                                  	; dx = port number
  1858 00000B61 CD34                    	int	34h
  1859 00000B63 5B                      	pop	ebx
  1860                                  	
  1861 00000B64 66BAFC0C                        mov     dx, PCI_DATA_PORT
  1862 00000B68 88D8                            mov     al, bl
  1863 00000B6A 2403                            and     al, 3			; figure out which port to
  1864 00000B6C 00C2                            add     dl, al			; write to
  1865                                  
  1866 00000B6E F7C3000000C0            	test    ebx, PCI32+PCI16
  1867 00000B74 7508                            jnz     short _pregw0
  1868 00000B76 88C8                    	mov	al, cl 			; put data into al
  1869                                  	;out	dx, al
  1870                                  	; 29/05/2024
  1871                                  	; al = data, byte
  1872 00000B78 B401                    	mov	ah, 1 ; write port, byte
  1873                                  	; dx = port number
  1874 00000B7A CD34                    	int	34h
  1875                                  
  1876 00000B7C EB1F                    	jmp	short _pregw2
  1877                                  _pregw0:
  1878 00000B7E F7C300000080            	test    ebx, PCI32
  1879 00000B84 750D                            jnz     short _pregw1
  1880 00000B86 6689C8                  	mov	ax, cx			; put data into ax
  1881                                  	;out	dx, ax
  1882                                  	; 29/05/2024
  1883 00000B89 53                      	push	ebx
  1884 00000B8A 89C3                    	mov	ebx, eax ; data, word
  1885 00000B8C B403                    	mov	ah, 3 ; write port, word
  1886                                  	; dx = port number
  1887 00000B8E CD34                    	int	34h
  1888 00000B90 5B                      	pop	ebx
  1889                                  
  1890 00000B91 EB0A                    	jmp	short _pregw2
  1891                                  _pregw1:
  1892 00000B93 89C8                    	mov	eax, ecx		; put data into eax
  1893                                  	;out	dx, eax
  1894                                  	; 29/05/2024
  1895 00000B95 53                      	push	ebx
  1896 00000B96 89C3                    	mov	ebx, eax ; data, dword
  1897 00000B98 B405                    	mov	ah, 5 ; write port, dword
  1898                                  	; dx = port number
  1899 00000B9A CD34                    	int	34h
  1900 00000B9C 5B                      	pop	ebx
  1901                                  _pregw2:
  1902 00000B9D 89D8                            mov     eax, ebx		; restore eax
  1903 00000B9F 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; clear out data size request
  1904 00000BA4 89CA                            mov     edx, ecx		; restore dx
  1905 00000BA6 59                      	pop	ecx
  1906 00000BA7 5B                      	pop	ebx
  1907 00000BA8 C3                      	retn
  1908                                  
  1909                                  pciRegWrite8:
  1910 00000BA9 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; set up 8 bit write size
  1911 00000BAE EB96                            jmp	short pciRegWrite	; call generic PCI access
  1912                                  
  1913                                  pciRegWrite16:
  1914 00000BB0 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; set up 16 bit write size
  1915 00000BB5 0D00000040                      or      eax, PCI16		; call generic PCI access
  1916 00000BBA EB8A                            jmp	short pciRegWrite
  1917                                  
  1918                                  pciRegWrite32:
  1919 00000BBC 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; set up 32 bit write size
  1920 00000BC1 0D00000080                      or      eax, PCI32		; call generic PCI access
  1921 00000BC6 E97BFFFFFF                      jmp	pciRegWrite
  1922                                  
  1923                                  ; --------------------------------------------------------
  1924                                  ; 19/05/2024 - (playwav4.asm) ac97_vra.asm
  1925                                  ; --------------------------------------------------------
  1926                                  
  1927                                  	; 13/11/2023
  1928                                  
  1929                                  ;VRA:	db 1
  1930                                  
  1931                                  codecConfig:
  1932                                  	; 01/12/2024 (ac97play.s)
  1933                                  	; 29/05/2024 (playwav7.s modification)
  1934                                  	; 19/05/2024
  1935                                  	; 19/11/2023
  1936                                  	; 15/11/2023
  1937                                  	; 04/11/2023
  1938                                  	; 17/02/2017 
  1939                                  	; 07/11/2016 (Erdogan Tan)
  1940                                  
  1941                                  	;AC97_EA_VRA equ 1
  1942                                  	AC97_EA_VRA equ BIT0
  1943                                  
  1944                                  	; 04/11/2023
  1945                                  init_ac97_controller:
  1946 00000BCB A1[9C860000]            	mov	eax, [bus_dev_fn]
  1947 00000BD0 B004                    	mov	al, PCI_CMD_REG
  1948 00000BD2 E857FFFFFF              	call	pciRegRead16		; read PCI command register
  1949 00000BD7 80CA05                  	or      dl, IO_ENA+BM_ENA	; enable IO and bus master
  1950 00000BDA E8D1FFFFFF              	call	pciRegWrite16
  1951                                  
  1952                                  	;call	delay_100ms
  1953                                  
  1954                                  	; 19/05/2024
  1955                                  	; ('PLAYMOD3.ASM', Erdogan Tan, 18/05/2024)
  1956                                  
  1957                                  init_ac97_codec:
  1958                                  	; 18/11/2023
  1959 00000BDF BD28000000              	mov	ebp, 40
  1960                                  	; 29/05/2024
  1961                                  	;mov	ebp, 1000
  1962                                  _initc_1:
  1963                                  	; 29/05/2024
  1964 00000BE4 66BA3000                	mov	dx, GLOB_STS_REG ; 30h
  1965 00000BE8 660315[A6860000]        	add	dx, [NABMBAR]
  1966                                  	;in	eax, dx
  1967 00000BEF B404                    	mov	ah, 4	; read port, dword
  1968 00000BF1 CD34                    	int	34h
  1969                                  
  1970                                  	; 19/05/2024
  1971                                  	;call	delay1_4ms
  1972                                  
  1973 00000BF3 83F8FF                  	cmp	eax, 0FFFFFFFFh ; -1
  1974 00000BF6 750A                    	jne	short _initc_3
  1975                                  _initc_2:
  1976 00000BF8 4D                      	dec	ebp
  1977 00000BF9 7425                    	jz	short _ac97_codec_ready
  1978                                  
  1979                                  	; 31/05/2024
  1980 00000BFB E8B3020000              	call	delay_100ms
  1981 00000C00 EBE2                    	jmp	short _initc_1
  1982                                  _initc_3:
  1983 00000C02 A900030010              	test	eax, CTRL_ST_CREADY
  1984 00000C07 7517                    	jnz	short _ac97_codec_ready
  1985                                  
  1986                                  	; 30/05/2024
  1987 00000C09 803D[60310000]01        	cmp	byte [reset], 1
  1988 00000C10 73E6                    	jnb	short _initc_2
  1989                                  
  1990 00000C12 E893010000              	call	reset_ac97_codec
  1991                                  	; 30/05/2024
  1992 00000C17 C605[60310000]01        	mov	byte [reset], 1
  1993                                  	; 19/05/2024
  1994 00000C1E EBD8                    	jmp	short _initc_2
  1995                                  
  1996                                  _ac97_codec_ready:
  1997 00000C20 668B15[A4860000]        	mov	dx, [NAMBAR]
  1998                                  	;add	dx, 0 ; ac_reg_0 ; reset register
  1999                                  	;out	dx, ax
  2000                                  	; 29/05/2024
  2001 00000C27 53                      	push	ebx
  2002 00000C28 89C3                    	mov	ebx, eax ; bx = data, word
  2003 00000C2A B403                    	mov	ah, 3	; write port, word
  2004 00000C2C CD34                    	int	34h
  2005 00000C2E 5B                      	pop	ebx
  2006                                  
  2007                                  	; 31/05/2024
  2008                                  	; 29/05/2024
  2009                                  	;call	delay_100ms
  2010                                  
  2011                                  	; 19/11/2023
  2012 00000C2F 09ED                    	or	ebp, ebp
  2013 00000C31 7539                    	jnz	short _ac97_codec_init_ok
  2014                                  
  2015 00000C33 31C0                    	xor	eax, eax ; 0
  2016 00000C35 668B15[A4860000]        	mov	dx, [NAMBAR]
  2017 00000C3C 6683C226                	add	dx, CODEC_REG_POWERDOWN
  2018                                  	;out	dx, ax
  2019                                  	; 29/05/2024
  2020 00000C40 53                      	push	ebx
  2021 00000C41 89C3                    	mov	ebx, eax
  2022 00000C43 B403                    	mov	ah, 3	; write port, word
  2023 00000C45 CD34                    	int	34h
  2024 00000C47 5B                      	pop	ebx
  2025                                  
  2026                                  	; 19/11/2023
  2027                                  	; wait for 1 second
  2028                                  	; 19/05/2024
  2029 00000C48 B9E8030000              	mov	ecx, 1000 ; 1000*4*0.25ms = 1s
  2030                                  	;;mov	ecx, 10
  2031                                  	; 30/05/2024
  2032                                  	;mov	ecx, 40
  2033                                  _ac97_codec_rloop:
  2034                                  	;call	delay_100ms
  2035                                  	; 31/05/2024
  2036 00000C4D E870020000              	call	delay1_4ms
  2037                                  
  2038                                  	;mov	dx, [NAMBAR]
  2039                                  	;add	dx, CODEC_REG_POWERDOWN
  2040                                  	;in	ax, dx
  2041                                  	; 29/05/2024
  2042 00000C52 668B15[A4860000]        	mov	dx, [NAMBAR]
  2043 00000C59 6683C226                	add	dx, CODEC_REG_POWERDOWN
  2044                                  	; 31/05/2024
  2045 00000C5D B402                    	mov	ah, 2	; read port, word
  2046 00000C5F CD34                    	int	34h
  2047                                  
  2048                                  	; 31/05/2024
  2049                                  	;call	delay1_4ms
  2050                                  	
  2051 00000C61 6683E00F                	and	ax, 0Fh
  2052 00000C65 3C0F                    	cmp	al, 0Fh
  2053 00000C67 7403                    	je	short _ac97_codec_init_ok
  2054 00000C69 E2E2                    	loop	_ac97_codec_rloop 
  2055                                  
  2056                                  init_ac97_codec_err1:
  2057                                  	;stc	; cf = 1 ; 19/05/2024
  2058                                  init_ac97_codec_err2:
  2059 00000C6B C3                      	retn
  2060                                  
  2061                                  _ac97_codec_init_ok:
  2062 00000C6C E8DA000000              	call 	reset_ac97_controller
  2063                                  
  2064                                  	; 31/05/2024
  2065                                  	; 30/05/2024
  2066                                  	; 19/05/2024
  2067                                  	;call	delay_100ms
  2068                                  
  2069                                  	; 30/05/2024
  2070                                  	;call	delay1_4ms
  2071                                  	;call	delay1_4ms
  2072                                  	;call	delay1_4ms
  2073                                  	;call	delay1_4ms
  2074                                  
  2075                                  	; 01/12/2024
  2076                                  setup_ac97_codec:
  2077                                  	; 12/11/2023
  2078 00000C71 66813D[20860000]80-     	cmp	word [WAVE_SampleRate], 48000
  2078 00000C79 BB                 
  2079 00000C7A 0F849C000000            	je	skip_rate
  2080                                  	
  2081                                  	; 31/05/2024
  2082                                  	; 30/05/2024
  2083                                  	; 29/05/2024
  2084                                  	;cmp	byte [VRA], 0
  2085                                  	;jna	short skip_rate
  2086                                  
  2087                                  	; 11/11/2023
  2088 00000C80 668B15[A4860000]        	mov	dx, [NAMBAR]
  2089 00000C87 6683C22A                	add	dx, CODEC_EXT_AUDIO_CTRL_REG  	; 2Ah
  2090                                  	;in	ax, dx
  2091                                  	; 29/05/2024
  2092 00000C8B B402                    	mov	ah, 2 ; read port, word
  2093 00000C8D CD34                    	int	34h
  2094                                  
  2095                                  	; 30/05/2024
  2096                                  	; 19/05/2024
  2097 00000C8F E82E020000              	call	delay1_4ms
  2098                                  
  2099                                  	;and	al, ~BIT1 ; Clear DRA
  2100                                  	;;;
  2101                                  	; 30/05/2024
  2102 00000C94 24FC                    	and	al, ~(BIT1+BIT0) ; Clear DRA+VRA
  2103                                  	; 01/12/2024 (FASM)
  2104                                  	;and	al, NOT (BIT1+BIT0) ; 0FCh
  2105                                  	;out	dx, ax
  2106                                  	; 31/05/2024
  2107 00000C96 53                      	push	ebx
  2108 00000C97 89C3                    	mov	ebx, eax
  2109 00000C99 668B15[A4860000]        	mov	dx, [NAMBAR]
  2110 00000CA0 6683C22A                	add	dx, CODEC_EXT_AUDIO_CTRL_REG  	; 2Ah
  2111 00000CA4 B403                    	mov	ah, 3 ; write port, word
  2112 00000CA6 CD34                    	int	34h
  2113 00000CA8 5B                      	pop	ebx
  2114                                  
  2115                                  	; 31/05/2024
  2116 00000CA9 E8B1010000              	call	check_vra
  2117                                  
  2118                                  	; 31/05/2024 - temporary (interpolated sample rate test)
  2119                                  	;mov	byte [VRA], 0
  2120                                  
  2121                                  	; 31/05/2024
  2122 00000CAE 803D[01860000]00        	cmp	byte [VRA], 0
  2123 00000CB5 7665                    	jna	short skip_rate
  2124                                  
  2125 00000CB7 668B15[A4860000]        	mov	dx, [NAMBAR]
  2126 00000CBE 6683C22A                	add	dx, CODEC_EXT_AUDIO_CTRL_REG  	; 2Ah
  2127                                  	;in	ax, dx
  2128                                  	; 31/05/2024
  2129 00000CC2 B402                    	mov	ah, 2 ; read port, word
  2130 00000CC4 CD34                    	int	34h
  2131                                  
  2132                                  	;and	al, ~BIT1 ; Clear DRA
  2133                                  	;;;
  2134                                  
  2135 00000CC6 0C01                    	or	al, AC97_EA_VRA ; 1 ; 04/11/2023
  2136                                  	;out	dx, ax	; Enable variable rate audio
  2137                                  	; 29/05/2024
  2138 00000CC8 53                      	push	ebx
  2139 00000CC9 89C3                    	mov	ebx, eax
  2140                                  	;
  2141                                  	; 30/05/2024
  2142 00000CCB 668B15[A4860000]        	mov	dx, [NAMBAR]
  2143 00000CD2 6683C22A                	add	dx, CODEC_EXT_AUDIO_CTRL_REG  	; 2Ah
  2144                                  	;
  2145 00000CD6 B403                    	mov	ah, 3 ; write port, word
  2146 00000CD8 CD34                    	int	34h
  2147 00000CDA 5B                      	pop	ebx
  2148                                  
  2149                                  	;mov	cx, 10
  2150 00000CDB B90A000000              	mov	ecx, 10 ; 30/05/2024
  2151                                  check_vra_loop:
  2152                                  	; 31/05/2024
  2153                                  	;call	delay_100ms
  2154                                  	; 30/05/2024
  2155 00000CE0 E8DD010000              	call	delay1_4ms
  2156                                  
  2157                                  	; 11/11/2023
  2158                                  	;in	ax, dx
  2159                                  	; 29/05/2024
  2160 00000CE5 668B15[A4860000]        	mov	dx, [NAMBAR]
  2161 00000CEC 6683C22A                	add	dx, CODEC_EXT_AUDIO_CTRL_REG  	; 2Ah
  2162 00000CF0 B402                    	mov	ah, 2 ; read port, word
  2163 00000CF2 CD34                    	int	34h
  2164                                  
  2165 00000CF4 A801                    	test	al, AC97_EA_VRA ; 1
  2166 00000CF6 750B                    	jnz	short set_rate
  2167                                  
  2168                                  	; 11/11/2023
  2169 00000CF8 E2E6                    	loop	check_vra_loop
  2170                                  
  2171                                  ;vra_not_supported:	; 19/05/2024
  2172 00000CFA C605[01860000]00        	mov	byte [VRA], 0
  2173 00000D01 EB19                    	jmp	short skip_rate
  2174                                  
  2175                                  set_rate:
  2176                                  	;mov	ax, [sample_rate] ; 17/02/2017 (Erdogan Tan)
  2177                                  	; 01/12/2024
  2178 00000D03 66A1[20860000]          	mov	ax, [WAVE_SampleRate]
  2179                                  
  2180 00000D09 668B15[A4860000]        	mov    	dx, [NAMBAR]
  2181 00000D10 6683C22C                	add    	dx, CODEC_PCM_FRONT_DACRATE_REG	; 2Ch
  2182                                  	;out	dx, ax 	; PCM Front/Center Output Sample Rate
  2183                                  	; 29/05/2024
  2184 00000D14 53                      	push	ebx
  2185 00000D15 89C3                    	mov	ebx, eax  ; bx = data, word
  2186 00000D17 B403                    	mov	ah, 3 ; write port, word
  2187 00000D19 CD34                    	int	34h
  2188 00000D1B 5B                      	pop	ebx
  2189                                  
  2190                                  	; 29/05/2024
  2191                                  	;call	delay_100ms
  2192                                  	; 30/05/2024
  2193                                  	;call	delay1_4ms
  2194                                  
  2195                                  	; 12/11/2023
  2196                                  skip_rate:
  2197 00000D1C 66B80202                	mov	ax, 0202h
  2198 00000D20 668B15[A4860000]          	mov	dx, [NAMBAR]
  2199 00000D27 6683C202                  	add	dx, CODEC_MASTER_VOL_REG ;02h
  2200                                  	;out	dx, ax
  2201                                  	; 29/05/2024
  2202 00000D2B 53                      	push	ebx
  2203 00000D2C 89C3                    	mov	ebx, eax  ; bx = data, word
  2204 00000D2E B403                    	mov	ah, 3 ; write port, word
  2205 00000D30 CD34                    	int	34h
  2206 00000D32 5B                      	pop	ebx
  2207                                  
  2208                                  	; 29/05/2024
  2209                                  	;call	delay1_4ms
  2210                                  	;call	delay1_4ms
  2211                                  	;call	delay1_4ms
  2212                                  	;call	delay1_4ms
  2213                                  
  2214 00000D33 66B80202                	mov	ax, 0202h
  2215 00000D37 668B15[A4860000]          	mov	dx, [NAMBAR]
  2216 00000D3E 6683C218                  	add	dx, CODEC_PCM_OUT_REG		;18h
  2217                                    	;out	dx, ax
  2218                                  	; 29/05/2024
  2219 00000D42 53                      	push	ebx
  2220 00000D43 89C3                    	mov	ebx, eax  ; bx = data, word
  2221 00000D45 B403                    	mov	ah, 3 ; write port, word
  2222 00000D47 CD34                    	int	34h
  2223 00000D49 5B                      	pop	ebx
  2224                                  
  2225                                   	; 29/05/2024
  2226                                  	;call	delay1_4ms
  2227                                  	;call	delay1_4ms
  2228                                  	;call	delay1_4ms
  2229                                  	;call	delay1_4ms
  2230                                  
  2231                                  	; 19/05/2024
  2232                                  	;clc
  2233                                  
  2234 00000D4A C3                              retn
  2235                                  
  2236                                  reset_ac97_controller:
  2237                                  	; 29/05/2024 (TRDOS 386)
  2238                                  	; 19/05/2024
  2239                                  	; 11/11/2023
  2240                                  	; 10/06/2017
  2241                                  	; 29/05/2017
  2242                                  	; 28/05/2017
  2243                                  	; reset AC97 audio controller registers
  2244 00000D4B 31C0                    	xor	eax, eax
  2245 00000D4D 66BA0B00                        mov	dx, PI_CR_REG
  2246 00000D51 660315[A6860000]        	add	dx, [NABMBAR]
  2247                                  	;out	dx, al
  2248                                  	; 29/05/2024
  2249                                  	; al = data, byte
  2250 00000D58 B401                    	mov	ah, 1 ; write port, byte
  2251 00000D5A CD34                    	int	34h
  2252                                  
  2253                                  	; 19/05/2024
  2254                                  	;call	delay1_4ms
  2255                                  
  2256 00000D5C 66BA1B00                        mov     dx, PO_CR_REG
  2257 00000D60 660315[A6860000]        	add	dx, [NABMBAR]
  2258                                  	;out	dx, al
  2259                                  	; 29/05/2024
  2260                                  	; al = data, byte
  2261 00000D67 B401                    	mov	ah, 1 ; write port, byte
  2262 00000D69 CD34                    	int	34h
  2263                                  
  2264                                  	; 19/05/2024
  2265                                  	;call	delay1_4ms
  2266                                  
  2267 00000D6B 66BA2B00                        mov     dx, MC_CR_REG
  2268 00000D6F 660315[A6860000]        	add	dx, [NABMBAR]
  2269                                  	;out	dx, al
  2270                                  	; 29/05/2024
  2271                                  	; al = data, byte
  2272 00000D76 B401                    	mov	ah, 1 ; write port, byte
  2273 00000D78 CD34                    	int	34h
  2274                                  
  2275                                  	; 19/05/2024
  2276                                  	;call	delay1_4ms
  2277                                  
  2278 00000D7A B002                            mov	al, RR
  2279 00000D7C 66BA0B00                        mov	dx, PI_CR_REG
  2280 00000D80 660315[A6860000]        	add	dx, [NABMBAR]
  2281                                  	;out	dx, al
  2282                                  	; 29/05/2024
  2283                                  	; al = data, byte
  2284 00000D87 B401                    	mov	ah, 1 ; write port, byte
  2285 00000D89 CD34                    	int	34h
  2286                                  
  2287                                  	; 19/05/2024
  2288                                  	;call	delay1_4ms
  2289                                  
  2290 00000D8B 66BA1B00                        mov	dx, PO_CR_REG
  2291 00000D8F 660315[A6860000]        	add	dx, [NABMBAR]
  2292                                  	;out	dx, al
  2293                                  	; 29/05/2024
  2294                                  	; al = data, byte
  2295 00000D96 B401                    	mov	ah, 1 ; write port, byte
  2296 00000D98 CD34                    	int	34h
  2297                                  
  2298                                  	; 19/05/2024
  2299                                  	;call	delay1_4ms
  2300                                  
  2301 00000D9A 66BA2B00                        mov	dx, MC_CR_REG
  2302 00000D9E 660315[A6860000]        	add	dx, [NABMBAR]
  2303                                  	;out	dx, al
  2304                                  	; 29/05/2024
  2305                                  	; al = data, byte
  2306 00000DA5 B401                    	mov	ah, 1 ; write port, byte
  2307 00000DA7 CD34                    	int	34h
  2308                                  
  2309                                  	; 19/05/2024
  2310                                  	;call	delay1_4ms
  2311                                  
  2312 00000DA9 C3                      	retn
  2313                                  
  2314                                  reset_ac97_codec:
  2315                                  	; 29/05/2024 (TRDOS 386)
  2316                                  	; 11/11/2023
  2317                                  	; 28/05/2017 - Erdogan Tan (Ref: KolibriOS, intelac97.asm)
  2318 00000DAA 66BA2C00                	mov	dx, GLOB_CNT_REG ; 2Ch
  2319 00000DAE 660315[A6860000]        	add	dx, [NABMBAR]
  2320                                  	;in	eax, dx
  2321                                  	; 29/05/2024
  2322 00000DB5 B404                    	mov	ah, 4 ; read port, dword
  2323 00000DB7 CD34                    	int	34h
  2324                                  
  2325                                  	;test	eax, 2
  2326                                  	; 06/08/2022
  2327 00000DB9 A802                    	test	al, 2
  2328 00000DBB 7407                    	jz	short _r_ac97codec_cold
  2329                                  
  2330 00000DBD E80F000000              	call	warm_ac97codec_reset
  2331 00000DC2 7308                    	jnc	short _r_ac97codec_ok
  2332                                  _r_ac97codec_cold:
  2333 00000DC4 E845000000                      call	cold_ac97codec_reset
  2334 00000DC9 7301                            jnc	short _r_ac97codec_ok
  2335                                  	
  2336                                  	; 16/04/2017
  2337                                          ;xor	eax, eax	; timeout error
  2338                                         	;stc
  2339 00000DCB C3                      	retn
  2340                                  
  2341                                  _r_ac97codec_ok:
  2342 00000DCC 31C0                            xor     eax, eax
  2343                                          ;mov	al, VIA_ACLINK_C00_READY ; 1
  2344 00000DCE FEC0                            inc	al
  2345 00000DD0 C3                      	retn
  2346                                  
  2347                                  warm_ac97codec_reset:
  2348                                  	; 29/05/2024 (TRDOS 386)
  2349                                  	; 11/11/2023
  2350                                  	; 06/08/2022 - TRDOS 386 v2.0.5
  2351                                  	; 28/05/2017 - Erdogan Tan (Ref: KolibriOS, intelac97.asm)
  2352 00000DD1 B806000000              	mov	eax, 6
  2353 00000DD6 66BA2C00                	mov	dx, GLOB_CNT_REG ; 2Ch
  2354 00000DDA 660315[A6860000]        	add	dx, [NABMBAR]
  2355                                  	;out	dx, eax
  2356                                  	; 29/05/2024
  2357 00000DE1 53                      	push	ebx
  2358 00000DE2 89C3                    	mov	ebx, eax  ; ebx = data, dword
  2359 00000DE4 B405                    	mov	ah, 5 ; write port, dword
  2360 00000DE6 CD34                    	int	34h
  2361 00000DE8 5B                      	pop	ebx
  2362                                  
  2363                                  	; 30/05/2024
  2364 00000DE9 B90A000000              	mov	ecx, 10	; total 1s
  2365                                  	; 29/05/2024
  2366                                  	;mov	ecx, 4000
  2367                                  _warm_ac97c_rst_wait:
  2368                                  	; 30/05/2024
  2369 00000DEE E8C0000000              	call	delay_100ms
  2370                                  
  2371 00000DF3 66BA3000                	mov	dx, GLOB_STS_REG ; 30h
  2372 00000DF7 660315[A6860000]        	add	dx, [NABMBAR]
  2373                                  	;in	eax, dx
  2374                                  	; 29/05/2024
  2375 00000DFE B404                    	mov	ah, 4 ; read port, dword
  2376 00000E00 CD34                    	int	34h
  2377                                  
  2378 00000E02 A900030010              	test	eax, CTRL_ST_CREADY
  2379 00000E07 7504                    	jnz	short _warm_ac97c_rst_ok
  2380                                  
  2381 00000E09 49                      	dec	ecx
  2382 00000E0A 75E2                    	jnz	short _warm_ac97c_rst_wait
  2383                                  
  2384                                  _warm_ac97c_rst_fail:
  2385 00000E0C F9                              stc
  2386                                  _warm_ac97c_rst_ok:
  2387 00000E0D C3                      	retn
  2388                                  
  2389                                  cold_ac97codec_reset:
  2390                                  	; 11/11/2023
  2391                                  	; 06/08/2022 - TRDOS 386 v2.0.5
  2392                                  	; 28/05/2017 - Erdogan Tan (Ref: KolibriOS, intelac97.asm)
  2393 00000E0E B802000000                      mov	eax, 2
  2394 00000E13 66BA2C00                	mov	dx, GLOB_CNT_REG ; 2Ch
  2395 00000E17 660315[A6860000]        	add	dx, [NABMBAR]
  2396                                  	;out	dx, eax
  2397                                  	; 29/05/2024
  2398 00000E1E 53                      	push	ebx
  2399 00000E1F 89C3                    	mov	ebx, eax  ; ebx = data, dword
  2400 00000E21 B405                    	mov	ah, 5 ; write port, dword
  2401 00000E23 CD34                    	int	34h
  2402 00000E25 5B                      	pop	ebx
  2403                                  
  2404                                  	; 30/05/2024
  2405 00000E26 E888000000              	call	delay_100ms 	; wait 100 ms
  2406 00000E2B E883000000              	call	delay_100ms 	; wait 100 ms
  2407 00000E30 E87E000000              	call	delay_100ms 	; wait 100 ms
  2408 00000E35 E879000000              	call	delay_100ms 	; wait 100 ms
  2409                                  
  2410                                  	; 30/05/2024
  2411 00000E3A B910000000              	mov	ecx, 16	; total 20*100 ms = 2s
  2412                                  	; 29/05/2024
  2413                                  	;mov	ecx, 16000
  2414                                  _cold_ac97c_rst_wait:
  2415 00000E3F 66BA3000                	mov	dx, GLOB_STS_REG ; 30h
  2416 00000E43 660315[A6860000]        	add	dx, [NABMBAR]
  2417                                  	;in	eax, dx
  2418                                  	; 29/05/2024
  2419 00000E4A B404                    	mov	ah, 4 ; read port, dword
  2420 00000E4C CD34                    	int	34h
  2421                                  
  2422 00000E4E A900030010              	test	eax, CTRL_ST_CREADY
  2423 00000E53 7509                    	jnz	short _cold_ac97c_rst_ok
  2424                                  
  2425                                  	; 30/05/2024
  2426                                  	; 29/05/2024
  2427 00000E55 E859000000              	call	delay_100ms
  2428                                  
  2429 00000E5A 49                      	dec	ecx
  2430 00000E5B 75E2                    	jnz	short _cold_ac97c_rst_wait
  2431                                  
  2432                                  _cold_ac97c_rst_fail:
  2433 00000E5D F9                              stc
  2434                                  _cold_ac97c_rst_ok:
  2435 00000E5E C3                      	retn
  2436                                  
  2437                                  ; 29/12/2024 (vgaplay3.s, NASM)
  2438                                  ; 18/12/2024 (ac97play.s, FASM)
  2439                                  ; 13/11/2024
  2440                                  ; 30/05/2024
  2441                                  %if 1
  2442                                  ;if 1
  2443                                  check_vra:
  2444                                  	; 29/05/2024
  2445 00000E5F C605[01860000]01        	mov	byte [VRA], 1
  2446                                  
  2447                                  	; 29/05/2024 - audio.s (TRDOS 386 Kernel) - 27/05/2024
  2448                                  	; 24/05/2024
  2449                                  	; 23/05/2024
  2450 00000E66 668B15[A4860000]        	mov	dx, [NAMBAR]
  2451 00000E6D 6683C228                	add	dx, CODEC_EXT_AUDIO_REG	; 28h
  2452                                  	;in	ax, dx
  2453                                  	; 29/05/2024
  2454 00000E71 B402                    	mov	ah, 2 ; read port, word
  2455 00000E73 CD34                    	int	34h
  2456                                  
  2457                                  	; 30/05/2024
  2458                                  	; 23/05/2024
  2459 00000E75 E848000000              	call	delay1_4ms
  2460                                  
  2461                                  	; 29/05/2024
  2462 00000E7A A801                    	test	al, BIT0
  2463                                  	;test	al, 1 ; BIT0 ; Variable Rate Audio bit
  2464 00000E7C 7507                    	jnz	short check_vra_ok
  2465                                  
  2466                                  vra_not_supported:
  2467                                  	; 13/11/2023
  2468 00000E7E C605[01860000]00        	mov	byte [VRA], 0
  2469                                  check_vra_ok:
  2470 00000E85 C3                      	retn
  2471                                  ;end if
  2472                                  %endif
  2473                                  
  2474                                  ; --------------------------------------------------------
  2475                                  ; --------------------------------------------------------
  2476                                  
  2477                                  ; 29/12/2024 (vgaplay3.s)
  2478                                  ; 18/12/2024 (ac97play.s)
  2479                                  ;
  2480                                  ; 18/11/2024
  2481                                  ; Ref: TRDOS 386 v2.0.9, audio.s, Erdogan Tan, 06/06/2024
  2482                                  
  2483                                  ac97_stop: 
  2484                                  	; 18/11/2024
  2485 00000E86 C605[F0850000]02        	mov	byte [stopped], 2
  2486                                  
  2487                                  ac97_po_cmd@:
  2488 00000E8D 30C0                    	xor	al, al ; 0
  2489                                  ac97_po_cmd:
  2490 00000E8F 668B15[A6860000]        	mov     dx, [NABMBAR]
  2491 00000E96 6683C21B                        add     dx, PO_CR_REG	; PCM out control register
  2492                                  	;out	dx, al
  2493                                  	; 01/12/2024
  2494 00000E9A B401                    	mov	ah, 1 ; write port, byte
  2495 00000E9C CD34                    	int	34h
  2496 00000E9E C3                      	retn
  2497                                  
  2498                                  ac97_pause:
  2499 00000E9F C605[F0850000]01        	mov	byte [stopped], 1 ; paused
  2500                                  	;mov	al, 0
  2501                                  	;jmp	short ac97_po_cmd
  2502 00000EA6 EBE5                    	jmp	short ac97_po_cmd@
  2503                                  
  2504                                  ac97_play: ; continue to play (after pause)
  2505 00000EA8 C605[F0850000]00        	mov	byte [stopped], 0
  2506 00000EAF B001                    	mov	al, RPBM
  2507 00000EB1 EBDC                    	jmp	short ac97_po_cmd
  2508                                  
  2509                                  ; --------------------------------------------------------
  2510                                  
  2511                                  PORTB		EQU 061h
  2512                                  REFRESH_STATUS	EQU 010h	; Refresh signal status
  2513                                  
  2514                                  	; 29/12/2024 (vgaplay3.s)
  2515                                  	; 18/12/2024
  2516                                  	; 01/12/2024 (ac97play.s)
  2517                                  delay_100ms:
  2518                                  	; 30/05/2024 (playwav7.s)
  2519 00000EB3 51                      	push	ecx
  2520 00000EB4 B990010000              	mov	ecx, 400  ; 400*0.25ms
  2521                                  _delay_x_ms:
  2522 00000EB9 E804000000              	call	delay1_4ms
  2523 00000EBE E2F9                            loop	_delay_x_ms
  2524 00000EC0 59                      	pop	ecx
  2525 00000EC1 C3                      	retn
  2526                                  
  2527                                  delay1_4ms:
  2528                                  	; 30/05/2024 (TRDOS 386)
  2529 00000EC2 50                              push    eax 
  2530 00000EC3 51                              push    ecx
  2531 00000EC4 53                      	push	ebx
  2532 00000EC5 52                      	push	edx
  2533 00000EC6 B910000000                      mov     ecx, 16			; close enough.
  2534                                  	;in	al, PORTB
  2535                                  	; 30/05/2024
  2536 00000ECB 66BA6100                	mov	dx, PORTB
  2537 00000ECF B400                    	mov	ah, 0  ; read port, byte
  2538 00000ED1 CD34                    	int	34h
  2539                                  
  2540 00000ED3 2410                    	and	al, REFRESH_STATUS
  2541                                  	;mov	ah, al			; Start toggle state
  2542 00000ED5 88C3                    	mov	bl, al
  2543 00000ED7 09C9                    	or	ecx, ecx
  2544 00000ED9 7401                    	jz	short _d4ms1
  2545 00000EDB 41                      	inc	ecx			; Throwaway first toggle
  2546                                  _d4ms1:	
  2547                                  	;in	al, PORTB		; Read system control port
  2548                                  	; 30/05/2024
  2549 00000EDC 66BA6100                	mov	dx, PORTB
  2550 00000EE0 B400                    	mov	ah, 0  ; read port, byte
  2551 00000EE2 CD34                    	int	34h
  2552                                  
  2553 00000EE4 2410                    	and	al, REFRESH_STATUS	; Refresh toggles 15.085 microseconds
  2554                                  	;cmp	ah, al
  2555 00000EE6 38C3                    	cmp	bl, al
  2556 00000EE8 74F2                    	je	short _d4ms1		; Wait for state change
  2557                                  
  2558                                  	;mov	ah, al			; Update with new state
  2559 00000EEA 88C3                    	mov	bl, al
  2560 00000EEC 49                      	dec	ecx
  2561 00000EED 75ED                    	jnz	short _d4ms1
  2562                                  
  2563 00000EEF 5A                      	pop	edx
  2564 00000EF0 5B                              pop	ebx
  2565 00000EF1 59                      	pop	ecx
  2566 00000EF2 58                              pop	eax
  2567                                  c4ue_okk:
  2568 00000EF3 C3                              retn
  2569                                  
  2570                                  ; --------------------------------------------------------
  2571                                  
  2572                                  getCurrentIndex:
  2573                                  	; returns AL = current index value
  2574                                  	; 01/12/2024
  2575                                  	; 29/05/2024 (TRDOS 386)
  2576                                  	; 08/11/2023
  2577 00000EF4 668B15[A6860000]        	mov	dx, [NABMBAR]
  2578 00000EFB 6683C214                	add	dx, PO_CIV_REG
  2579                                  	;in	al, dx
  2580                                  	; 29/05/2024
  2581 00000EFF B400                    	mov	ah, 0 ; read port, byte
  2582 00000F01 CD34                    	int	34h
  2583                                  uLVI2:	;	06/11/2023
  2584 00000F03 C3                      	retn
  2585                                  
  2586                                  ; --------------------------------------------------------
  2587                                  
  2588                                  updateLVI:
  2589                                  	; 01/12/2024
  2590                                  	; 29/05/2024 (TRDOS 386)
  2591                                  	; 08/11/2023
  2592                                  	; 07/11/2023
  2593                                  	; 06/11/2023
  2594 00000F04 668B15[A6860000]        	mov	dx, [NABMBAR]
  2595 00000F0B 6683C214                	add	dx, PO_CIV_REG
  2596                                  	; (Current Index Value and Last Valid Index value)
  2597                                  	;in	ax, dx
  2598                                  	; 29/05/2024
  2599 00000F0F B402                    	mov	ah, 2 ; read port, word
  2600 00000F11 CD34                    	int	34h
  2601                                  
  2602 00000F13 38E0                    	cmp	al, ah ; is current index = last index ?
  2603 00000F15 75EC                    	jne	short uLVI2
  2604                                  
  2605                                  	; 08/11/2023	
  2606 00000F17 E8D8FFFFFF              	call	getCurrentIndex
  2607                                   
  2608 00000F1C F605[36860000]01        	test	byte [flags], ENDOFFILE
  2609                                  	;jnz	short uLVI1
  2610 00000F23 7418                    	jz	short uLVI0  ; 08/11/2023
  2611                                  
  2612                                  	; 08/11/2023
  2613 00000F25 50                      	push	eax	; 29/05/2024 (32 bit)
  2614 00000F26 668B15[A6860000]        	mov	dx, [NABMBAR]
  2615 00000F2D 6683C216                	add	dx, PO_SR_REG  ; PCM out status register
  2616                                  	;in	ax, dx
  2617                                  	; 29/05/2024
  2618 00000F31 B402                    	mov	ah, 2 ; read port, word
  2619 00000F33 CD34                    	int	34h
  2620                                  
  2621 00000F35 A803                    	test	al, 3 ; bit 1 = Current Equals Last Valid (CELV)
  2622                                  		      ; (has been processed)
  2623                                  		      ; bit 0 = 1 -> DMA Controller Halted (DCH)
  2624 00000F37 58                      	pop	eax
  2625 00000F38 7407                    	jz	short uLVI1
  2626                                  uLVI3:
  2627 00000F3A 31C0                    	xor	eax, eax
  2628                                  	; zf = 1
  2629 00000F3C C3                      	retn
  2630                                  uLVI0:
  2631                                          ; not at the end of the file yet.
  2632 00000F3D FEC8                    	dec	al
  2633 00000F3F 241F                    	and	al, 1Fh
  2634                                  uLVI1:
  2635                                  	;call	setLastValidIndex
  2636                                  ;uLVI2:
  2637                                  	;retn
  2638                                  
  2639                                  ;input AL = index # to stop on
  2640                                  setLastValidIndex:
  2641                                  	; 01/12/2024
  2642                                  	; 29/05/2024 (TRDOS 386)
  2643                                  	; 08/11/2023
  2644 00000F41 668B15[A6860000]        	mov	dx, [NABMBAR]
  2645 00000F48 6683C215                	add	dx, PO_LVI_REG
  2646                                          ;out	dx, al
  2647                                  	; 29/05/2024
  2648                                  	; al = data, byte
  2649 00000F4C B401                    	mov	ah, 1 ; write port, byte
  2650 00000F4E CD34                    	int	34h
  2651 00000F50 C3                      	retn
  2652                                  
  2653                                  ; --------------------------------------------------------
  2654                                  ; 07/12/2024
  2655                                  ; --------------------------------------------------------
  2656                                  
  2657                                  ; /////
  2658                                  	; 14/12/2024
  2659                                  	; 07/12/2024
  2660                                  	; 01/12/2024
  2661                                  	; 30/05/2024 (ich_wav4.asm, 19/05/2024)
  2662                                  loadFromFile:
  2663                                  	; 07/11/2023
  2664                                  
  2665 00000F51 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2666                                  					; last of the file?
  2667 00000F58 7402                    	jz	short lff_0		; no
  2668 00000F5A F9                      	stc
  2669 00000F5B C3                      	retn
  2670                                  
  2671                                  lff_0:
  2672                                  	; 07/12/2024
  2673                                  	; 26/11/2023 (playwav8.s)
  2674                                  	;mov	edi, audio_buffer
  2675                                  
  2676                                  	; 01/12/2024 (TRDOS 386)
  2677                                  	; edi = audio buffer address
  2678                                  
  2679                                  	; 14/12/2024
  2680                                  	; 01/12/2024
  2681                                  	; 17/11/2024
  2682                                  	;mov	ebx, [filehandle]
  2683                                  	; 02/12/2024
  2684                                  	;mov	edx, [loadsize] 
  2685                                  
  2686                                  	; 17/11/2024
  2687 00000F5C 803D[9A860000]00        	cmp	byte [fbs_shift], 0
  2688 00000F63 7677                    	jna	short lff_1 ; stereo, 16 bit
  2689                                  
  2690                                  lff_2:
  2691                                  	; 01/12/2024
  2692 00000F65 BE[00A00200]            	mov	esi, temp_buffer 
  2693                                  	; 14/12/2024
  2694                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000F6A 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000F70 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000F72 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000F78 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00000F7D CD40                <1>  int 40h
  2695 00000F7F 0F8289000000            	jc	lff_4 ; error !
  2696                                  
  2697                                  	; 01/12/2024
  2698                                  	; 14/11/2024
  2699 00000F85 A3[BC860000]            	mov	[count], eax
  2700                                  
  2701                                  	; 01/12/2024
  2702 00000F8A 21C0                    	and	eax, eax
  2703                                  	;jz	short lff_3
  2704                                  	; 14/12/2024
  2705 00000F8C 0F8485000000            	jz	lff_10
  2706                                  
  2707 00000F92 8A1D[9A860000]          	mov	bl, [fbs_shift]
  2708                                  
  2709                                  	; 14/12/2024
  2710 00000F98 89FA                    	mov	edx, edi ; audio buffer start address
  2711                                  
  2712                                  	; 01/12/2024
  2713 00000F9A 89C1                    	mov	ecx, eax
  2714 00000F9C 803D[2A860000]08        	cmp	byte [WAVE_BitsPerSample], 8 ; bits per sample (8 or 16)
  2715 00000FA3 751E                    	jne	short lff_7 ; 16 bit samples
  2716                                  	; 8 bit samples
  2717 00000FA5 FECB                    	dec	bl  ; shift count, 1 = stereo, 2 = mono
  2718 00000FA7 740E                    	jz	short lff_6 ; 8 bit, stereo
  2719                                  	; 01/12/2024 (32bit registers)
  2720                                  lff_5:
  2721                                  	; mono & 8 bit
  2722 00000FA9 AC                      	lodsb
  2723 00000FAA 2C80                    	sub	al, 80h ; 08/11/2023
  2724 00000FAC C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
  2725 00000FAF 66AB                    	stosw	; left channel
  2726 00000FB1 66AB                    	stosw	; right channel
  2727 00000FB3 E2F4                    	loop	lff_5
  2728 00000FB5 EB16                    	jmp	short lff_9
  2729                                  lff_6:
  2730                                  	; stereo & 8 bit
  2731 00000FB7 AC                      	lodsb
  2732 00000FB8 2C80                    	sub	al, 80h ; 08/11/2023
  2733 00000FBA C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
  2734 00000FBD 66AB                    	stosw
  2735 00000FBF E2F6                    	loop	lff_6
  2736 00000FC1 EB0A                    	jmp	short lff_9
  2737                                  lff_7:
  2738 00000FC3 D1E9                    	shr	ecx, 1 ; word count
  2739                                  lff_8:
  2740 00000FC5 66AD                    	lodsw
  2741 00000FC7 66AB                    	stosw	; left channel
  2742 00000FC9 66AB                    	stosw	; right channel
  2743 00000FCB E2F8                    	loop	lff_8
  2744                                  lff_9:
  2745                                  	; 14/12/2024
  2746 00000FCD 89F8                    	mov	eax, edi
  2747 00000FCF 8B0D[B0860000]          	mov	ecx, [buffersize] 
  2748 00000FD5 01D1                    	add	ecx, edx ; + buffer start address
  2749 00000FD7 39C8                    	cmp	eax, ecx	
  2750 00000FD9 7225                    	jb	short lff_3
  2751 00000FDB C3                      	retn
  2752                                  	
  2753                                  lff_1:  
  2754                                  	; 07/12/2024
  2755                                  	; 01/12/2024
  2756                                  	;sys 	_read, [filehandle], esi, [loadsize] ; edx
  2757                                  	; 14/12/2024
  2758                                  	sys 	_read, [filehandle], edi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000FDC 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000FE2 89F9                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000FE4 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000FEA B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00000FEF CD40                <1>  int 40h
  2759                                  	; 07/11/2023
  2760 00000FF1 721B                    	jc	short lff_4 ; error !
  2761                                  
  2762                                  	; 01/12/2024
  2763                                  	; 14/11/2024
  2764 00000FF3 A3[BC860000]            	mov	[count], eax
  2765                                  
  2766                                  	; 02/12/2024
  2767 00000FF8 39D0                    	cmp	eax, edx ; cmp eax, [loadsize]	
  2768 00000FFA 7411                    	je	short endLFF
  2769                                  	; edi = buffer (start) address
  2770 00000FFC 01C7                    	add	edi, eax
  2771 00000FFE 89D1                    	mov	ecx, edx
  2772                                  lff_3:
  2773                                  	;call	padfill			; blank pad the remainder
  2774                                  	; 21/12/2024
  2775                                  padfill:
  2776                                  	; 14/12/2024
  2777                                  	; 01/12/2024 (TRDOS 386, 32bit registers)
  2778                                  	; 17/11/2024
  2779                                  	;   di = offset (to be filled with ZEROs)
  2780                                  	;   bp = buffer segment
  2781                                  	;   ax = di = number of bytes loaded
  2782                                  	;   cx = buffer size (> loaded bytes)	
  2783                                  	; 07/11/2023
  2784                                  	; 06/11/2023
  2785                                  	; 17/02/2017
  2786                                  	; 01/12/2024
  2787 00001000 29C1                    	sub	ecx, eax
  2788                                  	; 01/12/2024
  2789                                  	; 25/11/2024
  2790 00001002 31C0                    	xor	eax, eax
  2791                                  	; 14/12/2024
  2792 00001004 F3AA                    	rep	stosb
  2793                                  	; 21/12/2024
  2794                                  	;retn
  2795                                  	; ----------
  2796                                          ;clc				; don't exit with CY yet.
  2797 00001006 800D[36860000]01                or	byte [flags], ENDOFFILE	; end of file flag
  2798                                  endLFF:
  2799 0000100D C3                              retn
  2800                                  lff_4:
  2801                                  	; 08/11/2023
  2802 0000100E B021                    	mov	al, '!'  ; error
  2803 00001010 E877F9FFFF              	call	tL0
  2804                                  
  2805                                  	; 01/12/2024
  2806 00001015 31C0                    	xor	eax, eax
  2807                                  lff_10:
  2808                                  	; 14/12/2024
  2809 00001017 8B0D[B0860000]          	mov	ecx, [buffersize]
  2810 0000101D EBE1                    	jmp	short lff_3
  2811                                  
  2812                                  ; /////
  2813                                  
  2814                                  ; --------------------------------------------------------
  2815                                  ; --------------------------------------------------------
  2816                                  	
  2817                                  write_audio_dev_info:
  2818                                  	; 30/05/2024
  2819                                       	;sys_msg msgAudioCardInfo, 0Fh
  2820                                  	; 01/12/2024
  2821                                  	sys 	_msg, msgAudioCardInfo, 255, 0Fh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000101F BB[61310000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001024 B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001029 BA0F000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000102E B823000000          <1>  mov eax, %1
   103                              <1> 
   104 00001033 CD40                <1>  int 40h
  2822 00001035 C3                      	retn
  2823                                  
  2824                                  ; --------------------------------------------------------
  2825                                  
  2826                                  write_ac97_pci_dev_info:
  2827                                  	; 19/11/2024
  2828                                  	; 30/05/2024
  2829                                  	; 06/06/2017
  2830                                  	; 03/06/2017
  2831                                  	; BUS/DEV/FN
  2832                                  	;	00000000BBBBBBBBDDDDDFFF00000000
  2833                                  	; DEV/VENDOR
  2834                                  	;	DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV
  2835                                  
  2836 00001036 A1[A0860000]            	mov	eax, [dev_vendor]
  2837 0000103B 31DB                    	xor	ebx, ebx
  2838 0000103D 88C3                    	mov	bl, al
  2839 0000103F 88DA                    	mov	dl, bl
  2840 00001041 80E30F                  	and	bl, 0Fh
  2841 00001044 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2842 0000104A A2[CF320000]            	mov	[msgVendorId+3], al
  2843 0000104F 88D3                    	mov	bl, dl
  2844 00001051 C0EB04                  	shr	bl, 4
  2845 00001054 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2846 0000105A A2[CE320000]            	mov	[msgVendorId+2], al
  2847 0000105F 88E3                    	mov	bl, ah
  2848 00001061 88DA                    	mov	dl, bl
  2849 00001063 80E30F                  	and	bl, 0Fh
  2850 00001066 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2851 0000106C A2[CD320000]            	mov	[msgVendorId+1], al
  2852 00001071 88D3                    	mov	bl, dl
  2853 00001073 C0EB04                  	shr	bl, 4
  2854 00001076 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2855 0000107C A2[CC320000]            	mov	[msgVendorId], al
  2856 00001081 C1E810                  	shr	eax, 16
  2857 00001084 88C3                    	mov	bl, al
  2858 00001086 88DA                    	mov	dl, bl
  2859 00001088 80E30F                  	and	bl, 0Fh
  2860 0000108B 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2861 00001091 A2[E0320000]            	mov	[msgDevId+3], al
  2862 00001096 88D3                    	mov	bl, dl
  2863 00001098 C0EB04                  	shr	bl, 4
  2864 0000109B 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2865 000010A1 A2[DF320000]            	mov	[msgDevId+2], al
  2866 000010A6 88E3                    	mov	bl, ah
  2867 000010A8 88DA                    	mov	dl, bl
  2868 000010AA 80E30F                  	and	bl, 0Fh
  2869 000010AD 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2870 000010B3 A2[DE320000]            	mov	[msgDevId+1], al
  2871 000010B8 88D3                    	mov	bl, dl
  2872 000010BA C0EB04                  	shr	bl, 4
  2873 000010BD 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2874 000010C3 A2[DD320000]            	mov	[msgDevId], al
  2875                                  
  2876 000010C8 A1[9C860000]            	mov	eax, [bus_dev_fn]
  2877 000010CD C1E808                  	shr	eax, 8
  2878 000010D0 88C3                    	mov	bl, al
  2879 000010D2 88DA                    	mov	dl, bl
  2880 000010D4 80E307                  	and	bl, 7 ; bit 0,1,2
  2881 000010D7 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2882 000010DD A2[05330000]            	mov	[msgFncNo+1], al
  2883 000010E2 88D3                    	mov	bl, dl
  2884 000010E4 C0EB03                  	shr	bl, 3
  2885 000010E7 88DA                    	mov	dl, bl
  2886 000010E9 80E30F                  	and	bl, 0Fh
  2887 000010EC 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2888 000010F2 A2[F7320000]            	mov	[msgDevNo+1], al
  2889 000010F7 88D3                    	mov	bl, dl
  2890 000010F9 C0EB04                  	shr	bl, 4
  2891 000010FC 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2892 00001102 A2[F6320000]            	mov	[msgDevNo], al
  2893 00001107 88E3                    	mov	bl, ah
  2894 00001109 88DA                    	mov	dl, bl
  2895 0000110B 80E30F                  	and	bl, 0Fh
  2896 0000110E 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2897 00001114 A2[EB320000]            	mov	[msgBusNo+1], al
  2898 00001119 88D3                    	mov	bl, dl
  2899 0000111B C0EB04                  	shr	bl, 4
  2900 0000111E 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2901 00001124 A2[EA320000]            	mov	[msgBusNo], al
  2902                                  
  2903                                  	;mov	ax, [ac97_NamBar]
  2904 00001129 66A1[A4860000]          	mov	ax, [NAMBAR]
  2905 0000112F 88C3                    	mov	bl, al
  2906 00001131 88DA                    	mov	dl, bl
  2907 00001133 80E30F                  	and	bl, 0Fh
  2908 00001136 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2909 0000113C A2[15330000]            	mov	[msgNamBar+3], al
  2910 00001141 88D3                    	mov	bl, dl
  2911 00001143 C0EB04                  	shr	bl, 4
  2912 00001146 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2913 0000114C A2[14330000]            	mov	[msgNamBar+2], al
  2914 00001151 88E3                    	mov	bl, ah
  2915 00001153 88DA                    	mov	dl, bl
  2916 00001155 80E30F                  	and	bl, 0Fh
  2917 00001158 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2918 0000115E A2[13330000]            	mov	[msgNamBar+1], al
  2919 00001163 88D3                    	mov	bl, dl
  2920 00001165 C0EB04                  	shr	bl, 4
  2921 00001168 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2922 0000116E A2[12330000]            	mov	[msgNamBar], al
  2923                                  
  2924                                  	;mov	ax, [ac97_NabmBar]
  2925 00001173 66A1[A6860000]          	mov	ax, [NABMBAR]
  2926 00001179 88C3                    	mov	bl, al
  2927 0000117B 88DA                    	mov	dl, bl
  2928 0000117D 80E30F                  	and	bl, 0Fh
  2929 00001180 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2930 00001186 A2[25330000]            	mov	[msgNabmBar+3], al
  2931 0000118B 88D3                    	mov	bl, dl
  2932 0000118D C0EB04                  	shr	bl, 4
  2933 00001190 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2934 00001196 A2[24330000]            	mov	[msgNabmBar+2], al
  2935 0000119B 88E3                    	mov	bl, ah
  2936 0000119D 88DA                    	mov	dl, bl
  2937 0000119F 80E30F                  	and	bl, 0Fh
  2938 000011A2 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2939 000011A8 A2[23330000]            	mov	[msgNabmBar+1], al
  2940 000011AD 88D3                    	mov	bl, dl
  2941 000011AF C0EB04                  	shr	bl, 4
  2942 000011B2 8A83[88320000]          	mov	al, [hex_chars+ebx]
  2943 000011B8 A2[22330000]            	mov	[msgNabmBar], al
  2944                                  
  2945 000011BD 31C0                    	xor	eax, eax
  2946 000011BF A0[37860000]            	mov	al, [ac97_int_ln_reg]
  2947 000011C4 B10A                    	mov	cl, 10
  2948 000011C6 F6F1                    	div	cl
  2949                                  	; 23/11/2024
  2950                                  	;add	[msgIRQ], ax
  2951 000011C8 66053030                	add	ax, 3030h
  2952 000011CC 66A3[2E330000]          	mov	[msgIRQ], ax
  2953                                  	;and	al, al
  2954 000011D2 3C30                    	cmp	al, 30h
  2955 000011D4 750D                    	jnz	short _w_ac97imsg_
  2956 000011D6 A0[2F330000]            	mov	al, byte [msgIRQ+1]
  2957 000011DB B420                    	mov	ah, ' '
  2958 000011DD 66A3[2E330000]          	mov	[msgIRQ], ax
  2959                                  _w_ac97imsg_:
  2960                                  	; 19/11/2024
  2961 000011E3 E85E1D0000              	call 	clear_window
  2962 000011E8 B60D                    	mov	dh, 13
  2963 000011EA B200                    	mov	dl, 0
  2964 000011EC E8701A0000              	call	setCursorPosition
  2965                                  	;;;
  2966                                  	; 21/12/2024
  2967 000011F1 BD[99320000]            	mov	ebp, msgAC97Info ; message
  2968                                  	; 22/12/2024
  2969                                  	;mov	cl, 07h ; color 
  2970 000011F6 E81F000000              	call	sys_gmsg
  2971                                  	;
  2972                                  	; 30/05/2024
  2973                                  write_VRA_info:
  2974                                  	; 21/12/2024
  2975 000011FB BD[33330000]            	mov	ebp, msgVRAheader ; message
  2976                                  	;mov	cl, 07h ; color 
  2977 00001200 E815000000              	call	sys_gmsg
  2978                                  	;
  2979 00001205 803D[01860000]00        	cmp	byte [VRA], 0
  2980 0000120C 7607                    	jna	short _w_VRAi_no
  2981                                  _w_VRAi_yes:
  2982 0000120E BD[42330000]            	mov	ebp, msgVRAyes
  2983 00001213 EB05                    	jmp	short _w_VRAi_yn_msg
  2984                                  _w_VRAi_no:
  2985 00001215 BD[48330000]            	mov	ebp, msgVRAno
  2986                                  _w_VRAi_yn_msg:
  2987                                  	;mov	cl, 07h ; color 
  2988                                  	;call	sys_msg
  2989                                  	;retn
  2990                                  	;jmp	short sys_gmsg
  2991                                  	;;;
  2992                                  ; --------------------------------------------------------
  2993                                  
  2994                                  	; 22/12/2024
  2995                                  	;;;
  2996                                  	; 21/12/2024
  2997                                  	; (write message in VGA/VESA-VBE mode)
  2998                                  sys_gmsg:
  2999 0000121A 8A4500                  	mov	al, [ebp]
  3000 0000121D 20C0                    	and	al, al
  3001 0000121F 7458                    	jz	short sys_gmsg_ok
  3002 00001221 3C20                    	cmp	al, 20h
  3003 00001223 731E                    	jnb	short sys_gmsg_3
  3004 00001225 3C0D                    	cmp	al, CR ; 13
  3005 00001227 750C                    	jne	short sys_gmsg_2
  3006                                  	; carriege return, move cursor to column 0
  3007 00001229 66C705[E07B0000]00-     	mov	word [screenpos], 0
  3007 00001231 00                 
  3008                                  sys_gmsg_1:
  3009 00001232 45                      	inc	ebp
  3010 00001233 EBE5                    	jmp	short sys_gmsg
  3011                                  sys_gmsg_2:
  3012 00001235 3C0A                    	cmp	al, LF ; 10
  3013 00001237 7540                    	jne	short sys_gmsg_ok ; 22/12/2024
  3014                                  	; line feed, move cursor to next row
  3015 00001239 668305[E27B0000]10      	add	word [screenpos+2], 16
  3016 00001241 EBEF                    	jmp	short sys_gmsg_1
  3017                                  sys_gmsg_3:
  3018 00001243 8B35[E07B0000]          	mov	esi, [screenpos]
  3019                                  		; hw = (cursor) row
  3020                                  		; si = (cursor) column
  3021 00001249 B907000000              	mov	ecx, 07h ; gray (light)
  3022 0000124E E8C71B0000              	call	write_character
  3023 00001253 83C608                  	add	esi, 8
  3024                                  	;;;
  3025 00001256 6681FE8002              	cmp	si, 640
  3026 0000125B 7213                    	jb	short sys_gmsg_5
  3027 0000125D C1EE10                  	shr	esi, 16
  3028 00001260 6683C610                	add	si, 16
  3029 00001264 6681FEE001              	cmp	si, 480
  3030 00001269 7202                    	jb	short sys_gmsg_4
  3031 0000126B 31F6                    	xor	esi, esi
  3032                                  sys_gmsg_4:
  3033 0000126D C1E610                  	shl	esi, 16
  3034                                  	;;;
  3035                                  sys_gmsg_5:
  3036 00001270 8935[E07B0000]          	mov	[screenpos], esi
  3037 00001276 45                      	inc	ebp
  3038 00001277 EBA1                    	jmp	short sys_gmsg
  3039                                  sys_gmsg_ok:
  3040 00001279 C3                      	retn
  3041                                  	;;;
  3042                                  
  3043                                  ; --------------------------------------------------------
  3044                                  
  3045                                  ; 05/02/2025 - cgaplay.s - cgaplay1.s - vgaplay3.s
  3046                                  ; 02/02/2025 - playwav9.s - ac97play.s - dplaywav.s - dplayw2.s
  3047                                  ; 29/12/2024 - vgaplay3.s
  3048                                  ; 18/12/2024
  3049                                  ; 07/12/2024 - playwav9.s
  3050                                  ; 01/12/2024 - ac97play.s
  3051                                  ; 29/05/2024
  3052                                  ; 26/11/2023
  3053                                  ; 25/11/2023 - playwav6.s (32 bit registers, TRDOS 386 adaption)
  3054                                  ; 15/11/2023 - PLAYWAV5.COM, ich_wav5.asm
  3055                                  ; 14/11/2023
  3056                                  ; 13/11/2023 - Erdogan Tan - (VRA, sample rate conversion)
  3057                                  ; --------------------------------------------------------
  3058                                  
  3059                                  ;;Note:	At the end of every buffer load,
  3060                                  ;;	during buffer switch/swap, there will be discontinuity
  3061                                  ;;	between the last converted sample and the 1st sample
  3062                                  ;;	of the next buffer.
  3063                                  ;;	(like as a dot noises vaguely between normal sound samples)
  3064                                  ;;	-To avoid this defect, the 1st sample of
  3065                                  ;;	the next buffer may be read from the wav file but
  3066                                  ;;	the file pointer would need to be set to 1 sample back
  3067                                  ;;	again via seek system call. Time comsumption problem! -
  3068                                  ;;
  3069                                  ;;	Erdogan Tan - 15/11/2023
  3070                                  ;;
  3071                                  ;;	((If entire wav data would be loaded at once.. conversion
  3072                                  ;;	defect/noise would disappear.. but for DOS, to keep
  3073                                  ;;	64KB buffer limit is important also it is important
  3074                                  ;;	for running under 1MB barrier without HIMEM.SYS or DPMI.
  3075                                  ;;	I have tested this program by using 2-30MB wav files.))
  3076                                  ;;
  3077                                  ;;	Test Computer:	ASUS desktop/mainboard, M2N4-SLI, 2010.
  3078                                  ;;			AMD Athlon 64 X2 2200 MHZ CPU.
  3079                                  ;;		       	NFORCE4 (CK804) AC97 audio hardware.
  3080                                  ;;			Realtek ALC850 codec.
  3081                                  ;;		       	Retro DOS v4.2 (MSDOS 6.22) operating system.
  3082                                  
  3083                                  load_8khz_mono_8_bit:
  3084                                  	; 02/02/2025
  3085                                  	; 15/11/2023
  3086                                  	; 14/11/2023
  3087                                  	; 13/11/2023
  3088 0000127A F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3089                                  					; last of the file?
  3090 00001281 7402                    	jz	short lff8m_0		; no
  3091 00001283 F9                      	stc
  3092 00001284 C3                      	retn
  3093                                  
  3094                                  lff8m_0:
  3095                                  	; 01/12/2024
  3096                                  	; edi = audio buffer address
  3097 00001285 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3098                                          ;mov	edx, [loadsize]
  3099                                  
  3100                                  	; esi = buffer address
  3101                                  	;; edx = buffer size
  3102                                  
  3103                                  	; load file into memory
  3104                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000128A 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001290 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001292 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001298 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 0000129D CD40                <1>  int 40h
  3105 0000129F 7305                    	jnc	short lff8m_6
  3106 000012A1 E9AF000000              	jmp	lff8m_5  ; error !
  3107                                  
  3108                                  lff8m_6:
  3109                                  	; 01/12/2024
  3110 000012A6 A3[BC860000]            	mov	[count], eax
  3111                                  	;;;
  3112                                  	; 29/05/2024
  3113                                  	;mov	edi, [audio_buffer]
  3114                                  	;;;
  3115 000012AB 21C0                    	and	eax, eax
  3116 000012AD 0F8499000000            	jz	lff8_eof
  3117                                  
  3118 000012B3 89C1                    	mov	ecx, eax		; byte count
  3119                                  lff8m_1:
  3120 000012B5 AC                      	lodsb
  3121 000012B6 A2[F3290000]            	mov	[previous_val], al
  3122 000012BB 2C80                    	sub	al, 80h
  3123 000012BD 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3124 000012C1 66AB                    	stosw		; original sample (left channel)
  3125 000012C3 66AB                    	stosw		; original sample (right channel)
  3126                                  	; 02/02/2025
  3127                                  	;xor	eax, eax
  3128 000012C5 8A06                    	mov	al, [esi]
  3129 000012C7 49                      	dec	ecx
  3130 000012C8 7502                    	jnz	short lff8m_2
  3131 000012CA B080                    	mov	al, 80h
  3132                                  lff8m_2:
  3133                                  	;mov	[next_val], ax
  3134 000012CC 88C7                    	mov	bh, al	; [next_val]
  3135 000012CE 8A25[F3290000]          	mov	ah, [previous_val]
  3136 000012D4 00E0                    	add	al, ah	; [previous_val]
  3137 000012D6 D0D8                    	rcr	al, 1
  3138 000012D8 88C2                    	mov	dl, al	; this is interpolated middle (3th) sample
  3139 000012DA 00E0                    	add	al, ah	; [previous_val]
  3140 000012DC D0D8                    	rcr	al, 1	
  3141 000012DE 88C3                    	mov	bl, al 	; this is temporary interpolation value
  3142 000012E0 00E0                    	add	al, ah	; [previous_val]
  3143 000012E2 D0D8                    	rcr	al, 1
  3144 000012E4 2C80                    	sub	al, 80h
  3145 000012E6 66C1E008                	shl	ax, 8	
  3146 000012EA 66AB                    	stosw		; this is 1st interpolated sample (L)
  3147 000012EC 66AB                    	stosw		; this is 1st interpolated sample (R)
  3148 000012EE 88D8                    	mov	al, bl
  3149 000012F0 00D0                    	add	al, dl
  3150 000012F2 D0D8                    	rcr	al, 1
  3151 000012F4 2C80                    	sub	al, 80h
  3152 000012F6 66C1E008                	shl	ax, 8
  3153 000012FA 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3154 000012FC 66AB                    	stosw		; this is 2nd interpolated sample (R)
  3155 000012FE 88D0                    	mov	al, dl
  3156 00001300 2C80                    	sub	al, 80h
  3157 00001302 66C1E008                	shl	ax, 8
  3158 00001306 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  3159 00001308 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  3160                                  	;mov	al, [next_val]
  3161 0000130A 88F8                    	mov	al, bh
  3162 0000130C 00D0                    	add	al, dl
  3163 0000130E D0D8                    	rcr	al, 1
  3164 00001310 88C3                    	mov	bl, al	; this is temporary interpolation value
  3165 00001312 00D0                    	add	al, dl
  3166 00001314 D0D8                    	rcr	al, 1
  3167 00001316 2C80                    	sub	al, 80h
  3168 00001318 66C1E008                	shl	ax, 8
  3169 0000131C 66AB                    	stosw		; this is 4th interpolated sample (L)
  3170 0000131E 66AB                    	stosw		; this is 4th interpolated sample (R)
  3171                                  	;mov	al, [next_val]
  3172 00001320 88F8                    	mov	al, bh
  3173 00001322 00D8                    	add	al, bl
  3174 00001324 D0D8                    	rcr	al, 1
  3175 00001326 2C80                    	sub	al, 80h
  3176 00001328 66C1E008                	shl	ax, 8
  3177 0000132C 66AB                    	stosw		; this is 5th interpolated sample (L)
  3178 0000132E 66AB                    	stosw		; this is 5th interpolated sample (R)
  3179                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3180 00001330 09C9                    	or	ecx, ecx
  3181 00001332 7581                    	jnz	short lff8m_1
  3182                                  
  3183                                  	; --------------
  3184                                  
  3185                                  lff8s_3:
  3186                                  lff8m_3:
  3187                                  lff8s2_3:
  3188                                  lff8m2_3:
  3189                                  lff16s_3:
  3190                                  lff16m_3:
  3191                                  lff16s2_3:
  3192                                  lff16m2_3:
  3193                                  lff24_3:
  3194                                  lff32_3:
  3195                                  lff44_3:
  3196                                  lff22_3:
  3197                                  lff11_3:
  3198                                  lff12_3: 	; 02/02/2025
  3199                                  	; 08/12/2024 (BugFix)
  3200                                  	; 31/05/2024 (BugFix)
  3201 00001334 8B0D[B0860000]          	mov	ecx, [buffersize] ; 16 bit (48 kHZ, stereo) sample size
  3202                                  	;shl	ecx, 1	; byte count ; Bug !
  3203                                  	; 08/12/2024
  3204                                  	;add	ecx, audio_buffer
  3205                                  	; 05/02/2025
  3206 0000133A 030D[EC7B0000]          	add	ecx, [audio_buffer]
  3207 00001340 29F9                    	sub	ecx, edi
  3208 00001342 7607                    	jna	short lff8m_4
  3209                                  	;inc	ecx
  3210 00001344 C1E902                  	shr	ecx, 2
  3211 00001347 31C0                    	xor	eax, eax ; fill (remain part of) buffer with zeros
  3212 00001349 F3AB                    	rep	stosd
  3213                                  lff8m_4:
  3214                                  	; 31/05/2024 (BugFix)
  3215                                  	; cf=1 ; Bug !
  3216                                  	; 08/12/2024
  3217                                  	;clc
  3218 0000134B C3                      	retn
  3219                                  
  3220                                  lff8_eof:
  3221                                  lff16_eof:
  3222                                  lff24_eof:
  3223                                  lff32_eof:
  3224                                  lff44_eof:
  3225                                  lff22_eof:
  3226                                  lff11_eof:
  3227                                  lff12_eof:	; 02/02/2025
  3228                                  	; 15/11/2023
  3229 0000134C C605[36860000]01        	mov	byte [flags], ENDOFFILE
  3230 00001353 EBDF                    	jmp	short lff8m_3
  3231                                  
  3232                                  lff8s_5:
  3233                                  lff8m_5:
  3234                                  lff8s2_5:
  3235                                  lff8m2_5:
  3236                                  lff16s_5:
  3237                                  lff16m_5:
  3238                                  lff16s2_5:
  3239                                  lff16m2_5:
  3240                                  lff24_5:
  3241                                  lff32_5:
  3242                                  lff44_5:
  3243                                  lff22_5:
  3244                                  lff11_5:
  3245                                  lff12_5:	; 02/02/2025
  3246 00001355 B021                    	mov	al, '!'  ; error
  3247 00001357 E830F6FFFF              	call	tL0
  3248                                  	
  3249                                  	;jmp	short lff8m_3
  3250                                  	; 15/11/2023
  3251 0000135C EBEE                    	jmp	lff8_eof
  3252                                  
  3253                                  	; --------------
  3254                                  
  3255                                  load_8khz_stereo_8_bit:
  3256                                  	; 02/02/2025
  3257                                  	; 15/11/2023
  3258                                  	; 14/11/2023
  3259                                  	; 13/11/2023
  3260 0000135E F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3261                                  					; last of the file?
  3262 00001365 7402                    	jz	short lff8s_0		; no
  3263 00001367 F9                      	stc
  3264 00001368 C3                      	retn
  3265                                  
  3266                                  lff8s_0:
  3267                                  	; 01/12/2024
  3268                                  	; edi = audio buffer address
  3269 00001369 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3270                                          ;mov	edx, [loadsize]
  3271                                  
  3272                                  	; esi = buffer address
  3273                                  	;; edx = buffer size
  3274                                  
  3275                                  	; load file into memory
  3276                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000136E 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001374 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001376 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000137C B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001381 CD40                <1>  int 40h
  3277 00001383 72D0                    	jc	short lff8s_5 ; error !
  3278                                  
  3279                                  	; 01/12/2024
  3280 00001385 A3[BC860000]            	mov	[count], eax
  3281                                  	;;;
  3282                                  	; 29/05/2024
  3283                                  	;mov	edi, [audio_buffer]
  3284                                  	;;;
  3285 0000138A D1E8                    	shr	eax, 1
  3286 0000138C 74BE                    	jz	short lff8_eof
  3287                                  
  3288 0000138E 89C1                    	mov	ecx, eax	; word count
  3289                                  lff8s_1:
  3290 00001390 AC                      	lodsb
  3291 00001391 A2[F3290000]            	mov	[previous_val_l], al
  3292 00001396 2C80                    	sub	al, 80h
  3293 00001398 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3294 0000139C 66AB                    	stosw		; original sample (L)
  3295 0000139E AC                      	lodsb
  3296 0000139F A2[F5290000]            	mov	[previous_val_r], al
  3297 000013A4 2C80                    	sub	al, 80h
  3298 000013A6 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3299 000013AA 66AB                    	stosw		; original sample (R)
  3300                                  
  3301                                  	;xor	eax, eax
  3302                                  	; 02/02/2025
  3303 000013AC 668B06                  	mov	ax, [esi]
  3304 000013AF 49                      	dec	ecx
  3305 000013B0 7504                    	jnz	short lff8s_2
  3306                                  		; convert 8 bit sample to 16 bit sample
  3307 000013B2 66B88080                	mov	ax, 8080h
  3308                                  lff8s_2:
  3309 000013B6 A2[F7290000]            	mov	[next_val_l], al
  3310 000013BB 8825[F9290000]          	mov	[next_val_r], ah
  3311 000013C1 8A25[F3290000]          	mov	ah, [previous_val_l]
  3312 000013C7 00E0                    	add	al, ah
  3313 000013C9 D0D8                    	rcr	al, 1
  3314 000013CB 88C2                    	mov	dl, al	; this is interpolated middle (3th) sample (L)
  3315 000013CD 00E0                    	add	al, ah
  3316 000013CF D0D8                    	rcr	al, 1
  3317 000013D1 88C3                    	mov	bl, al	; this is temporary interpolation value (L)
  3318 000013D3 00E0                    	add	al, ah
  3319 000013D5 D0D8                    	rcr	al, 1
  3320 000013D7 2C80                    	sub	al, 80h
  3321 000013D9 66C1E008                	shl	ax, 8
  3322 000013DD 66AB                    	stosw		; this is 1st interpolated sample (L)
  3323 000013DF A0[F9290000]            	mov	al, [next_val_r]
  3324 000013E4 8A25[F5290000]          	mov	ah, [previous_val_r]
  3325 000013EA 00E0                    	add	al, ah
  3326 000013EC D0D8                    	rcr	al, 1
  3327 000013EE 88C6                    	mov	dh, al	; this is interpolated middle (3th) sample (R)
  3328 000013F0 00E0                    	add	al, ah
  3329 000013F2 D0D8                    	rcr	al, 1
  3330 000013F4 88C7                    	mov	bh, al	; this is temporary interpolation value (R)
  3331 000013F6 00E0                    	add	al, ah
  3332 000013F8 D0D8                    	rcr	al, 1
  3333 000013FA 2C80                    	sub	al, 80h
  3334 000013FC 66C1E008                	shl	ax, 8
  3335 00001400 66AB                    	stosw		; this is 1st interpolated sample (R)
  3336 00001402 88D8                    	mov	al, bl
  3337 00001404 00D0                    	add	al, dl
  3338 00001406 D0D8                    	rcr	al, 1
  3339 00001408 2C80                    	sub	al, 80h
  3340 0000140A 66C1E008                	shl	ax, 8
  3341 0000140E 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3342 00001410 88F8                    	mov	al, bh
  3343 00001412 00F0                    	add	al, dh
  3344 00001414 D0D8                    	rcr	al, 1
  3345 00001416 2C80                    	sub	al, 80h
  3346 00001418 66C1E008                	shl	ax, 8
  3347 0000141C 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  3348 0000141E 88D0                    	mov	al, dl
  3349 00001420 2C80                    	sub	al, 80h
  3350 00001422 66C1E008                	shl	ax, 8
  3351 00001426 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  3352 00001428 88F0                    	mov	al, dh
  3353 0000142A 2C80                    	sub	al, 80h
  3354 0000142C 66C1E008                	shl	ax, 8
  3355 00001430 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  3356 00001432 A0[F7290000]            	mov	al, [next_val_l]
  3357 00001437 00D0                    	add	al, dl
  3358 00001439 D0D8                    	rcr	al, 1
  3359 0000143B 88C3                    	mov	bl, al	; this is temporary interpolation value (L)
  3360 0000143D 00D0                    	add	al, dl
  3361 0000143F D0D8                    	rcr	al, 1
  3362 00001441 2C80                    	sub	al, 80h
  3363 00001443 66C1E008                	shl	ax, 8
  3364 00001447 66AB                    	stosw		; this is 4th interpolated sample (L)
  3365 00001449 A0[F9290000]            	mov	al, [next_val_r]
  3366 0000144E 00F0                    	add	al, dh
  3367 00001450 D0D8                    	rcr	al, 1
  3368 00001452 88C7                    	mov	bh, al	; this is temporary interpolation value (R)
  3369 00001454 00F0                    	add	al, dh
  3370 00001456 D0D8                    	rcr	al, 1
  3371 00001458 2C80                    	sub	al, 80h
  3372 0000145A 66C1E008                	shl	ax, 8
  3373 0000145E 66AB                    	stosw		; this is 4th interpolated sample (R)
  3374 00001460 A0[F7290000]            	mov	al, [next_val_l]
  3375 00001465 00D8                    	add	al, bl
  3376 00001467 D0D8                    	rcr	al, 1
  3377 00001469 2C80                    	sub	al, 80h
  3378 0000146B 66C1E008                	shl	ax, 8
  3379 0000146F 66AB                    	stosw		; this is 5th interpolated sample (L)
  3380 00001471 A0[F9290000]            	mov	al, [next_val_r]
  3381 00001476 00F8                    	add	al, bh
  3382 00001478 D0D8                    	rcr	al, 1
  3383 0000147A 2C80                    	sub	al, 80h
  3384 0000147C 66C1E008                	shl	ax, 8
  3385 00001480 66AB                    	stosw		; this is 5th interpolated sample (R)
  3386                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3387 00001482 E305                    	jecxz	lff8s_6
  3388 00001484 E907FFFFFF              	jmp	lff8s_1
  3389                                  lff8s_6:
  3390 00001489 E9A6FEFFFF              	jmp	lff8s_3
  3391                                  
  3392                                  load_8khz_mono_16_bit:
  3393                                  	; 02/02/2025
  3394                                  	; 13/11/2023
  3395 0000148E F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3396                                  					; last of the file?
  3397 00001495 7402                    	jz	short lff8m2_0		; no
  3398 00001497 F9                      	stc
  3399 00001498 C3                      	retn
  3400                                  
  3401                                  lff8m2_0:
  3402                                  	; 01/12/2024
  3403                                  	; edi = audio buffer address
  3404 00001499 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3405                                          ;mov	edx, [loadsize]
  3406                                  
  3407                                  	; esi = buffer address
  3408                                  	;; edx = buffer size
  3409                                  
  3410                                  	; load file into memory
  3411                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000149E 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000014A4 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000014A6 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000014AC B803000000          <1>  mov eax, %1
   103                              <1> 
   104 000014B1 CD40                <1>  int 40h
  3412 000014B3 0F82A0000000            	jc	lff8m2_7 ; error !
  3413                                  
  3414                                  	; 01/12/2024
  3415 000014B9 A3[BC860000]            	mov	[count], eax
  3416                                  	;;;
  3417                                  	; 29/05/2024
  3418                                  	;mov	edi, [audio_buffer]
  3419                                  	;;;
  3420 000014BE D1E8                    	shr	eax, 1
  3421 000014C0 7505                    	jnz	short lff8m2_8
  3422 000014C2 E985FEFFFF              	jmp	lff8_eof
  3423                                  
  3424                                  lff8m2_8:
  3425 000014C7 89C1                    	mov	ecx, eax	; word count
  3426                                  lff8m2_1:
  3427 000014C9 66AD                    	lodsw
  3428 000014CB 66AB                    	stosw		; original sample (left channel)
  3429 000014CD 66AB                    	stosw		; original sample (right channel)
  3430 000014CF 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  3431 000014D2 66A3[F3290000]          	mov	[previous_val], ax
  3432                                  	; 02/02/2025
  3433 000014D8 668B06                  	mov	ax, [esi]
  3434 000014DB 49                      	dec	ecx
  3435 000014DC 7502                    	jnz	short lff8m2_2
  3436 000014DE 31C0                    	xor	eax, eax
  3437                                  lff8m2_2:
  3438 000014E0 80C480                  	add	ah, 80h ; convert sound level to 0-65535 format
  3439 000014E3 89C5                    	mov	ebp, eax	; [next_val]
  3440 000014E5 660305[F3290000]        	add	ax, [previous_val]
  3441 000014EC 66D1D8                  	rcr	ax, 1
  3442 000014EF 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample
  3443 000014F1 660305[F3290000]        	add	ax, [previous_val]
  3444 000014F8 66D1D8                  	rcr	ax, 1	; this is temporary interpolation value
  3445 000014FB 89C3                    	mov	ebx, eax 		
  3446 000014FD 660305[F3290000]        	add	ax, [previous_val]
  3447 00001504 66D1D8                  	rcr	ax, 1
  3448 00001507 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3449 0000150A 66AB                    	stosw		; this is 1st interpolated sample (L)
  3450 0000150C 66AB                    	stosw		; this is 1st interpolated sample (R)
  3451 0000150E 89D8                    	mov	eax, ebx
  3452 00001510 6601D0                  	add	ax, dx
  3453 00001513 66D1D8                  	rcr	ax, 1
  3454 00001516 80EC80                  	sub	ah, 80h
  3455 00001519 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3456 0000151B 66AB                    	stosw		; this is 2nd interpolated sample (R)
  3457 0000151D 89D0                    	mov	eax, edx
  3458 0000151F 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3459 00001522 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  3460 00001524 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  3461 00001526 89E8                    	mov	eax, ebp
  3462 00001528 6601D0                  	add	ax, dx
  3463 0000152B 66D1D8                  	rcr	ax, 1
  3464 0000152E 89C3                    	mov	ebx, eax ; this is temporary interpolation value
  3465 00001530 6601D0                  	add	ax, dx
  3466 00001533 66D1D8                  	rcr	ax, 1
  3467 00001536 80EC80                  	sub	ah, 80h
  3468 00001539 66AB                    	stosw		; this is 4th interpolated sample (L)
  3469 0000153B 66AB                    	stosw		; this is 4th interpolated sample (R)
  3470 0000153D 89E8                    	mov	eax, ebp
  3471 0000153F 6601D8                  	add	ax, bx
  3472 00001542 66D1D8                  	rcr	ax, 1
  3473 00001545 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3474 00001548 66AB                    	stosw		; this is 5th interpolated sample (L)
  3475 0000154A 66AB                    	stosw		; this is 5th interpolated sample (R)
  3476                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3477 0000154C 09C9                    	or	ecx, ecx
  3478 0000154E 0F8575FFFFFF            	jnz	lff8m2_1
  3479 00001554 E9DBFDFFFF              	jmp	lff8m2_3
  3480                                  
  3481                                  lff8m2_7:
  3482                                  lff8s2_7:
  3483 00001559 E9F7FDFFFF              	jmp	lff8m2_5  ; error
  3484                                  
  3485                                  load_8khz_stereo_16_bit:
  3486                                  	; 02/02/2025
  3487                                  	; 16/11/2023
  3488                                  	; 15/11/2023
  3489                                  	; 13/11/2023
  3490 0000155E F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3491                                  					; last of the file?
  3492 00001565 7402                    	jz	short lff8s2_0		; no
  3493 00001567 F9                      	stc
  3494 00001568 C3                      	retn
  3495                                  
  3496                                  lff8s2_0:
  3497                                  	; 01/12/2024
  3498                                  	; edi = audio buffer address
  3499 00001569 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3500                                          ;mov	edx, [loadsize]
  3501                                  
  3502                                  	; esi = buffer address
  3503                                  	;; edx = buffer size
  3504                                  
  3505                                  	; load file into memory
  3506                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000156E 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001574 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001576 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000157C B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001581 CD40                <1>  int 40h
  3507 00001583 72D4                    	jc	short lff8s2_7 ; error !
  3508                                  
  3509                                  	; 01/12/2024
  3510 00001585 A3[BC860000]            	mov	[count], eax
  3511                                  	;;;
  3512                                  	; 29/05/2024
  3513                                  	;mov	edi, [audio_buffer]
  3514                                  	;;;
  3515 0000158A C1E802                  	shr	eax, 2
  3516 0000158D 7505                    	jnz	short lff8s2_8
  3517 0000158F E9B8FDFFFF              	jmp	lff8_eof
  3518                                  
  3519                                  lff8s2_8:
  3520 00001594 89C1                    	mov	ecx, eax ; dword count
  3521                                  lff8s2_1:
  3522 00001596 66AD                    	lodsw
  3523 00001598 66AB                    	stosw		; original sample (L)
  3524                                  	; 15/11/2023
  3525 0000159A 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  3526 0000159D 66A3[F3290000]          	mov	[previous_val_l], ax
  3527 000015A3 66AD                    	lodsw
  3528 000015A5 66AB                    	stosw		; original sample (R)
  3529 000015A7 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  3530 000015AA 66A3[F5290000]          	mov	[previous_val_r], ax
  3531                                  	; 02/02/2025
  3532 000015B0 668B06                  	mov	ax, [esi]
  3533 000015B3 668B5602                	mov	dx, [esi+2]
  3534                                  	; 16/11/2023
  3535 000015B7 49                      	dec	ecx
  3536 000015B8 7504                    	jnz	short lff8s2_2
  3537 000015BA 31D2                    	xor	edx, edx
  3538 000015BC 31C0                    	xor	eax, eax
  3539                                  lff8s2_2:
  3540 000015BE 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  3541 000015C1 66A3[F7290000]          	mov	[next_val_l], ax
  3542 000015C7 80C680                  	add	dh, 80h	; convert sound level to 0-65535 format
  3543 000015CA 668915[F9290000]        	mov	[next_val_r], dx
  3544 000015D1 660305[F3290000]        	add	ax, [previous_val_l]
  3545 000015D8 66D1D8                  	rcr	ax, 1
  3546 000015DB 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample (L)
  3547 000015DD 660305[F3290000]        	add	ax, [previous_val_l]
  3548 000015E4 66D1D8                  	rcr	ax, 1	
  3549 000015E7 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
  3550 000015E9 660305[F3290000]        	add	ax, [previous_val_l]
  3551 000015F0 66D1D8                  	rcr	ax, 1
  3552 000015F3 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3553 000015F6 66AB                    	stosw		; this is 1st interpolated sample (L)
  3554 000015F8 66A1[F9290000]          	mov	ax, [next_val_r]
  3555 000015FE 660305[F5290000]        	add	ax, [previous_val_r]
  3556 00001605 66D1D8                  	rcr	ax, 1
  3557 00001608 89C5                    	mov	ebp, eax ; this is interpolated middle (3th) sample (R)
  3558 0000160A 660305[F5290000]        	add	ax, [previous_val_r]
  3559 00001611 66D1D8                  	rcr	ax, 1
  3560 00001614 50                      	push	eax ; *	; this is temporary interpolation value (R)
  3561 00001615 660305[F5290000]        	add	ax, [previous_val_r]
  3562 0000161C 66D1D8                  	rcr	ax, 1
  3563 0000161F 80EC80                  	sub	ah, 80h
  3564 00001622 66AB                    	stosw		; this is 1st interpolated sample (R)
  3565 00001624 89D8                    	mov	eax, ebx
  3566 00001626 6601D0                  	add	ax, dx
  3567 00001629 66D1D8                  	rcr	ax, 1
  3568 0000162C 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3569 0000162F 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3570 00001631 58                      	pop	eax ; *
  3571 00001632 6601E8                  	add	ax, bp
  3572 00001635 66D1D8                  	rcr	ax, 1
  3573 00001638 80EC80                  	sub	ah, 80h
  3574 0000163B 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  3575 0000163D 89D0                    	mov	eax, edx
  3576 0000163F 80EC80                  	sub	ah, 80h
  3577 00001642 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  3578 00001644 89E8                    	mov	eax, ebp
  3579 00001646 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3580 00001649 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  3581 0000164B 66A1[F7290000]          	mov	ax, [next_val_l]
  3582 00001651 6601D0                  	add	ax, dx
  3583 00001654 66D1D8                  	rcr	ax, 1
  3584 00001657 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
  3585 00001659 6601D0                  	add	ax, dx
  3586 0000165C 66D1D8                  	rcr	ax, 1
  3587 0000165F 80EC80                  	sub	ah, 80h
  3588 00001662 66AB                    	stosw		; this is 4th interpolated sample (L)
  3589 00001664 66A1[F9290000]          	mov	ax, [next_val_r]
  3590 0000166A 6601E8                  	add	ax, bp
  3591 0000166D 66D1D8                  	rcr	ax, 1
  3592 00001670 50                      	push	eax ; ** ; this is temporary interpolation value (R)
  3593 00001671 6601E8                  	add	ax, bp
  3594 00001674 66D1D8                  	rcr	ax, 1
  3595 00001677 80EC80                  	sub	ah, 80h
  3596 0000167A 66AB                    	stosw		; this is 4th interpolated sample (R)
  3597 0000167C 66A1[F7290000]          	mov	ax, [next_val_l]
  3598 00001682 6601D8                  	add	ax, bx
  3599 00001685 66D1D8                  	rcr	ax, 1
  3600 00001688 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3601 0000168B 66AB                    	stosw		; this is 5th interpolated sample (L)
  3602 0000168D 58                      	pop	eax ; **
  3603 0000168E 660305[F9290000]        	add	ax, [next_val_r]
  3604 00001695 66D1D8                  	rcr	ax, 1
  3605 00001698 80EC80                  	sub	ah, 80h
  3606 0000169B 66AB                    	stosw		; this is 5th interpolated sample (R)
  3607                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3608 0000169D E305                    	jecxz	lff8_s2_9
  3609 0000169F E9F2FEFFFF              	jmp	lff8s2_1
  3610                                  lff8_s2_9:
  3611 000016A4 E98BFCFFFF              	jmp	lff8s2_3
  3612                                  
  3613                                  ; .....................
  3614                                  
  3615                                  load_16khz_mono_8_bit:
  3616                                  	; 02/02/2025
  3617                                  	; 14/11/2023
  3618                                  	; 13/11/2023
  3619 000016A9 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3620                                  					; last of the file?
  3621 000016B0 7402                    	jz	short lff16m_0		; no
  3622 000016B2 F9                      	stc
  3623 000016B3 C3                      	retn
  3624                                  
  3625                                  lff16m_0:
  3626                                  	; 01/12/2024
  3627                                  	; edi = audio buffer address
  3628 000016B4 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3629                                          ;mov	edx, [loadsize]
  3630                                  
  3631                                  	; esi = buffer address
  3632                                  	;; edx = buffer size
  3633                                  
  3634                                  	; load file into memory
  3635                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000016B9 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000016BF 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000016C1 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000016C7 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 000016CC CD40                <1>  int 40h
  3636 000016CE 7253                    	jc	short lff16m_7 ; error !
  3637                                  
  3638                                  	; 01/12/2024
  3639 000016D0 A3[BC860000]            	mov	[count], eax
  3640                                  	;;;
  3641                                  	; 29/05/2024
  3642                                  	;mov	edi, [audio_buffer]
  3643                                  	;;;
  3644 000016D5 21C0                    	and	eax, eax
  3645 000016D7 7505                    	jnz	short lff16m_8
  3646 000016D9 E96EFCFFFF              	jmp	lff16_eof
  3647                                  
  3648                                  lff16m_8:
  3649 000016DE 89C1                    	mov	ecx, eax		; byte count
  3650                                  lff16m_1:
  3651 000016E0 AC                      	lodsb
  3652                                  	;mov	[previous_val], al
  3653 000016E1 88C3                    	mov	bl, al
  3654 000016E3 2C80                    	sub	al, 80h
  3655 000016E5 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3656 000016E9 66AB                    	stosw		; original sample (left channel)
  3657 000016EB 66AB                    	stosw		; original sample (right channel)
  3658                                  	;xor	eax, eax
  3659                                  	; 02/02/2025
  3660 000016ED 8A06                    	mov	al, [esi]
  3661 000016EF 49                      	dec	ecx
  3662 000016F0 7502                    	jnz	short lff16m_2
  3663                                  	; 14/11/2023
  3664 000016F2 B080                    	mov	al, 80h
  3665                                  lff16m_2:
  3666                                  	;mov	[next_val], al
  3667 000016F4 88C7                    	mov	bh, al
  3668                                  	;add	al, [previous_val]
  3669 000016F6 00D8                    	add	al, bl
  3670 000016F8 D0D8                    	rcr	al, 1
  3671 000016FA 88C2                    	mov	dl, al	; this is interpolated middle (temp) sample
  3672                                  	;add	al, [previous_val]
  3673 000016FC 00D8                    	add	al, bl
  3674 000016FE D0D8                    	rcr	al, 1
  3675 00001700 2C80                    	sub	al, 80h
  3676 00001702 66C1E008                	shl	ax, 8
  3677 00001706 66AB                    	stosw		; this is 1st interpolated sample (L)
  3678 00001708 66AB                    	stosw		; this is 1st interpolated sample (R)
  3679                                  	;mov	al, [next_val]
  3680 0000170A 88F8                    	mov	al, bh
  3681 0000170C 00D0                    	add	al, dl
  3682 0000170E D0D8                    	rcr	al, 1
  3683 00001710 2C80                    	sub	al, 80h
  3684 00001712 66C1E008                	shl	ax, 8
  3685 00001716 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3686 00001718 66AB                    	stosw		; this is 2nd interpolated sample (R)
  3687                                  	
  3688                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3689 0000171A 09C9                    	or	ecx, ecx
  3690 0000171C 75C2                    	jnz	short lff16m_1
  3691 0000171E E911FCFFFF              	jmp	lff16m_3
  3692                                  
  3693                                  lff16m_7:
  3694                                  lff16s_7:
  3695 00001723 E92DFCFFFF              	jmp	lff16m_5  ; error
  3696                                  
  3697                                  load_16khz_stereo_8_bit:
  3698                                  	; 02/02/2025
  3699                                  	; 14/11/2023
  3700                                  	; 13/11/2023
  3701 00001728 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3702                                  					; last of the file?
  3703 0000172F 7402                    	jz	short lff16s_0		; no
  3704 00001731 F9                      	stc
  3705 00001732 C3                      	retn
  3706                                  
  3707                                  lff16s_0:
  3708                                  	; 01/12/2024
  3709                                  	; edi = audio buffer address
  3710 00001733 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3711                                          ;mov	edx, [loadsize]
  3712                                  
  3713                                  	; esi = buffer address
  3714                                  	;; edx = buffer size
  3715                                  
  3716                                  	; load file into memory
  3717                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001738 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 0000173E 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001740 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001746 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 0000174B CD40                <1>  int 40h
  3718 0000174D 72D4                    	jc	short lff16s_7 ; error !
  3719                                  
  3720                                  	; 01/12/2024
  3721 0000174F A3[BC860000]            	mov	[count], eax
  3722                                  	;;;
  3723                                  	; 29/05/2024
  3724                                  	;mov	edi, [audio_buffer]
  3725                                  	;;;
  3726 00001754 D1E8                    	shr	eax, 1
  3727 00001756 7505                    	jnz	short lff16s_8
  3728 00001758 E9EFFBFFFF              	jmp	lff16_eof
  3729                                  
  3730                                  lff16s_8:
  3731 0000175D 89C1                    	mov	ecx, eax	; word count
  3732                                  lff16s_1:
  3733 0000175F AC                      	lodsb
  3734 00001760 A2[F3290000]            	mov	[previous_val_l], al
  3735 00001765 2C80                    	sub	al, 80h
  3736 00001767 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3737 0000176B 66AB                    	stosw		; original sample (L)
  3738 0000176D AC                      	lodsb
  3739 0000176E A2[F5290000]            	mov	[previous_val_r], al
  3740 00001773 2C80                    	sub	al, 80h
  3741 00001775 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3742 00001779 66AB                    	stosw		; original sample (R)
  3743                                  
  3744                                  	;xor	eax, eax
  3745                                  	; 02/02/2025
  3746 0000177B 668B06                  	mov	ax, [esi]
  3747 0000177E 49                      	dec	ecx
  3748 0000177F 7504                    	jnz	short lff16s_2
  3749                                  		; convert 8 bit sample to 16 bit sample
  3750                                  	; 14/11/2023
  3751 00001781 66B88080                	mov	ax, 8080h
  3752                                  lff16s_2:
  3753                                  	;mov	[next_val_l], al
  3754                                  	;mov	[next_val_r], ah
  3755 00001785 89C3                    	mov	ebx, eax
  3756 00001787 0205[F3290000]          	add	al, [previous_val_l]
  3757 0000178D D0D8                    	rcr	al, 1
  3758 0000178F 88C2                    	mov	dl, al	; this is temporary interpolation value (L)
  3759 00001791 0205[F3290000]          	add	al, [previous_val_l]
  3760 00001797 D0D8                    	rcr	al, 1
  3761 00001799 2C80                    	sub	al, 80h
  3762 0000179B 66C1E008                	shl	ax, 8
  3763 0000179F 66AB                    	stosw		; this is 1st interpolated sample (L)
  3764 000017A1 88F8                    	mov	al, bh	; [next_val_r]
  3765 000017A3 0205[F5290000]          	add	al, [previous_val_r]
  3766 000017A9 D0D8                    	rcr	al, 1
  3767 000017AB 88C6                    	mov	dh, al	; this is temporary interpolation value (R)
  3768 000017AD 0205[F5290000]          	add	al, [previous_val_r]
  3769 000017B3 D0D8                    	rcr	al, 1
  3770 000017B5 2C80                    	sub	al, 80h
  3771 000017B7 66C1E008                	shl	ax, 8
  3772 000017BB 66AB                    	stosw		; this is 1st interpolated sample (R)
  3773 000017BD 88D0                    	mov	al, dl
  3774 000017BF 00D8                    	add	al, bl	; [next_val_l]
  3775 000017C1 D0D8                    	rcr	al, 1
  3776 000017C3 2C80                    	sub	al, 80h
  3777 000017C5 66C1E008                	shl	ax, 8
  3778 000017C9 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3779 000017CB 88F0                    	mov	al, dh
  3780 000017CD 00F8                    	add	al, bh	; [next_val_r]
  3781 000017CF D0D8                    	rcr	al, 1
  3782 000017D1 2C80                    	sub	al, 80h
  3783 000017D3 66C1E008                	shl	ax, 8
  3784 000017D7 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  3785                                  	
  3786                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3787 000017D9 09C9                    	or	ecx, ecx
  3788 000017DB 7582                    	jnz	short lff16s_1
  3789 000017DD E952FBFFFF              	jmp	lff16s_3
  3790                                  
  3791                                  load_16khz_mono_16_bit:
  3792                                  	; 02/02/2025
  3793                                  	; 15/11/2023
  3794                                  	; 13/11/2023
  3795 000017E2 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3796                                  					; last of the file?
  3797 000017E9 7402                    	jz	short lff16m2_0		; no
  3798 000017EB F9                      	stc
  3799 000017EC C3                      	retn
  3800                                  
  3801                                  lff16m2_0:
  3802                                  	; 01/12/2024
  3803                                  	; edi = audio buffer address
  3804 000017ED BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3805                                          ;mov	edx, [loadsize]
  3806                                  
  3807                                  	; esi = buffer address
  3808                                  	;; edx = buffer size
  3809                                  
  3810                                  	; load file into memory
  3811                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000017F2 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000017F8 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000017FA 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001800 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001805 CD40                <1>  int 40h
  3812 00001807 7255                    	jc	short lff16m2_7 ; error !
  3813                                  
  3814                                  	; 01/12/2024
  3815 00001809 A3[BC860000]            	mov	[count], eax
  3816                                  	;;;
  3817                                  	; 29/05/2024
  3818                                  	;mov	edi, [audio_buffer]
  3819                                  	;;;
  3820 0000180E D1E8                    	shr	eax, 1
  3821 00001810 7505                    	jnz	short lff16m2_8
  3822 00001812 E935FBFFFF              	jmp	lff16_eof
  3823                                  
  3824                                  lff16m2_8:
  3825 00001817 89C1                    	mov	ecx, eax  ; word count
  3826                                  lff16m2_1:
  3827 00001819 66AD                    	lodsw
  3828 0000181B 66AB                    	stosw		; original sample (left channel)
  3829 0000181D 66AB                    	stosw		; original sample (right channel)
  3830 0000181F 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  3831                                  	;mov	[previous_val], ax
  3832 00001822 89C3                    	mov	ebx, eax
  3833                                  	; 02/02/2025
  3834 00001824 668B06                  	mov	ax, [esi]
  3835 00001827 49                      	dec	ecx
  3836 00001828 7502                    	jnz	short lff16m2_2
  3837 0000182A 31C0                    	xor	eax, eax
  3838                                  lff16m2_2:
  3839 0000182C 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  3840 0000182F 89C5                    	mov	ebp, eax	; [next_val]
  3841                                  	;add	ax, [previous_val]
  3842 00001831 6601D8                  	add	ax, bx
  3843 00001834 66D1D8                  	rcr	ax, 1
  3844 00001837 89C2                    	mov	edx, eax ; this is temporary interpolation value
  3845                                  	;add	ax, [previous_val]
  3846 00001839 6601D8                  	add	ax, bx
  3847 0000183C 66D1D8                  	rcr	ax, 1
  3848 0000183F 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3849 00001842 66AB                    	stosw		; this is 1st interpolated sample (L)
  3850 00001844 66AB                    	stosw		; this is 1st interpolated sample (R)
  3851 00001846 89E8                    	mov	eax, ebp
  3852 00001848 6601D0                  	add	ax, dx
  3853 0000184B 66D1D8                  	rcr	ax, 1
  3854 0000184E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3855 00001851 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3856 00001853 66AB                    	stosw		; this is 2nd interpolated sample (R)
  3857                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3858 00001855 09C9                    	or	ecx, ecx
  3859 00001857 75C0                    	jnz	short lff16m2_1
  3860 00001859 E9D6FAFFFF              	jmp	lff16m2_3
  3861                                  
  3862                                  lff16m2_7:
  3863                                  lff16s2_7:
  3864 0000185E E9F2FAFFFF              	jmp	lff16m2_5  ; error
  3865                                  
  3866                                  load_16khz_stereo_16_bit:
  3867                                  	; 02/02/2025
  3868                                  	; 16/11/2023
  3869                                  	; 15/11/2023
  3870                                  	; 13/11/2023
  3871 00001863 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3872                                  					; last of the file?
  3873 0000186A 7402                    	jz	short lff16s2_0		; no
  3874 0000186C F9                      	stc
  3875 0000186D C3                      	retn
  3876                                  
  3877                                  lff16s2_0:
  3878                                  	; 01/12/2024
  3879                                  	; edi = audio buffer address
  3880 0000186E BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3881                                          ;mov	edx, [loadsize]
  3882                                  
  3883                                  	; esi = buffer address
  3884                                  	;; edx = buffer size
  3885                                  
  3886                                  	; load file into memory
  3887                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001873 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001879 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 0000187B 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001881 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001886 CD40                <1>  int 40h
  3888 00001888 72D4                    	jc	short lff16s2_7 ; error !
  3889                                  
  3890                                  	; 01/12/2024
  3891 0000188A A3[BC860000]            	mov	[count], eax
  3892                                  	;;;
  3893                                  	; 29/05/2024
  3894                                  	;mov	edi, [audio_buffer]
  3895                                  	;;;
  3896 0000188F C1E802                  	shr	eax, 2
  3897 00001892 7505                    	jnz	short lff16s2_8
  3898 00001894 E9B3FAFFFF              	jmp	lff16_eof
  3899                                  
  3900                                  lff16s2_8:
  3901 00001899 89C1                    	mov	ecx, eax  ; dword count
  3902                                  lff16s2_1:
  3903 0000189B 66AD                    	lodsw
  3904 0000189D 66AB                    	stosw		; original sample (L)
  3905 0000189F 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  3906 000018A2 66A3[F3290000]          	mov	[previous_val_l], ax
  3907 000018A8 66AD                    	lodsw
  3908 000018AA 66AB                    	stosw		; original sample (R)
  3909 000018AC 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  3910 000018AF 66A3[F5290000]          	mov	[previous_val_r], ax
  3911                                  	; 02/02/2025
  3912 000018B5 668B06                  	mov	ax, [esi]
  3913 000018B8 668B5602                	mov	dx, [esi+2]
  3914                                  	; 16/11/2023
  3915 000018BC 49                      	dec	ecx
  3916 000018BD 7504                    	jnz	short lff16s2_2
  3917 000018BF 31D2                    	xor	edx, edx
  3918 000018C1 31C0                    	xor	eax, eax
  3919                                  lff16s2_2:
  3920 000018C3 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  3921                                  	;mov	[next_val_l], ax
  3922 000018C6 89C5                    	mov	ebp, eax
  3923 000018C8 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  3924 000018CB 668915[F9290000]        	mov	[next_val_r], dx
  3925 000018D2 660305[F3290000]        	add	ax, [previous_val_l]
  3926 000018D9 66D1D8                  	rcr	ax, 1
  3927 000018DC 89C2                    	mov	edx, eax ; this is temporary interpolation value (L)
  3928 000018DE 660305[F3290000]        	add	ax, [previous_val_l]
  3929 000018E5 66D1D8                  	rcr	ax, 1
  3930 000018E8 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  3931 000018EB 66AB                    	stosw		; this is 1st interpolated sample (L)
  3932 000018ED 66A1[F9290000]          	mov	ax, [next_val_r]
  3933 000018F3 660305[F5290000]        	add	ax, [previous_val_r]
  3934 000018FA 66D1D8                  	rcr	ax, 1
  3935 000018FD 89C3                    	mov	ebx, eax ; this is temporary interpolation value (R)
  3936 000018FF 660305[F5290000]        	add	ax, [previous_val_r]
  3937 00001906 66D1D8                  	rcr	ax, 1
  3938 00001909 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3939 0000190C 66AB                    	stosw		; this is 1st interpolated sample (R)
  3940                                  	;mov	ax, [next_val_l]
  3941 0000190E 89E8                    	mov	eax, ebp
  3942 00001910 6601D0                  	add	ax, dx
  3943 00001913 66D1D8                  	rcr	ax, 1
  3944 00001916 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3945 00001919 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3946 0000191B 66A1[F9290000]          	mov	ax, [next_val_r]
  3947 00001921 6601D8                  	add	ax, bx
  3948 00001924 66D1D8                  	rcr	ax, 1
  3949 00001927 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3950 0000192A 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  3951                                  	
  3952                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3953 0000192C 09C9                    	or	ecx, ecx
  3954 0000192E 0F8567FFFFFF            	jnz	lff16s2_1
  3955 00001934 E9FBF9FFFF              	jmp	lff16s2_3
  3956                                  
  3957                                  ; .....................
  3958                                  
  3959                                  load_24khz_mono_8_bit:
  3960                                  	; 02/02/2025
  3961                                  	; 15/11/2023
  3962 00001939 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3963                                  					; last of the file?
  3964 00001940 7402                    	jz	short lff24m_0		; no
  3965 00001942 F9                      	stc
  3966 00001943 C3                      	retn
  3967                                  
  3968                                  lff24m_0:
  3969                                  	; 01/12/2024
  3970                                  	; edi = audio buffer address
  3971 00001944 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3972                                          ;mov	edx, [loadsize]
  3973                                  
  3974                                  	; esi = buffer address
  3975                                  	;; edx = buffer size
  3976                                  
  3977                                  	; load file into memory
  3978                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001949 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 0000194F 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001951 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001957 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 0000195C CD40                <1>  int 40h
  3979 0000195E 723B                    	jc	short lff24m_7 ; error !
  3980                                  
  3981                                  	; 01/12/2024
  3982 00001960 A3[BC860000]            	mov	[count], eax
  3983                                  	;;;
  3984                                  	; 29/05/2024
  3985                                  	;mov	edi, [audio_buffer]
  3986                                  	;;;
  3987 00001965 21C0                    	and	eax, eax
  3988 00001967 7505                    	jnz	short lff24m_8
  3989 00001969 E9DEF9FFFF              	jmp	lff24_eof
  3990                                  
  3991                                  lff24m_8:
  3992 0000196E 89C1                    	mov	ecx, eax	; byte count
  3993                                  lff24m_1:
  3994 00001970 AC                      	lodsb
  3995                                  	;mov	[previous_val], al
  3996 00001971 88C3                    	mov	bl, al
  3997 00001973 2C80                    	sub	al, 80h
  3998 00001975 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3999 00001979 66AB                    	stosw		; original sample (left channel)
  4000 0000197B 66AB                    	stosw		; original sample (right channel)
  4001                                  	;xor	eax, eax
  4002                                  	; 02/02/2025
  4003 0000197D 8A06                    	mov	al, [esi]
  4004 0000197F 49                      	dec	ecx
  4005 00001980 7502                    	jnz	short lff24m_2
  4006 00001982 B080                    	mov	al, 80h
  4007                                  lff24m_2:
  4008                                  	;;mov	[next_val], al
  4009                                  	;mov	bh, al
  4010                                  	;add	al, [previous_val]
  4011 00001984 00D8                    	add	al, bl
  4012 00001986 D0D8                    	rcr	al, 1
  4013 00001988 2C80                    	sub	al, 80h
  4014 0000198A 66C1E008                	shl	ax, 8
  4015 0000198E 66AB                    	stosw		; this is interpolated sample (L)
  4016 00001990 66AB                    	stosw		; this is interpolated sample (R)
  4017                                  	
  4018                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  4019 00001992 09C9                    	or	ecx, ecx
  4020 00001994 75DA                    	jnz	short lff24m_1
  4021 00001996 E999F9FFFF              	jmp	lff24_3
  4022                                  
  4023                                  lff24m_7:
  4024                                  lff24s_7:
  4025 0000199B E9B5F9FFFF              	jmp	lff24_5  ; error
  4026                                  
  4027                                  load_24khz_stereo_8_bit:
  4028                                  	; 02/02/2025
  4029                                  	; 15/11/2023
  4030 000019A0 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4031                                  					; last of the file?
  4032 000019A7 7402                    	jz	short lff24s_0		; no
  4033 000019A9 F9                      	stc
  4034 000019AA C3                      	retn
  4035                                  
  4036                                  lff24s_0:
  4037                                  	; 01/12/2024
  4038                                  	; edi = audio buffer address
  4039 000019AB BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4040                                          ;mov	edx, [loadsize]
  4041                                  
  4042                                  	; esi = buffer address
  4043                                  	;; edx = buffer size
  4044                                  
  4045                                  	; load file into memory
  4046                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000019B0 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000019B6 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000019B8 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000019BE B803000000          <1>  mov eax, %1
   103                              <1> 
   104 000019C3 CD40                <1>  int 40h
  4047 000019C5 72D4                    	jc	short lff24s_7 ; error !
  4048                                  
  4049                                  	; 01/12/2024
  4050 000019C7 A3[BC860000]            	mov	[count], eax
  4051                                  	;;;
  4052                                  	; 29/05/2024
  4053                                  	;mov	edi, [audio_buffer]
  4054                                  	;;;
  4055 000019CC D1E8                    	shr	eax, 1
  4056 000019CE 7505                    	jnz	short lff24s_8
  4057 000019D0 E977F9FFFF              	jmp	lff24_eof
  4058                                  
  4059                                  lff24s_8:
  4060 000019D5 89C1                    	mov	ecx, eax  ; word count
  4061                                  lff24s_1:
  4062 000019D7 AC                      	lodsb
  4063 000019D8 A2[F3290000]            	mov	[previous_val_l], al
  4064 000019DD 2C80                    	sub	al, 80h
  4065 000019DF 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4066 000019E3 66AB                    	stosw		; original sample (L)
  4067 000019E5 AC                      	lodsb
  4068 000019E6 A2[F5290000]            	mov	[previous_val_r], al
  4069 000019EB 2C80                    	sub	al, 80h
  4070 000019ED 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4071 000019F1 66AB                    	stosw		; original sample (R)
  4072                                  
  4073                                  	;xor	eax, eax
  4074                                  	; 02/02/2025
  4075 000019F3 668B06                  	mov	ax, [esi]
  4076 000019F6 49                      	dec	ecx
  4077 000019F7 7504                    	jnz	short lff24s_2
  4078                                  		; convert 8 bit sample to 16 bit sample
  4079 000019F9 66B88080                	mov	ax, 8080h
  4080                                  lff24s_2:
  4081                                  	;;mov	[next_val_l], al
  4082                                  	;;mov	[next_val_r], ah
  4083                                  	;mov	bx, ax
  4084 000019FD 88E7                    	mov	bh, ah
  4085 000019FF 0205[F3290000]          	add	al, [previous_val_l]
  4086 00001A05 D0D8                    	rcr	al, 1
  4087                                  	;mov	dl, al
  4088 00001A07 2C80                    	sub	al, 80h
  4089 00001A09 66C1E008                	shl	ax, 8
  4090 00001A0D 66AB                    	stosw		; this is interpolated sample (L)
  4091 00001A0F 88F8                    	mov	al, bh	; [next_val_r]
  4092 00001A11 0205[F5290000]          	add	al, [previous_val_r]
  4093 00001A17 D0D8                    	rcr	al, 1
  4094                                  	;mov	dh, al
  4095 00001A19 2C80                    	sub	al, 80h
  4096 00001A1B 66C1E008                	shl	ax, 8
  4097 00001A1F 66AB                    	stosw		; this is interpolated sample (R)
  4098                                  		
  4099                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  4100 00001A21 09C9                    	or	ecx, ecx
  4101 00001A23 75B2                    	jnz	short lff24s_1
  4102 00001A25 E90AF9FFFF              	jmp	lff24_3
  4103                                  
  4104                                  load_24khz_mono_16_bit:
  4105                                  	; 02/02/2025
  4106                                  	; 15/11/2023
  4107 00001A2A F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4108                                  					; last of the file?
  4109 00001A31 7402                    	jz	short lff24m2_0		; no
  4110 00001A33 F9                      	stc
  4111 00001A34 C3                      	retn
  4112                                  
  4113                                  lff24m2_0:
  4114                                  	; 01/12/2024
  4115                                  	; edi = audio buffer address
  4116 00001A35 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4117                                          ;mov	edx, [loadsize]
  4118                                  
  4119                                  	; esi = buffer address
  4120                                  	;; edx = buffer size
  4121                                  
  4122                                  	; load file into memory
  4123                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001A3A 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001A40 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001A42 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001A48 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001A4D CD40                <1>  int 40h
  4124 00001A4F 723A                    	jc	short lff24m2_7 ; error !
  4125                                  
  4126                                  	; 01/12/2024
  4127 00001A51 A3[BC860000]            	mov	[count], eax
  4128                                  	;;;
  4129                                  	; 29/05/2024
  4130                                  	;mov	edi, [audio_buffer]
  4131                                  	;;;
  4132 00001A56 D1E8                    	shr	eax, 1
  4133 00001A58 7505                    	jnz	short lff24m2_8
  4134 00001A5A E9EDF8FFFF              	jmp	lff24_eof
  4135                                  
  4136                                  lff24m2_8:
  4137 00001A5F 89C1                    	mov	ecx, eax  ; word count
  4138                                  lff24m2_1:
  4139 00001A61 66AD                    	lodsw
  4140 00001A63 66AB                    	stosw		; original sample (left channel)
  4141 00001A65 66AB                    	stosw		; original sample (right channel)
  4142 00001A67 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4143                                  	;mov	[previous_val], ax
  4144                                  	;mov	ebx, eax
  4145                                  	; 02/02/2025
  4146 00001A6A 668B1E                  	mov	bx, [esi]
  4147 00001A6D 49                      	dec	ecx
  4148 00001A6E 7502                    	jnz	short lff24m2_2
  4149                                  	;xor	eax, eax
  4150 00001A70 31DB                    	xor	ebx, ebx
  4151                                  lff24m2_2:
  4152                                  	; 02/02/2025
  4153 00001A72 80C780                  	add	bh, 80h ; convert sound level 0 to 65535 format
  4154                                  	;add	ah, 80h
  4155                                  	;mov	ebp, eax	; [next_val]
  4156                                  	;add	ax, [previous_val]
  4157                                  	; ax = [previous_val]
  4158                                  	; bx = [next_val]
  4159 00001A75 6601D8                  	add	ax, bx
  4160 00001A78 66D1D8                  	rcr	ax, 1
  4161 00001A7B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4162 00001A7E 66AB                    	stosw		; this is interpolated sample (L)
  4163 00001A80 66AB                    	stosw		; this is interpolated sample (R)
  4164                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  4165 00001A82 09C9                    	or	ecx, ecx
  4166 00001A84 75DB                    	jnz	short lff24m2_1
  4167 00001A86 E9A9F8FFFF              	jmp	lff24_3
  4168                                  
  4169                                  lff24m2_7:
  4170                                  lff24s2_7:
  4171 00001A8B E9C5F8FFFF              	jmp	lff24_5  ; error
  4172                                  
  4173                                  load_24khz_stereo_16_bit:
  4174                                  	; 02/02/2025
  4175                                  	; 16/11/2023
  4176                                  	; 15/11/2023
  4177 00001A90 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4178                                  					; last of the file?
  4179 00001A97 7402                    	jz	short lff24s2_0		; no
  4180 00001A99 F9                      	stc
  4181 00001A9A C3                      	retn
  4182                                  
  4183                                  lff24s2_0:
  4184                                  	; 01/12/2024
  4185                                  	; edi = audio buffer address
  4186 00001A9B BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4187                                          ;mov	edx, [loadsize]
  4188                                  
  4189                                  	; esi = buffer address
  4190                                  	;; edx = buffer size
  4191                                  
  4192                                  	; load file into memory
  4193                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001AA0 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001AA6 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001AA8 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001AAE B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001AB3 CD40                <1>  int 40h
  4194 00001AB5 72D4                    	jc	short lff24s2_7 ; error !
  4195                                  
  4196                                  	; 01/12/2024
  4197 00001AB7 A3[BC860000]            	mov	[count], eax
  4198                                  	;;;
  4199                                  	; 29/05/2024
  4200                                  	;mov	edi, [audio_buffer]
  4201                                  	;;;
  4202 00001ABC C1E802                  	shr	eax, 2
  4203 00001ABF 7505                    	jnz	short lff24s2_8
  4204 00001AC1 E986F8FFFF              	jmp	lff24_eof
  4205                                  
  4206                                  lff24s2_8:
  4207 00001AC6 89C1                    	mov	ecx, eax  ; dword count
  4208                                  lff24s2_1:
  4209 00001AC8 66AD                    	lodsw
  4210 00001ACA 66AB                    	stosw		; original sample (L)
  4211 00001ACC 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  4212 00001ACF 66A3[F3290000]          	mov	[previous_val_l], ax
  4213 00001AD5 66AD                    	lodsw
  4214 00001AD7 66AB                    	stosw		; original sample (R)
  4215 00001AD9 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  4216                                  	;mov	[previous_val_r], ax
  4217 00001ADC 89C3                    	mov	ebx, eax
  4218                                  	; 02/02/2025
  4219 00001ADE 668B06                  	mov	ax, [esi]
  4220 00001AE1 668B5602                	mov	dx, [esi+2]
  4221                                  	; 16/11/2023
  4222 00001AE5 49                      	dec	ecx
  4223 00001AE6 7504                    	jnz	short lff24s2_2
  4224 00001AE8 31D2                    	xor	edx, edx
  4225 00001AEA 31C0                    	xor	eax, eax
  4226                                  lff24s2_2:
  4227 00001AEC 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  4228                                  	;;mov	[next_val_l], ax
  4229                                  	;mov	ebp, eax
  4230 00001AEF 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  4231                                  	;mov	[next_val_r], dx
  4232 00001AF2 660305[F3290000]        	add	ax, [previous_val_l]
  4233 00001AF9 66D1D8                  	rcr	ax, 1
  4234 00001AFC 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  4235 00001AFF 66AB                    	stosw		; this is interpolated sample (L)
  4236                                  	;mov	ax, [next_val_r]
  4237 00001B01 89D0                    	mov	eax, edx
  4238                                  	;add	ax, [previous_val_r]
  4239 00001B03 6601D8                  	add	ax, bx
  4240 00001B06 66D1D8                  	rcr	ax, 1
  4241 00001B09 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4242 00001B0C 66AB                    	stosw		; this is interpolated sample (R)
  4243                                  	
  4244                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  4245 00001B0E 09C9                    	or	ecx, ecx
  4246 00001B10 75B6                    	jnz	short lff24s2_1
  4247 00001B12 E91DF8FFFF              	jmp	lff24_3
  4248                                  
  4249                                  ; .....................
  4250                                  
  4251                                  load_32khz_mono_8_bit:
  4252                                  	; 02/02/2025
  4253                                  	; 15/11/2023
  4254 00001B17 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4255                                  					; last of the file?
  4256 00001B1E 7402                    	jz	short lff32m_0		; no
  4257 00001B20 F9                      	stc
  4258 00001B21 C3                      	retn
  4259                                  
  4260                                  lff32m_0:
  4261                                  	; 01/12/2024
  4262                                  	; edi = audio buffer address
  4263 00001B22 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4264                                          ;mov	edx, [loadsize]
  4265                                  
  4266                                  	; esi = buffer address
  4267                                  	;; edx = buffer size
  4268                                  
  4269                                  	; load file into memory
  4270                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001B27 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001B2D 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001B2F 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001B35 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001B3A CD40                <1>  int 40h
  4271 00001B3C 7247                    	jc	short lff32m_7 ; error !
  4272                                  
  4273                                  	; 01/12/2024
  4274 00001B3E A3[BC860000]            	mov	[count], eax
  4275                                  	;;;
  4276                                  	; 29/05/2024
  4277                                  	;mov	edi, [audio_buffer]
  4278                                  	;;;
  4279 00001B43 21C0                    	and	eax, eax
  4280 00001B45 7505                    	jnz	short lff32m_8
  4281 00001B47 E900F8FFFF              	jmp	lff32_eof
  4282                                  
  4283                                  lff32m_8:
  4284 00001B4C 89C1                    	mov	ecx, eax	; byte count
  4285                                  lff32m_1:
  4286 00001B4E AC                      	lodsb
  4287                                  	;mov	[previous_val], al
  4288 00001B4F 88C3                    	mov	bl, al
  4289 00001B51 2C80                    	sub	al, 80h
  4290 00001B53 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4291 00001B57 66AB                    	stosw		; original sample (left channel)
  4292 00001B59 66AB                    	stosw		; original sample (right channel)
  4293                                  	;xor	eax, eax
  4294                                  	; 02/02/2025
  4295 00001B5B 8A06                    	mov	al, [esi]
  4296 00001B5D 49                      	dec	ecx
  4297 00001B5E 7502                    	jnz	short lff32m_2
  4298 00001B60 B080                    	mov	al, 80h
  4299                                  lff32m_2:
  4300                                  	;;mov	[next_val], al
  4301                                  	;mov	bh, al
  4302                                  	;add	al, [previous_val]
  4303 00001B62 00D8                    	add	al, bl
  4304 00001B64 D0D8                    	rcr	al, 1
  4305 00001B66 2C80                    	sub	al, 80h
  4306 00001B68 66C1E008                	shl	ax, 8
  4307 00001B6C 66AB                    	stosw		; this is interpolated sample (L)
  4308 00001B6E 66AB                    	stosw		; this is interpolated sample (R)
  4309                                  	
  4310                                  	; different than 8-16-24 kHZ !
  4311                                  	; 'original-interpolated-original' trio samples
  4312 00001B70 E30E                    	jecxz	lff32m_3
  4313                                  
  4314 00001B72 AC                      	lodsb
  4315 00001B73 2C80                    	sub	al, 80h
  4316 00001B75 66C1E008                	shl	ax, 8
  4317 00001B79 66AB                    	stosw		; original sample (left channel)
  4318 00001B7B 66AB                    	stosw		; original sample (right channel)
  4319                                  
  4320                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  4321 00001B7D 49                      	dec	ecx
  4322 00001B7E 75CE                    	jnz	short lff32m_1
  4323                                  lff32m_3:
  4324 00001B80 E9AFF7FFFF              	jmp	lff32_3
  4325                                  
  4326                                  lff32m_7:
  4327                                  lff32s_7:
  4328 00001B85 E9CBF7FFFF              	jmp	lff32_5  ; error
  4329                                  
  4330                                  load_32khz_stereo_8_bit:
  4331                                  	; 02/02/2025
  4332                                  	; 15/11/2023
  4333 00001B8A F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4334                                  					; last of the file?
  4335 00001B91 7402                    	jz	short lff32s_0		; no
  4336 00001B93 F9                      	stc
  4337 00001B94 C3                      	retn
  4338                                  
  4339                                  lff32s_0:
  4340                                  	; 01/12/2024
  4341                                  	; edi = audio buffer address
  4342 00001B95 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4343                                          ;mov	edx, [loadsize]
  4344                                  
  4345                                  	; esi = buffer address
  4346                                  	;; edx = buffer size
  4347                                  
  4348                                  	; load file into memory
  4349                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001B9A 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001BA0 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001BA2 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001BA8 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001BAD CD40                <1>  int 40h
  4350 00001BAF 72D4                    	jc	short lff32s_7 ; error !
  4351                                  
  4352                                  	; 01/12/2024
  4353 00001BB1 A3[BC860000]            	mov	[count], eax
  4354                                  	;;;
  4355                                  	; 29/05/2024
  4356                                  	;mov	edi, [audio_buffer]
  4357                                  	;;;
  4358 00001BB6 D1E8                    	shr	eax, 1
  4359 00001BB8 7505                    	jnz	short lff32s_8
  4360 00001BBA E98DF7FFFF              	jmp	lff32_eof
  4361                                  
  4362                                  lff32s_8:
  4363 00001BBF 89C1                    	mov	ecx, eax  ; word count
  4364                                  lff32s_1:
  4365 00001BC1 AC                      	lodsb
  4366 00001BC2 A2[F3290000]            	mov	[previous_val_l], al
  4367 00001BC7 2C80                    	sub	al, 80h
  4368 00001BC9 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4369 00001BCD 66AB                    	stosw		; original sample (L)
  4370 00001BCF AC                      	lodsb
  4371 00001BD0 A2[F5290000]            	mov	[previous_val_r], al
  4372 00001BD5 2C80                    	sub	al, 80h
  4373 00001BD7 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4374 00001BDB 66AB                    	stosw		; original sample (R)
  4375                                  
  4376                                  	;xor	eax, eax
  4377                                  	; 02/02/2025
  4378 00001BDD 668B06                  	mov	ax, [esi]
  4379 00001BE0 49                      	dec	ecx
  4380 00001BE1 7504                    	jnz	short lff32s_2
  4381                                  		; convert 8 bit sample to 16 bit sample
  4382 00001BE3 66B88080                	mov	ax, 8080h
  4383                                  lff32s_2:
  4384                                  	;;mov	[next_val_l], al
  4385                                  	;;mov	[next_val_r], ah
  4386                                  	;mov	bx, ax
  4387 00001BE7 88E7                    	mov	bh, ah
  4388 00001BE9 0205[F3290000]          	add	al, [previous_val_l]
  4389 00001BEF D0D8                    	rcr	al, 1
  4390                                  	;mov	dl, al
  4391 00001BF1 2C80                    	sub	al, 80h
  4392 00001BF3 66C1E008                	shl	ax, 8
  4393 00001BF7 66AB                    	stosw		; this is interpolated sample (L)
  4394 00001BF9 88F8                    	mov	al, bh	; [next_val_r]
  4395 00001BFB 0205[F5290000]          	add	al, [previous_val_r]
  4396 00001C01 D0D8                    	rcr	al, 1
  4397                                  	;mov	dh, al
  4398 00001C03 2C80                    	sub	al, 80h
  4399 00001C05 66C1E008                	shl	ax, 8
  4400 00001C09 66AB                    	stosw		; this is interpolated sample (R)
  4401                                  
  4402                                  	; different than 8-16-24 kHZ !
  4403                                  	; 'original-interpolated-original' trio samples
  4404 00001C0B E315                    	jecxz	lff32s_3
  4405                                  
  4406 00001C0D AC                      	lodsb
  4407 00001C0E 2C80                    	sub	al, 80h
  4408 00001C10 66C1E008                	shl	ax, 8
  4409 00001C14 66AB                    	stosw		; original sample (left channel)
  4410                                  
  4411 00001C16 AC                      	lodsb
  4412 00001C17 2C80                    	sub	al, 80h
  4413 00001C19 66C1E008                	shl	ax, 8
  4414 00001C1D 66AB                    	stosw		; original sample (right channel)
  4415                                  		
  4416                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  4417 00001C1F 49                      	dec	ecx
  4418 00001C20 759F                    	jnz	short lff32s_1
  4419                                  lff32s_3:
  4420 00001C22 E90DF7FFFF              	jmp	lff32_3
  4421                                  
  4422                                  load_32khz_mono_16_bit:
  4423                                  	; 02/02/2025
  4424                                  	; 15/11/2023
  4425 00001C27 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4426                                  					; last of the file?
  4427 00001C2E 7402                    	jz	short lff32m2_0		; no
  4428 00001C30 F9                      	stc
  4429 00001C31 C3                      	retn
  4430                                  
  4431                                  lff32m2_0:
  4432                                  	; 01/12/2024
  4433                                  	; edi = audio buffer address
  4434 00001C32 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4435                                          ;mov	edx, [loadsize]
  4436                                  
  4437                                  	; esi = buffer address
  4438                                  	;; edx = buffer size
  4439                                  
  4440                                  	; load file into memory
  4441                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001C37 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001C3D 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001C3F 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001C45 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001C4A CD40                <1>  int 40h
  4442 00001C4C 7241                    	jc	short lff32m2_7 ; error !
  4443                                  
  4444                                  	; 01/12/2024
  4445 00001C4E A3[BC860000]            	mov	[count], eax
  4446                                  	;;;
  4447                                  	; 29/05/2024
  4448                                  	;mov	edi, [audio_buffer]
  4449                                  	;;;
  4450 00001C53 D1E8                    	shr	eax, 1
  4451 00001C55 7505                    	jnz	short lff32m2_8
  4452 00001C57 E9F0F6FFFF              	jmp	lff32_eof
  4453                                  
  4454                                  lff32m2_8:
  4455 00001C5C 89C1                    	mov	ecx, eax  ; word count
  4456                                  lff32m2_1:
  4457 00001C5E 66AD                    	lodsw
  4458 00001C60 66AB                    	stosw		; original sample (left channel)
  4459 00001C62 66AB                    	stosw		; original sample (right channel)
  4460 00001C64 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4461                                  	;mov	[previous_val], ax
  4462                                  	;mov	ebx, eax
  4463                                  	;xor	eax, eax
  4464                                  	; 02/02/2025
  4465                                  	;mov	ax, [esi]
  4466 00001C67 668B1E                  	mov	bx, [esi]
  4467 00001C6A 49                      	dec	ecx
  4468 00001C6B 7502                    	jnz	short lff32m2_2
  4469 00001C6D 31DB                    	xor	ebx, ebx
  4470                                  lff32m2_2:
  4471                                  	; 02/02/2025
  4472 00001C6F 80C780                  	add	bh, 80h ; convert sound level 0 to 65535 format
  4473                                  	;add	ah, 80h
  4474                                  	;mov	ebp, eax ; [next_val]
  4475                                  	;add	ax, [previous_val]
  4476                                  	; ax = [previous_val]
  4477                                  	; bx = [next_val]
  4478 00001C72 6601D8                  	add	ax, bx
  4479 00001C75 66D1D8                  	rcr	ax, 1
  4480 00001C78 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4481 00001C7B 66AB                    	stosw		; this is interpolated sample (L)
  4482 00001C7D 66AB                    	stosw		; this is interpolated sample (R)
  4483                                  
  4484                                  	; different than 8-16-24 kHZ !
  4485                                  	; 'original-interpolated-original' trio samples 
  4486 00001C7F E309                    	jecxz	lff32m2_3
  4487                                  
  4488 00001C81 66AD                    	lodsw
  4489 00001C83 66AB                    	stosw		; original sample (left channel)
  4490 00001C85 66AB                    	stosw		; original sample (right channel)
  4491                                  
  4492                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  4493 00001C87 49                      	dec	ecx
  4494 00001C88 75D4                    	jnz	short lff32m2_1
  4495                                  lff32m2_3:
  4496 00001C8A E9A5F6FFFF              	jmp	lff32_3
  4497                                  
  4498                                  lff32m2_7:
  4499                                  lff32s2_7:
  4500 00001C8F E9C1F6FFFF              	jmp	lff32_5  ; error
  4501                                  
  4502                                  load_32khz_stereo_16_bit:
  4503                                  	; 02/02/2025
  4504                                  	; 16/11/2023
  4505                                  	; 15/11/2023
  4506 00001C94 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4507                                  					; last of the file?
  4508 00001C9B 7402                    	jz	short lff32s2_0		; no
  4509 00001C9D F9                      	stc
  4510 00001C9E C3                      	retn
  4511                                  
  4512                                  lff32s2_0:
  4513                                  	; 01/12/2024
  4514                                  	; edi = audio buffer address
  4515 00001C9F BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4516                                          ;mov	edx, [loadsize]
  4517                                  
  4518                                  	; esi = buffer address
  4519                                  	;; edx = buffer size
  4520                                  
  4521                                  	; load file into memory
  4522                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001CA4 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001CAA 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001CAC 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001CB2 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001CB7 CD40                <1>  int 40h
  4523 00001CB9 72D4                    	jc	short lff32s2_7 ; error !
  4524                                  
  4525                                  	; 01/12/2024
  4526 00001CBB A3[BC860000]            	mov	[count], eax
  4527                                  	;;;
  4528                                  	; 29/05/2024
  4529                                  	;mov	edi, [audio_buffer]
  4530                                  	;;;
  4531 00001CC0 C1E802                  	shr	eax, 2
  4532 00001CC3 7505                    	jnz	short lff32s2_8
  4533 00001CC5 E982F6FFFF              	jmp	lff32_eof
  4534                                  
  4535                                  lff32s2_8:
  4536 00001CCA 89C1                    	mov	ecx, eax ; dword count
  4537                                  lff32s2_1:
  4538 00001CCC 66AD                    	lodsw
  4539 00001CCE 66AB                    	stosw		; original sample (L)
  4540 00001CD0 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  4541 00001CD3 66A3[F3290000]          	mov	[previous_val_l], ax
  4542 00001CD9 66AD                    	lodsw
  4543 00001CDB 66AB                    	stosw		; original sample (R)
  4544 00001CDD 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  4545                                  	;mov	[previous_val_r], ax
  4546 00001CE0 89C3                    	mov	ebx, eax
  4547                                  	; 02/02/2025
  4548 00001CE2 668B06                  	mov	ax, [esi]
  4549 00001CE5 668B5602                	mov	dx, [esi+2]
  4550                                  	; 16/11/2023
  4551 00001CE9 49                      	dec	ecx
  4552 00001CEA 7504                    	jnz	short lff32s2_2
  4553 00001CEC 31D2                    	xor	edx, edx
  4554 00001CEE 31C0                    	xor	eax, eax
  4555                                  lff32s2_2:
  4556 00001CF0 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  4557                                  	;;mov	[next_val_l], ax
  4558                                  	;mov	ebp, eax
  4559 00001CF3 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  4560                                  	;mov	[next_val_r], dx
  4561 00001CF6 660305[F3290000]        	add	ax, [previous_val_l]
  4562 00001CFD 66D1D8                  	rcr	ax, 1
  4563 00001D00 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  4564 00001D03 66AB                    	stosw		; this is interpolated sample (L)
  4565                                  	;mov	ax, [next_val_r]
  4566 00001D05 89D0                    	mov	eax, edx
  4567                                  	;add	ax, [previous_val_r]
  4568 00001D07 6601D8                  	add	ax, bx
  4569 00001D0A 66D1D8                  	rcr	ax, 1
  4570 00001D0D 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4571 00001D10 66AB                    	stosw		; this is interpolated sample (R)
  4572                                  
  4573                                  	; different than 8-16-24 kHZ !
  4574                                  	; 'original-interpolated-original' trio samples
  4575 00001D12 E30B                    	jecxz	lff32s2_3
  4576                                  
  4577 00001D14 66AD                    	lodsw
  4578 00001D16 66AB                    	stosw	; original sample (L)
  4579 00001D18 66AD                    	lodsw
  4580 00001D1A 66AB                    	stosw	; original sample (R)
  4581                                  	
  4582                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  4583 00001D1C 49                      	dec	ecx
  4584 00001D1D 75AD                    	jnz	short lff32s2_1
  4585                                  lff32s2_3:
  4586 00001D1F E910F6FFFF              	jmp	lff32_3
  4587                                  
  4588                                  ; .....................
  4589                                  
  4590                                  load_22khz_mono_8_bit:
  4591                                  	; 02/02/2025
  4592                                  	; 16/11/2023
  4593 00001D24 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4594                                  					; last of the file?
  4595 00001D2B 7402                    	jz	short lff22m_0		; no
  4596 00001D2D F9                      	stc
  4597 00001D2E C3                      	retn
  4598                                  
  4599                                  lff22m_0:
  4600                                  	; 01/12/2024
  4601                                  	; edi = audio buffer address
  4602 00001D2F BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4603                                          ;mov	edx, [loadsize]
  4604                                  
  4605                                  	; esi = buffer address
  4606                                  	;; edx = buffer size
  4607                                  
  4608                                  	; load file into memory
  4609                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001D34 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001D3A 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001D3C 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001D42 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001D47 CD40                <1>  int 40h
  4610 00001D49 725D                    	jc	short lff22m_7 ; error !
  4611                                  
  4612                                  	; 01/12/2024
  4613 00001D4B A3[BC860000]            	mov	[count], eax
  4614                                  	;;;
  4615                                  	; 29/05/2024
  4616                                  	;mov	edi, [audio_buffer]
  4617                                  	;;;
  4618 00001D50 21C0                    	and	eax, eax
  4619 00001D52 7505                    	jnz	short lff22m_8
  4620 00001D54 E9F3F5FFFF              	jmp	lff22_eof
  4621                                  
  4622                                  lff22m_8:
  4623 00001D59 89C1                    	mov	ecx, eax	; byte count
  4624                                  lff22m_9:
  4625 00001D5B BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  4626 00001D60 C605[FB290000]03        	mov	byte [faz], 3  ; 3 steps/phases
  4627                                  lff22m_1:
  4628                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  4629 00001D67 AC                      	lodsb
  4630                                  	; 02/02/2025
  4631 00001D68 8A16                    	mov	dl, [esi]
  4632 00001D6A 49                      	dec	ecx
  4633 00001D6B 7502                    	jnz	short lff22m_2_1
  4634 00001D6D B280                    	mov	dl, 80h
  4635                                  lff22m_2_1:	
  4636                                  	; al = [previous_val]
  4637                                  	; dl = [next_val]
  4638 00001D6F E835070000              	call	interpolating_3_8bit_mono ; 1 of 17
  4639 00001D74 E32D                    	jecxz	lff22m_3
  4640                                  lff22m_2_2:
  4641 00001D76 AC                      	lodsb
  4642                                  	; 02/02/2025
  4643 00001D77 8A16                    	mov	dl, [esi]
  4644 00001D79 49                      	dec	ecx
  4645 00001D7A 7502                    	jnz	short lff22m_2_3
  4646 00001D7C B280                    	mov	dl, 80h
  4647                                  lff22m_2_3:
  4648 00001D7E E8B0070000               	call	interpolating_2_8bit_mono ; 2 of 17 .. 6 of 17
  4649 00001D83 E31E                    	jecxz	lff22m_3
  4650 00001D85 4D                      	dec	ebp
  4651 00001D86 75EE                    	jnz	short lff22m_2_2
  4652                                  
  4653 00001D88 A0[FB290000]            	mov	al, [faz]
  4654 00001D8D FEC8                    	dec	al
  4655 00001D8F 74CA                    	jz	short lff22m_9
  4656 00001D91 FE0D[FB290000]          	dec	byte [faz]
  4657 00001D97 BD04000000              	mov	ebp, 4
  4658 00001D9C FEC8                    	dec	al
  4659 00001D9E 75C7                    	jnz	short lff22m_1 ; 3:2:2:2:2 ; 7-11 of 17
  4660 00001DA0 45                      	inc	ebp ; 5
  4661 00001DA1 EBC4                    	jmp	short lff22m_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  4662                                  
  4663                                  lff22m_3:
  4664                                  lff22s_3:
  4665 00001DA3 E98CF5FFFF              	jmp	lff22_3	; padfill
  4666                                  		; (put zeros in the remain words of the buffer)
  4667                                  lff22m_7:
  4668                                  lff22s_7:
  4669 00001DA8 E9A8F5FFFF              	jmp	lff22_5  ; error
  4670                                  
  4671                                  load_22khz_stereo_8_bit:
  4672                                  	; 02/02/2025
  4673                                  	; 16/11/2023
  4674 00001DAD F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4675                                  					; last of the file?
  4676 00001DB4 7402                    	jz	short lff22s_0		; no
  4677 00001DB6 F9                      	stc
  4678 00001DB7 C3                      	retn
  4679                                  
  4680                                  lff22s_0:
  4681                                  	; 01/12/2024
  4682                                  	; edi = audio buffer address
  4683 00001DB8 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4684                                          ;mov	edx, [loadsize]
  4685                                  
  4686                                  	; esi = buffer address
  4687                                  	;; edx = buffer size
  4688                                  
  4689                                  	; load file into memory
  4690                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001DBD 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001DC3 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001DC5 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001DCB B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001DD0 CD40                <1>  int 40h
  4691 00001DD2 72D4                    	jc	short lff22s_7 ; error !
  4692                                  
  4693                                  	; 01/12/2024
  4694 00001DD4 A3[BC860000]            	mov	[count], eax
  4695                                  	;;;
  4696                                  	; 29/05/2024
  4697                                  	;mov	edi, [audio_buffer]
  4698                                  	;;;
  4699 00001DD9 D1E8                    	shr	eax, 1
  4700 00001DDB 7505                    	jnz	short lff22s_8
  4701 00001DDD E96AF5FFFF              	jmp	lff22_eof
  4702                                  
  4703                                  lff22s_8:
  4704 00001DE2 89C1                    	mov	ecx, eax	; word count
  4705                                  lff22s_9:
  4706 00001DE4 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  4707 00001DE9 C605[FB290000]03        	mov	byte [faz], 3  ; 3 steps/phase
  4708                                  lff22s_1:
  4709                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  4710 00001DF0 66AD                    	lodsw
  4711                                  	; 02/02/2025
  4712 00001DF2 668B16                  	mov	dx, [esi]
  4713 00001DF5 49                      	dec	ecx
  4714 00001DF6 7504                    	jnz	short lff22s_2_1
  4715 00001DF8 66BA8080                	mov	dx, 8080h
  4716                                  lff22s_2_1:	
  4717                                  	; al = [previous_val_l]
  4718                                  	; ah = [previous_val_r]
  4719                                  	; dl = [next_val_l]
  4720                                  	; dh = [next_val_r]
  4721 00001DFC E8DB060000              	call	interpolating_3_8bit_stereo ; 1 of 17
  4722 00001E01 E3A0                    	jecxz	lff22s_3
  4723                                  lff22s_2_2:
  4724 00001E03 66AD                    	lodsw
  4725                                  	; 02/02/2025
  4726 00001E05 668B16                  	mov	dx, [esi]
  4727 00001E08 49                      	dec	ecx
  4728 00001E09 7504                    	jnz	short lff22s_2_3
  4729 00001E0B 66BA8080                	mov	dx, 8080h
  4730                                  lff22s_2_3:
  4731 00001E0F E83C070000               	call	interpolating_2_8bit_stereo ; 2 of 17 .. 6 of 17
  4732 00001E14 E38D                    	jecxz	lff22s_3
  4733 00001E16 4D                      	dec	ebp
  4734 00001E17 75EA                    	jnz	short lff22s_2_2
  4735                                  
  4736 00001E19 A0[FB290000]            	mov	al, [faz]
  4737 00001E1E FEC8                    	dec	al
  4738 00001E20 74C2                    	jz	short lff22s_9
  4739 00001E22 FE0D[FB290000]          	dec	byte [faz]
  4740 00001E28 BD04000000              	mov	ebp, 4
  4741 00001E2D FEC8                    	dec	al
  4742 00001E2F 75BF                    	jnz	short lff22s_1 ; 3:2:2:2:2 ; 7-11 of 17
  4743 00001E31 45                      	inc	ebp ; 5
  4744 00001E32 EBBC                    	jmp	short lff22s_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  4745                                  
  4746                                  load_22khz_mono_16_bit:
  4747                                  	; 02/02/2025
  4748                                  	; 16/11/2023
  4749 00001E34 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4750                                  					; last of the file?
  4751 00001E3B 7402                    	jz	short lff22m2_0		; no
  4752 00001E3D F9                      	stc
  4753 00001E3E C3                      	retn
  4754                                  
  4755                                  lff22m2_0:
  4756                                  	; 01/12/2024
  4757                                  	; edi = audio buffer address
  4758 00001E3F BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4759                                          ;mov	edx, [loadsize]
  4760                                  
  4761                                  	; esi = buffer address
  4762                                  	;; edx = buffer size
  4763                                  
  4764                                  	; load file into memory
  4765                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001E44 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001E4A 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001E4C 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001E52 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001E57 CD40                <1>  int 40h
  4766 00001E59 7261                    	jc	short lff22m2_7 ; error !
  4767                                  
  4768                                  	; 01/12/2024
  4769 00001E5B A3[BC860000]            	mov	[count], eax
  4770                                  	;;;
  4771                                  	; 29/05/2024
  4772                                  	;mov	edi, [audio_buffer]
  4773                                  	;;;
  4774 00001E60 D1E8                    	shr	eax, 1
  4775 00001E62 7505                    	jnz	short lff22m2_8
  4776 00001E64 E9E3F4FFFF              	jmp	lff22_eof
  4777                                  
  4778                                  lff22m2_8:
  4779 00001E69 89C1                    	mov	ecx, eax	; word count
  4780                                  lff22m2_9:
  4781 00001E6B BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  4782 00001E70 C605[FB290000]03        	mov	byte [faz], 3  ; 3 steps/phases
  4783                                  lff22m2_1:
  4784                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  4785 00001E77 66AD                    	lodsw
  4786                                  	; 02/02/2025
  4787 00001E79 668B16                  	mov	dx, [esi]
  4788 00001E7C 49                      	dec	ecx
  4789 00001E7D 7502                    	jnz	short lff22m2_2_1
  4790 00001E7F 31D2                    	xor	edx, edx
  4791                                  lff22m2_2_1:	
  4792                                  	; ax = [previous_val]
  4793                                  	; dx = [next_val]
  4794 00001E81 E8FB060000              	call	interpolating_3_16bit_mono ; 1 of 17
  4795 00001E86 E32F                    	jecxz	lff22m2_3
  4796                                  lff22m2_2_2:
  4797 00001E88 66AD                    	lodsw
  4798                                  	; 02/02/2025
  4799 00001E8A 668B16                  	mov	dx, [esi]
  4800 00001E8D 49                      	dec	ecx
  4801 00001E8E 7502                    	jnz	short lff22m2_2_3
  4802 00001E90 31D2                    	xor	edx, edx
  4803                                  lff22m2_2_3:
  4804 00001E92 E87D070000               	call	interpolating_2_16bit_mono ; 2 of 17 .. 6 of 17
  4805 00001E97 E31E                    	jecxz	lff22m2_3
  4806 00001E99 4D                      	dec	ebp
  4807 00001E9A 75EC                    	jnz	short lff22m2_2_2
  4808                                  
  4809 00001E9C A0[FB290000]            	mov	al, [faz]
  4810 00001EA1 FEC8                    	dec	al
  4811 00001EA3 74C6                    	jz	short lff22m2_9
  4812 00001EA5 FE0D[FB290000]          	dec	byte [faz]
  4813 00001EAB BD04000000              	mov	ebp, 4
  4814 00001EB0 FEC8                    	dec	al
  4815 00001EB2 75C3                    	jnz	short lff22m2_1 ; 3:2:2:2:2 ; 7-11 of 17
  4816 00001EB4 45                      	inc	ebp ; 5
  4817 00001EB5 EBC0                    	jmp	short lff22m2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  4818                                  
  4819                                  lff22m2_3:
  4820                                  lff22s2_3:
  4821 00001EB7 E978F4FFFF              	jmp	lff22_3	; padfill
  4822                                  		; (put zeros in the remain words of the buffer)
  4823                                  lff22m2_7:
  4824                                  lff22s2_7:
  4825 00001EBC E994F4FFFF              	jmp	lff22_5  ; error
  4826                                  
  4827                                  load_22khz_stereo_16_bit:
  4828                                  	; 16/11/2023
  4829 00001EC1 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4830                                  					; last of the file?
  4831 00001EC8 7402                    	jz	short lff22s2_0		; no
  4832 00001ECA F9                      	stc
  4833 00001ECB C3                      	retn
  4834                                  
  4835                                  lff22s2_0:
  4836                                  	; 01/12/2024
  4837                                  	; edi = audio buffer address
  4838 00001ECC BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4839                                          ;mov	edx, [loadsize]
  4840                                  
  4841                                  	; esi = buffer address
  4842                                  	;; edx = buffer size
  4843                                  
  4844                                  	; load file into memory
  4845                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001ED1 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001ED7 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001ED9 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001EDF B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001EE4 CD40                <1>  int 40h
  4846 00001EE6 72D4                    	jc	short lff22s2_7 ; error !
  4847                                  
  4848                                  	; 01/12/2024
  4849 00001EE8 A3[BC860000]            	mov	[count], eax
  4850                                  	;;;
  4851                                  	; 29/05/2024
  4852                                  	;mov	edi, [audio_buffer]
  4853                                  	;;;
  4854 00001EED C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  4855 00001EF0 7505                    	jnz	short lff22s2_8
  4856 00001EF2 E955F4FFFF              	jmp	lff22_eof
  4857                                  
  4858                                  lff22s2_8:
  4859 00001EF7 89C1                    	mov	ecx, eax	; dword count
  4860                                  lff22s2_9:
  4861 00001EF9 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  4862 00001EFE C605[FB290000]03        	mov	byte [faz], 3  ; 3 steps/phase
  4863                                  lff22s2_1:
  4864                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  4865 00001F05 66AD                    	lodsw
  4866 00001F07 89C3                    	mov	ebx, eax
  4867 00001F09 66AD                    	lodsw
  4868 00001F0B 8B16                    	mov	edx, [esi]
  4869 00001F0D 668915[F7290000]        	mov	[next_val_l], dx
  4870                                  	; 26/11/2023
  4871 00001F14 C1EA10                  	shr	edx, 16
  4872 00001F17 49                      	dec	ecx
  4873 00001F18 7509                    	jnz	short lff22s2_2_1
  4874 00001F1A 31D2                    	xor	edx, edx ; 0
  4875 00001F1C 668915[F7290000]        	mov	[next_val_l], dx
  4876                                  lff22s2_2_1:
  4877                                  	; bx = [previous_val_l]
  4878                                  	; ax = [previous_val_r]
  4879                                  	; [next_val_l]
  4880                                  	; dx = [next_val_r]
  4881 00001F23 E889060000              	call	interpolating_3_16bit_stereo ; 1 of 17
  4882 00001F28 E38D                    	jecxz	lff22s2_3
  4883                                  lff22s2_2_2:
  4884 00001F2A 66AD                    	lodsw
  4885 00001F2C 89C3                    	mov	ebx, eax
  4886 00001F2E 66AD                    	lodsw
  4887 00001F30 8B16                    	mov	edx, [esi]
  4888 00001F32 668915[F7290000]        	mov	[next_val_l], dx
  4889                                  	; 26/11/2023
  4890 00001F39 C1EA10                  	shr	edx, 16
  4891 00001F3C 49                      	dec	ecx
  4892 00001F3D 7509                    	jnz	short lff22s2_2_3
  4893 00001F3F 31D2                    	xor	edx, edx ; 0
  4894 00001F41 668915[F7290000]        	mov	[next_val_l], dx
  4895                                  lff22s2_2_3:
  4896 00001F48 E8DF060000               	call	interpolating_2_16bit_stereo ; 2 of 17 .. 6 of 17
  4897 00001F4D E31E                    	jecxz	lff22s2_2_4
  4898                                  
  4899 00001F4F 4D                      	dec	ebp
  4900 00001F50 75D8                    	jnz	short lff22s2_2_2
  4901                                  
  4902 00001F52 A0[FB290000]            	mov	al, [faz]
  4903 00001F57 FEC8                    	dec	al
  4904 00001F59 749E                    	jz	short lff22s2_9
  4905 00001F5B FE0D[FB290000]          	dec	byte [faz]
  4906 00001F61 BD04000000              	mov	ebp, 4
  4907 00001F66 FEC8                    	dec	al
  4908 00001F68 759B                    	jnz	short lff22s2_1 ; 3:2:2:2:2 ; 7-11 of 17
  4909 00001F6A 45                      	inc	ebp ; 5
  4910 00001F6B EB98                    	jmp	short lff22s2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  4911                                  
  4912                                  lff22s2_2_4:
  4913                                  	; 26/11/2023
  4914 00001F6D E9C2F3FFFF              	jmp	lff22_3	; padfill
  4915                                  
  4916                                  ; .....................
  4917                                  
  4918                                  load_11khz_mono_8_bit:
  4919                                  	; 02/02/2025
  4920                                  	; 18/11/2023
  4921 00001F72 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4922                                  					; last of the file?
  4923 00001F79 7402                    	jz	short lff11m_0		; no
  4924 00001F7B F9                      	stc
  4925 00001F7C C3                      	retn
  4926                                  
  4927                                  lff11m_0:
  4928                                  	; 01/12/2024
  4929                                  	; edi = audio buffer address
  4930 00001F7D BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4931                                          ;mov	edx, [loadsize]
  4932                                  
  4933                                  	; esi = buffer address
  4934                                  	;; edx = buffer size
  4935                                  
  4936                                  	; load file into memory
  4937                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001F82 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001F88 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001F8A 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001F90 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001F95 CD40                <1>  int 40h
  4938 00001F97 7247                    	jc	short lff11m_7 ; error !
  4939                                  
  4940                                  	; 01/12/2024
  4941 00001F99 A3[BC860000]            	mov	[count], eax
  4942                                  	;;;
  4943                                  	; 29/05/2024
  4944                                  	;mov	edi, [audio_buffer]
  4945                                  	;;;
  4946 00001F9E 21C0                    	and	eax, eax
  4947 00001FA0 7505                    	jnz	short lff11m_8
  4948 00001FA2 E9A5F3FFFF              	jmp	lff11_eof
  4949                                  
  4950                                  lff11m_8:
  4951 00001FA7 89C1                    	mov	ecx, eax		; byte count
  4952                                  lff11m_9:
  4953 00001FA9 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  4954                                  lff11m_1:
  4955                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  4956 00001FAE AC                      	lodsb
  4957                                  	; 02/02/2025
  4958 00001FAF 8A16                    	mov	dl, [esi]
  4959 00001FB1 49                      	dec	ecx
  4960 00001FB2 7502                    	jnz	short lff11m_2_1
  4961 00001FB4 B280                    	mov	dl, 80h
  4962                                  lff11m_2_1:	
  4963                                  	; al = [previous_val]
  4964                                  	; dl = [next_val]
  4965 00001FB6 E8A0060000              	call	interpolating_5_8bit_mono
  4966 00001FBB E328                    	jecxz	lff11m_3
  4967                                  lff11m_2_2:
  4968 00001FBD AC                      	lodsb
  4969                                  	; 02/02/2025
  4970 00001FBE 8A16                    	mov	dl, [esi]
  4971 00001FC0 49                      	dec	ecx
  4972 00001FC1 7502                    	jnz	short lff11m_2_3
  4973 00001FC3 B280                    	mov	dl, 80h
  4974                                  lff11m_2_3:
  4975 00001FC5 E89D070000               	call	interpolating_4_8bit_mono
  4976 00001FCA E319                    	jecxz	lff11m_3
  4977                                  
  4978 00001FCC 4D                      	dec	ebp
  4979 00001FCD 74DA                    	jz	short lff11m_9
  4980                                  
  4981 00001FCF AC                      	lodsb
  4982                                  	; 02/02/2025
  4983 00001FD0 8A16                    	mov	dl, [esi]
  4984 00001FD2 49                      	dec	ecx
  4985 00001FD3 7502                    	jnz	short lff11m_2_4
  4986 00001FD5 B280                    	mov	dl, 80h
  4987                                  lff11m_2_4:
  4988 00001FD7 E88B070000              	call	interpolating_4_8bit_mono
  4989 00001FDC E307                    	jecxz	lff11m_3
  4990 00001FDE EBCE                    	jmp	short lff11m_1
  4991                                  
  4992                                  lff11m_7:
  4993                                  lff11s_7:
  4994 00001FE0 E970F3FFFF              	jmp	lff11_5  ; error
  4995                                  
  4996                                  lff11m_3:
  4997                                  lff11s_3:
  4998 00001FE5 E94AF3FFFF              	jmp	lff11_3	; padfill
  4999                                  		; (put zeros in the remain words of the buffer)
  5000                                  
  5001                                  load_11khz_stereo_8_bit:
  5002                                  	; 02/02/2025
  5003                                  	; 18/11/2023
  5004 00001FEA F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5005                                  					; last of the file?
  5006 00001FF1 7402                    	jz	short lff11s_0		; no
  5007 00001FF3 F9                      	stc
  5008 00001FF4 C3                      	retn
  5009                                  
  5010                                  lff11s_0:
  5011                                  	; 01/12/2024
  5012                                  	; edi = audio buffer address
  5013 00001FF5 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5014                                          ;mov	edx, [loadsize]
  5015                                  
  5016                                  	; esi = buffer address
  5017                                  	;; edx = buffer size
  5018                                  
  5019                                  	; load file into memory
  5020                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001FFA 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002000 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002002 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002008 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 0000200D CD40                <1>  int 40h
  5021 0000200F 72CF                    	jc	short lff11s_7 ; error !
  5022                                  
  5023                                  	; 01/12/2024
  5024 00002011 A3[BC860000]            	mov	[count], eax
  5025                                  	;;;
  5026                                  	; 29/05/2024
  5027                                  	;mov	edi, [audio_buffer]
  5028                                  	;;;
  5029 00002016 D1E8                    	shr	eax, 1
  5030 00002018 7505                    	jnz	short lff11s_8
  5031 0000201A E92DF3FFFF              	jmp	lff11_eof
  5032                                  
  5033                                  lff11s_8:
  5034 0000201F 89C1                    	mov	ecx, eax	; word count
  5035                                  lff11s_9:
  5036 00002021 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  5037                                  lff11s_1:
  5038                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  5039 00002026 66AD                    	lodsw
  5040                                  	; 02/02/2025
  5041 00002028 668B16                  	mov	dx, [esi]
  5042 0000202B 49                      	dec	ecx
  5043 0000202C 7504                    	jnz	short lff11s_2_1
  5044 0000202E 66BA8080                	mov	dx, 8080h
  5045                                  lff11s_2_1:	
  5046                                  	; al = [previous_val_l]
  5047                                  	; ah = [previous_val_r]
  5048                                  	; dl = [next_val_l]
  5049                                  	; dh = [next_val_r]
  5050 00002032 E883060000              	call	interpolating_5_8bit_stereo
  5051 00002037 E3AC                    	jecxz	lff11s_3
  5052                                  lff11s_2_2:
  5053 00002039 66AD                    	lodsw
  5054                                  	; 02/02/2025
  5055 0000203B 668B16                  	mov	dx, [esi]
  5056 0000203E 49                      	dec	ecx
  5057 0000203F 7504                    	jnz	short lff11s_2_3
  5058 00002041 66BA8080                	mov	dx, 8080h
  5059                                  lff11s_2_3:
  5060 00002045 E85C070000               	call	interpolating_4_8bit_stereo
  5061 0000204A E399                    	jecxz	lff11s_3
  5062                                  	
  5063 0000204C 4D                      	dec	ebp
  5064 0000204D 74D2                    	jz	short lff11s_9
  5065                                  
  5066 0000204F 66AD                    	lodsw
  5067                                  	; 02/02/2025
  5068 00002051 668B16                  	mov	dx, [esi]
  5069 00002054 49                      	dec	ecx
  5070 00002055 7504                    	jnz	short lff11s_2_4
  5071 00002057 66BA8080                	mov	dx, 8080h
  5072                                  lff11s_2_4:
  5073 0000205B E846070000              	call	interpolating_4_8bit_stereo
  5074 00002060 E383                    	jecxz	lff11s_3
  5075 00002062 EBC2                    	jmp	short lff11s_1
  5076                                  
  5077                                  load_11khz_mono_16_bit:
  5078                                  	; 02/02/2025
  5079                                  	; 18/11/2023
  5080 00002064 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5081                                  					; last of the file?
  5082 0000206B 7402                    	jz	short lff11m2_0		; no
  5083 0000206D F9                      	stc
  5084 0000206E C3                      	retn
  5085                                  
  5086                                  lff11m2_0:
  5087                                  	; 01/12/2024
  5088                                  	; edi = audio buffer address
  5089 0000206F BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5090                                          ;mov	edx, [loadsize]
  5091                                  
  5092                                  	; esi = buffer address
  5093                                  	;; edx = buffer size
  5094                                  
  5095                                  	; load file into memory
  5096                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002074 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 0000207A 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 0000207C 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002082 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00002087 CD40                <1>  int 40h
  5097 00002089 724D                    	jc	short lff11m2_7 ; error !
  5098                                  
  5099                                  	; 01/12/2024
  5100 0000208B A3[BC860000]            	mov	[count], eax
  5101                                  	;;;
  5102                                  	; 29/05/2024
  5103                                  	;mov	edi, [audio_buffer]
  5104                                  	;;;
  5105 00002090 D1E8                    	shr	eax, 1
  5106 00002092 7505                    	jnz	short lff11m2_8
  5107 00002094 E9B3F2FFFF              	jmp	lff11_eof
  5108                                  
  5109                                  lff11m2_8:
  5110 00002099 89C1                    	mov	ecx, eax	; word count
  5111                                  lff11m2_9:
  5112 0000209B BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  5113                                  lff11m2_1:
  5114                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  5115 000020A0 66AD                    	lodsw
  5116                                  	; 02/02/2025
  5117 000020A2 668B16                  	mov	dx, [esi]
  5118 000020A5 49                      	dec	ecx
  5119 000020A6 7502                    	jnz	short lff11m2_2_1
  5120 000020A8 31D2                    	xor	edx, edx
  5121                                  lff11m2_2_1:	
  5122                                  	; ax = [previous_val]
  5123                                  	; dx = [next_val]
  5124 000020AA E864070000              	call	interpolating_5_16bit_mono
  5125 000020AF E362                    	jecxz	lff11m2_3
  5126                                  lff11m2_2_2:
  5127 000020B1 66AD                    	lodsw
  5128                                  	; 02/02/2025
  5129 000020B3 668B16                  	mov	dx, [esi]
  5130 000020B6 49                      	dec	ecx
  5131 000020B7 7502                    	jnz	short lff11m2_2_3
  5132 000020B9 31D2                    	xor	edx, edx
  5133                                  lff11m2_2_3:
  5134 000020BB E87D080000               	call	interpolating_4_16bit_mono
  5135 000020C0 E351                    	jecxz	lff11m2_3
  5136                                  
  5137 000020C2 4D                      	dec	ebp
  5138 000020C3 74D6                    	jz	short lff11m2_9
  5139                                  
  5140 000020C5 66AD                    	lodsw
  5141                                  	; 02/02/2025
  5142 000020C7 668B16                  	mov	dx, [esi]
  5143 000020CA 49                      	dec	ecx
  5144 000020CB 7502                    	jnz	short lff11m2_2_4
  5145 000020CD 31D2                    	xor	edx, edx
  5146                                  lff11m2_2_4:
  5147 000020CF E869080000               	call	interpolating_4_16bit_mono
  5148 000020D4 E33D                    	jecxz	lff11m2_3
  5149 000020D6 EBC8                    	jmp	short lff11m2_1
  5150                                  
  5151                                  lff11m2_7:
  5152                                  lff11s2_7:
  5153 000020D8 E978F2FFFF              	jmp	lff11_5  ; error
  5154                                  
  5155                                  load_11khz_stereo_16_bit:
  5156                                  	; 17/01/2025
  5157                                  	; 18/11/2023
  5158 000020DD F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5159                                  					; last of the file?
  5160 000020E4 7402                    	jz	short lff11s2_0		; no
  5161 000020E6 F9                      	stc
  5162 000020E7 C3                      	retn
  5163                                  
  5164                                  lff11s2_0:
  5165                                  	; 01/12/2024
  5166                                  	; edi = audio buffer address
  5167 000020E8 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5168                                          ;mov	edx, [loadsize]
  5169                                  
  5170                                  	; esi = buffer address
  5171                                  	;; edx = buffer size
  5172                                  
  5173                                  	; load file into memory
  5174                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000020ED 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000020F3 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000020F5 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000020FB B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00002100 CD40                <1>  int 40h
  5175 00002102 72D4                    	jc	short lff11s2_7 ; error !
  5176                                  
  5177                                  	; 01/12/2024
  5178 00002104 A3[BC860000]            	mov	[count], eax
  5179                                  	;;;
  5180                                  	; 29/05/2024
  5181                                  	;mov	edi, [audio_buffer]
  5182                                  	;;;
  5183 00002109 C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  5184 0000210C 750A                    	jnz	short lff11s2_8
  5185 0000210E E939F2FFFF              	jmp	lff11_eof
  5186                                  
  5187                                  lff11m2_3:
  5188                                  lff11s2_3:
  5189 00002113 E91CF2FFFF              	jmp	lff11_3	; padfill
  5190                                  		; (put zeros in the remain words of the buffer)
  5191                                  
  5192                                  lff11s2_8:
  5193 00002118 89C1                    	mov	ecx, eax	; dword count
  5194                                  lff11s2_9:
  5195 0000211A BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  5196                                  lff11s2_1:
  5197                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  5198 0000211F 66AD                    	lodsw
  5199 00002121 89C3                    	mov	ebx, eax
  5200 00002123 66AD                    	lodsw
  5201 00002125 8B16                    	mov	edx, [esi]
  5202                                  	; 17/01/2025
  5203                                  	;mov	[next_val_l], edx
  5204                                  	; 26/11/2023
  5205                                  	;shr	edx, 16
  5206                                  	;mov	[next_val_r], dx
  5207 00002127 49                      	dec	ecx
  5208 00002128 7502                    	jnz	short lff11s2_2_1
  5209 0000212A 31D2                    	xor	edx, edx ; 0
  5210                                  	;mov	[next_val_l], dx
  5211                                  	;mov	[next_val_r], dx
  5212                                  lff11s2_2_1:
  5213                                  	; bx = [previous_val_l]
  5214                                  	; ax = [previous_val_r]
  5215                                  	; [next_val_l]
  5216                                  	; dx = [next_val_r]
  5217                                  	;;;
  5218                                  	; 17/01/2025 (BugFix)
  5219 0000212C 8915[F7290000]          	mov	[next_val_l], edx
  5220                                  	;;;
  5221 00002132 E837070000              	call	interpolating_5_16bit_stereo
  5222 00002137 E3DA                    	jecxz	lff11s2_3
  5223                                  lff11s2_2_2:
  5224 00002139 66AD                    	lodsw
  5225 0000213B 89C3                    	mov	ebx, eax
  5226 0000213D 66AD                    	lodsw
  5227 0000213F 8B16                    	mov	edx, [esi]
  5228                                  	; 17/01/2025
  5229                                  	;mov	[next_val_l], dx
  5230                                  	; 26/11/2023
  5231                                  	;shr	edx, 16
  5232                                  	;mov	[next_val_r], dx
  5233 00002141 49                      	dec	ecx
  5234 00002142 7502                    	jnz	short lff11s2_2_3
  5235 00002144 31D2                    	xor	edx, edx ; 0
  5236                                  	;mov	[next_val_l], dx
  5237                                  	;mov	[next_val_r], dx
  5238                                  lff11s2_2_3:
  5239                                  	;;;
  5240                                  	; 17/01/2025 (BugFix)
  5241 00002146 8915[F7290000]          	mov	[next_val_l], edx
  5242                                  	;;;
  5243 0000214C E825080000              	call	interpolating_4_16bit_stereo
  5244 00002151 E3C0                    	jecxz	lff11s2_3
  5245                                  	
  5246 00002153 4D                      	dec	ebp
  5247 00002154 74C4                    	jz	short lff11s2_9
  5248                                  
  5249 00002156 66AD                    	lodsw
  5250 00002158 89C3                    	mov	ebx, eax
  5251 0000215A 66AD                    	lodsw
  5252 0000215C 8B16                    	mov	edx, [esi]
  5253                                  	; 17/01/2025
  5254                                  	;mov	[next_val_l], dx
  5255                                  	; 26/11/2023
  5256                                  	;shr	edx, 16
  5257                                  	;mov	[next_val_r], dx
  5258 0000215E 49                      	dec	ecx
  5259 0000215F 7502                    	jnz	short lff11s2_2_4
  5260 00002161 31D2                    	xor	edx, edx ; 0
  5261                                  	;mov	[next_val_l], dx
  5262                                  	;mov	[next_val_r], dx
  5263                                  lff11s2_2_4:
  5264                                  	;;;
  5265                                  	; 17/01/2025 (BugFix)
  5266 00002163 8915[F7290000]          	mov	[next_val_l], edx
  5267                                  	;;;
  5268 00002169 E808080000               	call	interpolating_4_16bit_stereo
  5269 0000216E E3A3                    	jecxz	lff11s2_3
  5270 00002170 EBAD                    	jmp	short lff11s2_1
  5271                                  
  5272                                  ; .....................
  5273                                  
  5274                                  load_44khz_mono_8_bit:
  5275                                  	; 02/02/2025
  5276                                  	; 18/11/2023
  5277 00002172 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5278                                  					; last of the file?
  5279 00002179 7402                    	jz	short lff44m_0		; no
  5280 0000217B F9                      	stc
  5281 0000217C C3                      	retn
  5282                                  
  5283                                  lff44m_0:
  5284                                  	; 01/12/2024
  5285                                  	; edi = audio buffer address
  5286 0000217D BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5287                                          ;mov	edx, [loadsize]
  5288                                  
  5289                                  	; esi = buffer address
  5290                                  	;; edx = buffer size
  5291                                  
  5292                                  	; load file into memory
  5293                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002182 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002188 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 0000218A 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002190 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00002195 CD40                <1>  int 40h
  5294 00002197 7250                    	jc	short lff44m_7 ; error !
  5295                                  
  5296                                  	; 01/12/2024
  5297 00002199 A3[BC860000]            	mov	[count], eax
  5298                                  	;;;
  5299                                  	; 29/05/2024
  5300                                  	;mov	edi, [audio_buffer]
  5301                                  	;;;
  5302 0000219E 21C0                    	and	eax, eax
  5303 000021A0 7505                    	jnz	short lff44m_8
  5304 000021A2 E9A5F1FFFF              	jmp	lff44_eof
  5305                                  
  5306                                  lff44m_8:
  5307 000021A7 89C1                    	mov	ecx, eax	; byte count
  5308                                  lff44m_9:
  5309 000021A9 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  5310 000021AE C605[FB290000]02        	mov	byte [faz], 2  ; 2 steps/phases
  5311                                  lff44m_1:
  5312                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  5313                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  5314 000021B5 AC                      	lodsb
  5315                                  	; 02/02/2025
  5316 000021B6 8A16                    	mov	dl, [esi]
  5317 000021B8 49                      	dec	ecx
  5318 000021B9 7502                    	jnz	short lff44m_2_1
  5319 000021BB B280                    	mov	dl, 80h
  5320                                  lff44m_2_1:	
  5321                                  	; al = [previous_val]
  5322                                  	; dl = [next_val]
  5323 000021BD E871030000              	call	interpolating_2_8bit_mono
  5324 000021C2 E320                    	jecxz	lff44m_3
  5325                                  lff44m_2_2:
  5326 000021C4 AC                      	lodsb
  5327 000021C5 2C80                    	sub	al, 80h
  5328 000021C7 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5329 000021CB 66AB                    	stosw		; (L)
  5330 000021CD 66AB                    	stosw		; (R)
  5331                                  
  5332 000021CF 49                      	dec	ecx
  5333 000021D0 7412                    	jz	short lff44m_3
  5334 000021D2 4D                      	dec	ebp
  5335 000021D3 75EF                    	jnz	short lff44m_2_2
  5336                                  	
  5337 000021D5 FE0D[FB290000]          	dec	byte [faz]
  5338 000021DB 74CC                    	jz	short lff44m_9 
  5339 000021DD BD0B000000              	mov	ebp, 11
  5340 000021E2 EBD1                    	jmp	short lff44m_1
  5341                                  
  5342                                  lff44m_3:
  5343                                  lff44s_3:
  5344 000021E4 E94BF1FFFF              	jmp	lff44_3	; padfill
  5345                                  		; (put zeros in the remain words of the buffer)
  5346                                  lff44m_7:
  5347                                  lff44s_7:
  5348 000021E9 E967F1FFFF              	jmp	lff44_5  ; error
  5349                                  
  5350                                  load_44khz_stereo_8_bit:
  5351                                  	; 02/02/2025
  5352                                  	; 16/11/2023
  5353 000021EE F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5354                                  					; last of the file?
  5355 000021F5 7402                    	jz	short lff44s_0		; no
  5356 000021F7 F9                      	stc
  5357 000021F8 C3                      	retn
  5358                                  
  5359                                  lff44s_0:
  5360                                  	; 01/12/2024
  5361                                  	; edi = audio buffer address
  5362 000021F9 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5363                                          ;mov	edx, [loadsize]
  5364                                  
  5365                                  	; esi = buffer address
  5366                                  	;; edx = buffer size
  5367                                  
  5368                                  	; load file into memory
  5369                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000021FE 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002204 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002206 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000220C B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00002211 CD40                <1>  int 40h
  5370 00002213 72D4                    	jc	short lff44s_7 ; error !
  5371                                  
  5372                                  	; 01/12/2024
  5373 00002215 A3[BC860000]            	mov	[count], eax
  5374                                  	;;;
  5375                                  	; 29/05/2024
  5376                                  	;mov	edi, [audio_buffer]
  5377                                  	;;;
  5378 0000221A D1E8                    	shr	eax, 1
  5379 0000221C 7505                    	jnz	short lff44s_8
  5380 0000221E E929F1FFFF              	jmp	lff44_eof
  5381                                  
  5382                                  lff44s_8:
  5383 00002223 89C1                    	mov	ecx, eax	; word count
  5384                                  lff44s_9:
  5385 00002225 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  5386 0000222A C605[FB290000]02        	mov	byte [faz], 2  ; 2 steps/phase
  5387                                  lff44s_1:
  5388                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  5389                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  5390 00002231 66AD                    	lodsw
  5391                                  	; 02/02/2025
  5392 00002233 668B16                  	mov	dx, [esi]
  5393 00002236 49                      	dec	ecx
  5394 00002237 7504                    	jnz	short lff44s_2_1
  5395 00002239 66BA8080                	mov	dx, 8080h
  5396                                  lff44s_2_1:	
  5397                                  	; al = [previous_val_l]
  5398                                  	; ah = [previous_val_r]
  5399                                  	; dl = [next_val_l]
  5400                                  	; dh = [next_val_r]
  5401 0000223D E80E030000              	call	interpolating_2_8bit_stereo
  5402 00002242 E3A0                    	jecxz	lff44s_3
  5403                                  lff44s_2_2:
  5404 00002244 AC                      	lodsb
  5405 00002245 2C80                    	sub	al, 80h
  5406 00002247 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5407 0000224B 66AB                    	stosw		; (L)
  5408 0000224D AC                      	lodsb
  5409 0000224E 2C80                    	sub	al, 80h
  5410 00002250 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5411 00002254 66AB                    	stosw		; (R)
  5412                                  
  5413 00002256 49                      	dec	ecx
  5414 00002257 748B                    	jz	short lff44s_3
  5415 00002259 4D                      	dec	ebp
  5416 0000225A 75E8                    	jnz	short lff44s_2_2
  5417                                  	
  5418 0000225C FE0D[FB290000]          	dec	byte [faz]
  5419 00002262 74C1                    	jz	short lff44s_9 
  5420 00002264 BD0B000000              	mov	ebp, 11
  5421 00002269 EBC6                    	jmp	short lff44s_1
  5422                                  
  5423                                  load_44khz_mono_16_bit:
  5424                                  	; 02/02/2025
  5425                                  	; 18/11/2023
  5426 0000226B F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5427                                  					; last of the file?
  5428 00002272 7402                    	jz	short lff44m2_0		; no
  5429 00002274 F9                      	stc
  5430 00002275 C3                      	retn
  5431                                  
  5432                                  lff44m2_0:
  5433                                  	; 01/12/2024
  5434                                  	; edi = audio buffer address
  5435 00002276 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5436                                          ;mov	edx, [loadsize]
  5437                                  
  5438                                  	; esi = buffer address
  5439                                  	;; edx = buffer size
  5440                                  
  5441                                  	; load file into memory
  5442                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000227B 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002281 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002283 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002289 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 0000228E CD40                <1>  int 40h
  5443 00002290 724D                    	jc	short lff44m2_7 ; error !
  5444                                  
  5445                                  	; 01/12/2024
  5446 00002292 A3[BC860000]            	mov	[count], eax
  5447                                  	;;;
  5448                                  	; 29/05/2024
  5449                                  	;mov	edi, [audio_buffer]
  5450                                  	;;;
  5451 00002297 D1E8                    	shr	eax, 1
  5452 00002299 7505                    	jnz	short lff44m2_8
  5453 0000229B E9ACF0FFFF              	jmp	lff44_eof
  5454                                  
  5455                                  lff44m2_8:
  5456 000022A0 89C1                    	mov	ecx, eax	; word count
  5457                                  lff44m2_9:
  5458 000022A2 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  5459 000022A7 C605[FB290000]02        	mov	byte [faz], 2  ; 2 steps/phases
  5460                                  lff44m2_1:
  5461                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  5462                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  5463 000022AE 66AD                    	lodsw
  5464                                  	; 02/02/2025
  5465 000022B0 668B16                  	mov	dx, [esi]
  5466 000022B3 49                      	dec	ecx
  5467 000022B4 7502                    	jnz	short lff44m2_2_1
  5468 000022B6 31D2                    	xor	edx, edx
  5469                                  lff44m2_2_1:	
  5470                                  	; ax = [previous_val]
  5471                                  	; dx = [next_val]
  5472 000022B8 E857030000              	call	interpolating_2_16bit_mono
  5473 000022BD E31B                    	jecxz	lff44m2_3
  5474                                  lff44m2_2_2:
  5475 000022BF 66AD                    	lodsw
  5476 000022C1 66AB                    	stosw		; (L)eft Channel
  5477 000022C3 66AB                    	stosw		; (R)ight Channel
  5478                                  
  5479 000022C5 49                      	dec	ecx
  5480 000022C6 7412                    	jz	short lff44m2_3
  5481 000022C8 4D                      	dec	ebp
  5482 000022C9 75F4                    	jnz	short lff44m2_2_2
  5483                                  	
  5484 000022CB FE0D[FB290000]          	dec	byte [faz]
  5485 000022D1 74CF                    	jz	short lff44m2_9
  5486 000022D3 BD0B000000              	mov	ebp, 11
  5487 000022D8 EBD4                    	jmp	short lff44m2_1
  5488                                  
  5489                                  lff44m2_3:
  5490                                  lff44s2_3:
  5491 000022DA E955F0FFFF              	jmp	lff44_3	; padfill
  5492                                  		; (put zeros in the remain words of the buffer)
  5493                                  lff44m2_7:
  5494                                  lff44s2_7:
  5495 000022DF E971F0FFFF              	jmp	lff44_5  ; error
  5496                                  
  5497                                  load_44khz_stereo_16_bit:
  5498                                  	; 18/11/2023
  5499 000022E4 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5500                                  					; last of the file?
  5501 000022EB 7402                    	jz	short lff44s2_0		; no
  5502 000022ED F9                      	stc
  5503 000022EE C3                      	retn
  5504                                  
  5505                                  lff44s2_0:
  5506                                  	; 01/12/2024
  5507                                  	; edi = audio buffer address
  5508 000022EF BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5509                                          ;mov	edx, [loadsize]
  5510                                  
  5511                                  	; esi = buffer address
  5512                                  	;; edx = buffer size
  5513                                  
  5514                                  	; load file into memory
  5515                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000022F4 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000022FA 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000022FC 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002302 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00002307 CD40                <1>  int 40h
  5516 00002309 72D4                    	jc	short lff44s2_7 ; error !
  5517                                  
  5518                                  	; 01/12/2024
  5519 0000230B A3[BC860000]            	mov	[count], eax
  5520                                  	;;;
  5521                                  	; 29/05/2024
  5522                                  	;mov	edi, [audio_buffer]
  5523                                  	;;;
  5524 00002310 C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  5525 00002313 7505                    	jnz	short lff44s2_8
  5526 00002315 E932F0FFFF              	jmp	lff44_eof
  5527                                  
  5528                                  lff44s2_8:
  5529 0000231A 89C1                    	mov	ecx, eax	; dword count
  5530                                  lff44s2_9:
  5531 0000231C BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  5532 00002321 C605[FB290000]02        	mov	byte [faz], 2  ; 2 steps/phase
  5533                                  lff44s2_1:
  5534                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  5535                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  5536 00002328 66AD                    	lodsw
  5537 0000232A 89C3                    	mov	ebx, eax
  5538 0000232C 66AD                    	lodsw
  5539                                  	;mov	dx, [esi]
  5540                                  	;mov	[next_val_l], dx
  5541                                  	;mov	dx, [esi+2]
  5542                                  	; 26/11/2023
  5543 0000232E 8B16                    	mov	edx, [esi]
  5544 00002330 668915[F7290000]        	mov	[next_val_l], dx
  5545 00002337 C1EA10                  	shr	edx, 16
  5546 0000233A 49                      	dec	ecx
  5547 0000233B 7509                    	jnz	short lff44s2_2_1
  5548 0000233D 31D2                    	xor	edx, edx ; 0
  5549 0000233F 668915[F7290000]        	mov	[next_val_l], dx
  5550                                  lff44s2_2_1:
  5551                                  	; bx = [previous_val_l]
  5552                                  	; ax = [previous_val_r]
  5553                                  	; [next_val_l]
  5554                                  	; dx = [next_val_r]
  5555 00002346 E8E1020000              	call	interpolating_2_16bit_stereo
  5556 0000234B E38D                    	jecxz	lff44s2_3
  5557                                  lff44s2_2_2:
  5558                                  	;movsw		; (L)eft Channel
  5559                                  	;movsw		; (R)ight Channel
  5560 0000234D A5                      	movsd
  5561                                  
  5562 0000234E 49                      	dec	ecx
  5563 0000234F 7489                    	jz	short lff44s2_3	
  5564 00002351 4D                      	dec	ebp
  5565 00002352 75F9                    	jnz	short lff44s2_2_2
  5566                                  	
  5567 00002354 FE0D[FB290000]          	dec	byte [faz]
  5568 0000235A 74C0                    	jz	short lff44s2_9 
  5569 0000235C BD0B000000              	mov	ebp, 11
  5570 00002361 EBC5                    	jmp	short lff44s2_1
  5571                                  
  5572                                  ; .....................
  5573                                  
  5574                                  	; 02/02/2025
  5575                                  load_12khz_mono_8_bit:
  5576 00002363 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5577                                  					; last of the file?
  5578 0000236A 7402                    	jz	short lff12m_0		; no
  5579 0000236C F9                      	stc
  5580 0000236D C3                      	retn
  5581                                  
  5582                                  lff12m_0:
  5583                                  	; edi = audio buffer address
  5584 0000236E BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5585                                  
  5586                                  	; load file into memory
  5587                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002373 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002379 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 0000237B 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002381 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00002386 CD40                <1>  int 40h
  5588 00002388 7256                    	jc	short lff12m_7 ; error !
  5589                                  
  5590 0000238A A3[BC860000]            	mov	[count], eax
  5591                                  
  5592 0000238F 21C0                    	and	eax, eax
  5593 00002391 7505                    	jnz	short lff12m_8
  5594 00002393 E9B4EFFFFF              	jmp	lff12_eof
  5595                                  
  5596                                  lff12m_8:
  5597 00002398 89C1                    	mov	ecx, eax		; byte count
  5598                                  lff12m_1:
  5599                                  	; original-interpolated-interpolated-interpolated
  5600 0000239A AC                      	lodsb
  5601                                  	; 02/02/2025
  5602 0000239B 8A16                    	mov	dl, [esi]
  5603 0000239D 49                      	dec	ecx
  5604 0000239E 7502                    	jnz	short lff12m_2
  5605 000023A0 B280                    	mov	dl, 80h
  5606                                  lff12m_2:	
  5607                                  	; al = [previous_val]
  5608                                  	; dl = [next_val]
  5609 000023A2 E8C0030000               	call	interpolating_4_8bit_mono
  5610 000023A7 E353                    	jecxz	lff12m_3
  5611 000023A9 EBEF                    	jmp	short lff12m_1
  5612                                  
  5613                                  	; 02/02/2025
  5614                                  load_12khz_stereo_8_bit:
  5615 000023AB F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5616                                  					; last of the file?
  5617 000023B2 7402                    	jz	short lff12s_0		; no
  5618 000023B4 F9                      	stc
  5619 000023B5 C3                      	retn
  5620                                  
  5621                                  lff12s_0:
  5622                                  	; edi = audio buffer address
  5623 000023B6 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5624                                  
  5625                                  	; load file into memory
  5626                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000023BB 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000023C1 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000023C3 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000023C9 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 000023CE CD40                <1>  int 40h
  5627 000023D0 720E                    	jc	short lff12s_7 ; error !
  5628                                  
  5629 000023D2 A3[BC860000]            	mov	[count], eax
  5630                                  
  5631 000023D7 D1E8                    	shr	eax, 1
  5632 000023D9 750A                    	jnz	short lff12s_8
  5633 000023DB E96CEFFFFF              	jmp	lff12_eof
  5634                                  
  5635                                  lff12m_7:
  5636                                  lff12s_7:
  5637 000023E0 E970EFFFFF              	jmp	lff12_5  ; error
  5638                                  
  5639                                  lff12s_8:
  5640 000023E5 89C1                    	mov	ecx, eax	; word count
  5641                                  lff12s_1:
  5642                                  	; original-interpolated-interpolated-interpolated
  5643 000023E7 66AD                    	lodsw
  5644                                  	; 02/02/2025
  5645 000023E9 668B16                  	mov	dx, [esi]
  5646 000023EC 49                      	dec	ecx
  5647 000023ED 7504                    	jnz	short lff12s_2
  5648 000023EF 66BA8080                	mov	dx, 8080h
  5649                                  lff12s_2:	
  5650                                  	; al = [previous_val_l]
  5651                                  	; ah = [previous_val_r]
  5652                                  	; dl = [next_val_l]
  5653                                  	; dh = [next_val_r]
  5654 000023F3 E8AE030000              	call	interpolating_4_8bit_stereo
  5655 000023F8 E302                    	jecxz	lff12s_3
  5656 000023FA EBEB                    	jmp	short lff12s_1
  5657                                  
  5658                                  lff12m_3:
  5659                                  lff12s_3:
  5660 000023FC E933EFFFFF              	jmp	lff12_3	; padfill
  5661                                  		; (put zeros in the remain words of the buffer)
  5662                                  
  5663                                  	; 02/02/2025
  5664                                  load_12khz_mono_16_bit:
  5665 00002401 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5666                                  					; last of the file?
  5667 00002408 7402                    	jz	short lff12m2_0		; no
  5668 0000240A F9                      	stc
  5669 0000240B C3                      	retn
  5670                                  
  5671                                  lff12m2_0:
  5672                                  	; edi = audio buffer address
  5673 0000240C BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5674                                  
  5675                                  	; load file into memory
  5676                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002411 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002417 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002419 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000241F B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00002424 CD40                <1>  int 40h
  5677 00002426 7223                    	jc	short lff12m2_7 ; error !
  5678                                  
  5679 00002428 A3[BC860000]            	mov	[count], eax
  5680                                  
  5681 0000242D D1E8                    	shr	eax, 1
  5682 0000242F 7505                    	jnz	short lff12m2_8
  5683 00002431 E916EFFFFF              	jmp	lff12_eof
  5684                                  
  5685                                  lff12m2_8:
  5686 00002436 89C1                    	mov	ecx, eax	; word count
  5687                                  lff12m2_1:
  5688                                  	; original-interpolated-interpolated-interpolated
  5689 00002438 66AD                    	lodsw
  5690                                  	; 02/02/2025
  5691 0000243A 668B16                  	mov	dx, [esi]
  5692 0000243D 49                      	dec	ecx
  5693 0000243E 7502                    	jnz	short lff12m2_2
  5694 00002440 31D2                    	xor	edx, edx
  5695                                  lff12m2_2:	
  5696                                  	; ax = [previous_val]
  5697                                  	; dx = [next_val]
  5698 00002442 E8F6040000               	call	interpolating_4_16bit_mono
  5699 00002447 E3B3                    	jecxz	lff12m_3
  5700 00002449 EBED                    	jmp	short lff12m2_1
  5701                                  
  5702                                  lff12m2_7:
  5703                                  lff12s2_7:
  5704 0000244B E905EFFFFF              	jmp	lff12_5  ; error
  5705                                  
  5706                                  	; 02/02/2025
  5707                                  load_12khz_stereo_16_bit:
  5708 00002450 F605[36860000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5709                                  					; last of the file?
  5710 00002457 7402                    	jz	short lff12s2_0		; no
  5711 00002459 F9                      	stc
  5712 0000245A C3                      	retn
  5713                                  
  5714                                  lff12s2_0:
  5715                                  	; edi = audio buffer address
  5716 0000245B BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5717                                  
  5718                                  	; load file into memory
  5719                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002460 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002466 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002468 8B15[AC860000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000246E B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00002473 CD40                <1>  int 40h
  5720 00002475 72D4                    	jc	short lff12s2_7 ; error !
  5721                                  
  5722 00002477 A3[BC860000]            	mov	[count], eax
  5723                                  
  5724 0000247C C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  5725 0000247F 750A                    	jnz	short lff12s2_8
  5726 00002481 E9C6EEFFFF              	jmp	lff12_eof
  5727                                  
  5728                                  lff12m2_3:
  5729                                  lff12s2_3:
  5730 00002486 E9A9EEFFFF              	jmp	lff12_3	; padfill
  5731                                  		; (put zeros in the remain words of the buffer)
  5732                                  
  5733                                  lff12s2_8:
  5734 0000248B 89C1                    	mov	ecx, eax	; dword count
  5735                                  lff12s2_1:
  5736                                  	; original-interpolated-interpolated-interpolated
  5737 0000248D 66AD                    	lodsw
  5738 0000248F 89C3                    	mov	ebx, eax
  5739 00002491 66AD                    	lodsw
  5740 00002493 8B16                    	mov	edx, [esi]
  5741 00002495 49                      	dec	ecx
  5742 00002496 7502                    	jnz	short lff12s2_2
  5743 00002498 31D2                    	xor	edx, edx ; 0
  5744                                  lff12s2_2:
  5745                                  	;mov	[next_val_l], dx
  5746                                  	;shr	edx, 16
  5747                                  	;mov	[next_val_r], dx
  5748                                  	; 02/02/2025
  5749 0000249A 8915[F7290000]          	mov	[next_val_l], edx
  5750                                  
  5751                                  	; bx = [previous_val_l]
  5752                                  	; ax = [previous_val_r]
  5753                                  	; [next_val_l]
  5754                                  	; [next_val_r]
  5755 000024A0 E8D1040000              	call	interpolating_4_16bit_stereo
  5756 000024A5 E3DF                    	jecxz	lff12s2_3
  5757 000024A7 EBE4                    	jmp	short lff12s2_1
  5758                                  
  5759                                  ; .....................
  5760                                  
  5761                                  interpolating_3_8bit_mono:
  5762                                  	; 02/02/2025
  5763                                  	; 16/11/2023
  5764                                  	; al = [previous_val]
  5765                                  	; dl = [next_val]
  5766                                  	; original-interpolated-interpolated
  5767 000024A9 88C3                    	mov	bl, al
  5768 000024AB 2C80                    	sub	al, 80h
  5769 000024AD 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5770 000024B1 66AB                    	stosw		; original sample (L)
  5771 000024B3 66AB                    	stosw		; original sample (R)
  5772 000024B5 88D8                    	mov	al, bl
  5773 000024B7 00D0                    	add	al, dl
  5774 000024B9 D0D8                    	rcr	al, 1
  5775 000024BB 88C7                    	mov	bh, al	; interpolated middle (temporary)
  5776 000024BD 00D8                    	add	al, bl
  5777 000024BF D0D8                    	rcr	al, 1
  5778 000024C1 2C80                    	sub	al, 80h
  5779 000024C3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5780 000024C7 66AB                    	stosw		; interpolated sample 1 (L)
  5781 000024C9 66AB                    	stosw		; interpolated sample 1 (R)
  5782 000024CB 88F8                    	mov	al, bh
  5783 000024CD 00D0                    	add	al, dl	; [next_val]
  5784 000024CF D0D8                    	rcr	al, 1
  5785                                  	; 02/02/2025
  5786 000024D1 2C80                    	sub	al, 80h
  5787 000024D3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5788 000024D7 66AB                    	stosw		; interpolated sample 2 (L)
  5789 000024D9 66AB                    	stosw		; interpolated sample 2 (R)
  5790 000024DB C3                      	retn
  5791                                  
  5792                                  interpolating_3_8bit_stereo:
  5793                                  	; 02/02/2025
  5794                                  	; 16/11/2023
  5795                                  	; al = [previous_val_l]
  5796                                  	; ah = [previous_val_r]
  5797                                  	; dl = [next_val_l]
  5798                                  	; dh = [next_val_r]	
  5799                                  	; original-interpolated-interpolated
  5800 000024DC 89C3                    	mov	ebx, eax
  5801 000024DE 2C80                    	sub	al, 80h
  5802 000024E0 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5803 000024E4 66AB                    	stosw		; original sample (L)
  5804 000024E6 88F8                    	mov	al, bh
  5805 000024E8 2C80                    	sub	al, 80h
  5806 000024EA 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5807 000024EE 66AB                    	stosw		; original sample (R)
  5808 000024F0 88D8                    	mov	al, bl
  5809 000024F2 00D0                    	add	al, dl	; [next_val_l]
  5810 000024F4 D0D8                    	rcr	al, 1
  5811 000024F6 50                      	push	eax ; *	; al = interpolated middle (L) (temporary)
  5812 000024F7 00D8                    	add	al, bl	; [previous_val_l]
  5813 000024F9 D0D8                    	rcr	al, 1
  5814 000024FB 2C80                    	sub	al, 80h
  5815 000024FD 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5816 00002501 66AB                    	stosw		; interpolated sample 1 (L)
  5817 00002503 88F8                    	mov	al, bh
  5818 00002505 00F0                    	add	al, dh	; [next_val_r]
  5819 00002507 D0D8                    	rcr	al, 1
  5820 00002509 50                      	push	eax ; ** ; al = interpolated middle (R) (temporary)
  5821 0000250A 00F8                    	add	al, bh	; [previous_val_r]
  5822 0000250C D0D8                    	rcr	al, 1
  5823 0000250E 2C80                    	sub	al, 80h
  5824 00002510 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5825 00002514 66AB                    	stosw		; interpolated sample 1 (R)
  5826 00002516 5B                      	pop	ebx ; **
  5827 00002517 58                      	pop	eax ; *
  5828 00002518 00D0                    	add	al, dl	; [next_val_l]
  5829 0000251A D0D8                    	rcr	al, 1
  5830                                  	; 02/02/2025
  5831 0000251C 2C80                    	sub	al, 80h
  5832 0000251E 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5833 00002522 66AB                    	stosw		; interpolated sample 2 (L)
  5834 00002524 88D8                    	mov	al, bl
  5835 00002526 00F0                    	add	al, dh	; [next_val_r]
  5836 00002528 D0D8                    	rcr	al, 1
  5837                                  	; 02/02/2025
  5838 0000252A 2C80                    	sub	al, 80h
  5839 0000252C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5840 00002530 66AB                    	stosw		; interpolated sample 2 (R)
  5841 00002532 C3                      	retn
  5842                                  
  5843                                  interpolating_2_8bit_mono:
  5844                                  	; 16/11/2023
  5845                                  	; al = [previous_val]
  5846                                  	; dl = [next_val]
  5847                                  	; original-interpolated
  5848 00002533 88C3                    	mov	bl, al
  5849 00002535 2C80                    	sub	al, 80h
  5850 00002537 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5851 0000253B 66AB                    	stosw		; original sample (L)
  5852 0000253D 66AB                    	stosw		; original sample (R)
  5853 0000253F 88D8                    	mov	al, bl
  5854 00002541 00D0                    	add	al, dl
  5855 00002543 D0D8                    	rcr	al, 1
  5856 00002545 2C80                    	sub	al, 80h
  5857 00002547 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5858 0000254B 66AB                    	stosw		; interpolated sample (L)
  5859 0000254D 66AB                    	stosw		; interpolated sample (R)
  5860 0000254F C3                      	retn
  5861                                  
  5862                                  interpolating_2_8bit_stereo:
  5863                                  	; 16/11/2023
  5864                                  	; al = [previous_val_l]
  5865                                  	; ah = [previous_val_r]
  5866                                  	; dl = [next_val_l]
  5867                                  	; dh = [next_val_r]
  5868                                  	; original-interpolated
  5869 00002550 89C3                    	mov	ebx, eax
  5870 00002552 2C80                    	sub	al, 80h
  5871 00002554 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5872 00002558 66AB                    	stosw		; original sample (L)
  5873 0000255A 88F8                    	mov	al, bh
  5874 0000255C 2C80                    	sub	al, 80h
  5875 0000255E 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5876 00002562 66AB                    	stosw		; original sample (R)
  5877 00002564 88D8                    	mov	al, bl	; [previous_val_l]
  5878 00002566 00D0                    	add	al, dl	; [next_val_l]
  5879 00002568 D0D8                    	rcr	al, 1
  5880 0000256A 2C80                    	sub	al, 80h
  5881 0000256C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5882 00002570 66AB                    	stosw		; interpolated sample (L)
  5883 00002572 88F8                    	mov	al, bh
  5884 00002574 00F0                    	add	al, dh	; [next_val_r]
  5885 00002576 D0D8                    	rcr	al, 1
  5886 00002578 2C80                    	sub	al, 80h
  5887 0000257A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5888 0000257E 66AB                    	stosw		; interpolated sample (R)
  5889 00002580 C3                      	retn
  5890                                  
  5891                                  interpolating_3_16bit_mono:
  5892                                  	; 16/11/2023
  5893                                  	; ax = [previous_val]
  5894                                  	; dx = [next_val]
  5895                                  	; original-interpolated-interpolated
  5896                                  
  5897 00002581 66AB                    	stosw		; original sample (L)
  5898 00002583 66AB                    	stosw		; original sample (R)
  5899 00002585 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5900 00002588 50                      	push	eax ; *	; [previous_val]
  5901 00002589 80C680                  	add	dh, 80h
  5902 0000258C 6601D0                  	add	ax, dx
  5903 0000258F 66D1D8                  	rcr	ax, 1
  5904 00002592 5B                      	pop	ebx ; *
  5905 00002593 93                      	xchg	ebx, eax ; bx  = interpolated middle (temporary)
  5906 00002594 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
  5907 00002597 66D1D8                  	rcr	ax, 1
  5908 0000259A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5909 0000259D 66AB                    	stosw 		; interpolated sample 1 (L)
  5910 0000259F 66AB                    	stosw		; interpolated sample 1 (R)
  5911 000025A1 89D8                    	mov	eax, ebx
  5912 000025A3 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  5913 000025A6 66D1D8                  	rcr	ax, 1
  5914 000025A9 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5915 000025AC 66AB                    	stosw		; interpolated sample 2 (L)
  5916 000025AE 66AB                    	stosw		; interpolated sample 2 (R)
  5917 000025B0 C3                      	retn
  5918                                  
  5919                                  interpolating_3_16bit_stereo:
  5920                                  	; 16/11/2023
  5921                                  	; bx = [previous_val_l]
  5922                                  	; ax = [previous_val_r]
  5923                                  	; [next_val_l]
  5924                                  	; dx = [next_val_r]
  5925                                  	; original-interpolated-interpolated
  5926                                  
  5927 000025B1 93                      	xchg	eax, ebx
  5928 000025B2 66AB                    	stosw		; original sample (L)
  5929 000025B4 93                      	xchg	eax, ebx
  5930 000025B5 66AB                    	stosw		; original sample (R)
  5931 000025B7 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5932 000025BA 50                      	push	eax ; *	; [previous_val_r]
  5933 000025BB 80C780                  	add	bh, 80h
  5934 000025BE 8005[F8290000]80        	add	byte [next_val_l+1], 80h
  5935 000025C5 66A1[F7290000]          	mov	ax, [next_val_l]
  5936 000025CB 6601D8                  	add	ax, bx	; [previous_val_l]
  5937 000025CE 66D1D8                  	rcr	ax, 1
  5938 000025D1 93                      	xchg	eax, ebx ; ax = [previous_val_l]
  5939 000025D2 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
  5940 000025D5 66D1D8                  	rcr	ax, 1
  5941 000025D8 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5942 000025DB 66AB                    	stosw 		; interpolated sample 1 (L)
  5943 000025DD 58                      	pop	eax  ; *
  5944 000025DE 80C680                  	add	dh, 80h ; convert sound level 0 to 65535 format
  5945 000025E1 52                      	push	edx  ; * ; [next_val_r]
  5946 000025E2 92                      	xchg	eax, edx
  5947 000025E3 6601D0                  	add	ax, dx	; [next_val_r] + [previous_val_r]
  5948 000025E6 66D1D8                  	rcr	ax, 1	; / 2
  5949 000025E9 50                      	push	eax ; ** ; interpolated middle (R)
  5950 000025EA 6601D0                  	add	ax, dx	; + [previous_val_r]
  5951 000025ED 66D1D8                  	rcr	ax, 1
  5952 000025F0 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5953 000025F3 66AB                    	stosw 		; interpolated sample 1 (R)
  5954 000025F5 66A1[F7290000]          	mov	ax, [next_val_l]
  5955 000025FB 6601D8                  	add	ax, bx	; + interpolated middle (L)
  5956 000025FE 66D1D8                  	rcr	ax, 1
  5957 00002601 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5958 00002604 66AB                    	stosw 		; interpolated sample 2 (L)
  5959 00002606 58                      	pop	eax ; **
  5960 00002607 5A                      	pop	edx ; *
  5961 00002608 6601D0                  	add	ax, dx	; interpolated middle + [next_val_r]
  5962 0000260B 66D1D8                  	rcr	ax, 1	; / 2
  5963 0000260E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5964 00002611 66AB                    	stosw 		; interpolated sample 2 (L)
  5965 00002613 C3                      	retn
  5966                                  
  5967                                  interpolating_2_16bit_mono:
  5968                                  	; 16/11/2023
  5969                                  	; ax = [previous_val]
  5970                                  	; dx = [next_val]
  5971                                  	; original-interpolated
  5972                                  
  5973 00002614 66AB                    	stosw		; original sample (L)
  5974 00002616 66AB                    	stosw		; original sample (R)
  5975 00002618 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5976 0000261B 80C680                  	add	dh, 80h
  5977 0000261E 6601D0                  	add	ax, dx
  5978 00002621 66D1D8                  	rcr	ax, 1
  5979 00002624 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5980 00002627 66AB                    	stosw		; interpolated sample (L)
  5981 00002629 66AB                    	stosw		; interpolated sample (R)
  5982 0000262B C3                      	retn
  5983                                  
  5984                                  interpolating_2_16bit_stereo:
  5985                                  	; 17/01/2025
  5986                                  	; 16/11/2023
  5987                                  	; bx = [previous_val_l]
  5988                                  	; ax = [previous_val_r]
  5989                                  	; [next_val_l]
  5990                                  	; dx = [next_val_r]
  5991                                  	; original-interpolated
  5992                                  
  5993 0000262C 93                      	xchg	eax, ebx
  5994 0000262D 66AB                    	stosw		; original sample (L)
  5995 0000262F 93                      	xchg	eax, ebx
  5996 00002630 66AB                    	stosw		; original sample (R)
  5997 00002632 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5998 00002635 80C680                  	add	dh, 80h
  5999 00002638 6601D0                  	add	ax, dx	; [previous_val_r] + [next_val_r]
  6000 0000263B 66D1D8                  	rcr	ax, 1	; / 2
  6001                                  	; 17/01/2025
  6002 0000263E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6003                                  	;push	eax ; *	; interpolated sample (R)
  6004                                  	; 17/01/2025
  6005 00002641 C1E010                  	shl	eax, 16
  6006 00002644 66A1[F7290000]          	mov	ax, [next_val_l]
  6007 0000264A 80C480                  	add	ah, 80h
  6008 0000264D 80C780                  	add	bh, 80h
  6009 00002650 6601D8                  	add	ax, bx	; [next_val_l] + [previous_val_l]
  6010 00002653 66D1D8                  	rcr	ax, 1	; / 2
  6011 00002656 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6012                                  	; 17/01/2025
  6013                                  	;stosw 		; interpolated sample (L)
  6014                                  	;pop	eax ; *
  6015                                  	;sub	ah, 80h	; -32768 to +32767 format again
  6016                                  	;stosw 		; interpolated sample (R)
  6017                                  	; 17/01/2025
  6018 00002659 AB                      	stosd
  6019 0000265A C3                      	retn
  6020                                  
  6021                                  interpolating_5_8bit_mono:
  6022                                  	; 17/11/2023
  6023                                  	; al = [previous_val]
  6024                                  	; dl = [next_val]
  6025                                  	; original-interpltd-interpltd-interpltd-interpltd
  6026 0000265B 88C3                    	mov	bl, al
  6027 0000265D 2C80                    	sub	al, 80h
  6028 0000265F 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6029 00002663 66AB                    	stosw		; original sample (L)
  6030 00002665 66AB                    	stosw		; original sample (R)
  6031 00002667 88D8                    	mov	al, bl
  6032 00002669 00D0                    	add	al, dl
  6033 0000266B D0D8                    	rcr	al, 1
  6034 0000266D 88C7                    	mov	bh, al	; interpolated middle (temporary)
  6035 0000266F 00D8                    	add	al, bl  ; [previous_val]
  6036 00002671 D0D8                    	rcr	al, 1
  6037 00002673 88C6                    	mov	dh, al	; interpolated 1st quarter (temporary)
  6038 00002675 00D8                    	add	al, bl
  6039 00002677 D0D8                    	rcr	al, 1
  6040 00002679 2C80                    	sub	al, 80h
  6041 0000267B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6042 0000267F 66AB                    	stosw		; interpolated sample 1 (L)
  6043 00002681 66AB                    	stosw		; interpolated sample 1 (R)
  6044 00002683 88F8                    	mov	al, bh
  6045 00002685 00F0                    	add	al, dh
  6046 00002687 D0D8                    	rcr	al, 1
  6047 00002689 2C80                    	sub	al, 80h
  6048 0000268B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6049 0000268F 66AB                    	stosw		; interpolated sample 2 (L)
  6050 00002691 66AB                    	stosw		; interpolated sample 2 (R)
  6051 00002693 88F8                    	mov	al, bh
  6052 00002695 00D0                    	add	al, dl	; [next_val]
  6053 00002697 D0D8                    	rcr	al, 1
  6054 00002699 88C6                    	mov	dh, al	; interpolated 3rd quarter (temporary)
  6055 0000269B 00F8                    	add	al, bh
  6056 0000269D D0D8                    	rcr	al, 1
  6057 0000269F 2C80                    	sub	al, 80h
  6058 000026A1 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6059 000026A5 66AB                    	stosw		; interpolated sample 3 (L)
  6060 000026A7 66AB                    	stosw		; interpolated sample 3 (R)
  6061 000026A9 88F0                    	mov	al, dh
  6062 000026AB 00D0                    	add	al, dl
  6063 000026AD D0D8                    	rcr	al, 1
  6064 000026AF 2C80                    	sub	al, 80h
  6065 000026B1 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6066 000026B5 66AB                    	stosw		; interpolated sample 4 (L)
  6067 000026B7 66AB                    	stosw		; interpolated sample 4 (R)
  6068 000026B9 C3                      	retn
  6069                                  
  6070                                  interpolating_5_8bit_stereo:
  6071                                  	; 17/11/2023
  6072                                  	; al = [previous_val_l]
  6073                                  	; ah = [previous_val_r]
  6074                                  	; dl = [next_val_l]
  6075                                  	; dh = [next_val_r]
  6076                                  	; original-interpltd-interpltd-interpltd-interpltd
  6077 000026BA 89C3                    	mov	ebx, eax
  6078 000026BC 2C80                    	sub	al, 80h
  6079 000026BE 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6080 000026C2 66AB                    	stosw		; original sample (L)
  6081 000026C4 88F8                    	mov	al, bh
  6082 000026C6 2C80                    	sub	al, 80h
  6083 000026C8 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6084 000026CC 66AB                    	stosw		; original sample (R)
  6085 000026CE 52                      	push	edx ; *
  6086 000026CF 88D8                    	mov	al, bl
  6087 000026D1 00D0                    	add	al, dl	; [next_val_l]
  6088 000026D3 D0D8                    	rcr	al, 1
  6089 000026D5 50                      	push	eax ; ** ; al = interpolated middle (L) (temporary)
  6090 000026D6 00D8                    	add	al, bl	; [previous_val_l]
  6091 000026D8 D0D8                    	rcr	al, 1
  6092 000026DA 86D8                    	xchg	al, bl
  6093 000026DC 00D8                    	add	al, bl	; bl = interpolated 1st quarter (L) (temp)
  6094 000026DE D0D8                    	rcr	al, 1
  6095 000026E0 2C80                    	sub	al, 80h
  6096 000026E2 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6097 000026E6 66AB                    	stosw		; interpolated sample 1 (L)
  6098 000026E8 88F8                    	mov	al, bh
  6099 000026EA 00F0                    	add	al, dh	; [next_val_r]
  6100 000026EC D0D8                    	rcr	al, 1
  6101 000026EE 50                      	push	eax ; *** ; al = interpolated middle (R) (temporary)
  6102 000026EF 00F8                    	add	al, bh	; [previous_val_r]
  6103 000026F1 D0D8                    	rcr	al, 1
  6104 000026F3 86F8                    	xchg	al, bh
  6105 000026F5 00F8                    	add	al, bh	; bh = interpolated 1st quarter (R) (temp)
  6106 000026F7 D0D8                    	rcr	al, 1
  6107 000026F9 2C80                    	sub	al, 80h
  6108 000026FB 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6109 000026FF 66AB                    	stosw		; interpolated sample 1 (R)
  6110 00002701 5A                      	pop	edx ; ***
  6111 00002702 58                      	pop	eax ; ** ; al = interpolated middle (L) (temporary)
  6112 00002703 86D8                    	xchg	al, bl	; al = interpolated 1st quarter (L) (temp)
  6113 00002705 00D8                    	add	al, bl	; bl = interpolated middle (L) (temporary)
  6114 00002707 D0D8                    	rcr	al, 1
  6115 00002709 2C80                    	sub	al, 80h
  6116 0000270B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6117 0000270F 66AB                    	stosw		; interpolated sample 2 (L)	
  6118 00002711 88D0                    	mov	al, dl 	; interpolated middle (R) (temporary)
  6119 00002713 86F8                    	xchg	al, bh	; al = interpolated 1st quarter (R) (temp)
  6120 00002715 00F8                    	add	al, bh	; bh = interpolated middle (R) (temporary)
  6121 00002717 D0D8                    	rcr	al, 1
  6122 00002719 2C80                    	sub	al, 80h
  6123 0000271B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6124 0000271F 66AB                    	stosw		; interpolated sample 2 (R)
  6125 00002721 5A                      	pop	edx ; *
  6126 00002722 88D8                    	mov	al, bl	; interpolated middle (L) (temporary)
  6127 00002724 00D0                    	add	al, dl	; [next_val_l]
  6128 00002726 D0D8                    	rcr	al, 1
  6129 00002728 86D8                    	xchg	al, bl	; al = interpolated middle (R) (temporary)
  6130 0000272A 00D8                    	add	al, bl	; bl = interpolated 3rd quarter (L) (temp)
  6131 0000272C D0D8                    	rcr	al, 1
  6132 0000272E 2C80                    	sub	al, 80h
  6133 00002730 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6134 00002734 66AB                    	stosw		; interpolated sample 3 (L)
  6135 00002736 88F8                    	mov	al, bh	
  6136 00002738 00F0                    	add	al, dh	; interpolated middle (R) + [next_val_r]
  6137 0000273A D0D8                    	rcr	al, 1
  6138 0000273C 86F8                    	xchg	al, bh	; al = interpolated middle (R)
  6139 0000273E 00F8                    	add	al, bh	; bh = interpolated 3rd quarter (R) (temp)
  6140 00002740 D0D8                    	rcr	al, 1
  6141 00002742 2C80                    	sub	al, 80h
  6142 00002744 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6143 00002748 66AB                    	stosw		; interpolated sample 3 (R)
  6144 0000274A 88D8                    	mov	al, bl
  6145 0000274C 00D0                    	add	al, dl	; [next_val_l]
  6146 0000274E D0D8                    	rcr	al, 1
  6147 00002750 2C80                    	sub	al, 80h
  6148 00002752 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6149 00002756 66AB                    	stosw		; interpolated sample 4 (L)
  6150 00002758 88F8                    	mov	al, bh
  6151 0000275A 00F0                    	add	al, dh	; [next_val_r]
  6152 0000275C D0D8                    	rcr	al, 1
  6153 0000275E 2C80                    	sub	al, 80h
  6154 00002760 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6155 00002764 66AB                    	stosw		; interpolated sample 4 (R)
  6156 00002766 C3                      	retn
  6157                                  
  6158                                  interpolating_4_8bit_mono:
  6159                                  	; 17/11/2023
  6160                                  	; al = [previous_val]
  6161                                  	; dl = [next_val]
  6162                                  	; original-interpolated-interpolated-interpolated
  6163 00002767 88C3                    	mov	bl, al
  6164 00002769 2C80                    	sub	al, 80h
  6165 0000276B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6166 0000276F 66AB                    	stosw		; original sample (L)
  6167 00002771 66AB                    	stosw		; original sample (R)
  6168 00002773 88D8                    	mov	al, bl
  6169 00002775 00D0                    	add	al, dl
  6170 00002777 D0D8                    	rcr	al, 1
  6171 00002779 86D8                    	xchg	al, bl  ; al = [previous_val]
  6172 0000277B 00D8                    	add	al, bl	; bl = interpolated middle (sample 2)
  6173 0000277D D0D8                    	rcr	al, 1
  6174 0000277F 2C80                    	sub	al, 80h
  6175 00002781 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6176 00002785 66AB                    	stosw		; interpolated sample 1 (L)
  6177 00002787 66AB                    	stosw		; interpolated sample 1 (R)
  6178 00002789 88D8                    	mov	al, bl	; interpolated middle (sample 2)
  6179 0000278B 2C80                    	sub	al, 80h
  6180 0000278D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6181 00002791 66AB                    	stosw		; interpolated sample 2 (L)
  6182 00002793 66AB                    	stosw		; interpolated sample 2 (R)
  6183 00002795 88D8                    	mov	al, bl
  6184 00002797 00D0                    	add	al, dl	; [next_val]
  6185 00002799 D0D8                    	rcr	al, 1
  6186 0000279B 2C80                    	sub	al, 80h
  6187 0000279D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6188 000027A1 66AB                    	stosw		; interpolated sample 3 (L)
  6189 000027A3 66AB                    	stosw		; interpolated sample 3 (R)
  6190 000027A5 C3                      	retn
  6191                                  
  6192                                  interpolating_4_8bit_stereo:
  6193                                  	; 17/11/2023
  6194                                  	; al = [previous_val_l]
  6195                                  	; ah = [previous_val_r]
  6196                                  	; dl = [next_val_l]
  6197                                  	; dh = [next_val_r]
  6198                                  	; original-interpolated-interpolated-interpolated
  6199 000027A6 89C3                    	mov	ebx, eax
  6200 000027A8 2C80                    	sub	al, 80h
  6201 000027AA 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6202 000027AE 66AB                    	stosw		; original sample (L)
  6203 000027B0 88F8                    	mov	al, bh
  6204 000027B2 2C80                    	sub	al, 80h
  6205 000027B4 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6206 000027B8 66AB                    	stosw		; original sample (R)
  6207 000027BA 88D8                    	mov	al, bl
  6208 000027BC 00D0                    	add	al, dl	; [next_val_l]
  6209 000027BE D0D8                    	rcr	al, 1
  6210 000027C0 86D8                    	xchg	al, bl	; al = [previous_val_l]
  6211 000027C2 00D8                    	add	al, bl	; bl = interpolated middle (L) (sample 2)
  6212 000027C4 D0D8                    	rcr	al, 1
  6213 000027C6 2C80                    	sub	al, 80h
  6214 000027C8 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6215 000027CC 66AB                    	stosw		; interpolated sample 1 (L)
  6216 000027CE 88F8                    	mov	al, bh
  6217 000027D0 00F0                    	add	al, dh	; [next_val_r]
  6218 000027D2 D0D8                    	rcr	al, 1
  6219 000027D4 86F8                    	xchg	al, bh	; al = [previous_val_h]
  6220 000027D6 00F8                    	add	al, bh	; bh = interpolated middle (R) (sample 2)
  6221 000027D8 D0D8                    	rcr	al, 1
  6222 000027DA 2C80                    	sub	al, 80h
  6223 000027DC 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6224 000027E0 66AB                    	stosw		; interpolated sample 1 (R)
  6225 000027E2 88D8                    	mov	al, bl	; interpolated middle (L) (sample 2)
  6226 000027E4 2C80                    	sub	al, 80h
  6227 000027E6 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6228 000027EA 66AB                    	stosw		; interpolated sample 2 (L)
  6229 000027EC 88F8                    	mov	al, bh	; interpolated middle (L) (sample 2)
  6230 000027EE 2C80                    	sub	al, 80h
  6231 000027F0 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6232 000027F4 66AB                    	stosw		; interpolated sample 2 (L)
  6233 000027F6 88D8                    	mov	al, bl
  6234 000027F8 00D0                    	add	al, dl	; [next_val_l]
  6235 000027FA D0D8                    	rcr	al, 1
  6236 000027FC 2C80                    	sub	al, 80h
  6237 000027FE 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6238 00002802 66AB                    	stosw		; interpolated sample 3 (L)
  6239 00002804 88F8                    	mov	al, bh
  6240 00002806 00F0                    	add	al, dh	; [next_val_r]
  6241 00002808 D0D8                    	rcr	al, 1
  6242 0000280A 2C80                    	sub	al, 80h
  6243 0000280C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  6244 00002810 66AB                    	stosw		; interpolated sample 3 (R)
  6245 00002812 C3                      	retn
  6246                                  
  6247                                  interpolating_5_16bit_mono:
  6248                                  	; 18/11/2023
  6249                                  	; ax = [previous_val]
  6250                                  	; dx = [next_val]
  6251                                  	; original-interpltd-interpltd-interpltd-interpltd
  6252 00002813 66AB                    	stosw		; original sample (L)
  6253 00002815 66AB                    	stosw		; original sample (R)
  6254 00002817 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  6255 0000281A 89C3                    	mov	ebx, eax ; [previous_val]
  6256 0000281C 80C680                  	add	dh, 80h
  6257 0000281F 6601D0                  	add	ax, dx
  6258 00002822 66D1D8                  	rcr	ax, 1
  6259 00002825 50                      	push	eax ; *	; interpolated middle (temporary)
  6260 00002826 6601D8                  	add	ax, bx	; interpolated middle + [previous_val]
  6261 00002829 66D1D8                  	rcr	ax, 1
  6262 0000282C 50                      	push	eax ; **	; interpolated 1st quarter (temporary)
  6263 0000282D 6601D8                  	add	ax, bx	; 1st quarter + [previous_val]
  6264 00002830 66D1D8                  	rcr	ax, 1	
  6265 00002833 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6266 00002836 66AB                    	stosw 		; interpolated sample 1 (L)
  6267 00002838 66AB                    	stosw		; interpolated sample 1 (R)
  6268 0000283A 58                      	pop	eax ; **
  6269 0000283B 5B                      	pop	ebx ; *
  6270 0000283C 6601D8                  	add	ax, bx	; 1st quarter + middle
  6271 0000283F 66D1D8                  	rcr	ax, 1	; / 2
  6272 00002842 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again	
  6273 00002845 66AB                    	stosw		; interpolated sample 2 (L)
  6274 00002847 66AB                    	stosw		; interpolated sample 2 (R)
  6275 00002849 89D8                    	mov	eax, ebx
  6276 0000284B 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  6277 0000284E 66D1D8                  	rcr	ax, 1
  6278 00002851 50                      	push	eax ; *	; interpolated 3rd quarter (temporary)
  6279 00002852 6601D8                  	add	ax, bx	; + interpolated middle
  6280 00002855 66D1D8                  	rcr	ax, 1
  6281 00002858 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6282 0000285B 66AB                    	stosw		; interpolated sample 3 (L)
  6283 0000285D 66AB                    	stosw		; interpolated sample 3 (R)
  6284 0000285F 58                      	pop	eax ; *
  6285 00002860 6601D0                  	add	ax, dx	; 3rd quarter + [next_val]
  6286 00002863 66D1D8                  	rcr	ax, 1	; / 2
  6287 00002866 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6288 00002869 66AB                    	stosw		; interpolated sample 4 (L)
  6289 0000286B 66AB                    	stosw		; interpolated sample 4 (R)
  6290 0000286D C3                      	retn
  6291                                  
  6292                                  interpolating_5_16bit_stereo:
  6293                                  	; 18/11/2023
  6294                                  	; bx = [previous_val_l]
  6295                                  	; ax = [previous_val_r]
  6296                                  	; [next_val_l]
  6297                                  	; [next_val_r]
  6298                                  	; original-interpltd-interpltd-interpltd-interpltd
  6299 0000286E 51                      	push	ecx ; !
  6300 0000286F 93                      	xchg	eax, ebx
  6301 00002870 66AB                    	stosw		; original sample (L)
  6302 00002872 93                      	xchg	eax, ebx
  6303 00002873 66AB                    	stosw		; original sample (R)
  6304 00002875 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  6305 00002878 50                      	push	eax ; *	; [previous_val_r]
  6306 00002879 80C780                  	add	bh, 80h
  6307 0000287C 8005[F8290000]80        	add	byte [next_val_l+1], 80h
  6308 00002883 66A1[F7290000]          	mov	ax, [next_val_l]
  6309 00002889 6601D8                  	add	ax, bx	; [previous_val_l]
  6310 0000288C 66D1D8                  	rcr	ax, 1
  6311 0000288F 89C1                    	mov	ecx, eax ; interpolated middle (L)
  6312 00002891 6601D8                  	add	ax, bx
  6313 00002894 66D1D8                  	rcr	ax, 1
  6314 00002897 89C2                    	mov	edx, eax ; interpolated 1st quarter (L)
  6315 00002899 6601D8                  	add	ax, bx	; [previous_val_l]
  6316 0000289C 66D1D8                  	rcr	ax, 1
  6317 0000289F 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6318 000028A2 66AB                    	stosw 		; interpolated sample 1 (L)
  6319 000028A4 89C8                    	mov	eax, ecx
  6320 000028A6 6601D0                  	add	ax, dx	; middle (L) + 1st quarter (L)
  6321 000028A9 66D1D8                  	rcr	ax, 1	; / 2
  6322 000028AC 89C3                    	mov	ebx, eax  ; interpolated sample 2 (L)
  6323 000028AE 5A                      	pop	edx ; *	; [previous_val_r]
  6324 000028AF 89D0                    	mov	eax, edx
  6325 000028B1 8005[FA290000]80        	add	byte [next_val_r+1], 80h
  6326 000028B8 660305[F9290000]        	add	ax, [next_val_r]
  6327 000028BF 66D1D8                  	rcr	ax, 1
  6328 000028C2 50                      	push	eax ; *	; interpolated middle (R)
  6329 000028C3 6601D0                  	add	ax, dx
  6330 000028C6 66D1D8                  	rcr	ax, 1
  6331 000028C9 50                      	push	eax ; ** ; interpolated 1st quarter (R)
  6332 000028CA 6601D0                  	add	ax, dx	; [previous_val_r]
  6333 000028CD 66D1D8                  	rcr	ax, 1
  6334 000028D0 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6335 000028D3 66AB                    	stosw 		; interpolated sample 1 (R)
  6336 000028D5 89D8                    	mov	eax, ebx
  6337 000028D7 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6338 000028DA 66AB                    	stosw 		; interpolated sample 2 (L)
  6339 000028DC 58                      	pop	eax ; **
  6340 000028DD 5A                      	pop	edx ; *
  6341 000028DE 6601D0                  	add	ax, dx	; 1st quarter (R) + middle (R)
  6342 000028E1 66D1D8                  	rcr	ax, 1	; / 2
  6343 000028E4 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6344 000028E7 66AB                    	stosw 		; interpolated sample 2 (R)
  6345 000028E9 89C8                    	mov	eax, ecx
  6346 000028EB 660305[F7290000]        	add	ax, [next_val_l]
  6347 000028F2 66D1D8                  	rcr	ax, 1
  6348 000028F5 50                      	push	eax ; * ; interpolated 3rd quarter (L)
  6349 000028F6 6601C8                  	add	ax, cx	; interpolated middle (L)
  6350 000028F9 66D1D8                  	rcr	ax, 1
  6351 000028FC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6352 000028FF 66AB                    	stosw 		; interpolated sample 3 (L)
  6353 00002901 89D0                    	mov	eax, edx
  6354 00002903 660305[F9290000]        	add	ax, [next_val_r]
  6355 0000290A 66D1D8                  	rcr	ax, 1
  6356 0000290D 50                      	push	eax ; ** ; interpolated 3rd quarter (R)
  6357 0000290E 6601D0                  	add	ax, dx	; interpolated middle (R)
  6358 00002911 66D1D8                  	rcr	ax, 1
  6359 00002914 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6360 00002917 66AB                    	stosw 		; interpolated sample 3 (R)
  6361 00002919 5B                      	pop	ebx ; **
  6362 0000291A 58                      	pop	eax ; *
  6363 0000291B 660305[F7290000]        	add	ax, [next_val_l]
  6364 00002922 66D1D8                  	rcr	ax, 1
  6365 00002925 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6366 00002928 66AB                    	stosw 		; interpolated sample 4 (L)
  6367 0000292A 89D8                    	mov	eax, ebx	
  6368 0000292C 660305[F9290000]        	add	ax, [next_val_r]
  6369 00002933 66D1D8                  	rcr	ax, 1
  6370 00002936 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6371 00002939 66AB                    	stosw 		; interpolated sample 4 (R)
  6372 0000293B 59                      	pop	ecx ; !
  6373 0000293C C3                      	retn
  6374                                  
  6375                                  interpolating_4_16bit_mono:
  6376                                  	; 18/11/2023
  6377                                  	; ax = [previous_val]
  6378                                  	; dx = [next_val]
  6379                                  	; 02/02/2025
  6380                                  	; original-interpolated-interpolated-interpolated
  6381                                  
  6382 0000293D 66AB                    	stosw		; original sample (L)
  6383 0000293F 66AB                    	stosw		; original sample (R)
  6384 00002941 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  6385 00002944 89C3                    	mov	ebx, eax ; [previous_val]
  6386 00002946 80C680                  	add	dh, 80h
  6387 00002949 6601D0                  	add	ax, dx	; [previous_val] + [next_val]
  6388 0000294C 66D1D8                  	rcr	ax, 1
  6389 0000294F 93                      	xchg	eax, ebx
  6390 00002950 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
  6391 00002953 66D1D8                  	rcr	ax, 1
  6392 00002956 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6393 00002959 66AB                    	stosw 		; interpolated sample 1 (L)
  6394 0000295B 66AB                    	stosw		; interpolated sample 1 (R)
  6395 0000295D 89D8                    	mov	eax, ebx ; interpolated middle
  6396 0000295F 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6397 00002962 66AB                    	stosw 		; interpolated sample 2 (L)
  6398 00002964 66AB                    	stosw		; interpolated sample 2 (R)
  6399 00002966 89D8                    	mov	eax, ebx
  6400 00002968 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  6401 0000296B 66D1D8                  	rcr	ax, 1
  6402 0000296E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6403 00002971 66AB                    	stosw		; interpolated sample 3 (L)
  6404 00002973 66AB                    	stosw		; interpolated sample 3 (R)
  6405 00002975 C3                      	retn
  6406                                  
  6407                                  interpolating_4_16bit_stereo:
  6408                                  	; 18/11/2023
  6409                                  	; bx = [previous_val_l]
  6410                                  	; ax = [previous_val_r]
  6411                                  	; [next_val_l]
  6412                                  	; [next_val_r]
  6413                                  	; original-interpolated-interpolated-interpolated
  6414 00002976 93                      	xchg	eax, ebx
  6415 00002977 66AB                    	stosw		; original sample (L)
  6416 00002979 93                      	xchg	eax, ebx
  6417 0000297A 66AB                    	stosw		; original sample (R)
  6418 0000297C 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  6419 0000297F 89C2                    	mov	edx, eax ; [previous_val_r]
  6420 00002981 80C780                  	add	bh, 80h
  6421 00002984 8005[F8290000]80        	add	byte [next_val_l+1], 80h
  6422 0000298B 66A1[F7290000]          	mov	ax, [next_val_l]
  6423 00002991 6601D8                  	add	ax, bx	; [previous_val_l]
  6424 00002994 66D1D8                  	rcr	ax, 1
  6425 00002997 93                      	xchg	eax, ebx
  6426 00002998 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
  6427 0000299B 66D1D8                  	rcr	ax, 1
  6428 0000299E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6429 000029A1 66AB                    	stosw 		; interpolated sample 1 (L)
  6430 000029A3 8005[FA290000]80        	add	byte [next_val_r+1], 80h
  6431 000029AA 89D0                    	mov	eax, edx ; [previous_val_r]
  6432 000029AC 660305[F9290000]        	add	ax, [next_val_r]
  6433 000029B3 66D1D8                  	rcr	ax, 1
  6434 000029B6 92                      	xchg	eax, edx
  6435 000029B7 6601D0                  	add	ax, dx	; dx = interpolated middle (R)
  6436 000029BA 66D1D8                  	rcr	ax, 1
  6437 000029BD 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6438 000029C0 66AB                    	stosw 		; interpolated sample 1 (R)
  6439 000029C2 89D8                    	mov	eax, ebx
  6440 000029C4 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6441 000029C7 66AB                    	stosw 		; interpolated sample 2 (L)
  6442 000029C9 89D0                    	mov	eax, edx
  6443 000029CB 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6444 000029CE 66AB                    	stosw 		; interpolated sample 2 (R)
  6445 000029D0 89D8                    	mov	eax, ebx
  6446 000029D2 660305[F7290000]        	add	ax, [next_val_l]
  6447 000029D9 66D1D8                  	rcr	ax, 1
  6448 000029DC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6449 000029DF 66AB                    	stosw 		; interpolated sample 3 (L)
  6450 000029E1 89D0                    	mov	eax, edx
  6451 000029E3 660305[F9290000]        	add	ax, [next_val_r]
  6452 000029EA 66D1D8                  	rcr	ax, 1
  6453 000029ED 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6454 000029F0 66AB                    	stosw 		; interpolated sample 3 (R)
  6455 000029F2 C3                      	retn
  6456                                  
  6457                                  ; 13/11/2023
  6458                                  previous_val:
  6459 000029F3 0000                    previous_val_l: dw 0
  6460 000029F5 0000                    previous_val_r: dw 0
  6461                                  next_val:
  6462 000029F7 0000                    next_val_l: dw 0
  6463 000029F9 0000                    next_val_r: dw 0
  6464                                  
  6465                                  ; 16/11/2023
  6466 000029FB 00                      faz:	db 0
  6467                                  
  6468                                  ; --------------------------------------------------------
  6469                                  ; 14/11/2024 - Erdogan Tan
  6470                                  ; --------------------------------------------------------
  6471                                  
  6472                                  	; 07/12/2024
  6473                                  	; 01/12/2024 (32bit registers)
  6474                                  	; 29/11/2024
  6475                                  checkUpdateEvents:
  6476 000029FC E8FC010000              	call	check4keyboardstop
  6477 00002A01 7279                    	jc	short c4ue_ok
  6478                                  
  6479                                  	; 18/11/2024
  6480 00002A03 50                      	push	eax ; *
  6481 00002A04 09C0                    	or	eax, eax
  6482 00002A06 0F8406010000            	jz	c4ue_cpt
  6483                                  
  6484                                  	; 18/11/2024
  6485 00002A0C 3C20                    	cmp	al, 20h ; SPACE (spacebar) ; pause/play
  6486 00002A0E 7543                    	jne	short c4ue_chk_s
  6487 00002A10 803D[F0850000]00        	cmp	byte [stopped], 0
  6488 00002A17 7714                    	ja	short c4ue_chk_ps
  6489                                  	; pause
  6490 00002A19 E881E4FFFF              	call	ac97_pause
  6491                                  	; 21/11/2024
  6492 00002A1E A0[F1850000]            	mov	al, [tLO]
  6493 00002A23 A2[F2850000]            	mov	byte [tLP], al
  6494 00002A28 E9E5000000              	jmp	c4ue_cpt
  6495                                  c4ue_chk_ps:
  6496 00002A2D 803D[F0850000]01        	cmp	byte [stopped], 1
  6497 00002A34 770A                    	ja	short c4ue_replay
  6498                                  	; continue to play (after a pause)
  6499 00002A36 E86DE4FFFF              	call	ac97_play 
  6500 00002A3B E9D2000000              	jmp	c4ue_cpt
  6501                                  c4ue_replay:
  6502                                  	; 19/11/2024
  6503 00002A40 58                      	pop	eax ; *
  6504 00002A41 58                      	pop	eax ; return address
  6505                                  	; 07/02/2024
  6506                                  	;mov	al, [volume]
  6507                                  	;call	SetmasterVolume
  6508 00002A42 C605[F0850000]00        	mov	byte [stopped], 0
  6509 00002A49 E8C9040000              	call	move_to_beginning
  6510                                  	;jmp	PlayWav
  6511                                  	; 07/12/2024
  6512 00002A4E E936DDFFFF              	jmp	RePlayWav
  6513                                  
  6514                                  c4ue_chk_s:
  6515 00002A53 3C53                    	cmp	al, 'S'	; stop
  6516 00002A55 7526                    	jne	short c4ue_chk_fb
  6517 00002A57 803D[F0850000]00        	cmp	byte [stopped], 0
  6518 00002A5E 0F87AE000000            	ja	c4ue_cpt ; Already stopped/paused
  6519 00002A64 E81DE4FFFF              	call	ac97_stop
  6520                                  	; 19/11/2024
  6521 00002A69 C605[F1850000]00        	mov	byte [tLO], 0
  6522                                  	; 21/11/2024
  6523 00002A70 C605[F2850000]30        	mov	byte [tLP], '0'
  6524 00002A77 E996000000              	jmp	c4ue_cpt
  6525                                  
  6526                                  	; 01/12/2024
  6527                                  	; 18/11/2024
  6528                                  c4ue_ok:
  6529 00002A7C C3                      	retn
  6530                                  
  6531                                  c4ue_chk_fb:
  6532                                  	; 17/11/2024
  6533 00002A7D 3C46                    	cmp	al, 'F'
  6534 00002A7F 750A                    	jne	short c4ue_chk_b
  6535 00002A81 E869040000              	call 	Player_ProcessKey_Forwards
  6536 00002A86 E987000000              	jmp	c4ue_cpt
  6537                                  
  6538                                  c4ue_chk_b:
  6539 00002A8B 3C42                    	cmp	al, 'B'
  6540                                  	;;jne	short c4ue_cpt
  6541                                  	; 19/11/2024
  6542                                  	;jne	short c4ue_chk_h
  6543                                  	; 25/12/2024
  6544                                  	; 29/11/2024
  6545 00002A8D 7507                    	jne	short c4ue_chk_n
  6546 00002A8F E857040000              	call 	Player_ProcessKey_Backwards
  6547 00002A94 EB7C                    	jmp	short c4ue_cpt
  6548                                  
  6549                                  	;;;
  6550                                  	; 25/12/2024
  6551                                  	; 29/11/2024
  6552                                  c4ue_chk_n:
  6553 00002A96 3C4E                    	cmp	al, 'N'
  6554 00002A98 7404                    	je	short c4ue_nps
  6555                                  c4ue_chk_p:
  6556 00002A9A 3C50                    	cmp	al, 'P'
  6557 00002A9C 7509                    	jne	short c4ue_chk_h
  6558                                  c4ue_nps:
  6559 00002A9E C605[F0850000]03        	mov	byte [stopped], 3
  6560 00002AA5 EB6B                    	jmp	short c4ue_cpt
  6561                                  	;;;
  6562                                  
  6563                                  c4ue_chk_h:
  6564                                  	; 19/11/2024
  6565 00002AA7 3C48                    	cmp	al, 'H'
  6566 00002AA9 7515                    	jne	short c4ue_chk_cr
  6567 00002AAB C605[F3850000]00        	mov	byte [wleds], 0
  6568 00002AB2 E87FE5FFFF              	call 	write_ac97_pci_dev_info
  6569                                  	;;;
  6570                                  	;24/12/2024 (wave lighting points option)
  6571 00002AB7 C605[02860000]01        	mov	byte [p_mode], 1
  6572                                  	;;;
  6573                                  	;mov	dh, 24
  6574                                  	;mov	dl, 79
  6575                                  	;call	setCursorPosition
  6576                                  	; 21/12/2024
  6577 00002ABE EB52                    	jmp	short c4ue_cpt
  6578                                  c4ue_chk_cr:
  6579                                  	;;;
  6580                                  	; 24/12/2024 (wave lighting points option)
  6581 00002AC0 8A25[F3850000]          	mov	ah, [wleds]
  6582 00002AC6 3C47                    	cmp	al, 'G'
  6583 00002AC8 7432                    	je	short c4ue_g
  6584                                  ;	;;;
  6585                                  ;	; 26/12/2024
  6586                                  ;	cmp	al, 'T'
  6587                                  ;	jne	short c4ue_chk_cr_@
  6588                                  ;	inc	byte [tcolor]
  6589                                  ;	and 	byte [tcolor], 0Fh
  6590                                  ;	jnz	short c4ue_cpt
  6591                                  ;	inc	byte [tcolor]
  6592                                  ;	jmp	short c4ue_cpt
  6593                                  ;c4ue_chk_cr_@:
  6594                                  ;	;;;
  6595                                  	; 19/11/2024
  6596 00002ACA 3C0D                    	cmp	al, 0Dh ; ENTER/CR key
  6597 00002ACC 7544                    	jne	short c4ue_cpt
  6598                                  	;inc	byte [wleds]
  6599                                  	;jnz	short c4ue_cpt
  6600                                  	;inc	byte [wleds]
  6601                                  	;;;
  6602                                  	; 24/12/2024
  6603                                  	; 22/12/2024 (faster method)
  6604                                  	; (UpdateWaveLeds procedure turns off previously
  6605                                  	;  lighting wave leds only)
  6606                                  	;call	reset_wave_leds ; prepare all leds as turned off
  6607                                  	;;;
  6608                                  	; 23/11/2024
  6609 00002ACE 31DB                    	xor	ebx, ebx
  6610                                  	; 24/12/2024 (wave lighting points option)
  6611 00002AD0 881D[02860000]          	mov	[p_mode], bl ; 0
  6612                                  	;
  6613                                  	;mov	bl, [wleds]
  6614 00002AD6 88E3                    	mov	bl, ah ; 24/12/2024
  6615 00002AD8 FEC3                    	inc	bl
  6616 00002ADA 80E30F                  	and	bl, 0Fh
  6617 00002ADD 7501                    	jnz	short c4ue_sc
  6618 00002ADF 43                      	inc	ebx
  6619                                  c4ue_sc:
  6620 00002AE0 881D[F3850000]          	mov	[wleds], bl
  6621 00002AE6 D0EB                    	shr	bl, 1
  6622 00002AE8 8A83[89480000]          	mov	al, [ebx+colors]
  6623                                  	; 24/12/2024
  6624 00002AEE A2[91480000]            	mov	[ccolor], al
  6625 00002AF3 7211                    	jc	short c4ue_g_@
  6626                                  	; 24/12/2024
  6627 00002AF5 E867040000              	call	reset_wave_leds ; prepare all leds as turned off
  6628 00002AFA EB16                    	jmp	short c4ue_cpt
  6629                                  	; 24/12/2024
  6630                                  c4ue_g:
  6631 00002AFC 08E4                    	or	ah, ah	; byte [wleds]
  6632 00002AFE 7506                    	jnz	short c4ue_g_@
  6633 00002B00 FE05[F3850000]          	inc	byte [wleds]	; force wave lighting ('G' key)
  6634                                  c4ue_g_@:
  6635                                  	; 24/12/2024 (wave lighting points option)
  6636 00002B06 C605[02860000]01        	mov	byte [p_mode], 1
  6637 00002B0D E834040000              	call	clear_window
  6638                                  	;;;
  6639                                  c4ue_cpt:
  6640                                  	; 24/12/2024
  6641                                  	; 18/11/2024
  6642 00002B12 59                      	pop	ecx ; *
  6643                                  	;;;
  6644                                  	; 29/12/2024
  6645                                  	; 24/12/2024 (skip wave lighting if data is not loaded yet)
  6646                                  	;cmp	byte [SRB], 0
  6647                                  	;ja	short c4ue_vb_ok
  6648                                  	;;;
  6649                                  	; 01/12/2024 (TRDOS 386)
  6650                                  	sys	_time, 4 ; get timer ticks (18.2 ticks/second),
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002B13 BB04000000          <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96                              <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98                              <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002B18 B80D000000          <1>  mov eax, %1
   103                              <1> 
   104 00002B1D CD40                <1>  int 40h
  6651                                  	; 24/12/2024
  6652                                  	; 18/11/2024
  6653                                  	;pop	ecx ; *
  6654                                  	; 01/12/2024
  6655 00002B1F 3B05[C4860000]          	cmp	eax, [timerticks]
  6656                                  	;je	short c4ue_ok
  6657                                  	; 18/11/2024
  6658 00002B25 7407                    	je	short c4ue_skip_utt
  6659                                  c4ue_utt:	
  6660                                  	; 01/12/2024
  6661 00002B27 A3[C4860000]            	mov	[timerticks], eax
  6662 00002B2C EB04                    	jmp	short c4ue_cpt_@
  6663                                  c4ue_skip_utt:
  6664                                  	; 18/11/2024
  6665 00002B2E 21C9                    	and	ecx, ecx
  6666 00002B30 7432                    	jz	short c4ue_vb_ok
  6667                                  c4ue_cpt_@:
  6668                                  	; 18/11/2024
  6669 00002B32 803D[F0850000]00        	cmp	byte [stopped], 0
  6670 00002B39 7729                    	ja	short c4ue_vb_ok
  6671                                  	
  6672 00002B3B E8EE010000              	call	CalcProgressTime
  6673                                  
  6674                                  	;cmp	ax, [ProgressTime]
  6675                                  	; 01/12/2024
  6676 00002B40 3B05[B8860000]          	cmp	eax, [ProgressTime]
  6677                                  	;je	short c4ue_vb_ok
  6678                                  			; same second, no need to update
  6679                                  	; 23/11/2024
  6680 00002B46 7405                    	je	short c4ue_uvb
  6681                                  
  6682                                  	;call	UpdateProgressTime
  6683                                  	;call	UpdateProgressBar@
  6684 00002B48 E812030000              	call	UpdateProgressBar
  6685                                  
  6686                                  	; 23/11/2024
  6687                                  c4ue_uvb:
  6688 00002B4D 803D[F3850000]00        	cmp	byte [wleds], 0
  6689 00002B54 760E                    	jna	short c4ue_vb_ok
  6690                                  
  6691                                  	; 24/12/2024 (wave points mode)
  6692 00002B56 803D[02860000]00        	cmp	byte [p_mode], 0
  6693 00002B5D 7706                    	ja	short c4ue_uwp
  6694                                  
  6695 00002B5F E847040000              	call	UpdateWaveLeds
  6696                                  
  6697                                  c4ue_vb_ok:
  6698 00002B64 C3                      	retn
  6699                                  
  6700                                  	; 22/12/2024
  6701                                  c4ue_uwp:
  6702                                  	;call	UpdateWavePoints
  6703                                  	;retn
  6704                                  
  6705                                  ; --------------------------------------------------------
  6706                                  ; 27/12/2024 - Erdogan Tan
  6707                                  ; --------------------------------------------------------
  6708                                  
  6709                                  	; 29/12/2024
  6710                                  	; 27/12/2024 (DMA Buffer Tracking)
  6711                                  	; 26/12/2024
  6712                                  	; 24/12/2024
  6713                                  UpdateWavePoints:
  6714 00002B65 BE[F07B0000]            	mov	esi, prev_points
  6715 00002B6A 833E00                  	cmp	dword [esi], 0
  6716 00002B6D 740B                    	jz	short lights_off_ok
  6717 00002B6F B980020000              	mov	ecx, 640
  6718                                  light_off:
  6719 00002B74 AD                      	lodsd
  6720                                  	; eax = wave point (lighting point) address
  6721 00002B75 C60000                  	mov	byte [eax], 0 ; black point (light off)
  6722 00002B78 E2FA                    	loop	light_off	
  6723                                  
  6724                                  lights_off_ok:
  6725                                  	; 29/12/2024
  6726 00002B7A 803D[F1850000]32        	cmp	byte [tLO],'2'
  6727 00002B81 7507                    	jne	short lights_on_buff_1
  6728                                  lights_on_buff_2:
  6729 00002B83 BA[00A00100]            	mov	edx, WAVBUFFER_2
  6730 00002B88 EB05                    	jmp	short lights_on
  6731                                  lights_on_buff_1:
  6732 00002B8A BA[00A00000]            	mov	edx, WAVBUFFER_1
  6733                                  lights_on:
  6734 00002B8F 3915[FC850000]          	cmp	[pbuf_s], edx
  6735 00002B95 7520                    	jne	short lights_on_2
  6736 00002B97 8B1D[D47B0000]          	mov	ebx, [wpoints_dif]
  6737 00002B9D 8B35[F8850000]          	mov	esi, [pbuf_o]
  6738 00002BA3 8B0D[B0860000]          	mov	ecx, [buffersize] ; bytes
  6739 00002BA9 29D9                    	sub	ecx, ebx ; sub ecx, [wpoints_dif]
  6740 00002BAB 01DE                    	add	esi, ebx
  6741 00002BAD 7204                    	jc	short lights_on_1
  6742 00002BAF 39CE                    	cmp	esi, ecx
  6743 00002BB1 760C                    	jna	short lights_on_3
  6744                                  lights_on_1:
  6745 00002BB3 89CE                    	mov	esi, ecx
  6746 00002BB5 EB08                    	jmp	short lights_on_3
  6747                                  
  6748                                  lights_on_2:
  6749                                  	; 29/12/2024
  6750 00002BB7 8915[FC850000]          	mov	[pbuf_s], edx
  6751 00002BBD 31F6                    	xor	esi, esi ; 0
  6752                                  lights_on_3:
  6753 00002BBF 8935[F8850000]          	mov	[pbuf_o], esi
  6754                                  	; 29/12/2024
  6755                                  	;add	esi, [pbuf_s]
  6756 00002BC5 01D6                    	add	esi, edx
  6757 00002BC7 B980020000              	mov	ecx, 640
  6758 00002BCC 89CD                    	mov	ebp, ecx
  6759                                  	; 26/12/2024
  6760 00002BCE BF[F07B0000]            	mov	edi, prev_points
  6761 00002BD3 8B1D[D87B0000]          	mov	ebx, [graphstart] ; start (top) line
  6762                                  lights_on_4:
  6763 00002BD9 31C0                    	xor	eax, eax ; 0
  6764 00002BDB 66AD                    	lodsw	; left
  6765 00002BDD 80C480                  	add	ah, 80h
  6766 00002BE0 89C2                    	mov	edx, eax
  6767 00002BE2 66AD                    	lodsw	; right
  6768                                  	;add	ax, dx
  6769 00002BE4 80C480                  	add	ah, 80h
  6770                                  	;shr	eax, 9	; 128 volume levels
  6771 00002BE7 01D0                    	add	eax, edx
  6772                                  	;shr	eax, 10	; (L+R/2) & 128 volume levels
  6773 00002BE9 C1E809                  	shr	eax, 9	; (L+R/2) & 256 volume levels
  6774 00002BEC F7E5                    	mul	ebp	; * 640 (row)
  6775 00002BEE 01D8                    	add	eax, ebx ; + column
  6776 00002BF0 8A15[91480000]          	mov	dl, [ccolor]
  6777 00002BF6 8810                    	mov	[eax], dl ; pixel (light on) color
  6778 00002BF8 AB                      	stosd		; save light on addr in prev_points
  6779 00002BF9 43                      	inc	ebx
  6780 00002BFA E2DD                    	loop	lights_on_4
  6781 00002BFC C3                      	retn
  6782                                  
  6783                                  ; --------------------------------------------------------
  6784                                  ; 19/05/2024 - (playwav4.asm) ich_wav4.asm
  6785                                  ; --------------------------------------------------------
  6786                                  
  6787                                  	; 29/12/2024
  6788                                  	; 25/12/2024
  6789                                  	; 07/12/2024
  6790                                  	; 01/12/2024 (TRDOS 386)
  6791                                  	; 29/11/2024
  6792                                  check4keyboardstop:
  6793                                  	; 19/05/2024
  6794                                  	; 08/11/2023
  6795                                  	; 04/11/2023
  6796 00002BFD B401                    	mov	ah, 1
  6797                                  	;int	16h
  6798                                  	; 01/12/2024 (TRDOS 386 keyboard interrupt)
  6799 00002BFF CD32                    	int	32h
  6800                                  	;clc
  6801 00002C01 7433                    	jz	short _cksr
  6802                                  
  6803 00002C03 30E4                    	xor	ah, ah
  6804                                  	;int	16h
  6805                                  	; 01/12/2024 (TRDOS 386 keyboard interrupt)
  6806 00002C05 CD32                    	int	32h
  6807                                  
  6808                                  	; 25/12/2024
  6809                                  	; 29/11/2024
  6810                                  	;mov	[command], al
  6811                                  
  6812                                  	;;;
  6813                                  	; 19/05/2024 (change PCM out volume)
  6814 00002C07 3C2B                    	cmp	al, '+'
  6815 00002C09 750D                    	jne	short p_1
  6816                                  	
  6817 00002C0B A0[602C0000]            	mov	al, [volume]
  6818 00002C10 3C00                    	cmp	al, 0
  6819 00002C12 7624                    	jna	short p_3
  6820 00002C14 FEC8                    	dec	al
  6821 00002C16 EB0F                    	jmp	short p_2
  6822                                  p_1:
  6823 00002C18 3C2D                    	cmp	al, '-'
  6824 00002C1A 751D                    	jne	short p_4
  6825                                  
  6826 00002C1C A0[602C0000]            	mov	al, [volume]
  6827 00002C21 3C1F                    	cmp	al, 31
  6828 00002C23 7313                    	jnb	short p_3
  6829 00002C25 FEC0                    	inc	al
  6830                                  p_2:
  6831 00002C27 A2[602C0000]            	mov	[volume], al
  6832                                  	; 29/12/2024
  6833                                  	; 14/11/2024
  6834 00002C2C E892DDFFFF              	call	SetPCMOutVolume
  6835                                  	; 15/11/2024 (QEMU)
  6836                                  	; 07/12/2024
  6837                                  	;call	SetMasterVolume
  6838                                  	;call	UpdateVolume
  6839                                  	;;clc
  6840                                  	;retn
  6841 00002C31 E999010000              	jmp	UpdateVolume
  6842                                  	;mov	ah, al
  6843                                  	;mov    dx, [NAMBAR]
  6844                                    	;;add   dx, CODEC_MASTER_VOL_REG
  6845                                  	;add	dx, CODEC_PCM_OUT_REG
  6846                                  	;out    dx, ax
  6847                                  	;
  6848                                  	;call   delay1_4ms
  6849                                          ;call   delay1_4ms
  6850                                          ;call   delay1_4ms
  6851                                          ;call   delay1_4ms
  6852                                  _cksr:		; 19/05/2024
  6853                                  	; 18/12/2024
  6854 00002C36 31C0                    	xor	eax, eax
  6855                                  	;clc
  6856                                  p_3:
  6857 00002C38 C3                      	retn
  6858                                  p_4:
  6859                                  	; 17/11/2024
  6860 00002C39 80FC01                  	cmp	ah, 01h  ; ESC
  6861 00002C3C 7419                        	je	short p_q
  6862                                  	;cmp	ax, 2E03h ; 21/12/2024 
  6863 00002C3E 3C03                    	cmp	al, 03h  ; CTRL+C
  6864 00002C40 7415                    	je	short p_q
  6865                                  
  6866                                  	; 18/11/2024
  6867 00002C42 3C20                    	cmp	al, 20h
  6868 00002C44 7419                    	je	short p_r
  6869                                  
  6870                                  	; 19/11/2024
  6871 00002C46 3C0D                    	cmp	al, 0Dh ; CR/ENTER
  6872 00002C48 7415                    	je	short p_r
  6873                                  
  6874 00002C4A 24DF                    	and	al, 0DFh
  6875                                  
  6876                                  	; 25/12/2024
  6877                                  	; 29/11/2024
  6878 00002C4C A2[03860000]            	mov	[command], al
  6879                                  
  6880                                  	;cmp	al, 'B'
  6881                                  	;je	short p_r
  6882                                  	;cmp	al, 'F'
  6883                                  	;je	short p_r
  6884                                  
  6885                                  	; 29/11/2024
  6886                                  	;cmp	al, 'N'
  6887                                  	;je	short p_r
  6888                                  	;cmp	al, 'P'
  6889                                  	;je	short p_r
  6890                                  
  6891 00002C51 3C51                    	cmp	al, 'Q'
  6892                                  	;je	short p_q
  6893 00002C53 7409                    	je	short p_quit ; 29/11/2024
  6894                                  
  6895 00002C55 F8                      	clc
  6896 00002C56 C3                      	retn
  6897                                  
  6898                                  	;;;
  6899                                  ;_cskr:	
  6900                                  p_q:
  6901                                  	; 27/12/2024
  6902 00002C57 C605[03860000]51        	mov	byte [command], 'Q'
  6903                                  p_quit:
  6904 00002C5E F9                      	stc
  6905                                  p_r:
  6906 00002C5F C3                      	retn
  6907                                  
  6908                                  ; 29/05/2024
  6909                                  ; 19/05/2024
  6910                                  volume: 
  6911                                  	;db	02h
  6912                                  ; 26/12/2024
  6913 00002C60 03                      	db	03h
  6914                                  
  6915                                  ; --------------------------------------------------------
  6916                                  
  6917                                  	; 22/12/2024
  6918                                  	; 21/12/2024
  6919                                  	; simulate cursor position in VGA (VESA VBE) mode
  6920                                  	; ! for 640*480, 256 colors (1 byte/pixel) !
  6921                                  setCursorPosition:
  6922                                  	; dh = Row
  6923                                  	; dl = Column
  6924                                  	
  6925 00002C61 31C0                    	xor	eax, eax
  6926 00002C63 B00E                    	mov	al, 14	; row height is 14 pixels (8*14)
  6927 00002C65 F6E6                    	mul	dh
  6928 00002C67 6683C007                	add	ax, 7	; top margin
  6929 00002C6B C1E010                  	shl	eax, 16
  6930 00002C6E 88D0                    	mov	al, dl	; * 8 ; character width = 8 pixels
  6931 00002C70 66C1E003                	shl	ax, 3
  6932                                  			; hw = row, ax = column
  6933 00002C74 A3[E07B0000]            	mov	[screenpos], eax
  6934                                  	; 22/12/2024
  6935 00002C79 31C0                    	xor	eax, eax
  6936 00002C7B C3                      	retn
  6937                                  	
  6938                                  ; --------------------------------------------------------
  6939                                  ; 14/11/2024
  6940                                  ; (Ref: player.asm, out_cs.asm, Matan Alfasi, 2017)
  6941                                  
  6942                                  ;; NAME:	SetTotalTime
  6943                                  ;; DESCRIPTION: Calculates the total time in seconds in file
  6944                                  ;; INPUT:	DATA_SubchunkSize, WAVE_SampleRate, WAVE_BlockAlign
  6945                                  ;; OUTPUT:	CurrentTotalTime=Total time in seconds in file,
  6946                                  ;; 		Output on the screen of the total time in seconds
  6947                                  
  6948                                  	; 01/12/2024 (32 bit registers)
  6949                                  SetTotalTime:
  6950                                  	;; Calculate total seconds in file
  6951                                  	;mov	ax, [DATA_SubchunkSize]
  6952                                  	;mov	dx, [DATA_SubchunkSize + 2]
  6953                                  	;mov	bx, [WAVE_SampleRate]
  6954                                  	;div	bx
  6955                                  	;xor	dx, dx
  6956                                  	; 01/12/2024
  6957 00002C7C A1[30860000]            	mov	eax, [DATA_SubchunkSize]
  6958 00002C81 0FB71D[20860000]        	movzx	ebx, word [WAVE_SampleRate]
  6959 00002C88 31D2                    	xor	edx, edx
  6960 00002C8A F7F3                    	div	ebx
  6961                                  
  6962                                  	;mov	bx, [WAVE_BlockAlign]
  6963                                  	;div	bx
  6964                                  	; 01/12/2024
  6965 00002C8C 668B1D[28860000]        	mov	bx, [WAVE_BlockAlign]
  6966 00002C93 31D2                    	xor	edx, edx
  6967 00002C95 F7F3                    	div	ebx
  6968                                  
  6969                                  	;mov	[TotalTime], ax
  6970 00002C97 A3[B4860000]            	mov	[TotalTime], eax
  6971                                  
  6972 00002C9C B33C                    	mov	bl, 60
  6973 00002C9E F6F3                    	div	bl
  6974                                  
  6975                                  	;; al = minutes, ah = seconds
  6976 00002CA0 50                      	push	eax ; **
  6977 00002CA1 50                      	push	eax ; *
  6978                                  
  6979                                  	;mov	dh, 24
  6980                                  	; 21/12/2024 (640*480)
  6981 00002CA2 B620                    	mov	dh, 32
  6982 00002CA4 B22A                    	mov	dl, 42
  6983 00002CA6 E8B6FFFFFF              	call	setCursorPosition
  6984                                  
  6985 00002CAB 58                      	pop	eax ; *
  6986 00002CAC 30E4                    	xor	ah, ah
  6987 00002CAE BD02000000              	mov	ebp, 2
  6988 00002CB3 E812000000              	call	PrintNumber
  6989                                  	
  6990                                  	;mov	dh, 24
  6991                                  	; 21/12/2024 (640*480)
  6992 00002CB8 B620                    	mov	dh, 32
  6993 00002CBA B22D                    	mov	dl, 45
  6994 00002CBC E8A0FFFFFF              	call	setCursorPosition
  6995                                  
  6996 00002CC1 58                      	pop	eax ; **
  6997 00002CC2 88E0                    	mov	al, ah
  6998 00002CC4 30E4                    	xor	ah, ah
  6999                                  	; 21/12/2024
  7000 00002CC6 66BD0200                	mov	bp, 2
  7001                                  	;jmp	short PrintNumber
  7002                                  
  7003                                  ; --------------------------------------------------------
  7004                                  
  7005                                  	; 21/12/2024 (write numbers in VESA VBE graphics mode)
  7006                                  	; 01/12/2024 (32bit registers)
  7007                                  PrintNumber:
  7008                                  	; eax = binary number
  7009                                  	; ebp = digits
  7010 00002CCA 8B35[E07B0000]          	mov	esi, [screenpos]
  7011                                  		; hw = row, si = column
  7012 00002CD0 BB0A000000              	mov	ebx, 10
  7013 00002CD5 31C9                    	xor	ecx, ecx
  7014                                  printNumber_CutNumber:
  7015 00002CD7 41                      	inc	ecx
  7016 00002CD8 31D2                    	xor	edx, edx
  7017 00002CDA F7F3                    	div	ebx
  7018 00002CDC 52                      	push	edx
  7019 00002CDD 39E9                    	cmp	ecx, ebp
  7020 00002CDF 7402                    	je	short printNumber_printloop
  7021 00002CE1 EBF4                    	jmp	printNumber_CutNumber
  7022                                  
  7023                                  printNumber_printloop:
  7024 00002CE3 58                      	pop	eax
  7025                                  	; 21/12/2024
  7026                                  	; ebp = count of digits
  7027                                  	; eax <= 9
  7028                                  
  7029 00002CE4 0430                    	add	al, '0'
  7030                                  	
  7031                                  	; esi = pixel position (hw = row, si = column)
  7032                                  	; eax = al = character
  7033                                  	;call	write_character
  7034                                  	; 22/12/2024
  7035 00002CE6 E82A010000              	call	write_character_white
  7036                                  
  7037 00002CEB 4D                      	dec	ebp
  7038 00002CEC 7405                     	jz	short printNumber_ok
  7039 00002CEE 83C608                  	add	esi, 8	; next column
  7040 00002CF1 EBF0                    	jmp	short printNumber_printloop
  7041                                  printNumber_ok:
  7042 00002CF3 C3                      	retn
  7043                                  
  7044                                  ; --------------------------------------------------------
  7045                                  
  7046                                  	; 14/11/2024 - Erdogan Tan
  7047                                  SetProgressTime:
  7048                                  	;; Calculate playing/progress seconds in file
  7049 00002CF4 E835000000              	call	CalcProgressTime
  7050                                  
  7051                                  	; 01/12/2024 (32bit registers)
  7052                                  UpdateProgressTime:
  7053                                  	; eax = (new) progress time 
  7054                                  
  7055 00002CF9 A3[B8860000]            	mov	[ProgressTime], eax
  7056                                  
  7057 00002CFE B33C                    	mov	bl, 60
  7058 00002D00 F6F3                    	div	bl
  7059                                  
  7060                                  	;; al = minutes, ah = seconds
  7061 00002D02 50                      	push	eax ; **
  7062 00002D03 50                      	push	eax ; *
  7063                                  
  7064                                  	;mov	dh, 24
  7065                                  	; 21/12/2024 (640*480)
  7066 00002D04 B620                    	mov	dh, 32
  7067 00002D06 B221                    	mov	dl, 33
  7068 00002D08 E854FFFFFF              	call	setCursorPosition
  7069                                  
  7070 00002D0D 58                      	pop	eax ; *
  7071 00002D0E 30E4                    	xor	ah, ah
  7072 00002D10 BD02000000              	mov	ebp, 2
  7073 00002D15 E8B0FFFFFF              	call	PrintNumber
  7074                                  	
  7075                                  	;mov	dh, 24
  7076                                  	; 21/12/2024 (640*480)
  7077 00002D1A B620                    	mov	dh, 32
  7078 00002D1C B224                    	mov	dl, 36
  7079 00002D1E E83EFFFFFF              	call	setCursorPosition
  7080                                  
  7081 00002D23 58                      	pop	eax ; **
  7082 00002D24 88E0                    	mov	al, ah
  7083 00002D26 30E4                    	xor	ah, ah
  7084                                  	; 21/12/2024
  7085 00002D28 66BD0200                	mov	bp, 2
  7086 00002D2C EB9C                    	jmp	short PrintNumber
  7087                                  
  7088                                  ; --------------------------------------------------------
  7089                                  
  7090                                  	; 01/12/2024 (32bit registers)
  7091                                  	; 17/11/2024
  7092                                  	; 14/11/2024
  7093                                  CalcProgressTime:
  7094                                  	;mov	ax, [LoadedDataBytes]
  7095                                  	;mov	dx, [LoadedDataBytes+2]
  7096                                  	;mov	bx, ax
  7097                                  	;or	bx, dx
  7098                                  	;jz	short cpt_ok
  7099                                  	; 01/12/2024
  7100 00002D2E A1[C0860000]            	mov	eax, [LoadedDataBytes]
  7101 00002D33 09C0                    	or	eax, eax
  7102 00002D35 7416                    	jz	short cpt_ok
  7103                                  
  7104                                  	;mov	bx, [WAVE_SampleRate]
  7105                                  	;div	bx
  7106                                  	;xor	dx, dx
  7107                                  	;mov	bx, [WAVE_BlockAlign]
  7108                                  	;div	bx
  7109                                  	; 01/12/2024
  7110 00002D37 0FB71D[20860000]        	movzx	ebx, word [WAVE_SampleRate]
  7111 00002D3E 31D2                    	xor	edx, edx
  7112 00002D40 F7F3                    	div	ebx
  7113 00002D42 31D2                    	xor	edx, edx
  7114 00002D44 668B1D[28860000]        	mov	bx, [WAVE_BlockAlign]
  7115 00002D4B F7F3                    	div	ebx
  7116                                  cpt_ok:
  7117                                  	; eax = (new) progress time
  7118 00002D4D C3                      	retn
  7119                                  
  7120                                  ; --------------------------------------------------------
  7121                                  ; 14/11/2024
  7122                                  ; (Ref: player.asm, out_cs.asm, Matan Alfasi, 2017)
  7123                                  
  7124                                  ;; DESCRIPTION: Update file information on template
  7125                                  ;; PARAMS:	WAVE parameters and other variables
  7126                                  ;; REGS:	AX(RW)
  7127                                  ;; VARS:	CurrentFileName, WAVE_SampleRate, 
  7128                                  ;; RETURNS:	On-screen file info is updated.
  7129                                  
  7130                                  	; 01/12/2024 (32bit registers)
  7131                                  UpdateFileInfo:
  7132                                  	;; Print File Name
  7133                                  	;mov	dh, 9
  7134                                  	; 21/12/2024 (640*480 graphics display)
  7135 00002D4E B608                    	mov	dh, 8
  7136 00002D50 B217                    	mov	dl, 23
  7137 00002D52 E80AFFFFFF              	call	setCursorPosition
  7138                                  	
  7139 00002D57 BE[48860000]            	mov	esi, wav_file_name
  7140                                  	
  7141                                  	;;;
  7142                                  	; 14/11/2024
  7143                                  	; skip directory separators
  7144                                  	; (note: asciiz string, max. 79 bytes except zero tail)
  7145 00002D5C 89F3                    	mov	ebx, esi
  7146                                  chk4_nxt_sep:
  7147 00002D5E AC                      	lodsb
  7148 00002D5F 3C2F                    	cmp	al, '/'	; 14/12/2024
  7149 00002D61 7406                    	je	short chg_fpos
  7150 00002D63 20C0                    	and	al, al
  7151 00002D65 7406                    	jz	short chg_fpos_ok
  7152 00002D67 EBF5                    	jmp	short chk4_nxt_sep
  7153                                  chg_fpos:
  7154 00002D69 89F3                    	mov	ebx, esi
  7155 00002D6B EBF1                    	jmp	short chk4_nxt_sep
  7156                                  chg_fpos_ok:
  7157 00002D6D 89DE                    	mov	esi, ebx ; file name (without its path/directory)
  7158                                  	;;;
  7159                                  _fnl_chk:
  7160                                  	; 26/12/2024 (file name length limit -display-)
  7161                                  	;mov	ebx, 12
  7162 00002D6F BB11000000              	mov	ebx, 17 ; ????????.wav?????
  7163 00002D74 56                      	push	esi
  7164                                  _fnl_chk_loop:
  7165 00002D75 AC                      	lodsb
  7166 00002D76 20C0                    	and	al, al
  7167 00002D78 7406                    	jz	short _fnl_ok
  7168 00002D7A 4B                       	dec	ebx
  7169 00002D7B 75F8                    	jnz	short _fnl_chk_loop
  7170 00002D7D C60600                  	mov	byte [esi], 0
  7171                                  _fnl_ok:
  7172 00002D80 5E                      	pop	esi
  7173                                  	;;;
  7174                                  
  7175 00002D81 E870000000              	call	PrintString
  7176                                  	
  7177                                  	;; Print Frequency
  7178                                  	;mov	dh, 10
  7179                                  	; 21/12/2024 (640*480 graphics display)
  7180 00002D86 B609                    	mov	dh, 9
  7181 00002D88 B217                    	mov	dl, 23
  7182 00002D8A E8D2FEFFFF              	call	setCursorPosition
  7183                                  	;movzx	eax, word [WAVE_SampleRate]
  7184                                  	; 22/12/2024
  7185                                  	; eax = 0
  7186 00002D8F 66A1[20860000]          	mov	ax, [WAVE_SampleRate]
  7187 00002D95 BD05000000              	mov	ebp, 5
  7188 00002D9A E82BFFFFFF              	call	PrintNumber
  7189                                  
  7190                                  	;; Print BitRate
  7191                                  	;mov	dh, 9
  7192                                  	; 21/12/2024 (640*480 graphics display)
  7193 00002D9F B608                    	mov	dh, 8
  7194 00002DA1 B239                    	mov	dl, 57
  7195 00002DA3 E8B9FEFFFF              	call	setCursorPosition
  7196 00002DA8 66A1[2A860000]          	mov	ax, [WAVE_BitsPerSample]
  7197 00002DAE 66BD0200                	mov	bp, 2
  7198 00002DB2 E813FFFFFF              	call	PrintNumber
  7199                                  
  7200                                  	;; Print Channel Number
  7201                                  	;mov	dh, 10
  7202                                  	; 21/12/2024 (640*480 graphics display)
  7203 00002DB7 B609                    	mov	dh, 9
  7204 00002DB9 B239                    	mov	dl, 57
  7205 00002DBB E8A1FEFFFF              	call	setCursorPosition
  7206 00002DC0 66A1[1E860000]          	mov	ax, [WAVE_NumChannels]
  7207 00002DC6 66BD0100                	mov	bp, 1
  7208 00002DCA E8FBFEFFFF              	call	PrintNumber
  7209                                  
  7210                                  	;call	UpdateVolume
  7211                                  	;retn
  7212                                  
  7213                                  ; --------------------------------------------------------
  7214                                  
  7215                                  	; 14/11/2024
  7216                                  UpdateVolume:
  7217                                  	;; Print Volume
  7218                                  	;mov	dh, 24
  7219                                  	; 21/12/2024 (640*480)
  7220 00002DCF B620                    	mov	dh, 32
  7221 00002DD1 B24B                    	mov	dl, 75
  7222 00002DD3 E889FEFFFF              	call	setCursorPosition
  7223                                  	; 22/12/2024
  7224                                  	; eax = 0
  7225                                  
  7226 00002DD8 A0[602C0000]            	mov	al, [volume]
  7227                                  
  7228 00002DDD B364                    	mov	bl, 100
  7229 00002DDF F6E3                    	mul	bl
  7230                                  
  7231 00002DE1 B31F                    	mov	bl, 31
  7232 00002DE3 F6F3                    	div	bl
  7233                                  
  7234                                  	;neg	ax
  7235                                  	;add	ax, 100	
  7236                                  	; 01/12/2024
  7237 00002DE5 B464                    	mov	ah, 100
  7238 00002DE7 28C4                    	sub	ah, al
  7239 00002DE9 0FB6C4                  	movzx	eax, ah
  7240                                  	;xor	ah, ah
  7241                                  	;mov	bp, 3
  7242 00002DEC BD03000000              	mov	ebp, 3
  7243                                  	;call	PrintNumber
  7244                                  	;retn
  7245 00002DF1 E9D4FEFFFF              	jmp	PrintNumber	
  7246                                  
  7247                                  ; --------------------------------------------------------
  7248                                  
  7249                                  	; 21/12/2024
  7250                                  	; write text in VESA VBE graphics mode
  7251                                  PrintString:
  7252                                  	; esi = string address
  7253                                  printstr_loop:
  7254 00002DF6 31C0                    	xor	eax, eax
  7255 00002DF8 AC                      	lodsb
  7256 00002DF9 08C0                    	or	al, al
  7257 00002DFB 7417                    	jz	short printstr_ok
  7258                                  
  7259 00002DFD 56                      	push	esi
  7260                                  
  7261 00002DFE 8B35[E07B0000]          	mov	esi, [screenpos]
  7262                                  
  7263                                  	; esi = pixel position (hw = row, si = column)
  7264                                  	; eax = al = character
  7265                                  	;call	write_character
  7266                                  	; 22/12/2024
  7267 00002E04 E80C000000              	call	write_character_white
  7268                                  
  7269 00002E09 668305[E07B0000]08      	add	word [screenpos], 8 ; update column (only, not row)
  7270                                  
  7271 00002E11 5E                      	pop	esi
  7272 00002E12 EBE2                    	jmp	short printstr_loop
  7273                                  
  7274                                  printstr_ok:
  7275 00002E14 C3                      	retn
  7276                                  
  7277                                  ; --------------------------------------------------------
  7278                                  
  7279                                  	; 21/12/2024
  7280                                  	; write character (at cursor position)
  7281                                  	; in graphics mode (640*480, 256 colors)
  7282                                  	; 22/12/2024
  7283                                  write_character_white:
  7284 00002E15 B90F000000              	mov	ecx, 0Fh
  7285                                  	; 26/12/2024
  7286                                  	;movzx	ecx, byte [tcolor]
  7287                                  write_character:
  7288                                  	; esi = pixel position (hw = row, si = column)
  7289                                  	; eax = al = character
  7290                                  	; cl = color
  7291 00002E1A 890D[E47B0000]          	mov	[wcolor], ecx ; 22/12/2024
  7292                                  
  7293                                  	; 22/12/2024
  7294 00002E20 50                      	push	eax
  7295                                  	; clear previous character pixels
  7296 00002E21 BF[79480000]            	mov	edi, fillblock
  7297                                  	sys	_video, 020Fh, 0, 8001h
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002E26 BB0F020000          <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002E2B B900000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002E30 BA01800000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002E35 B81F000000          <1>  mov eax, %1
   103                              <1> 
   104 00002E3A CD40                <1>  int 40h
  7298 00002E3C 58                      	pop	eax
  7299                                  
  7300 00002E3D C1E004                  	shl	eax, 4 ; 8*16 pixel user font
  7301 00002E40 BF[94560000]            	mov	edi, fontbuff2 ; start of user font data
  7302 00002E45 01C7                    	add	edi, eax
  7303                                  
  7304                                  	; 21/12/2024
  7305                                  	; NOTE:
  7306                                  	; TRDOS 386 does not use 8*14 pixel fonts in sysvideo
  7307                                  	; system calls -in graphics mode-
  7308                                  	; because 8*16 pixel operations are faster
  7309                                  	;			than 8*14 pixel operations.
  7310                                  	; ((so, 8*14 fonts can be converted to 8*16 fonts by
  7311                                  	; adding 2 empty lines))
  7312                                  	; (8*14 characters can be written via pixel operations)
  7313                                    	
  7314                                  	; 21/12/2024 (TRDOS 386 v2.0.9, trdosk6.s, 27/09/2024)
  7315                                  	;;;;;;;;;;;;;;;;; ; sysvideo system call
  7316                                  	;sysvideo:
  7317                                  	;   function in BH
  7318                                  	;	02h: Super VGA, LINEAR FRAME BUFFER data transfers
  7319                                  	;   sub function in BL
  7320                                  	;	0Fh: WRITE CHARACTER (FONT)
  7321                                  	;          CL = char's color (8 bit, 256 colors)
  7322                                  	;	If DH bit 7 = 1
  7323                                  	;	   USER FONT (from user buffer)
  7324                                  	;	         DL = 1 -> 8x16 pixel font
  7325                                   	;	   EDI = user's font buffer address
  7326                                  	;		(NOTE: byte order is as row0,row1,row2..)
  7327                                  	;	   ESI = start position (row, column)
  7328                                  	;		(HW = row, SI = column)
  7329                                  	;;;;;;;;;;;;;;;;;
  7330                                  
  7331                                  	sys	_video, 020Fh, [wcolor], 8001h
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002E47 BB0F020000          <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002E4C 8B0D[E47B0000]      <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002E52 BA01800000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002E57 B81F000000          <1>  mov eax, %1
   103                              <1> 
   104 00002E5C CD40                <1>  int 40h
  7332                                  
  7333 00002E5E C3                      	retn
  7334                                  
  7335                                  ; --------------------------------------------------------
  7336                                  
  7337                                  	; 22/12/2024
  7338                                  	; 21/12/2024
  7339                                  	; (write chars in VESA VBE graphics mode)
  7340                                  	; 14/11/2024
  7341                                  	; (Ref: player.asm, Matan Alfasi, 2017)
  7342                                  	; (Modification: Erdogan Tan, 14/11/2024)
  7343                                  
  7344                                  	;PROGRESSBAR_ROW equ 23
  7345                                  	; 21/12/2024 (640*480)
  7346                                  	PROGRESSBAR_ROW equ 31
  7347                                  
  7348                                  UpdateProgressBar:
  7349 00002E5F E890FEFFFF              	call	SetProgressTime	; 14/11/2024
  7350                                  
  7351                                  	; 01/12/2024 (32bit registers)
  7352 00002E64 A1[B8860000]            	mov	eax, [ProgressTime]
  7353                                  UpdateProgressBar@:
  7354 00002E69 BA50000000              	mov	edx, 80
  7355 00002E6E F7E2                    	mul	edx
  7356 00002E70 8B1D[B4860000]          	mov	ebx, [TotalTime]
  7357 00002E76 F7F3                    	div	ebx
  7358                                  
  7359                                  	; 22/12/2024
  7360                                  	; check progress bar indicator position if it is same 
  7361 00002E78 3A05[E97B0000]          	cmp	al, [pbprev]
  7362 00002E7E 7430                    	je	short UpdateProgressBar_ok
  7363 00002E80 A2[E97B0000]            	mov	[pbprev], al
  7364                                  
  7365                                  UpdateProgressBar@@:
  7366                                  	;; Push for the 'Clean' part
  7367 00002E85 50                      	push	eax ; **
  7368 00002E86 50                      	push	eax ; *
  7369                                  
  7370                                  	;; Set cursor position
  7371 00002E87 B61F                    	mov	dh, PROGRESSBAR_ROW
  7372 00002E89 B200                    	mov	dl, 0
  7373 00002E8B E8D1FDFFFF              	call	setCursorPosition
  7374                                  
  7375 00002E90 58                      	pop	eax ; *
  7376 00002E91 09C0                    	or	eax, eax
  7377 00002E93 742D                    	jz	short UpdateProgressBar_Clean
  7378                                  
  7379                                  UpdateProgressBar_DrawProgress:
  7380                                  	; 22/12/2024
  7381                                  	; 21/12/2024
  7382                                  	; (write progress bar chars in graphics mode)
  7383                                  	;;;;
  7384 00002E95 89C5                    	mov	ebp, eax
  7385 00002E97 50                      	push	eax ; ***
  7386 00002E98 8B35[E07B0000]          	mov	esi, [screenpos]
  7387                                  UpdateProgressBar_DrawProgress_@:
  7388 00002E9E B8DF000000              	mov	eax, 223
  7389                                  	
  7390                                  	; esi = pixel position (hw = row, si = column)
  7391                                  	; eax = al = character
  7392                                  	;call	write_character
  7393                                  	; 22/12/2024
  7394 00002EA3 E86DFFFFFF              	call	write_character_white
  7395                                  
  7396 00002EA8 4D                      	dec	ebp
  7397 00002EA9 7406                    	jz	short UpdateProgressBar_DrawCursor
  7398                                  
  7399 00002EAB 83C608                  	add	esi, 8 ; next column
  7400 00002EAE EBEE                    	jmp	short UpdateProgressBar_DrawProgress_@
  7401                                  	;;;
  7402                                  
  7403                                  UpdateProgressBar_ok:
  7404 00002EB0 C3                      	retn
  7405                                  
  7406                                  UpdateProgressBar_DrawCursor:
  7407                                  	; 22/12/2024
  7408 00002EB1 5A                      	pop	edx ; ***
  7409 00002EB2 B61F                    	mov	dh, PROGRESSBAR_ROW
  7410 00002EB4 E8A8FDFFFF              	call	setCursorPosition
  7411                                  
  7412                                  	; 21/12/2024
  7413                                  	; (write progress bar character in graphics mode)
  7414                                  	;;;;
  7415                                  	;;;mov	eax, 223
  7416                                  	;;;shl	eax, 4 ; 8*16 pixel user font
  7417                                  	;;mov	eax, 223*16
  7418                                  	;;mov	edi, fontbuff2 ; start of user font data
  7419                                  	;;add	edi, eax
  7420                                  	;mov	edi, fontbuff2+(223*16)
  7421                                  	;
  7422                                  	;sys	_video, 020Fh, 0Ch, 8001h
  7423                                  	; 22/12/2024
  7424                                  	;mov	eax, 223
  7425                                  	; eax = 0
  7426 00002EB9 B0DF                    	mov	al, 223
  7427 00002EBB B10C                    	mov	cl, 0Ch ; red
  7428 00002EBD E858FFFFFF              	call	write_character
  7429                                  	;;;;
  7430                                  
  7431                                  UpdateProgressBar_Clean:
  7432                                  	;pop	eax  ; **
  7433                                  	; 22/12/2024
  7434 00002EC2 5A                      	pop	edx  ; **
  7435                                  	; 21/12/2024
  7436 00002EC3 BD50000000              	mov	ebp, 80
  7437                                  	;sub	bp, ax
  7438 00002EC8 6629D5                  	sub	bp, dx ; 22/12/2024
  7439 00002ECB 74E3                    	jz	short UpdateProgressBar_ok
  7440                                  
  7441 00002ECD B61F                    	mov	dh, PROGRESSBAR_ROW
  7442                                  	;mov	dl, al ; 22/12/2024
  7443 00002ECF E88DFDFFFF              	call	setCursorPosition
  7444                                  
  7445                                  	; 21/12/2024
  7446                                  	; (write progress bar chars in graphics mode)
  7447                                  	;;;;
  7448 00002ED4 8B35[E07B0000]          	mov	esi, [screenpos]
  7449                                  UpdateProgressBar_Clean_@:
  7450                                  	;;;mov	eax, 223
  7451                                  	;;;shl	eax, 4 ; 8*16 pixel user font
  7452                                  	;;mov	eax, 223*16
  7453                                  	;mov	edi, fontbuff2 ; start of user font data
  7454                                  	;add	edi, eax
  7455                                  	;mov	edi, fontbuff2+(223*16)
  7456                                  	;
  7457                                  	;sys	_video, 020Fh, 08h, 8001h
  7458                                  	; 22/12/2024
  7459                                  	;mov	eax, 223
  7460                                  	; eax = 0
  7461 00002EDA B0DF                    	mov	al, 223
  7462 00002EDC B108                    	mov	cl, 08h ; gray (dark)
  7463 00002EDE E837FFFFFF              	call	write_character
  7464                                  	;;;;
  7465                                  
  7466 00002EE3 4D                      	dec	ebp
  7467 00002EE4 74CA                    	jz	short UpdateProgressBar_ok
  7468                                  
  7469 00002EE6 83C608                  	add	esi, 8 ; next column
  7470 00002EE9 EBEF                    	jmp	short UpdateProgressBar_Clean_@
  7471                                  	;;;;
  7472                                  
  7473                                  ; --------------------------------------------------------
  7474                                  ; 17/11/2024
  7475                                  
  7476                                  Player_ProcessKey_Backwards:
  7477                                  	;; In order to go backwards 5 seconds:
  7478                                  	;; Update file pointer to the beginning, skip headers
  7479 00002EEB B142                    	mov	cl, 'B'
  7480 00002EED EB02                    	jmp	short Player_ProcessKey_B_or_F
  7481                                  
  7482                                  Player_ProcessKey_Forwards:
  7483                                  	;; In order to fast-forward 5 seconds, set the file pointer
  7484                                  	;; to CUR_SEEK + 5 * Freq
  7485                                  
  7486 00002EEF B146                    	mov	cl, 'F'
  7487                                  	;jmp	short Player_ProcessKey_B_or_F
  7488                                  
  7489                                  	; 01/12/2024 (32bit regsisters)
  7490                                  Player_ProcessKey_B_or_F:
  7491                                  	; 17/11/2024
  7492                                  	; 04/11/2024
  7493                                  	; (Ref: player.asm, Matan Alfasi, 2017)
  7494                                    
  7495                                  	; 04/11/2024
  7496 00002EF1 B805000000              	mov	eax, 5
  7497 00002EF6 0FB71D[28860000]        	movzx	ebx, word [WAVE_BlockAlign]
  7498 00002EFD F7E3                    	mul	ebx
  7499 00002EFF 668B1D[20860000]        	mov	bx, [WAVE_SampleRate]
  7500 00002F06 F7E3                    	mul	ebx
  7501                                  	; eax = transfer byte count for 5 seconds
  7502                                  	
  7503                                  	; 17/11/2024
  7504 00002F08 80F942                  	cmp	cl, 'B'
  7505                                  	;mov	bx, [LoadedDataBytes]
  7506                                  	;mov	cx, [LoadedDataBytes+2]
  7507                                  	; 01/12/2024
  7508 00002F0B 8B0D[C0860000]          	mov	ecx, [LoadedDataBytes]
  7509 00002F11 7508                    	jne	short move_forward ; cl = 'F'
  7510                                  move_backward:
  7511                                  	;sub	bx, ax
  7512                                  	;sbb	cx, dx
  7513 00002F13 29C1                    	sub	ecx, eax
  7514 00002F15 7316                    	jnc	short move_file_pointer
  7515                                  move_to_beginning:
  7516                                  	;xor	cx, cx ; 0
  7517                                  	;xor	bx, bx ; 0
  7518 00002F17 31C9                    	xor	ecx, ecx
  7519 00002F19 EB12                    	jmp	short move_file_pointer
  7520                                  move_forward: 
  7521                                  	;add	bx, ax
  7522                                  	;adc	cx, dx
  7523 00002F1B 01C1                    	add	ecx, eax
  7524 00002F1D 7208                    	jc	short move_to_end
  7525                                  	;cmp	cx, [DATA_SubchunkSize+2]
  7526                                  	;ja	short move_to_end
  7527                                  	;jb	short move_file_pointer
  7528                                  	;cmp	bx, [DATA_SubchunkSize]
  7529                                  	;jna	short move_file_pointer
  7530 00002F1F 3B0D[30860000]          	cmp	ecx, [DATA_SubchunkSize]
  7531 00002F25 7606                    	jna	short move_file_pointer
  7532                                  move_to_end:
  7533                                  	;mov	bx, [DATA_SubchunkSize]
  7534                                  	;mov	cx, [DATA_SubchunkSize+2]
  7535 00002F27 8B0D[30860000]          	mov	ecx, [DATA_SubchunkSize]
  7536                                  move_file_pointer:
  7537                                  	;mov	dx, bx    
  7538                                  	;mov	[LoadedDataBytes], dx
  7539                                  	;mov	[LoadedDataBytes+2], cx
  7540 00002F2D 890D[C0860000]          	mov	[LoadedDataBytes], ecx
  7541                                  	;add	dx, 44 ; + header
  7542                                  	;adc	cx, 0
  7543 00002F33 83C12C                  	add	ecx, 44 
  7544                                  
  7545                                  	; seek
  7546                                  	;mov	bx, [filehandle]
  7547                                  	;mov	ax, 4200h
  7548                                  	;int	21h
  7549                                  	; 01/12/2024
  7550 00002F36 31D2                    	xor	edx, edx ; offset from beginning of the file
  7551                                  	; ecx = offset	
  7552                                  	; ebx = file handle
  7553                                  	; edx = 0
  7554                                  	sys	_seek, [filehandle]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002F38 8B1D[38860000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96                              <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98                              <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002F3E B813000000          <1>  mov eax, %1
   103                              <1> 
   104 00002F43 CD40                <1>  int 40h
  7555 00002F45 C3                      	retn
  7556                                  
  7557                                  ; --------------------------------------------------------
  7558                                  
  7559                                  	; 25/12/2024
  7560                                  	; 22/12/2024 (VESA VBE mode graphics) 
  7561                                  	; (640*480, 256 colors)
  7562                                  clear_window:
  7563 00002F46 8B3D[DC7B0000]          	mov	edi, [LFB_ADDR]
  7564                                  	;add	edi, (13*80*8*14)
  7565                                  	; 25/12/2024
  7566 00002F4C 81C7009A0100            	add	edi, 164*640
  7567 00002F52 29C0                    	sub	eax, eax
  7568                                  	;mov	ecx, (16*640*14)/4 ; 16 rows
  7569 00002F54 B900A00000              	mov	ecx, 64*640 ; 256 volume level points
  7570 00002F59 F3AB                    	rep	stosd
  7571                                  	; 24/12/2024
  7572 00002F5B A3[F07B0000]            	mov	[prev_points], eax ; 0
  7573                                  	;
  7574 00002F60 C3                      	retn
  7575                                  
  7576                                  ; --------------------------------------------------------
  7577                                  
  7578                                  	; 22/12/2024
  7579                                  	; 21/12/2024
  7580                                  	; (simulate wave leds in graphics mode)
  7581                                  	; (640*480, 256 colors)
  7582                                  reset_wave_leds:
  7583                                  	; 22/12/2024
  7584 00002F61 C705[947A0000]0000-     	mov	dword [prev_leds], 0
  7584 00002F69 0000               
  7585                                  	;
  7586 00002F6B BD00050000              	mov	ebp, 16*80 ; 80 columns with 16 levels
  7587 00002F70 BE[94660000]            	mov	esi, wleds_addr
  7588                                  next_led:
  7589 00002F75 AD                      	lodsd
  7590 00002F76 89C7                    	mov	edi, eax
  7591 00002F78 BA0E000000              	mov	edx, 14 ; 14 lines (8*14 pixel font)
  7592 00002F7D BB[74660000]            	mov	ebx, fontbuff2+(254*16) ; char = 254
  7593                                  led_line:
  7594 00002F82 8A23                    	mov	ah, [ebx]
  7595 00002F84 B908000000              	mov	ecx, 8 ; 8 pixels (8*16 pixel font)
  7596                                  next_pixel:
  7597 00002F89 D0E4                    	shl	ah, 1
  7598 00002F8B 7308                    	jnc	short skip_this
  7599 00002F8D B008                    	mov	al, 8 ; gray
  7600 00002F8F AA                      	stosb
  7601 00002F90 49                      	dec	ecx
  7602 00002F91 75F6                    	jnz	short next_pixel
  7603 00002F93 EB06                    	jmp	short next_line
  7604                                  skip_this:
  7605 00002F95 B000                    	mov	al, 0 ; black
  7606 00002F97 AA                      	stosb
  7607 00002F98 49                      	dec	ecx
  7608 00002F99 75EE                    	jnz	short next_pixel
  7609                                  next_line:
  7610 00002F9B 4A                      	dec	edx
  7611 00002F9C 7504                    	jnz	short next_line_@
  7612 00002F9E 4D                      	dec	ebp
  7613 00002F9F 75D4                    	jnz	short next_led
  7614                                  	;clc	; 25/12/2024
  7615 00002FA1 C3                      	retn
  7616                                  next_line_@:
  7617                                  	; 22/12/2024
  7618 00002FA2 81C778020000            	add	edi, 640-8 ; next line
  7619 00002FA8 43                      	inc	ebx
  7620 00002FA9 EBD7                    	jmp	short led_line	
  7621                                  
  7622                                  ; --------------------------------------------------------
  7623                                  
  7624                                  	; 22/12/2024 (graphics mode)
  7625                                  	; 09/12/2024
  7626                                  	; 19/11/2024
  7627                                  UpdateWaveLeds:
  7628                                  	; 23/11/2024
  7629                                  	;call	reset_wave_leds
  7630                                  	; 22/12/2024 (faster method, 80 against 80*16)
  7631                                  	; turn off previously lighting wave leds at first
  7632                                  	;;;
  7633 00002FAB BE[947A0000]            	mov	esi, prev_leds
  7634 00002FB0 833E00                  	cmp	dword [esi], 0
  7635 00002FB3 7433                    	jz	short UpdateWaveLeds_ok
  7636 00002FB5 B950000000              	mov	ecx, 80
  7637                                  turn_off_led:
  7638 00002FBA AD                      	lodsd
  7639 00002FBB 89C7                    	mov	edi, eax
  7640                                  	; edi = wave led address
  7641 00002FBD BD0E000000              	mov	ebp, 14
  7642 00002FC2 BB[74660000]            	mov	ebx, fontbuff2+(254*16) ; char = 254
  7643 00002FC7 31D2                    	xor	edx, edx
  7644 00002FC9 B008                    	mov	al, 8 ; gray (dark)
  7645                                  toffl_next_line:
  7646                                  	;;mov	edx, 8 ; 8 pixels (8*14 pixel font)
  7647                                  	;mov	dl, 8
  7648 00002FCB 88C2                    	mov	dl, al ; 8
  7649 00002FCD 8A23                    	mov	ah, [ebx]
  7650                                  toffl_next_pixel:
  7651 00002FCF D0E4                    	shl	ah, 1
  7652 00002FD1 7310                    	jnc	short toffl_skip_this
  7653 00002FD3 AA                      	stosb
  7654                                  toffl_next_pixel_@:
  7655 00002FD4 4A                      	dec	edx
  7656 00002FD5 75F8                    	jnz	short toffl_next_pixel
  7657 00002FD7 4D                      	dec	ebp
  7658 00002FD8 740C                    	jz	short toffl_next_led
  7659 00002FDA 81C778020000            	add	edi, 640-8 ; next line
  7660 00002FE0 43                      	inc	ebx
  7661 00002FE1 EBE8                    	jmp	short toffl_next_line
  7662                                  toffl_skip_this:
  7663 00002FE3 47                      	inc	edi
  7664 00002FE4 EBEE                    	jmp	short toffl_next_pixel_@
  7665                                  toffl_next_led:
  7666 00002FE6 E2D2                    	loop	turn_off_led
  7667                                  UpdateWaveLeds_ok:
  7668                                  	;;;
  7669                                  	; 09/12/2024
  7670                                  	;jmp	short turn_on_leds
  7671                                  
  7672                                  ; --------------------------------------------------------
  7673                                  
  7674                                  	; 29/12/2024
  7675                                  	; 21/12/2024 (VESA VBE Mode, 640*480, 256 colors)
  7676                                  	; 09/12/2024
  7677                                  	; 01/12/2024 (TRDOS 386, 32bit registers, flat memory)
  7678                                  	; 23/11/2024 (Retro DOS, 16bit registers, segmented)
  7679                                  	; 21/11/2024, 22/11/2024
  7680                                  	; 19/11/2024
  7681                                  turn_on_leds:
  7682                                  	; 29/12/2024
  7683 00002FE8 803D[F1850000]32        	cmp	byte [tLO],'2'
  7684 00002FEF 7509                    	jne	short tol_buffer_1
  7685                                  tol_buffer_2:
  7686 00002FF1 BA[00A00100]            	mov	edx, WAVBUFFER_2
  7687 00002FF6 EB10                    	jmp	short tol_@
  7688                                  
  7689                                  	; 29/12/2024
  7690                                  tol_clc_retn:
  7691 00002FF8 F8                      	clc
  7692                                  tol_retn:
  7693 00002FF9 C3                      	retn
  7694                                  
  7695                                  tol_buffer_1:
  7696                                  	; 29/12/2024
  7697 00002FFA 803D[F1850000]31        	cmp	byte [tLO],'1'
  7698 00003001 75F5                    	jne	short tol_clc_retn
  7699                                  
  7700 00003003 BA[00A00000]            	mov	edx, WAVBUFFER_1
  7701                                  tol_@:
  7702                                  	; calculate differential
  7703                                  	; 29/12/2024
  7704 00003008 3915[FC850000]          	cmp	[pbuf_s], edx
  7705 0000300E 7520                    	jne	short tol_ns_buf
  7706 00003010 8B1D[F4850000]          	mov	ebx, [wleds_dif]
  7707 00003016 8B35[F8850000]          	mov	esi, [pbuf_o]
  7708 0000301C 8B0D[B0860000]          	mov	ecx, [buffersize] ; bytes
  7709 00003022 29D9                    	sub	ecx, ebx ; sub ecx, [wleds_dif]
  7710 00003024 01DE                    	add	esi, ebx
  7711 00003026 7204                    	jc	short tol_o_@
  7712 00003028 39CE                    	cmp	esi, ecx
  7713 0000302A 760C                    	jna	short tol_s_buf
  7714                                  tol_o_@:
  7715 0000302C 89CE                    	mov	esi, ecx
  7716 0000302E EB08                    	jmp	short tol_s_buf
  7717                                  
  7718                                  tol_ns_buf:
  7719                                  	; 29/12/2024
  7720 00003030 8915[FC850000]          	mov	[pbuf_s], edx
  7721 00003036 31F6                    	xor	esi, esi ; 0
  7722                                  tol_s_buf:
  7723 00003038 8935[F8850000]          	mov	[pbuf_o], esi
  7724                                  
  7725                                  tol_buf_@:
  7726                                  	; 29/12/2024
  7727 0000303E 01D6                    	add	esi, edx ; [pbuf_s]
  7728 00003040 B950000000              	mov	ecx, 80
  7729                                  	;xor	eax, eax ; 0
  7730 00003045 BB[94660000]            	mov	ebx, wleds_addr
  7731                                  	; 22/12/2024
  7732 0000304A BF[947A0000]            	mov	edi, prev_leds
  7733                                  tol_fill_c:
  7734 0000304F 31C0                    	xor	eax, eax ; 0 ; 22/12/2024
  7735 00003051 66AD                    	lodsw	; left
  7736 00003053 80C480                  	add	ah, 80h	; 24/12/2024
  7737 00003056 89C2                    	mov	edx, eax
  7738 00003058 66AD                    	lodsw	; right
  7739                                  	;add	ax, dx
  7740 0000305A 80C480                  	add	ah, 80h
  7741                                  	;; 21/12/2024 (16 volume levels)
  7742                                  	;shr	eax, 12
  7743                                  	; 24/12/2024
  7744 0000305D 01D0                    	add	eax, edx
  7745 0000305F C1E80D                  	shr	eax, 13	; (L+R/2) & 16 volume levels
  7746                                  
  7747 00003062 53                      	push	ebx ; *
  7748                                  	; 01/12/2024
  7749 00003063 C1E002                  	shl	eax, 2
  7750 00003066 01C3                    	add	ebx, eax
  7751                                  	; 01/12/2024 (32bit address)
  7752                                  	;mov	edi, [ebx]
  7753                                  	; 22/12/2024
  7754 00003068 8B03                    	mov	eax, [ebx]
  7755 0000306A AB                      	stosd
  7756 0000306B 57                      	push	edi ; **
  7757 0000306C 89C7                    	mov	edi, eax
  7758                                  	;;;
  7759                                  	; 21/12/2024
  7760                                  	; (simulate wave leds in graphics mode)
  7761                                  	; (640*480, 256 colors)
  7762                                  turn_on_led:
  7763                                  	; edi = wave led address
  7764 0000306E BD0E000000              	mov	ebp, 14
  7765 00003073 BB[74660000]            	mov	ebx, fontbuff2+(254*16) ; char = 254
  7766 00003078 A0[91480000]            	mov	al, [ccolor]
  7767                                  tol_next_line:
  7768 0000307D BA08000000              	mov	edx, 8 ; 8 pixels (8*14 pixel font)
  7769 00003082 8A23                    	mov	ah, [ebx]
  7770                                  tol_next_pixel:
  7771 00003084 D0E4                    	shl	ah, 1
  7772 00003086 7310                    	jnc	short tol_skip_this
  7773 00003088 AA                      	stosb
  7774                                  tol_next_pixel_@:
  7775 00003089 4A                      	dec	edx
  7776 0000308A 75F8                    	jnz	short tol_next_pixel
  7777 0000308C 4D                      	dec	ebp
  7778 0000308D 740C                    	jz	short tol_next_led
  7779                                  	; 22/12/2024
  7780 0000308F 81C778020000            	add	edi, 640-8 ; next line
  7781 00003095 43                      	inc	ebx
  7782 00003096 EBE5                    	jmp	short tol_next_line
  7783                                  tol_skip_this:
  7784 00003098 47                      	inc	edi
  7785 00003099 EBEE                    	jmp	short tol_next_pixel_@
  7786                                  tol_next_led:
  7787                                  	; 22/12/2024
  7788 0000309B 5F                      	pop	edi ; **
  7789                                  	;;;
  7790 0000309C 5B                      	pop	ebx ; *
  7791 0000309D 83C340                  	add	ebx, 16*4
  7792 000030A0 E2AD                    	loop	tol_fill_c
  7793                                  
  7794 000030A2 C3                      	retn
  7795                                  
  7796                                  ; -------------------------------------------------------------
  7797                                  
  7798                                  ; -------------------------------------------------------------
  7799                                  ; ac97.inc (11/11/2023)
  7800                                  ; -------------------------------------------------------------
  7801                                  
  7802                                  ; special characters
  7803                                  LF      EQU 10
  7804                                  CR      EQU 13
  7805                                  
  7806                                  ; PCI stuff
  7807                                  
  7808                                  BIT0  EQU 1
  7809                                  BIT1  EQU 2
  7810                                  BIT2  EQU 4
  7811                                  BIT8  EQU 100h
  7812                                  BIT9  EQU 200h
  7813                                  BIT28 EQU 10000000h
  7814                                  BIT30 EQU 40000000h
  7815                                  BIT31 EQU 80000000h
  7816                                  
  7817                                  BUP		equ	BIT30		; Buffer Underrun Policy.
  7818                                  					; if this buffer is the last buffer
  7819                                  					; in a playback, fill the remaining
  7820                                  					; samples with 0 (silence) or not.
  7821                                  					; It's a good idea to set this to 1
  7822                                  					; for the last buffer in playback,
  7823                                  					; otherwise you're likely to get a lot
  7824                                  					; of noise at the end of the sound.
  7825                                  
  7826                                  RR		equ	BIT1		; reset registers. Nukes all regs
  7827                                                                          ; except bits 4:2 of this register.
  7828                                                                          ; Only set this bit if BIT 0 is 0
  7829                                  RPBM		equ	BIT0		; Run/Pause
  7830                                  					; set this bit to start the codec!
  7831                                  IO_ENA		EQU	BIT0		; i/o decode enable
  7832                                  BM_ENA		EQU	BIT2		; bus master enable
  7833                                  
  7834                                  PCI_INDEX_PORT  EQU     0CF8h
  7835                                  PCI_DATA_PORT   EQU     0CFCh
  7836                                  PCI32           EQU     BIT31           ; bitflag to signal 32bit access
  7837                                  PCI16           EQU     BIT30           ; bitflag for 16bit access
  7838                                  
  7839                                  AC97_INT_LINE	equ	3Ch		; AC97 Interrupt Line register offset
  7840                                  
  7841                                  ; Intel ICH2 equates. It is assumed that ICH0 and plain ole ICH are compatible.
  7842                                  
  7843                                  INTEL_VID       equ     8086h           ; Intel's PCI vendor ID
  7844                                  ; 03/11/2023 - Erdogan Tan (Ref: MenuetOS AC97 WAV Player source code, 2004)
  7845                                  SIS_VID		equ	1039h
  7846                                  NVIDIA_VID	equ	10DEh	 ; Ref: MPXPLAY/SBEMU/KOLIBRIOS AC97 source c.
  7847                                  AMD_VID		equ	1022h
  7848                                  
  7849                                  ICH_DID         equ     2415h           ; ICH device ID
  7850                                  ICH0_DID        equ     2425h           ; ICH0
  7851                                  ICH2_DID        equ     2445h           ; ICH2 I think there are more ICHes.
  7852                                                                          ; they all should be compatible.
  7853                                  
  7854                                  ; 17/02/2017 (Erdogan Tan, ref: ALSA Device IDs, ALSA project)
  7855                                  ICH3_DID	equ     2485h           ; ICH3
  7856                                  ICH4_DID        equ     24C5h           ; ICH4
  7857                                  ICH5_DID	equ     24D5h           ; ICH5
  7858                                  ICH6_DID	equ     266Eh           ; ICH6
  7859                                  ESB6300_DID	equ     25A6h           ; 6300ESB
  7860                                  ESB631X_DID	equ     2698h           ; 631XESB
  7861                                  ICH7_DID	equ	27DEh		; ICH7
  7862                                  ; 03/11/2023 - Erdogan Tan (Ref: MenuetOS AC97 WAV Player source code, 2004)
  7863                                  MX82440_DID	equ	7195h
  7864                                  SI7012_DID	equ	7012h
  7865                                  NFORCE_DID	equ	01B1h
  7866                                  NFORCE2_DID	equ	006Ah
  7867                                  AMD8111_DID	equ	746Dh
  7868                                  AMD768_DID	equ	7445h
  7869                                  ; 03/11/2023 - Erdogan Tan - Ref: MPXPLAY/SBEMU/KOLIBRIOS AC97 source code
  7870                                  CK804_DID	equ	0059h
  7871                                  MCP04_DID	equ	003Ah
  7872                                  CK8_DID		equ	008Ah
  7873                                  NFORCE3_DID	equ	00DAh
  7874                                  CK8S_DID	equ	00EAh
  7875                                  
  7876                                  NAMBAR_REG	equ	10h		; native audio mixer BAR
  7877                                  NABMBAR_REG	equ	14h		; native audio bus mastering BAR
  7878                                  
  7879                                  CODEC_MASTER_VOL_REG	equ	02h	; master volume
  7880                                  CODEC_MASTER_TONE_REG	equ	08h	; master tone (R+L)
  7881                                  CODEC_PCM_OUT_REG 	equ	18h     ; PCM output volume
  7882                                  CODEC_EXT_AUDIO_REG	equ	28h	; extended audio
  7883                                  CODEC_EXT_AUDIO_CTRL_REG equ	2Ah	; extended audio control
  7884                                  CODEC_PCM_FRONT_DACRATE_REG equ	2Ch	; PCM out sample rate
  7885                                  
  7886                                  ; ICH supports 3 different types of register sets for three types of things
  7887                                  ; it can do, thus:
  7888                                  ;
  7889                                  ; PCM in (for recording) aka PI
  7890                                  ; PCM out (for playback) aka PO
  7891                                  ; MIC in (for recording) aka MC
  7892                                  
  7893                                  PI_BDBAR_REG	equ	0		; PCM in buffer descriptor BAR
  7894                                  PO_BDBAR_REG	equ	10h		; PCM out buffer descriptor BAR
  7895                                  
  7896                                  GLOB_CNT_REG	equ	2Ch		; Global control register
  7897                                  GLOB_STS_REG 	equ	30h		; Global Status register (RO)
  7898                                  
  7899                                  PI_CR_REG 	equ	0Bh		; PCM in Control Register
  7900                                  PO_CR_REG	equ	1Bh		; PCM out Control Register
  7901                                  MC_CR_REG	equ	2Bh		; MIC in Control Register
  7902                                  
  7903                                  PCI_CMD_REG	EQU	04h		; reg 04h, command register
  7904                                  
  7905                                  CTRL_ST_CREADY		equ	BIT8+BIT9+BIT28 ; Primary Codec Ready
  7906                                  CODEC_REG_POWERDOWN	equ	26h
  7907                                  
  7908                                  PO_CIV_REG	equ	14h		; PCM out current Index value (RO)
  7909                                  PO_LVI_REG	equ	15h		; PCM out Last Valid Index
  7910                                  PO_SR_REG	equ	16h		; PCM out Status register
  7911                                  
  7912                                  ; -------------------------------------------------------------
  7913                                  
  7914                                  ; 22/12/2024
  7915 000030A3 90                      align 4
  7916                                  
  7917                                  ; 13/11/2024
  7918                                  ; ('<<' to 'shl' conversion for FASM)
  7919                                  ;
  7920                                  ; 29/05/2024 (TRDOS 386)
  7921                                  ; 17/02/2017
  7922                                  ; Valid ICH device IDs
  7923                                  
  7924                                  valid_ids:
  7925                                  	;dd (ICH_DID shl 16) + INTEL_VID	; 8086h:2415h
  7926 000030A4 86801524                	dd (ICH_DID << 16) + INTEL_VID		; 8086h:2415h
  7927 000030A8 86802524                	dd (ICH0_DID << 16) + INTEL_VID		; 8086h:2425h
  7928 000030AC 86804524                	dd (ICH2_DID << 16) + INTEL_VID		; 8086h:2445h
  7929 000030B0 86808524                	dd (ICH3_DID << 16) + INTEL_VID		; 8086h:2485h
  7930 000030B4 8680C524                	dd (ICH4_DID << 16) + INTEL_VID		; 8086h:24C5h
  7931 000030B8 8680D524                	dd (ICH5_DID << 16) + INTEL_VID		; 8086h:24D5h
  7932 000030BC 86806E26                	dd (ICH6_DID << 16) + INTEL_VID		; 8086h:266Eh
  7933 000030C0 8680A625                	dd (ESB6300_DID << 16) + INTEL_VID	; 8086h:25A6h
  7934 000030C4 86809826                	dd (ESB631X_DID << 16) + INTEL_VID	; 8086h:2698h
  7935 000030C8 8680DE27                	dd (ICH7_DID << 16) + INTEL_VID		; 8086h:27DEh
  7936                                  	; 03/11/2023 - Erdogan Tan
  7937 000030CC 86809571                	dd (MX82440_DID << 16) + INTEL_VID	; 8086h:7195h
  7938 000030D0 39101270                	dd (SI7012_DID << 16)  + SIS_VID	; 1039h:7012h
  7939 000030D4 DE10B101                	dd (NFORCE_DID << 16)  + NVIDIA_VID	; 10DEh:01B1h
  7940 000030D8 DE106A00                	dd (NFORCE2_DID << 16) + NVIDIA_VID	; 10DEh:006Ah
  7941 000030DC 22106D74                	dd (AMD8111_DID << 16) + AMD_VID	; 1022h:746Dh
  7942 000030E0 22104574                	dd (AMD768_DID << 16)  + AMD_VID	; 1022h:7445h
  7943 000030E4 DE105900                	dd (CK804_DID << 16) + NVIDIA_VID	; 10DEh:0059h
  7944 000030E8 DE103A00                	dd (MCP04_DID << 16) + NVIDIA_VID	; 10DEh:003Ah
  7945 000030EC DE108A00                	dd (CK8_DID << 16) + NVIDIA_VID		; 1022h:008Ah
  7946 000030F0 DE10DA00                	dd (NFORCE3_DID << 16) + NVIDIA_VID	; 10DEh:00DAh
  7947 000030F4 DE10EA00                	dd (CK8S_DID << 16) + NVIDIA_VID	; 10DEh:00EAh
  7948                                  
  7949                                  valid_id_count equ (($ - valid_ids)>>2)	; 05/11/2023
  7950                                  ; 13/11/2024
  7951                                  ;valid_id_count = ($ - valid_ids) shr 2	; 05/11/2023
  7952                                  
  7953 000030F8 00000000                	dd 0
  7954                                  
  7955                                  Credits:
  7956 000030FC 564741205741562050-     	db 'VGA WAV Player for TRDOS 386 by Erdogan Tan. '
  7956 00003105 6C6179657220666F72-
  7956 0000310E 205452444F53203338-
  7956 00003117 36206279204572646F-
  7956 00003120 67616E2054616E2E20 
  7957                                  	;;db 'December 2024.', 10,13,0
  7958                                  	;db 'January 2025.', 10,13,0
  7959 00003129 466562727561727920-     	db 'February 2025.', 10,13,0
  7959 00003132 323032352E0A0D00   
  7960 0000313A 33302F31322F323032-     	db '30/12/2024', 10,13,0
  7960 00003143 340A0D00           
  7961 00003147 31382F30312F323032-     	db '18/01/2025', 10,13,0
  7961 00003150 350A0D00           
  7962 00003154 30352F30322F323032-     	db '05/02/2025', 10,13
  7962 0000315D 350A0D             
  7963                                  ; 15/11/2024
  7964                                  reset:
  7965 00003160 00                      	db 0
  7966                                  
  7967                                  msgAudioCardInfo:
  7968 00003161 666F7220496E74656C-     	db 'for Intel AC97 (ICH) Audio Controller.', 10,13,0
  7968 0000316A 204143393720284943-
  7968 00003173 482920417564696F20-
  7968 0000317C 436F6E74726F6C6C65-
  7968 00003185 722E0A0D00         
  7969                                  
  7970                                  	; 27/12/2024
  7971                                  msg_usage:
  7972 0000318A 75736167653A205647-     	db 'usage: VGAPLAY3 <FileName1> <FileName2> <...>',10,13,0
  7972 00003193 41504C415933203C46-
  7972 0000319C 696C654E616D65313E-
  7972 000031A5 203C46696C654E616D-
  7972 000031AE 65323E203C2E2E2E3E-
  7972 000031B7 0A0D00             
  7973                                  
  7974                                  noDevMsg:
  7975 000031BA 4572726F723A20556E-     	db 'Error: Unable to find AC97 audio device!'
  7975 000031C3 61626C6520746F2066-
  7975 000031CC 696E64204143393720-
  7975 000031D5 617564696F20646576-
  7975 000031DE 69636521           
  7976 000031E2 0A0D00                  	db 10,13,0
  7977                                  
  7978                                  noFileErrMsg:
  7979 000031E5 4572726F723A206669-     	db 'Error: file not found.',10,13,0
  7979 000031EE 6C65206E6F7420666F-
  7979 000031F7 756E642E0A0D00     
  7980                                  
  7981                                  ; 07/12/2024
  7982                                  trdos386_err_msg:
  7983 000031FE 5452444F5320333836-     	db 'TRDOS 386 System call error !',10,13,0
  7983 00003207 2053797374656D2063-
  7983 00003210 616C6C206572726F72-
  7983 00003219 20210A0D00         
  7984                                  
  7985                                  ; 29/05/2024
  7986                                  ; 11/11/2023
  7987                                  msg_init_err:
  7988 0000321E 0D0A                    	db CR, LF
  7989 00003220 4143393720436F6E74-     	db 'AC97 Controller/Codec initialization error !'
  7989 00003229 726F6C6C65722F436F-
  7989 00003232 64656320696E697469-
  7989 0000323B 616C697A6174696F6E-
  7989 00003244 206572726F722021   
  7990 0000324C 0D0A00                  	db CR, LF, 0 ; 07/12/2024
  7991                                  
  7992                                  ; 25/11/2023
  7993                                  msg_no_vra:
  7994 0000324F 0A0D                    	db 10,13
  7995 00003251 4E6F20565241207375-     	db 'No VRA support ! Only 48 kHZ sample rate supported !'
  7995 0000325A 70706F72742021204F-
  7995 00003263 6E6C79203438206B48-
  7995 0000326C 5A2073616D706C6520-
  7995 00003275 726174652073757070-
  7995 0000327E 6F727465642021     
  7996 00003285 0A0D00                  	db 10,13,0
  7997                                  
  7998                                  ; 19/11/2024
  7999                                  ; 03/06/2017
  8000                                  hex_chars:
  8001 00003288 303132333435363738-     	db '0123456789ABCDEF', 0
  8001 00003291 3941424344454600   
  8002                                  msgAC97Info:
  8003 00003299 0D0A                    	db 0Dh, 0Ah
  8004 0000329B 204143393720417564-     	db ' AC97 Audio Controller & Codec Info', 0Dh, 0Ah 
  8004 000032A4 696F20436F6E74726F-
  8004 000032AD 6C6C6572202620436F-
  8004 000032B6 64656320496E666F0D-
  8004 000032BF 0A                 
  8005 000032C0 2056656E646F722049-     	db ' Vendor ID: '
  8005 000032C9 443A20             
  8006                                  msgVendorId:
  8007 000032CC 303030306820446576-     	db '0000h Device ID: '
  8007 000032D5 6963652049443A20   
  8008                                  msgDevId:
  8009 000032DD 30303030680D0A          	db '0000h', 0Dh, 0Ah
  8010 000032E4 204275733A20            	db ' Bus: '
  8011                                  msgBusNo:
  8012 000032EA 303068204465766963-     	db '00h Device: '
  8012 000032F3 653A20             
  8013                                  msgDevNo:
  8014 000032F6 3030682046756E6374-     	db '00h Function: '
  8014 000032FF 696F6E3A20         
  8015                                  msgFncNo:
  8016 00003304 303068                  	db '00h'
  8017 00003307 0D0A                    	db 0Dh, 0Ah
  8018 00003309 204E414D4241523A20      	db ' NAMBAR: '
  8019                                  msgNamBar:
  8020 00003312 30303030682020          	db '0000h  '
  8021 00003319 4E41424D4241523A20      	db 'NABMBAR: '
  8022                                  msgNabmBar:
  8023 00003322 303030306820204952-     	db '0000h  IRQ: '
  8023 0000332B 513A20             
  8024                                  msgIRQ:
  8025 0000332E 3030                    	dw 3030h
  8026 00003330 0D0A00                  	db 0Dh, 0Ah, 0
  8027                                  ; 25/11/2023
  8028                                  msgVRAheader:
  8029 00003333 205652412073757070-     	db ' VRA support: '
  8029 0000333C 6F72743A20         
  8030 00003341 00                      	db 0	
  8031                                  msgVRAyes:
  8032 00003342 5945530D0A00            	db 'YES', 0Dh, 0Ah, 0
  8033                                  msgVRAno:
  8034 00003348 4E4F200D0A              	db 'NO ', 0Dh, 0Ah
  8035 0000334D 2028496E746572706F-     	db ' (Interpolated sample rate playing method)'
  8035 00003356 6C617465642073616D-
  8035 0000335F 706C65207261746520-
  8035 00003368 706C6179696E67206D-
  8035 00003371 6574686F6429       
  8036 00003377 0D0A00                  	db 0Dh, 0Ah, 0
  8037                                  
  8038 0000337A 90<rep 2h>              align 4
  8039                                  
  8040                                  ; -------------------------------------------------------------
  8041                                  
  8042                                  	; 21/12/2024
  8043                                  SplashScreen:
  8044 0000337C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8044 00003385 202020202020202020-
  8044 0000338E 202020202020202020-
  8044 00003397 202020202020202020-
  8044 000033A0 202020202020202020-
  8044 000033A9 202020202020202020-
  8044 000033B2 202020202020202020-
  8044 000033BB 202020202020202020-
  8044 000033C4 2020202020DDDBDE   
  8045 000033CC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8045 000033D5 202020202020202020-
  8045 000033DE 202020202020202020-
  8045 000033E7 202020202020202020-
  8045 000033F0 202020202020202020-
  8045 000033F9 202020202020202020-
  8045 00003402 202020202020202020-
  8045 0000340B 202020202020202020-
  8045 00003414 2020202020DDDBDE   
  8046 0000341C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8046 00003425 202020202020202020-
  8046 0000342E 202020202020202020-
  8046 00003437 202020202020202020-
  8046 00003440 202020202020202020-
  8046 00003449 202020202020202020-
  8046 00003452 202020202020202020-
  8046 0000345B 202020202020202020-
  8046 00003464 2020202020DDDBDE   
  8047 0000346C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8047 00003475 202020202020202020-
  8047 0000347E 202020202020202020-
  8047 00003487 202020202020202020-
  8047 00003490 202020202020202020-
  8047 00003499 202020202020202020-
  8047 000034A2 202020202020202020-
  8047 000034AB 202020202020202020-
  8047 000034B4 2020202020DDDBDE   
  8048 000034BC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8048 000034C5 202020202020202020-
  8048 000034CE 202020202020202020-
  8048 000034D7 202020202020202020-
  8048 000034E0 202020202020202020-
  8048 000034E9 202020202020202020-
  8048 000034F2 202020202020202020-
  8048 000034FB 202020202020202020-
  8048 00003504 2020202020DDDBDE   
  8049 0000350C DDDBDE202020202020-     	db  221, 219, 222, "                     _______   ______        _______.                     ", 221, 219, 222
  8049 00003515 202020202020202020-
  8049 0000351E 2020202020205F5F5F-
  8049 00003527 5F5F5F5F2020205F5F-
  8049 00003530 5F5F5F5F2020202020-
  8049 00003539 2020205F5F5F5F5F5F-
  8049 00003542 5F2E20202020202020-
  8049 0000354B 202020202020202020-
  8049 00003554 2020202020DDDBDE   
  8050 0000355C DDDBDE202020202020-     	db  221, 219, 222, "                    |       \ /  __  \      /       |                     ", 221, 219, 222
  8050 00003565 202020202020202020-
  8050 0000356E 20202020207C202020-
  8050 00003577 202020205C202F2020-
  8050 00003580 5F5F20205C20202020-
  8050 00003589 20202F202020202020-
  8050 00003592 207C20202020202020-
  8050 0000359B 202020202020202020-
  8050 000035A4 2020202020DDDBDE   
  8051 000035AC DDDBDE202020202020-     	db  221, 219, 222, "                    |  .--.  |  |  |  |    |   (----`                     ", 221, 219, 222
  8051 000035B5 202020202020202020-
  8051 000035BE 20202020207C20202E-
  8051 000035C7 2D2D2E20207C20207C-
  8051 000035D0 20207C20207C202020-
  8051 000035D9 207C202020282D2D2D-
  8051 000035E2 2D6020202020202020-
  8051 000035EB 202020202020202020-
  8051 000035F4 2020202020DDDBDE   
  8052 000035FC DDDBDE202020202020-     	db  221, 219, 222, "                    |  |  |  |  |  |  |     \   \                         ", 221, 219, 222
  8052 00003605 202020202020202020-
  8052 0000360E 20202020207C20207C-
  8052 00003617 20207C20207C20207C-
  8052 00003620 20207C20207C202020-
  8052 00003629 20205C2020205C2020-
  8052 00003632 202020202020202020-
  8052 0000363B 202020202020202020-
  8052 00003644 2020202020DDDBDE   
  8053 0000364C DDDBDE202020202020-     	db  221, 219, 222, "                    |  '--'  |  `--'  | .----)   |                        ", 221, 219, 222
  8053 00003655 202020202020202020-
  8053 0000365E 20202020207C202027-
  8053 00003667 2D2D2720207C202060-
  8053 00003670 2D2D2720207C202E2D-
  8053 00003679 2D2D2D292020207C20-
  8053 00003682 202020202020202020-
  8053 0000368B 202020202020202020-
  8053 00003694 2020202020DDDBDE   
  8054 0000369C DDDBDE202020202020-     	db  221, 219, 222, "                    |_______/ \______/  |_______/                         ", 221, 219, 222
  8054 000036A5 202020202020202020-
  8054 000036AE 20202020207C5F5F5F-
  8054 000036B7 5F5F5F5F2F205C5F5F-
  8054 000036C0 5F5F5F5F2F20207C5F-
  8054 000036C9 5F5F5F5F5F5F2F2020-
  8054 000036D2 202020202020202020-
  8054 000036DB 202020202020202020-
  8054 000036E4 2020202020DDDBDE   
  8055 000036EC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8055 000036F5 202020202020202020-
  8055 000036FE 202020202020202020-
  8055 00003707 202020202020202020-
  8055 00003710 202020202020202020-
  8055 00003719 202020202020202020-
  8055 00003722 202020202020202020-
  8055 0000372B 202020202020202020-
  8055 00003734 2020202020DDDBDE   
  8056 0000373C DDDBDE20202020202E-     	db  221, 219, 222, "     .______    __          ___   ____    ____  _______ .______           ", 221, 219, 222
  8056 00003745 5F5F5F5F5F5F202020-
  8056 0000374E 205F5F202020202020-
  8056 00003757 202020205F5F5F2020-
  8056 00003760 205F5F5F5F20202020-
  8056 00003769 5F5F5F5F20205F5F5F-
  8056 00003772 5F5F5F5F202E5F5F5F-
  8056 0000377B 5F5F5F202020202020-
  8056 00003784 2020202020DDDBDE   
  8057 0000378C DDDBDE20202020207C-     	db  221, 219, 222, "     |   _  \  |  |        /   \  \   \  /   / |   ____||   _  \          ", 221, 219, 222
  8057 00003795 2020205F20205C2020-
  8057 0000379E 7C20207C2020202020-
  8057 000037A7 2020202F2020205C20-
  8057 000037B0 205C2020205C20202F-
  8057 000037B9 2020202F207C202020-
  8057 000037C2 5F5F5F5F7C7C202020-
  8057 000037CB 5F20205C2020202020-
  8057 000037D4 2020202020DDDBDE   
  8058 000037DC DDDBDE20202020207C-     	db  221, 219, 222, "     |  |_)  | |  |       /  ^  \  \   \/   /  |  |__   |  |_)  |         ", 221, 219, 222
  8058 000037E5 20207C5F2920207C20-
  8058 000037EE 7C20207C2020202020-
  8058 000037F7 20202F20205E20205C-
  8058 00003800 20205C2020205C2F20-
  8058 00003809 20202F20207C20207C-
  8058 00003812 5F5F2020207C20207C-
  8058 0000381B 5F2920207C20202020-
  8058 00003824 2020202020DDDBDE   
  8059 0000382C DDDBDE20202020207C-     	db  221, 219, 222, "     |   ___/  |  |      /  /_\  \  \_    _/   |   __|  |      /          ", 221, 219, 222
  8059 00003835 2020205F5F5F2F2020-
  8059 0000383E 7C20207C2020202020-
  8059 00003847 202F20202F5F5C2020-
  8059 00003850 5C20205C5F20202020-
  8059 00003859 5F2F2020207C202020-
  8059 00003862 5F5F7C20207C202020-
  8059 0000386B 2020202F2020202020-
  8059 00003874 2020202020DDDBDE   
  8060 0000387C DDDBDE20202020207C-     	db  221, 219, 222, "     |  |      |  `----./  _____  \   |  |     |  |____ |  |\  \----.     ", 221, 219, 222
  8060 00003885 20207C202020202020-
  8060 0000388E 7C2020602D2D2D2D2E-
  8060 00003897 2F20205F5F5F5F5F20-
  8060 000038A0 205C2020207C20207C-
  8060 000038A9 20202020207C20207C-
  8060 000038B2 5F5F5F5F207C20207C-
  8060 000038BB 5C20205C2D2D2D2D2E-
  8060 000038C4 2020202020DDDBDE   
  8061 000038CC DDDBDE20202020207C-     	db  221, 219, 222, "     | _|      |_______/__/     \__\  |__|     |_______|| _| `._____|     ", 221, 219, 222
  8061 000038D5 205F7C202020202020-
  8061 000038DE 7C5F5F5F5F5F5F5F2F-
  8061 000038E7 5F5F2F20202020205C-
  8061 000038F0 5F5F5C20207C5F5F7C-
  8061 000038F9 20202020207C5F5F5F-
  8061 00003902 5F5F5F5F7C7C205F7C-
  8061 0000390B 20602E5F5F5F5F5F7C-
  8061 00003914 2020202020DDDBDE   
  8062 0000391C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8062 00003925 202020202020202020-
  8062 0000392E 202020202020202020-
  8062 00003937 202020202020202020-
  8062 00003940 202020202020202020-
  8062 00003949 202020202020202020-
  8062 00003952 202020202020202020-
  8062 0000395B 202020202020202020-
  8062 00003964 2020202020DDDBDE   
  8063 0000396C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8063 00003975 202020202020202020-
  8063 0000397E 202020202020202020-
  8063 00003987 202020202020202020-
  8063 00003990 202020202020202020-
  8063 00003999 202020202020202020-
  8063 000039A2 202020202020202020-
  8063 000039AB 202020202020202020-
  8063 000039B4 2020202020DDDBDE   
  8064 000039BC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8064 000039C5 202020202020202020-
  8064 000039CE 202020202020202020-
  8064 000039D7 202020202020202020-
  8064 000039E0 202020202020202020-
  8064 000039E9 202020202020202020-
  8064 000039F2 202020202020202020-
  8064 000039FB 202020202020202020-
  8064 00003A04 2020202020DDDBDE   
  8065 00003A0C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8065 00003A15 202020202020202020-
  8065 00003A1E 202020202020202020-
  8065 00003A27 202020202020202020-
  8065 00003A30 202020202020202020-
  8065 00003A39 202020202020202020-
  8065 00003A42 202020202020202020-
  8065 00003A4B 202020202020202020-
  8065 00003A54 2020202020DDDBDE   
  8066 00003A5C DDDBDE202020202020-     	db  221, 219, 222, "                                WELCOME TO                                ", 221, 219, 222
  8066 00003A65 202020202020202020-
  8066 00003A6E 202020202020202020-
  8066 00003A77 202020202020202057-
  8066 00003A80 454C434F4D4520544F-
  8066 00003A89 202020202020202020-
  8066 00003A92 202020202020202020-
  8066 00003A9B 202020202020202020-
  8066 00003AA4 2020202020DDDBDE   
  8067 00003AAC DDDBDE202020202020-     	db  221, 219, 222, "                                DOS PLAYER                                ", 221, 219, 222
  8067 00003AB5 202020202020202020-
  8067 00003ABE 202020202020202020-
  8067 00003AC7 202020202020202044-
  8067 00003AD0 4F5320504C41594552-
  8067 00003AD9 202020202020202020-
  8067 00003AE2 202020202020202020-
  8067 00003AEB 202020202020202020-
  8067 00003AF4 2020202020DDDBDE   
  8068 00003AFC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8068 00003B05 202020202020202020-
  8068 00003B0E 202020202020202020-
  8068 00003B17 202020202020202020-
  8068 00003B20 202020202020202020-
  8068 00003B29 202020202020202020-
  8068 00003B32 202020202020202020-
  8068 00003B3B 202020202020202020-
  8068 00003B44 2020202020DDDBDE   
  8069 00003B4C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8069 00003B55 202020202020202020-
  8069 00003B5E 202020202020202020-
  8069 00003B67 202020202020202020-
  8069 00003B70 202020202020202020-
  8069 00003B79 202020202020202020-
  8069 00003B82 202020202020202020-
  8069 00003B8B 202020202020202020-
  8069 00003B94 2020202020DDDBDE   
  8070 00003B9C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8070 00003BA5 202020202020202020-
  8070 00003BAE 202020202020202020-
  8070 00003BB7 202020202020202020-
  8070 00003BC0 202020202020202020-
  8070 00003BC9 202020202020202020-
  8070 00003BD2 202020202020202020-
  8070 00003BDB 202020202020202020-
  8070 00003BE4 2020202020DDDBDE   
  8071 00003BEC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8071 00003BF5 202020202020202020-
  8071 00003BFE 202020202020202020-
  8071 00003C07 202020202020202020-
  8071 00003C10 202020202020202020-
  8071 00003C19 202020202020202020-
  8071 00003C22 202020202020202020-
  8071 00003C2B 202020202020202020-
  8071 00003C34 2020202020DDDBDE   
  8072 00003C3C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8072 00003C45 202020202020202020-
  8072 00003C4E 202020202020202020-
  8072 00003C57 202020202020202020-
  8072 00003C60 202020202020202020-
  8072 00003C69 202020202020202020-
  8072 00003C72 202020202020202020-
  8072 00003C7B 202020202020202020-
  8072 00003C84 2020202020DDDBDE   
  8073 00003C8C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8073 00003C95 202020202020202020-
  8073 00003C9E 202020202020202020-
  8073 00003CA7 202020202020202020-
  8073 00003CB0 202020202020202020-
  8073 00003CB9 202020202020202020-
  8073 00003CC2 202020202020202020-
  8073 00003CCB 202020202020202020-
  8073 00003CD4 2020202020DDDBDE   
  8074 00003CDC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8074 00003CE5 202020202020202020-
  8074 00003CEE 202020202020202020-
  8074 00003CF7 202020202020202020-
  8074 00003D00 202020202020202020-
  8074 00003D09 202020202020202020-
  8074 00003D12 202020202020202020-
  8074 00003D1B 202020202020202020-
  8074 00003D24 2020202020DDDBDE   
  8075 00003D2C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8075 00003D35 202020202020202020-
  8075 00003D3E 202020202020202020-
  8075 00003D47 202020202020202020-
  8075 00003D50 202020202020202020-
  8075 00003D59 202020202020202020-
  8075 00003D62 202020202020202020-
  8075 00003D6B 202020202020202020-
  8075 00003D74 2020202020DDDBDE   
  8076 00003D7C DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8076 00003D85 202020202020202020-
  8076 00003D8E 202020202020202020-
  8076 00003D97 202020202020202020-
  8076 00003DA0 202020202020202020-
  8076 00003DA9 202020202020202020-
  8076 00003DB2 202020202020202020-
  8076 00003DBB 202020202020202020-
  8076 00003DC4 2020202020DDDBDE   
  8077 00003DCC DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  8077 00003DD5 202020202020202020-
  8077 00003DDE 202020202020202020-
  8077 00003DE7 202020202020202020-
  8077 00003DF0 202020202020202020-
  8077 00003DF9 202020202020202020-
  8077 00003E02 202020202020202020-
  8077 00003E0B 202020202020202020-
  8077 00003E14 2020202020DDDBDE   
  8078 00003E1C 00                      	db 0
  8079                                  
  8080                                  ; -------------------------------------------------------------
  8081                                  
  8082                                  	; 25/12/2024
  8083                                  PlayingScreen:
  8084 00003E1D DBDBDBDBDBDBDBDBDB-     	db  34 dup(219), " DOS Player ", 34 dup(219)
  8084 00003E26 DBDBDBDBDBDBDBDBDB-
  8084 00003E2F DBDBDBDBDBDBDBDBDB-
  8084 00003E38 DBDBDBDBDBDBDB2044-
  8084 00003E41 4F5320506C61796572-
  8084 00003E4A 20DBDBDBDBDBDBDBDB-
  8084 00003E53 DBDBDBDBDBDBDBDBDB-
  8084 00003E5C DBDBDBDBDBDBDBDBDB-
  8084 00003E65 DBDBDBDBDBDBDBDB   
  8085 00003E6D C9CDCDCDCDCDCDCDCD-     	db  201, 78 dup(205), 187
  8085 00003E76 CDCDCDCDCDCDCDCDCD-
  8085 00003E7F CDCDCDCDCDCDCDCDCD-
  8085 00003E88 CDCDCDCDCDCDCDCDCD-
  8085 00003E91 CDCDCDCDCDCDCDCDCD-
  8085 00003E9A CDCDCDCDCDCDCDCDCD-
  8085 00003EA3 CDCDCDCDCDCDCDCDCD-
  8085 00003EAC CDCDCDCDCDCDCDCDCD-
  8085 00003EB5 CDCDCDCDCDCDCDBB   
  8086 00003EBD BA2020202020202020-     	db  186, 33 dup(32), " User Guide ", 33 dup(32), 186
  8086 00003EC6 202020202020202020-
  8086 00003ECF 202020202020202020-
  8086 00003ED8 202020202020202055-
  8086 00003EE1 736572204775696465-
  8086 00003EEA 202020202020202020-
  8086 00003EF3 202020202020202020-
  8086 00003EFC 202020202020202020-
  8086 00003F05 20202020202020BA   
  8087 00003F0D BA2020202020203C53-     	db  186, 6  dup(32), "<Space>         Play/Pause    ", 4 dup(32), "<N>/<P>         Next/Previous", 9 dup(32), 186
  8087 00003F16 706163653E20202020-
  8087 00003F1F 2020202020506C6179-
  8087 00003F28 2F5061757365202020-
  8087 00003F31 20202020203C4E3E2F-
  8087 00003F3A 3C503E202020202020-
  8087 00003F43 2020204E6578742F50-
  8087 00003F4C 726576696F75732020-
  8087 00003F55 20202020202020BA   
  8088 00003F5D BA2020202020203C53-     	db  186, 6  dup(32), "<S>             Stop          ", 4 dup(32), "<Enter>/<G>     Wave Lighting", 9 dup(32), 186
  8088 00003F66 3E2020202020202020-
  8088 00003F6F 202020202053746F70-
  8088 00003F78 202020202020202020-
  8088 00003F81 20202020203C456E74-
  8088 00003F8A 65723E2F3C473E2020-
  8088 00003F93 20202057617665204C-
  8088 00003F9C 69676874696E672020-
  8088 00003FA5 20202020202020BA   
  8089 00003FAD BA2020202020203C46-     	db  186, 6  dup(32), "<F>             Forwards      ", 4 dup(32), "<+>/<->         Inc/Dec Volume", 8 dup(32), 186
  8089 00003FB6 3E2020202020202020-
  8089 00003FBF 2020202020466F7277-
  8089 00003FC8 617264732020202020-
  8089 00003FD1 20202020203C2B3E2F-
  8089 00003FDA 3C2D3E202020202020-
  8089 00003FE3 202020496E632F4465-
  8089 00003FEC 6320566F6C756D6520-
  8089 00003FF5 20202020202020BA   
  8090 00003FFD BA2020202020203C42-     	db  186, 6  dup(32), "<B>             Backwards     ", 4 dup(32), "<Q>             Quit Program ", 9 dup(32), 186
  8090 00004006 3E2020202020202020-
  8090 0000400F 20202020204261636B-
  8090 00004018 776172647320202020-
  8090 00004021 20202020203C513E20-
  8090 0000402A 202020202020202020-
  8090 00004033 202020517569742050-
  8090 0000403C 726F6772616D202020-
  8090 00004045 20202020202020BA   
  8091 0000404D CCCDCDCDCDCDCDCDCD-     	db  204, 78 dup(205), 185
  8091 00004056 CDCDCDCDCDCDCDCDCD-
  8091 0000405F CDCDCDCDCDCDCDCDCD-
  8091 00004068 CDCDCDCDCDCDCDCDCD-
  8091 00004071 CDCDCDCDCDCDCDCDCD-
  8091 0000407A CDCDCDCDCDCDCDCDCD-
  8091 00004083 CDCDCDCDCDCDCDCDCD-
  8091 0000408C CDCDCDCDCDCDCDCDCD-
  8091 00004095 CDCDCDCDCDCDCDB9   
  8092 0000409D BA2020202020204669-     	db  186, 6  dup(32), "File Name :                   ", 4 dup(32), "Bit-Rate  :     0  Bits      ", 9 dup(32), 186
  8092 000040A6 6C65204E616D65203A-
  8092 000040AF 202020202020202020-
  8092 000040B8 202020202020202020-
  8092 000040C1 20202020204269742D-
  8092 000040CA 5261746520203A2020-
  8092 000040D3 202020302020426974-
  8092 000040DC 732020202020202020-
  8092 000040E5 20202020202020BA   
  8093 000040ED BA2020202020204672-     	db  186, 6  dup(32), "Frequency :     0     Hz      ", 4 dup(32), "#-Channels:     0            ", 9 dup(32), 186
  8093 000040F6 657175656E6379203A-
  8093 000040FF 202020202030202020-
  8093 00004108 2020487A2020202020-
  8093 00004111 2020202020232D4368-
  8093 0000411A 616E6E656C733A2020-
  8093 00004123 202020302020202020-
  8093 0000412C 202020202020202020-
  8093 00004135 20202020202020BA   
  8094 0000413D C8CDCDCDCDCDCDCDCD-     	db  200, 78 dup(205), 188
  8094 00004146 CDCDCDCDCDCDCDCDCD-
  8094 0000414F CDCDCDCDCDCDCDCDCD-
  8094 00004158 CDCDCDCDCDCDCDCDCD-
  8094 00004161 CDCDCDCDCDCDCDCDCD-
  8094 0000416A CDCDCDCDCDCDCDCDCD-
  8094 00004173 CDCDCDCDCDCDCDCDCD-
  8094 0000417C CDCDCDCDCDCDCDCDCD-
  8094 00004185 CDCDCDCDCDCDCDBC   
  8095 0000418D 202020202020202020-     	db  80 dup(32)
  8095 00004196 202020202020202020-
  8095 0000419F 202020202020202020-
  8095 000041A8 202020202020202020-
  8095 000041B1 202020202020202020-
  8095 000041BA 202020202020202020-
  8095 000041C3 202020202020202020-
  8095 000041CC 202020202020202020-
  8095 000041D5 2020202020202020   
  8096                                  improper_samplerate_txt:
  8097                                  read_error_txt:
  8098 000041DD 202020202020202020-     	db  80 dup(32)
  8098 000041E6 202020202020202020-
  8098 000041EF 202020202020202020-
  8098 000041F8 202020202020202020-
  8098 00004201 202020202020202020-
  8098 0000420A 202020202020202020-
  8098 00004213 202020202020202020-
  8098 0000421C 202020202020202020-
  8098 00004225 2020202020202020   
  8099 0000422D 202020202020202020-     	db  80 dup(32)
  8099 00004236 202020202020202020-
  8099 0000423F 202020202020202020-
  8099 00004248 202020202020202020-
  8099 00004251 202020202020202020-
  8099 0000425A 202020202020202020-
  8099 00004263 202020202020202020-
  8099 0000426C 202020202020202020-
  8099 00004275 2020202020202020   
  8100 0000427D 202020202020202020-     	db  80 dup(32)
  8100 00004286 202020202020202020-
  8100 0000428F 202020202020202020-
  8100 00004298 202020202020202020-
  8100 000042A1 202020202020202020-
  8100 000042AA 202020202020202020-
  8100 000042B3 202020202020202020-
  8100 000042BC 202020202020202020-
  8100 000042C5 2020202020202020   
  8101 000042CD 202020202020202020-     	db  80 dup(32)
  8101 000042D6 202020202020202020-
  8101 000042DF 202020202020202020-
  8101 000042E8 202020202020202020-
  8101 000042F1 202020202020202020-
  8101 000042FA 202020202020202020-
  8101 00004303 202020202020202020-
  8101 0000430C 202020202020202020-
  8101 00004315 2020202020202020   
  8102 0000431D 202020202020202020-     	db  80 dup(32)
  8102 00004326 202020202020202020-
  8102 0000432F 202020202020202020-
  8102 00004338 202020202020202020-
  8102 00004341 202020202020202020-
  8102 0000434A 202020202020202020-
  8102 00004353 202020202020202020-
  8102 0000435C 202020202020202020-
  8102 00004365 2020202020202020   
  8103 0000436D 202020202020202020-     	db  80 dup(32)
  8103 00004376 202020202020202020-
  8103 0000437F 202020202020202020-
  8103 00004388 202020202020202020-
  8103 00004391 202020202020202020-
  8103 0000439A 202020202020202020-
  8103 000043A3 202020202020202020-
  8103 000043AC 202020202020202020-
  8103 000043B5 2020202020202020   
  8104 000043BD 202020202020202020-     	db  80 dup(32)
  8104 000043C6 202020202020202020-
  8104 000043CF 202020202020202020-
  8104 000043D8 202020202020202020-
  8104 000043E1 202020202020202020-
  8104 000043EA 202020202020202020-
  8104 000043F3 202020202020202020-
  8104 000043FC 202020202020202020-
  8104 00004405 2020202020202020   
  8105 0000440D 202020202020202020-     	db  80 dup(32)
  8105 00004416 202020202020202020-
  8105 0000441F 202020202020202020-
  8105 00004428 202020202020202020-
  8105 00004431 202020202020202020-
  8105 0000443A 202020202020202020-
  8105 00004443 202020202020202020-
  8105 0000444C 202020202020202020-
  8105 00004455 2020202020202020   
  8106 0000445D 202020202020202020-     	db  80 dup(32)
  8106 00004466 202020202020202020-
  8106 0000446F 202020202020202020-
  8106 00004478 202020202020202020-
  8106 00004481 202020202020202020-
  8106 0000448A 202020202020202020-
  8106 00004493 202020202020202020-
  8106 0000449C 202020202020202020-
  8106 000044A5 2020202020202020   
  8107 000044AD 202020202020202020-     	db  80 dup(32)
  8107 000044B6 202020202020202020-
  8107 000044BF 202020202020202020-
  8107 000044C8 202020202020202020-
  8107 000044D1 202020202020202020-
  8107 000044DA 202020202020202020-
  8107 000044E3 202020202020202020-
  8107 000044EC 202020202020202020-
  8107 000044F5 2020202020202020   
  8108 000044FD 202020202020202020-     	db  80 dup(32)
  8108 00004506 202020202020202020-
  8108 0000450F 202020202020202020-
  8108 00004518 202020202020202020-
  8108 00004521 202020202020202020-
  8108 0000452A 202020202020202020-
  8108 00004533 202020202020202020-
  8108 0000453C 202020202020202020-
  8108 00004545 2020202020202020   
  8109 0000454D 202020202020202020-     	db  80 dup(32)
  8109 00004556 202020202020202020-
  8109 0000455F 202020202020202020-
  8109 00004568 202020202020202020-
  8109 00004571 202020202020202020-
  8109 0000457A 202020202020202020-
  8109 00004583 202020202020202020-
  8109 0000458C 202020202020202020-
  8109 00004595 2020202020202020   
  8110 0000459D 202020202020202020-     	db  80 dup(32)
  8110 000045A6 202020202020202020-
  8110 000045AF 202020202020202020-
  8110 000045B8 202020202020202020-
  8110 000045C1 202020202020202020-
  8110 000045CA 202020202020202020-
  8110 000045D3 202020202020202020-
  8110 000045DC 202020202020202020-
  8110 000045E5 2020202020202020   
  8111 000045ED 202020202020202020-     	db  80 dup(32)
  8111 000045F6 202020202020202020-
  8111 000045FF 202020202020202020-
  8111 00004608 202020202020202020-
  8111 00004611 202020202020202020-
  8111 0000461A 202020202020202020-
  8111 00004623 202020202020202020-
  8111 0000462C 202020202020202020-
  8111 00004635 2020202020202020   
  8112 0000463D 202020202020202020-     	db  80 dup(32)
  8112 00004646 202020202020202020-
  8112 0000464F 202020202020202020-
  8112 00004658 202020202020202020-
  8112 00004661 202020202020202020-
  8112 0000466A 202020202020202020-
  8112 00004673 202020202020202020-
  8112 0000467C 202020202020202020-
  8112 00004685 2020202020202020   
  8113 0000468D 202020202020202020-     	db  80 dup(32)
  8113 00004696 202020202020202020-
  8113 0000469F 202020202020202020-
  8113 000046A8 202020202020202020-
  8113 000046B1 202020202020202020-
  8113 000046BA 202020202020202020-
  8113 000046C3 202020202020202020-
  8113 000046CC 202020202020202020-
  8113 000046D5 2020202020202020   
  8114 000046DD 202020202020202020-     	db  80 dup(32)
  8114 000046E6 202020202020202020-
  8114 000046EF 202020202020202020-
  8114 000046F8 202020202020202020-
  8114 00004701 202020202020202020-
  8114 0000470A 202020202020202020-
  8114 00004713 202020202020202020-
  8114 0000471C 202020202020202020-
  8114 00004725 2020202020202020   
  8115 0000472D 202020202020202020-     	db  80 dup(32)
  8115 00004736 202020202020202020-
  8115 0000473F 202020202020202020-
  8115 00004748 202020202020202020-
  8115 00004751 202020202020202020-
  8115 0000475A 202020202020202020-
  8115 00004763 202020202020202020-
  8115 0000476C 202020202020202020-
  8115 00004775 2020202020202020   
  8116 0000477D CDCDCDCDCDCDCDCDCD-     	db  80 dup(205)
  8116 00004786 CDCDCDCDCDCDCDCDCD-
  8116 0000478F CDCDCDCDCDCDCDCDCD-
  8116 00004798 CDCDCDCDCDCDCDCDCD-
  8116 000047A1 CDCDCDCDCDCDCDCDCD-
  8116 000047AA CDCDCDCDCDCDCDCDCD-
  8116 000047B3 CDCDCDCDCDCDCDCDCD-
  8116 000047BC CDCDCDCDCDCDCDCDCD-
  8116 000047C5 CDCDCDCDCDCDCDCD   
  8117 000047CD 202020202020202020-     	db  80 dup(32)
  8117 000047D6 202020202020202020-
  8117 000047DF 202020202020202020-
  8117 000047E8 202020202020202020-
  8117 000047F1 202020202020202020-
  8117 000047FA 202020202020202020-
  8117 00004803 202020202020202020-
  8117 0000480C 202020202020202020-
  8117 00004815 2020202020202020   
  8118 0000481D 202020202020202020-     	db  33 dup(32), "00:00 ", 174, 175, " 00:00", 24 dup(32), "VOL 000%"
  8118 00004826 202020202020202020-
  8118 0000482F 202020202020202020-
  8118 00004838 20202020202030303A-
  8118 00004841 303020AEAF2030303A-
  8118 0000484A 303020202020202020-
  8118 00004853 202020202020202020-
  8118 0000485C 202020202020202056-
  8118 00004865 4F4C2030303025     
  8119 0000486C 00                      	db 0
  8120                                  
  8121                                  ; 25/12/2024
  8122                                  ; 28/11/2024
  8123                                  IsInSplash:
  8124 0000486D 01                      	db 1
  8125                                  
  8126                                  SplashFileName:
  8127 0000486E 53504C4153482E5741-     	db "SPLASH.WAV", 0
  8127 00004877 5600               
  8128                                  
  8129                                  ; -------------------------------------------------------------
  8130                                  
  8131                                  	; 22/12/2024
  8132                                  fillblock:
  8133 00004879 FF<rep Eh>              	times 14 db 0FFh
  8134 00004887 0000                    	dw 0
  8135                                  
  8136                                  ; -------------------------------------------------------------
  8137                                  
  8138                                  ; 23/11/2024
  8139                                  colors:
  8140 00004889 0F0B0A0C0E090D0F        	db 0Fh, 0Bh, 0Ah, 0Ch, 0Eh, 09h, 0Dh, 0Fh
  8141                                  	; white, cyan, green, red, yellow, blue, magenta
  8142 00004891 0B                      ccolor:	db 0Bh	; cyan
  8143                                  
  8144                                  EOF: 
  8145                                  
  8146                                  ; -------------------------------------------------------------
  8147                                  
  8148                                  bss:
  8149                                  
  8150                                  ABSOLUTE bss
  8151                                  
  8152 00004892 ????                    alignb 4
  8153                                  
  8154                                  ; 21/12/2024
  8155                                  fontbuff1:
  8156 00004894 <res E00h>              	resb 256*14 ; 8x14 font data (from system)
  8157                                  fontbuff2:
  8158 00005694 <res 1000h>             	resb 256*16 ; 8x16 font data (modif. from 8x14)
  8159                                  
  8160                                  ; 11/12/2024
  8161                                  wleds_addr:
  8162 00006694 <res 1400h>             	resd 80*16 ; 32 bit addrs, 80 leds, 16 volume levels
  8163                                  ; 22/12/2024
  8164                                  prev_leds:
  8165 00007A94 <res 140h>              	resd 80	; previous lighting leds
  8166                                  
  8167                                  ; 24/12/2024
  8168                                  wpoints_dif:	; wave lighting points factor (differential)
  8169 00007BD4 ????????                	resd 1	; required bytes for 1/18 second wave lighting
  8170                                  graphstart:
  8171 00007BD8 ????????                	resd 1	; start (top) line/row for wave lighting points
  8172                                  
  8173                                  LFB_ADDR:
  8174 00007BDC ????????                	resd 1
  8175                                  ;nextrow:
  8176                                  	;resd 1
  8177                                  screenpos: ; hw = (cursor) row, lw = (cursor) column
  8178 00007BE0 ????????                	resd 1
  8179 00007BE4 ????????                wcolor:	resd 1
  8180                                  ; 26/12/2024
  8181                                  ;tcolor: resb 1 ; text color
  8182                                  columns:
  8183 00007BE8 ??                      	resb 1
  8184 00007BE9 ??                      pbprev:	resb 1 ; previous progress bar indicator position
  8185                                  
  8186 00007BEA ????                    alignb 4
  8187                                  
  8188                                  bss_start:
  8189                                  
  8190                                  ; 29/12/2024
  8191                                  audio_buffer:
  8192 00007BEC ????????                	resd 1
  8193                                  
  8194                                  ; 24/12/2024
  8195                                  prev_points:
  8196 00007BF0 <res A00h>              	resd 640 ; previous wave points (which are lighting)
  8197                                  
  8198                                  ; 18/11/2024
  8199                                  stopped:
  8200 000085F0 ??                      	resb 1
  8201 000085F1 ??                      tLO:	resb 1
  8202                                  ; 21/11/2024
  8203 000085F2 ??                      tLP:	resb 1
  8204                                  ; 19/11/2024
  8205 000085F3 ??                      wleds:	resb 1
  8206                                  wleds_dif:
  8207 000085F4 ????????                	resd 1
  8208 000085F8 ????????                pbuf_o:	resd 1
  8209                                  ; 29/12/2024
  8210 000085FC ????????                pbuf_s:	resd 1
  8211                                  
  8212                                  ; 07/12/2024
  8213                                  ; 24/11/2024
  8214                                  half_buffer:
  8215 00008600 ??                      	resb 1	; dma half buffer 1 or 2 (0 or 1)
  8216                                  
  8217                                  ; 30/05/2024
  8218 00008601 ??                      VRA:	resb 1	; Variable Rate Audio Support Status
  8219                                  
  8220                                  ; 24/12/2024
  8221 00008602 ??                      p_mode: resb 1	; point mode (as alternative to LED mode)
  8222                                  
  8223                                  ; 25/12/2024
  8224                                  ; 29/11/2024
  8225                                  command:
  8226 00008603 ??                      	resb 1
  8227                                  filecount:
  8228 00008604 ??                      	resb 1
  8229                                  
  8230                                  ; 30/11/2024
  8231 00008605 ??????                  alignb 4
  8232                                  
  8233                                  ;;;;;;;;;;;;;;
  8234                                  ; 14/11/2024
  8235                                  ; (Ref: player.asm, Matan Alfasi, 2017)
  8236                                  WAVFILEHEADERbuff:
  8237                                  RIFF_ChunkID:
  8238 00008608 ????????                	resd 1	; Must be equal to "RIFF" - big-endian
  8239                                  		; 0x52494646
  8240                                  RIFF_ChunkSize:
  8241 0000860C ????????                	resd 1	; Represents total file size, not
  8242                                          	; including the first 2 fields 
  8243                                  		; (Total_File_Size - 8), little-endian
  8244                                  RIFF_Format:
  8245 00008610 ????????                	resd 1	; Must be equal to "WAVE" - big-endian
  8246                                  		; 0x57415645
  8247                                  
  8248                                  ;; WAVE header parameters ("Sub-chunk")
  8249                                  WAVE_SubchunkID:
  8250 00008614 ????????                	resd 1	; Must be equal to "fmt " - big-endian
  8251                                  		; 0x666d7420
  8252                                  WAVE_SubchunkSize:
  8253 00008618 ????????                	resd 1	; Represents total chunk size
  8254                                  WAVE_AudioFormat:
  8255 0000861C ????                    	resw 1	; PCM (Raw) - is 1, other - is a form 
  8256                                  		; of compression, not supported.
  8257                                  WAVE_NumChannels:
  8258 0000861E ????                    	resw 1	; Number of channels, Mono-1, Stereo-2
  8259                                  WAVE_SampleRate:
  8260 00008620 ????????                	resd 1	; Frequency rate, in Hz (8000, 44100 ...)
  8261                                  WAVE_ByteRate:
  8262 00008624 ????????                	resd 1	; SampleRate * NumChannels * BytesPerSample
  8263                                  WAVE_BlockAlign:
  8264 00008628 ????                    	resw 1	; NumChannels * BytesPerSample
  8265                                  		; Number of bytes for one sample.
  8266                                  WAVE_BitsPerSample:
  8267 0000862A ????                    	resw 1	; 8 = 8 bits, 16 = 16 bits, etc.
  8268                                  
  8269                                  ;; DATA header parameters
  8270                                  DATA_SubchunkID:
  8271 0000862C ????????                	resd 1	; Must be equal to "data" - big-endian
  8272                                          	; 0x64617461
  8273                                  DATA_SubchunkSize:
  8274 00008630 ????????                	resd 1	; NumSamples * NumChannels * BytesPerSample
  8275                                          	; Number of bytes in the data.
  8276                                  ;;;;;;;;;;;;;;
  8277                                  
  8278                                  ; 28/12/2024
  8279                                  ; 15/11/2024
  8280                                  ;cursortype:
  8281 00008634 ????                    	resw 1
  8282 00008636 ??                      flags:	resb 1
  8283                                  ; 06/11/2023
  8284                                  ac97_int_ln_reg:
  8285 00008637 ??                      	resb 1
  8286                                  filehandle:
  8287 00008638 ????????                	resd 1
  8288                                  
  8289                                  ; 25/12/2024
  8290                                  ; 30/11/2024
  8291                                  ;argc:	resb 1	; argument count
  8292 0000863C ????????                argv:	resd 1	; current argument (wav file) ptr
  8293 00008640 ????????                argvf:	resd 1	; 1st argument (wav file) ptr
  8294 00008644 ????????                argvl:	resd 1	; last argument (wav file) ptr
  8295                                  
  8296                                  ; 30/05/2024
  8297                                  wav_file_name:
  8298 00008648 <res 50h>               	resb 80	; wave file, path name (<= 80 bytes)
  8299 00008698 ????                    	resw 1	; 30/11/2024
  8300                                  
  8301                                  ; 08/11/2023
  8302                                  ; 07/11/2023
  8303                                  fbs_shift:
  8304 0000869A ??                      	resb 1
  8305                                  ; 07/12/2024
  8306 0000869B ??                      SRB:	resb 1
  8307                                  
  8308                                  ; 12/11/2016 - Erdogan Tan
  8309                                  bus_dev_fn:
  8310 0000869C ????????                	resd 1
  8311                                  dev_vendor:
  8312 000086A0 ????????                	resd 1
  8313                                  
  8314                                  ; 17/02/2017
  8315                                  ; NAMBAR:  Native Audio Mixer Base Address Register
  8316                                  ;    (ICH, Audio D31:F5, PCI Config Space) Address offset: 10h-13h
  8317                                  ; NABMBAR: Native Audio Bus Mastering Base Address register
  8318                                  ;    (ICH, Audio D31:F5, PCI Config Space) Address offset: 14h-17h
  8319 000086A4 ????                    NAMBAR:	resw 1	; BAR for mixer
  8320                                  NABMBAR:
  8321 000086A6 ????                    	resw 1	; BAR for bus master regs
  8322                                  
  8323                                  ; 15/11/2024
  8324                                  loadfromwavfile:
  8325 000086A8 ????????                	resd 1	; 'loadfromfile' or load+conversion proc address
  8326                                  loadsize:
  8327 000086AC ????????                	resd 1	; (.wav file) read count (bytes) per one time
  8328                                  buffersize:
  8329 000086B0 ????????                	resd 1	; 16 bit samples (not bytes)
  8330                                  
  8331                                  ; 14/11/2024
  8332                                  TotalTime:
  8333 000086B4 ????????                	resd 1	; Total (WAV File) Playing Time in seconds
  8334                                  ProgressTime:
  8335 000086B8 ????????                	resd 1
  8336 000086BC ????????                count:	resd 1	; byte count of one (wav file) read
  8337                                  LoadedDataBytes:
  8338 000086C0 ????????                	resd 1	; total read/load count
  8339                                  
  8340                                  timerticks:
  8341 000086C4 ????????                	resd 1	; (to eliminate excessive lookup of events in tuneloop)
  8342                                  		; (in order to get the emulator/qemu to run correctly)
  8343                                  ; 01/12/2024
  8344                                  _bdl_buffer:
  8345 000086C8 ????????                	resd 1
  8346                                  
  8347                                  ; 14/11/2024
  8348                                  bss_end:
  8349                                  
  8350                                  ; 29/12/2024
  8351 000086CC <res 934h>              alignb 4096
  8352                                  
  8353                                  ; 01/12/2024
  8354                                  BDL_BUFFER:
  8355 00009000 <res 100h>              	resb 256
  8356                                  	; 02/12/2024
  8357 00009100 <res F00h>              	resb 4096-256
  8358                                  
  8359                                  ;alignb 4096
  8360                                  
  8361                                  ; 29/05/2024
  8362                                  WAVBUFFER_1:
  8363 0000A000 <res 10000h>            	resb 65536
  8364                                  WAVBUFFER_2:
  8365 0001A000 <res 10000h>            	resb 65536
  8366                                  
  8367                                  ; 01/12/2024
  8368                                  ; 26/11/2023
  8369                                  temp_buffer:
  8370 0002A000 <res 10000h>            	resb 65536  ;  resb BUFFERSIZE
