     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: 30/12/2024 ]
     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[FC2F0000]        <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[D07A0000]            	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 E842090000              	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[A0300000]        <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 E9AD050000                      jmp     Exit
   145                                  
   146                                  ac97_hardware_ready:
   147 00000046 E8570F0000              	call	write_audio_dev_info
   148                                  
   149                                  ; -------------------------------------------------------------
   150                                  
   151                                  	; 21/12/2024
   152                                  	;;;
   153                                  	; Read (copy) 8x14 system fonts
   154 0000004B BE[78470000]            	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[78550000]            	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 0F845C050000            	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 0F8490050000            	jz	error_exit ; set text mode and write err msg
   188 000000A6 A3[C07A0000]            	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 0F8245050000            	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[28850000]            	mov	[argvl], eax ; last wav file (argument)
   210 000000C1 8935[20850000]          	mov	[argv], esi ; current argument (PRG file name)
   211 000000C7 AD                      	lodsd	; skip program (PRG) file name
   212 000000C8 8935[24850000]          	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[52470000]            	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[20850000]          	mov	esi, [argv]
   232                                  	;
   233 000000DB 803D[E7840000]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[28850000]          	cmp	esi, [argvl] ; last argument (wav file) ptr
   241 000000ED 7610                    	jna	short Player_ParseNextParameter
   242                                  jmp_Player_Quit:
   243 000000EF E9E7050000              	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[24850000]          	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[20850000]          	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[2C850000]            	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 E8A3080000                      call	openFile ; no error? ok.
   278 00000118 0F8383000000                    jnc	getwavparms	; 14/11/2024
   279                                  
   280                                  	; 28/11/2024
   281 0000011E 803D[51470000]00        	cmp	byte [IsInSplash], 0
   282 00000125 0F87A4000000            	ja	Player_SplashScreen
   283                                  
   284                                  	; 29/11/2024
   285 0000012B 803D[E8840000]00        	cmp	byte [filecount], 0
   286 00000132 77A1                    	ja	short check_p_command
   287                                  
   288                                  	; 25/12/2024
   289                                  	; 21/12/2024
   290 00000134 E89A050000              	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[CB300000]        <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 E99F040000                      jmp     Exit
   295                                  
   296                                  _exit_:
   297 00000154 E995040000              	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[2C850000]            	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 E847080000                     	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[0C850000]          	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[7E850000]          	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 E88E090000              	call	codecConfig		; unmute codec, set rates.
   401 000001C0 0F8253040000            	jc	init_err
   402                                  
   403                                  ; -------------------------------------------------------------
   404                                  
   405                                  	; 25/12/2024
   406 000001C6 803D[51470000]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 E8A0040000              	call	drawsplashscreen
   419                                  
   420                                  	; 21/12/2024
   421                                  	;;;
   422                                  	; set wave volume led addresses
   423 000001D4 8B1D[C07A0000]          	mov	ebx, [LFB_ADDR]
   424 000001DA 81C300C70100            	add	ebx, (13*80*8*14)
   425 000001E0 BD50000000              	mov	ebp, 80
   426 000001E5 BF[78650000]            	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[1C850000]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[51470000]00        	mov	byte [IsInSplash], 0
   463                                  	;mov	edx, wav_file_name
   464                                  	; 30/11/2024
   465 00000236 8B35[24850000]          	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[D7840000]01        	mov	byte [wleds], 1
   475                                  
   476                                  	;;;
   477                                  	; 09/12/2024
   478 00000248 B834290000              	mov	eax, 10548 ; (48000*10/182)*4
   479 0000024D 803D[E5840000]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[04850000]          	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[D8840000]            	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[B87A0000]            	mov	[wpoints_dif], eax
   507                                  	;;;
   508                                  
   509                                  ; -------------------------------------------------------------
   510                                  
   511                                  	; 25/12/2024
   512                                  StartPlay:
   513 00000280 FE05[E8840000]          	inc	byte [filecount]
   514 00000286 C605[E7840000]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[E5840000]01        	cmp	byte [VRA], 1
   524 00000294 7226                    	jb	short chk_sample_rate
   525                                  
   526                                  playwav_48_khz:
   527 00000296 C705[8C850000]-         	mov	dword [loadfromwavfile], loadFromFile
   527 0000029C [D40E0000]         
   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[94850000]            	mov	[buffersize], eax	; 16 bit samples
   538                                  	; 07/12/2024
   539                                  	;shl	eax, 1			; bytes
   540 000002AA 8A0D[7E850000]          	mov	cl, [fbs_shift]
   541 000002B0 D3E8                    	shr	eax, cl 
   542                                  	;mov	[loadsize], ax ; 16380 or 32760 or 65520
   543 000002B2 A3[90850000]            	mov	[loadsize], eax ; 16384 or 32768 or 65536
   544                                  	;;;
   545                                  	;jmp	PlayNow ; 30/05/2024
   546                                  	; 07/12/2024
   547 000002B7 E95D020000              	jmp	Player_Template
   548                                  
   549                                  chk_sample_rate:
   550                                  	; set conversion parameters
   551                                  	; (for 8, 11.025, 16, 22.050, 24, 32 kHZ)
   552 000002BC 66A1[04850000]          	mov	ax, [WAVE_SampleRate]
   553 000002C2 663D80BB                	cmp	ax, 48000
   554 000002C6 74CE                    	je	short playwav_48_khz
   555                                  chk_22khz:
   556 000002C8 663D2256                	cmp	ax, 22050
   557 000002CC 7545                    	jne	short chk_11khz
   558 000002CE 803D[0E850000]08        	cmp	byte [WAVE_BitsPerSample], 8
   559 000002D5 7615                    	jna	short chk_22khz_1
   560 000002D7 BB[B41E0000]            	mov	ebx, load_22khz_stereo_16_bit
   561 000002DC 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1
   562 000002E3 751A                    	jne	short chk_22khz_2
   563 000002E5 BB[211E0000]            	mov	ebx, load_22khz_mono_16_bit
   564 000002EA EB13                    	jmp	short chk_22khz_2
   565                                  chk_22khz_1:
   566 000002EC BB[941D0000]            	mov	ebx, load_22khz_stereo_8_bit
   567 000002F1 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1
   568 000002F8 7505                    	jne	short chk_22khz_2
   569 000002FA BB[051D0000]            	mov	ebx, load_22khz_mono_8_bit
   570                                  chk_22khz_2:
   571 000002FF B85A1D0000              	mov	eax, 7514  ; (442*17)
   572 00000304 BA25000000              	mov	edx, 37
   573 00000309 B911000000              	mov	ecx, 17
   574 0000030E E9D9010000              	jmp	set_sizes
   575                                  chk_11khz:
   576 00000313 663D112B                	cmp	ax, 11025
   577 00000317 7545                    	jne	short chk_44khz
   578 00000319 803D[0E850000]08        	cmp	byte [WAVE_BitsPerSample], 8
   579 00000320 7615                    	jna	short chk_11khz_1
   580 00000322 BB[E8200000]            	mov	ebx, load_11khz_stereo_16_bit
   581 00000327 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1
   582 0000032E 751A                    	jne	short chk_11khz_2
   583 00000330 BB[69200000]            	mov	ebx, load_11khz_mono_16_bit
   584 00000335 EB13                    	jmp	short chk_11khz_2
   585                                  chk_11khz_1:
   586 00000337 BB[E41F0000]            	mov	ebx, load_11khz_stereo_8_bit
   587 0000033C 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1 
   588 00000343 7505                    	jne	short chk_11khz_2
   589 00000345 BB[6B1F0000]            	mov	ebx, load_11khz_mono_8_bit
   590                                  chk_11khz_2:
   591 0000034A B8AD0E0000              	mov	eax, 3757  ; (221*17)
   592 0000034F BA4A000000              	mov	edx, 74
   593 00000354 B911000000              	mov	ecx, 17
   594 00000359 E98E010000              	jmp	set_sizes
   595                                  chk_44khz:
   596 0000035E 663D44AC                	cmp	ax, 44100
   597 00000362 7545                    	jne	short chk_16khz
   598 00000364 803D[0E850000]08        	cmp	byte [WAVE_BitsPerSample], 8
   599 0000036B 7615                    	jna	short chk_44khz_1
   600 0000036D BB[27230000]            	mov	ebx, load_44khz_stereo_16_bit
   601 00000372 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1
   602 00000379 751A                    	jne	short chk_44khz_2
   603 0000037B BB[A8220000]            	mov	ebx, load_44khz_mono_16_bit
   604 00000380 EB13                    	jmp	short chk_44khz_2
   605                                  chk_44khz_1:
   606 00000382 BB[25220000]            	mov	ebx, load_44khz_stereo_8_bit
   607 00000387 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1
   608 0000038E 7505                    	jne	short chk_44khz_2
   609 00000390 BB[A3210000]            	mov	ebx, load_44khz_mono_8_bit
   610                                  chk_44khz_2:
   611                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   612 00000395 B8D93A0000              	mov	eax, 15065 ; (655*23)
   613                                  	; 18/11/2023 ((file size + bss + stack) <= 64KB)
   614                                  	;mov	ax, 14076 ; (612*23)
   615                                  	; 17/11/2024
   616                                  	;mov	ax, 12650 ; (550*23)
   617 0000039A BA19000000              	mov	edx, 25
   618 0000039F B917000000              	mov	ecx, 23
   619 000003A4 E943010000              	jmp	set_sizes
   620                                  chk_16khz:
   621 000003A9 663D803E                	cmp	ax, 16000
   622 000003AD 7545                    	jne	short chk_8khz
   623 000003AF 803D[0E850000]08        	cmp	byte [WAVE_BitsPerSample], 8
   624 000003B6 7615                    	jna	short chk_16khz_1
   625 000003B8 BB[14180000]            	mov	ebx, load_16khz_stereo_16_bit
   626 000003BD 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1 
   627 000003C4 751A                    	jne	short chk_16khz_2
   628 000003C6 BB[8D170000]            	mov	ebx, load_16khz_mono_16_bit
   629 000003CB EB13                    	jmp	short chk_16khz_2
   630                                  chk_16khz_1:
   631 000003CD BB[CD160000]            	mov	ebx, load_16khz_stereo_8_bit
   632 000003D2 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1
   633 000003D9 7505                    	jne	short chk_16khz_2
   634 000003DB BB[48160000]            	mov	ebx, load_16khz_mono_8_bit
   635                                  chk_16khz_2:
   636                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   637 000003E0 B855150000              	mov	eax, 5461
   638                                  	; 17/11/2024
   639                                  	;mov	ax, 5460
   640 000003E5 BA03000000              	mov	edx, 3
   641 000003EA B901000000              	mov	ecx, 1
   642 000003EF E9F8000000              	jmp	set_sizes
   643                                  chk_8khz:
   644 000003F4 663D401F                	cmp	ax, 8000
   645 000003F8 7545                    	jne	short chk_24khz
   646 000003FA 803D[0E850000]08        	cmp	byte [WAVE_BitsPerSample], 8
   647 00000401 7615                    	jna	short chk_8khz_1
   648 00000403 BB[F7140000]            	mov	ebx, load_8khz_stereo_16_bit
   649 00000408 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1
   650 0000040F 751A                    	jne	short chk_8khz_2
   651 00000411 BB[21140000]            	mov	ebx, load_8khz_mono_16_bit
   652 00000416 EB13                    	jmp	short chk_8khz_2
   653                                  chk_8khz_1:
   654 00000418 BB[EB120000]            	mov	ebx, load_8khz_stereo_8_bit
   655 0000041D 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1 
   656 00000424 7505                    	jne	short chk_8khz_2
   657 00000426 BB[FD110000]            	mov	ebx, load_8khz_mono_8_bit
   658                                  chk_8khz_2:
   659 0000042B B8AA0A0000              	mov	eax, 2730
   660 00000430 BA06000000              	mov	edx, 6
   661 00000435 B901000000              	mov	ecx, 1
   662 0000043A E9AD000000              	jmp	set_sizes
   663                                  chk_24khz:
   664 0000043F 663DC05D                	cmp	ax, 24000
   665 00000443 7561                    	jne	short chk_32khz
   666 00000445 803D[0E850000]08        	cmp	byte [WAVE_BitsPerSample], 8
   667 0000044C 7613                    	jna	short chk_24khz_1
   668 0000044E 66BB[561A]              	mov	bx, load_24khz_stereo_16_bit
   669 00000452 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1 
   670 00000459 7519                    	jne	short chk_24khz_2
   671 0000045B 66BB[ED19]              	mov	bx, load_24khz_mono_16_bit
   672 0000045F EB13                    	jmp	short chk_24khz_2
   673                                  chk_24khz_1:
   674 00000461 BB[5D190000]            	mov	ebx, load_24khz_stereo_8_bit
   675 00000466 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1 
   676 0000046D 7505                    	jne	short chk_24khz_2
   677 0000046F BB[F0180000]            	mov	ebx, load_24khz_mono_8_bit
   678                                  chk_24khz_2:
   679                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   680 00000474 B800200000              	mov	eax, 8192
   681                                  	; 17/11/2024
   682                                  	;mov	ax, 8190
   683 00000479 BA02000000              	mov	edx, 2
   684 0000047E B901000000              	mov	ecx, 1
   685 00000483 EB67                    	jmp	short set_sizes
   686                                  
   687                                  	; 07/12/2024
   688                                  vra_needed:
   689                                  	; 30/11/2024 (TRDOS 386, ax -> eax)
   690                                  	; 13/11/2023
   691 00000485 58                      	pop	eax ; discard return address to the caller
   692                                  	; 30/05/2024
   693                                  vra_err:
   694                                  	; 21/12/2024
   695 00000486 E848020000              	call	set_text_mode
   696                                  	; 30/11/2024
   697                                  	sys	_msg, msg_no_vra, 255, 0Fh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000048B BB[35310000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000490 B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000495 BA0F000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000049A B823000000          <1>  mov eax, %1
   103                              <1> 
   104 0000049F CD40                <1>  int 40h
   698 000004A1 E94D010000              	jmp	Exit
   699                                  
   700                                  chk_32khz:
   701 000004A6 663D007D                	cmp	ax, 32000
   702 000004AA 75D9                    	jne	short vra_needed
   703 000004AC 803D[0E850000]08        	cmp	byte [WAVE_BitsPerSample], 8
   704 000004B3 7615                    	jna	short chk_32khz_1
   705 000004B5 BB[6F1C0000]            	mov	ebx, load_32khz_stereo_16_bit
   706 000004BA 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1
   707 000004C1 751A                    	jne	short chk_32khz_2
   708 000004C3 BB[FF1B0000]            	mov	ebx, load_32khz_mono_16_bit
   709 000004C8 EB13                    	jmp	short chk_32khz_2
   710                                  chk_32khz_1:
   711 000004CA BB[5C1B0000]            	mov	ebx, load_32khz_stereo_8_bit
   712 000004CF 803D[02850000]01        	cmp	byte [WAVE_NumChannels], 1
   713 000004D6 7505                    	jne	short chk_32khz_2
   714 000004D8 BB[E31A0000]            	mov	ebx, load_32khz_mono_8_bit
   715                                  chk_32khz_2:
   716                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   717 000004DD B8AA2A0000              	mov	eax, 10922
   718                                  	; 17/11/2024
   719                                  	;mov	ax, 10920
   720 000004E2 BA03000000              	mov	edx, 3
   721 000004E7 B902000000              	mov	ecx, 2
   722                                  	;jmp	short set_sizes
   723                                  set_sizes:
   724                                  	; 30/11/2024 (TRDOS 386, 32bit DOS)
   725                                  	;;;
   726                                  	; 17/11/2024
   727 000004EC 51                      	push	ecx
   728 000004ED B102                    	mov	cl, 2
   729 000004EF 2A0D[7E850000]          	sub	cl, [fbs_shift]
   730                                  		; = 2 for 16 bit stereo
   731                                  		; = 1 for 16 bit mono or 8 bit stereo
   732                                  		; = 0 for 8 bit mono
   733 000004F5 D3E0                    	shl	eax, cl
   734 000004F7 59                      	pop	ecx	
   735 000004F8 A3[90850000]            	mov	[loadsize], eax	; (one) read count in bytes
   736                                  	;;;
   737 000004FD F7E2                    	mul	edx
   738 000004FF 83F901                  	cmp	ecx, 1
   739 00000502 7402                    	je	short s_2
   740                                  s_1:
   741 00000504 F7F1                    	div	ecx
   742                                  s_2:
   743                                  	;;;
   744                                  	; eax = byte count of (to be) converted samples 
   745                                  	
   746                                  	; 17/11/2024
   747                                  	;;;
   748 00000506 8A0D[7E850000]          	mov	cl, [fbs_shift]
   749                                  
   750 0000050C D3E0                    	shl	eax, cl
   751                                  		; *1 for 16 bit stereo
   752                                  		; *2 for 16 bit mono or 8 bit stereo
   753                                  		; *4 for for 8 bit mono
   754                                  	;;;
   755                                  
   756                                  	; eax = 16 bit stereo byte count (target buffer size)
   757                                  	
   758                                  	; 07/12/2024
   759                                  	;shr	eax, 1	; buffer size is 16 bit sample count
   760 0000050E A3[94850000]            	mov	[buffersize], eax ; buffer size in bytes
   761 00000513 891D[8C850000]          	mov	[loadfromwavfile], ebx
   762                                  
   763                                  ; -------------------------------------------------------------
   764                                  
   765                                  Player_Template:
   766                                  
   767                                  	; 26/12/2024
   768 00000519 803D[51470000]00        	cmp 	byte [IsInSplash], 0
   769 00000520 7611                    	jna	short Player_Template_@
   770                                  
   771                                  	; 24/12/2024 (setting for wave lighting points)
   772 00000522 A1[C07A0000]            	mov	eax, [LFB_ADDR]
   773                                  	;add	eax, 228*640 ; wave graphics start (top) line/row
   774 00000527 05009A0100              	add	eax, 164*640 ; 256 volume levels ; 24/12/2024
   775 0000052C A3[BC7A0000]            	mov	[graphstart], eax
   776                                  
   777                                  	; 26/12/2024
   778 00000531 EB14                    	jmp	short PlayNow
   779                                  
   780                                  Player_Template_@:
   781                                  	; 21/12/2024
   782 00000533 E82C010000              	call	clearscreen
   783 00000538 E843010000              	call	drawplayingscreen
   784                                  
   785                                  	; 14/11/2024
   786 0000053D E839260000              	call	SetTotalTime
   787 00000542 E806270000              	call	UpdateFileInfo
   788                                  
   789                                  ; -------------------------------------------------------------
   790                                  
   791                                  	; 29/12/2024 (vgaplay3.s)
   792                                  	; 18/12/2024 (ac97play.s)
   793                                  PlayNow:
   794                                  	; 01/12/2024 (32bit)
   795                                  	; 14/11/2024
   796                                  	;mov	al, 3	; 0 = max, 31 = min
   797                                  	; 14/12/2024
   798 00000547 A0[5F2B0000]            	mov	al, [volume]
   799 0000054C E806040000              	call	SetPCMOutVolume@
   800                                  	; 15/11/2024
   801                                  	;;call	SetMasterVolume
   802                                  	;call	SetPCMOutVolume
   803                                  
   804                                  	;;;
   805                                  	; 18/12/2024
   806 00000551 833D[AC850000]00        	cmp	dword [_bdl_buffer], 0
   807 00000558 7707                    	ja	short PlayNow@
   808                                  	;
   809                                  	;; 29/11/2024
   810                                  	;cmp	byte [IsInSplash], 0
   811                                  	;;ja	short PlayNow@
   812                                  	;; 02/12/2024
   813                                  	;jna	short PlayNow@
   814                                  	;;;
   815                                  
   816                                  ;PlayNow@:
   817                                  	; 28/11/2024
   818                                  	;cmp	byte [IsInSplash], 0
   819                                  	;ja	short _3
   820                                  	;
   821                                  	;call	UpdateVolume
   822                                  	;
   823                                  	; 02/12/2024
   824 0000055A E881010000              	call    PlayWav@
   825 0000055F EB33                    	jmp	short _3
   826                                  
   827                                  	; 02/12/2024
   828                                  PlayNow@:
   829                                  	; reset file loading and EOF parameters
   830                                  	; 18/12/2024
   831 00000561 C705[A0850000]0000-     	mov	dword [count], 0
   831 00000569 0000               
   832 0000056B C705[A4850000]0000-     	mov	dword [LoadedDataBytes], 0
   832 00000573 0000               
   833 00000575 C605[1A850000]00        	mov	byte [flags], 0
   834 0000057C C605[D4840000]00        	mov	byte [stopped], 0
   835                                  	;jmp	short PlayNow@@
   836                                  	;;;
   837                                  
   838                                  PlayNow@@:
   839                                  	;;;
   840                                  	;
   841                                  	; 14/11/2024
   842 00000583 E8D6270000              	call	UpdateProgressBar
   843                                  	;;;
   844                                  
   845                                   	; 30/05/2024
   846                                  	; playwav4.asm
   847                                  _2:	
   848 00000588 E86F250000              	call	check4keyboardstop	; flush keyboard buffer
   849 0000058D 72F9                    	jc	short _2		; 07/11/2023
   850                                  
   851                                  ; play the .wav file. Most of the good stuff is in here.
   852                                  	
   853                                  	; 05/12/2024
   854                                  	; 02/12/2024
   855                                  	;mov	eax, [_bdl_buffer]	; BDL_BUFFER physical address
   856                                  ;_3:
   857 0000058F E86B010000              	call    PlayWav
   858                                  
   859                                  	; 30/12/2024
   860                                  	; 29/12/2024 (vgaplay3.s)
   861                                  	; 27/12/2024 (vgaplay.s)
   862                                  _3:
   863                                  
   864                                  ; close the .wav file and exit.
   865                                  
   866                                  	; 25/12/2024
   867 00000594 E83D040000              	call	closeFile
   868                                  
   869                                  	; 25/12/2024
   870                                  	;;;
   871                                  	; reset file loading and EOF parameters
   872                                  	; 18/12/2024
   873 00000599 C705[A0850000]0000-     	mov	dword [count], 0
   873 000005A1 0000               
   874 000005A3 C705[A4850000]0000-     	mov	dword [LoadedDataBytes], 0
   874 000005AB 0000               
   875 000005AD C605[1A850000]00        	mov	byte [flags], 0
   876 000005B4 C605[D4840000]00        	mov	byte [stopped], 0
   877                                  	; 29/12/2024
   878 000005BB C705[E0840000]0000-     	mov	dword [pbuf_s], 0
   878 000005C3 0000               
   879                                  	;;;
   880                                  
   881                                  	; 27/12/2024
   882                                  	; 26/12/2024
   883 000005C5 803D[51470000]00        	cmp	byte [IsInSplash], 0
   884 000005CC 7612                    	jna	short _6
   885 000005CE C605[51470000]00        	mov	byte [IsInSplash], 0
   886 000005D5 8B35[24850000]          	mov	esi, [argvf]
   887 000005DB E91FFBFFFF              	jmp	Player_ParseNextParameter
   888                                  _6:
   889 000005E0 803D[E7840000]51        	cmp	byte [command], 'Q'
   890 000005E7 7405                    	je	short terminate
   891 000005E9 E9E7FAFFFF              	jmp	check_p_command
   892                                  
   893                                  terminate:
   894 000005EE E8E0000000              	call	set_text_mode
   895                                  Exit:
   896                                  	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 000005F3 B801000000          <1>  mov eax, %1
   103                              <1> 
   104 000005F8 CD40                <1>  int 40h
   897                                  halt:
   898 000005FA EBFE                    	jmp	short halt
   899                                  
   900                                  ; -------------------------------------------------------------
   901                                  
   902                                  	; 30/05/2024
   903                                  pmsg_usage:
   904                                  	; 21/12/2024
   905 000005FC E8D2000000              	call	set_text_mode
   906                                  	; 01/12/2024
   907                                  	sys	_msg, msg_usage, 255, 0Fh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000601 BB[70300000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000606 B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 0000060B BA0F000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000610 B823000000          <1>  mov eax, %1
   103                              <1> 
   104 00000615 CD40                <1>  int 40h
   908 00000617 EBDA                    	jmp	short Exit
   909                                  
   910                                  ; -------------------------------------------------------------
   911                                  
   912                                  	; 30/05/2024
   913                                  init_err:
   914                                  	; 21/12/2024
   915 00000619 E8B5000000              	call	set_text_mode
   916                                  	; 01/12/2024
   917                                  	sys	_msg, msg_init_err, 255, 0Fh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000061E BB[04310000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000623 B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000628 BA0F000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000062D B823000000          <1>  mov eax, %1
   103                              <1> 
   104 00000632 CD40                <1>  int 40h
   918 00000634 EBBD                    	jmp	short Exit
   919                                  
   920                                  ; -------------------------------------------------------------
   921                                  
   922                                  	; 07/12/2024
   923                                  error_exit:
   924                                  	; 21/12/2024
   925 00000636 E898000000              	call	set_text_mode
   926                                  trdos386_error:
   927                                  	sys	_msg, trdos386_err_msg, 255, 0Eh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000063B BB[E4300000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000640 B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000645 BA0E000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000064A B823000000          <1>  mov eax, %1
   103                              <1> 
   104 0000064F CD40                <1>  int 40h
   928 00000651 EBA0                    	jmp	short Exit
   929                                  
   930                                  ; -------------------------------------------------------------
   931                                  
   932                                  	; 21/12/2024
   933                                  print_msg:
   934 00000653 B40E                    	mov	ah, 0Eh
   935 00000655 BB07000000              	mov	ebx, 7
   936                                  	;mov	bl, 7 ; char attribute & color
   937                                  p_next_chr:
   938 0000065A AC                      	lodsb
   939 0000065B 08C0                    	or	al, al
   940 0000065D 7404                    	jz	short p_retn ; retn
   941 0000065F CD31                    	int	31h
   942 00000661 EBF7                    	jmp	short p_next_chr
   943                                  p_retn:
   944 00000663 C3                      	retn
   945                                  
   946                                  ; -------------------------------------------------------------
   947                                  
   948                                  	; 21/12/2024
   949                                  clearscreen:
   950                                  	; fast clear
   951                                  	; 640*480, 256 colors
   952 00000664 8B3D[C07A0000]          	mov	edi, [LFB_ADDR]
   953 0000066A B9002C0100              	mov	ecx, (640*480*1)/4 ; 22/12/2024
   954 0000066F 31C0                    	xor	eax, eax
   955 00000671 F3AB                    	rep	stosd
   956 00000673 C3                      	retn
   957                                  
   958                                  ; -------------------------------------------------------------
   959                                  
   960                                  	; 26/12/2024
   961                                  	; 21/12/2024
   962                                  drawsplashscreen:
   963 00000674 BD[60320000]            	mov	ebp, SplashScreen
   964                                  	;;mov	dword [nextrow], 00100000h ; 8*16
   965                                  	;mov	dword [nextrow], 000E0000h ; 8*14
   966                                  	;mov	esi, 0 ; row 0, column 0
   967 00000679 BE00000200              	mov	esi, 00020000h ; row 2, column 0 ; top margin = 2
   968 0000067E EB0A                    	jmp	short p_d_x
   969                                  drawplayingscreen:
   970 00000680 BD[013D0000]            	mov	ebp, PlayingScreen
   971                                  	;mov	dword [nextrow], 000E0000h ; 8*14
   972                                  	;mov	esi, 0 ; row 0, column 0
   973 00000685 BE00000700              	mov	esi, 00070000h ; row 7, column 0 ; top margin = 7
   974                                  p_d_x:
   975 0000068A C605[CC7A0000]50        	mov	byte [columns], 80
   976                                  p_d_x_n:
   977 00000691 31D2                    	xor	edx, edx
   978 00000693 8A5500                  	mov	dl, [ebp]
   979 00000696 20D2                    	and	dl, dl
   980 00000698 7438                    	jz	short p_d_x_ok
   981 0000069A C1E204                  	shl	edx, 4 ; * 16 (for 8x16 font)
   982                                  
   983 0000069D BF[78550000]            	mov	edi, fontbuff2 ; start of user font data
   984 000006A2 01D7                    	add	edi, edx
   985                                  	
   986                                  	;; NOTE: Following system call writes fonts at
   987                                  	;; Std VGA video memory 0A0000h, BL bit 7 selects
   988                                  	;; screen width as 640 pixels (instead of 320 pixels)
   989                                  	;; so 8Fh is sub function 0Fh (write char)
   990                                  	;; with 640 pixels screen witdh. 
   991                                  	;; (Even if VESA VBE mode -LFB- is in use, QEMU and
   992                                  	;; a real computer with NVIDIA GEFORCE FX 550 uses
   993                                  	;; A0000h, so.. even if fonts are written at A0000h-B0000h
   994                                  	;; region, the text is appeared on screen
   995                                  	;; while LFB is at C0000000h or E0000000h.)
   996                                  
   997                                  	;sys	_video, 018Fh, [tcolor], 8001h
   998                                  			;; use STD VGA video memory
   999                                  			;; (0A0000h)
  1000                                  	;sys	_video, 020Fh, [tcolor], 8001h ; 8x16 user font
  1001                                  		 ; use LFB for current VBE mode
  1002                                  		 ; for writing fonts on screen
  1003                                  	; 26/12/2024
  1004                                  	sys	_video, 020Fh, 0Fh, 8001h ; 8x16 user font
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000006A4 BB0F020000          <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000006A9 B90F000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000006AE BA01800000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000006B3 B81F000000          <1>  mov eax, %1
   103                              <1> 
   104 000006B8 CD40                <1>  int 40h
  1005                                  
  1006 000006BA 45                      	inc	ebp
  1007 000006BB 6683C608                	add	si, 8 ; next char pos
  1008 000006BF FE0D[CC7A0000]          	dec	byte [columns]
  1009 000006C5 75CA                    	jnz	short p_d_x_n	; next column
  1010 000006C7 6631F6                  	xor	si, si
  1011                                  	;;add	esi, 00100000h	; next row ; 8*16
  1012                                  	;add	esi, [nextrow]
  1013 000006CA 81C600000E00            	add	esi, 000E0000h	; next row ; 8*14
  1014 000006D0 EBB8                    	jmp	short p_d_x
  1015                                  p_d_x_ok:
  1016 000006D2 C3                      	retn
  1017                                  
  1018                                  ; -------------------------------------------------------------
  1019                                  
  1020                                  	; 21/12/2024
  1021                                  set_text_mode:
  1022 000006D3 30E4                    	xor    ah, ah
  1023 000006D5 B003                    	mov    al, 3                        
  1024                                   	;int   10h ; al = 03h text mode, int 10 video
  1025 000006D7 CD31                    	int    31h ; TRDOS 386 - Video interrupt
  1026 000006D9 C3                      	retn
  1027                                  
  1028                                  ; -------------------------------------------------------------
  1029                                  
  1030                                  	; 02/12/2024
  1031                                  Player_Quit@:
  1032 000006DA 58                      	pop	eax ; return addr (call PlayWav@)
  1033                                  	
  1034                                  	; 29/11/2024
  1035                                  Player_Quit:
  1036 000006DB E90EFFFFFF              	jmp	 terminate
  1037                                  
  1038                                  ; -------------------------------------------------------------
  1039                                  
  1040                                  	; 29/12/2024 (vgaplay3.s)
  1041                                  	; 02/12/2024 (ac97play.s)
  1042                                  PlayWav@:
  1043                                  	; 29/05/2024
  1044                                  	; Allocate memory block (33 pages)
  1045                                  	sys	_alloc, BDL_BUFFER, 33*4096, 0	; no upper limit
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000006E0 BB[00900000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000006E5 B900100200          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000006EA BA00000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000006EF B82A000000          <1>  mov eax, %1
   103                              <1> 
   104 000006F4 CD40                <1>  int 40h
  1046                                  	;jc	short Player_Quit ; 01/12/2024
  1047 000006F6 72E2                    	jc	short Player_Quit@ ; 02/12/2024
  1048                                  
  1049 000006F8 A3[AC850000]            	mov	[_bdl_buffer], eax ; BDL_BUFFER physical address
  1050                                  	; 02/12/2024
  1051 000006FD EB05                    	jmp	short PlayWav@@
  1052                                  
  1053                                  	; 29/12/2024
  1054                                  	; 01/12/2024
  1055                                  	; 29/05/2024 (TRDOS 386, playwav7.s)
  1056                                  	; ((Modified from playwav4.asm, ich_wav4.asm))
  1057                                  	; ------------------
  1058                                  ;playwav_vra:
  1059                                  PlayWav:
  1060                                  	; create Buffer Descriptor List
  1061                                  
  1062                                  	;  Generic Form of Buffer Descriptor
  1063                                  	;  ---------------------------------
  1064                                  	;  63   62    61-48    47-32   31-0
  1065                                  	;  ---  ---  --------  ------- -----
  1066                                  	;  IOC  BUP -reserved- Buffer  Buffer
  1067                                  	;		      Length   Pointer
  1068                                  	;		      [15:0]   [31:0]
  1069                                  
  1070                                  	;mov	esi, eax
  1071                                  
  1072 000006FF A1[AC850000]            	mov	eax, [_bdl_buffer] ; BDL_BUFFER physical address
  1073                                  
  1074                                  PlayWav@@:	; 02/12/2024
  1075                                  
  1076 00000704 0500100000              	add	eax, 4096	; WAVBUFFER_1 physical address
  1077 00000709 89C3                    	mov	ebx, eax
  1078                                  	;mov	[wav_buffer1], eax
  1079                                  	;add	eax, 65536	; WAVBUFFER_2 physical address
  1080                                  	;mov	[wav_buffer2], eax
  1081                                  
  1082 0000070B BF[00900000]            	mov	edi, BDL_BUFFER
  1083 00000710 B910000000              	mov	ecx, 16
  1084                                  _pw0:
  1085                                  	;mov	eax, WAVBUFFER_1
  1086 00000715 89D8                    	mov	eax, ebx	; WAVBUFFER_1 physical address
  1087 00000717 AB                      	stosd
  1088                                  
  1089 00000718 A1[94850000]            	mov	eax, [buffersize]
  1090                                  	; 02/12/2024
  1091 0000071D D1E8                    	shr	eax, 1 ; buffer size in word
  1092 0000071F 0D00000040              	or	eax, BUP	; tuneloop (without interrupt)
  1093 00000724 AB                      	stosd
  1094                                  
  1095                                  	;mov	eax, WAVBUFFER_2
  1096 00000725 89D8                    	mov	eax, ebx
  1097 00000727 0500000100              	add	eax, 65536	; WAVBUFFER_2 physical address
  1098 0000072C AB                      	stosd
  1099                                  
  1100 0000072D A1[94850000]            	mov	eax, [buffersize]
  1101                                  	; 02/12/2024
  1102 00000732 D1E8                    	shr	eax, 1 ; buffer size in word
  1103 00000734 0D00000040              	or	eax, BUP	; tuneloop (without interrupt)
  1104 00000739 AB                      	stosd
  1105                                  
  1106 0000073A E2D9                    	loop	_pw0
  1107                                  
  1108                                  	; 14/11/2024
  1109                                  	;mov	dword [count], ecx ; 0
  1110                                  	;mov	dword [LoadedDataBytes], 0
  1111                                  
  1112                                  RePlayWav:
  1113                                  	; 01/12/2024
  1114                                  	; load 64k into buffer 1
  1115 0000073C BF[00A00000]            	mov	edi, WAVBUFFER_1
  1116 00000741 FF15[8C850000]          	call	dword [loadfromwavfile]
  1117                                  	; 01/12/2024
  1118                                  	; 14/11/2024
  1119 00000747 A1[A0850000]            	mov	eax, [count]
  1120 0000074C 0105[A4850000]          	add	[LoadedDataBytes], eax
  1121                                  
  1122                                  	; 18/12/2024
  1123 00000752 C705[A0850000]0000-     	mov	dword [count], 0
  1123 0000075A 0000               
  1124                                  
  1125                                  	; and 64k into buffer 2
  1126 0000075C BF[00A00100]            	mov	edi, WAVBUFFER_2
  1127 00000761 FF15[8C850000]          	call	dword [loadfromwavfile]
  1128                                  	; 01/12/2024
  1129                                  	; 14/11/2024
  1130 00000767 A1[A0850000]            	mov	eax, [count]
  1131 0000076C 0105[A4850000]          	add	[LoadedDataBytes], eax
  1132                                  	
  1133                                  	; write NABMBAR+10h with offset of buffer descriptor list
  1134                                  
  1135                                         	;;mov	eax, BDL_BUFFER
  1136                                          ;mov	eax, esi	; BDL_BUFFER physical address
  1137                                  
  1138                                  	;mov	eax, [_bdl_buffer] ; BDL_BUFFER physical address
  1139                                  	; 02/12/2024
  1140 00000772 8B1D[AC850000]          	mov	ebx, [_bdl_buffer]
  1141                                  
  1142 00000778 668B15[8A850000]        	mov	dx, [NABMBAR]
  1143 0000077F 6683C210                        add     dx, PO_BDBAR_REG	; set pointer to BDL
  1144                                  	;out	dx, eax 		; write to AC97 controller
  1145                                  	; 29/05/2024
  1146                                  	;mov	ebx, eax ; data, dword
  1147                                  	; 02/12/2024
  1148                                  	; ebx = [_bdl_buffer] ; data, dword
  1149 00000783 B405                    	mov	ah, 5	; write port dword
  1150 00000785 CD34                    	int	34h
  1151                                  
  1152                                  	; 31/05/2024
  1153                                  	; 19/05/2024
  1154                                  	;call	delay1_4ms
  1155                                  
  1156 00000787 B01F                            mov	al, 31
  1157 00000789 E836070000              	call	setLastValidIndex
  1158                                  
  1159                                  	; 31/05/2024
  1160                                  	; 19/05/2024
  1161                                  	;call	delay1_4ms
  1162                                  
  1163                                  	; 17/02/2017
  1164 0000078E 668B15[8A850000]                mov	dx, [NABMBAR]
  1165 00000795 6683C21B                        add	dx, PO_CR_REG		; PCM out Control Register
  1166                                          ;mov	al, IOCE + RPBM	; Enable 'Interrupt On Completion' + run
  1167                                  	;			; (LVBI interrupt will not be enabled)
  1168                                  	; 06/11/2023 (TUNELOOP version, without interrupt)
  1169 00000799 B001                    	mov	al, RPBM
  1170                                  	;out	dx, al			; Start bus master operation.
  1171                                  	; 29/05/2024
  1172                                  	; al = data, byte
  1173 0000079B B401                    	mov	ah, 1 ; write port, byte
  1174 0000079D CD34                    	int	34h
  1175                                  
  1176                                  	; 29/12/2024
  1177                                  
  1178                                  ; while DMA engine is running, examine current index and wait until it hits 1
  1179                                  ; as soon as it's 1, we need to refresh the data in wavbuffer1 with another
  1180                                  ; 64k. Likewise when it's playing buffer 2, refresh buffer 1 and repeat.
  1181                                  
  1182                                  	; 28/11/2024
  1183 0000079F 803D[51470000]00        	cmp	byte [IsInSplash], 0
  1184                                  	;jna	short tuneLoop	; 18/12/2024
  1185                                  	; 29/12/2024
  1186 000007A6 764C                    	jna	short _5
  1187                                  sL1:
  1188 000007A8 E8DA060000              	call	updateLVI	; /set LVI != CIV/
  1189 000007AD 7433                    	jz	short sL3
  1190 000007AF E8C3060000              	call	getCurrentIndex
  1191 000007B4 A801                    	test	al, BIT0
  1192 000007B6 74F0                    	jz	short sL1	; loop if buffer 2 is not playing
  1193                                  
  1194                                  	; load buffer 1
  1195                                  	;mov	ax, [WAV_BUFFER1]
  1196                                  	;call	word [loadfromwavfile]
  1197                                  	; 01/12/2024
  1198 000007B8 BF[00A00000]            	mov	edi, WAVBUFFER_1
  1199 000007BD FF15[8C850000]          	call	dword [loadfromwavfile]
  1200 000007C3 721D                    	jc	short sL3
  1201                                  sL2:
  1202 000007C5 E8BD060000              	call	updateLVI
  1203 000007CA 7416                    	jz	short sL3
  1204 000007CC E8A6060000              	call	getCurrentIndex
  1205 000007D1 A801                    	test	al, BIT0
  1206 000007D3 75F0                    	jnz	short sL2	; loop if buffer 1 is not playing
  1207                                  
  1208                                  	; load buffer 2
  1209                                  	;mov	ax, [WAV_BUFFER2]
  1210                                  	;call	word [loadfromwavfile]
  1211                                  	; 01/12/2024
  1212 000007D5 BF[00A00100]            	mov	edi, WAVBUFFER_2
  1213 000007DA FF15[8C850000]          	call	dword [loadfromwavfile]
  1214 000007E0 73C6                    	jnc	short sL1
  1215                                  sL3:
  1216 000007E2 668B15[8A850000]        	mov	dx, [NABMBAR]
  1217 000007E9 6683C21B                	add	dx, PO_CR_REG	; PCM out Control Register
  1218 000007ED B000                    	mov	al, 0
  1219                                  	;out	dx, al		; stop player
  1220                                  	; 01/12/2024
  1221                                  	; al = data, byte
  1222 000007EF B401                    	mov	ah, 1  ; write port, byte
  1223 000007F1 CD34                    	int	34h
  1224                                  
  1225                                  	; 01/12/2024
  1226                                  	; 29/11/2024
  1227                                  	;; reset file loading and EOF parameters
  1228                                  	;;mov	dword [count], 0
  1229                                  	;mov	dword [LoadedDataBytes], 0
  1230                                  	;mov	byte [flags], 0
  1231                                  
  1232 000007F3 C3                      	retn
  1233                                  
  1234                                  ; -------------------------------------------
  1235                                  
  1236                                  _5:
  1237                                  	; 26/12/2024
  1238 000007F4 803D[E6840000]00        	cmp	byte [p_mode], 0
  1239 000007FB 7705                    	ja	short tuneLoop
  1240                                  	;;;
  1241                                  
  1242                                  ; -------------------------------------------
  1243                                  
  1244                                  	; 22/12/2024
  1245                                   	; prepare all leds as turned off
  1246 000007FD E85E260000              	call	reset_wave_leds
  1247                                  
  1248                                  ; -------------------------------------------
  1249                                  
  1250                                  	; 29/12/2024 (vgaplay3.s)
  1251                                  	; 18/12/2024 (ac97play.s)
  1252                                  	; 01/12/2024 (32bit)
  1253                                  	; 29/11/2024
  1254                                  tuneLoop:
  1255                                  	; 30/05/2024
  1256                                  	; 18/11/2023 (ich_wav4.asm)
  1257                                  	; 08/11/2023
  1258                                  	; 06/11/2023
  1259                                  tLWait:
  1260                                  	; 18/11/2024
  1261 00000802 803D[D4840000]00        	cmp	byte [stopped], 0
  1262                                  	;jna	short tL@
  1263                                  	; 21/11/2024
  1264 00000809 7718                    	ja	short tLWait@
  1265 0000080B A0[D6840000]            	mov	al, [tLP]
  1266 00000810 3C31                    	cmp	al, '1'
  1267 00000812 7458                    	je	short tL1@
  1268 00000814 0F87A3000000            	ja	tL2@
  1269 0000081A B031                    	mov	al, '1'
  1270 0000081C A2[D6840000]            	mov	[tLP], al
  1271 00000821 EB49                    	jmp	short tL1@ 
  1272                                  tLWait@:	; 21/11/2024
  1273                                  	;;;
  1274                                  	; 09/12/2024
  1275 00000823 803D[D4840000]03        	cmp	byte [stopped], 3
  1276 0000082A 0F83DF000000            	jnb	_exitt_
  1277                                  	;;;
  1278 00000830 E8C6200000              	call	checkUpdateEvents
  1279 00000835 0F82D4000000            	jc	_exitt_
  1280                                  	;;;
  1281                                  	; 29/11/2024
  1282 0000083B 803D[E7840000]4E        	cmp	byte [command], 'N'
  1283 00000842 0F84C7000000            	je	_exitt_
  1284 00000848 803D[E7840000]50        	cmp	byte [command], 'P'
  1285 0000084F 0F84BA000000            	je	_exitt_
  1286                                  	;;;
  1287 00000855 803D[D5840000]30        	cmp	byte [tLO], '0'
  1288 0000085C 74A4                    	je	short tLWait
  1289 0000085E E8B6000000              	call	tLZ
  1290 00000863 C605[D5840000]30        	mov	byte [tLO], '0'
  1291 0000086A EB96                    	jmp	short tLWait
  1292                                  
  1293                                  ;tLO:	db 0
  1294                                  	
  1295                                  tL1@:
  1296                                  	;mov	al, '1'
  1297                                  	; 19/11/2024
  1298 0000086C A2[D5840000]            	mov	[tLO], al
  1299 00000871 E8A5000000              	call	tL0
  1300                                  tL1:
  1301 00000876 E80C060000              	call	updateLVI	; /set LVI != CIV/
  1302 0000087B 0F848E000000            	jz	_exitt_		; 08/11/2023
  1303                                  	;;;
  1304                                  	;call	check4keyboardstop
  1305                                  	; 14/11/2024
  1306 00000881 E875200000              	call	checkUpdateEvents
  1307 00000886 0F8283000000            	jc	_exitt_
  1308                                  	; 18/11/2024
  1309 0000088C 803D[D4840000]00        	cmp	byte [stopped], 0
  1310 00000893 778E                    	ja	short tLWait@	; 21/11/2024
  1311                                  	;;;
  1312 00000895 E8DD050000              	call	getCurrentIndex
  1313 0000089A A801                    	test	al, BIT0
  1314 0000089C 74D8                    	jz	short tL1	; loop if buffer 2 is not playing
  1315                                  
  1316                                  	; load buffer 1
  1317                                  	;mov	ax, [WAV_BUFFER1]
  1318                                  	; 01/12/2024
  1319 0000089E BF[00A00000]            	mov	edi, WAVBUFFER_1	
  1320                                  
  1321                                  	;call	loadFromFile
  1322                                  	; 18/11/2023
  1323                                  	;call	word [loadfromwavfile]
  1324                                  	; 01/12/2024
  1325 000008A3 FF15[8C850000]          	call	dword [loadfromwavfile]
  1326 000008A9 7264                    	jc	short _exitt_	; end of file
  1327                                  
  1328                                  	; 14/11/2024
  1329                                  	;mov	ax, [count]
  1330                                  	;add	[LoadedDataBytes], ax
  1331                                  	;adc	word [LoadedDataBytes+2], 0
  1332                                  	; 01/12/2024
  1333 000008AB A1[A0850000]            	mov	eax, [count]
  1334 000008B0 0105[A4850000]          	add	[LoadedDataBytes], eax
  1335                                  
  1336 000008B6 B032                    	mov	al, '2'
  1337                                  	; 21/11/2024
  1338 000008B8 A2[D6840000]            	mov	[tLP], al
  1339                                  tL2@:
  1340                                  	; 19/11/2024
  1341 000008BD A2[D5840000]            	mov	[tLO], al
  1342 000008C2 E854000000              	call	tL0
  1343                                  tL2:
  1344 000008C7 E8BB050000              	call    updateLVI
  1345 000008CC 7441                    	jz	short _exitt_	; 08/11/2023
  1346                                  	;;;
  1347                                  	;call	check4keyboardstop
  1348                                  	; 14/11/2024
  1349 000008CE E828200000              	call	checkUpdateEvents
  1350 000008D3 723A                    	jc	short _exitt_
  1351                                  	; 18/11/2024
  1352 000008D5 803D[D4840000]00        	cmp	byte [stopped], 0
  1353 000008DC 0F8741FFFFFF            	ja	tLWait@		; 21/11/2024 
  1354                                  	;;;
  1355 000008E2 E890050000              	call    getCurrentIndex
  1356 000008E7 A801                    	test	al, BIT0
  1357 000008E9 75DC                    	jnz	short tL2	; loop if buffer 1 is not playing
  1358                                  
  1359                                  	; load buffer 2
  1360                                  	;mov	ax, [WAV_BUFFER2]
  1361                                  	; 01/12/2024
  1362 000008EB BF[00A00100]            	mov	edi, WAVBUFFER_2
  1363                                  	;call	loadFromFile
  1364                                  	; 18/11/2023
  1365                                  	;call	word [loadfromwavfile]
  1366                                  	; 01/12/2024
  1367 000008F0 FF15[8C850000]          	call	dword [loadfromwavfile]
  1368                                  	;jnc	short tuneLoop
  1369 000008F6 7217                    	jc	short _exitt_
  1370                                  
  1371                                  	; 14/11/2024
  1372                                  	;mov	ax, [count]
  1373                                  	;add	[LoadedDataBytes], ax
  1374                                  	;adc	word [LoadedDataBytes+2], 0
  1375                                  	; 01/12/2024
  1376 000008F8 A1[A0850000]            	mov	eax, [count]
  1377 000008FD 0105[A4850000]          	add	[LoadedDataBytes], eax	
  1378                                  
  1379                                  	; 21/11/2024
  1380 00000903 C605[D6840000]31        	mov	byte [tLP], '1'
  1381 0000090A E9F3FEFFFF              	jmp	tuneLoop
  1382                                  
  1383                                  	; 29/12/2024 (vgaplay3.s)
  1384                                  _exitt_:
  1385                                  	; 07/12/2024
  1386                                  	; Stop Playing
  1387                                  	;mov	byte [stopped], 2
  1388                                  	;sys	_audio, 0700h
  1389 0000090F E8F5040000              	call	ac97_stop
  1390                                  
  1391                                  	;;;
  1392                                  	; 14/11/2024
  1393 00000914 E845240000              	call	UpdateProgressBar
  1394                                  	;;;
  1395                                  
  1396                                  	; 18/11/2024
  1397                                  tLZ:
  1398                                  	; 30/05/2024
  1399 00000919 B030                    	mov	al, '0'
  1400                                  
  1401                                  	;add	al, '0'
  1402                                  	;call	tL0
  1403                                  	;
  1404                                  	;retn
  1405                                  	; 06/11/2023
  1406                                  	;jmp	short tL0
  1407                                  	;retn
  1408                                  
  1409                                  	; 06/11/2023
  1410                                  tL0:
  1411                                  	; 29/05/2024 (TRDOS 386)
  1412                                  	; 08/11/2023
  1413                                  	; 05/11/2023
  1414                                  	; 17/02/2017 - Buffer switch test (temporary)
  1415                                  	; 06/11/2023
  1416                                  	; al = buffer indicator ('1', '2' or '0' -stop- )
  1417                                  
  1418                                  	; 22/12/2024 (graphics mode modification)
  1419                                  	; (640*480, 256 colors)
  1420                                  	;;;
  1421                                  	;mov	ebp, 16
  1422 0000091B BD0E000000              	mov	ebp, 14
  1423 00000920 8B3D[C07A0000]          	mov	edi, [LFB_ADDR]
  1424 00000926 0FB6F0                  	movzx	esi, al
  1425 00000929 C1E604                  	shl	esi, 4 ; * 16
  1426 0000092C 81C6[78550000]          	add	esi, fontbuff2
  1427                                  tL0_1:
  1428 00000932 BA08000000              	mov	edx, 8 ; 8 pixels (8*16 pixel font)
  1429 00000937 8A26                    	mov	ah, [esi]
  1430                                  tL0_2:
  1431 00000939 B00C                    	mov	al, 0Ch ; red
  1432 0000093B D0E4                    	shl	ah, 1
  1433 0000093D 7302                    	jnc	short tL0_3
  1434 0000093F B00E                    	mov	al, 0Eh ; yellow
  1435                                  tL0_3:
  1436 00000941 AA                      	stosb
  1437 00000942 4A                      	dec	edx
  1438 00000943 75F4                    	jnz	short tL0_2
  1439 00000945 4D                      	dec	ebp
  1440 00000946 7409                    	jz	short tL0_4
  1441 00000948 81C778020000            	add	edi, 640-8 ; next line
  1442 0000094E 46                      	inc	esi
  1443 0000094F EBE1                    	jmp	short tL0_1
  1444                                  tL0_4:
  1445                                  	;;;
  1446 00000951 C3                      	retn
  1447                                  
  1448                                  ; -------------------------------------------
  1449                                  
  1450                                  	; 29/12/2024 (vgaplay3.s)
  1451                                  	; 18/12/2024 (ac97play.s)
  1452                                  	; 14/11/2024
  1453                                  ;SetMasterVolume:
  1454                                  	; 15/11/2024
  1455                                  SetPCMOutVolume:
  1456                                  	;cmp	al, 31
  1457                                  	;ja	short setvolume_ok
  1458 00000952 A2[5F2B0000]            	mov	[volume], al  ; max = 0, min = 31
  1459                                  SetPCMOutVolume@:	; 19/11/2024
  1460 00000957 88C4                    	mov	ah, al
  1461 00000959 668B15[88850000]        	mov	dx, [NAMBAR]
  1462                                  	; 15/11/2024 (QEMU)
  1463                                    	;add	dx, CODEC_MASTER_VOL_REG
  1464 00000960 6683C218                	add	dx, CODEC_PCM_OUT_REG
  1465                                  	;out	dx, ax
  1466                                  	; 01/12/2024
  1467                                  	; bx = data, word
  1468                                  	; 03/12/2024
  1469 00000964 89C3                    	mov	ebx, eax
  1470 00000966 B403                    	mov	ah, 3  ; write port, word
  1471 00000968 CD34                    	int	34h
  1472                                  ;setvolume_ok:
  1473 0000096A C3                      	retn
  1474                                  
  1475                                  ; -------------------------------------------
  1476                                  
  1477                                  	; 29/12/2024 (vgaplay3.s)
  1478                                  	; 18/12/2024 (ac97play.s)
  1479                                  	; 30/05/2024
  1480                                  DetectAC97:
  1481                                  DetectICH:
  1482                                  	; 22/11/2023
  1483                                  	; 19/11/2023
  1484                                  	; 01/11/2023 - TRDOS 386 Kernel v2.0.7
  1485                                  	;; 10/06/2017
  1486                                  	;; 05/06/2017
  1487                                  	;; 29/05/2017
  1488                                  	;; 28/05/2017
  1489                                  
  1490                                  	; 01/12/2024
  1491                                  	; 19/11/2023
  1492 0000096B BE[A42F0000]            	mov	esi, valid_ids	; address of Valid ICH (AC97) Device IDs
  1493 00000970 B915000000              	mov	ecx, valid_id_count
  1494                                  pfd_1:
  1495 00000975 AD                      	lodsd
  1496 00000976 E8A8000000              	call	pciFindDevice
  1497 0000097B 7303                    	jnc	short d_ac97_1
  1498 0000097D E2F6                    	loop	pfd_1
  1499                                  
  1500                                  	;stc
  1501 0000097F C3                      	retn
  1502                                  
  1503                                  d_ac97_1:
  1504                                  	; eax = BUS/DEV/FN
  1505                                  	;	00000000BBBBBBBBDDDDDFFF00000000
  1506                                  	; edx = DEV/VENDOR
  1507                                  	;	DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV
  1508                                  
  1509                                  	; playwav4.asm - 19/05/2024
  1510                                  
  1511 00000980 A3[80850000]            	mov	[bus_dev_fn], eax
  1512 00000985 8915[84850000]          	mov	[dev_vendor], edx
  1513                                  
  1514                                  	; get ICH base address regs for mixer and bus master
  1515                                  
  1516 0000098B B010                            mov     al, NAMBAR_REG
  1517 0000098D E81F010000                      call    pciRegRead16			; read PCI registers 10-11
  1518                                          ;and    dx, IO_ADDR_MASK 		; mask off BIT0
  1519                                  	; 19/05/2024
  1520 00000992 80E2FE                  	and	dl, 0FEh
  1521                                  
  1522 00000995 668915[88850000]                mov     [NAMBAR], dx			; save audio mixer base addr
  1523                                  
  1524 0000099C B014                    	mov     al, NABMBAR_REG
  1525 0000099E E80E010000                      call    pciRegRead16
  1526                                          ;and    dx, IO_ADDR_MASK
  1527                                  	; 19/05/2024
  1528 000009A3 80E2C0                  	and	dl, 0C0h
  1529                                  
  1530 000009A6 668915[8A850000]                mov     [NABMBAR], dx			; save bus master base addr
  1531                                  
  1532 000009AD B03C                    	mov	al, AC97_INT_LINE ; Interrupt line register (3Ch)
  1533 000009AF E8F6000000              	call	pciRegRead8 ; 17/02/2017
  1534                                  	
  1535 000009B4 8815[1B850000]          	mov	[ac97_int_ln_reg], dl
  1536                                  
  1537                                  	;clc
  1538                                  
  1539 000009BA C3                      	retn
  1540                                  
  1541                                  ; ----------------------------------
  1542                                  	
  1543                                  	; 26/12/2024
  1544                                  	; 07/12/2024
  1545                                  	; 01/12/2024
  1546                                  	; 14/11/2024
  1547                                  	; INPUT: ds:dx = file name address
  1548                                  	; OUTPUT: [filehandle] = ; -1 = not open
  1549                                  openFile:
  1550                                  	; 26/12/2024
  1551                                  	; 01/12/2024
  1552                                  	sys	_open, edx, 0
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000009BB 89D3                <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000009BD 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 000009C2 B805000000          <1>  mov eax, %1
   103                              <1> 
   104 000009C7 CD40                <1>  int 40h
  1553                                  	; 07/12/2024
  1554                                  	;sys	_open, wav_file_name, 0
  1555 000009C9 7305                    	jnc	short _of1
  1556                                  
  1557 000009CB B8FFFFFFFF              	mov	eax, -1
  1558                                  	; cf = 1 -> not found or access error
  1559                                  _of1:
  1560 000009D0 A3[1C850000]            	mov	[filehandle], eax
  1561 000009D5 C3                      	retn
  1562                                  
  1563                                  ; ----------------------------------
  1564                                  
  1565                                  ; close the currently open file
  1566                                  
  1567                                  	; 01/12/2024
  1568                                  	; 14/11/2024
  1569                                  	; INPUT: [filehandle] ; -1 = not open
  1570                                  	; OUTPUT: none
  1571                                  closeFile:
  1572 000009D6 833D[1C850000]FF        	cmp	dword [filehandle], -1
  1573 000009DD 740D                    	jz	short _cf1
  1574                                  	; 01/12/2024
  1575                                  	sys	_close, [filehandle]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000009DF 8B1D[1C850000]      <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 000009E5 B806000000          <1>  mov eax, %1
   103                              <1> 
   104 000009EA CD40                <1>  int 40h
  1576                                  	;mov 	dword [filehandle], -1
  1577                                  _cf1:
  1578 000009EC C3                      	retn
  1579                                  
  1580                                  ; ----------------------------------
  1581                                  
  1582                                  	; 01/12/2024
  1583                                  	; 14/11/2024 - Erdogan Tan
  1584                                  getWAVParameters:
  1585                                  ; reads WAV file header(s) (44 bytes) from the .wav file.
  1586                                  ; entry: none - assumes file is already open
  1587                                  ; exit: ax = sample rate (11025, 22050, 44100, 48000)
  1588                                  ;	cx = number of channels (mono=1, stereo=2)
  1589                                  ;	dx = bits per sample (8, 16)
  1590                                  ;	bx = number of bytes per sample (1 to 4)
  1591                                  
  1592                                          ;mov	dx, WAVFILEHEADERbuff
  1593                                  	;mov	bx, [filehandle]
  1594                                          ;mov	cx, 44			; 44 bytes
  1595                                  	;mov	ah, 3Fh
  1596                                          ;int	21h
  1597                                  	;jc	short gwavp_retn
  1598                                  	; 01/12/2024 (TRDOS 386)
  1599                                  	sys	_read, [filehandle], WAVFILEHEADERbuff, 44
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000009ED 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000009F3 B9[EC840000]        <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000009F8 BA2C000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000009FD B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00000A02 CD40                <1>  int 40h
  1600 00000A04 721C                    	jc	short gwavp_retn
  1601                                  
  1602 00000A06 83F82C                  	cmp	eax, 44
  1603 00000A09 7217                    	jb	short gwavp_retn
  1604                                  
  1605 00000A0B 813D[F4840000]5741-     	cmp	dword [RIFF_Format], 'WAVE'
  1605 00000A13 5645               
  1606 00000A15 750A                    	jne	short gwavp_stc_retn
  1607                                  
  1608 00000A17 66833D[00850000]01      	cmp	word [WAVE_AudioFormat], 1 ; Offset 20, must be 1 (= PCM)
  1609                                  	;jne	short gwavp_stc_retn
  1610 00000A1F 7401                    	je	short gwavp_retn ; 15/11/2024
  1611                                  
  1612                                  	; 15/11/2024
  1613                                  	;mov	cx, [WAVE_NumChannels]	; return num of channels in CX
  1614                                          ;mov    ax, [WAVE_SampleRate]	; return sample rate in AX
  1615                                  	;mov	dx, [WAVE_BitsPerSample] 
  1616                                  					; return bits per sample value in DX
  1617                                  	;mov	bx, [WAVE_BlockAlign]	; return bytes per sample in BX
  1618                                  ;gwavp_retn:
  1619                                          ;retn
  1620                                  
  1621                                  gwavp_stc_retn:
  1622 00000A21 F9                      	stc
  1623                                  gwavp_retn:
  1624 00000A22 C3                      	retn
  1625                                  
  1626                                  
  1627                                  ; 29/12/2024 (vgaplay3.s)
  1628                                  ; 18/12/2024 (ac97play.s)
  1629                                  ; --------------------------------------------------------
  1630                                  ; 27/05/2024 - (TRDOS 386 Kernel) audio.s
  1631                                  ; --------------------------------------------------------
  1632                                  
  1633                                  NOT_PCI32_PCI16	EQU 03FFFFFFFh ; NOT BIT31+BIT30 ; 19/03/2017
  1634                                  NOT_BIT31 EQU 7FFFFFFFh
  1635                                  
  1636                                  pciFindDevice:
  1637                                  	; 19/11/2023
  1638                                  	; 03/04/2017 ('pci.asm', 20/03/2017)
  1639                                  	;
  1640                                  	; scan through PCI space looking for a device+vendor ID
  1641                                  	;
  1642                                  	; Entry: EAX=Device+Vendor ID
  1643                                  	;
  1644                                  	; Exit: EAX=PCI address if device found
  1645                                  	;	EDX=Device+Vendor ID
  1646                                  	;       CY clear if found, set if not found. EAX invalid if CY set.
  1647                                  	;
  1648                                  	; Destroys: ebx, edi ; 19/11/2023
  1649                                  
  1650                                          ; 19/11/2023
  1651 00000A23 89C3                    	mov	ebx, eax
  1652 00000A25 BF00000080              	mov	edi, 80000000h
  1653                                  nextPCIdevice:
  1654 00000A2A 89F8                    	mov 	eax, edi		; read PCI registers
  1655 00000A2C E88C000000              	call	pciRegRead32
  1656                                  	; 19/11/2023
  1657 00000A31 39DA                    	cmp	edx, ebx
  1658 00000A33 7412                    	je	short PCIScanExit	; found
  1659                                  	; 19/11/2023
  1660 00000A35 81FF00F8FF80            	cmp	edi, 80FFF800h
  1661 00000A3B 7308                    	jnb	short pfd_nf		; not found
  1662 00000A3D 81C700010000            	add	edi, 100h
  1663 00000A43 EBE5                    	jmp	short nextPCIdevice
  1664                                  pfd_nf:
  1665 00000A45 F9                      	stc
  1666 00000A46 C3                      	retn
  1667                                  PCIScanExit:
  1668                                  	;pushf
  1669 00000A47 B8FFFFFF7F              	mov	eax, NOT_BIT31 	; 19/03/2017
  1670 00000A4C 21F8                    	and	eax, edi	; return only bus/dev/fn #
  1671 00000A4E C3                      	retn
  1672                                  
  1673                                  pciRegRead:
  1674                                  	; 01/12/2024
  1675                                  	; 03/04/2017 ('pci.asm', 20/03/2017)
  1676                                  	;
  1677                                  	; 8/16/32bit PCI reader
  1678                                  	;
  1679                                  	; Entry: EAX=PCI Bus/Device/fn/register number
  1680                                  	;           BIT30 set if 32 bit access requested
  1681                                  	;           BIT29 set if 16 bit access requested
  1682                                  	;           otherwise defaults to 8 bit read
  1683                                  	;
  1684                                  	; Exit:  DL,DX,EDX register data depending on requested read size
  1685                                  	;
  1686                                  	; Note1: this routine is meant to be called via pciRegRead8,
  1687                                  	;	 pciRegread16 or pciRegRead32, listed below.
  1688                                  	;
  1689                                  	; Note2: don't attempt to read 32 bits of data from a non dword
  1690                                  	;	 aligned reg number. Likewise, don't do 16 bit reads from
  1691                                  	;	 non word aligned reg #
  1692                                  
  1693 00000A4F 53                      	push	ebx
  1694 00000A50 51                      	push	ecx
  1695 00000A51 89C3                            mov     ebx, eax		; save eax, dh
  1696 00000A53 88F1                            mov     cl, dh
  1697                                  
  1698 00000A55 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; clear out data size request
  1699 00000A5A 0D00000080                      or      eax, BIT31		; make a PCI access request
  1700 00000A5F 24FC                            and     al, ~3 ; NOT 3 ; 0FCh	; force index to be dword
  1701                                  
  1702 00000A61 66BAF80C                        mov     dx, PCI_INDEX_PORT
  1703                                          ;out	dx, eax			; write PCI selector
  1704                                  	; 29/05/2024
  1705 00000A65 53                      	push	ebx
  1706 00000A66 89C3                    	mov	ebx, eax ; data, dword
  1707 00000A68 B405                    	mov	ah, 5 ; write port, dword
  1708                                  	; dx = port number
  1709 00000A6A CD34                    	int	34h
  1710 00000A6C 5B                      	pop	ebx
  1711                                  	
  1712 00000A6D 66BAFC0C                        mov     dx, PCI_DATA_PORT
  1713 00000A71 88D8                            mov     al, bl
  1714 00000A73 2403                            and     al, 3			; figure out which port to
  1715 00000A75 00C2                            add     dl, al			; read to
  1716                                  
  1717 00000A77 F7C3000000C0            	test    ebx, PCI32+PCI16
  1718 00000A7D 750A                            jnz     short _pregr0
  1719                                  
  1720                                  	;in	al, dx			; return 8 bits of data
  1721                                  	; 29/05/2024
  1722 00000A7F B400                    	mov	ah, 0 ; read port, byte
  1723                                  	; dx = port number
  1724 00000A81 CD34                    	int	34h
  1725                                          
  1726 00000A83 88C2                    	mov	dl, al
  1727 00000A85 88CE                    	mov     dh, cl			; restore dh for 8 bit read
  1728 00000A87 EB17                    	jmp	short _pregr2
  1729                                  _pregr0:	
  1730 00000A89 F7C300000080            	test    ebx, PCI32
  1731 00000A8F 7509                            jnz	short _pregr1
  1732                                  
  1733                                  	;in	ax, dx
  1734                                  	; 29/05/2024
  1735 00000A91 B402                    	mov	ah, 2 ; read port, word
  1736                                  	; dx = port number
  1737 00000A93 CD34                    	int	34h
  1738                                  
  1739 00000A95 6689C2                  	mov     dx, ax			; return 16 bits of data
  1740 00000A98 EB06                    	jmp	short _pregr2
  1741                                  _pregr1:
  1742                                  	;in	eax, dx			; return 32 bits of data
  1743                                  	; 29/05/2024
  1744 00000A9A B404                    	mov	ah, 4 ; read port, dword
  1745                                  	; dx = port number
  1746 00000A9C CD34                    	int	34h
  1747                                  
  1748 00000A9E 89C2                    	mov	edx, eax
  1749                                  _pregr2:
  1750 00000AA0 89D8                    	mov     eax, ebx		; restore eax
  1751 00000AA2 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; clear out data size request
  1752 00000AA7 59                      	pop	ecx
  1753 00000AA8 5B                      	pop	ebx
  1754 00000AA9 C3                      	retn
  1755                                  
  1756                                  pciRegRead8:
  1757 00000AAA 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; set up 8 bit read size
  1758 00000AAF EB9E                            jmp     short pciRegRead	; call generic PCI access
  1759                                  
  1760                                  pciRegRead16:
  1761 00000AB1 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; set up 16 bit read size
  1762 00000AB6 0D00000040                      or      eax, PCI16		; call generic PCI access
  1763 00000ABB EB92                            jmp     short pciRegRead
  1764                                  
  1765                                  pciRegRead32:
  1766 00000ABD 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; set up 32 bit read size
  1767 00000AC2 0D00000080                      or      eax, PCI32		; call generic PCI access
  1768 00000AC7 EB86                            jmp     pciRegRead
  1769                                  
  1770                                  pciRegWrite:
  1771                                  	; 01/12/2024
  1772                                  	; 03/04/2017 ('pci.asm', 29/11/2016)
  1773                                  	;
  1774                                  	; 8/16/32bit PCI writer
  1775                                  	;
  1776                                  	; Entry: EAX=PCI Bus/Device/fn/register number
  1777                                  	;           BIT31 set if 32 bit access requested
  1778                                  	;           BIT30 set if 16 bit access requested
  1779                                  	;           otherwise defaults to 8bit read
  1780                                  	;        DL/DX/EDX data to write depending on size
  1781                                  	;
  1782                                  	; Note1: this routine is meant to be called via pciRegWrite8,
  1783                                  	;	 pciRegWrite16 or pciRegWrite32 as detailed below.
  1784                                  	;
  1785                                  	; Note2: don't attempt to write 32bits of data from a non dword
  1786                                  	;	 aligned reg number. Likewise, don't do 16 bit writes from
  1787                                  	;	 non word aligned reg #
  1788                                  
  1789 00000AC9 53                      	push	ebx
  1790 00000ACA 51                      	push	ecx
  1791 00000ACB 89C3                            mov     ebx, eax		; save eax, edx
  1792 00000ACD 89D1                            mov     ecx, edx
  1793 00000ACF 25FFFFFF3F              	and     eax, NOT_PCI32_PCI16	; clear out data size request
  1794 00000AD4 0D00000080                      or      eax, BIT31		; make a PCI access request
  1795 00000AD9 24FC                            and     al, ~3 ; NOT 3 ; 0FCh	; force index to be dword
  1796                                  
  1797 00000ADB 66BAF80C                        mov     dx, PCI_INDEX_PORT
  1798                                  	;out	dx, eax			; write PCI selector
  1799                                  	; 29/05/2024
  1800 00000ADF 53                      	push	ebx
  1801 00000AE0 89C3                    	mov	ebx, eax ; data, dword
  1802 00000AE2 B405                    	mov	ah, 5 ; write port, dword
  1803                                  	; dx = port number
  1804 00000AE4 CD34                    	int	34h
  1805 00000AE6 5B                      	pop	ebx
  1806                                  	
  1807 00000AE7 66BAFC0C                        mov     dx, PCI_DATA_PORT
  1808 00000AEB 88D8                            mov     al, bl
  1809 00000AED 2403                            and     al, 3			; figure out which port to
  1810 00000AEF 00C2                            add     dl, al			; write to
  1811                                  
  1812 00000AF1 F7C3000000C0            	test    ebx, PCI32+PCI16
  1813 00000AF7 7508                            jnz     short _pregw0
  1814 00000AF9 88C8                    	mov	al, cl 			; put data into al
  1815                                  	;out	dx, al
  1816                                  	; 29/05/2024
  1817                                  	; al = data, byte
  1818 00000AFB B401                    	mov	ah, 1 ; write port, byte
  1819                                  	; dx = port number
  1820 00000AFD CD34                    	int	34h
  1821                                  
  1822 00000AFF EB1F                    	jmp	short _pregw2
  1823                                  _pregw0:
  1824 00000B01 F7C300000080            	test    ebx, PCI32
  1825 00000B07 750D                            jnz     short _pregw1
  1826 00000B09 6689C8                  	mov	ax, cx			; put data into ax
  1827                                  	;out	dx, ax
  1828                                  	; 29/05/2024
  1829 00000B0C 53                      	push	ebx
  1830 00000B0D 89C3                    	mov	ebx, eax ; data, word
  1831 00000B0F B403                    	mov	ah, 3 ; write port, word
  1832                                  	; dx = port number
  1833 00000B11 CD34                    	int	34h
  1834 00000B13 5B                      	pop	ebx
  1835                                  
  1836 00000B14 EB0A                    	jmp	short _pregw2
  1837                                  _pregw1:
  1838 00000B16 89C8                    	mov	eax, ecx		; put data into eax
  1839                                  	;out	dx, eax
  1840                                  	; 29/05/2024
  1841 00000B18 53                      	push	ebx
  1842 00000B19 89C3                    	mov	ebx, eax ; data, dword
  1843 00000B1B B405                    	mov	ah, 5 ; write port, dword
  1844                                  	; dx = port number
  1845 00000B1D CD34                    	int	34h
  1846 00000B1F 5B                      	pop	ebx
  1847                                  _pregw2:
  1848 00000B20 89D8                            mov     eax, ebx		; restore eax
  1849 00000B22 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; clear out data size request
  1850 00000B27 89CA                            mov     edx, ecx		; restore dx
  1851 00000B29 59                      	pop	ecx
  1852 00000B2A 5B                      	pop	ebx
  1853 00000B2B C3                      	retn
  1854                                  
  1855                                  pciRegWrite8:
  1856 00000B2C 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; set up 8 bit write size
  1857 00000B31 EB96                            jmp	short pciRegWrite	; call generic PCI access
  1858                                  
  1859                                  pciRegWrite16:
  1860 00000B33 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; set up 16 bit write size
  1861 00000B38 0D00000040                      or      eax, PCI16		; call generic PCI access
  1862 00000B3D EB8A                            jmp	short pciRegWrite
  1863                                  
  1864                                  pciRegWrite32:
  1865 00000B3F 25FFFFFF3F                      and     eax, NOT_PCI32_PCI16	; set up 32 bit write size
  1866 00000B44 0D00000080                      or      eax, PCI32		; call generic PCI access
  1867 00000B49 E97BFFFFFF                      jmp	pciRegWrite
  1868                                  
  1869                                  ; --------------------------------------------------------
  1870                                  ; 19/05/2024 - (playwav4.asm) ac97_vra.asm
  1871                                  ; --------------------------------------------------------
  1872                                  
  1873                                  	; 13/11/2023
  1874                                  
  1875                                  ;VRA:	db 1
  1876                                  
  1877                                  codecConfig:
  1878                                  	; 01/12/2024 (ac97play.s)
  1879                                  	; 29/05/2024 (playwav7.s modification)
  1880                                  	; 19/05/2024
  1881                                  	; 19/11/2023
  1882                                  	; 15/11/2023
  1883                                  	; 04/11/2023
  1884                                  	; 17/02/2017 
  1885                                  	; 07/11/2016 (Erdogan Tan)
  1886                                  
  1887                                  	;AC97_EA_VRA equ 1
  1888                                  	AC97_EA_VRA equ BIT0
  1889                                  
  1890                                  	; 04/11/2023
  1891                                  init_ac97_controller:
  1892 00000B4E A1[80850000]            	mov	eax, [bus_dev_fn]
  1893 00000B53 B004                    	mov	al, PCI_CMD_REG
  1894 00000B55 E857FFFFFF              	call	pciRegRead16		; read PCI command register
  1895 00000B5A 80CA05                  	or      dl, IO_ENA+BM_ENA	; enable IO and bus master
  1896 00000B5D E8D1FFFFFF              	call	pciRegWrite16
  1897                                  
  1898                                  	;call	delay_100ms
  1899                                  
  1900                                  	; 19/05/2024
  1901                                  	; ('PLAYMOD3.ASM', Erdogan Tan, 18/05/2024)
  1902                                  
  1903                                  init_ac97_codec:
  1904                                  	; 18/11/2023
  1905 00000B62 BD28000000              	mov	ebp, 40
  1906                                  	; 29/05/2024
  1907                                  	;mov	ebp, 1000
  1908                                  _initc_1:
  1909                                  	; 29/05/2024
  1910 00000B67 66BA3000                	mov	dx, GLOB_STS_REG ; 30h
  1911 00000B6B 660315[8A850000]        	add	dx, [NABMBAR]
  1912                                  	;in	eax, dx
  1913 00000B72 B404                    	mov	ah, 4	; read port, dword
  1914 00000B74 CD34                    	int	34h
  1915                                  
  1916                                  	; 19/05/2024
  1917                                  	;call	delay1_4ms
  1918                                  
  1919 00000B76 83F8FF                  	cmp	eax, 0FFFFFFFFh ; -1
  1920 00000B79 750A                    	jne	short _initc_3
  1921                                  _initc_2:
  1922 00000B7B 4D                      	dec	ebp
  1923 00000B7C 7425                    	jz	short _ac97_codec_ready
  1924                                  
  1925                                  	; 31/05/2024
  1926 00000B7E E8B3020000              	call	delay_100ms
  1927 00000B83 EBE2                    	jmp	short _initc_1
  1928                                  _initc_3:
  1929 00000B85 A900030010              	test	eax, CTRL_ST_CREADY
  1930 00000B8A 7517                    	jnz	short _ac97_codec_ready
  1931                                  
  1932                                  	; 30/05/2024
  1933 00000B8C 803D[46300000]01        	cmp	byte [reset], 1
  1934 00000B93 73E6                    	jnb	short _initc_2
  1935                                  
  1936 00000B95 E893010000              	call	reset_ac97_codec
  1937                                  	; 30/05/2024
  1938 00000B9A C605[46300000]01        	mov	byte [reset], 1
  1939                                  	; 19/05/2024
  1940 00000BA1 EBD8                    	jmp	short _initc_2
  1941                                  
  1942                                  _ac97_codec_ready:
  1943 00000BA3 668B15[88850000]        	mov	dx, [NAMBAR]
  1944                                  	;add	dx, 0 ; ac_reg_0 ; reset register
  1945                                  	;out	dx, ax
  1946                                  	; 29/05/2024
  1947 00000BAA 53                      	push	ebx
  1948 00000BAB 89C3                    	mov	ebx, eax ; bx = data, word
  1949 00000BAD B403                    	mov	ah, 3	; write port, word
  1950 00000BAF CD34                    	int	34h
  1951 00000BB1 5B                      	pop	ebx
  1952                                  
  1953                                  	; 31/05/2024
  1954                                  	; 29/05/2024
  1955                                  	;call	delay_100ms
  1956                                  
  1957                                  	; 19/11/2023
  1958 00000BB2 09ED                    	or	ebp, ebp
  1959 00000BB4 7539                    	jnz	short _ac97_codec_init_ok
  1960                                  
  1961 00000BB6 31C0                    	xor	eax, eax ; 0
  1962 00000BB8 668B15[88850000]        	mov	dx, [NAMBAR]
  1963 00000BBF 6683C226                	add	dx, CODEC_REG_POWERDOWN
  1964                                  	;out	dx, ax
  1965                                  	; 29/05/2024
  1966 00000BC3 53                      	push	ebx
  1967 00000BC4 89C3                    	mov	ebx, eax
  1968 00000BC6 B403                    	mov	ah, 3	; write port, word
  1969 00000BC8 CD34                    	int	34h
  1970 00000BCA 5B                      	pop	ebx
  1971                                  
  1972                                  	; 19/11/2023
  1973                                  	; wait for 1 second
  1974                                  	; 19/05/2024
  1975 00000BCB B9E8030000              	mov	ecx, 1000 ; 1000*4*0.25ms = 1s
  1976                                  	;;mov	ecx, 10
  1977                                  	; 30/05/2024
  1978                                  	;mov	ecx, 40
  1979                                  _ac97_codec_rloop:
  1980                                  	;call	delay_100ms
  1981                                  	; 31/05/2024
  1982 00000BD0 E870020000              	call	delay1_4ms
  1983                                  
  1984                                  	;mov	dx, [NAMBAR]
  1985                                  	;add	dx, CODEC_REG_POWERDOWN
  1986                                  	;in	ax, dx
  1987                                  	; 29/05/2024
  1988 00000BD5 668B15[88850000]        	mov	dx, [NAMBAR]
  1989 00000BDC 6683C226                	add	dx, CODEC_REG_POWERDOWN
  1990                                  	; 31/05/2024
  1991 00000BE0 B402                    	mov	ah, 2	; read port, word
  1992 00000BE2 CD34                    	int	34h
  1993                                  
  1994                                  	; 31/05/2024
  1995                                  	;call	delay1_4ms
  1996                                  	
  1997 00000BE4 6683E00F                	and	ax, 0Fh
  1998 00000BE8 3C0F                    	cmp	al, 0Fh
  1999 00000BEA 7403                    	je	short _ac97_codec_init_ok
  2000 00000BEC E2E2                    	loop	_ac97_codec_rloop 
  2001                                  
  2002                                  init_ac97_codec_err1:
  2003                                  	;stc	; cf = 1 ; 19/05/2024
  2004                                  init_ac97_codec_err2:
  2005 00000BEE C3                      	retn
  2006                                  
  2007                                  _ac97_codec_init_ok:
  2008 00000BEF E8DA000000              	call 	reset_ac97_controller
  2009                                  
  2010                                  	; 31/05/2024
  2011                                  	; 30/05/2024
  2012                                  	; 19/05/2024
  2013                                  	;call	delay_100ms
  2014                                  
  2015                                  	; 30/05/2024
  2016                                  	;call	delay1_4ms
  2017                                  	;call	delay1_4ms
  2018                                  	;call	delay1_4ms
  2019                                  	;call	delay1_4ms
  2020                                  
  2021                                  	; 01/12/2024
  2022                                  setup_ac97_codec:
  2023                                  	; 12/11/2023
  2024 00000BF4 66813D[04850000]80-     	cmp	word [WAVE_SampleRate], 48000
  2024 00000BFC BB                 
  2025 00000BFD 0F849C000000            	je	skip_rate
  2026                                  	
  2027                                  	; 31/05/2024
  2028                                  	; 30/05/2024
  2029                                  	; 29/05/2024
  2030                                  	;cmp	byte [VRA], 0
  2031                                  	;jna	short skip_rate
  2032                                  
  2033                                  	; 11/11/2023
  2034 00000C03 668B15[88850000]        	mov	dx, [NAMBAR]
  2035 00000C0A 6683C22A                	add	dx, CODEC_EXT_AUDIO_CTRL_REG  	; 2Ah
  2036                                  	;in	ax, dx
  2037                                  	; 29/05/2024
  2038 00000C0E B402                    	mov	ah, 2 ; read port, word
  2039 00000C10 CD34                    	int	34h
  2040                                  
  2041                                  	; 30/05/2024
  2042                                  	; 19/05/2024
  2043 00000C12 E82E020000              	call	delay1_4ms
  2044                                  
  2045                                  	;and	al, ~BIT1 ; Clear DRA
  2046                                  	;;;
  2047                                  	; 30/05/2024
  2048 00000C17 24FC                    	and	al, ~(BIT1+BIT0) ; Clear DRA+VRA
  2049                                  	; 01/12/2024 (FASM)
  2050                                  	;and	al, NOT (BIT1+BIT0) ; 0FCh
  2051                                  	;out	dx, ax
  2052                                  	; 31/05/2024
  2053 00000C19 53                      	push	ebx
  2054 00000C1A 89C3                    	mov	ebx, eax
  2055 00000C1C 668B15[88850000]        	mov	dx, [NAMBAR]
  2056 00000C23 6683C22A                	add	dx, CODEC_EXT_AUDIO_CTRL_REG  	; 2Ah
  2057 00000C27 B403                    	mov	ah, 3 ; write port, word
  2058 00000C29 CD34                    	int	34h
  2059 00000C2B 5B                      	pop	ebx
  2060                                  
  2061                                  	; 31/05/2024
  2062 00000C2C E8B1010000              	call	check_vra
  2063                                  
  2064                                  	; 31/05/2024 - temporary (interpolated sample rate test)
  2065                                  	;mov	byte [VRA], 0
  2066                                  
  2067                                  	; 31/05/2024
  2068 00000C31 803D[E5840000]00        	cmp	byte [VRA], 0
  2069 00000C38 7665                    	jna	short skip_rate
  2070                                  
  2071 00000C3A 668B15[88850000]        	mov	dx, [NAMBAR]
  2072 00000C41 6683C22A                	add	dx, CODEC_EXT_AUDIO_CTRL_REG  	; 2Ah
  2073                                  	;in	ax, dx
  2074                                  	; 31/05/2024
  2075 00000C45 B402                    	mov	ah, 2 ; read port, word
  2076 00000C47 CD34                    	int	34h
  2077                                  
  2078                                  	;and	al, ~BIT1 ; Clear DRA
  2079                                  	;;;
  2080                                  
  2081 00000C49 0C01                    	or	al, AC97_EA_VRA ; 1 ; 04/11/2023
  2082                                  	;out	dx, ax	; Enable variable rate audio
  2083                                  	; 29/05/2024
  2084 00000C4B 53                      	push	ebx
  2085 00000C4C 89C3                    	mov	ebx, eax
  2086                                  	;
  2087                                  	; 30/05/2024
  2088 00000C4E 668B15[88850000]        	mov	dx, [NAMBAR]
  2089 00000C55 6683C22A                	add	dx, CODEC_EXT_AUDIO_CTRL_REG  	; 2Ah
  2090                                  	;
  2091 00000C59 B403                    	mov	ah, 3 ; write port, word
  2092 00000C5B CD34                    	int	34h
  2093 00000C5D 5B                      	pop	ebx
  2094                                  
  2095                                  	;mov	cx, 10
  2096 00000C5E B90A000000              	mov	ecx, 10 ; 30/05/2024
  2097                                  check_vra_loop:
  2098                                  	; 31/05/2024
  2099                                  	;call	delay_100ms
  2100                                  	; 30/05/2024
  2101 00000C63 E8DD010000              	call	delay1_4ms
  2102                                  
  2103                                  	; 11/11/2023
  2104                                  	;in	ax, dx
  2105                                  	; 29/05/2024
  2106 00000C68 668B15[88850000]        	mov	dx, [NAMBAR]
  2107 00000C6F 6683C22A                	add	dx, CODEC_EXT_AUDIO_CTRL_REG  	; 2Ah
  2108 00000C73 B402                    	mov	ah, 2 ; read port, word
  2109 00000C75 CD34                    	int	34h
  2110                                  
  2111 00000C77 A801                    	test	al, AC97_EA_VRA ; 1
  2112 00000C79 750B                    	jnz	short set_rate
  2113                                  
  2114                                  	; 11/11/2023
  2115 00000C7B E2E6                    	loop	check_vra_loop
  2116                                  
  2117                                  ;vra_not_supported:	; 19/05/2024
  2118 00000C7D C605[E5840000]00        	mov	byte [VRA], 0
  2119 00000C84 EB19                    	jmp	short skip_rate
  2120                                  
  2121                                  set_rate:
  2122                                  	;mov	ax, [sample_rate] ; 17/02/2017 (Erdogan Tan)
  2123                                  	; 01/12/2024
  2124 00000C86 66A1[04850000]          	mov	ax, [WAVE_SampleRate]
  2125                                  
  2126 00000C8C 668B15[88850000]        	mov    	dx, [NAMBAR]
  2127 00000C93 6683C22C                	add    	dx, CODEC_PCM_FRONT_DACRATE_REG	; 2Ch
  2128                                  	;out	dx, ax 	; PCM Front/Center Output Sample Rate
  2129                                  	; 29/05/2024
  2130 00000C97 53                      	push	ebx
  2131 00000C98 89C3                    	mov	ebx, eax  ; bx = data, word
  2132 00000C9A B403                    	mov	ah, 3 ; write port, word
  2133 00000C9C CD34                    	int	34h
  2134 00000C9E 5B                      	pop	ebx
  2135                                  
  2136                                  	; 29/05/2024
  2137                                  	;call	delay_100ms
  2138                                  	; 30/05/2024
  2139                                  	;call	delay1_4ms
  2140                                  
  2141                                  	; 12/11/2023
  2142                                  skip_rate:
  2143 00000C9F 66B80202                	mov	ax, 0202h
  2144 00000CA3 668B15[88850000]          	mov	dx, [NAMBAR]
  2145 00000CAA 6683C202                  	add	dx, CODEC_MASTER_VOL_REG ;02h
  2146                                  	;out	dx, ax
  2147                                  	; 29/05/2024
  2148 00000CAE 53                      	push	ebx
  2149 00000CAF 89C3                    	mov	ebx, eax  ; bx = data, word
  2150 00000CB1 B403                    	mov	ah, 3 ; write port, word
  2151 00000CB3 CD34                    	int	34h
  2152 00000CB5 5B                      	pop	ebx
  2153                                  
  2154                                  	; 29/05/2024
  2155                                  	;call	delay1_4ms
  2156                                  	;call	delay1_4ms
  2157                                  	;call	delay1_4ms
  2158                                  	;call	delay1_4ms
  2159                                  
  2160 00000CB6 66B80202                	mov	ax, 0202h
  2161 00000CBA 668B15[88850000]          	mov	dx, [NAMBAR]
  2162 00000CC1 6683C218                  	add	dx, CODEC_PCM_OUT_REG		;18h
  2163                                    	;out	dx, ax
  2164                                  	; 29/05/2024
  2165 00000CC5 53                      	push	ebx
  2166 00000CC6 89C3                    	mov	ebx, eax  ; bx = data, word
  2167 00000CC8 B403                    	mov	ah, 3 ; write port, word
  2168 00000CCA CD34                    	int	34h
  2169 00000CCC 5B                      	pop	ebx
  2170                                  
  2171                                   	; 29/05/2024
  2172                                  	;call	delay1_4ms
  2173                                  	;call	delay1_4ms
  2174                                  	;call	delay1_4ms
  2175                                  	;call	delay1_4ms
  2176                                  
  2177                                  	; 19/05/2024
  2178                                  	;clc
  2179                                  
  2180 00000CCD C3                              retn
  2181                                  
  2182                                  reset_ac97_controller:
  2183                                  	; 29/05/2024 (TRDOS 386)
  2184                                  	; 19/05/2024
  2185                                  	; 11/11/2023
  2186                                  	; 10/06/2017
  2187                                  	; 29/05/2017
  2188                                  	; 28/05/2017
  2189                                  	; reset AC97 audio controller registers
  2190 00000CCE 31C0                    	xor	eax, eax
  2191 00000CD0 66BA0B00                        mov	dx, PI_CR_REG
  2192 00000CD4 660315[8A850000]        	add	dx, [NABMBAR]
  2193                                  	;out	dx, al
  2194                                  	; 29/05/2024
  2195                                  	; al = data, byte
  2196 00000CDB B401                    	mov	ah, 1 ; write port, byte
  2197 00000CDD CD34                    	int	34h
  2198                                  
  2199                                  	; 19/05/2024
  2200                                  	;call	delay1_4ms
  2201                                  
  2202 00000CDF 66BA1B00                        mov     dx, PO_CR_REG
  2203 00000CE3 660315[8A850000]        	add	dx, [NABMBAR]
  2204                                  	;out	dx, al
  2205                                  	; 29/05/2024
  2206                                  	; al = data, byte
  2207 00000CEA B401                    	mov	ah, 1 ; write port, byte
  2208 00000CEC CD34                    	int	34h
  2209                                  
  2210                                  	; 19/05/2024
  2211                                  	;call	delay1_4ms
  2212                                  
  2213 00000CEE 66BA2B00                        mov     dx, MC_CR_REG
  2214 00000CF2 660315[8A850000]        	add	dx, [NABMBAR]
  2215                                  	;out	dx, al
  2216                                  	; 29/05/2024
  2217                                  	; al = data, byte
  2218 00000CF9 B401                    	mov	ah, 1 ; write port, byte
  2219 00000CFB CD34                    	int	34h
  2220                                  
  2221                                  	; 19/05/2024
  2222                                  	;call	delay1_4ms
  2223                                  
  2224 00000CFD B002                            mov	al, RR
  2225 00000CFF 66BA0B00                        mov	dx, PI_CR_REG
  2226 00000D03 660315[8A850000]        	add	dx, [NABMBAR]
  2227                                  	;out	dx, al
  2228                                  	; 29/05/2024
  2229                                  	; al = data, byte
  2230 00000D0A B401                    	mov	ah, 1 ; write port, byte
  2231 00000D0C CD34                    	int	34h
  2232                                  
  2233                                  	; 19/05/2024
  2234                                  	;call	delay1_4ms
  2235                                  
  2236 00000D0E 66BA1B00                        mov	dx, PO_CR_REG
  2237 00000D12 660315[8A850000]        	add	dx, [NABMBAR]
  2238                                  	;out	dx, al
  2239                                  	; 29/05/2024
  2240                                  	; al = data, byte
  2241 00000D19 B401                    	mov	ah, 1 ; write port, byte
  2242 00000D1B CD34                    	int	34h
  2243                                  
  2244                                  	; 19/05/2024
  2245                                  	;call	delay1_4ms
  2246                                  
  2247 00000D1D 66BA2B00                        mov	dx, MC_CR_REG
  2248 00000D21 660315[8A850000]        	add	dx, [NABMBAR]
  2249                                  	;out	dx, al
  2250                                  	; 29/05/2024
  2251                                  	; al = data, byte
  2252 00000D28 B401                    	mov	ah, 1 ; write port, byte
  2253 00000D2A CD34                    	int	34h
  2254                                  
  2255                                  	; 19/05/2024
  2256                                  	;call	delay1_4ms
  2257                                  
  2258 00000D2C C3                      	retn
  2259                                  
  2260                                  reset_ac97_codec:
  2261                                  	; 29/05/2024 (TRDOS 386)
  2262                                  	; 11/11/2023
  2263                                  	; 28/05/2017 - Erdogan Tan (Ref: KolibriOS, intelac97.asm)
  2264 00000D2D 66BA2C00                	mov	dx, GLOB_CNT_REG ; 2Ch
  2265 00000D31 660315[8A850000]        	add	dx, [NABMBAR]
  2266                                  	;in	eax, dx
  2267                                  	; 29/05/2024
  2268 00000D38 B404                    	mov	ah, 4 ; read port, dword
  2269 00000D3A CD34                    	int	34h
  2270                                  
  2271                                  	;test	eax, 2
  2272                                  	; 06/08/2022
  2273 00000D3C A802                    	test	al, 2
  2274 00000D3E 7407                    	jz	short _r_ac97codec_cold
  2275                                  
  2276 00000D40 E80F000000              	call	warm_ac97codec_reset
  2277 00000D45 7308                    	jnc	short _r_ac97codec_ok
  2278                                  _r_ac97codec_cold:
  2279 00000D47 E845000000                      call	cold_ac97codec_reset
  2280 00000D4C 7301                            jnc	short _r_ac97codec_ok
  2281                                  	
  2282                                  	; 16/04/2017
  2283                                          ;xor	eax, eax	; timeout error
  2284                                         	;stc
  2285 00000D4E C3                      	retn
  2286                                  
  2287                                  _r_ac97codec_ok:
  2288 00000D4F 31C0                            xor     eax, eax
  2289                                          ;mov	al, VIA_ACLINK_C00_READY ; 1
  2290 00000D51 FEC0                            inc	al
  2291 00000D53 C3                      	retn
  2292                                  
  2293                                  warm_ac97codec_reset:
  2294                                  	; 29/05/2024 (TRDOS 386)
  2295                                  	; 11/11/2023
  2296                                  	; 06/08/2022 - TRDOS 386 v2.0.5
  2297                                  	; 28/05/2017 - Erdogan Tan (Ref: KolibriOS, intelac97.asm)
  2298 00000D54 B806000000              	mov	eax, 6
  2299 00000D59 66BA2C00                	mov	dx, GLOB_CNT_REG ; 2Ch
  2300 00000D5D 660315[8A850000]        	add	dx, [NABMBAR]
  2301                                  	;out	dx, eax
  2302                                  	; 29/05/2024
  2303 00000D64 53                      	push	ebx
  2304 00000D65 89C3                    	mov	ebx, eax  ; ebx = data, dword
  2305 00000D67 B405                    	mov	ah, 5 ; write port, dword
  2306 00000D69 CD34                    	int	34h
  2307 00000D6B 5B                      	pop	ebx
  2308                                  
  2309                                  	; 30/05/2024
  2310 00000D6C B90A000000              	mov	ecx, 10	; total 1s
  2311                                  	; 29/05/2024
  2312                                  	;mov	ecx, 4000
  2313                                  _warm_ac97c_rst_wait:
  2314                                  	; 30/05/2024
  2315 00000D71 E8C0000000              	call	delay_100ms
  2316                                  
  2317 00000D76 66BA3000                	mov	dx, GLOB_STS_REG ; 30h
  2318 00000D7A 660315[8A850000]        	add	dx, [NABMBAR]
  2319                                  	;in	eax, dx
  2320                                  	; 29/05/2024
  2321 00000D81 B404                    	mov	ah, 4 ; read port, dword
  2322 00000D83 CD34                    	int	34h
  2323                                  
  2324 00000D85 A900030010              	test	eax, CTRL_ST_CREADY
  2325 00000D8A 7504                    	jnz	short _warm_ac97c_rst_ok
  2326                                  
  2327 00000D8C 49                      	dec	ecx
  2328 00000D8D 75E2                    	jnz	short _warm_ac97c_rst_wait
  2329                                  
  2330                                  _warm_ac97c_rst_fail:
  2331 00000D8F F9                              stc
  2332                                  _warm_ac97c_rst_ok:
  2333 00000D90 C3                      	retn
  2334                                  
  2335                                  cold_ac97codec_reset:
  2336                                  	; 11/11/2023
  2337                                  	; 06/08/2022 - TRDOS 386 v2.0.5
  2338                                  	; 28/05/2017 - Erdogan Tan (Ref: KolibriOS, intelac97.asm)
  2339 00000D91 B802000000                      mov	eax, 2
  2340 00000D96 66BA2C00                	mov	dx, GLOB_CNT_REG ; 2Ch
  2341 00000D9A 660315[8A850000]        	add	dx, [NABMBAR]
  2342                                  	;out	dx, eax
  2343                                  	; 29/05/2024
  2344 00000DA1 53                      	push	ebx
  2345 00000DA2 89C3                    	mov	ebx, eax  ; ebx = data, dword
  2346 00000DA4 B405                    	mov	ah, 5 ; write port, dword
  2347 00000DA6 CD34                    	int	34h
  2348 00000DA8 5B                      	pop	ebx
  2349                                  
  2350                                  	; 30/05/2024
  2351 00000DA9 E888000000              	call	delay_100ms 	; wait 100 ms
  2352 00000DAE E883000000              	call	delay_100ms 	; wait 100 ms
  2353 00000DB3 E87E000000              	call	delay_100ms 	; wait 100 ms
  2354 00000DB8 E879000000              	call	delay_100ms 	; wait 100 ms
  2355                                  
  2356                                  	; 30/05/2024
  2357 00000DBD B910000000              	mov	ecx, 16	; total 20*100 ms = 2s
  2358                                  	; 29/05/2024
  2359                                  	;mov	ecx, 16000
  2360                                  _cold_ac97c_rst_wait:
  2361 00000DC2 66BA3000                	mov	dx, GLOB_STS_REG ; 30h
  2362 00000DC6 660315[8A850000]        	add	dx, [NABMBAR]
  2363                                  	;in	eax, dx
  2364                                  	; 29/05/2024
  2365 00000DCD B404                    	mov	ah, 4 ; read port, dword
  2366 00000DCF CD34                    	int	34h
  2367                                  
  2368 00000DD1 A900030010              	test	eax, CTRL_ST_CREADY
  2369 00000DD6 7509                    	jnz	short _cold_ac97c_rst_ok
  2370                                  
  2371                                  	; 30/05/2024
  2372                                  	; 29/05/2024
  2373 00000DD8 E859000000              	call	delay_100ms
  2374                                  
  2375 00000DDD 49                      	dec	ecx
  2376 00000DDE 75E2                    	jnz	short _cold_ac97c_rst_wait
  2377                                  
  2378                                  _cold_ac97c_rst_fail:
  2379 00000DE0 F9                              stc
  2380                                  _cold_ac97c_rst_ok:
  2381 00000DE1 C3                      	retn
  2382                                  
  2383                                  ; 29/12/2024 (vgaplay3.s, NASM)
  2384                                  ; 18/12/2024 (ac97play.s, FASM)
  2385                                  ; 13/11/2024
  2386                                  ; 30/05/2024
  2387                                  %if 1
  2388                                  ;if 1
  2389                                  check_vra:
  2390                                  	; 29/05/2024
  2391 00000DE2 C605[E5840000]01        	mov	byte [VRA], 1
  2392                                  
  2393                                  	; 29/05/2024 - audio.s (TRDOS 386 Kernel) - 27/05/2024
  2394                                  	; 24/05/2024
  2395                                  	; 23/05/2024
  2396 00000DE9 668B15[88850000]        	mov	dx, [NAMBAR]
  2397 00000DF0 6683C228                	add	dx, CODEC_EXT_AUDIO_REG	; 28h
  2398                                  	;in	ax, dx
  2399                                  	; 29/05/2024
  2400 00000DF4 B402                    	mov	ah, 2 ; read port, word
  2401 00000DF6 CD34                    	int	34h
  2402                                  
  2403                                  	; 30/05/2024
  2404                                  	; 23/05/2024
  2405 00000DF8 E848000000              	call	delay1_4ms
  2406                                  
  2407                                  	; 29/05/2024
  2408 00000DFD A801                    	test	al, BIT0
  2409                                  	;test	al, 1 ; BIT0 ; Variable Rate Audio bit
  2410 00000DFF 7507                    	jnz	short check_vra_ok
  2411                                  
  2412                                  vra_not_supported:
  2413                                  	; 13/11/2023
  2414 00000E01 C605[E5840000]00        	mov	byte [VRA], 0
  2415                                  check_vra_ok:
  2416 00000E08 C3                      	retn
  2417                                  ;end if
  2418                                  %endif
  2419                                  
  2420                                  ; --------------------------------------------------------
  2421                                  ; --------------------------------------------------------
  2422                                  
  2423                                  ; 29/12/2024 (vgaplay3.s)
  2424                                  ; 18/12/2024 (ac97play.s)
  2425                                  ;
  2426                                  ; 18/11/2024
  2427                                  ; Ref: TRDOS 386 v2.0.9, audio.s, Erdogan Tan, 06/06/2024
  2428                                  
  2429                                  ac97_stop: 
  2430                                  	; 18/11/2024
  2431 00000E09 C605[D4840000]02        	mov	byte [stopped], 2
  2432                                  
  2433                                  ac97_po_cmd@:
  2434 00000E10 30C0                    	xor	al, al ; 0
  2435                                  ac97_po_cmd:
  2436 00000E12 668B15[8A850000]        	mov     dx, [NABMBAR]
  2437 00000E19 6683C21B                        add     dx, PO_CR_REG	; PCM out control register
  2438                                  	;out	dx, al
  2439                                  	; 01/12/2024
  2440 00000E1D B401                    	mov	ah, 1 ; write port, byte
  2441 00000E1F CD34                    	int	34h
  2442 00000E21 C3                      	retn
  2443                                  
  2444                                  ac97_pause:
  2445 00000E22 C605[D4840000]01        	mov	byte [stopped], 1 ; paused
  2446                                  	;mov	al, 0
  2447                                  	;jmp	short ac97_po_cmd
  2448 00000E29 EBE5                    	jmp	short ac97_po_cmd@
  2449                                  
  2450                                  ac97_play: ; continue to play (after pause)
  2451 00000E2B C605[D4840000]00        	mov	byte [stopped], 0
  2452 00000E32 B001                    	mov	al, RPBM
  2453 00000E34 EBDC                    	jmp	short ac97_po_cmd
  2454                                  
  2455                                  ; --------------------------------------------------------
  2456                                  
  2457                                  PORTB		EQU 061h
  2458                                  REFRESH_STATUS	EQU 010h	; Refresh signal status
  2459                                  
  2460                                  	; 29/12/2024 (vgaplay3.s)
  2461                                  	; 18/12/2024
  2462                                  	; 01/12/2024 (ac97play.s)
  2463                                  delay_100ms:
  2464                                  	; 30/05/2024 (playwav7.s)
  2465 00000E36 51                      	push	ecx
  2466 00000E37 B990010000              	mov	ecx, 400  ; 400*0.25ms
  2467                                  _delay_x_ms:
  2468 00000E3C E804000000              	call	delay1_4ms
  2469 00000E41 E2F9                            loop	_delay_x_ms
  2470 00000E43 59                      	pop	ecx
  2471 00000E44 C3                      	retn
  2472                                  
  2473                                  delay1_4ms:
  2474                                  	; 30/05/2024 (TRDOS 386)
  2475 00000E45 50                              push    eax 
  2476 00000E46 51                              push    ecx
  2477 00000E47 53                      	push	ebx
  2478 00000E48 52                      	push	edx
  2479 00000E49 B910000000                      mov     ecx, 16			; close enough.
  2480                                  	;in	al, PORTB
  2481                                  	; 30/05/2024
  2482 00000E4E 66BA6100                	mov	dx, PORTB
  2483 00000E52 B400                    	mov	ah, 0  ; read port, byte
  2484 00000E54 CD34                    	int	34h
  2485                                  
  2486 00000E56 2410                    	and	al, REFRESH_STATUS
  2487                                  	;mov	ah, al			; Start toggle state
  2488 00000E58 88C3                    	mov	bl, al
  2489 00000E5A 09C9                    	or	ecx, ecx
  2490 00000E5C 7401                    	jz	short _d4ms1
  2491 00000E5E 41                      	inc	ecx			; Throwaway first toggle
  2492                                  _d4ms1:	
  2493                                  	;in	al, PORTB		; Read system control port
  2494                                  	; 30/05/2024
  2495 00000E5F 66BA6100                	mov	dx, PORTB
  2496 00000E63 B400                    	mov	ah, 0  ; read port, byte
  2497 00000E65 CD34                    	int	34h
  2498                                  
  2499 00000E67 2410                    	and	al, REFRESH_STATUS	; Refresh toggles 15.085 microseconds
  2500                                  	;cmp	ah, al
  2501 00000E69 38C3                    	cmp	bl, al
  2502 00000E6B 74F2                    	je	short _d4ms1		; Wait for state change
  2503                                  
  2504                                  	;mov	ah, al			; Update with new state
  2505 00000E6D 88C3                    	mov	bl, al
  2506 00000E6F 49                      	dec	ecx
  2507 00000E70 75ED                    	jnz	short _d4ms1
  2508                                  
  2509 00000E72 5A                      	pop	edx
  2510 00000E73 5B                              pop	ebx
  2511 00000E74 59                      	pop	ecx
  2512 00000E75 58                              pop	eax
  2513                                  c4ue_okk:
  2514 00000E76 C3                              retn
  2515                                  
  2516                                  ; --------------------------------------------------------
  2517                                  
  2518                                  getCurrentIndex:
  2519                                  	; returns AL = current index value
  2520                                  	; 01/12/2024
  2521                                  	; 29/05/2024 (TRDOS 386)
  2522                                  	; 08/11/2023
  2523 00000E77 668B15[8A850000]        	mov	dx, [NABMBAR]
  2524 00000E7E 6683C214                	add	dx, PO_CIV_REG
  2525                                  	;in	al, dx
  2526                                  	; 29/05/2024
  2527 00000E82 B400                    	mov	ah, 0 ; read port, byte
  2528 00000E84 CD34                    	int	34h
  2529                                  uLVI2:	;	06/11/2023
  2530 00000E86 C3                      	retn
  2531                                  
  2532                                  ; --------------------------------------------------------
  2533                                  
  2534                                  updateLVI:
  2535                                  	; 01/12/2024
  2536                                  	; 29/05/2024 (TRDOS 386)
  2537                                  	; 08/11/2023
  2538                                  	; 07/11/2023
  2539                                  	; 06/11/2023
  2540 00000E87 668B15[8A850000]        	mov	dx, [NABMBAR]
  2541 00000E8E 6683C214                	add	dx, PO_CIV_REG
  2542                                  	; (Current Index Value and Last Valid Index value)
  2543                                  	;in	ax, dx
  2544                                  	; 29/05/2024
  2545 00000E92 B402                    	mov	ah, 2 ; read port, word
  2546 00000E94 CD34                    	int	34h
  2547                                  
  2548 00000E96 38E0                    	cmp	al, ah ; is current index = last index ?
  2549 00000E98 75EC                    	jne	short uLVI2
  2550                                  
  2551                                  	; 08/11/2023	
  2552 00000E9A E8D8FFFFFF              	call	getCurrentIndex
  2553                                   
  2554 00000E9F F605[1A850000]01        	test	byte [flags], ENDOFFILE
  2555                                  	;jnz	short uLVI1
  2556 00000EA6 7418                    	jz	short uLVI0  ; 08/11/2023
  2557                                  
  2558                                  	; 08/11/2023
  2559 00000EA8 50                      	push	eax	; 29/05/2024 (32 bit)
  2560 00000EA9 668B15[8A850000]        	mov	dx, [NABMBAR]
  2561 00000EB0 6683C216                	add	dx, PO_SR_REG  ; PCM out status register
  2562                                  	;in	ax, dx
  2563                                  	; 29/05/2024
  2564 00000EB4 B402                    	mov	ah, 2 ; read port, word
  2565 00000EB6 CD34                    	int	34h
  2566                                  
  2567 00000EB8 A803                    	test	al, 3 ; bit 1 = Current Equals Last Valid (CELV)
  2568                                  		      ; (has been processed)
  2569                                  		      ; bit 0 = 1 -> DMA Controller Halted (DCH)
  2570 00000EBA 58                      	pop	eax
  2571 00000EBB 7407                    	jz	short uLVI1
  2572                                  uLVI3:
  2573 00000EBD 31C0                    	xor	eax, eax
  2574                                  	; zf = 1
  2575 00000EBF C3                      	retn
  2576                                  uLVI0:
  2577                                          ; not at the end of the file yet.
  2578 00000EC0 FEC8                    	dec	al
  2579 00000EC2 241F                    	and	al, 1Fh
  2580                                  uLVI1:
  2581                                  	;call	setLastValidIndex
  2582                                  ;uLVI2:
  2583                                  	;retn
  2584                                  
  2585                                  ;input AL = index # to stop on
  2586                                  setLastValidIndex:
  2587                                  	; 01/12/2024
  2588                                  	; 29/05/2024 (TRDOS 386)
  2589                                  	; 08/11/2023
  2590 00000EC4 668B15[8A850000]        	mov	dx, [NABMBAR]
  2591 00000ECB 6683C215                	add	dx, PO_LVI_REG
  2592                                          ;out	dx, al
  2593                                  	; 29/05/2024
  2594                                  	; al = data, byte
  2595 00000ECF B401                    	mov	ah, 1 ; write port, byte
  2596 00000ED1 CD34                    	int	34h
  2597 00000ED3 C3                      	retn
  2598                                  
  2599                                  ; --------------------------------------------------------
  2600                                  ; 07/12/2024
  2601                                  ; --------------------------------------------------------
  2602                                  
  2603                                  ; /////
  2604                                  	; 14/12/2024
  2605                                  	; 07/12/2024
  2606                                  	; 01/12/2024
  2607                                  	; 30/05/2024 (ich_wav4.asm, 19/05/2024)
  2608                                  loadFromFile:
  2609                                  	; 07/11/2023
  2610                                  
  2611 00000ED4 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2612                                  					; last of the file?
  2613 00000EDB 7402                    	jz	short lff_0		; no
  2614 00000EDD F9                      	stc
  2615 00000EDE C3                      	retn
  2616                                  
  2617                                  lff_0:
  2618                                  	; 07/12/2024
  2619                                  	; 26/11/2023 (playwav8.s)
  2620                                  	;mov	edi, audio_buffer
  2621                                  
  2622                                  	; 01/12/2024 (TRDOS 386)
  2623                                  	; edi = audio buffer address
  2624                                  
  2625                                  	; 14/12/2024
  2626                                  	; 01/12/2024
  2627                                  	; 17/11/2024
  2628                                  	;mov	ebx, [filehandle]
  2629                                  	; 02/12/2024
  2630                                  	;mov	edx, [loadsize] 
  2631                                  
  2632                                  	; 17/11/2024
  2633 00000EDF 803D[7E850000]00        	cmp	byte [fbs_shift], 0
  2634 00000EE6 7677                    	jna	short lff_1 ; stereo, 16 bit
  2635                                  
  2636                                  lff_2:
  2637                                  	; 01/12/2024
  2638 00000EE8 BE[00A00200]            	mov	esi, temp_buffer 
  2639                                  	; 14/12/2024
  2640                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000EED 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000EF3 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000EF5 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000EFB B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00000F00 CD40                <1>  int 40h
  2641 00000F02 0F8289000000            	jc	lff_4 ; error !
  2642                                  
  2643                                  	; 01/12/2024
  2644                                  	; 14/11/2024
  2645 00000F08 A3[A0850000]            	mov	[count], eax
  2646                                  
  2647                                  	; 01/12/2024
  2648 00000F0D 21C0                    	and	eax, eax
  2649                                  	;jz	short lff_3
  2650                                  	; 14/12/2024
  2651 00000F0F 0F8485000000            	jz	lff_10
  2652                                  
  2653 00000F15 8A1D[7E850000]          	mov	bl, [fbs_shift]
  2654                                  
  2655                                  	; 14/12/2024
  2656 00000F1B 89FA                    	mov	edx, edi ; audio buffer start address
  2657                                  
  2658                                  	; 01/12/2024
  2659 00000F1D 89C1                    	mov	ecx, eax
  2660 00000F1F 803D[0E850000]08        	cmp	byte [WAVE_BitsPerSample], 8 ; bits per sample (8 or 16)
  2661 00000F26 751E                    	jne	short lff_7 ; 16 bit samples
  2662                                  	; 8 bit samples
  2663 00000F28 FECB                    	dec	bl  ; shift count, 1 = stereo, 2 = mono
  2664 00000F2A 740E                    	jz	short lff_6 ; 8 bit, stereo
  2665                                  	; 01/12/2024 (32bit registers)
  2666                                  lff_5:
  2667                                  	; mono & 8 bit
  2668 00000F2C AC                      	lodsb
  2669 00000F2D 2C80                    	sub	al, 80h ; 08/11/2023
  2670 00000F2F C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
  2671 00000F32 66AB                    	stosw	; left channel
  2672 00000F34 66AB                    	stosw	; right channel
  2673 00000F36 E2F4                    	loop	lff_5
  2674 00000F38 EB16                    	jmp	short lff_9
  2675                                  lff_6:
  2676                                  	; stereo & 8 bit
  2677 00000F3A AC                      	lodsb
  2678 00000F3B 2C80                    	sub	al, 80h ; 08/11/2023
  2679 00000F3D C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
  2680 00000F40 66AB                    	stosw
  2681 00000F42 E2F6                    	loop	lff_6
  2682 00000F44 EB0A                    	jmp	short lff_9
  2683                                  lff_7:
  2684 00000F46 D1E9                    	shr	ecx, 1 ; word count
  2685                                  lff_8:
  2686 00000F48 66AD                    	lodsw
  2687 00000F4A 66AB                    	stosw	; left channel
  2688 00000F4C 66AB                    	stosw	; right channel
  2689 00000F4E E2F8                    	loop	lff_8
  2690                                  lff_9:
  2691                                  	; 14/12/2024
  2692 00000F50 89F8                    	mov	eax, edi
  2693 00000F52 8B0D[94850000]          	mov	ecx, [buffersize] 
  2694 00000F58 01D1                    	add	ecx, edx ; + buffer start address
  2695 00000F5A 39C8                    	cmp	eax, ecx	
  2696 00000F5C 7225                    	jb	short lff_3
  2697 00000F5E C3                      	retn
  2698                                  	
  2699                                  lff_1:  
  2700                                  	; 07/12/2024
  2701                                  	; 01/12/2024
  2702                                  	;sys 	_read, [filehandle], esi, [loadsize] ; edx
  2703                                  	; 14/12/2024
  2704                                  	sys 	_read, [filehandle], edi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000F5F 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000F65 89F9                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000F67 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000F6D B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00000F72 CD40                <1>  int 40h
  2705                                  	; 07/11/2023
  2706 00000F74 721B                    	jc	short lff_4 ; error !
  2707                                  
  2708                                  	; 01/12/2024
  2709                                  	; 14/11/2024
  2710 00000F76 A3[A0850000]            	mov	[count], eax
  2711                                  
  2712                                  	; 02/12/2024
  2713 00000F7B 39D0                    	cmp	eax, edx ; cmp eax, [loadsize]	
  2714 00000F7D 7411                    	je	short endLFF
  2715                                  	; edi = buffer (start) address
  2716 00000F7F 01C7                    	add	edi, eax
  2717 00000F81 89D1                    	mov	ecx, edx
  2718                                  lff_3:
  2719                                  	;call	padfill			; blank pad the remainder
  2720                                  	; 21/12/2024
  2721                                  padfill:
  2722                                  	; 14/12/2024
  2723                                  	; 01/12/2024 (TRDOS 386, 32bit registers)
  2724                                  	; 17/11/2024
  2725                                  	;   di = offset (to be filled with ZEROs)
  2726                                  	;   bp = buffer segment
  2727                                  	;   ax = di = number of bytes loaded
  2728                                  	;   cx = buffer size (> loaded bytes)	
  2729                                  	; 07/11/2023
  2730                                  	; 06/11/2023
  2731                                  	; 17/02/2017
  2732                                  	; 01/12/2024
  2733 00000F83 29C1                    	sub	ecx, eax
  2734                                  	; 01/12/2024
  2735                                  	; 25/11/2024
  2736 00000F85 31C0                    	xor	eax, eax
  2737                                  	; 14/12/2024
  2738 00000F87 F3AA                    	rep	stosb
  2739                                  	; 21/12/2024
  2740                                  	;retn
  2741                                  	; ----------
  2742                                          ;clc				; don't exit with CY yet.
  2743 00000F89 800D[1A850000]01                or	byte [flags], ENDOFFILE	; end of file flag
  2744                                  endLFF:
  2745 00000F90 C3                              retn
  2746                                  lff_4:
  2747                                  	; 08/11/2023
  2748 00000F91 B021                    	mov	al, '!'  ; error
  2749 00000F93 E883F9FFFF              	call	tL0
  2750                                  
  2751                                  	; 01/12/2024
  2752 00000F98 31C0                    	xor	eax, eax
  2753                                  lff_10:
  2754                                  	; 14/12/2024
  2755 00000F9A 8B0D[94850000]          	mov	ecx, [buffersize]
  2756 00000FA0 EBE1                    	jmp	short lff_3
  2757                                  
  2758                                  ; /////
  2759                                  
  2760                                  ; --------------------------------------------------------
  2761                                  ; --------------------------------------------------------
  2762                                  	
  2763                                  write_audio_dev_info:
  2764                                  	; 30/05/2024
  2765                                       	;sys_msg msgAudioCardInfo, 0Fh
  2766                                  	; 01/12/2024
  2767                                  	sys 	_msg, msgAudioCardInfo, 255, 0Fh
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00000FA2 BB[47300000]        <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00000FA7 B9FF000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00000FAC BA0F000000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00000FB1 B823000000          <1>  mov eax, %1
   103                              <1> 
   104 00000FB6 CD40                <1>  int 40h
  2768 00000FB8 C3                      	retn
  2769                                  
  2770                                  ; --------------------------------------------------------
  2771                                  
  2772                                  write_ac97_pci_dev_info:
  2773                                  	; 19/11/2024
  2774                                  	; 30/05/2024
  2775                                  	; 06/06/2017
  2776                                  	; 03/06/2017
  2777                                  	; BUS/DEV/FN
  2778                                  	;	00000000BBBBBBBBDDDDDFFF00000000
  2779                                  	; DEV/VENDOR
  2780                                  	;	DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV
  2781                                  
  2782 00000FB9 A1[84850000]            	mov	eax, [dev_vendor]
  2783 00000FBE 31DB                    	xor	ebx, ebx
  2784 00000FC0 88C3                    	mov	bl, al
  2785 00000FC2 88DA                    	mov	dl, bl
  2786 00000FC4 80E30F                  	and	bl, 0Fh
  2787 00000FC7 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2788 00000FCD A2[B5310000]            	mov	[msgVendorId+3], al
  2789 00000FD2 88D3                    	mov	bl, dl
  2790 00000FD4 C0EB04                  	shr	bl, 4
  2791 00000FD7 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2792 00000FDD A2[B4310000]            	mov	[msgVendorId+2], al
  2793 00000FE2 88E3                    	mov	bl, ah
  2794 00000FE4 88DA                    	mov	dl, bl
  2795 00000FE6 80E30F                  	and	bl, 0Fh
  2796 00000FE9 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2797 00000FEF A2[B3310000]            	mov	[msgVendorId+1], al
  2798 00000FF4 88D3                    	mov	bl, dl
  2799 00000FF6 C0EB04                  	shr	bl, 4
  2800 00000FF9 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2801 00000FFF A2[B2310000]            	mov	[msgVendorId], al
  2802 00001004 C1E810                  	shr	eax, 16
  2803 00001007 88C3                    	mov	bl, al
  2804 00001009 88DA                    	mov	dl, bl
  2805 0000100B 80E30F                  	and	bl, 0Fh
  2806 0000100E 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2807 00001014 A2[C6310000]            	mov	[msgDevId+3], al
  2808 00001019 88D3                    	mov	bl, dl
  2809 0000101B C0EB04                  	shr	bl, 4
  2810 0000101E 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2811 00001024 A2[C5310000]            	mov	[msgDevId+2], al
  2812 00001029 88E3                    	mov	bl, ah
  2813 0000102B 88DA                    	mov	dl, bl
  2814 0000102D 80E30F                  	and	bl, 0Fh
  2815 00001030 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2816 00001036 A2[C4310000]            	mov	[msgDevId+1], al
  2817 0000103B 88D3                    	mov	bl, dl
  2818 0000103D C0EB04                  	shr	bl, 4
  2819 00001040 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2820 00001046 A2[C3310000]            	mov	[msgDevId], al
  2821                                  
  2822 0000104B A1[80850000]            	mov	eax, [bus_dev_fn]
  2823 00001050 C1E808                  	shr	eax, 8
  2824 00001053 88C3                    	mov	bl, al
  2825 00001055 88DA                    	mov	dl, bl
  2826 00001057 80E307                  	and	bl, 7 ; bit 0,1,2
  2827 0000105A 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2828 00001060 A2[EB310000]            	mov	[msgFncNo+1], al
  2829 00001065 88D3                    	mov	bl, dl
  2830 00001067 C0EB03                  	shr	bl, 3
  2831 0000106A 88DA                    	mov	dl, bl
  2832 0000106C 80E30F                  	and	bl, 0Fh
  2833 0000106F 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2834 00001075 A2[DD310000]            	mov	[msgDevNo+1], al
  2835 0000107A 88D3                    	mov	bl, dl
  2836 0000107C C0EB04                  	shr	bl, 4
  2837 0000107F 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2838 00001085 A2[DC310000]            	mov	[msgDevNo], al
  2839 0000108A 88E3                    	mov	bl, ah
  2840 0000108C 88DA                    	mov	dl, bl
  2841 0000108E 80E30F                  	and	bl, 0Fh
  2842 00001091 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2843 00001097 A2[D1310000]            	mov	[msgBusNo+1], al
  2844 0000109C 88D3                    	mov	bl, dl
  2845 0000109E C0EB04                  	shr	bl, 4
  2846 000010A1 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2847 000010A7 A2[D0310000]            	mov	[msgBusNo], al
  2848                                  
  2849                                  	;mov	ax, [ac97_NamBar]
  2850 000010AC 66A1[88850000]          	mov	ax, [NAMBAR]
  2851 000010B2 88C3                    	mov	bl, al
  2852 000010B4 88DA                    	mov	dl, bl
  2853 000010B6 80E30F                  	and	bl, 0Fh
  2854 000010B9 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2855 000010BF A2[FB310000]            	mov	[msgNamBar+3], al
  2856 000010C4 88D3                    	mov	bl, dl
  2857 000010C6 C0EB04                  	shr	bl, 4
  2858 000010C9 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2859 000010CF A2[FA310000]            	mov	[msgNamBar+2], al
  2860 000010D4 88E3                    	mov	bl, ah
  2861 000010D6 88DA                    	mov	dl, bl
  2862 000010D8 80E30F                  	and	bl, 0Fh
  2863 000010DB 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2864 000010E1 A2[F9310000]            	mov	[msgNamBar+1], al
  2865 000010E6 88D3                    	mov	bl, dl
  2866 000010E8 C0EB04                  	shr	bl, 4
  2867 000010EB 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2868 000010F1 A2[F8310000]            	mov	[msgNamBar], al
  2869                                  
  2870                                  	;mov	ax, [ac97_NabmBar]
  2871 000010F6 66A1[8A850000]          	mov	ax, [NABMBAR]
  2872 000010FC 88C3                    	mov	bl, al
  2873 000010FE 88DA                    	mov	dl, bl
  2874 00001100 80E30F                  	and	bl, 0Fh
  2875 00001103 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2876 00001109 A2[0B320000]            	mov	[msgNabmBar+3], al
  2877 0000110E 88D3                    	mov	bl, dl
  2878 00001110 C0EB04                  	shr	bl, 4
  2879 00001113 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2880 00001119 A2[0A320000]            	mov	[msgNabmBar+2], al
  2881 0000111E 88E3                    	mov	bl, ah
  2882 00001120 88DA                    	mov	dl, bl
  2883 00001122 80E30F                  	and	bl, 0Fh
  2884 00001125 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2885 0000112B A2[09320000]            	mov	[msgNabmBar+1], al
  2886 00001130 88D3                    	mov	bl, dl
  2887 00001132 C0EB04                  	shr	bl, 4
  2888 00001135 8A83[6E310000]          	mov	al, [hex_chars+ebx]
  2889 0000113B A2[08320000]            	mov	[msgNabmBar], al
  2890                                  
  2891 00001140 31C0                    	xor	eax, eax
  2892 00001142 A0[1B850000]            	mov	al, [ac97_int_ln_reg]
  2893 00001147 B10A                    	mov	cl, 10
  2894 00001149 F6F1                    	div	cl
  2895                                  	; 23/11/2024
  2896                                  	;add	[msgIRQ], ax
  2897 0000114B 66053030                	add	ax, 3030h
  2898 0000114F 66A3[14320000]          	mov	[msgIRQ], ax
  2899                                  	;and	al, al
  2900 00001155 3C30                    	cmp	al, 30h
  2901 00001157 750D                    	jnz	short _w_ac97imsg_
  2902 00001159 A0[15320000]            	mov	al, byte [msgIRQ+1]
  2903 0000115E B420                    	mov	ah, ' '
  2904 00001160 66A3[14320000]          	mov	[msgIRQ], ax
  2905                                  _w_ac97imsg_:
  2906                                  	; 19/11/2024
  2907 00001166 E8DA1C0000              	call 	clear_window
  2908 0000116B B60D                    	mov	dh, 13
  2909 0000116D B200                    	mov	dl, 0
  2910 0000116F E8EC190000              	call	setCursorPosition
  2911                                  	;;;
  2912                                  	; 21/12/2024
  2913 00001174 BD[7F310000]            	mov	ebp, msgAC97Info ; message
  2914                                  	; 22/12/2024
  2915                                  	;mov	cl, 07h ; color 
  2916 00001179 E81F000000              	call	sys_gmsg
  2917                                  	;
  2918                                  	; 30/05/2024
  2919                                  write_VRA_info:
  2920                                  	; 21/12/2024
  2921 0000117E BD[19320000]            	mov	ebp, msgVRAheader ; message
  2922                                  	;mov	cl, 07h ; color 
  2923 00001183 E815000000              	call	sys_gmsg
  2924                                  	;
  2925 00001188 803D[E5840000]00        	cmp	byte [VRA], 0
  2926 0000118F 7607                    	jna	short _w_VRAi_no
  2927                                  _w_VRAi_yes:
  2928 00001191 BD[28320000]            	mov	ebp, msgVRAyes
  2929 00001196 EB05                    	jmp	short _w_VRAi_yn_msg
  2930                                  _w_VRAi_no:
  2931 00001198 BD[2E320000]            	mov	ebp, msgVRAno
  2932                                  _w_VRAi_yn_msg:
  2933                                  	;mov	cl, 07h ; color 
  2934                                  	;call	sys_msg
  2935                                  	;retn
  2936                                  	;jmp	short sys_gmsg
  2937                                  	;;;
  2938                                  ; --------------------------------------------------------
  2939                                  
  2940                                  	; 22/12/2024
  2941                                  	;;;
  2942                                  	; 21/12/2024
  2943                                  	; (write message in VGA/VESA-VBE mode)
  2944                                  sys_gmsg:
  2945 0000119D 8A4500                  	mov	al, [ebp]
  2946 000011A0 20C0                    	and	al, al
  2947 000011A2 7458                    	jz	short sys_gmsg_ok
  2948 000011A4 3C20                    	cmp	al, 20h
  2949 000011A6 731E                    	jnb	short sys_gmsg_3
  2950 000011A8 3C0D                    	cmp	al, CR ; 13
  2951 000011AA 750C                    	jne	short sys_gmsg_2
  2952                                  	; carriege return, move cursor to column 0
  2953 000011AC 66C705[C47A0000]00-     	mov	word [screenpos], 0
  2953 000011B4 00                 
  2954                                  sys_gmsg_1:
  2955 000011B5 45                      	inc	ebp
  2956 000011B6 EBE5                    	jmp	short sys_gmsg
  2957                                  sys_gmsg_2:
  2958 000011B8 3C0A                    	cmp	al, LF ; 10
  2959 000011BA 7540                    	jne	short sys_gmsg_ok ; 22/12/2024
  2960                                  	; line feed, move cursor to next row
  2961 000011BC 668305[C67A0000]10      	add	word [screenpos+2], 16
  2962 000011C4 EBEF                    	jmp	short sys_gmsg_1
  2963                                  sys_gmsg_3:
  2964 000011C6 8B35[C47A0000]          	mov	esi, [screenpos]
  2965                                  		; hw = (cursor) row
  2966                                  		; si = (cursor) column
  2967 000011CC B907000000              	mov	ecx, 07h ; gray (light)
  2968 000011D1 E8431B0000              	call	write_character
  2969 000011D6 83C608                  	add	esi, 8
  2970                                  	;;;
  2971 000011D9 6681FE8002              	cmp	si, 640
  2972 000011DE 7213                    	jb	short sys_gmsg_5
  2973 000011E0 C1EE10                  	shr	esi, 16
  2974 000011E3 6683C610                	add	si, 16
  2975 000011E7 6681FEE001              	cmp	si, 480
  2976 000011EC 7202                    	jb	short sys_gmsg_4
  2977 000011EE 31F6                    	xor	esi, esi
  2978                                  sys_gmsg_4:
  2979 000011F0 C1E610                  	shl	esi, 16
  2980                                  	;;;
  2981                                  sys_gmsg_5:
  2982 000011F3 8935[C47A0000]          	mov	[screenpos], esi
  2983 000011F9 45                      	inc	ebp
  2984 000011FA EBA1                    	jmp	short sys_gmsg
  2985                                  sys_gmsg_ok:
  2986 000011FC C3                      	retn
  2987                                  	;;;
  2988                                  
  2989                                  ; --------------------------------------------------------
  2990                                  
  2991                                  ; 29/12/2024 - vgaplay3.s
  2992                                  ; 18/12/2024
  2993                                  ; 01/12/2024 - ac97play.s
  2994                                  ; 29/05/2024
  2995                                  ; 26/11/2023
  2996                                  ; 25/11/2023 - playwav6.s (32 bit registers, TRDOS 386 adaption)
  2997                                  ; 15/11/2023 - PLAYWAV5.COM, ich_wav5.asm
  2998                                  ; 14/11/2023
  2999                                  ; 13/11/2023 - Erdogan Tan - (VRA, sample rate conversion)
  3000                                  ; --------------------------------------------------------
  3001                                  
  3002                                  ;;Note:	At the end of every buffer load,
  3003                                  ;;	during buffer switch/swap, there will be discontinuity
  3004                                  ;;	between the last converted sample and the 1st sample
  3005                                  ;;	of the next buffer.
  3006                                  ;;	(like as a dot noises vaguely between normal sound samples)
  3007                                  ;;	-To avoid this defect, the 1st sample of
  3008                                  ;;	the next buffer may be read from the wav file but
  3009                                  ;;	the file pointer would need to be set to 1 sample back
  3010                                  ;;	again via seek system call. Time comsumption problem! -
  3011                                  ;;
  3012                                  ;;	Erdogan Tan - 15/11/2023
  3013                                  ;;
  3014                                  ;;	((If entire wav data would be loaded at once.. conversion
  3015                                  ;;	defect/noise would disappear.. but for DOS, to keep
  3016                                  ;;	64KB buffer limit is important also it is important
  3017                                  ;;	for running under 1MB barrier without HIMEM.SYS or DPMI.
  3018                                  ;;	I have tested this program by using 2-30MB wav files.))
  3019                                  ;;
  3020                                  ;;	Test Computer:	ASUS desktop/mainboard, M2N4-SLI, 2010.
  3021                                  ;;			AMD Athlon 64 X2 2200 MHZ CPU.
  3022                                  ;;		       	NFORCE4 (CK804) AC97 audio hardware.
  3023                                  ;;			Realtek ALC850 codec.
  3024                                  ;;		       	Retro DOS v4.2 (MSDOS 6.22) operating system.
  3025                                  
  3026                                  load_8khz_mono_8_bit:
  3027                                  	; 15/11/2023
  3028                                  	; 14/11/2023
  3029                                  	; 13/11/2023
  3030 000011FD F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3031                                  					; last of the file?
  3032 00001204 7402                    	jz	short lff8m_0		; no
  3033 00001206 F9                      	stc
  3034 00001207 C3                      	retn
  3035                                  
  3036                                  lff8m_0:
  3037                                  	; 01/12/2024
  3038                                  	; edi = audio buffer address
  3039                                  	; 13/12/2024
  3040 00001208 893D[D07A0000]          	mov	[audio_buffer], edi
  3041 0000120E BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3042                                          ;mov	edx, [loadsize]
  3043                                  
  3044                                  	; esi = buffer address
  3045                                  	;; edx = buffer size
  3046                                  
  3047                                  	; load file into memory
  3048                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001213 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001219 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 0000121B 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001221 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001226 CD40                <1>  int 40h
  3049 00001228 7305                    	jnc	short lff8m_6
  3050 0000122A E9B3000000              	jmp	lff8m_5  ; error !
  3051                                  
  3052                                  lff8m_6:
  3053                                  	; 01/12/2024
  3054 0000122F A3[A0850000]            	mov	[count], eax
  3055                                  	;mov	edi, audio_buffer
  3056                                  	; 29/05/2024
  3057 00001234 8B3D[D07A0000]          	mov	edi, [audio_buffer]
  3058                                  	;and	eax, eax
  3059 0000123A 0F8499000000            	jz	lff8_eof
  3060                                  
  3061 00001240 89C1                    	mov	ecx, eax		; byte count
  3062                                  lff8m_1:
  3063 00001242 AC                      	lodsb
  3064 00001243 A2[F2280000]            	mov	[previous_val], al
  3065 00001248 2C80                    	sub	al, 80h
  3066 0000124A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3067 0000124E 66AB                    	stosw		; original sample (left channel)
  3068 00001250 66AB                    	stosw		; original sample (right channel)
  3069                                  	;xor	eax, eax
  3070 00001252 B080                    	mov	al, 80h
  3071 00001254 49                      	dec	ecx
  3072 00001255 7402                    	jz	short lff8m_2
  3073 00001257 8A06                    	mov	al, [esi]
  3074                                  lff8m_2:
  3075                                  	;mov	[next_val], ax
  3076 00001259 88C7                    	mov	bh, al	; [next_val]
  3077 0000125B 8A25[F2280000]          	mov	ah, [previous_val]
  3078 00001261 00E0                    	add	al, ah	; [previous_val]
  3079 00001263 D0D8                    	rcr	al, 1
  3080 00001265 88C2                    	mov	dl, al	; this is interpolated middle (3th) sample
  3081 00001267 00E0                    	add	al, ah	; [previous_val]
  3082 00001269 D0D8                    	rcr	al, 1	
  3083 0000126B 88C3                    	mov	bl, al 	; this is temporary interpolation value
  3084 0000126D 00E0                    	add	al, ah	; [previous_val]
  3085 0000126F D0D8                    	rcr	al, 1
  3086 00001271 2C80                    	sub	al, 80h
  3087 00001273 66C1E008                	shl	ax, 8	
  3088 00001277 66AB                    	stosw		; this is 1st interpolated sample (L)
  3089 00001279 66AB                    	stosw		; this is 1st interpolated sample (R)
  3090 0000127B 88D8                    	mov	al, bl
  3091 0000127D 00D0                    	add	al, dl
  3092 0000127F D0D8                    	rcr	al, 1
  3093 00001281 2C80                    	sub	al, 80h
  3094 00001283 66C1E008                	shl	ax, 8
  3095 00001287 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3096 00001289 66AB                    	stosw		; this is 2nd interpolated sample (R)
  3097 0000128B 88D0                    	mov	al, dl
  3098 0000128D 2C80                    	sub	al, 80h
  3099 0000128F 66C1E008                	shl	ax, 8
  3100 00001293 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  3101 00001295 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  3102                                  	;mov	al, [next_val]
  3103 00001297 88F8                    	mov	al, bh
  3104 00001299 00D0                    	add	al, dl
  3105 0000129B D0D8                    	rcr	al, 1
  3106 0000129D 88C3                    	mov	bl, al	; this is temporary interpolation value
  3107 0000129F 00D0                    	add	al, dl
  3108 000012A1 D0D8                    	rcr	al, 1
  3109 000012A3 2C80                    	sub	al, 80h
  3110 000012A5 66C1E008                	shl	ax, 8
  3111 000012A9 66AB                    	stosw		; this is 4th interpolated sample (L)
  3112 000012AB 66AB                    	stosw		; this is 4th interpolated sample (R)
  3113                                  	;mov	al, [next_val]
  3114 000012AD 88F8                    	mov	al, bh
  3115 000012AF 00D8                    	add	al, bl
  3116 000012B1 D0D8                    	rcr	al, 1
  3117 000012B3 2C80                    	sub	al, 80h
  3118 000012B5 66C1E008                	shl	ax, 8
  3119 000012B9 66AB                    	stosw		; this is 5th interpolated sample (L)
  3120 000012BB 66AB                    	stosw		; this is 5th interpolated sample (R)
  3121                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3122 000012BD 09C9                    	or	ecx, ecx
  3123 000012BF 7581                    	jnz	short lff8m_1
  3124                                  
  3125                                  	; --------------
  3126                                  
  3127                                  lff8s_3:
  3128                                  lff8m_3:
  3129                                  lff8s2_3:
  3130                                  lff8m2_3:
  3131                                  lff16s_3:
  3132                                  lff16m_3:
  3133                                  lff16s2_3:
  3134                                  lff16m2_3:
  3135                                  lff24_3:
  3136                                  lff32_3:
  3137                                  lff44_3:
  3138                                  lff22_3:
  3139                                  lff11_3:
  3140                                  	; 08/12/2024 (BugFix)
  3141                                  	; 31/05/2024
  3142 000012C1 8B0D[94850000]          	mov	ecx, [buffersize] ; buffer size in words
  3143                                  	; 29/12/2024
  3144                                  	; 08/12/2024
  3145                                  	;shl	ecx, 1 ; buffer size in bytes
  3146                                  	; 13/12/2024
  3147 000012C7 030D[D07A0000]          	add	ecx, [audio_buffer] ; + start address of the buffer
  3148 000012CD 29F9                    	sub	ecx, edi
  3149 000012CF 7607                    	jna	short lff8m_4
  3150                                  	;inc	ecx
  3151 000012D1 C1E902                  	shr	ecx, 2
  3152 000012D4 31C0                    	xor	eax, eax ; fill (remain part of) buffer with zeros
  3153 000012D6 F3AB                    	rep	stosd
  3154                                  lff8m_4:
  3155                                  	; 31/05/2024
  3156                                  	; cf=1
  3157                                  	; 08/12/2024
  3158                                  	;clc
  3159 000012D8 C3                      	retn
  3160                                  
  3161                                  lff8_eof:
  3162                                  lff16_eof:
  3163                                  lff24_eof:
  3164                                  lff32_eof:
  3165                                  lff44_eof:
  3166                                  lff22_eof:
  3167                                  lff11_eof:
  3168                                  	; 15/11/2023
  3169 000012D9 C605[1A850000]01        	mov	byte [flags], ENDOFFILE
  3170 000012E0 EBDF                    	jmp	short lff8m_3
  3171                                  
  3172                                  lff8s_5:
  3173                                  lff8m_5:
  3174                                  lff8s2_5:
  3175                                  lff8m2_5:
  3176                                  lff16s_5:
  3177                                  lff16m_5:
  3178                                  lff16s2_5:
  3179                                  lff16m2_5:
  3180                                  lff24_5:
  3181                                  lff32_5:
  3182                                  lff44_5:
  3183                                  lff22_5:
  3184                                  lff11_5:
  3185 000012E2 B021                    	mov	al, '!'  ; error
  3186 000012E4 E832F6FFFF              	call	tL0
  3187                                  	
  3188                                  	;jmp	short lff8m_3
  3189                                  	; 15/11/2023
  3190 000012E9 EBEE                    	jmp	lff8_eof
  3191                                  
  3192                                  	; --------------
  3193                                  
  3194                                  load_8khz_stereo_8_bit:
  3195                                  	; 15/11/2023
  3196                                  	; 14/11/2023
  3197                                  	; 13/11/2023
  3198 000012EB F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3199                                  					; last of the file?
  3200 000012F2 7402                    	jz	short lff8s_0		; no
  3201 000012F4 F9                      	stc
  3202 000012F5 C3                      	retn
  3203                                  
  3204                                  lff8s_0:
  3205                                  	; 01/12/2024
  3206                                  	; edi = audio buffer address
  3207                                  	; 13/12/2024
  3208 000012F6 893D[D07A0000]          	mov	[audio_buffer], edi
  3209 000012FC BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3210                                          ;mov	edx, [loadsize]
  3211                                  
  3212                                  	; esi = buffer address
  3213                                  	;; edx = buffer size
  3214                                  
  3215                                  	; load file into memory
  3216                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001301 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001307 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001309 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000130F B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001314 CD40                <1>  int 40h
  3217 00001316 72CA                    	jc	short lff8s_5 ; error !
  3218                                  
  3219                                  	; 01/12/2024
  3220 00001318 A3[A0850000]            	mov	[count], eax
  3221                                  
  3222                                  	;mov	edi, audio_buffer
  3223                                  	; 29/05/2024
  3224                                  	;mov	edi, [audio_buffer]
  3225                                  	
  3226 0000131D D1E8                    	shr	eax, 1
  3227 0000131F 74B8                    	jz	short lff8_eof
  3228                                  
  3229 00001321 89C1                    	mov	ecx, eax	; word count
  3230                                  lff8s_1:
  3231 00001323 AC                      	lodsb
  3232 00001324 A2[F2280000]            	mov	[previous_val_l], al
  3233 00001329 2C80                    	sub	al, 80h
  3234 0000132B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3235 0000132F 66AB                    	stosw		; original sample (L)
  3236 00001331 AC                      	lodsb
  3237 00001332 A2[F4280000]            	mov	[previous_val_r], al
  3238 00001337 2C80                    	sub	al, 80h
  3239 00001339 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3240 0000133D 66AB                    	stosw		; original sample (R)
  3241                                  
  3242                                  	;xor	eax, eax
  3243 0000133F 66B88080                	mov	ax, 8080h
  3244 00001343 49                      	dec	ecx
  3245 00001344 7403                    	jz	short lff8s_2
  3246                                  		; convert 8 bit sample to 16 bit sample
  3247 00001346 668B06                  	mov	ax, [esi]
  3248                                  lff8s_2:
  3249 00001349 A2[F6280000]            	mov	[next_val_l], al
  3250 0000134E 8825[F8280000]          	mov	[next_val_r], ah
  3251 00001354 8A25[F2280000]          	mov	ah, [previous_val_l]
  3252 0000135A 00E0                    	add	al, ah
  3253 0000135C D0D8                    	rcr	al, 1
  3254 0000135E 88C2                    	mov	dl, al	; this is interpolated middle (3th) sample (L)
  3255 00001360 00E0                    	add	al, ah
  3256 00001362 D0D8                    	rcr	al, 1
  3257 00001364 88C3                    	mov	bl, al	; this is temporary interpolation value (L)
  3258 00001366 00E0                    	add	al, ah
  3259 00001368 D0D8                    	rcr	al, 1
  3260 0000136A 2C80                    	sub	al, 80h
  3261 0000136C 66C1E008                	shl	ax, 8
  3262 00001370 66AB                    	stosw		; this is 1st interpolated sample (L)
  3263 00001372 A0[F8280000]            	mov	al, [next_val_r]
  3264 00001377 8A25[F4280000]          	mov	ah, [previous_val_r]
  3265 0000137D 00E0                    	add	al, ah
  3266 0000137F D0D8                    	rcr	al, 1
  3267 00001381 88C6                    	mov	dh, al	; this is interpolated middle (3th) sample (R)
  3268 00001383 00E0                    	add	al, ah
  3269 00001385 D0D8                    	rcr	al, 1
  3270 00001387 88C7                    	mov	bh, al	; this is temporary interpolation value (R)
  3271 00001389 00E0                    	add	al, ah
  3272 0000138B D0D8                    	rcr	al, 1
  3273 0000138D 2C80                    	sub	al, 80h
  3274 0000138F 66C1E008                	shl	ax, 8
  3275 00001393 66AB                    	stosw		; this is 1st interpolated sample (R)
  3276 00001395 88D8                    	mov	al, bl
  3277 00001397 00D0                    	add	al, dl
  3278 00001399 D0D8                    	rcr	al, 1
  3279 0000139B 2C80                    	sub	al, 80h
  3280 0000139D 66C1E008                	shl	ax, 8
  3281 000013A1 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3282 000013A3 88F8                    	mov	al, bh
  3283 000013A5 00F0                    	add	al, dh
  3284 000013A7 D0D8                    	rcr	al, 1
  3285 000013A9 2C80                    	sub	al, 80h
  3286 000013AB 66C1E008                	shl	ax, 8
  3287 000013AF 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  3288 000013B1 88D0                    	mov	al, dl
  3289 000013B3 2C80                    	sub	al, 80h
  3290 000013B5 66C1E008                	shl	ax, 8
  3291 000013B9 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  3292 000013BB 88F0                    	mov	al, dh
  3293 000013BD 2C80                    	sub	al, 80h
  3294 000013BF 66C1E008                	shl	ax, 8
  3295 000013C3 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  3296 000013C5 A0[F6280000]            	mov	al, [next_val_l]
  3297 000013CA 00D0                    	add	al, dl
  3298 000013CC D0D8                    	rcr	al, 1
  3299 000013CE 88C3                    	mov	bl, al	; this is temporary interpolation value (L)
  3300 000013D0 00D0                    	add	al, dl
  3301 000013D2 D0D8                    	rcr	al, 1
  3302 000013D4 2C80                    	sub	al, 80h
  3303 000013D6 66C1E008                	shl	ax, 8
  3304 000013DA 66AB                    	stosw		; this is 4th interpolated sample (L)
  3305 000013DC A0[F8280000]            	mov	al, [next_val_r]
  3306 000013E1 00F0                    	add	al, dh
  3307 000013E3 D0D8                    	rcr	al, 1
  3308 000013E5 88C7                    	mov	bh, al	; this is temporary interpolation value (R)
  3309 000013E7 00F0                    	add	al, dh
  3310 000013E9 D0D8                    	rcr	al, 1
  3311 000013EB 2C80                    	sub	al, 80h
  3312 000013ED 66C1E008                	shl	ax, 8
  3313 000013F1 66AB                    	stosw		; this is 4th interpolated sample (R)
  3314 000013F3 A0[F6280000]            	mov	al, [next_val_l]
  3315 000013F8 00D8                    	add	al, bl
  3316 000013FA D0D8                    	rcr	al, 1
  3317 000013FC 2C80                    	sub	al, 80h
  3318 000013FE 66C1E008                	shl	ax, 8
  3319 00001402 66AB                    	stosw		; this is 5th interpolated sample (L)
  3320 00001404 A0[F8280000]            	mov	al, [next_val_r]
  3321 00001409 00F8                    	add	al, bh
  3322 0000140B D0D8                    	rcr	al, 1
  3323 0000140D 2C80                    	sub	al, 80h
  3324 0000140F 66C1E008                	shl	ax, 8
  3325 00001413 66AB                    	stosw		; this is 5th interpolated sample (R)
  3326                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3327 00001415 E305                    	jecxz	lff8s_6
  3328 00001417 E907FFFFFF              	jmp	lff8s_1
  3329                                  lff8s_6:
  3330 0000141C E9A0FEFFFF              	jmp	lff8s_3
  3331                                  
  3332                                  load_8khz_mono_16_bit:
  3333                                  	; 13/11/2023
  3334 00001421 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3335                                  					; last of the file?
  3336 00001428 7402                    	jz	short lff8m2_0		; no
  3337 0000142A F9                      	stc
  3338 0000142B C3                      	retn
  3339                                  
  3340                                  lff8m2_0:
  3341                                  	; 01/12/2024
  3342                                  	; edi = audio buffer address
  3343                                  	; 13/12/2024
  3344 0000142C 893D[D07A0000]          	mov	[audio_buffer], edi
  3345 00001432 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3346                                          ;mov	edx, [loadsize]
  3347                                  
  3348                                  	; esi = buffer address
  3349                                  	;; edx = buffer size
  3350                                  
  3351                                  	; load file into memory
  3352                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001437 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 0000143D 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 0000143F 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001445 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 0000144A CD40                <1>  int 40h
  3353 0000144C 0F82A0000000            	jc	lff8m2_7 ; error !
  3354                                  
  3355                                  	; 01/12/2024
  3356 00001452 A3[A0850000]            	mov	[count], eax
  3357                                  
  3358                                  	;mov	edi, audio_buffer
  3359                                  	; 29/05/2024
  3360                                  	;mov	edi, [audio_buffer]
  3361                                  	
  3362 00001457 D1E8                    	shr	eax, 1
  3363 00001459 7505                    	jnz	short lff8m2_8
  3364 0000145B E979FEFFFF              	jmp	lff8_eof
  3365                                  
  3366                                  lff8m2_8:
  3367 00001460 89C1                    	mov	ecx, eax	; word count
  3368                                  lff8m2_1:
  3369 00001462 66AD                    	lodsw
  3370 00001464 66AB                    	stosw		; original sample (left channel)
  3371 00001466 66AB                    	stosw		; original sample (right channel)
  3372 00001468 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  3373 0000146B 66A3[F2280000]          	mov	[previous_val], ax
  3374 00001471 31C0                    	xor	eax, eax
  3375 00001473 49                      	dec	ecx
  3376 00001474 7403                    	jz	short lff8m2_2
  3377 00001476 668B06                  	mov	ax, [esi]
  3378                                  lff8m2_2:
  3379 00001479 80C480                  	add	ah, 80h ; convert sound level to 0-65535 format
  3380 0000147C 89C5                    	mov	ebp, eax	; [next_val]
  3381 0000147E 660305[F2280000]        	add	ax, [previous_val]
  3382 00001485 66D1D8                  	rcr	ax, 1
  3383 00001488 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample
  3384 0000148A 660305[F2280000]        	add	ax, [previous_val]
  3385 00001491 66D1D8                  	rcr	ax, 1	; this is temporary interpolation value
  3386 00001494 89C3                    	mov	ebx, eax 		
  3387 00001496 660305[F2280000]        	add	ax, [previous_val]
  3388 0000149D 66D1D8                  	rcr	ax, 1
  3389 000014A0 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3390 000014A3 66AB                    	stosw		; this is 1st interpolated sample (L)
  3391 000014A5 66AB                    	stosw		; this is 1st interpolated sample (R)
  3392 000014A7 89D8                    	mov	eax, ebx
  3393 000014A9 6601D0                  	add	ax, dx
  3394 000014AC 66D1D8                  	rcr	ax, 1
  3395 000014AF 80EC80                  	sub	ah, 80h
  3396 000014B2 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3397 000014B4 66AB                    	stosw		; this is 2nd interpolated sample (R)
  3398 000014B6 89D0                    	mov	eax, edx
  3399 000014B8 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3400 000014BB 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  3401 000014BD 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  3402 000014BF 89E8                    	mov	eax, ebp
  3403 000014C1 6601D0                  	add	ax, dx
  3404 000014C4 66D1D8                  	rcr	ax, 1
  3405 000014C7 89C3                    	mov	ebx, eax ; this is temporary interpolation value
  3406 000014C9 6601D0                  	add	ax, dx
  3407 000014CC 66D1D8                  	rcr	ax, 1
  3408 000014CF 80EC80                  	sub	ah, 80h
  3409 000014D2 66AB                    	stosw		; this is 4th interpolated sample (L)
  3410 000014D4 66AB                    	stosw		; this is 4th interpolated sample (R)
  3411 000014D6 89E8                    	mov	eax, ebp
  3412 000014D8 6601D8                  	add	ax, bx
  3413 000014DB 66D1D8                  	rcr	ax, 1
  3414 000014DE 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3415 000014E1 66AB                    	stosw		; this is 5th interpolated sample (L)
  3416 000014E3 66AB                    	stosw		; this is 5th interpolated sample (R)
  3417                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3418 000014E5 09C9                    	or	ecx, ecx
  3419 000014E7 0F8575FFFFFF            	jnz	lff8m2_1
  3420 000014ED E9CFFDFFFF              	jmp	lff8m2_3
  3421                                  
  3422                                  lff8m2_7:
  3423                                  lff8s2_7:
  3424 000014F2 E9EBFDFFFF              	jmp	lff8m2_5  ; error
  3425                                  
  3426                                  load_8khz_stereo_16_bit:
  3427                                  	; 16/11/2023
  3428                                  	; 15/11/2023
  3429                                  	; 13/11/2023
  3430 000014F7 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3431                                  					; last of the file?
  3432 000014FE 7402                    	jz	short lff8s2_0		; no
  3433 00001500 F9                      	stc
  3434 00001501 C3                      	retn
  3435                                  
  3436                                  lff8s2_0:
  3437                                  	; 01/12/2024
  3438                                  	; edi = audio buffer address
  3439                                  	; 13/12/2024
  3440 00001502 893D[D07A0000]          	mov	[audio_buffer], edi
  3441 00001508 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3442                                          ;mov	edx, [loadsize]
  3443                                  
  3444                                  	; esi = buffer address
  3445                                  	;; edx = buffer size
  3446                                  
  3447                                  	; load file into memory
  3448                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000150D 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001513 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001515 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000151B B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001520 CD40                <1>  int 40h
  3449 00001522 72CE                    	jc	short lff8s2_7 ; error !
  3450                                  
  3451                                  	; 01/12/2024
  3452 00001524 A3[A0850000]            	mov	[count], eax
  3453                                  
  3454                                  	;mov	edi, audio_buffer
  3455                                  	; 29/05/2024
  3456                                  	;mov	edi, [audio_buffer]
  3457                                  	
  3458 00001529 C1E802                  	shr	eax, 2
  3459 0000152C 7505                    	jnz	short lff8s2_8
  3460 0000152E E9A6FDFFFF              	jmp	lff8_eof
  3461                                  
  3462                                  lff8s2_8:
  3463 00001533 89C1                    	mov	ecx, eax ; dword count
  3464                                  lff8s2_1:
  3465 00001535 66AD                    	lodsw
  3466 00001537 66AB                    	stosw		; original sample (L)
  3467                                  	; 15/11/2023
  3468 00001539 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  3469 0000153C 66A3[F2280000]          	mov	[previous_val_l], ax
  3470 00001542 66AD                    	lodsw
  3471 00001544 66AB                    	stosw		; original sample (R)
  3472 00001546 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  3473 00001549 66A3[F4280000]          	mov	[previous_val_r], ax
  3474 0000154F 31D2                    	xor	edx, edx
  3475 00001551 31C0                    	xor	eax, eax
  3476                                  	; 16/11/2023
  3477 00001553 49                      	dec	ecx
  3478 00001554 7407                    	jz	short lff8s2_2
  3479 00001556 668B06                  	mov	ax, [esi]
  3480 00001559 668B5602                	mov	dx, [esi+2]
  3481                                  lff8s2_2:
  3482 0000155D 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  3483 00001560 66A3[F6280000]          	mov	[next_val_l], ax
  3484 00001566 80C680                  	add	dh, 80h	; convert sound level to 0-65535 format
  3485 00001569 668915[F8280000]        	mov	[next_val_r], dx
  3486 00001570 660305[F2280000]        	add	ax, [previous_val_l]
  3487 00001577 66D1D8                  	rcr	ax, 1
  3488 0000157A 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample (L)
  3489 0000157C 660305[F2280000]        	add	ax, [previous_val_l]
  3490 00001583 66D1D8                  	rcr	ax, 1	
  3491 00001586 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
  3492 00001588 660305[F2280000]        	add	ax, [previous_val_l]
  3493 0000158F 66D1D8                  	rcr	ax, 1
  3494 00001592 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3495 00001595 66AB                    	stosw		; this is 1st interpolated sample (L)
  3496 00001597 66A1[F8280000]          	mov	ax, [next_val_r]
  3497 0000159D 660305[F4280000]        	add	ax, [previous_val_r]
  3498 000015A4 66D1D8                  	rcr	ax, 1
  3499 000015A7 89C5                    	mov	ebp, eax ; this is interpolated middle (3th) sample (R)
  3500 000015A9 660305[F4280000]        	add	ax, [previous_val_r]
  3501 000015B0 66D1D8                  	rcr	ax, 1
  3502 000015B3 50                      	push	eax ; *	; this is temporary interpolation value (R)
  3503 000015B4 660305[F4280000]        	add	ax, [previous_val_r]
  3504 000015BB 66D1D8                  	rcr	ax, 1
  3505 000015BE 80EC80                  	sub	ah, 80h
  3506 000015C1 66AB                    	stosw		; this is 1st interpolated sample (R)
  3507 000015C3 89D8                    	mov	eax, ebx
  3508 000015C5 6601D0                  	add	ax, dx
  3509 000015C8 66D1D8                  	rcr	ax, 1
  3510 000015CB 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3511 000015CE 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3512 000015D0 58                      	pop	eax ; *
  3513 000015D1 6601E8                  	add	ax, bp
  3514 000015D4 66D1D8                  	rcr	ax, 1
  3515 000015D7 80EC80                  	sub	ah, 80h
  3516 000015DA 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  3517 000015DC 89D0                    	mov	eax, edx
  3518 000015DE 80EC80                  	sub	ah, 80h
  3519 000015E1 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  3520 000015E3 89E8                    	mov	eax, ebp
  3521 000015E5 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3522 000015E8 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  3523 000015EA 66A1[F6280000]          	mov	ax, [next_val_l]
  3524 000015F0 6601D0                  	add	ax, dx
  3525 000015F3 66D1D8                  	rcr	ax, 1
  3526 000015F6 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
  3527 000015F8 6601D0                  	add	ax, dx
  3528 000015FB 66D1D8                  	rcr	ax, 1
  3529 000015FE 80EC80                  	sub	ah, 80h
  3530 00001601 66AB                    	stosw		; this is 4th interpolated sample (L)
  3531 00001603 66A1[F8280000]          	mov	ax, [next_val_r]
  3532 00001609 6601E8                  	add	ax, bp
  3533 0000160C 66D1D8                  	rcr	ax, 1
  3534 0000160F 50                      	push	eax ; ** ; this is temporary interpolation value (R)
  3535 00001610 6601E8                  	add	ax, bp
  3536 00001613 66D1D8                  	rcr	ax, 1
  3537 00001616 80EC80                  	sub	ah, 80h
  3538 00001619 66AB                    	stosw		; this is 4th interpolated sample (R)
  3539 0000161B 66A1[F6280000]          	mov	ax, [next_val_l]
  3540 00001621 6601D8                  	add	ax, bx
  3541 00001624 66D1D8                  	rcr	ax, 1
  3542 00001627 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3543 0000162A 66AB                    	stosw		; this is 5th interpolated sample (L)
  3544 0000162C 58                      	pop	eax ; **
  3545 0000162D 660305[F8280000]        	add	ax, [next_val_r]
  3546 00001634 66D1D8                  	rcr	ax, 1
  3547 00001637 80EC80                  	sub	ah, 80h
  3548 0000163A 66AB                    	stosw		; this is 5th interpolated sample (R)
  3549                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3550 0000163C E305                    	jecxz	lff8_s2_9
  3551 0000163E E9F2FEFFFF              	jmp	lff8s2_1
  3552                                  lff8_s2_9:
  3553 00001643 E979FCFFFF              	jmp	lff8s2_3
  3554                                  
  3555                                  ; .....................
  3556                                  
  3557                                  load_16khz_mono_8_bit:
  3558                                  	; 14/11/2023
  3559                                  	; 13/11/2023
  3560 00001648 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3561                                  					; last of the file?
  3562 0000164F 7402                    	jz	short lff16m_0		; no
  3563 00001651 F9                      	stc
  3564 00001652 C3                      	retn
  3565                                  
  3566                                  lff16m_0:
  3567                                  	; 01/12/2024
  3568                                  	; edi = audio buffer address
  3569                                  	; 13/12/2024
  3570 00001653 893D[D07A0000]          	mov	[audio_buffer], edi
  3571 00001659 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3572                                          ;mov	edx, [loadsize]
  3573                                  
  3574                                  	; esi = buffer address
  3575                                  	;; edx = buffer size
  3576                                  
  3577                                  	; load file into memory
  3578                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000165E 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001664 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001666 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000166C B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001671 CD40                <1>  int 40h
  3579 00001673 7253                    	jc	short lff16m_7 ; error !
  3580                                  
  3581                                  	; 01/12/2024
  3582 00001675 A3[A0850000]            	mov	[count], eax
  3583                                  
  3584                                  	;mov	edi, audio_buffer
  3585                                  	; 29/05/2024
  3586                                  	;mov	edi, [audio_buffer]
  3587                                  	
  3588 0000167A 21C0                    	and	eax, eax
  3589 0000167C 7505                    	jnz	short lff16m_8
  3590 0000167E E956FCFFFF              	jmp	lff16_eof
  3591                                  
  3592                                  lff16m_8:
  3593 00001683 89C1                    	mov	ecx, eax		; byte count
  3594                                  lff16m_1:
  3595 00001685 AC                      	lodsb
  3596                                  	;mov	[previous_val], al
  3597 00001686 88C3                    	mov	bl, al
  3598 00001688 2C80                    	sub	al, 80h
  3599 0000168A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3600 0000168E 66AB                    	stosw		; original sample (left channel)
  3601 00001690 66AB                    	stosw		; original sample (right channel)
  3602                                  	;xor	ax, ax
  3603                                  	; 14/11/22023
  3604 00001692 B080                    	mov	al, 80h
  3605 00001694 49                      	dec	ecx
  3606 00001695 7402                    	jz	short lff16m_2
  3607 00001697 8A06                    	mov	al, [esi]
  3608                                  lff16m_2:
  3609                                  	;mov	[next_val], al
  3610 00001699 88C7                    	mov	bh, al
  3611                                  	;add	al, [previous_val]
  3612 0000169B 00D8                    	add	al, bl
  3613 0000169D D0D8                    	rcr	al, 1
  3614 0000169F 88C2                    	mov	dl, al	; this is interpolated middle (temp) sample
  3615                                  	;add	al, [previous_val]
  3616 000016A1 00D8                    	add	al, bl
  3617 000016A3 D0D8                    	rcr	al, 1
  3618 000016A5 2C80                    	sub	al, 80h
  3619 000016A7 66C1E008                	shl	ax, 8
  3620 000016AB 66AB                    	stosw		; this is 1st interpolated sample (L)
  3621 000016AD 66AB                    	stosw		; this is 1st interpolated sample (R)
  3622                                  	;mov	al, [next_val]
  3623 000016AF 88F8                    	mov	al, bh
  3624 000016B1 00D0                    	add	al, dl
  3625 000016B3 D0D8                    	rcr	al, 1
  3626 000016B5 2C80                    	sub	al, 80h
  3627 000016B7 66C1E008                	shl	ax, 8
  3628 000016BB 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3629 000016BD 66AB                    	stosw		; this is 2nd interpolated sample (R)
  3630                                  	
  3631                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3632 000016BF 09C9                    	or	ecx, ecx
  3633 000016C1 75C2                    	jnz	short lff16m_1
  3634 000016C3 E9F9FBFFFF              	jmp	lff16m_3
  3635                                  
  3636                                  lff16m_7:
  3637                                  lff16s_7:
  3638 000016C8 E915FCFFFF              	jmp	lff16m_5  ; error
  3639                                  
  3640                                  load_16khz_stereo_8_bit:
  3641                                  	; 14/11/2023
  3642                                  	; 13/11/2023
  3643 000016CD F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3644                                  					; last of the file?
  3645 000016D4 7402                    	jz	short lff16s_0		; no
  3646 000016D6 F9                      	stc
  3647 000016D7 C3                      	retn
  3648                                  
  3649                                  lff16s_0:
  3650                                  	; 01/12/2024
  3651                                  	; edi = audio buffer address
  3652                                  	; 13/12/2024
  3653 000016D8 893D[D07A0000]          	mov	[audio_buffer], edi
  3654 000016DE BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3655                                          ;mov	edx, [loadsize]
  3656                                  
  3657                                  	; esi = buffer address
  3658                                  	;; edx = buffer size
  3659                                  
  3660                                  	; load file into memory
  3661                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000016E3 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000016E9 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000016EB 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000016F1 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 000016F6 CD40                <1>  int 40h
  3662 000016F8 72CE                    	jc	short lff16s_7 ; error !
  3663                                  
  3664                                  	; 01/12/2024
  3665 000016FA A3[A0850000]            	mov	[count], eax
  3666                                  
  3667                                  	;mov	edi, audio_buffer
  3668                                  	; 29/05/2024
  3669                                  	;mov	edi, [audio_buffer]
  3670                                  	
  3671 000016FF D1E8                    	shr	eax, 1
  3672 00001701 7505                    	jnz	short lff16s_8
  3673 00001703 E9D1FBFFFF              	jmp	lff16_eof
  3674                                  
  3675                                  lff16s_8:
  3676 00001708 89C1                    	mov	ecx, eax	; word count
  3677                                  lff16s_1:
  3678 0000170A AC                      	lodsb
  3679 0000170B A2[F2280000]            	mov	[previous_val_l], al
  3680 00001710 2C80                    	sub	al, 80h
  3681 00001712 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3682 00001716 66AB                    	stosw		; original sample (L)
  3683 00001718 AC                      	lodsb
  3684 00001719 A2[F4280000]            	mov	[previous_val_r], al
  3685 0000171E 2C80                    	sub	al, 80h
  3686 00001720 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3687 00001724 66AB                    	stosw		; original sample (R)
  3688                                  
  3689                                  	;xor	eax, eax
  3690 00001726 66B88080                	mov	ax, 8080h
  3691 0000172A 49                      	dec	ecx
  3692 0000172B 7403                    	jz	short lff16s_2
  3693                                  		; convert 8 bit sample to 16 bit sample
  3694 0000172D 668B06                  	mov	ax, [esi]
  3695                                  lff16s_2:
  3696                                  	;mov	[next_val_l], al
  3697                                  	;mov	[next_val_r], ah
  3698 00001730 89C3                    	mov	ebx, eax
  3699 00001732 0205[F2280000]          	add	al, [previous_val_l]
  3700 00001738 D0D8                    	rcr	al, 1
  3701 0000173A 88C2                    	mov	dl, al	; this is temporary interpolation value (L)
  3702 0000173C 0205[F2280000]          	add	al, [previous_val_l]
  3703 00001742 D0D8                    	rcr	al, 1
  3704 00001744 2C80                    	sub	al, 80h
  3705 00001746 66C1E008                	shl	ax, 8
  3706 0000174A 66AB                    	stosw		; this is 1st interpolated sample (L)
  3707 0000174C 88F8                    	mov	al, bh	; [next_val_r]
  3708 0000174E 0205[F4280000]          	add	al, [previous_val_r]
  3709 00001754 D0D8                    	rcr	al, 1
  3710 00001756 88C6                    	mov	dh, al	; this is temporary interpolation value (R)
  3711 00001758 0205[F4280000]          	add	al, [previous_val_r]
  3712 0000175E D0D8                    	rcr	al, 1
  3713 00001760 2C80                    	sub	al, 80h
  3714 00001762 66C1E008                	shl	ax, 8
  3715 00001766 66AB                    	stosw		; this is 1st interpolated sample (R)
  3716 00001768 88D0                    	mov	al, dl
  3717 0000176A 00D8                    	add	al, bl	; [next_val_l]
  3718 0000176C D0D8                    	rcr	al, 1
  3719 0000176E 2C80                    	sub	al, 80h
  3720 00001770 66C1E008                	shl	ax, 8
  3721 00001774 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3722 00001776 88F0                    	mov	al, dh
  3723 00001778 00F8                    	add	al, bh	; [next_val_r]
  3724 0000177A D0D8                    	rcr	al, 1
  3725 0000177C 2C80                    	sub	al, 80h
  3726 0000177E 66C1E008                	shl	ax, 8
  3727 00001782 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  3728                                  	
  3729                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3730 00001784 09C9                    	or	ecx, ecx
  3731 00001786 7582                    	jnz	short lff16s_1
  3732 00001788 E934FBFFFF              	jmp	lff16s_3
  3733                                  
  3734                                  load_16khz_mono_16_bit:
  3735                                  	; 15/11/2023
  3736                                  	; 13/11/2023
  3737 0000178D F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3738                                  					; last of the file?
  3739 00001794 7402                    	jz	short lff16m2_0		; no
  3740 00001796 F9                      	stc
  3741 00001797 C3                      	retn
  3742                                  
  3743                                  lff16m2_0:
  3744                                  	; 01/12/2024
  3745                                  	; edi = audio buffer address
  3746                                  	; 13/12/2024
  3747 00001798 893D[D07A0000]          	mov	[audio_buffer], edi
  3748 0000179E BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3749                                          ;mov	edx, [loadsize]
  3750                                  
  3751                                  	; esi = buffer address
  3752                                  	;; edx = buffer size
  3753                                  
  3754                                  	; load file into memory
  3755                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000017A3 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000017A9 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000017AB 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000017B1 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 000017B6 CD40                <1>  int 40h
  3756 000017B8 7255                    	jc	short lff16m2_7 ; error !
  3757                                  
  3758                                  	; 01/12/2024
  3759 000017BA A3[A0850000]            	mov	[count], eax
  3760                                  
  3761                                  	;mov	edi, audio_buffer
  3762                                  	; 29/05/2024
  3763                                  	;mov	edi, [audio_buffer]
  3764                                  	
  3765 000017BF D1E8                    	shr	eax, 1
  3766 000017C1 7505                    	jnz	short lff16m2_8
  3767 000017C3 E911FBFFFF              	jmp	lff16_eof
  3768                                  
  3769                                  lff16m2_8:
  3770 000017C8 89C1                    	mov	ecx, eax  ; word count
  3771                                  lff16m2_1:
  3772 000017CA 66AD                    	lodsw
  3773 000017CC 66AB                    	stosw		; original sample (left channel)
  3774 000017CE 66AB                    	stosw		; original sample (right channel)
  3775 000017D0 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  3776                                  	;mov	[previous_val], ax
  3777 000017D3 89C3                    	mov	ebx, eax
  3778 000017D5 31C0                    	xor	eax, eax
  3779 000017D7 49                      	dec	ecx
  3780 000017D8 7403                    	jz	short lff16m2_2
  3781 000017DA 668B06                  	mov	ax, [esi]
  3782                                  lff16m2_2:
  3783 000017DD 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  3784 000017E0 89C5                    	mov	ebp, eax	; [next_val]
  3785                                  	;add	ax, [previous_val]
  3786 000017E2 6601D8                  	add	ax, bx
  3787 000017E5 66D1D8                  	rcr	ax, 1
  3788 000017E8 89C2                    	mov	edx, eax ; this is temporary interpolation value
  3789                                  	;add	ax, [previous_val]
  3790 000017EA 6601D8                  	add	ax, bx
  3791 000017ED 66D1D8                  	rcr	ax, 1
  3792 000017F0 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3793 000017F3 66AB                    	stosw		; this is 1st interpolated sample (L)
  3794 000017F5 66AB                    	stosw		; this is 1st interpolated sample (R)
  3795 000017F7 89E8                    	mov	eax, ebp
  3796 000017F9 6601D0                  	add	ax, dx
  3797 000017FC 66D1D8                  	rcr	ax, 1
  3798 000017FF 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3799 00001802 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3800 00001804 66AB                    	stosw		; this is 2nd interpolated sample (R)
  3801                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3802 00001806 09C9                    	or	ecx, ecx
  3803 00001808 75C0                    	jnz	short lff16m2_1
  3804 0000180A E9B2FAFFFF              	jmp	lff16m2_3
  3805                                  
  3806                                  lff16m2_7:
  3807                                  lff16s2_7:
  3808 0000180F E9CEFAFFFF              	jmp	lff16m2_5  ; error
  3809                                  
  3810                                  load_16khz_stereo_16_bit:
  3811                                  	; 16/11/2023
  3812                                  	; 15/11/2023
  3813                                  	; 13/11/2023
  3814 00001814 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3815                                  					; last of the file?
  3816 0000181B 7402                    	jz	short lff16s2_0		; no
  3817 0000181D F9                      	stc
  3818 0000181E C3                      	retn
  3819                                  
  3820                                  lff16s2_0:
  3821                                  	; 01/12/2024
  3822                                  	; edi = audio buffer address
  3823                                  	; 13/12/2024
  3824 0000181F 893D[D07A0000]          	mov	[audio_buffer], edi
  3825 00001825 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3826                                          ;mov	edx, [loadsize]
  3827                                  
  3828                                  	; esi = buffer address
  3829                                  	;; edx = buffer size
  3830                                  
  3831                                  	; load file into memory
  3832                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000182A 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001830 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001832 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001838 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 0000183D CD40                <1>  int 40h
  3833 0000183F 72CE                    	jc	short lff16s2_7 ; error !
  3834                                  
  3835                                  	; 01/12/2024
  3836 00001841 A3[A0850000]            	mov	[count], eax
  3837                                  
  3838                                  	;mov	edi, audio_buffer
  3839                                  	; 29/05/2024
  3840                                  	;mov	edi, [audio_buffer]
  3841                                  	
  3842 00001846 C1E802                  	shr	eax, 2
  3843 00001849 7505                    	jnz	short lff16s2_8
  3844 0000184B E989FAFFFF              	jmp	lff16_eof
  3845                                  
  3846                                  lff16s2_8:
  3847 00001850 89C1                    	mov	ecx, eax  ; dword count
  3848                                  lff16s2_1:
  3849 00001852 66AD                    	lodsw
  3850 00001854 66AB                    	stosw		; original sample (L)
  3851 00001856 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  3852 00001859 66A3[F2280000]          	mov	[previous_val_l], ax
  3853 0000185F 66AD                    	lodsw
  3854 00001861 66AB                    	stosw		; original sample (R)
  3855 00001863 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  3856 00001866 66A3[F4280000]          	mov	[previous_val_r], ax
  3857 0000186C 31D2                    	xor	edx, edx
  3858 0000186E 31C0                    	xor	eax, eax
  3859                                  	; 16/11/2023
  3860 00001870 49                      	dec	ecx
  3861 00001871 7407                    	jz	short lff16s2_2
  3862 00001873 668B06                  	mov	ax, [esi]
  3863 00001876 668B5602                	mov	dx, [esi+2]
  3864                                  lff16s2_2:
  3865 0000187A 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  3866                                  	;mov	[next_val_l], ax
  3867 0000187D 89C5                    	mov	ebp, eax
  3868 0000187F 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  3869 00001882 668915[F8280000]        	mov	[next_val_r], dx
  3870 00001889 660305[F2280000]        	add	ax, [previous_val_l]
  3871 00001890 66D1D8                  	rcr	ax, 1
  3872 00001893 89C2                    	mov	edx, eax ; this is temporary interpolation value (L)
  3873 00001895 660305[F2280000]        	add	ax, [previous_val_l]
  3874 0000189C 66D1D8                  	rcr	ax, 1
  3875 0000189F 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  3876 000018A2 66AB                    	stosw		; this is 1st interpolated sample (L)
  3877 000018A4 66A1[F8280000]          	mov	ax, [next_val_r]
  3878 000018AA 660305[F4280000]        	add	ax, [previous_val_r]
  3879 000018B1 66D1D8                  	rcr	ax, 1
  3880 000018B4 89C3                    	mov	ebx, eax ; this is temporary interpolation value (R)
  3881 000018B6 660305[F4280000]        	add	ax, [previous_val_r]
  3882 000018BD 66D1D8                  	rcr	ax, 1
  3883 000018C0 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3884 000018C3 66AB                    	stosw		; this is 1st interpolated sample (R)
  3885                                  	;mov	ax, [next_val_l]
  3886 000018C5 89E8                    	mov	eax, ebp
  3887 000018C7 6601D0                  	add	ax, dx
  3888 000018CA 66D1D8                  	rcr	ax, 1
  3889 000018CD 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3890 000018D0 66AB                    	stosw		; this is 2nd interpolated sample (L)
  3891 000018D2 66A1[F8280000]          	mov	ax, [next_val_r]
  3892 000018D8 6601D8                  	add	ax, bx
  3893 000018DB 66D1D8                  	rcr	ax, 1
  3894 000018DE 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3895 000018E1 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  3896                                  	
  3897                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  3898 000018E3 09C9                    	or	ecx, ecx
  3899 000018E5 0F8567FFFFFF            	jnz	lff16s2_1
  3900 000018EB E9D1F9FFFF              	jmp	lff16s2_3
  3901                                  
  3902                                  ; .....................
  3903                                  
  3904                                  load_24khz_mono_8_bit:
  3905                                  	; 15/11/2023
  3906 000018F0 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3907                                  					; last of the file?
  3908 000018F7 7402                    	jz	short lff24m_0		; no
  3909 000018F9 F9                      	stc
  3910 000018FA C3                      	retn
  3911                                  
  3912                                  lff24m_0:
  3913                                  	; 01/12/2024
  3914                                  	; edi = audio buffer address
  3915                                  	; 13/12/2024
  3916 000018FB 893D[D07A0000]          	mov	[audio_buffer], edi
  3917 00001901 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3918                                          ;mov	edx, [loadsize]
  3919                                  
  3920                                  	; esi = buffer address
  3921                                  	;; edx = buffer size
  3922                                  
  3923                                  	; load file into memory
  3924                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001906 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 0000190C 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 0000190E 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001914 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001919 CD40                <1>  int 40h
  3925 0000191B 723B                    	jc	short lff24m_7 ; error !
  3926                                  
  3927                                  	; 01/12/2024
  3928 0000191D A3[A0850000]            	mov	[count], eax
  3929                                  
  3930                                  	;mov	edi, audio_buffer
  3931                                  	; 29/05/2024
  3932                                  	;mov	edi, [audio_buffer]
  3933                                  	
  3934 00001922 21C0                    	and	eax, eax
  3935 00001924 7505                    	jnz	short lff24m_8
  3936 00001926 E9AEF9FFFF              	jmp	lff24_eof
  3937                                  
  3938                                  lff24m_8:
  3939 0000192B 89C1                    	mov	ecx, eax	; byte count
  3940                                  lff24m_1:
  3941 0000192D AC                      	lodsb
  3942                                  	;mov	[previous_val], al
  3943 0000192E 88C3                    	mov	bl, al
  3944 00001930 2C80                    	sub	al, 80h
  3945 00001932 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3946 00001936 66AB                    	stosw		; original sample (left channel)
  3947 00001938 66AB                    	stosw		; original sample (right channel)
  3948                                  	;xor	eax, eax
  3949 0000193A B080                    	mov	al, 80h
  3950 0000193C 49                      	dec	ecx
  3951 0000193D 7402                    	jz	short lff24m_2
  3952 0000193F 8A06                    	mov	al, [esi]
  3953                                  lff24m_2:
  3954                                  	;;mov	[next_val], al
  3955                                  	;mov	bh, al
  3956                                  	;add	al, [previous_val]
  3957 00001941 00D8                    	add	al, bl
  3958 00001943 D0D8                    	rcr	al, 1
  3959 00001945 2C80                    	sub	al, 80h
  3960 00001947 66C1E008                	shl	ax, 8
  3961 0000194B 66AB                    	stosw		; this is interpolated sample (L)
  3962 0000194D 66AB                    	stosw		; this is interpolated sample (R)
  3963                                  	
  3964                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  3965 0000194F 09C9                    	or	ecx, ecx
  3966 00001951 75DA                    	jnz	short lff24m_1
  3967 00001953 E969F9FFFF              	jmp	lff24_3
  3968                                  
  3969                                  lff24m_7:
  3970                                  lff24s_7:
  3971 00001958 E985F9FFFF              	jmp	lff24_5  ; error
  3972                                  
  3973                                  load_24khz_stereo_8_bit:
  3974                                  	; 15/11/2023
  3975 0000195D F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3976                                  					; last of the file?
  3977 00001964 7402                    	jz	short lff24s_0		; no
  3978 00001966 F9                      	stc
  3979 00001967 C3                      	retn
  3980                                  
  3981                                  lff24s_0:
  3982                                  	; 01/12/2024
  3983                                  	; edi = audio buffer address
  3984                                  	; 13/12/2024
  3985 00001968 893D[D07A0000]          	mov	[audio_buffer], edi
  3986 0000196E BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3987                                          ;mov	edx, [loadsize]
  3988                                  
  3989                                  	; esi = buffer address
  3990                                  	;; edx = buffer size
  3991                                  
  3992                                  	; load file into memory
  3993                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001973 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001979 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 0000197B 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001981 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001986 CD40                <1>  int 40h
  3994 00001988 72CE                    	jc	short lff24s_7 ; error !
  3995                                  
  3996                                  	; 01/12/2024
  3997 0000198A A3[A0850000]            	mov	[count], eax
  3998                                  
  3999                                  	;mov	edi, audio_buffer
  4000                                  	; 29/05/2024
  4001                                  	;mov	edi, [audio_buffer]
  4002                                  	
  4003 0000198F D1E8                    	shr	eax, 1
  4004 00001991 7505                    	jnz	short lff24s_8
  4005 00001993 E941F9FFFF              	jmp	lff24_eof
  4006                                  
  4007                                  lff24s_8:
  4008 00001998 89C1                    	mov	ecx, eax  ; word count
  4009                                  lff24s_1:
  4010 0000199A AC                      	lodsb
  4011 0000199B A2[F2280000]            	mov	[previous_val_l], al
  4012 000019A0 2C80                    	sub	al, 80h
  4013 000019A2 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4014 000019A6 66AB                    	stosw		; original sample (L)
  4015 000019A8 AC                      	lodsb
  4016 000019A9 A2[F4280000]            	mov	[previous_val_r], al
  4017 000019AE 2C80                    	sub	al, 80h
  4018 000019B0 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4019 000019B4 66AB                    	stosw		; original sample (R)
  4020                                  
  4021                                  	;xor	eax, eax
  4022 000019B6 66B88080                	mov	ax, 8080h
  4023 000019BA 49                      	dec	ecx
  4024 000019BB 7403                    	jz	short lff24s_2
  4025                                  		; convert 8 bit sample to 16 bit sample
  4026 000019BD 668B06                  	mov	ax, [esi]
  4027                                  lff24s_2:
  4028                                  	;;mov	[next_val_l], al
  4029                                  	;;mov	[next_val_r], ah
  4030                                  	;mov	bx, ax
  4031 000019C0 88E7                    	mov	bh, ah
  4032 000019C2 0205[F2280000]          	add	al, [previous_val_l]
  4033 000019C8 D0D8                    	rcr	al, 1
  4034                                  	;mov	dl, al
  4035 000019CA 2C80                    	sub	al, 80h
  4036 000019CC 66C1E008                	shl	ax, 8
  4037 000019D0 66AB                    	stosw		; this is interpolated sample (L)
  4038 000019D2 88F8                    	mov	al, bh	; [next_val_r]
  4039 000019D4 0205[F4280000]          	add	al, [previous_val_r]
  4040 000019DA D0D8                    	rcr	al, 1
  4041                                  	;mov	dh, al
  4042 000019DC 2C80                    	sub	al, 80h
  4043 000019DE 66C1E008                	shl	ax, 8
  4044 000019E2 66AB                    	stosw		; this is interpolated sample (R)
  4045                                  		
  4046                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  4047 000019E4 09C9                    	or	ecx, ecx
  4048 000019E6 75B2                    	jnz	short lff24s_1
  4049 000019E8 E9D4F8FFFF              	jmp	lff24_3
  4050                                  
  4051                                  load_24khz_mono_16_bit:
  4052                                  	; 15/11/2023
  4053 000019ED F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4054                                  					; last of the file?
  4055 000019F4 7402                    	jz	short lff24m2_0		; no
  4056 000019F6 F9                      	stc
  4057 000019F7 C3                      	retn
  4058                                  
  4059                                  lff24m2_0:
  4060                                  	; 01/12/2024
  4061                                  	; edi = audio buffer address
  4062                                  	; 13/12/2024
  4063 000019F8 893D[D07A0000]          	mov	[audio_buffer], edi
  4064 000019FE BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4065                                          ;mov	edx, [loadsize]
  4066                                  
  4067                                  	; esi = buffer address
  4068                                  	;; edx = buffer size
  4069                                  
  4070                                  	; load file into memory
  4071                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001A03 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001A09 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001A0B 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001A11 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001A16 CD40                <1>  int 40h
  4072 00001A18 7237                    	jc	short lff24m2_7 ; error !
  4073                                  
  4074                                  	; 01/12/2024
  4075 00001A1A A3[A0850000]            	mov	[count], eax
  4076                                  
  4077                                  	;mov	edi, audio_buffer
  4078                                  	; 29/05/2024
  4079                                  	;mov	edi, [audio_buffer]
  4080                                  	
  4081 00001A1F D1E8                    	shr	eax, 1
  4082 00001A21 7505                    	jnz	short lff24m2_8
  4083 00001A23 E9B1F8FFFF              	jmp	lff24_eof
  4084                                  
  4085                                  lff24m2_8:
  4086 00001A28 89C1                    	mov	ecx, eax  ; word count
  4087                                  lff24m2_1:
  4088 00001A2A 66AD                    	lodsw
  4089 00001A2C 66AB                    	stosw		; original sample (left channel)
  4090 00001A2E 66AB                    	stosw		; original sample (right channel)
  4091 00001A30 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4092                                  	;mov	[previous_val], ax
  4093                                  	;mov	ebx, eax
  4094                                  	;xor	eax, eax
  4095 00001A33 31DB                    	xor	ebx, ebx
  4096 00001A35 49                      	dec	ecx
  4097 00001A36 7403                    	jz	short lff24m2_2
  4098                                  	;mov	ax, [esi]
  4099 00001A38 668B1E                  	mov	bx, [esi]
  4100                                  lff24m2_2:
  4101                                  	;add	ah, 80h ; convert sound level 0 to 65535 format
  4102                                  	;mov	ebp, eax	; [next_val]
  4103                                  	;add	ax, [previous_val]
  4104                                  	; ax = [previous_val]
  4105                                  	; bx = [next_val]
  4106 00001A3B 6601D8                  	add	ax, bx
  4107 00001A3E 66D1D8                  	rcr	ax, 1
  4108 00001A41 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4109 00001A44 66AB                    	stosw		; this is interpolated sample (L)
  4110 00001A46 66AB                    	stosw		; this is interpolated sample (R)
  4111                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  4112 00001A48 09C9                    	or	ecx, ecx
  4113 00001A4A 75DE                    	jnz	short lff24m2_1
  4114 00001A4C E970F8FFFF              	jmp	lff24_3
  4115                                  
  4116                                  lff24m2_7:
  4117                                  lff24s2_7:
  4118 00001A51 E98CF8FFFF              	jmp	lff24_5  ; error
  4119                                  
  4120                                  load_24khz_stereo_16_bit:
  4121                                  	; 16/11/2023
  4122                                  	; 15/11/2023
  4123 00001A56 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4124                                  					; last of the file?
  4125 00001A5D 7402                    	jz	short lff24s2_0		; no
  4126 00001A5F F9                      	stc
  4127 00001A60 C3                      	retn
  4128                                  
  4129                                  lff24s2_0:
  4130                                  	; 01/12/2024
  4131                                  	; edi = audio buffer address
  4132                                  	; 13/12/2024
  4133 00001A61 893D[D07A0000]          	mov	[audio_buffer], edi
  4134 00001A67 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4135                                          ;mov	edx, [loadsize]
  4136                                  
  4137                                  	; esi = buffer address
  4138                                  	;; edx = buffer size
  4139                                  
  4140                                  	; load file into memory
  4141                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001A6C 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001A72 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001A74 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001A7A B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001A7F CD40                <1>  int 40h
  4142 00001A81 72CE                    	jc	short lff24s2_7 ; error !
  4143                                  
  4144                                  	; 01/12/2024
  4145 00001A83 A3[A0850000]            	mov	[count], eax
  4146                                  
  4147                                  	;mov	edi, audio_buffer
  4148                                  	; 29/05/2024
  4149                                  	;mov	edi, [audio_buffer]
  4150                                  	
  4151 00001A88 C1E802                  	shr	eax, 2
  4152 00001A8B 7505                    	jnz	short lff24s2_8
  4153 00001A8D E947F8FFFF              	jmp	lff24_eof
  4154                                  
  4155                                  lff24s2_8:
  4156 00001A92 89C1                    	mov	ecx, eax  ; dword count
  4157                                  lff24s2_1:
  4158 00001A94 66AD                    	lodsw
  4159 00001A96 66AB                    	stosw		; original sample (L)
  4160 00001A98 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  4161 00001A9B 66A3[F2280000]          	mov	[previous_val_l], ax
  4162 00001AA1 66AD                    	lodsw
  4163 00001AA3 66AB                    	stosw		; original sample (R)
  4164 00001AA5 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  4165                                  	;mov	[previous_val_r], ax
  4166 00001AA8 89C3                    	mov	ebx, eax
  4167 00001AAA 31D2                    	xor	edx, edx
  4168 00001AAC 31C0                    	xor	eax, eax
  4169                                  	; 16/11/2023
  4170 00001AAE 49                      	dec	ecx
  4171 00001AAF 7407                    	jz	short lff24s2_2
  4172 00001AB1 668B06                  	mov	ax, [esi]
  4173 00001AB4 668B5602                	mov	dx, [esi+2]
  4174                                  lff24s2_2:
  4175 00001AB8 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  4176                                  	;;mov	[next_val_l], ax
  4177                                  	;mov	ebp, eax
  4178 00001ABB 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  4179                                  	;mov	[next_val_r], dx
  4180 00001ABE 660305[F2280000]        	add	ax, [previous_val_l]
  4181 00001AC5 66D1D8                  	rcr	ax, 1
  4182 00001AC8 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  4183 00001ACB 66AB                    	stosw		; this is interpolated sample (L)
  4184                                  	;mov	ax, [next_val_r]
  4185 00001ACD 89D0                    	mov	eax, edx
  4186                                  	;add	ax, [previous_val_r]
  4187 00001ACF 6601D8                  	add	ax, bx
  4188 00001AD2 66D1D8                  	rcr	ax, 1
  4189 00001AD5 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4190 00001AD8 66AB                    	stosw		; this is interpolated sample (R)
  4191                                  	
  4192                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  4193 00001ADA 09C9                    	or	ecx, ecx
  4194 00001ADC 75B6                    	jnz	short lff24s2_1
  4195 00001ADE E9DEF7FFFF              	jmp	lff24_3
  4196                                  
  4197                                  ; .....................
  4198                                  
  4199                                  load_32khz_mono_8_bit:
  4200                                  	; 15/11/2023
  4201 00001AE3 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4202                                  					; last of the file?
  4203 00001AEA 7402                    	jz	short lff32m_0		; no
  4204 00001AEC F9                      	stc
  4205 00001AED C3                      	retn
  4206                                  
  4207                                  lff32m_0:
  4208                                  	; 01/12/2024
  4209                                  	; edi = audio buffer address
  4210                                  	; 13/12/2024
  4211 00001AEE 893D[D07A0000]          	mov	[audio_buffer], edi
  4212 00001AF4 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4213                                          ;mov	edx, [loadsize]
  4214                                  
  4215                                  	; esi = buffer address
  4216                                  	;; edx = buffer size
  4217                                  
  4218                                  	; load file into memory
  4219                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001AF9 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001AFF 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001B01 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001B07 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001B0C CD40                <1>  int 40h
  4220 00001B0E 7247                    	jc	short lff32m_7 ; error !
  4221                                  
  4222                                  	; 01/12/2024
  4223 00001B10 A3[A0850000]            	mov	[count], eax
  4224                                  
  4225                                  	;mov	edi, audio_buffer
  4226                                  	; 29/05/2024
  4227                                  	;mov	edi, [audio_buffer]
  4228                                  	
  4229 00001B15 21C0                    	and	eax, eax
  4230 00001B17 7505                    	jnz	short lff32m_8
  4231 00001B19 E9BBF7FFFF              	jmp	lff32_eof
  4232                                  
  4233                                  lff32m_8:
  4234 00001B1E 89C1                    	mov	ecx, eax	; byte count
  4235                                  lff32m_1:
  4236 00001B20 AC                      	lodsb
  4237                                  	;mov	[previous_val], al
  4238 00001B21 88C3                    	mov	bl, al
  4239 00001B23 2C80                    	sub	al, 80h
  4240 00001B25 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4241 00001B29 66AB                    	stosw		; original sample (left channel)
  4242 00001B2B 66AB                    	stosw		; original sample (right channel)
  4243                                  	;xor	eax, eax
  4244 00001B2D B080                    	mov	al, 80h
  4245 00001B2F 49                      	dec	ecx
  4246 00001B30 7402                    	jz	short lff32m_2
  4247 00001B32 8A06                    	mov	al, [esi]
  4248                                  lff32m_2:
  4249                                  	;;mov	[next_val], al
  4250                                  	;mov	bh, al
  4251                                  	;add	al, [previous_val]
  4252 00001B34 00D8                    	add	al, bl
  4253 00001B36 D0D8                    	rcr	al, 1
  4254 00001B38 2C80                    	sub	al, 80h
  4255 00001B3A 66C1E008                	shl	ax, 8
  4256 00001B3E 66AB                    	stosw		; this is interpolated sample (L)
  4257 00001B40 66AB                    	stosw		; this is interpolated sample (R)
  4258                                  	
  4259                                  	; different than 8-16-24 kHZ !
  4260                                  	; 'original-interpolated-original' trio samples
  4261 00001B42 E30E                    	jecxz	lff32m_3
  4262                                  
  4263 00001B44 AC                      	lodsb
  4264 00001B45 2C80                    	sub	al, 80h
  4265 00001B47 66C1E008                	shl	ax, 8
  4266 00001B4B 66AB                    	stosw		; original sample (left channel)
  4267 00001B4D 66AB                    	stosw		; original sample (right channel)
  4268                                  
  4269                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  4270 00001B4F 49                      	dec	ecx
  4271 00001B50 75CE                    	jnz	short lff32m_1
  4272                                  lff32m_3:
  4273 00001B52 E96AF7FFFF              	jmp	lff32_3
  4274                                  
  4275                                  lff32m_7:
  4276                                  lff32s_7:
  4277 00001B57 E986F7FFFF              	jmp	lff32_5  ; error
  4278                                  
  4279                                  load_32khz_stereo_8_bit:
  4280                                  	; 15/11/2023
  4281 00001B5C F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4282                                  					; last of the file?
  4283 00001B63 7402                    	jz	short lff32s_0		; no
  4284 00001B65 F9                      	stc
  4285 00001B66 C3                      	retn
  4286                                  
  4287                                  lff32s_0:
  4288                                  	; 01/12/2024
  4289                                  	; edi = audio buffer address
  4290                                  	; 13/12/2024
  4291 00001B67 893D[D07A0000]          	mov	[audio_buffer], edi
  4292 00001B6D BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4293                                          ;mov	edx, [loadsize]
  4294                                  
  4295                                  	; esi = buffer address
  4296                                  	;; edx = buffer size
  4297                                  
  4298                                  	; load file into memory
  4299                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001B72 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001B78 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001B7A 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001B80 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001B85 CD40                <1>  int 40h
  4300 00001B87 72CE                    	jc	short lff32s_7 ; error !
  4301                                  
  4302                                  	; 01/12/2024
  4303 00001B89 A3[A0850000]            	mov	[count], eax
  4304                                  
  4305                                  	;mov	edi, audio_buffer
  4306                                  	; 29/05/2024
  4307                                  	;mov	edi, [audio_buffer]
  4308                                  	
  4309 00001B8E D1E8                    	shr	eax, 1
  4310 00001B90 7505                    	jnz	short lff32s_8
  4311 00001B92 E942F7FFFF              	jmp	lff32_eof
  4312                                  
  4313                                  lff32s_8:
  4314 00001B97 89C1                    	mov	ecx, eax  ; word count
  4315                                  lff32s_1:
  4316 00001B99 AC                      	lodsb
  4317 00001B9A A2[F2280000]            	mov	[previous_val_l], al
  4318 00001B9F 2C80                    	sub	al, 80h
  4319 00001BA1 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4320 00001BA5 66AB                    	stosw		; original sample (L)
  4321 00001BA7 AC                      	lodsb
  4322 00001BA8 A2[F4280000]            	mov	[previous_val_r], al
  4323 00001BAD 2C80                    	sub	al, 80h
  4324 00001BAF 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  4325 00001BB3 66AB                    	stosw		; original sample (R)
  4326                                  
  4327                                  	;xor	eax, eax
  4328 00001BB5 66B88080                	mov	ax, 8080h
  4329 00001BB9 49                      	dec	ecx
  4330 00001BBA 7403                    	jz	short lff32s_2
  4331                                  		; convert 8 bit sample to 16 bit sample
  4332 00001BBC 668B06                  	mov	ax, [esi]
  4333                                  lff32s_2:
  4334                                  	;;mov	[next_val_l], al
  4335                                  	;;mov	[next_val_r], ah
  4336                                  	;mov	bx, ax
  4337 00001BBF 88E7                    	mov	bh, ah
  4338 00001BC1 0205[F2280000]          	add	al, [previous_val_l]
  4339 00001BC7 D0D8                    	rcr	al, 1
  4340                                  	;mov	dl, al
  4341 00001BC9 2C80                    	sub	al, 80h
  4342 00001BCB 66C1E008                	shl	ax, 8
  4343 00001BCF 66AB                    	stosw		; this is interpolated sample (L)
  4344 00001BD1 88F8                    	mov	al, bh	; [next_val_r]
  4345 00001BD3 0205[F4280000]          	add	al, [previous_val_r]
  4346 00001BD9 D0D8                    	rcr	al, 1
  4347                                  	;mov	dh, al
  4348 00001BDB 2C80                    	sub	al, 80h
  4349 00001BDD 66C1E008                	shl	ax, 8
  4350 00001BE1 66AB                    	stosw		; this is interpolated sample (R)
  4351                                  
  4352                                  	; different than 8-16-24 kHZ !
  4353                                  	; 'original-interpolated-original' trio samples
  4354 00001BE3 E315                    	jecxz	lff32s_3
  4355                                  
  4356 00001BE5 AC                      	lodsb
  4357 00001BE6 2C80                    	sub	al, 80h
  4358 00001BE8 66C1E008                	shl	ax, 8
  4359 00001BEC 66AB                    	stosw		; original sample (left channel)
  4360                                  
  4361 00001BEE AC                      	lodsb
  4362 00001BEF 2C80                    	sub	al, 80h
  4363 00001BF1 66C1E008                	shl	ax, 8
  4364 00001BF5 66AB                    	stosw		; original sample (right channel)
  4365                                  		
  4366                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  4367 00001BF7 49                      	dec	ecx
  4368 00001BF8 759F                    	jnz	short lff32s_1
  4369                                  lff32s_3:
  4370 00001BFA E9C2F6FFFF              	jmp	lff32_3
  4371                                  
  4372                                  load_32khz_mono_16_bit:
  4373                                  	; 15/11/2023
  4374 00001BFF F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4375                                  					; last of the file?
  4376 00001C06 7402                    	jz	short lff32m2_0		; no
  4377 00001C08 F9                      	stc
  4378 00001C09 C3                      	retn
  4379                                  
  4380                                  lff32m2_0:
  4381                                  	; 01/12/2024
  4382                                  	; edi = audio buffer address
  4383                                  	; 13/12/2024
  4384 00001C0A 893D[D07A0000]          	mov	[audio_buffer], edi
  4385 00001C10 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4386                                          ;mov	edx, [loadsize]
  4387                                  
  4388                                  	; esi = buffer address
  4389                                  	;; edx = buffer size
  4390                                  
  4391                                  	; load file into memory
  4392                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001C15 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001C1B 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001C1D 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001C23 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001C28 CD40                <1>  int 40h
  4393 00001C2A 723E                    	jc	short lff32m2_7 ; error !
  4394                                  
  4395                                  	; 01/12/2024
  4396 00001C2C A3[A0850000]            	mov	[count], eax
  4397                                  
  4398                                  	;mov	edi, audio_buffer
  4399                                  	; 29/05/2024
  4400                                  	;mov	edi, [audio_buffer]
  4401                                  	
  4402 00001C31 D1E8                    	shr	eax, 1
  4403 00001C33 7505                    	jnz	short lff32m2_8
  4404 00001C35 E99FF6FFFF              	jmp	lff32_eof
  4405                                  
  4406                                  lff32m2_8:
  4407 00001C3A 89C1                    	mov	ecx, eax  ; word count
  4408                                  lff32m2_1:
  4409 00001C3C 66AD                    	lodsw
  4410 00001C3E 66AB                    	stosw		; original sample (left channel)
  4411 00001C40 66AB                    	stosw		; original sample (right channel)
  4412 00001C42 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4413                                  	;mov	[previous_val], ax
  4414                                  	;mov	ebx, eax
  4415                                  	;xor	eax, eax
  4416 00001C45 31DB                    	xor	ebx, ebx
  4417 00001C47 49                      	dec	ecx
  4418 00001C48 7403                    	jz	short lff32m2_2
  4419                                  	;mov	ax, [esi]
  4420 00001C4A 668B1E                  	mov	bx, [esi]
  4421                                  lff32m2_2:
  4422                                  	;add	ah, 80h ; convert sound level 0 to 65535 format
  4423                                  	;mov	ebp, eax	; [next_val]
  4424                                  	;add	ax, [previous_val]
  4425                                  	; ax = [previous_val]
  4426                                  	; bx = [next_val]
  4427 00001C4D 6601D8                  	add	ax, bx
  4428 00001C50 66D1D8                  	rcr	ax, 1
  4429 00001C53 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4430 00001C56 66AB                    	stosw		; this is interpolated sample (L)
  4431 00001C58 66AB                    	stosw		; this is interpolated sample (R)
  4432                                  
  4433                                  	; different than 8-16-24 kHZ !
  4434                                  	; 'original-interpolated-original' trio samples 
  4435 00001C5A E309                    	jecxz	lff32m2_3
  4436                                  
  4437 00001C5C 66AD                    	lodsw
  4438 00001C5E 66AB                    	stosw		; original sample (left channel)
  4439 00001C60 66AB                    	stosw		; original sample (right channel)
  4440                                  
  4441                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  4442 00001C62 49                      	dec	ecx
  4443 00001C63 75D7                    	jnz	short lff32m2_1
  4444                                  lff32m2_3:
  4445 00001C65 E957F6FFFF              	jmp	lff32_3
  4446                                  
  4447                                  lff32m2_7:
  4448                                  lff32s2_7:
  4449 00001C6A E973F6FFFF              	jmp	lff32_5  ; error
  4450                                  
  4451                                  load_32khz_stereo_16_bit:
  4452                                  	; 16/11/2023
  4453                                  	; 15/11/2023
  4454 00001C6F F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4455                                  					; last of the file?
  4456 00001C76 7402                    	jz	short lff32s2_0		; no
  4457 00001C78 F9                      	stc
  4458 00001C79 C3                      	retn
  4459                                  
  4460                                  lff32s2_0:
  4461                                  	; 01/12/2024
  4462                                  	; edi = audio buffer address
  4463                                  	; 13/12/2024
  4464 00001C7A 893D[D07A0000]          	mov	[audio_buffer], edi
  4465 00001C80 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4466                                          ;mov	edx, [loadsize]
  4467                                  
  4468                                  	; esi = buffer address
  4469                                  	;; edx = buffer size
  4470                                  
  4471                                  	; load file into memory
  4472                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001C85 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001C8B 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001C8D 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001C93 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001C98 CD40                <1>  int 40h
  4473 00001C9A 72CE                    	jc	short lff32s2_7 ; error !
  4474                                  
  4475                                  	; 01/12/2024
  4476 00001C9C A3[A0850000]            	mov	[count], eax
  4477                                  
  4478                                  	;mov	edi, audio_buffer
  4479                                  	; 29/05/2024
  4480                                  	;mov	edi, [audio_buffer]
  4481                                  	
  4482 00001CA1 C1E802                  	shr	eax, 2
  4483 00001CA4 7505                    	jnz	short lff32s2_8
  4484 00001CA6 E92EF6FFFF              	jmp	lff32_eof
  4485                                  
  4486                                  lff32s2_8:
  4487 00001CAB 89C1                    	mov	ecx, eax ; dword count
  4488                                  lff32s2_1:
  4489 00001CAD 66AD                    	lodsw
  4490 00001CAF 66AB                    	stosw		; original sample (L)
  4491 00001CB1 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  4492 00001CB4 66A3[F2280000]          	mov	[previous_val_l], ax
  4493 00001CBA 66AD                    	lodsw
  4494 00001CBC 66AB                    	stosw		; original sample (R)
  4495 00001CBE 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  4496                                  	;mov	[previous_val_r], ax
  4497 00001CC1 89C3                    	mov	ebx, eax
  4498 00001CC3 31D2                    	xor	edx, edx
  4499 00001CC5 31C0                    	xor	eax, eax
  4500                                  	; 16/11/2023
  4501 00001CC7 49                      	dec	ecx
  4502 00001CC8 7407                    	jz	short lff32s2_2
  4503 00001CCA 668B06                  	mov	ax, [esi]
  4504 00001CCD 668B5602                	mov	dx, [esi+2]
  4505                                  lff32s2_2:
  4506 00001CD1 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  4507                                  	;;mov	[next_val_l], ax
  4508                                  	;mov	ebp, eax
  4509 00001CD4 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  4510                                  	;mov	[next_val_r], dx
  4511 00001CD7 660305[F2280000]        	add	ax, [previous_val_l]
  4512 00001CDE 66D1D8                  	rcr	ax, 1
  4513 00001CE1 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  4514 00001CE4 66AB                    	stosw		; this is interpolated sample (L)
  4515                                  	;mov	ax, [next_val_r]
  4516 00001CE6 89D0                    	mov	eax, edx
  4517                                  	;add	ax, [previous_val_r]
  4518 00001CE8 6601D8                  	add	ax, bx
  4519 00001CEB 66D1D8                  	rcr	ax, 1
  4520 00001CEE 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4521 00001CF1 66AB                    	stosw		; this is interpolated sample (R)
  4522                                  
  4523                                  	; different than 8-16-24 kHZ !
  4524                                  	; 'original-interpolated-original' trio samples
  4525 00001CF3 E30B                    	jecxz	lff32s2_3
  4526                                  
  4527 00001CF5 66AD                    	lodsw
  4528 00001CF7 66AB                    	stosw	; original sample (L)
  4529 00001CF9 66AD                    	lodsw
  4530 00001CFB 66AB                    	stosw	; original sample (R)
  4531                                  	
  4532                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  4533 00001CFD 49                      	dec	ecx
  4534 00001CFE 75AD                    	jnz	short lff32s2_1
  4535                                  lff32s2_3:
  4536 00001D00 E9BCF5FFFF              	jmp	lff32_3
  4537                                  
  4538                                  ; .....................
  4539                                  
  4540                                  load_22khz_mono_8_bit:
  4541                                  	; 16/11/2023
  4542 00001D05 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4543                                  					; last of the file?
  4544 00001D0C 7402                    	jz	short lff22m_0		; no
  4545 00001D0E F9                      	stc
  4546 00001D0F C3                      	retn
  4547                                  
  4548                                  lff22m_0:
  4549                                  	; 01/12/2024
  4550                                  	; edi = audio buffer address
  4551                                  	; 13/12/2024
  4552 00001D10 893D[D07A0000]          	mov	[audio_buffer], edi
  4553 00001D16 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4554                                          ;mov	edx, [loadsize]
  4555                                  
  4556                                  	; esi = buffer address
  4557                                  	;; edx = buffer size
  4558                                  
  4559                                  	; load file into memory
  4560                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001D1B 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001D21 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001D23 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001D29 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001D2E CD40                <1>  int 40h
  4561 00001D30 725D                    	jc	short lff22m_7 ; error !
  4562                                  
  4563                                  	; 01/12/2024
  4564 00001D32 A3[A0850000]            	mov	[count], eax
  4565                                  
  4566                                  	;mov	edi, audio_buffer
  4567                                  	; 29/05/2024
  4568                                  	;mov	edi, [audio_buffer]
  4569                                  	
  4570 00001D37 21C0                    	and	eax, eax
  4571 00001D39 7505                    	jnz	short lff22m_8
  4572 00001D3B E999F5FFFF              	jmp	lff22_eof
  4573                                  
  4574                                  lff22m_8:
  4575 00001D40 89C1                    	mov	ecx, eax	; byte count
  4576                                  lff22m_9:
  4577 00001D42 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  4578 00001D47 C605[FA280000]03        	mov	byte [faz], 3  ; 3 steps/phases
  4579                                  lff22m_1:
  4580                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  4581 00001D4E AC                      	lodsb
  4582 00001D4F B280                    	mov	dl, 80h
  4583 00001D51 49                      	dec	ecx
  4584 00001D52 7402                    	jz	short lff22m_2_1
  4585 00001D54 8A16                    	mov	dl, [esi]
  4586                                  lff22m_2_1:	
  4587                                  	; al = [previous_val]
  4588                                  	; dl = [next_val]
  4589 00001D56 E851060000              	call	interpolating_3_8bit_mono ; 1 of 17
  4590 00001D5B E32D                    	jecxz	lff22m_3
  4591                                  lff22m_2_2:
  4592 00001D5D AC                      	lodsb
  4593 00001D5E B280                    	mov	dl, 80h
  4594 00001D60 49                      	dec	ecx
  4595 00001D61 7402                    	jz	short lff22m_2_3
  4596 00001D63 8A16                    	mov	dl, [esi]
  4597                                  lff22m_2_3:
  4598 00001D65 E8C6060000               	call	interpolating_2_8bit_mono ; 2 of 17 .. 6 of 17
  4599 00001D6A E31E                    	jecxz	lff22m_3
  4600 00001D6C 4D                      	dec	ebp
  4601 00001D6D 75EE                    	jnz	short lff22m_2_2
  4602                                  
  4603 00001D6F A0[FA280000]            	mov	al, [faz]
  4604 00001D74 FEC8                    	dec	al
  4605 00001D76 74CA                    	jz	short lff22m_9
  4606 00001D78 FE0D[FA280000]          	dec	byte [faz]
  4607 00001D7E BD04000000              	mov	ebp, 4
  4608 00001D83 FEC8                    	dec	al
  4609 00001D85 75C7                    	jnz	short lff22m_1 ; 3:2:2:2:2 ; 7-11 of 17
  4610 00001D87 45                      	inc	ebp ; 5
  4611 00001D88 EBC4                    	jmp	short lff22m_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  4612                                  
  4613                                  lff22m_3:
  4614                                  lff22s_3:
  4615 00001D8A E932F5FFFF              	jmp	lff22_3	; padfill
  4616                                  		; (put zeros in the remain words of the buffer)
  4617                                  lff22m_7:
  4618                                  lff22s_7:
  4619 00001D8F E94EF5FFFF              	jmp	lff22_5  ; error
  4620                                  
  4621                                  load_22khz_stereo_8_bit:
  4622                                  	; 16/11/2023
  4623 00001D94 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4624                                  					; last of the file?
  4625 00001D9B 7402                    	jz	short lff22s_0		; no
  4626 00001D9D F9                      	stc
  4627 00001D9E C3                      	retn
  4628                                  
  4629                                  lff22s_0:
  4630                                  	; 01/12/2024
  4631                                  	; edi = audio buffer address
  4632                                  	; 13/12/2024
  4633 00001D9F 893D[D07A0000]          	mov	[audio_buffer], edi
  4634 00001DA5 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4635                                          ;mov	edx, [loadsize]
  4636                                  
  4637                                  	; esi = buffer address
  4638                                  	;; edx = buffer size
  4639                                  
  4640                                  	; load file into memory
  4641                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001DAA 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001DB0 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001DB2 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001DB8 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001DBD CD40                <1>  int 40h
  4642 00001DBF 72CE                    	jc	short lff22s_7 ; error !
  4643                                  
  4644                                  	; 01/12/2024
  4645 00001DC1 A3[A0850000]            	mov	[count], eax
  4646                                  
  4647                                  	;mov	edi, audio_buffer
  4648                                  	; 29/05/2024
  4649                                  	;mov	edi, [audio_buffer]
  4650                                  	
  4651 00001DC6 D1E8                    	shr	eax, 1
  4652 00001DC8 7505                    	jnz	short lff22s_8
  4653 00001DCA E90AF5FFFF              	jmp	lff22_eof
  4654                                  
  4655                                  lff22s_8:
  4656 00001DCF 89C1                    	mov	ecx, eax	; word count
  4657                                  lff22s_9:
  4658 00001DD1 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  4659 00001DD6 C605[FA280000]03        	mov	byte [faz], 3  ; 3 steps/phase
  4660                                  lff22s_1:
  4661                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  4662 00001DDD 66AD                    	lodsw
  4663 00001DDF 66BA8080                	mov	dx, 8080h
  4664 00001DE3 49                      	dec	ecx
  4665 00001DE4 7403                    	jz	short lff22s_2_1
  4666 00001DE6 668B16                  	mov	dx, [esi]
  4667                                  lff22s_2_1:	
  4668                                  	; al = [previous_val_l]
  4669                                  	; ah = [previous_val_r]
  4670                                  	; dl = [next_val_l]
  4671                                  	; dh = [next_val_r]
  4672 00001DE9 E8EF050000              	call	interpolating_3_8bit_stereo ; 1 of 17
  4673 00001DEE E39A                    	jecxz	lff22s_3
  4674                                  lff22s_2_2:
  4675 00001DF0 66AD                    	lodsw
  4676 00001DF2 66BA8080                	mov	dx, 8080h
  4677 00001DF6 49                      	dec	ecx
  4678 00001DF7 7403                    	jz	short lff22s_2_3
  4679 00001DF9 668B16                  	mov	dx, [esi]
  4680                                  lff22s_2_3:
  4681 00001DFC E84C060000               	call	interpolating_2_8bit_stereo ; 2 of 17 .. 6 of 17
  4682 00001E01 E387                    	jecxz	lff22s_3
  4683 00001E03 4D                      	dec	ebp
  4684 00001E04 75EA                    	jnz	short lff22s_2_2
  4685                                  
  4686 00001E06 A0[FA280000]            	mov	al, [faz]
  4687 00001E0B FEC8                    	dec	al
  4688 00001E0D 74C2                    	jz	short lff22s_9
  4689 00001E0F FE0D[FA280000]          	dec	byte [faz]
  4690 00001E15 BD04000000              	mov	ebp, 4
  4691 00001E1A FEC8                    	dec	al
  4692 00001E1C 75BF                    	jnz	short lff22s_1 ; 3:2:2:2:2 ; 7-11 of 17
  4693 00001E1E 45                      	inc	ebp ; 5
  4694 00001E1F EBBC                    	jmp	short lff22s_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  4695                                  
  4696                                  load_22khz_mono_16_bit:
  4697                                  	; 16/11/2023
  4698 00001E21 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4699                                  					; last of the file?
  4700 00001E28 7402                    	jz	short lff22m2_0		; no
  4701 00001E2A F9                      	stc
  4702 00001E2B C3                      	retn
  4703                                  
  4704                                  lff22m2_0:
  4705                                  	; 01/12/2024
  4706                                  	; edi = audio buffer address
  4707                                  	; 13/12/2024
  4708 00001E2C 893D[D07A0000]          	mov	[audio_buffer], edi
  4709 00001E32 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4710                                          ;mov	edx, [loadsize]
  4711                                  
  4712                                  	; esi = buffer address
  4713                                  	;; edx = buffer size
  4714                                  
  4715                                  	; load file into memory
  4716                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001E37 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001E3D 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001E3F 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001E45 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001E4A CD40                <1>  int 40h
  4717 00001E4C 7261                    	jc	short lff22m2_7 ; error !
  4718                                  
  4719                                  	; 01/12/2024
  4720 00001E4E A3[A0850000]            	mov	[count], eax
  4721                                  
  4722                                  	;mov	edi, audio_buffer
  4723                                  	; 29/05/2024
  4724                                  	;mov	edi, [audio_buffer]
  4725                                  	
  4726 00001E53 D1E8                    	shr	eax, 1
  4727 00001E55 7505                    	jnz	short lff22m2_8
  4728 00001E57 E97DF4FFFF              	jmp	lff22_eof
  4729                                  
  4730                                  lff22m2_8:
  4731 00001E5C 89C1                    	mov	ecx, eax	; word count
  4732                                  lff22m2_9:
  4733 00001E5E BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  4734 00001E63 C605[FA280000]03        	mov	byte [faz], 3  ; 3 steps/phases
  4735                                  lff22m2_1:
  4736                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  4737 00001E6A 66AD                    	lodsw
  4738 00001E6C 31D2                    	xor	edx, edx
  4739 00001E6E 49                      	dec	ecx
  4740 00001E6F 7403                    	jz	short lff22m2_2_1
  4741 00001E71 668B16                  	mov	dx, [esi]
  4742                                  lff22m2_2_1:	
  4743                                  	; ax = [previous_val]
  4744                                  	; dx = [next_val]
  4745 00001E74 E805060000              	call	interpolating_3_16bit_mono ; 1 of 17
  4746 00001E79 E32F                    	jecxz	lff22m2_3
  4747                                  lff22m2_2_2:
  4748 00001E7B 66AD                    	lodsw
  4749 00001E7D 31D2                    	xor	edx, edx
  4750 00001E7F 49                      	dec	ecx
  4751 00001E80 7403                    	jz	short lff22m2_2_3
  4752 00001E82 668B16                  	mov	dx, [esi]
  4753                                  lff22m2_2_3:
  4754 00001E85 E887060000               	call	interpolating_2_16bit_mono ; 2 of 17 .. 6 of 17
  4755 00001E8A E31E                    	jecxz	lff22m2_3
  4756 00001E8C 4D                      	dec	ebp
  4757 00001E8D 75EC                    	jnz	short lff22m2_2_2
  4758                                  
  4759 00001E8F A0[FA280000]            	mov	al, [faz]
  4760 00001E94 FEC8                    	dec	al
  4761 00001E96 74C6                    	jz	short lff22m2_9
  4762 00001E98 FE0D[FA280000]          	dec	byte [faz]
  4763 00001E9E BD04000000              	mov	ebp, 4
  4764 00001EA3 FEC8                    	dec	al
  4765 00001EA5 75C3                    	jnz	short lff22m2_1 ; 3:2:2:2:2 ; 7-11 of 17
  4766 00001EA7 45                      	inc	ebp ; 5
  4767 00001EA8 EBC0                    	jmp	short lff22m2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  4768                                  
  4769                                  lff22m2_3:
  4770                                  lff22s2_3:
  4771 00001EAA E912F4FFFF              	jmp	lff22_3	; padfill
  4772                                  		; (put zeros in the remain words of the buffer)
  4773                                  lff22m2_7:
  4774                                  lff22s2_7:
  4775 00001EAF E92EF4FFFF              	jmp	lff22_5  ; error
  4776                                  
  4777                                  load_22khz_stereo_16_bit:
  4778                                  	; 16/11/2023
  4779 00001EB4 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4780                                  					; last of the file?
  4781 00001EBB 7402                    	jz	short lff22s2_0		; no
  4782 00001EBD F9                      	stc
  4783 00001EBE C3                      	retn
  4784                                  
  4785                                  lff22s2_0:
  4786                                  	; 01/12/2024
  4787                                  	; edi = audio buffer address
  4788                                  	; 13/12/2024
  4789 00001EBF 893D[D07A0000]          	mov	[audio_buffer], edi
  4790 00001EC5 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4791                                          ;mov	edx, [loadsize]
  4792                                  
  4793                                  	; esi = buffer address
  4794                                  	;; edx = buffer size
  4795                                  
  4796                                  	; load file into memory
  4797                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001ECA 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001ED0 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001ED2 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001ED8 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001EDD CD40                <1>  int 40h
  4798 00001EDF 72CE                    	jc	short lff22s2_7 ; error !
  4799                                  
  4800                                  	; 01/12/2024
  4801 00001EE1 A3[A0850000]            	mov	[count], eax
  4802                                  
  4803                                  	;mov	edi, audio_buffer
  4804                                  	; 29/05/2024
  4805                                  	;mov	edi, [audio_buffer]
  4806                                  	
  4807 00001EE6 C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  4808 00001EE9 7505                    	jnz	short lff22s2_8
  4809 00001EEB E9E9F3FFFF              	jmp	lff22_eof
  4810                                  
  4811                                  lff22s2_8:
  4812 00001EF0 89C1                    	mov	ecx, eax	; dword count
  4813                                  lff22s2_9:
  4814 00001EF2 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  4815 00001EF7 C605[FA280000]03        	mov	byte [faz], 3  ; 3 steps/phase
  4816                                  lff22s2_1:
  4817                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  4818 00001EFE 66AD                    	lodsw
  4819 00001F00 89C3                    	mov	ebx, eax
  4820 00001F02 66AD                    	lodsw
  4821 00001F04 8B16                    	mov	edx, [esi]
  4822 00001F06 668915[F6280000]        	mov	[next_val_l], dx
  4823                                  	; 26/11/2023
  4824 00001F0D C1EA10                  	shr	edx, 16
  4825 00001F10 49                      	dec	ecx
  4826 00001F11 7509                    	jnz	short lff22s2_2_1
  4827 00001F13 31D2                    	xor	edx, edx ; 0
  4828 00001F15 668915[F6280000]        	mov	[next_val_l], dx
  4829                                  lff22s2_2_1:
  4830                                  	; bx = [previous_val_l]
  4831                                  	; ax = [previous_val_r]
  4832                                  	; [next_val_l]
  4833                                  	; dx = [next_val_r]
  4834 00001F1C E88D050000              	call	interpolating_3_16bit_stereo ; 1 of 17 
  4835 00001F21 E387                    	jecxz	lff22s2_3
  4836                                  lff22s2_2_2:
  4837 00001F23 66AD                    	lodsw
  4838 00001F25 89C3                    	mov	ebx, eax
  4839 00001F27 66AD                    	lodsw
  4840 00001F29 8B16                    	mov	edx, [esi]
  4841 00001F2B 668915[F6280000]        	mov	[next_val_l], dx
  4842                                  	; 26/11/2023
  4843 00001F32 C1EA10                  	shr	edx, 16
  4844 00001F35 49                      	dec	ecx
  4845 00001F36 7509                    	jnz	short lff22s2_2_3
  4846 00001F38 31D2                    	xor	edx, edx ; 0
  4847 00001F3A 668915[F6280000]        	mov	[next_val_l], dx
  4848                                  lff22s2_2_3:
  4849 00001F41 E8E3050000               	call	interpolating_2_16bit_stereo ; 2 of 17 .. 6 of 17
  4850 00001F46 E31E                    	jecxz	lff22s2_2_4
  4851                                  
  4852 00001F48 4D                      	dec	ebp
  4853 00001F49 75D8                    	jnz	short lff22s2_2_2
  4854                                  
  4855 00001F4B A0[FA280000]            	mov	al, [faz]
  4856 00001F50 FEC8                    	dec	al
  4857 00001F52 749E                    	jz	short lff22s2_9
  4858 00001F54 FE0D[FA280000]          	dec	byte [faz]
  4859 00001F5A BD04000000              	mov	ebp, 4
  4860 00001F5F FEC8                    	dec	al
  4861 00001F61 759B                    	jnz	short lff22s2_1 ; 3:2:2:2:2 ; 7-11 of 17
  4862 00001F63 45                      	inc	ebp ; 5
  4863 00001F64 EB98                    	jmp	short lff22s2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  4864                                  
  4865                                  lff22s2_2_4:
  4866                                  	; 26/11/2023
  4867 00001F66 E956F3FFFF              	jmp	lff22_3	; padfill
  4868                                  
  4869                                  ; .....................
  4870                                  
  4871                                  load_11khz_mono_8_bit:
  4872                                  	; 18/11/2023
  4873 00001F6B F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4874                                  					; last of the file?
  4875 00001F72 7402                    	jz	short lff11m_0		; no
  4876 00001F74 F9                      	stc
  4877 00001F75 C3                      	retn
  4878                                  
  4879                                  lff11m_0:
  4880                                  	; 01/12/2024
  4881                                  	; edi = audio buffer address
  4882                                  	; 13/12/2024
  4883 00001F76 893D[D07A0000]          	mov	[audio_buffer], edi
  4884 00001F7C BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4885                                          ;mov	edx, [loadsize]
  4886                                  
  4887                                  	; esi = buffer address
  4888                                  	;; edx = buffer size
  4889                                  
  4890                                  	; load file into memory
  4891                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001F81 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00001F87 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00001F89 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00001F8F B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00001F94 CD40                <1>  int 40h
  4892 00001F96 7247                    	jc	short lff11m_7 ; error !
  4893                                  
  4894                                  	; 01/12/2024
  4895 00001F98 A3[A0850000]            	mov	[count], eax
  4896                                  
  4897                                  	;mov	edi, audio_buffer
  4898                                  	; 29/05/2024
  4899                                  	;mov	edi, [audio_buffer]
  4900                                  	
  4901 00001F9D 21C0                    	and	eax, eax
  4902 00001F9F 7505                    	jnz	short lff11m_8
  4903 00001FA1 E933F3FFFF              	jmp	lff11_eof
  4904                                  
  4905                                  lff11m_8:
  4906 00001FA6 89C1                    	mov	ecx, eax		; byte count
  4907                                  lff11m_9:
  4908 00001FA8 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  4909                                  lff11m_1:
  4910                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  4911 00001FAD AC                      	lodsb
  4912 00001FAE B280                    	mov	dl, 80h
  4913 00001FB0 49                      	dec	ecx
  4914 00001FB1 7402                    	jz	short lff11m_2_1
  4915 00001FB3 8A16                    	mov	dl, [esi]
  4916                                  lff11m_2_1:	
  4917                                  	; al = [previous_val]
  4918                                  	; dl = [next_val]
  4919 00001FB5 E8A0050000              	call	interpolating_5_8bit_mono
  4920 00001FBA E333                    	jecxz	lff11m_3
  4921                                  lff11m_2_2:
  4922 00001FBC AC                      	lodsb
  4923 00001FBD B280                    	mov	dl, 80h
  4924 00001FBF 49                      	dec	ecx
  4925 00001FC0 7402                    	jz	short lff11m_2_3
  4926 00001FC2 8A16                    	mov	dl, [esi]
  4927                                  lff11m_2_3:
  4928 00001FC4 E89D060000               	call	interpolating_4_8bit_mono
  4929 00001FC9 E324                    	jecxz	lff11m_3
  4930                                  
  4931 00001FCB 4D                      	dec	ebp
  4932 00001FCC 74DA                    	jz	short lff11m_9
  4933                                  
  4934 00001FCE AC                      	lodsb
  4935 00001FCF B280                    	mov	dl, 80h
  4936 00001FD1 49                      	dec	ecx
  4937 00001FD2 7402                    	jz	short lff11m_2_4
  4938 00001FD4 8A16                    	mov	dl, [esi]
  4939                                  lff11m_2_4:
  4940 00001FD6 E88B060000              	call	interpolating_4_8bit_mono
  4941 00001FDB E312                    	jecxz	lff11m_3
  4942 00001FDD EBCE                    	jmp	short lff11m_1
  4943                                  
  4944                                  lff11m_7:
  4945                                  lff11s_7:
  4946 00001FDF E9FEF2FFFF              	jmp	lff11_5  ; error
  4947                                  
  4948                                  load_11khz_stereo_8_bit:
  4949                                  	; 18/11/2023
  4950 00001FE4 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  4951                                  					; last of the file?
  4952 00001FEB 7407                    	jz	short lff11s_0		; no
  4953 00001FED F9                      	stc
  4954 00001FEE C3                      	retn
  4955                                  
  4956                                  lff11m_3:
  4957                                  lff11s_3:
  4958 00001FEF E9CDF2FFFF              	jmp	lff11_3	; padfill
  4959                                  		; (put zeros in the remain words of the buffer)
  4960                                  
  4961                                  lff11s_0:
  4962                                  	; 01/12/2024
  4963                                  	; edi = audio buffer address
  4964                                  	; 13/12/2024
  4965 00001FF4 893D[D07A0000]          	mov	[audio_buffer], edi
  4966 00001FFA BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  4967                                          ;mov	edx, [loadsize]
  4968                                  
  4969                                  	; esi = buffer address
  4970                                  	;; edx = buffer size
  4971                                  
  4972                                  	; load file into memory
  4973                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00001FFF 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002005 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002007 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000200D B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00002012 CD40                <1>  int 40h
  4974 00002014 72C9                    	jc	short lff11s_7 ; error !
  4975                                  
  4976                                  	; 01/12/2024
  4977 00002016 A3[A0850000]            	mov	[count], eax
  4978                                  
  4979                                  	;mov	edi, audio_buffer
  4980                                  	; 29/05/2024
  4981                                  	;mov	edi, [audio_buffer]
  4982                                  	
  4983 0000201B D1E8                    	shr	eax, 1
  4984 0000201D 7505                    	jnz	short lff11s_8
  4985 0000201F E9B5F2FFFF              	jmp	lff11_eof
  4986                                  
  4987                                  lff11s_8:
  4988 00002024 89C1                    	mov	ecx, eax	; word count
  4989                                  lff11s_9:
  4990 00002026 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  4991                                  lff11s_1:
  4992                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  4993 0000202B 66AD                    	lodsw
  4994 0000202D 66BA8080                	mov	dx, 8080h
  4995 00002031 49                      	dec	ecx
  4996 00002032 7403                    	jz	short lff11s_2_1
  4997 00002034 668B16                  	mov	dx, [esi]
  4998                                  lff11s_2_1:	
  4999                                  	; al = [previous_val_l]
  5000                                  	; ah = [previous_val_r]
  5001                                  	; dl = [next_val_l]
  5002                                  	; dh = [next_val_r]
  5003 00002037 E87D050000              	call	interpolating_5_8bit_stereo
  5004 0000203C E3B1                    	jecxz	lff11s_3
  5005                                  lff11s_2_2:
  5006 0000203E 66AD                    	lodsw
  5007 00002040 66BA8080                	mov	dx, 8080h
  5008 00002044 49                      	dec	ecx
  5009 00002045 7403                    	jz	short lff11s_2_3
  5010 00002047 668B16                  	mov	dx, [esi]
  5011                                  lff11s_2_3:
  5012 0000204A E856060000               	call	interpolating_4_8bit_stereo
  5013 0000204F E39E                    	jecxz	lff11s_3
  5014                                  	
  5015 00002051 4D                      	dec	ebp
  5016 00002052 74D2                    	jz	short lff11s_9
  5017                                  
  5018 00002054 66AD                    	lodsw
  5019 00002056 66BA8080                	mov	dx, 8080h
  5020 0000205A 49                      	dec	ecx
  5021 0000205B 7403                    	jz	short lff11s_2_4
  5022 0000205D 668B16                  	mov	dx, [esi]
  5023                                  lff11s_2_4:
  5024 00002060 E840060000              	call	interpolating_4_8bit_stereo
  5025 00002065 E388                    	jecxz	lff11s_3
  5026 00002067 EBC2                    	jmp	short lff11s_1
  5027                                  
  5028                                  load_11khz_mono_16_bit:
  5029                                  	; 18/11/2023
  5030 00002069 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5031                                  					; last of the file?
  5032 00002070 7402                    	jz	short lff11m2_0		; no
  5033 00002072 F9                      	stc
  5034 00002073 C3                      	retn
  5035                                  
  5036                                  lff11m2_0:
  5037                                  	; 01/12/2024
  5038                                  	; edi = audio buffer address
  5039                                  	; 13/12/2024
  5040 00002074 893D[D07A0000]          	mov	[audio_buffer], edi
  5041 0000207A BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5042                                          ;mov	edx, [loadsize]
  5043                                  
  5044                                  	; esi = buffer address
  5045                                  	;; edx = buffer size
  5046                                  
  5047                                  	; load file into memory
  5048                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000207F 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002085 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002087 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000208D B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00002092 CD40                <1>  int 40h
  5049 00002094 724D                    	jc	short lff11m2_7 ; error !
  5050                                  
  5051                                  	; 01/12/2024
  5052 00002096 A3[A0850000]            	mov	[count], eax
  5053                                  
  5054                                  	;mov	edi, audio_buffer
  5055                                  	; 29/05/2024
  5056                                  	;mov	edi, [audio_buffer]
  5057                                  	
  5058 0000209B D1E8                    	shr	eax, 1
  5059 0000209D 7505                    	jnz	short lff11m2_8
  5060 0000209F E935F2FFFF              	jmp	lff11_eof
  5061                                  
  5062                                  lff11m2_8:
  5063 000020A4 89C1                    	mov	ecx, eax	; word count
  5064                                  lff11m2_9:
  5065 000020A6 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  5066                                  lff11m2_1:
  5067                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  5068 000020AB 66AD                    	lodsw
  5069 000020AD 31D2                    	xor	edx, edx
  5070 000020AF 49                      	dec	ecx
  5071 000020B0 7403                    	jz	short lff11m2_2_1
  5072 000020B2 668B16                  	mov	dx, [esi]
  5073                                  lff11m2_2_1:	
  5074                                  	; ax = [previous_val]
  5075                                  	; dx = [next_val]
  5076 000020B5 E858060000              	call	interpolating_5_16bit_mono
  5077 000020BA E368                    	jecxz	lff11m2_3
  5078                                  lff11m2_2_2:
  5079 000020BC 66AD                    	lodsw
  5080 000020BE 31D2                    	xor	edx, edx
  5081 000020C0 49                      	dec	ecx
  5082 000020C1 7403                    	jz	short lff11m2_2_3
  5083 000020C3 668B16                  	mov	dx, [esi]
  5084                                  lff11m2_2_3:
  5085 000020C6 E871070000               	call	interpolating_4_16bit_mono
  5086 000020CB E357                    	jecxz	lff11m2_3
  5087                                  
  5088 000020CD 4D                      	dec	ebp
  5089 000020CE 74D6                    	jz	short lff11m2_9
  5090                                  
  5091 000020D0 66AD                    	lodsw
  5092 000020D2 31D2                    	xor	edx, edx
  5093 000020D4 49                      	dec	ecx
  5094 000020D5 7403                    	jz	short lff11m2_2_4
  5095 000020D7 668B16                  	mov	dx, [esi]
  5096                                  lff11m2_2_4:
  5097 000020DA E85D070000               	call	interpolating_4_16bit_mono
  5098 000020DF E343                    	jecxz	lff11m2_3
  5099 000020E1 EBC8                    	jmp	short lff11m2_1
  5100                                  
  5101                                  lff11m2_7:
  5102                                  lff11s2_7:
  5103 000020E3 E9FAF1FFFF              	jmp	lff11_5  ; error
  5104                                  
  5105                                  load_11khz_stereo_16_bit:
  5106                                  	; 18/11/2023
  5107 000020E8 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5108                                  					; last of the file?
  5109 000020EF 7402                    	jz	short lff11s2_0		; no
  5110 000020F1 F9                      	stc
  5111 000020F2 C3                      	retn
  5112                                  
  5113                                  lff11s2_0:
  5114                                  	; 01/12/2024
  5115                                  	; edi = audio buffer address
  5116                                  	; 13/12/2024
  5117 000020F3 893D[D07A0000]          	mov	[audio_buffer], edi
  5118 000020F9 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5119                                          ;mov	edx, [loadsize]
  5120                                  
  5121                                  	; esi = buffer address
  5122                                  	;; edx = buffer size
  5123                                  
  5124                                  	; load file into memory
  5125                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000020FE 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002104 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002106 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000210C B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00002111 CD40                <1>  int 40h
  5126 00002113 72CE                    	jc	short lff11s2_7 ; error !
  5127                                  
  5128                                  	; 01/12/2024
  5129 00002115 A3[A0850000]            	mov	[count], eax
  5130                                  
  5131                                  	;mov	edi, audio_buffer
  5132                                  	; 29/05/2024
  5133                                  	;mov	edi, [audio_buffer]
  5134                                  	
  5135 0000211A C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  5136 0000211D 750A                    	jnz	short lff11s2_8
  5137 0000211F E9B5F1FFFF              	jmp	lff11_eof
  5138                                  
  5139                                  lff11m2_3:
  5140                                  lff11s2_3:
  5141 00002124 E998F1FFFF              	jmp	lff11_3	; padfill
  5142                                  		; (put zeros in the remain words of the buffer)
  5143                                  
  5144                                  lff11s2_8:
  5145 00002129 89C1                    	mov	ecx, eax	; dword count
  5146                                  lff11s2_9:
  5147 0000212B BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  5148                                  lff11s2_1:
  5149                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  5150 00002130 66AD                    	lodsw
  5151 00002132 89C3                    	mov	ebx, eax
  5152 00002134 66AD                    	lodsw
  5153 00002136 8B16                    	mov	edx, [esi]
  5154 00002138 8915[F6280000]          	mov	[next_val_l], edx
  5155                                  	; 26/11/2023
  5156 0000213E C1EA10                  	shr	edx, 16
  5157                                  	;mov	[next_val_r], dx
  5158 00002141 49                      	dec	ecx
  5159 00002142 7509                    	jnz	short lff11s2_2_1
  5160 00002144 31D2                    	xor	edx, edx ; 0
  5161 00002146 668915[F6280000]        	mov	[next_val_l], dx
  5162                                  	;mov	[next_val_r], dx
  5163                                  lff11s2_2_1:
  5164                                  	; bx = [previous_val_l]
  5165                                  	; ax = [previous_val_r]
  5166                                  	; [next_val_l]
  5167                                  	; dx = [next_val_r]
  5168 0000214D E81B060000              	call	interpolating_5_16bit_stereo
  5169 00002152 E3D0                    	jecxz	lff11s2_3
  5170                                  lff11s2_2_2:
  5171 00002154 66AD                    	lodsw
  5172 00002156 89C3                    	mov	ebx, eax
  5173 00002158 66AD                    	lodsw
  5174 0000215A 8B16                    	mov	edx, [esi]
  5175 0000215C 668915[F6280000]        	mov	[next_val_l], dx
  5176                                  	; 26/11/2023
  5177 00002163 C1EA10                  	shr	edx, 16
  5178                                  	;mov	[next_val_r], dx
  5179 00002166 49                      	dec	ecx
  5180 00002167 7509                    	jnz	short lff11s2_2_3
  5181 00002169 31D2                    	xor	edx, edx ; 0
  5182 0000216B 668915[F6280000]        	mov	[next_val_l], dx
  5183                                  	;mov	[next_val_r], dx
  5184                                  lff11s2_2_3:
  5185 00002172 E8FE060000               	call	interpolating_4_16bit_stereo
  5186 00002177 E3AB                    	jecxz	lff11s2_3
  5187                                  	
  5188 00002179 4D                      	dec	ebp
  5189 0000217A 74AF                    	jz	short lff11s2_9
  5190                                  
  5191 0000217C 66AD                    	lodsw
  5192 0000217E 89C3                    	mov	ebx, eax
  5193 00002180 66AD                    	lodsw
  5194 00002182 8B16                    	mov	edx, [esi]
  5195 00002184 668915[F6280000]        	mov	[next_val_l], dx
  5196                                  	; 26/11/2023
  5197 0000218B C1EA10                  	shr	edx, 16
  5198                                  	;mov	[next_val_r], dx
  5199 0000218E 49                      	dec	ecx
  5200 0000218F 7509                    	jnz	short lff11s2_2_4
  5201 00002191 31D2                    	xor	edx, edx ; 0
  5202 00002193 668915[F6280000]        	mov	[next_val_l], dx
  5203                                  	;mov	[next_val_r], dx
  5204                                  lff11s2_2_4:
  5205 0000219A E8D6060000               	call	interpolating_4_16bit_stereo
  5206 0000219F E383                    	jecxz	lff11s2_3
  5207 000021A1 EB8D                    	jmp	short lff11s2_1
  5208                                  
  5209                                  ; .....................
  5210                                  
  5211                                  load_44khz_mono_8_bit:
  5212                                  	; 18/11/2023
  5213 000021A3 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5214                                  					; last of the file?
  5215 000021AA 7402                    	jz	short lff44m_0		; no
  5216 000021AC F9                      	stc
  5217 000021AD C3                      	retn
  5218                                  
  5219                                  lff44m_0:
  5220                                  	; 01/12/2024
  5221                                  	; edi = audio buffer address
  5222                                  	; 13/12/2024
  5223 000021AE 893D[D07A0000]          	mov	[audio_buffer], edi
  5224 000021B4 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5225                                          ;mov	edx, [loadsize]
  5226                                  
  5227                                  	; esi = buffer address
  5228                                  	;; edx = buffer size
  5229                                  
  5230                                  	; load file into memory
  5231                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000021B9 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000021BF 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000021C1 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000021C7 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 000021CC CD40                <1>  int 40h
  5232 000021CE 7250                    	jc	short lff44m_7 ; error !
  5233                                  
  5234                                  	; 01/12/2024
  5235 000021D0 A3[A0850000]            	mov	[count], eax
  5236                                  
  5237                                  	;mov	edi, audio_buffer
  5238                                  	; 29/05/2024
  5239                                  	;mov	edi, [audio_buffer]
  5240                                  	
  5241 000021D5 21C0                    	and	eax, eax
  5242 000021D7 7505                    	jnz	short lff44m_8
  5243 000021D9 E9FBF0FFFF              	jmp	lff44_eof
  5244                                  
  5245                                  lff44m_8:
  5246 000021DE 89C1                    	mov	ecx, eax	; byte count
  5247                                  lff44m_9:
  5248 000021E0 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  5249 000021E5 C605[FA280000]02        	mov	byte [faz], 2  ; 2 steps/phases
  5250                                  lff44m_1:
  5251                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  5252                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  5253 000021EC AC                      	lodsb
  5254 000021ED B280                    	mov	dl, 80h
  5255 000021EF 49                      	dec	ecx
  5256 000021F0 7402                    	jz	short lff44m_2_1
  5257 000021F2 8A16                    	mov	dl, [esi]
  5258                                  lff44m_2_1:	
  5259                                  	; al = [previous_val]
  5260                                  	; dl = [next_val]
  5261 000021F4 E837020000              	call	interpolating_2_8bit_mono
  5262 000021F9 E320                    	jecxz	lff44m_3
  5263                                  lff44m_2_2:
  5264 000021FB AC                      	lodsb
  5265 000021FC 2C80                    	sub	al, 80h
  5266 000021FE 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5267 00002202 66AB                    	stosw		; (L)
  5268 00002204 66AB                    	stosw		; (R)
  5269                                  
  5270 00002206 49                      	dec	ecx
  5271 00002207 7412                    	jz	short lff44m_3
  5272 00002209 4D                      	dec	ebp
  5273 0000220A 75EF                    	jnz	short lff44m_2_2
  5274                                  	
  5275 0000220C FE0D[FA280000]          	dec	byte [faz]
  5276 00002212 74CC                    	jz	short lff44m_9 
  5277 00002214 BD0B000000              	mov	ebp, 11
  5278 00002219 EBD1                    	jmp	short lff44m_1
  5279                                  
  5280                                  lff44m_3:
  5281                                  lff44s_3:
  5282 0000221B E9A1F0FFFF              	jmp	lff44_3	; padfill
  5283                                  		; (put zeros in the remain words of the buffer)
  5284                                  lff44m_7:
  5285                                  lff44s_7:
  5286 00002220 E9BDF0FFFF              	jmp	lff44_5  ; error
  5287                                  
  5288                                  load_44khz_stereo_8_bit:
  5289                                  	; 16/11/2023
  5290 00002225 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5291                                  					; last of the file?
  5292 0000222C 7402                    	jz	short lff44s_0		; no
  5293 0000222E F9                      	stc
  5294 0000222F C3                      	retn
  5295                                  
  5296                                  lff44s_0:
  5297                                  	; 01/12/2024
  5298                                  	; edi = audio buffer address
  5299                                  	; 13/12/2024
  5300 00002230 893D[D07A0000]          	mov	[audio_buffer], edi
  5301 00002236 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5302                                          ;mov	edx, [loadsize]
  5303                                  
  5304                                  	; esi = buffer address
  5305                                  	;; edx = buffer size
  5306                                  
  5307                                  	; load file into memory
  5308                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000223B 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002241 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002243 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002249 B803000000          <1>  mov eax, %1
   103                              <1> 
   104 0000224E CD40                <1>  int 40h
  5309 00002250 72CE                    	jc	short lff44s_7 ; error !
  5310                                  
  5311                                  	; 01/12/2024
  5312 00002252 A3[A0850000]            	mov	[count], eax
  5313                                  
  5314                                  	;mov	edi, audio_buffer
  5315                                  	; 29/05/2024
  5316                                  	;mov	edi, [audio_buffer]
  5317                                  	
  5318 00002257 D1E8                    	shr	eax, 1
  5319 00002259 7505                    	jnz	short lff44s_8
  5320 0000225B E979F0FFFF              	jmp	lff44_eof
  5321                                  
  5322                                  lff44s_8:
  5323 00002260 89C1                    	mov	ecx, eax	; word count
  5324                                  lff44s_9:
  5325 00002262 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  5326 00002267 C605[FA280000]02        	mov	byte [faz], 2  ; 2 steps/phase
  5327                                  lff44s_1:
  5328                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  5329                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  5330 0000226E 66AD                    	lodsw
  5331 00002270 66BA8080                	mov	dx, 8080h
  5332 00002274 49                      	dec	ecx
  5333 00002275 7403                    	jz	short lff44s_2_1
  5334 00002277 668B16                  	mov	dx, [esi]
  5335                                  lff44s_2_1:	
  5336                                  	; al = [previous_val_l]
  5337                                  	; ah = [previous_val_r]
  5338                                  	; dl = [next_val_l]
  5339                                  	; dh = [next_val_r]
  5340 0000227A E8CE010000              	call	interpolating_2_8bit_stereo
  5341 0000227F E39A                    	jecxz	lff44s_3
  5342                                  lff44s_2_2:
  5343 00002281 AC                      	lodsb
  5344 00002282 2C80                    	sub	al, 80h
  5345 00002284 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5346 00002288 66AB                    	stosw		; (L)
  5347 0000228A AC                      	lodsb
  5348 0000228B 2C80                    	sub	al, 80h
  5349 0000228D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5350 00002291 66AB                    	stosw		; (R)
  5351                                  
  5352 00002293 49                      	dec	ecx
  5353 00002294 7485                    	jz	short lff44s_3	
  5354 00002296 4D                      	dec	ebp
  5355 00002297 75E8                    	jnz	short lff44s_2_2
  5356                                  	
  5357 00002299 FE0D[FA280000]          	dec	byte [faz]
  5358 0000229F 74C1                    	jz	short lff44s_9 
  5359 000022A1 BD0B000000              	mov	ebp, 11
  5360 000022A6 EBC6                    	jmp	short lff44s_1
  5361                                  
  5362                                  load_44khz_mono_16_bit:
  5363                                  	; 18/11/2023
  5364 000022A8 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5365                                  					; last of the file?
  5366 000022AF 7402                    	jz	short lff44m2_0		; no
  5367 000022B1 F9                      	stc
  5368 000022B2 C3                      	retn
  5369                                  
  5370                                  lff44m2_0:
  5371                                  	; 01/12/2024
  5372                                  	; edi = audio buffer address
  5373                                  	; 13/12/2024
  5374 000022B3 893D[D07A0000]          	mov	[audio_buffer], edi
  5375 000022B9 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5376                                          ;mov	edx, [loadsize]
  5377                                  
  5378                                  	; esi = buffer address
  5379                                  	;; edx = buffer size
  5380                                  
  5381                                  	; load file into memory
  5382                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 000022BE 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 000022C4 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 000022C6 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 000022CC B803000000          <1>  mov eax, %1
   103                              <1> 
   104 000022D1 CD40                <1>  int 40h
  5383 000022D3 724D                    	jc	short lff44m2_7 ; error !
  5384                                  
  5385                                  	; 01/12/2024
  5386 000022D5 A3[A0850000]            	mov	[count], eax
  5387                                  
  5388                                  	;mov	edi, audio_buffer
  5389                                  	; 29/05/2024
  5390                                  	;mov	edi, [audio_buffer]
  5391                                  	
  5392 000022DA D1E8                    	shr	eax, 1
  5393 000022DC 7505                    	jnz	short lff44m2_8
  5394 000022DE E9F6EFFFFF              	jmp	lff44_eof
  5395                                  
  5396                                  lff44m2_8:
  5397 000022E3 89C1                    	mov	ecx, eax	; word count
  5398                                  lff44m2_9:
  5399 000022E5 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  5400 000022EA C605[FA280000]02        	mov	byte [faz], 2  ; 2 steps/phases
  5401                                  lff44m2_1:
  5402                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  5403                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  5404 000022F1 66AD                    	lodsw
  5405 000022F3 31D2                    	xor	edx, edx
  5406 000022F5 49                      	dec	ecx
  5407 000022F6 7403                    	jz	short lff44m2_2_1
  5408 000022F8 668B16                  	mov	dx, [esi]
  5409                                  lff44m2_2_1:	
  5410                                  	; ax = [previous_val]
  5411                                  	; dx = [next_val]
  5412 000022FB E811020000              	call	interpolating_2_16bit_mono
  5413 00002300 E31B                    	jecxz	lff44m2_3
  5414                                  lff44m2_2_2:
  5415 00002302 66AD                    	lodsw
  5416 00002304 66AB                    	stosw		; (L)eft Channel
  5417 00002306 66AB                    	stosw		; (R)ight Channel
  5418                                  
  5419 00002308 49                      	dec	ecx
  5420 00002309 7412                    	jz	short lff44m2_3	
  5421 0000230B 4D                      	dec	ebp
  5422 0000230C 75F4                    	jnz	short lff44m2_2_2
  5423                                  	
  5424 0000230E FE0D[FA280000]          	dec	byte [faz]
  5425 00002314 74CF                    	jz	short lff44m2_9 
  5426 00002316 BD0B000000              	mov	ebp, 11
  5427 0000231B EBD4                    	jmp	short lff44m2_1
  5428                                  
  5429                                  lff44m2_3:
  5430                                  lff44s2_3:
  5431 0000231D E99FEFFFFF              	jmp	lff44_3	; padfill
  5432                                  		; (put zeros in the remain words of the buffer)
  5433                                  lff44m2_7:
  5434                                  lff44s2_7:
  5435 00002322 E9BBEFFFFF              	jmp	lff44_5  ; error
  5436                                  
  5437                                  load_44khz_stereo_16_bit:
  5438                                  	; 18/11/2023
  5439 00002327 F605[1A850000]01                test    byte [flags], ENDOFFILE	; have we already read the
  5440                                  					; last of the file?
  5441 0000232E 7402                    	jz	short lff44s2_0		; no
  5442 00002330 F9                      	stc
  5443 00002331 C3                      	retn
  5444                                  
  5445                                  lff44s2_0:
  5446                                  	; 01/12/2024
  5447                                  	; edi = audio buffer address
  5448                                  	; 13/12/2024
  5449 00002332 893D[D07A0000]          	mov	[audio_buffer], edi
  5450 00002338 BE[00A00200]            	mov	esi, temp_buffer ; temporary buffer for wav data
  5451                                          ;mov	edx, [loadsize]
  5452                                  
  5453                                  	; esi = buffer address
  5454                                  	;; edx = buffer size
  5455                                  
  5456                                  	; load file into memory
  5457                                  	sys 	_read, [filehandle], esi, [loadsize]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 0000233D 8B1D[1C850000]      <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002343 89F1                <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002345 8B15[90850000]      <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 0000234B B803000000          <1>  mov eax, %1
   103                              <1> 
   104 00002350 CD40                <1>  int 40h
  5458 00002352 72CE                    	jc	short lff44s2_7 ; error !
  5459                                  
  5460                                  	; 01/12/2024
  5461 00002354 A3[A0850000]            	mov	[count], eax
  5462                                  
  5463                                  	;mov	edi, audio_buffer
  5464                                  	; 29/05/2024
  5465                                  	;mov	edi, [audio_buffer]
  5466                                  	
  5467 00002359 C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  5468 0000235C 7505                    	jnz	short lff44s2_8
  5469 0000235E E976EFFFFF              	jmp	lff44_eof
  5470                                  
  5471                                  lff44s2_8:
  5472 00002363 89C1                    	mov	ecx, eax	; dword count
  5473                                  lff44s2_9:
  5474 00002365 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  5475 0000236A C605[FA280000]02        	mov	byte [faz], 2  ; 2 steps/phase
  5476                                  lff44s2_1:
  5477                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  5478                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  5479 00002371 66AD                    	lodsw
  5480 00002373 89C3                    	mov	ebx, eax
  5481 00002375 66AD                    	lodsw
  5482                                  	;mov	dx, [esi]
  5483                                  	;mov	[next_val_l], dx
  5484                                  	;mov	dx, [esi+2]
  5485                                  	; 26/11/2023
  5486 00002377 8B16                    	mov	edx, [esi]
  5487 00002379 668915[F6280000]        	mov	[next_val_l], dx
  5488 00002380 C1EA10                  	shr	edx, 16
  5489 00002383 49                      	dec	ecx
  5490 00002384 7509                    	jnz	short lff44s2_2_1
  5491 00002386 31D2                    	xor	edx, edx ; 0
  5492 00002388 668915[F6280000]        	mov	[next_val_l], dx
  5493                                  lff44s2_2_1:
  5494                                  	; bx = [previous_val_l]
  5495                                  	; ax = [previous_val_r]
  5496                                  	; [next_val_l]
  5497                                  	; dx = [next_val_r]
  5498 0000238F E895010000              	call	interpolating_2_16bit_stereo
  5499 00002394 E387                    	jecxz	lff44s2_3
  5500                                  lff44s2_2_2:
  5501                                  	;movsw		; (L)eft Channel
  5502                                  	;movsw		; (R)ight Channel
  5503 00002396 A5                      	movsd
  5504                                  
  5505 00002397 49                      	dec	ecx
  5506 00002398 7483                    	jz	short lff44s2_3	
  5507 0000239A 4D                      	dec	ebp
  5508 0000239B 75F9                    	jnz	short lff44s2_2_2
  5509                                  	
  5510 0000239D FE0D[FA280000]          	dec	byte [faz]
  5511 000023A3 74C0                    	jz	short lff44s2_9 
  5512 000023A5 BD0B000000              	mov	ebp, 11
  5513 000023AA EBC5                    	jmp	short lff44s2_1
  5514                                  
  5515                                  ; .....................
  5516                                  
  5517                                  interpolating_3_8bit_mono:
  5518                                  	; 16/11/2023
  5519                                  	; al = [previous_val]
  5520                                  	; dl = [next_val]
  5521                                  	; original-interpolated-interpolated
  5522 000023AC 88C3                    	mov	bl, al
  5523 000023AE 2C80                    	sub	al, 80h
  5524 000023B0 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5525 000023B4 66AB                    	stosw		; original sample (L)
  5526 000023B6 66AB                    	stosw		; original sample (R)
  5527 000023B8 88D8                    	mov	al, bl
  5528 000023BA 00D0                    	add	al, dl
  5529 000023BC D0D8                    	rcr	al, 1
  5530 000023BE 88C7                    	mov	bh, al	; interpolated middle (temporary)
  5531 000023C0 00D8                    	add	al, bl
  5532 000023C2 D0D8                    	rcr	al, 1
  5533 000023C4 2C80                    	sub	al, 80h
  5534 000023C6 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5535 000023CA 66AB                    	stosw		; interpolated sample 1 (L)
  5536 000023CC 66AB                    	stosw		; interpolated sample 1 (R)
  5537 000023CE 88F8                    	mov	al, bh
  5538 000023D0 00D0                    	add	al, dl	; [next_val]
  5539 000023D2 D0D8                    	rcr	al, 1
  5540 000023D4 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5541 000023D8 66AB                    	stosw		; interpolated sample 2 (L)
  5542 000023DA 66AB                    	stosw		; interpolated sample 2 (R)
  5543 000023DC C3                      	retn
  5544                                  
  5545                                  interpolating_3_8bit_stereo:
  5546                                  	; 16/11/2023
  5547                                  	; al = [previous_val_l]
  5548                                  	; ah = [previous_val_r]
  5549                                  	; dl = [next_val_l]
  5550                                  	; dh = [next_val_r]
  5551                                  	; original-interpolated-interpolated
  5552 000023DD 89C3                    	mov	ebx, eax
  5553 000023DF 2C80                    	sub	al, 80h
  5554 000023E1 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5555 000023E5 66AB                    	stosw		; original sample (L)
  5556 000023E7 88F8                    	mov	al, bh
  5557 000023E9 2C80                    	sub	al, 80h
  5558 000023EB 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5559 000023EF 66AB                    	stosw		; original sample (R)
  5560 000023F1 88D8                    	mov	al, bl
  5561 000023F3 00D0                    	add	al, dl	; [next_val_l]
  5562 000023F5 D0D8                    	rcr	al, 1
  5563 000023F7 50                      	push	eax ; *	; al = interpolated middle (L) (temporary)
  5564 000023F8 00D8                    	add	al, bl	; [previous_val_l]
  5565 000023FA D0D8                    	rcr	al, 1
  5566 000023FC 2C80                    	sub	al, 80h
  5567 000023FE 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5568 00002402 66AB                    	stosw		; interpolated sample 1 (L)
  5569 00002404 88F8                    	mov	al, bh
  5570 00002406 00F0                    	add	al, dh	; [next_val_r]
  5571 00002408 D0D8                    	rcr	al, 1
  5572 0000240A 50                      	push	eax ; ** ; al = interpolated middle (R) (temporary)
  5573 0000240B 00F8                    	add	al, bh	; [previous_val_r]
  5574 0000240D D0D8                    	rcr	al, 1
  5575 0000240F 2C80                    	sub	al, 80h
  5576 00002411 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5577 00002415 66AB                    	stosw		; interpolated sample 1 (R)
  5578 00002417 5B                      	pop	ebx ; **
  5579 00002418 58                      	pop	eax ; *
  5580 00002419 00D0                    	add	al, dl	; [next_val_l]
  5581 0000241B D0D8                    	rcr	al, 1
  5582 0000241D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5583 00002421 66AB                    	stosw		; interpolated sample 2 (L)
  5584 00002423 88D8                    	mov	al, bl
  5585 00002425 00F0                    	add	al, dh	; [next_val_r]
  5586 00002427 D0D8                    	rcr	al, 1
  5587 00002429 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5588 0000242D 66AB                    	stosw		; interpolated sample 2 (R)
  5589 0000242F C3                      	retn
  5590                                  
  5591                                  interpolating_2_8bit_mono:
  5592                                  	; 16/11/2023
  5593                                  	; al = [previous_val]
  5594                                  	; dl = [next_val]
  5595                                  	; original-interpolated
  5596 00002430 88C3                    	mov	bl, al
  5597 00002432 2C80                    	sub	al, 80h
  5598 00002434 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5599 00002438 66AB                    	stosw		; original sample (L)
  5600 0000243A 66AB                    	stosw		; original sample (R)
  5601 0000243C 88D8                    	mov	al, bl
  5602 0000243E 00D0                    	add	al, dl
  5603 00002440 D0D8                    	rcr	al, 1
  5604 00002442 2C80                    	sub	al, 80h
  5605 00002444 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5606 00002448 66AB                    	stosw		; interpolated sample (L)
  5607 0000244A 66AB                    	stosw		; interpolated sample (R)
  5608 0000244C C3                      	retn
  5609                                  
  5610                                  interpolating_2_8bit_stereo:
  5611                                  	; 16/11/2023
  5612                                  	; al = [previous_val_l]
  5613                                  	; ah = [previous_val_r]
  5614                                  	; dl = [next_val_l]
  5615                                  	; dh = [next_val_r]
  5616                                  	; original-interpolated
  5617 0000244D 89C3                    	mov	ebx, eax
  5618 0000244F 2C80                    	sub	al, 80h
  5619 00002451 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5620 00002455 66AB                    	stosw		; original sample (L)
  5621 00002457 88F8                    	mov	al, bh
  5622 00002459 2C80                    	sub	al, 80h
  5623 0000245B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5624 0000245F 66AB                    	stosw		; original sample (R)
  5625 00002461 88D8                    	mov	al, bl	; [previous_val_l]
  5626 00002463 00D0                    	add	al, dl	; [next_val_l]
  5627 00002465 D0D8                    	rcr	al, 1
  5628 00002467 2C80                    	sub	al, 80h
  5629 00002469 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5630 0000246D 66AB                    	stosw		; interpolated sample (L)
  5631 0000246F 88F8                    	mov	al, bh
  5632 00002471 00F0                    	add	al, dh	; [next_val_r]
  5633 00002473 D0D8                    	rcr	al, 1
  5634 00002475 2C80                    	sub	al, 80h
  5635 00002477 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5636 0000247B 66AB                    	stosw		; interpolated sample (R)
  5637 0000247D C3                      	retn
  5638                                  
  5639                                  interpolating_3_16bit_mono:
  5640                                  	; 16/11/2023
  5641                                  	; ax = [previous_val]
  5642                                  	; dx = [next_val]
  5643                                  	; original-interpolated-interpolated
  5644                                  
  5645 0000247E 66AB                    	stosw		; original sample (L)
  5646 00002480 66AB                    	stosw		; original sample (R)
  5647 00002482 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5648 00002485 50                      	push	eax ; *	; [previous_val]
  5649 00002486 80C680                  	add	dh, 80h
  5650 00002489 6601D0                  	add	ax, dx
  5651 0000248C 66D1D8                  	rcr	ax, 1
  5652 0000248F 5B                      	pop	ebx ; *
  5653 00002490 93                      	xchg	ebx, eax ; bx  = interpolated middle (temporary)
  5654 00002491 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
  5655 00002494 66D1D8                  	rcr	ax, 1
  5656 00002497 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5657 0000249A 66AB                    	stosw 		; interpolated sample 1 (L)
  5658 0000249C 66AB                    	stosw		; interpolated sample 1 (R)
  5659 0000249E 89D8                    	mov	eax, ebx
  5660 000024A0 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  5661 000024A3 66D1D8                  	rcr	ax, 1
  5662 000024A6 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5663 000024A9 66AB                    	stosw		; interpolated sample 2 (L)
  5664 000024AB 66AB                    	stosw		; interpolated sample 2 (R)
  5665 000024AD C3                      	retn
  5666                                  
  5667                                  interpolating_3_16bit_stereo:
  5668                                  	; 16/11/2023
  5669                                  	; bx = [previous_val_l]
  5670                                  	; ax = [previous_val_r]
  5671                                  	; [next_val_l]
  5672                                  	; dx = [next_val_r]
  5673                                  	; original-interpolated-interpolated
  5674                                  
  5675 000024AE 93                      	xchg	eax, ebx
  5676 000024AF 66AB                    	stosw		; original sample (L)
  5677 000024B1 93                      	xchg	eax, ebx
  5678 000024B2 66AB                    	stosw		; original sample (R)
  5679 000024B4 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5680 000024B7 50                      	push	eax ; *	; [previous_val_r]
  5681 000024B8 80C780                  	add	bh, 80h
  5682 000024BB 8005[F7280000]80        	add	byte [next_val_l+1], 80h
  5683 000024C2 66A1[F6280000]          	mov	ax, [next_val_l]
  5684 000024C8 6601D8                  	add	ax, bx	; [previous_val_l]
  5685 000024CB 66D1D8                  	rcr	ax, 1
  5686 000024CE 93                      	xchg	eax, ebx ; ax = [previous_val_l]
  5687 000024CF 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
  5688 000024D2 66D1D8                  	rcr	ax, 1
  5689 000024D5 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5690 000024D8 66AB                    	stosw 		; interpolated sample 1 (L)
  5691 000024DA 58                      	pop	eax  ; *
  5692 000024DB 80C680                  	add	dh, 80h ; convert sound level 0 to 65535 format
  5693 000024DE 52                      	push	edx  ; * ; [next_val_r]
  5694 000024DF 92                      	xchg	eax, edx
  5695 000024E0 6601D0                  	add	ax, dx	; [next_val_r] + [previous_val_r]
  5696 000024E3 66D1D8                  	rcr	ax, 1	; / 2
  5697 000024E6 50                      	push	eax ; ** ; interpolated middle (R)
  5698 000024E7 6601D0                  	add	ax, dx	; + [previous_val_r]
  5699 000024EA 66D1D8                  	rcr	ax, 1
  5700 000024ED 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5701 000024F0 66AB                    	stosw 		; interpolated sample 1 (R)
  5702 000024F2 66A1[F6280000]          	mov	ax, [next_val_l]
  5703 000024F8 6601D8                  	add	ax, bx	; + interpolated middle (L)
  5704 000024FB 66D1D8                  	rcr	ax, 1
  5705 000024FE 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5706 00002501 66AB                    	stosw 		; interpolated sample 2 (L)
  5707 00002503 58                      	pop	eax ; **
  5708 00002504 5A                      	pop	edx ; *
  5709 00002505 6601D0                  	add	ax, dx	; interpolated middle + [next_val_r]
  5710 00002508 66D1D8                  	rcr	ax, 1	; / 2
  5711 0000250B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5712 0000250E 66AB                    	stosw 		; interpolated sample 2 (L)
  5713 00002510 C3                      	retn
  5714                                  
  5715                                  interpolating_2_16bit_mono:
  5716                                  	; 16/11/2023
  5717                                  	; ax = [previous_val]
  5718                                  	; dx = [next_val]
  5719                                  	; original-interpolated
  5720                                  
  5721 00002511 66AB                    	stosw		; original sample (L)
  5722 00002513 66AB                    	stosw		; original sample (R)
  5723 00002515 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5724 00002518 80C680                  	add	dh, 80h
  5725 0000251B 6601D0                  	add	ax, dx
  5726 0000251E 66D1D8                  	rcr	ax, 1
  5727 00002521 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5728 00002524 66AB                    	stosw		; interpolated sample (L)
  5729 00002526 66AB                    	stosw		; interpolated sample (R)
  5730 00002528 C3                      	retn
  5731                                  
  5732                                  interpolating_2_16bit_stereo:
  5733                                  	; 16/11/2023
  5734                                  	; bx = [previous_val_l]
  5735                                  	; ax = [previous_val_r]
  5736                                  	; [next_val_l]
  5737                                  	; dx = [next_val_r]
  5738                                  	; original-interpolated
  5739                                  
  5740 00002529 93                      	xchg	eax, ebx
  5741 0000252A 66AB                    	stosw		; original sample (L)
  5742 0000252C 93                      	xchg	eax, ebx
  5743 0000252D 66AB                    	stosw		; original sample (R)
  5744 0000252F 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5745 00002532 80C680                  	add	dh, 80h
  5746 00002535 6601D0                  	add	ax, dx	; [previous_val_r] + [next_val_r]
  5747 00002538 66D1D8                  	rcr	ax, 1	; / 2
  5748 0000253B 50                      	push	eax ; *	; interpolated sample (R)
  5749 0000253C 66A1[F6280000]          	mov	ax, [next_val_l]
  5750 00002542 80C480                  	add	ah, 80h
  5751 00002545 80C780                  	add	bh, 80h
  5752 00002548 6601D8                  	add	ax, bx	; [next_val_l] + [previous_val_l]
  5753 0000254B 66D1D8                  	rcr	ax, 1	; / 2
  5754 0000254E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5755 00002551 66AB                    	stosw 		; interpolated sample (L)
  5756 00002553 58                      	pop	eax ; *	
  5757 00002554 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  5758 00002557 66AB                    	stosw 		; interpolated sample (R)
  5759 00002559 C3                      	retn
  5760                                  
  5761                                  interpolating_5_8bit_mono:
  5762                                  	; 17/11/2023
  5763                                  	; al = [previous_val]
  5764                                  	; dl = [next_val]
  5765                                  	; original-interpltd-interpltd-interpltd-interpltd
  5766 0000255A 88C3                    	mov	bl, al
  5767 0000255C 2C80                    	sub	al, 80h
  5768 0000255E 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5769 00002562 66AB                    	stosw		; original sample (L)
  5770 00002564 66AB                    	stosw		; original sample (R)
  5771 00002566 88D8                    	mov	al, bl
  5772 00002568 00D0                    	add	al, dl
  5773 0000256A D0D8                    	rcr	al, 1
  5774 0000256C 88C7                    	mov	bh, al	; interpolated middle (temporary)
  5775 0000256E 00D8                    	add	al, bl  ; [previous_val]
  5776 00002570 D0D8                    	rcr	al, 1 	
  5777 00002572 88C6                    	mov	dh, al	; interpolated 1st quarter (temporary)
  5778 00002574 00D8                    	add	al, bl
  5779 00002576 D0D8                    	rcr	al, 1
  5780 00002578 2C80                    	sub	al, 80h
  5781 0000257A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5782 0000257E 66AB                    	stosw		; interpolated sample 1 (L)
  5783 00002580 66AB                    	stosw		; interpolated sample 1 (R)
  5784 00002582 88F8                    	mov	al, bh
  5785 00002584 00F0                    	add	al, dh
  5786 00002586 D0D8                    	rcr	al, 1
  5787 00002588 2C80                    	sub	al, 80h
  5788 0000258A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5789 0000258E 66AB                    	stosw		; interpolated sample 2 (L)
  5790 00002590 66AB                    	stosw		; interpolated sample 2 (R)
  5791 00002592 88F8                    	mov	al, bh
  5792 00002594 00D0                    	add	al, dl	; [next_val]
  5793 00002596 D0D8                    	rcr	al, 1
  5794 00002598 88C6                    	mov	dh, al	; interpolated 3rd quarter (temporary)
  5795 0000259A 00F8                    	add	al, bh
  5796 0000259C D0D8                    	rcr	al, 1
  5797 0000259E 2C80                    	sub	al, 80h
  5798 000025A0 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5799 000025A4 66AB                    	stosw		; interpolated sample 3 (L)
  5800 000025A6 66AB                    	stosw		; interpolated sample 3 (R)
  5801 000025A8 88F0                    	mov	al, dh
  5802 000025AA 00D0                    	add	al, dl
  5803 000025AC D0D8                    	rcr	al, 1
  5804 000025AE 2C80                    	sub	al, 80h
  5805 000025B0 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5806 000025B4 66AB                    	stosw		; interpolated sample 4 (L)
  5807 000025B6 66AB                    	stosw		; interpolated sample 4 (R)
  5808 000025B8 C3                      	retn
  5809                                  
  5810                                  interpolating_5_8bit_stereo:
  5811                                  	; 17/11/2023
  5812                                  	; al = [previous_val_l]
  5813                                  	; ah = [previous_val_r]
  5814                                  	; dl = [next_val_l]
  5815                                  	; dh = [next_val_r]
  5816                                  	; original-interpltd-interpltd-interpltd-interpltd
  5817 000025B9 89C3                    	mov	ebx, eax
  5818 000025BB 2C80                    	sub	al, 80h
  5819 000025BD 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5820 000025C1 66AB                    	stosw		; original sample (L)
  5821 000025C3 88F8                    	mov	al, bh
  5822 000025C5 2C80                    	sub	al, 80h
  5823 000025C7 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5824 000025CB 66AB                    	stosw		; original sample (R)
  5825 000025CD 52                      	push	edx ; *
  5826 000025CE 88D8                    	mov	al, bl
  5827 000025D0 00D0                    	add	al, dl	; [next_val_l]
  5828 000025D2 D0D8                    	rcr	al, 1
  5829 000025D4 50                      	push	eax ; **	; al = interpolated middle (L) (temporary)
  5830 000025D5 00D8                    	add	al, bl	; [previous_val_l]
  5831 000025D7 D0D8                    	rcr	al, 1
  5832 000025D9 86D8                    	xchg	al, bl
  5833 000025DB 00D8                    	add	al, bl	; bl = interpolated 1st quarter (L) (temp)
  5834 000025DD D0D8                    	rcr	al, 1
  5835 000025DF 2C80                    	sub	al, 80h
  5836 000025E1 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5837 000025E5 66AB                    	stosw		; interpolated sample 1 (L)
  5838 000025E7 88F8                    	mov	al, bh
  5839 000025E9 00F0                    	add	al, dh	; [next_val_r]
  5840 000025EB D0D8                    	rcr	al, 1
  5841 000025ED 50                      	push	eax ; *** ; al = interpolated middle (R) (temporary)
  5842 000025EE 00F8                    	add	al, bh	; [previous_val_r]
  5843 000025F0 D0D8                    	rcr	al, 1
  5844 000025F2 86F8                    	xchg	al, bh
  5845 000025F4 00F8                    	add	al, bh	; bh = interpolated 1st quarter (R) (temp)
  5846 000025F6 D0D8                    	rcr	al, 1
  5847 000025F8 2C80                    	sub	al, 80h
  5848 000025FA 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5849 000025FE 66AB                    	stosw		; interpolated sample 1 (R)
  5850 00002600 5A                      	pop	edx ; ***
  5851 00002601 58                      	pop	eax ; **	; al = interpolated middle (L) (temporary)
  5852 00002602 86D8                    	xchg	al, bl	; al = interpolated 1st quarter (L) (temp)
  5853 00002604 00D8                    	add	al, bl	; bl = interpolated middle (L) (temporary)
  5854 00002606 D0D8                    	rcr	al, 1
  5855 00002608 2C80                    	sub	al, 80h
  5856 0000260A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5857 0000260E 66AB                    	stosw		; interpolated sample 2 (L)
  5858 00002610 88D0                    	mov	al, dl 	; interpolated middle (R) (temporary)
  5859 00002612 86F8                    	xchg	al, bh	; al = interpolated 1st quarter (R) (temp)
  5860 00002614 00F8                    	add	al, bh	; bh = interpolated middle (R) (temporary)
  5861 00002616 D0D8                    	rcr	al, 1
  5862 00002618 2C80                    	sub	al, 80h
  5863 0000261A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5864 0000261E 66AB                    	stosw		; interpolated sample 2 (R)
  5865 00002620 5A                      	pop	edx ; *
  5866 00002621 88D8                    	mov	al, bl	; interpolated middle (L) (temporary)
  5867 00002623 00D0                    	add	al, dl	; [next_val_l]
  5868 00002625 D0D8                    	rcr	al, 1
  5869 00002627 86D8                    	xchg	al, bl	; al = interpolated middle (R) (temporary)
  5870 00002629 00D8                    	add	al, bl	; bl = interpolated 3rd quarter (L) (temp)
  5871 0000262B D0D8                    	rcr	al, 1
  5872 0000262D 2C80                    	sub	al, 80h
  5873 0000262F 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5874 00002633 66AB                    	stosw		; interpolated sample 3 (L)
  5875 00002635 88F8                    	mov	al, bh	
  5876 00002637 00F0                    	add	al, dh	; interpolated middle (R) + [next_val_r]
  5877 00002639 D0D8                    	rcr	al, 1
  5878 0000263B 86F8                    	xchg	al, bh	; al = interpolated middle (R)
  5879 0000263D 00F8                    	add	al, bh	; bh = interpolated 3rd quarter (R) (temp)
  5880 0000263F D0D8                    	rcr	al, 1
  5881 00002641 2C80                    	sub	al, 80h
  5882 00002643 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5883 00002647 66AB                    	stosw		; interpolated sample 3 (R)
  5884 00002649 88D8                    	mov	al, bl
  5885 0000264B 00D0                    	add	al, dl	; [next_val_l]
  5886 0000264D D0D8                    	rcr	al, 1
  5887 0000264F 2C80                    	sub	al, 80h
  5888 00002651 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5889 00002655 66AB                    	stosw		; interpolated sample 4 (L)
  5890 00002657 88F8                    	mov	al, bh
  5891 00002659 00F0                    	add	al, dh	; [next_val_r]
  5892 0000265B D0D8                    	rcr	al, 1
  5893 0000265D 2C80                    	sub	al, 80h
  5894 0000265F 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5895 00002663 66AB                    	stosw		; interpolated sample 4 (R)
  5896 00002665 C3                      	retn
  5897                                  
  5898                                  interpolating_4_8bit_mono:
  5899                                  	; 17/11/2023
  5900                                  	; al = [previous_val]
  5901                                  	; dl = [next_val]
  5902                                  	; original-interpolated-interpolated-interpolated
  5903 00002666 88C3                    	mov	bl, al
  5904 00002668 2C80                    	sub	al, 80h
  5905 0000266A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5906 0000266E 66AB                    	stosw		; original sample (L)
  5907 00002670 66AB                    	stosw		; original sample (R)
  5908 00002672 88D8                    	mov	al, bl
  5909 00002674 00D0                    	add	al, dl	
  5910 00002676 D0D8                    	rcr	al, 1
  5911 00002678 86D8                    	xchg	al, bl  ; al = [previous_val]
  5912 0000267A 00D8                    	add	al, bl	; bl = interpolated middle (sample 2)
  5913 0000267C D0D8                    	rcr	al, 1 	
  5914 0000267E 2C80                    	sub	al, 80h
  5915 00002680 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5916 00002684 66AB                    	stosw		; interpolated sample 1 (L)
  5917 00002686 66AB                    	stosw		; interpolated sample 1 (R)
  5918 00002688 88D8                    	mov	al, bl	; interpolated middle (sample 2)
  5919 0000268A 2C80                    	sub	al, 80h
  5920 0000268C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5921 00002690 66AB                    	stosw		; interpolated sample 2 (L)
  5922 00002692 66AB                    	stosw		; interpolated sample 2 (R)
  5923 00002694 88D8                    	mov	al, bl
  5924 00002696 00D0                    	add	al, dl	; [next_val]
  5925 00002698 D0D8                    	rcr	al, 1
  5926 0000269A 2C80                    	sub	al, 80h
  5927 0000269C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5928 000026A0 66AB                    	stosw		; interpolated sample 3 (L)
  5929 000026A2 66AB                    	stosw		; interpolated sample 3 (R)
  5930 000026A4 C3                      	retn
  5931                                  
  5932                                  interpolating_4_8bit_stereo:
  5933                                  	; 17/11/2023
  5934                                  	; al = [previous_val_l]
  5935                                  	; ah = [previous_val_r]
  5936                                  	; dl = [next_val_l]
  5937                                  	; dh = [next_val_r]	
  5938                                  	; original-interpolated-interpolated-interpolated
  5939 000026A5 89C3                    	mov	ebx, eax
  5940 000026A7 2C80                    	sub	al, 80h
  5941 000026A9 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5942 000026AD 66AB                    	stosw		; original sample (L)
  5943 000026AF 88F8                    	mov	al, bh
  5944 000026B1 2C80                    	sub	al, 80h
  5945 000026B3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5946 000026B7 66AB                    	stosw		; original sample (R)
  5947 000026B9 88D8                    	mov	al, bl
  5948 000026BB 00D0                    	add	al, dl	; [next_val_l]
  5949 000026BD D0D8                    	rcr	al, 1
  5950 000026BF 86D8                    	xchg	al, bl	; al = [previous_val_l]
  5951 000026C1 00D8                    	add	al, bl	; bl = interpolated middle (L) (sample 2)
  5952 000026C3 D0D8                    	rcr	al, 1
  5953 000026C5 2C80                    	sub	al, 80h
  5954 000026C7 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5955 000026CB 66AB                    	stosw		; interpolated sample 1 (L)
  5956 000026CD 88F8                    	mov	al, bh
  5957 000026CF 00F0                    	add	al, dh	; [next_val_r]
  5958 000026D1 D0D8                    	rcr	al, 1
  5959 000026D3 86F8                    	xchg	al, bh	; al = [previous_val_h]
  5960 000026D5 00F8                    	add	al, bh	; bh = interpolated middle (R) (sample 2)
  5961 000026D7 D0D8                    	rcr	al, 1
  5962 000026D9 2C80                    	sub	al, 80h
  5963 000026DB 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5964 000026DF 66AB                    	stosw		; interpolated sample 1 (R)
  5965 000026E1 88D8                    	mov	al, bl	; interpolated middle (L) (sample 2)
  5966 000026E3 2C80                    	sub	al, 80h
  5967 000026E5 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5968 000026E9 66AB                    	stosw		; interpolated sample 2 (L)
  5969 000026EB 88F8                    	mov	al, bh	; interpolated middle (L) (sample 2)
  5970 000026ED 2C80                    	sub	al, 80h
  5971 000026EF 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5972 000026F3 66AB                    	stosw		; interpolated sample 2 (L)
  5973 000026F5 88D8                    	mov	al, bl
  5974 000026F7 00D0                    	add	al, dl	; [next_val_l]
  5975 000026F9 D0D8                    	rcr	al, 1
  5976 000026FB 2C80                    	sub	al, 80h
  5977 000026FD 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5978 00002701 66AB                    	stosw		; interpolated sample 3 (L)
  5979 00002703 88F8                    	mov	al, bh
  5980 00002705 00F0                    	add	al, dh	; [next_val_r]
  5981 00002707 D0D8                    	rcr	al, 1
  5982 00002709 2C80                    	sub	al, 80h
  5983 0000270B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  5984 0000270F 66AB                    	stosw		; interpolated sample 3 (R)
  5985 00002711 C3                      	retn
  5986                                  
  5987                                  interpolating_5_16bit_mono:
  5988                                  	; 18/11/2023
  5989                                  	; ax = [previous_val]
  5990                                  	; dx = [next_val]
  5991                                  	; original-interpltd-interpltd-interpltd-interpltd
  5992 00002712 66AB                    	stosw		; original sample (L)
  5993 00002714 66AB                    	stosw		; original sample (R)
  5994 00002716 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  5995 00002719 89C3                    	mov	ebx, eax ; [previous_val]
  5996 0000271B 80C680                  	add	dh, 80h
  5997 0000271E 6601D0                  	add	ax, dx
  5998 00002721 66D1D8                  	rcr	ax, 1
  5999 00002724 50                      	push	eax ; *	; interpolated middle (temporary)
  6000 00002725 6601D8                  	add	ax, bx	; interpolated middle + [previous_val] 
  6001 00002728 66D1D8                  	rcr	ax, 1
  6002 0000272B 50                      	push	eax ; **	; interpolated 1st quarter (temporary)
  6003 0000272C 6601D8                  	add	ax, bx	; 1st quarter + [previous_val]
  6004 0000272F 66D1D8                  	rcr	ax, 1	
  6005 00002732 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6006 00002735 66AB                    	stosw 		; interpolated sample 1 (L)
  6007 00002737 66AB                    	stosw		; interpolated sample 1 (R)
  6008 00002739 58                      	pop	eax ; **
  6009 0000273A 5B                      	pop	ebx ; *
  6010 0000273B 6601D8                  	add	ax, bx	; 1st quarter + middle
  6011 0000273E 66D1D8                  	rcr	ax, 1	; / 2
  6012 00002741 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again	
  6013 00002744 66AB                    	stosw		; interpolated sample 2 (L)
  6014 00002746 66AB                    	stosw		; interpolated sample 2 (R)
  6015 00002748 89D8                    	mov	eax, ebx
  6016 0000274A 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  6017 0000274D 66D1D8                  	rcr	ax, 1
  6018 00002750 50                      	push	eax ; *	; interpolated 3rd quarter (temporary)
  6019 00002751 6601D8                  	add	ax, bx	; + interpolated middle
  6020 00002754 66D1D8                  	rcr	ax, 1
  6021 00002757 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6022 0000275A 66AB                    	stosw		; interpolated sample 3 (L)
  6023 0000275C 66AB                    	stosw		; interpolated sample 3 (R)
  6024 0000275E 58                      	pop	eax ; *	
  6025 0000275F 6601D0                  	add	ax, dx	; 3rd quarter + [next_val]
  6026 00002762 66D1D8                  	rcr	ax, 1	; / 2
  6027 00002765 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6028 00002768 66AB                    	stosw		; interpolated sample 4 (L)
  6029 0000276A 66AB                    	stosw		; interpolated sample 4 (R)
  6030 0000276C C3                      	retn
  6031                                  
  6032                                  interpolating_5_16bit_stereo:
  6033                                  	; 18/11/2023
  6034                                  	; bx = [previous_val_l]
  6035                                  	; ax = [previous_val_r]
  6036                                  	; [next_val_l]
  6037                                  	; [next_val_r]
  6038                                  	; original-interpltd-interpltd-interpltd-interpltd
  6039 0000276D 51                      	push	ecx ; !
  6040 0000276E 93                      	xchg	eax, ebx
  6041 0000276F 66AB                    	stosw		; original sample (L)
  6042 00002771 93                      	xchg	eax, ebx
  6043 00002772 66AB                    	stosw		; original sample (R)
  6044 00002774 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  6045 00002777 50                      	push	eax ; *	; [previous_val_r]
  6046 00002778 80C780                  	add	bh, 80h
  6047 0000277B 8005[F7280000]80        	add	byte [next_val_l+1], 80h
  6048 00002782 66A1[F6280000]          	mov	ax, [next_val_l]
  6049 00002788 6601D8                  	add	ax, bx	; [previous_val_l]
  6050 0000278B 66D1D8                  	rcr	ax, 1
  6051 0000278E 89C1                    	mov	ecx, eax ; interpolated middle (L)
  6052 00002790 6601D8                  	add	ax, bx	
  6053 00002793 66D1D8                  	rcr	ax, 1
  6054 00002796 89C2                    	mov	edx, eax ; interpolated 1st quarter (L)
  6055 00002798 6601D8                  	add	ax, bx	; [previous_val_l]
  6056 0000279B 66D1D8                  	rcr	ax, 1
  6057 0000279E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6058 000027A1 66AB                    	stosw 		; interpolated sample 1 (L)
  6059 000027A3 89C8                    	mov	eax, ecx
  6060 000027A5 6601D0                  	add	ax, dx	; middle (L) + 1st quarter (L)
  6061 000027A8 66D1D8                  	rcr	ax, 1	; / 2
  6062 000027AB 89C3                    	mov	ebx, eax  ; interpolated sample 2 (L)
  6063 000027AD 5A                      	pop	edx ; *	; [previous_val_r]
  6064 000027AE 89D0                    	mov	eax, edx
  6065 000027B0 8005[F9280000]80        	add	byte [next_val_r+1], 80h
  6066 000027B7 660305[F8280000]        	add	ax, [next_val_r]
  6067 000027BE 66D1D8                  	rcr	ax, 1
  6068 000027C1 50                      	push	eax ; *	; interpolated middle (R)
  6069 000027C2 6601D0                  	add	ax, dx
  6070 000027C5 66D1D8                  	rcr	ax, 1
  6071 000027C8 50                      	push	eax ; ** ; interpolated 1st quarter (R)
  6072 000027C9 6601D0                  	add	ax, dx	; [previous_val_r]
  6073 000027CC 66D1D8                  	rcr	ax, 1
  6074 000027CF 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6075 000027D2 66AB                    	stosw 		; interpolated sample 1 (R)
  6076 000027D4 89D8                    	mov	eax, ebx
  6077 000027D6 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6078 000027D9 66AB                    	stosw 		; interpolated sample 2 (L)
  6079 000027DB 58                      	pop	eax ; **
  6080 000027DC 5A                      	pop	edx ; *
  6081 000027DD 6601D0                  	add	ax, dx	; 1st quarter (R) + middle (R)
  6082 000027E0 66D1D8                  	rcr	ax, 1	; / 2
  6083 000027E3 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6084 000027E6 66AB                    	stosw 		; interpolated sample 2 (R)
  6085 000027E8 89C8                    	mov	eax, ecx
  6086 000027EA 660305[F6280000]        	add	ax, [next_val_l]
  6087 000027F1 66D1D8                  	rcr	ax, 1
  6088 000027F4 50                      	push	eax ; * ; interpolated 3rd quarter (L)
  6089 000027F5 6601C8                  	add	ax, cx	; interpolated middle (L)
  6090 000027F8 66D1D8                  	rcr	ax, 1
  6091 000027FB 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6092 000027FE 66AB                    	stosw 		; interpolated sample 3 (L)
  6093 00002800 89D0                    	mov	eax, edx
  6094 00002802 660305[F8280000]        	add	ax, [next_val_r]
  6095 00002809 66D1D8                  	rcr	ax, 1
  6096 0000280C 50                      	push	eax ; ** ; interpolated 3rd quarter (R)
  6097 0000280D 6601D0                  	add	ax, dx	; interpolated middle (R)
  6098 00002810 66D1D8                  	rcr	ax, 1
  6099 00002813 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6100 00002816 66AB                    	stosw 		; interpolated sample 3 (R)
  6101 00002818 5B                      	pop	ebx ; **
  6102 00002819 58                      	pop	eax ; *
  6103 0000281A 660305[F6280000]        	add	ax, [next_val_l]
  6104 00002821 66D1D8                  	rcr	ax, 1
  6105 00002824 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6106 00002827 66AB                    	stosw 		; interpolated sample 4 (L)
  6107 00002829 89D8                    	mov	eax, ebx
  6108 0000282B 660305[F8280000]        	add	ax, [next_val_r]
  6109 00002832 66D1D8                  	rcr	ax, 1
  6110 00002835 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6111 00002838 66AB                    	stosw 		; interpolated sample 4 (R)
  6112 0000283A 59                      	pop	ecx ; !
  6113 0000283B C3                      	retn
  6114                                  
  6115                                  interpolating_4_16bit_mono:
  6116                                  	; 18/11/2023
  6117                                  	; ax = [previous_val]
  6118                                  	; dx = [next_val]
  6119                                  	; original-interpolated
  6120                                  
  6121 0000283C 66AB                    	stosw		; original sample (L)
  6122 0000283E 66AB                    	stosw		; original sample (R)
  6123 00002840 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  6124 00002843 89C3                    	mov	ebx, eax ; [previous_val]
  6125 00002845 80C680                  	add	dh, 80h
  6126 00002848 6601D0                  	add	ax, dx	; [previous_val] + [next_val]
  6127 0000284B 66D1D8                  	rcr	ax, 1
  6128 0000284E 93                      	xchg	eax, ebx
  6129 0000284F 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
  6130 00002852 66D1D8                  	rcr	ax, 1
  6131 00002855 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6132 00002858 66AB                    	stosw 		; interpolated sample 1 (L)
  6133 0000285A 66AB                    	stosw		; interpolated sample 1 (R)
  6134 0000285C 89D8                    	mov	eax, ebx ; interpolated middle
  6135 0000285E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6136 00002861 66AB                    	stosw 		; interpolated sample 2 (L)
  6137 00002863 66AB                    	stosw		; interpolated sample 2 (R)
  6138 00002865 89D8                    	mov	eax, ebx
  6139 00002867 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  6140 0000286A 66D1D8                  	rcr	ax, 1
  6141 0000286D 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6142 00002870 66AB                    	stosw		; interpolated sample 3 (L)
  6143 00002872 66AB                    	stosw		; interpolated sample 3 (R)
  6144 00002874 C3                      	retn
  6145                                  
  6146                                  interpolating_4_16bit_stereo:
  6147                                  	; 18/11/2023
  6148                                  	; bx = [previous_val_l]
  6149                                  	; ax = [previous_val_r]
  6150                                  	; [next_val_l]
  6151                                  	; [next_val_r]
  6152                                  	; original-interpolated-interpolated-interpolated
  6153 00002875 93                      	xchg	eax, ebx
  6154 00002876 66AB                    	stosw		; original sample (L)
  6155 00002878 93                      	xchg	eax, ebx
  6156 00002879 66AB                    	stosw		; original sample (R)
  6157 0000287B 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  6158 0000287E 89C2                    	mov	edx, eax ; [previous_val_r]
  6159 00002880 80C780                  	add	bh, 80h
  6160 00002883 8005[F7280000]80        	add	byte [next_val_l+1], 80h
  6161 0000288A 66A1[F6280000]          	mov	ax, [next_val_l]
  6162 00002890 6601D8                  	add	ax, bx	; [previous_val_l]
  6163 00002893 66D1D8                  	rcr	ax, 1
  6164 00002896 93                      	xchg	eax, ebx
  6165 00002897 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
  6166 0000289A 66D1D8                  	rcr	ax, 1
  6167 0000289D 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6168 000028A0 66AB                    	stosw 		; interpolated sample 1 (L)
  6169 000028A2 8005[F9280000]80        	add	byte [next_val_r+1], 80h
  6170 000028A9 89D0                    	mov	eax, edx ; [previous_val_r]
  6171 000028AB 660305[F8280000]        	add	ax, [next_val_r]
  6172 000028B2 66D1D8                  	rcr	ax, 1
  6173 000028B5 92                      	xchg	eax, edx
  6174 000028B6 6601D0                  	add	ax, dx	; dx = interpolated middle (R)
  6175 000028B9 66D1D8                  	rcr	ax, 1
  6176 000028BC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6177 000028BF 66AB                    	stosw 		; interpolated sample 1 (R)
  6178 000028C1 89D8                    	mov	eax, ebx
  6179 000028C3 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6180 000028C6 66AB                    	stosw 		; interpolated sample 2 (L)
  6181 000028C8 89D0                    	mov	eax, edx
  6182 000028CA 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6183 000028CD 66AB                    	stosw 		; interpolated sample 2 (R)
  6184 000028CF 89D8                    	mov	eax, ebx
  6185 000028D1 660305[F6280000]        	add	ax, [next_val_l]
  6186 000028D8 66D1D8                  	rcr	ax, 1
  6187 000028DB 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6188 000028DE 66AB                    	stosw 		; interpolated sample 3 (L)
  6189 000028E0 89D0                    	mov	eax, edx
  6190 000028E2 660305[F8280000]        	add	ax, [next_val_r]
  6191 000028E9 66D1D8                  	rcr	ax, 1
  6192 000028EC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  6193 000028EF 66AB                    	stosw 		; interpolated sample 3 (R)
  6194 000028F1 C3                      	retn
  6195                                  
  6196                                  ; 13/11/2023
  6197                                  previous_val:
  6198 000028F2 0000                    previous_val_l: dw 0
  6199 000028F4 0000                    previous_val_r: dw 0
  6200                                  next_val:
  6201 000028F6 0000                    next_val_l: dw 0
  6202 000028F8 0000                    next_val_r: dw 0
  6203                                  
  6204                                  ; 16/11/2023
  6205 000028FA 00                      faz:	db 0
  6206                                  
  6207                                  ; --------------------------------------------------------
  6208                                  ; 14/11/2024 - Erdogan Tan
  6209                                  ; --------------------------------------------------------
  6210                                  
  6211                                  	; 07/12/2024
  6212                                  	; 01/12/2024 (32bit registers)
  6213                                  	; 29/11/2024
  6214                                  checkUpdateEvents:
  6215 000028FB E8FC010000              	call	check4keyboardstop
  6216 00002900 7279                    	jc	short c4ue_ok
  6217                                  
  6218                                  	; 18/11/2024
  6219 00002902 50                      	push	eax ; *
  6220 00002903 09C0                    	or	eax, eax
  6221 00002905 0F8406010000            	jz	c4ue_cpt
  6222                                  
  6223                                  	; 18/11/2024
  6224 0000290B 3C20                    	cmp	al, 20h ; SPACE (spacebar) ; pause/play
  6225 0000290D 7543                    	jne	short c4ue_chk_s
  6226 0000290F 803D[D4840000]00        	cmp	byte [stopped], 0
  6227 00002916 7714                    	ja	short c4ue_chk_ps
  6228                                  	; pause
  6229 00002918 E805E5FFFF              	call	ac97_pause
  6230                                  	; 21/11/2024
  6231 0000291D A0[D5840000]            	mov	al, [tLO]
  6232 00002922 A2[D6840000]            	mov	byte [tLP], al
  6233 00002927 E9E5000000              	jmp	c4ue_cpt
  6234                                  c4ue_chk_ps:
  6235 0000292C 803D[D4840000]01        	cmp	byte [stopped], 1
  6236 00002933 770A                    	ja	short c4ue_replay
  6237                                  	; continue to play (after a pause)
  6238 00002935 E8F1E4FFFF              	call	ac97_play 
  6239 0000293A E9D2000000              	jmp	c4ue_cpt
  6240                                  c4ue_replay:
  6241                                  	; 19/11/2024
  6242 0000293F 58                      	pop	eax ; *
  6243 00002940 58                      	pop	eax ; return address
  6244                                  	; 07/02/2024
  6245                                  	;mov	al, [volume]
  6246                                  	;call	SetmasterVolume
  6247 00002941 C605[D4840000]00        	mov	byte [stopped], 0
  6248 00002948 E8C9040000              	call	move_to_beginning
  6249                                  	;jmp	PlayWav
  6250                                  	; 07/12/2024
  6251 0000294D E9EADDFFFF              	jmp	RePlayWav
  6252                                  
  6253                                  c4ue_chk_s:
  6254 00002952 3C53                    	cmp	al, 'S'	; stop
  6255 00002954 7526                    	jne	short c4ue_chk_fb
  6256 00002956 803D[D4840000]00        	cmp	byte [stopped], 0
  6257 0000295D 0F87AE000000            	ja	c4ue_cpt ; Already stopped/paused
  6258 00002963 E8A1E4FFFF              	call	ac97_stop
  6259                                  	; 19/11/2024
  6260 00002968 C605[D5840000]00        	mov	byte [tLO], 0
  6261                                  	; 21/11/2024
  6262 0000296F C605[D6840000]30        	mov	byte [tLP], '0'
  6263 00002976 E996000000              	jmp	c4ue_cpt
  6264                                  
  6265                                  	; 01/12/2024
  6266                                  	; 18/11/2024
  6267                                  c4ue_ok:
  6268 0000297B C3                      	retn
  6269                                  
  6270                                  c4ue_chk_fb:
  6271                                  	; 17/11/2024
  6272 0000297C 3C46                    	cmp	al, 'F'
  6273 0000297E 750A                    	jne	short c4ue_chk_b
  6274 00002980 E869040000              	call 	Player_ProcessKey_Forwards
  6275 00002985 E987000000              	jmp	c4ue_cpt
  6276                                  
  6277                                  c4ue_chk_b:
  6278 0000298A 3C42                    	cmp	al, 'B'
  6279                                  	;;jne	short c4ue_cpt
  6280                                  	; 19/11/2024
  6281                                  	;jne	short c4ue_chk_h
  6282                                  	; 25/12/2024
  6283                                  	; 29/11/2024
  6284 0000298C 7507                    	jne	short c4ue_chk_n
  6285 0000298E E857040000              	call 	Player_ProcessKey_Backwards
  6286 00002993 EB7C                    	jmp	short c4ue_cpt
  6287                                  
  6288                                  	;;;
  6289                                  	; 25/12/2024
  6290                                  	; 29/11/2024
  6291                                  c4ue_chk_n:
  6292 00002995 3C4E                    	cmp	al, 'N'
  6293 00002997 7404                    	je	short c4ue_nps
  6294                                  c4ue_chk_p:
  6295 00002999 3C50                    	cmp	al, 'P'
  6296 0000299B 7509                    	jne	short c4ue_chk_h
  6297                                  c4ue_nps:
  6298 0000299D C605[D4840000]03        	mov	byte [stopped], 3
  6299 000029A4 EB6B                    	jmp	short c4ue_cpt
  6300                                  	;;;
  6301                                  
  6302                                  c4ue_chk_h:
  6303                                  	; 19/11/2024
  6304 000029A6 3C48                    	cmp	al, 'H'
  6305 000029A8 7515                    	jne	short c4ue_chk_cr
  6306 000029AA C605[D7840000]00        	mov	byte [wleds], 0
  6307 000029B1 E803E6FFFF              	call 	write_ac97_pci_dev_info
  6308                                  	;;;
  6309                                  	;24/12/2024 (wave lighting points option)
  6310 000029B6 C605[E6840000]01        	mov	byte [p_mode], 1
  6311                                  	;;;
  6312                                  	;mov	dh, 24
  6313                                  	;mov	dl, 79
  6314                                  	;call	setCursorPosition
  6315                                  	; 21/12/2024
  6316 000029BD EB52                    	jmp	short c4ue_cpt
  6317                                  c4ue_chk_cr:
  6318                                  	;;;
  6319                                  	; 24/12/2024 (wave lighting points option)
  6320 000029BF 8A25[D7840000]          	mov	ah, [wleds]
  6321 000029C5 3C47                    	cmp	al, 'G'
  6322 000029C7 7432                    	je	short c4ue_g
  6323                                  ;	;;;
  6324                                  ;	; 26/12/2024
  6325                                  ;	cmp	al, 'T'
  6326                                  ;	jne	short c4ue_chk_cr_@
  6327                                  ;	inc	byte [tcolor]
  6328                                  ;	and 	byte [tcolor], 0Fh
  6329                                  ;	jnz	short c4ue_cpt
  6330                                  ;	inc	byte [tcolor]
  6331                                  ;	jmp	short c4ue_cpt
  6332                                  ;c4ue_chk_cr_@:
  6333                                  ;	;;;
  6334                                  	; 19/11/2024
  6335 000029C9 3C0D                    	cmp	al, 0Dh ; ENTER/CR key
  6336 000029CB 7544                    	jne	short c4ue_cpt
  6337                                  	;inc	byte [wleds]
  6338                                  	;jnz	short c4ue_cpt
  6339                                  	;inc	byte [wleds]
  6340                                  	;;;
  6341                                  	; 24/12/2024
  6342                                  	; 22/12/2024 (faster method)
  6343                                  	; (UpdateWaveLeds procedure turns off previously
  6344                                  	;  lighting wave leds only)
  6345                                  	;call	reset_wave_leds ; prepare all leds as turned off
  6346                                  	;;;
  6347                                  	; 23/11/2024
  6348 000029CD 31DB                    	xor	ebx, ebx
  6349                                  	; 24/12/2024 (wave lighting points option)
  6350 000029CF 881D[E6840000]          	mov	[p_mode], bl ; 0
  6351                                  	;
  6352                                  	;mov	bl, [wleds]
  6353 000029D5 88E3                    	mov	bl, ah ; 24/12/2024
  6354 000029D7 FEC3                    	inc	bl
  6355 000029D9 80E30F                  	and	bl, 0Fh
  6356 000029DC 7501                    	jnz	short c4ue_sc
  6357 000029DE 43                      	inc	ebx
  6358                                  c4ue_sc:
  6359 000029DF 881D[D7840000]          	mov	[wleds], bl
  6360 000029E5 D0EB                    	shr	bl, 1
  6361 000029E7 8A83[6D470000]          	mov	al, [ebx+colors]
  6362                                  	; 24/12/2024
  6363 000029ED A2[75470000]            	mov	[ccolor], al
  6364 000029F2 7211                    	jc	short c4ue_g_@
  6365                                  	; 24/12/2024
  6366 000029F4 E867040000              	call	reset_wave_leds ; prepare all leds as turned off
  6367 000029F9 EB16                    	jmp	short c4ue_cpt
  6368                                  	; 24/12/2024
  6369                                  c4ue_g:
  6370 000029FB 08E4                    	or	ah, ah	; byte [wleds]
  6371 000029FD 7506                    	jnz	short c4ue_g_@
  6372 000029FF FE05[D7840000]          	inc	byte [wleds]	; force wave lighting ('G' key)
  6373                                  c4ue_g_@:
  6374                                  	; 24/12/2024 (wave lighting points option)
  6375 00002A05 C605[E6840000]01        	mov	byte [p_mode], 1
  6376 00002A0C E834040000              	call	clear_window
  6377                                  	;;;
  6378                                  c4ue_cpt:
  6379                                  	; 24/12/2024
  6380                                  	; 18/11/2024
  6381 00002A11 59                      	pop	ecx ; *
  6382                                  	;;;
  6383                                  	; 29/12/2024
  6384                                  	; 24/12/2024 (skip wave lighting if data is not loaded yet)
  6385                                  	;cmp	byte [SRB], 0
  6386                                  	;ja	short c4ue_vb_ok
  6387                                  	;;;
  6388                                  	; 01/12/2024 (TRDOS 386)
  6389                                  	sys	_time, 4 ; get timer ticks (18.2 ticks/second),
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002A12 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 00002A17 B80D000000          <1>  mov eax, %1
   103                              <1> 
   104 00002A1C CD40                <1>  int 40h
  6390                                  	; 24/12/2024
  6391                                  	; 18/11/2024
  6392                                  	;pop	ecx ; *
  6393                                  	; 01/12/2024
  6394 00002A1E 3B05[A8850000]          	cmp	eax, [timerticks]
  6395                                  	;je	short c4ue_ok
  6396                                  	; 18/11/2024
  6397 00002A24 7407                    	je	short c4ue_skip_utt
  6398                                  c4ue_utt:	
  6399                                  	; 01/12/2024
  6400 00002A26 A3[A8850000]            	mov	[timerticks], eax
  6401 00002A2B EB04                    	jmp	short c4ue_cpt_@
  6402                                  c4ue_skip_utt:
  6403                                  	; 18/11/2024
  6404 00002A2D 21C9                    	and	ecx, ecx
  6405 00002A2F 7432                    	jz	short c4ue_vb_ok
  6406                                  c4ue_cpt_@:
  6407                                  	; 18/11/2024
  6408 00002A31 803D[D4840000]00        	cmp	byte [stopped], 0
  6409 00002A38 7729                    	ja	short c4ue_vb_ok
  6410                                  	
  6411 00002A3A E8EE010000              	call	CalcProgressTime
  6412                                  
  6413                                  	;cmp	ax, [ProgressTime]
  6414                                  	; 01/12/2024
  6415 00002A3F 3B05[9C850000]          	cmp	eax, [ProgressTime]
  6416                                  	;je	short c4ue_vb_ok
  6417                                  			; same second, no need to update
  6418                                  	; 23/11/2024
  6419 00002A45 7405                    	je	short c4ue_uvb
  6420                                  
  6421                                  	;call	UpdateProgressTime
  6422                                  	;call	UpdateProgressBar@
  6423 00002A47 E812030000              	call	UpdateProgressBar
  6424                                  
  6425                                  	; 23/11/2024
  6426                                  c4ue_uvb:
  6427 00002A4C 803D[D7840000]00        	cmp	byte [wleds], 0
  6428 00002A53 760E                    	jna	short c4ue_vb_ok
  6429                                  
  6430                                  	; 24/12/2024 (wave points mode)
  6431 00002A55 803D[E6840000]00        	cmp	byte [p_mode], 0
  6432 00002A5C 7706                    	ja	short c4ue_uwp
  6433                                  
  6434 00002A5E E847040000              	call	UpdateWaveLeds
  6435                                  
  6436                                  c4ue_vb_ok:
  6437 00002A63 C3                      	retn
  6438                                  
  6439                                  	; 22/12/2024
  6440                                  c4ue_uwp:
  6441                                  	;call	UpdateWavePoints
  6442                                  	;retn
  6443                                  
  6444                                  ; --------------------------------------------------------
  6445                                  ; 27/12/2024 - Erdogan Tan
  6446                                  ; --------------------------------------------------------
  6447                                  
  6448                                  	; 29/12/2024
  6449                                  	; 27/12/2024 (DMA Buffer Tracking)
  6450                                  	; 26/12/2024
  6451                                  	; 24/12/2024
  6452                                  UpdateWavePoints:
  6453 00002A64 BE[D47A0000]            	mov	esi, prev_points
  6454 00002A69 833E00                  	cmp	dword [esi], 0
  6455 00002A6C 740B                    	jz	short lights_off_ok
  6456 00002A6E B980020000              	mov	ecx, 640
  6457                                  light_off:
  6458 00002A73 AD                      	lodsd
  6459                                  	; eax = wave point (lighting point) address
  6460 00002A74 C60000                  	mov	byte [eax], 0 ; black point (light off)
  6461 00002A77 E2FA                    	loop	light_off	
  6462                                  
  6463                                  lights_off_ok:
  6464                                  	; 29/12/2024
  6465 00002A79 803D[D5840000]32        	cmp	byte [tLO],'2'
  6466 00002A80 7507                    	jne	short lights_on_buff_1
  6467                                  lights_on_buff_2:
  6468 00002A82 BA[00A00100]            	mov	edx, WAVBUFFER_2
  6469 00002A87 EB05                    	jmp	short lights_on
  6470                                  lights_on_buff_1:
  6471 00002A89 BA[00A00000]            	mov	edx, WAVBUFFER_1
  6472                                  lights_on:
  6473 00002A8E 3915[E0840000]          	cmp	[pbuf_s], edx
  6474 00002A94 7520                    	jne	short lights_on_2
  6475 00002A96 8B1D[B87A0000]          	mov	ebx, [wpoints_dif]
  6476 00002A9C 8B35[DC840000]          	mov	esi, [pbuf_o]
  6477 00002AA2 8B0D[94850000]          	mov	ecx, [buffersize] ; bytes
  6478 00002AA8 29D9                    	sub	ecx, ebx ; sub ecx, [wpoints_dif]
  6479 00002AAA 01DE                    	add	esi, ebx
  6480 00002AAC 7204                    	jc	short lights_on_1
  6481 00002AAE 39CE                    	cmp	esi, ecx
  6482 00002AB0 760C                    	jna	short lights_on_3
  6483                                  lights_on_1:
  6484 00002AB2 89CE                    	mov	esi, ecx
  6485 00002AB4 EB08                    	jmp	short lights_on_3
  6486                                  
  6487                                  lights_on_2:
  6488                                  	; 29/12/2024
  6489 00002AB6 8915[E0840000]          	mov	[pbuf_s], edx
  6490 00002ABC 31F6                    	xor	esi, esi ; 0
  6491                                  lights_on_3:
  6492 00002ABE 8935[DC840000]          	mov	[pbuf_o], esi
  6493                                  	; 29/12/2024
  6494                                  	;add	esi, [pbuf_s]
  6495 00002AC4 01D6                    	add	esi, edx
  6496 00002AC6 B980020000              	mov	ecx, 640
  6497 00002ACB 89CD                    	mov	ebp, ecx
  6498                                  	; 26/12/2024
  6499 00002ACD BF[D47A0000]            	mov	edi, prev_points
  6500 00002AD2 8B1D[BC7A0000]          	mov	ebx, [graphstart] ; start (top) line
  6501                                  lights_on_4:
  6502 00002AD8 31C0                    	xor	eax, eax ; 0
  6503 00002ADA 66AD                    	lodsw	; left
  6504 00002ADC 80C480                  	add	ah, 80h
  6505 00002ADF 89C2                    	mov	edx, eax
  6506 00002AE1 66AD                    	lodsw	; right
  6507                                  	;add	ax, dx
  6508 00002AE3 80C480                  	add	ah, 80h
  6509                                  	;shr	eax, 9	; 128 volume levels
  6510 00002AE6 01D0                    	add	eax, edx
  6511                                  	;shr	eax, 10	; (L+R/2) & 128 volume levels
  6512 00002AE8 C1E809                  	shr	eax, 9	; (L+R/2) & 256 volume levels
  6513 00002AEB F7E5                    	mul	ebp	; * 640 (row)
  6514 00002AED 01D8                    	add	eax, ebx ; + column
  6515 00002AEF 8A15[75470000]          	mov	dl, [ccolor]
  6516 00002AF5 8810                    	mov	[eax], dl ; pixel (light on) color
  6517 00002AF7 AB                      	stosd		; save light on addr in prev_points
  6518 00002AF8 43                      	inc	ebx
  6519 00002AF9 E2DD                    	loop	lights_on_4
  6520 00002AFB C3                      	retn
  6521                                  
  6522                                  ; --------------------------------------------------------
  6523                                  ; 19/05/2024 - (playwav4.asm) ich_wav4.asm
  6524                                  ; --------------------------------------------------------
  6525                                  
  6526                                  	; 29/12/2024
  6527                                  	; 25/12/2024
  6528                                  	; 07/12/2024
  6529                                  	; 01/12/2024 (TRDOS 386)
  6530                                  	; 29/11/2024
  6531                                  check4keyboardstop:
  6532                                  	; 19/05/2024
  6533                                  	; 08/11/2023
  6534                                  	; 04/11/2023
  6535 00002AFC B401                    	mov	ah, 1
  6536                                  	;int	16h
  6537                                  	; 01/12/2024 (TRDOS 386 keyboard interrupt)
  6538 00002AFE CD32                    	int	32h
  6539                                  	;clc
  6540 00002B00 7433                    	jz	short _cksr
  6541                                  
  6542 00002B02 30E4                    	xor	ah, ah
  6543                                  	;int	16h
  6544                                  	; 01/12/2024 (TRDOS 386 keyboard interrupt)
  6545 00002B04 CD32                    	int	32h
  6546                                  
  6547                                  	; 25/12/2024
  6548                                  	; 29/11/2024
  6549                                  	;mov	[command], al
  6550                                  
  6551                                  	;;;
  6552                                  	; 19/05/2024 (change PCM out volume)
  6553 00002B06 3C2B                    	cmp	al, '+'
  6554 00002B08 750D                    	jne	short p_1
  6555                                  	
  6556 00002B0A A0[5F2B0000]            	mov	al, [volume]
  6557 00002B0F 3C00                    	cmp	al, 0
  6558 00002B11 7624                    	jna	short p_3
  6559 00002B13 FEC8                    	dec	al
  6560 00002B15 EB0F                    	jmp	short p_2
  6561                                  p_1:
  6562 00002B17 3C2D                    	cmp	al, '-'
  6563 00002B19 751D                    	jne	short p_4
  6564                                  
  6565 00002B1B A0[5F2B0000]            	mov	al, [volume]
  6566 00002B20 3C1F                    	cmp	al, 31
  6567 00002B22 7313                    	jnb	short p_3
  6568 00002B24 FEC0                    	inc	al
  6569                                  p_2:
  6570 00002B26 A2[5F2B0000]            	mov	[volume], al
  6571                                  	; 29/12/2024
  6572                                  	; 14/11/2024
  6573 00002B2B E822DEFFFF              	call	SetPCMOutVolume
  6574                                  	; 15/11/2024 (QEMU)
  6575                                  	; 07/12/2024
  6576                                  	;call	SetMasterVolume
  6577                                  	;call	UpdateVolume
  6578                                  	;;clc
  6579                                  	;retn
  6580 00002B30 E999010000              	jmp	UpdateVolume
  6581                                  	;mov	ah, al
  6582                                  	;mov    dx, [NAMBAR]
  6583                                    	;;add   dx, CODEC_MASTER_VOL_REG
  6584                                  	;add	dx, CODEC_PCM_OUT_REG
  6585                                  	;out    dx, ax
  6586                                  	;
  6587                                  	;call   delay1_4ms
  6588                                          ;call   delay1_4ms
  6589                                          ;call   delay1_4ms
  6590                                          ;call   delay1_4ms
  6591                                  _cksr:		; 19/05/2024
  6592                                  	; 18/12/2024
  6593 00002B35 31C0                    	xor	eax, eax
  6594                                  	;clc
  6595                                  p_3:
  6596 00002B37 C3                      	retn
  6597                                  p_4:
  6598                                  	; 17/11/2024
  6599 00002B38 80FC01                  	cmp	ah, 01h  ; ESC
  6600 00002B3B 7419                        	je	short p_q
  6601                                  	;cmp	ax, 2E03h ; 21/12/2024 
  6602 00002B3D 3C03                    	cmp	al, 03h  ; CTRL+C
  6603 00002B3F 7415                    	je	short p_q
  6604                                  
  6605                                  	; 18/11/2024
  6606 00002B41 3C20                    	cmp	al, 20h
  6607 00002B43 7419                    	je	short p_r
  6608                                  
  6609                                  	; 19/11/2024
  6610 00002B45 3C0D                    	cmp	al, 0Dh ; CR/ENTER
  6611 00002B47 7415                    	je	short p_r
  6612                                  
  6613 00002B49 24DF                    	and	al, 0DFh
  6614                                  
  6615                                  	; 25/12/2024
  6616                                  	; 29/11/2024
  6617 00002B4B A2[E7840000]            	mov	[command], al
  6618                                  
  6619                                  	;cmp	al, 'B'
  6620                                  	;je	short p_r
  6621                                  	;cmp	al, 'F'
  6622                                  	;je	short p_r
  6623                                  
  6624                                  	; 29/11/2024
  6625                                  	;cmp	al, 'N'
  6626                                  	;je	short p_r
  6627                                  	;cmp	al, 'P'
  6628                                  	;je	short p_r
  6629                                  
  6630 00002B50 3C51                    	cmp	al, 'Q'
  6631                                  	;je	short p_q
  6632 00002B52 7409                    	je	short p_quit ; 29/11/2024
  6633                                  
  6634 00002B54 F8                      	clc
  6635 00002B55 C3                      	retn
  6636                                  
  6637                                  	;;;
  6638                                  ;_cskr:	
  6639                                  p_q:
  6640                                  	; 27/12/2024
  6641 00002B56 C605[E7840000]51        	mov	byte [command], 'Q'
  6642                                  p_quit:
  6643 00002B5D F9                      	stc
  6644                                  p_r:
  6645 00002B5E C3                      	retn
  6646                                  
  6647                                  ; 29/05/2024
  6648                                  ; 19/05/2024
  6649                                  volume: 
  6650                                  	;db	02h
  6651                                  ; 26/12/2024
  6652 00002B5F 03                      	db	03h
  6653                                  
  6654                                  ; --------------------------------------------------------
  6655                                  
  6656                                  	; 22/12/2024
  6657                                  	; 21/12/2024
  6658                                  	; simulate cursor position in VGA (VESA VBE) mode
  6659                                  	; ! for 640*480, 256 colors (1 byte/pixel) !
  6660                                  setCursorPosition:
  6661                                  	; dh = Row
  6662                                  	; dl = Column
  6663                                  	
  6664 00002B60 31C0                    	xor	eax, eax
  6665 00002B62 B00E                    	mov	al, 14	; row height is 14 pixels (8*14)
  6666 00002B64 F6E6                    	mul	dh
  6667 00002B66 6683C007                	add	ax, 7	; top margin
  6668 00002B6A C1E010                  	shl	eax, 16
  6669 00002B6D 88D0                    	mov	al, dl	; * 8 ; character width = 8 pixels
  6670 00002B6F 66C1E003                	shl	ax, 3
  6671                                  			; hw = row, ax = column
  6672 00002B73 A3[C47A0000]            	mov	[screenpos], eax
  6673                                  	; 22/12/2024
  6674 00002B78 31C0                    	xor	eax, eax
  6675 00002B7A C3                      	retn
  6676                                  	
  6677                                  ; --------------------------------------------------------
  6678                                  ; 14/11/2024
  6679                                  ; (Ref: player.asm, out_cs.asm, Matan Alfasi, 2017)
  6680                                  
  6681                                  ;; NAME:	SetTotalTime
  6682                                  ;; DESCRIPTION: Calculates the total time in seconds in file
  6683                                  ;; INPUT:	DATA_SubchunkSize, WAVE_SampleRate, WAVE_BlockAlign
  6684                                  ;; OUTPUT:	CurrentTotalTime=Total time in seconds in file,
  6685                                  ;; 		Output on the screen of the total time in seconds
  6686                                  
  6687                                  	; 01/12/2024 (32 bit registers)
  6688                                  SetTotalTime:
  6689                                  	;; Calculate total seconds in file
  6690                                  	;mov	ax, [DATA_SubchunkSize]
  6691                                  	;mov	dx, [DATA_SubchunkSize + 2]
  6692                                  	;mov	bx, [WAVE_SampleRate]
  6693                                  	;div	bx
  6694                                  	;xor	dx, dx
  6695                                  	; 01/12/2024
  6696 00002B7B A1[14850000]            	mov	eax, [DATA_SubchunkSize]
  6697 00002B80 0FB71D[04850000]        	movzx	ebx, word [WAVE_SampleRate]
  6698 00002B87 31D2                    	xor	edx, edx
  6699 00002B89 F7F3                    	div	ebx
  6700                                  
  6701                                  	;mov	bx, [WAVE_BlockAlign]
  6702                                  	;div	bx
  6703                                  	; 01/12/2024
  6704 00002B8B 668B1D[0C850000]        	mov	bx, [WAVE_BlockAlign]
  6705 00002B92 31D2                    	xor	edx, edx
  6706 00002B94 F7F3                    	div	ebx
  6707                                  
  6708                                  	;mov	[TotalTime], ax
  6709 00002B96 A3[98850000]            	mov	[TotalTime], eax
  6710                                  
  6711 00002B9B B33C                    	mov	bl, 60
  6712 00002B9D F6F3                    	div	bl
  6713                                  
  6714                                  	;; al = minutes, ah = seconds
  6715 00002B9F 50                      	push	eax ; **
  6716 00002BA0 50                      	push	eax ; *
  6717                                  
  6718                                  	;mov	dh, 24
  6719                                  	; 21/12/2024 (640*480)
  6720 00002BA1 B620                    	mov	dh, 32
  6721 00002BA3 B22A                    	mov	dl, 42
  6722 00002BA5 E8B6FFFFFF              	call	setCursorPosition
  6723                                  
  6724 00002BAA 58                      	pop	eax ; *
  6725 00002BAB 30E4                    	xor	ah, ah
  6726 00002BAD BD02000000              	mov	ebp, 2
  6727 00002BB2 E812000000              	call	PrintNumber
  6728                                  	
  6729                                  	;mov	dh, 24
  6730                                  	; 21/12/2024 (640*480)
  6731 00002BB7 B620                    	mov	dh, 32
  6732 00002BB9 B22D                    	mov	dl, 45
  6733 00002BBB E8A0FFFFFF              	call	setCursorPosition
  6734                                  
  6735 00002BC0 58                      	pop	eax ; **
  6736 00002BC1 88E0                    	mov	al, ah
  6737 00002BC3 30E4                    	xor	ah, ah
  6738                                  	; 21/12/2024
  6739 00002BC5 66BD0200                	mov	bp, 2
  6740                                  	;jmp	short PrintNumber
  6741                                  
  6742                                  ; --------------------------------------------------------
  6743                                  
  6744                                  	; 21/12/2024 (write numbers in VESA VBE graphics mode)
  6745                                  	; 01/12/2024 (32bit registers)
  6746                                  PrintNumber:
  6747                                  	; eax = binary number
  6748                                  	; ebp = digits
  6749 00002BC9 8B35[C47A0000]          	mov	esi, [screenpos]
  6750                                  		; hw = row, si = column
  6751 00002BCF BB0A000000              	mov	ebx, 10
  6752 00002BD4 31C9                    	xor	ecx, ecx
  6753                                  printNumber_CutNumber:
  6754 00002BD6 41                      	inc	ecx
  6755 00002BD7 31D2                    	xor	edx, edx
  6756 00002BD9 F7F3                    	div	ebx
  6757 00002BDB 52                      	push	edx
  6758 00002BDC 39E9                    	cmp	ecx, ebp
  6759 00002BDE 7402                    	je	short printNumber_printloop
  6760 00002BE0 EBF4                    	jmp	printNumber_CutNumber
  6761                                  
  6762                                  printNumber_printloop:
  6763 00002BE2 58                      	pop	eax
  6764                                  	; 21/12/2024
  6765                                  	; ebp = count of digits
  6766                                  	; eax <= 9
  6767                                  
  6768 00002BE3 0430                    	add	al, '0'
  6769                                  	
  6770                                  	; esi = pixel position (hw = row, si = column)
  6771                                  	; eax = al = character
  6772                                  	;call	write_character
  6773                                  	; 22/12/2024
  6774 00002BE5 E82A010000              	call	write_character_white
  6775                                  
  6776 00002BEA 4D                      	dec	ebp
  6777 00002BEB 7405                     	jz	short printNumber_ok
  6778 00002BED 83C608                  	add	esi, 8	; next column
  6779 00002BF0 EBF0                    	jmp	short printNumber_printloop
  6780                                  printNumber_ok:
  6781 00002BF2 C3                      	retn
  6782                                  
  6783                                  ; --------------------------------------------------------
  6784                                  
  6785                                  	; 14/11/2024 - Erdogan Tan
  6786                                  SetProgressTime:
  6787                                  	;; Calculate playing/progress seconds in file
  6788 00002BF3 E835000000              	call	CalcProgressTime
  6789                                  
  6790                                  	; 01/12/2024 (32bit registers)
  6791                                  UpdateProgressTime:
  6792                                  	; eax = (new) progress time 
  6793                                  
  6794 00002BF8 A3[9C850000]            	mov	[ProgressTime], eax
  6795                                  
  6796 00002BFD B33C                    	mov	bl, 60
  6797 00002BFF F6F3                    	div	bl
  6798                                  
  6799                                  	;; al = minutes, ah = seconds
  6800 00002C01 50                      	push	eax ; **
  6801 00002C02 50                      	push	eax ; *
  6802                                  
  6803                                  	;mov	dh, 24
  6804                                  	; 21/12/2024 (640*480)
  6805 00002C03 B620                    	mov	dh, 32
  6806 00002C05 B221                    	mov	dl, 33
  6807 00002C07 E854FFFFFF              	call	setCursorPosition
  6808                                  
  6809 00002C0C 58                      	pop	eax ; *
  6810 00002C0D 30E4                    	xor	ah, ah
  6811 00002C0F BD02000000              	mov	ebp, 2
  6812 00002C14 E8B0FFFFFF              	call	PrintNumber
  6813                                  	
  6814                                  	;mov	dh, 24
  6815                                  	; 21/12/2024 (640*480)
  6816 00002C19 B620                    	mov	dh, 32
  6817 00002C1B B224                    	mov	dl, 36
  6818 00002C1D E83EFFFFFF              	call	setCursorPosition
  6819                                  
  6820 00002C22 58                      	pop	eax ; **
  6821 00002C23 88E0                    	mov	al, ah
  6822 00002C25 30E4                    	xor	ah, ah
  6823                                  	; 21/12/2024
  6824 00002C27 66BD0200                	mov	bp, 2
  6825 00002C2B EB9C                    	jmp	short PrintNumber
  6826                                  
  6827                                  ; --------------------------------------------------------
  6828                                  
  6829                                  	; 01/12/2024 (32bit registers)
  6830                                  	; 17/11/2024
  6831                                  	; 14/11/2024
  6832                                  CalcProgressTime:
  6833                                  	;mov	ax, [LoadedDataBytes]
  6834                                  	;mov	dx, [LoadedDataBytes+2]
  6835                                  	;mov	bx, ax
  6836                                  	;or	bx, dx
  6837                                  	;jz	short cpt_ok
  6838                                  	; 01/12/2024
  6839 00002C2D A1[A4850000]            	mov	eax, [LoadedDataBytes]
  6840 00002C32 09C0                    	or	eax, eax
  6841 00002C34 7416                    	jz	short cpt_ok
  6842                                  
  6843                                  	;mov	bx, [WAVE_SampleRate]
  6844                                  	;div	bx
  6845                                  	;xor	dx, dx
  6846                                  	;mov	bx, [WAVE_BlockAlign]
  6847                                  	;div	bx
  6848                                  	; 01/12/2024
  6849 00002C36 0FB71D[04850000]        	movzx	ebx, word [WAVE_SampleRate]
  6850 00002C3D 31D2                    	xor	edx, edx
  6851 00002C3F F7F3                    	div	ebx
  6852 00002C41 31D2                    	xor	edx, edx
  6853 00002C43 668B1D[0C850000]        	mov	bx, [WAVE_BlockAlign]
  6854 00002C4A F7F3                    	div	ebx
  6855                                  cpt_ok:
  6856                                  	; eax = (new) progress time
  6857 00002C4C C3                      	retn
  6858                                  
  6859                                  ; --------------------------------------------------------
  6860                                  ; 14/11/2024
  6861                                  ; (Ref: player.asm, out_cs.asm, Matan Alfasi, 2017)
  6862                                  
  6863                                  ;; DESCRIPTION: Update file information on template
  6864                                  ;; PARAMS:	WAVE parameters and other variables
  6865                                  ;; REGS:	AX(RW)
  6866                                  ;; VARS:	CurrentFileName, WAVE_SampleRate, 
  6867                                  ;; RETURNS:	On-screen file info is updated.
  6868                                  
  6869                                  	; 01/12/2024 (32bit registers)
  6870                                  UpdateFileInfo:
  6871                                  	;; Print File Name
  6872                                  	;mov	dh, 9
  6873                                  	; 21/12/2024 (640*480 graphics display)
  6874 00002C4D B608                    	mov	dh, 8
  6875 00002C4F B217                    	mov	dl, 23
  6876 00002C51 E80AFFFFFF              	call	setCursorPosition
  6877                                  	
  6878 00002C56 BE[2C850000]            	mov	esi, wav_file_name
  6879                                  	
  6880                                  	;;;
  6881                                  	; 14/11/2024
  6882                                  	; skip directory separators
  6883                                  	; (note: asciiz string, max. 79 bytes except zero tail)
  6884 00002C5B 89F3                    	mov	ebx, esi
  6885                                  chk4_nxt_sep:
  6886 00002C5D AC                      	lodsb
  6887 00002C5E 3C2F                    	cmp	al, '/'	; 14/12/2024
  6888 00002C60 7406                    	je	short chg_fpos
  6889 00002C62 20C0                    	and	al, al
  6890 00002C64 7406                    	jz	short chg_fpos_ok
  6891 00002C66 EBF5                    	jmp	short chk4_nxt_sep
  6892                                  chg_fpos:
  6893 00002C68 89F3                    	mov	ebx, esi
  6894 00002C6A EBF1                    	jmp	short chk4_nxt_sep
  6895                                  chg_fpos_ok:
  6896 00002C6C 89DE                    	mov	esi, ebx ; file name (without its path/directory)
  6897                                  	;;;
  6898                                  _fnl_chk:
  6899                                  	; 26/12/2024 (file name length limit -display-)
  6900                                  	;mov	ebx, 12
  6901 00002C6E BB11000000              	mov	ebx, 17 ; ????????.wav?????
  6902 00002C73 56                      	push	esi
  6903                                  _fnl_chk_loop:
  6904 00002C74 AC                      	lodsb
  6905 00002C75 20C0                    	and	al, al
  6906 00002C77 7406                    	jz	short _fnl_ok
  6907 00002C79 4B                       	dec	ebx
  6908 00002C7A 75F8                    	jnz	short _fnl_chk_loop
  6909 00002C7C C60600                  	mov	byte [esi], 0
  6910                                  _fnl_ok:
  6911 00002C7F 5E                      	pop	esi
  6912                                  	;;;
  6913                                  
  6914 00002C80 E870000000              	call	PrintString
  6915                                  	
  6916                                  	;; Print Frequency
  6917                                  	;mov	dh, 10
  6918                                  	; 21/12/2024 (640*480 graphics display)
  6919 00002C85 B609                    	mov	dh, 9
  6920 00002C87 B217                    	mov	dl, 23
  6921 00002C89 E8D2FEFFFF              	call	setCursorPosition
  6922                                  	;movzx	eax, word [WAVE_SampleRate]
  6923                                  	; 22/12/2024
  6924                                  	; eax = 0
  6925 00002C8E 66A1[04850000]          	mov	ax, [WAVE_SampleRate]
  6926 00002C94 BD05000000              	mov	ebp, 5
  6927 00002C99 E82BFFFFFF              	call	PrintNumber
  6928                                  
  6929                                  	;; Print BitRate
  6930                                  	;mov	dh, 9
  6931                                  	; 21/12/2024 (640*480 graphics display)
  6932 00002C9E B608                    	mov	dh, 8
  6933 00002CA0 B239                    	mov	dl, 57
  6934 00002CA2 E8B9FEFFFF              	call	setCursorPosition
  6935 00002CA7 66A1[0E850000]          	mov	ax, [WAVE_BitsPerSample]
  6936 00002CAD 66BD0200                	mov	bp, 2
  6937 00002CB1 E813FFFFFF              	call	PrintNumber
  6938                                  
  6939                                  	;; Print Channel Number
  6940                                  	;mov	dh, 10
  6941                                  	; 21/12/2024 (640*480 graphics display)
  6942 00002CB6 B609                    	mov	dh, 9
  6943 00002CB8 B239                    	mov	dl, 57
  6944 00002CBA E8A1FEFFFF              	call	setCursorPosition
  6945 00002CBF 66A1[02850000]          	mov	ax, [WAVE_NumChannels]
  6946 00002CC5 66BD0100                	mov	bp, 1
  6947 00002CC9 E8FBFEFFFF              	call	PrintNumber
  6948                                  
  6949                                  	;call	UpdateVolume
  6950                                  	;retn
  6951                                  
  6952                                  ; --------------------------------------------------------
  6953                                  
  6954                                  	; 14/11/2024
  6955                                  UpdateVolume:
  6956                                  	;; Print Volume
  6957                                  	;mov	dh, 24
  6958                                  	; 21/12/2024 (640*480)
  6959 00002CCE B620                    	mov	dh, 32
  6960 00002CD0 B24B                    	mov	dl, 75
  6961 00002CD2 E889FEFFFF              	call	setCursorPosition
  6962                                  	; 22/12/2024
  6963                                  	; eax = 0
  6964                                  
  6965 00002CD7 A0[5F2B0000]            	mov	al, [volume]
  6966                                  
  6967 00002CDC B364                    	mov	bl, 100
  6968 00002CDE F6E3                    	mul	bl
  6969                                  
  6970 00002CE0 B31F                    	mov	bl, 31
  6971 00002CE2 F6F3                    	div	bl
  6972                                  
  6973                                  	;neg	ax
  6974                                  	;add	ax, 100	
  6975                                  	; 01/12/2024
  6976 00002CE4 B464                    	mov	ah, 100
  6977 00002CE6 28C4                    	sub	ah, al
  6978 00002CE8 0FB6C4                  	movzx	eax, ah
  6979                                  	;xor	ah, ah
  6980                                  	;mov	bp, 3
  6981 00002CEB BD03000000              	mov	ebp, 3
  6982                                  	;call	PrintNumber
  6983                                  	;retn
  6984 00002CF0 E9D4FEFFFF              	jmp	PrintNumber	
  6985                                  
  6986                                  ; --------------------------------------------------------
  6987                                  
  6988                                  	; 21/12/2024
  6989                                  	; write text in VESA VBE graphics mode
  6990                                  PrintString:
  6991                                  	; esi = string address
  6992                                  printstr_loop:
  6993 00002CF5 31C0                    	xor	eax, eax
  6994 00002CF7 AC                      	lodsb
  6995 00002CF8 08C0                    	or	al, al
  6996 00002CFA 7417                    	jz	short printstr_ok
  6997                                  
  6998 00002CFC 56                      	push	esi
  6999                                  
  7000 00002CFD 8B35[C47A0000]          	mov	esi, [screenpos]
  7001                                  
  7002                                  	; esi = pixel position (hw = row, si = column)
  7003                                  	; eax = al = character
  7004                                  	;call	write_character
  7005                                  	; 22/12/2024
  7006 00002D03 E80C000000              	call	write_character_white
  7007                                  
  7008 00002D08 668305[C47A0000]08      	add	word [screenpos], 8 ; update column (only, not row)
  7009                                  
  7010 00002D10 5E                      	pop	esi
  7011 00002D11 EBE2                    	jmp	short printstr_loop
  7012                                  
  7013                                  printstr_ok:
  7014 00002D13 C3                      	retn
  7015                                  
  7016                                  ; --------------------------------------------------------
  7017                                  
  7018                                  	; 21/12/2024
  7019                                  	; write character (at cursor position)
  7020                                  	; in graphics mode (640*480, 256 colors)
  7021                                  	; 22/12/2024
  7022                                  write_character_white:
  7023 00002D14 B90F000000              	mov	ecx, 0Fh
  7024                                  	; 26/12/2024
  7025                                  	;movzx	ecx, byte [tcolor]
  7026                                  write_character:
  7027                                  	; esi = pixel position (hw = row, si = column)
  7028                                  	; eax = al = character
  7029                                  	; cl = color
  7030 00002D19 890D[C87A0000]          	mov	[wcolor], ecx ; 22/12/2024
  7031                                  
  7032                                  	; 22/12/2024
  7033 00002D1F 50                      	push	eax
  7034                                  	; clear previous character pixels
  7035 00002D20 BF[5D470000]            	mov	edi, fillblock
  7036                                  	sys	_video, 020Fh, 0, 8001h
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002D25 BB0F020000          <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002D2A B900000000          <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002D2F BA01800000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002D34 B81F000000          <1>  mov eax, %1
   103                              <1> 
   104 00002D39 CD40                <1>  int 40h
  7037 00002D3B 58                      	pop	eax
  7038                                  
  7039 00002D3C C1E004                  	shl	eax, 4 ; 8*16 pixel user font
  7040 00002D3F BF[78550000]            	mov	edi, fontbuff2 ; start of user font data
  7041 00002D44 01C7                    	add	edi, eax
  7042                                  
  7043                                  	; 21/12/2024
  7044                                  	; NOTE:
  7045                                  	; TRDOS 386 does not use 8*14 pixel fonts in sysvideo
  7046                                  	; system calls -in graphics mode-
  7047                                  	; because 8*16 pixel operations are faster
  7048                                  	;			than 8*14 pixel operations.
  7049                                  	; ((so, 8*14 fonts can be converted to 8*16 fonts by
  7050                                  	; adding 2 empty lines))
  7051                                  	; (8*14 characters can be written via pixel operations)
  7052                                    	
  7053                                  	; 21/12/2024 (TRDOS 386 v2.0.9, trdosk6.s, 27/09/2024)
  7054                                  	;;;;;;;;;;;;;;;;; ; sysvideo system call
  7055                                  	;sysvideo:
  7056                                  	;   function in BH
  7057                                  	;	02h: Super VGA, LINEAR FRAME BUFFER data transfers
  7058                                  	;   sub function in BL
  7059                                  	;	0Fh: WRITE CHARACTER (FONT)
  7060                                  	;          CL = char's color (8 bit, 256 colors)
  7061                                  	;	If DH bit 7 = 1
  7062                                  	;	   USER FONT (from user buffer)
  7063                                  	;	         DL = 1 -> 8x16 pixel font
  7064                                   	;	   EDI = user's font buffer address
  7065                                  	;		(NOTE: byte order is as row0,row1,row2..)
  7066                                  	;	   ESI = start position (row, column)
  7067                                  	;		(HW = row, SI = column)
  7068                                  	;;;;;;;;;;;;;;;;;
  7069                                  
  7070                                  	sys	_video, 020Fh, [wcolor], 8001h
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002D46 BB0F020000          <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    96 00002D4B 8B0D[C87A0000]      <1>  mov ecx, %3
    97                              <1>  %if %0 = 4
    98 00002D51 BA01800000          <1>  mov edx, %4
    99                              <1>  %endif
   100                              <1>  %endif
   101                              <1>  %endif
   102 00002D56 B81F000000          <1>  mov eax, %1
   103                              <1> 
   104 00002D5B CD40                <1>  int 40h
  7071                                  
  7072 00002D5D C3                      	retn
  7073                                  
  7074                                  ; --------------------------------------------------------
  7075                                  
  7076                                  	; 22/12/2024
  7077                                  	; 21/12/2024
  7078                                  	; (write chars in VESA VBE graphics mode)
  7079                                  	; 14/11/2024
  7080                                  	; (Ref: player.asm, Matan Alfasi, 2017)
  7081                                  	; (Modification: Erdogan Tan, 14/11/2024)
  7082                                  
  7083                                  	;PROGRESSBAR_ROW equ 23
  7084                                  	; 21/12/2024 (640*480)
  7085                                  	PROGRESSBAR_ROW equ 31
  7086                                  
  7087                                  UpdateProgressBar:
  7088 00002D5E E890FEFFFF              	call	SetProgressTime	; 14/11/2024
  7089                                  
  7090                                  	; 01/12/2024 (32bit registers)
  7091 00002D63 A1[9C850000]            	mov	eax, [ProgressTime]
  7092                                  UpdateProgressBar@:
  7093 00002D68 BA50000000              	mov	edx, 80
  7094 00002D6D F7E2                    	mul	edx
  7095 00002D6F 8B1D[98850000]          	mov	ebx, [TotalTime]
  7096 00002D75 F7F3                    	div	ebx
  7097                                  
  7098                                  	; 22/12/2024
  7099                                  	; check progress bar indicator position if it is same 
  7100 00002D77 3A05[CD7A0000]          	cmp	al, [pbprev]
  7101 00002D7D 7430                    	je	short UpdateProgressBar_ok
  7102 00002D7F A2[CD7A0000]            	mov	[pbprev], al
  7103                                  
  7104                                  UpdateProgressBar@@:
  7105                                  	;; Push for the 'Clean' part
  7106 00002D84 50                      	push	eax ; **
  7107 00002D85 50                      	push	eax ; *
  7108                                  
  7109                                  	;; Set cursor position
  7110 00002D86 B61F                    	mov	dh, PROGRESSBAR_ROW
  7111 00002D88 B200                    	mov	dl, 0
  7112 00002D8A E8D1FDFFFF              	call	setCursorPosition
  7113                                  
  7114 00002D8F 58                      	pop	eax ; *
  7115 00002D90 09C0                    	or	eax, eax
  7116 00002D92 742D                    	jz	short UpdateProgressBar_Clean
  7117                                  
  7118                                  UpdateProgressBar_DrawProgress:
  7119                                  	; 22/12/2024
  7120                                  	; 21/12/2024
  7121                                  	; (write progress bar chars in graphics mode)
  7122                                  	;;;;
  7123 00002D94 89C5                    	mov	ebp, eax
  7124 00002D96 50                      	push	eax ; ***
  7125 00002D97 8B35[C47A0000]          	mov	esi, [screenpos]
  7126                                  UpdateProgressBar_DrawProgress_@:
  7127 00002D9D B8DF000000              	mov	eax, 223
  7128                                  	
  7129                                  	; esi = pixel position (hw = row, si = column)
  7130                                  	; eax = al = character
  7131                                  	;call	write_character
  7132                                  	; 22/12/2024
  7133 00002DA2 E86DFFFFFF              	call	write_character_white
  7134                                  
  7135 00002DA7 4D                      	dec	ebp
  7136 00002DA8 7406                    	jz	short UpdateProgressBar_DrawCursor
  7137                                  
  7138 00002DAA 83C608                  	add	esi, 8 ; next column
  7139 00002DAD EBEE                    	jmp	short UpdateProgressBar_DrawProgress_@
  7140                                  	;;;
  7141                                  
  7142                                  UpdateProgressBar_ok:
  7143 00002DAF C3                      	retn
  7144                                  
  7145                                  UpdateProgressBar_DrawCursor:
  7146                                  	; 22/12/2024
  7147 00002DB0 5A                      	pop	edx ; ***
  7148 00002DB1 B61F                    	mov	dh, PROGRESSBAR_ROW
  7149 00002DB3 E8A8FDFFFF              	call	setCursorPosition
  7150                                  
  7151                                  	; 21/12/2024
  7152                                  	; (write progress bar character in graphics mode)
  7153                                  	;;;;
  7154                                  	;;;mov	eax, 223
  7155                                  	;;;shl	eax, 4 ; 8*16 pixel user font
  7156                                  	;;mov	eax, 223*16
  7157                                  	;;mov	edi, fontbuff2 ; start of user font data
  7158                                  	;;add	edi, eax
  7159                                  	;mov	edi, fontbuff2+(223*16)
  7160                                  	;
  7161                                  	;sys	_video, 020Fh, 0Ch, 8001h
  7162                                  	; 22/12/2024
  7163                                  	;mov	eax, 223
  7164                                  	; eax = 0
  7165 00002DB8 B0DF                    	mov	al, 223
  7166 00002DBA B10C                    	mov	cl, 0Ch ; red
  7167 00002DBC E858FFFFFF              	call	write_character
  7168                                  	;;;;
  7169                                  
  7170                                  UpdateProgressBar_Clean:
  7171                                  	;pop	eax  ; **
  7172                                  	; 22/12/2024
  7173 00002DC1 5A                      	pop	edx  ; **
  7174                                  	; 21/12/2024
  7175 00002DC2 BD50000000              	mov	ebp, 80
  7176                                  	;sub	bp, ax
  7177 00002DC7 6629D5                  	sub	bp, dx ; 22/12/2024
  7178 00002DCA 74E3                    	jz	short UpdateProgressBar_ok
  7179                                  
  7180 00002DCC B61F                    	mov	dh, PROGRESSBAR_ROW
  7181                                  	;mov	dl, al ; 22/12/2024
  7182 00002DCE E88DFDFFFF              	call	setCursorPosition
  7183                                  
  7184                                  	; 21/12/2024
  7185                                  	; (write progress bar chars in graphics mode)
  7186                                  	;;;;
  7187 00002DD3 8B35[C47A0000]          	mov	esi, [screenpos]
  7188                                  UpdateProgressBar_Clean_@:
  7189                                  	;;;mov	eax, 223
  7190                                  	;;;shl	eax, 4 ; 8*16 pixel user font
  7191                                  	;;mov	eax, 223*16
  7192                                  	;mov	edi, fontbuff2 ; start of user font data
  7193                                  	;add	edi, eax
  7194                                  	;mov	edi, fontbuff2+(223*16)
  7195                                  	;
  7196                                  	;sys	_video, 020Fh, 08h, 8001h
  7197                                  	; 22/12/2024
  7198                                  	;mov	eax, 223
  7199                                  	; eax = 0
  7200 00002DD9 B0DF                    	mov	al, 223
  7201 00002DDB B108                    	mov	cl, 08h ; gray (dark)
  7202 00002DDD E837FFFFFF              	call	write_character
  7203                                  	;;;;
  7204                                  
  7205 00002DE2 4D                      	dec	ebp
  7206 00002DE3 74CA                    	jz	short UpdateProgressBar_ok
  7207                                  
  7208 00002DE5 83C608                  	add	esi, 8 ; next column
  7209 00002DE8 EBEF                    	jmp	short UpdateProgressBar_Clean_@
  7210                                  	;;;;
  7211                                  
  7212                                  ; --------------------------------------------------------
  7213                                  ; 17/11/2024
  7214                                  
  7215                                  Player_ProcessKey_Backwards:
  7216                                  	;; In order to go backwards 5 seconds:
  7217                                  	;; Update file pointer to the beginning, skip headers
  7218 00002DEA B142                    	mov	cl, 'B'
  7219 00002DEC EB02                    	jmp	short Player_ProcessKey_B_or_F
  7220                                  
  7221                                  Player_ProcessKey_Forwards:
  7222                                  	;; In order to fast-forward 5 seconds, set the file pointer
  7223                                  	;; to CUR_SEEK + 5 * Freq
  7224                                  
  7225 00002DEE B146                    	mov	cl, 'F'
  7226                                  	;jmp	short Player_ProcessKey_B_or_F
  7227                                  
  7228                                  	; 01/12/2024 (32bit regsisters)
  7229                                  Player_ProcessKey_B_or_F:
  7230                                  	; 17/11/2024
  7231                                  	; 04/11/2024
  7232                                  	; (Ref: player.asm, Matan Alfasi, 2017)
  7233                                    
  7234                                  	; 04/11/2024
  7235 00002DF0 B805000000              	mov	eax, 5
  7236 00002DF5 0FB71D[0C850000]        	movzx	ebx, word [WAVE_BlockAlign]
  7237 00002DFC F7E3                    	mul	ebx
  7238 00002DFE 668B1D[04850000]        	mov	bx, [WAVE_SampleRate]
  7239 00002E05 F7E3                    	mul	ebx
  7240                                  	; eax = transfer byte count for 5 seconds
  7241                                  	
  7242                                  	; 17/11/2024
  7243 00002E07 80F942                  	cmp	cl, 'B'
  7244                                  	;mov	bx, [LoadedDataBytes]
  7245                                  	;mov	cx, [LoadedDataBytes+2]
  7246                                  	; 01/12/2024
  7247 00002E0A 8B0D[A4850000]          	mov	ecx, [LoadedDataBytes]
  7248 00002E10 7508                    	jne	short move_forward ; cl = 'F'
  7249                                  move_backward:
  7250                                  	;sub	bx, ax
  7251                                  	;sbb	cx, dx
  7252 00002E12 29C1                    	sub	ecx, eax
  7253 00002E14 7316                    	jnc	short move_file_pointer
  7254                                  move_to_beginning:
  7255                                  	;xor	cx, cx ; 0
  7256                                  	;xor	bx, bx ; 0
  7257 00002E16 31C9                    	xor	ecx, ecx
  7258 00002E18 EB12                    	jmp	short move_file_pointer
  7259                                  move_forward: 
  7260                                  	;add	bx, ax
  7261                                  	;adc	cx, dx
  7262 00002E1A 01C1                    	add	ecx, eax
  7263 00002E1C 7208                    	jc	short move_to_end
  7264                                  	;cmp	cx, [DATA_SubchunkSize+2]
  7265                                  	;ja	short move_to_end
  7266                                  	;jb	short move_file_pointer
  7267                                  	;cmp	bx, [DATA_SubchunkSize]
  7268                                  	;jna	short move_file_pointer
  7269 00002E1E 3B0D[14850000]          	cmp	ecx, [DATA_SubchunkSize]
  7270 00002E24 7606                    	jna	short move_file_pointer
  7271                                  move_to_end:
  7272                                  	;mov	bx, [DATA_SubchunkSize]
  7273                                  	;mov	cx, [DATA_SubchunkSize+2]
  7274 00002E26 8B0D[14850000]          	mov	ecx, [DATA_SubchunkSize]
  7275                                  move_file_pointer:
  7276                                  	;mov	dx, bx    
  7277                                  	;mov	[LoadedDataBytes], dx
  7278                                  	;mov	[LoadedDataBytes+2], cx
  7279 00002E2C 890D[A4850000]          	mov	[LoadedDataBytes], ecx
  7280                                  	;add	dx, 44 ; + header
  7281                                  	;adc	cx, 0
  7282 00002E32 83C12C                  	add	ecx, 44 
  7283                                  
  7284                                  	; seek
  7285                                  	;mov	bx, [filehandle]
  7286                                  	;mov	ax, 4200h
  7287                                  	;int	21h
  7288                                  	; 01/12/2024
  7289 00002E35 31D2                    	xor	edx, edx ; offset from beginning of the file
  7290                                  	; ecx = offset	
  7291                                  	; ebx = file handle
  7292                                  	; edx = 0
  7293                                  	sys	_seek, [filehandle]
    89                              <1> 
    90                              <1> 
    91                              <1> 
    92                              <1> 
    93                              <1>  %if %0 >= 2
    94 00002E37 8B1D[1C850000]      <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 00002E3D B813000000          <1>  mov eax, %1
   103                              <1> 
   104 00002E42 CD40                <1>  int 40h
  7294 00002E44 C3                      	retn
  7295                                  
  7296                                  ; --------------------------------------------------------
  7297                                  
  7298                                  	; 25/12/2024
  7299                                  	; 22/12/2024 (VESA VBE mode graphics) 
  7300                                  	; (640*480, 256 colors)
  7301                                  clear_window:
  7302 00002E45 8B3D[C07A0000]          	mov	edi, [LFB_ADDR]
  7303                                  	;add	edi, (13*80*8*14)
  7304                                  	; 25/12/2024
  7305 00002E4B 81C7009A0100            	add	edi, 164*640
  7306 00002E51 29C0                    	sub	eax, eax
  7307                                  	;mov	ecx, (16*640*14)/4 ; 16 rows
  7308 00002E53 B900A00000              	mov	ecx, 64*640 ; 256 volume level points
  7309 00002E58 F3AB                    	rep	stosd
  7310                                  	; 24/12/2024
  7311 00002E5A A3[D47A0000]            	mov	[prev_points], eax ; 0
  7312                                  	;
  7313 00002E5F C3                      	retn
  7314                                  
  7315                                  ; --------------------------------------------------------
  7316                                  
  7317                                  	; 22/12/2024
  7318                                  	; 21/12/2024
  7319                                  	; (simulate wave leds in graphics mode)
  7320                                  	; (640*480, 256 colors)
  7321                                  reset_wave_leds:
  7322                                  	; 22/12/2024
  7323 00002E60 C705[78790000]0000-     	mov	dword [prev_leds], 0
  7323 00002E68 0000               
  7324                                  	;
  7325 00002E6A BD00050000              	mov	ebp, 16*80 ; 80 columns with 16 levels
  7326 00002E6F BE[78650000]            	mov	esi, wleds_addr
  7327                                  next_led:
  7328 00002E74 AD                      	lodsd
  7329 00002E75 89C7                    	mov	edi, eax
  7330 00002E77 BA0E000000              	mov	edx, 14 ; 14 lines (8*14 pixel font)
  7331 00002E7C BB[58650000]            	mov	ebx, fontbuff2+(254*16) ; char = 254
  7332                                  led_line:
  7333 00002E81 8A23                    	mov	ah, [ebx]
  7334 00002E83 B908000000              	mov	ecx, 8 ; 8 pixels (8*16 pixel font)
  7335                                  next_pixel:
  7336 00002E88 D0E4                    	shl	ah, 1
  7337 00002E8A 7308                    	jnc	short skip_this
  7338 00002E8C B008                    	mov	al, 8 ; gray
  7339 00002E8E AA                      	stosb
  7340 00002E8F 49                      	dec	ecx
  7341 00002E90 75F6                    	jnz	short next_pixel
  7342 00002E92 EB06                    	jmp	short next_line
  7343                                  skip_this:
  7344 00002E94 B000                    	mov	al, 0 ; black
  7345 00002E96 AA                      	stosb
  7346 00002E97 49                      	dec	ecx
  7347 00002E98 75EE                    	jnz	short next_pixel
  7348                                  next_line:
  7349 00002E9A 4A                      	dec	edx
  7350 00002E9B 7504                    	jnz	short next_line_@
  7351 00002E9D 4D                      	dec	ebp
  7352 00002E9E 75D4                    	jnz	short next_led
  7353                                  	;clc	; 25/12/2024
  7354 00002EA0 C3                      	retn
  7355                                  next_line_@:
  7356                                  	; 22/12/2024
  7357 00002EA1 81C778020000            	add	edi, 640-8 ; next line
  7358 00002EA7 43                      	inc	ebx
  7359 00002EA8 EBD7                    	jmp	short led_line	
  7360                                  
  7361                                  ; --------------------------------------------------------
  7362                                  
  7363                                  	; 22/12/2024 (graphics mode)
  7364                                  	; 09/12/2024
  7365                                  	; 19/11/2024
  7366                                  UpdateWaveLeds:
  7367                                  	; 23/11/2024
  7368                                  	;call	reset_wave_leds
  7369                                  	; 22/12/2024 (faster method, 80 against 80*16)
  7370                                  	; turn off previously lighting wave leds at first
  7371                                  	;;;
  7372 00002EAA BE[78790000]            	mov	esi, prev_leds
  7373 00002EAF 833E00                  	cmp	dword [esi], 0
  7374 00002EB2 7433                    	jz	short UpdateWaveLeds_ok
  7375 00002EB4 B950000000              	mov	ecx, 80
  7376                                  turn_off_led:
  7377 00002EB9 AD                      	lodsd
  7378 00002EBA 89C7                    	mov	edi, eax
  7379                                  	; edi = wave led address
  7380 00002EBC BD0E000000              	mov	ebp, 14
  7381 00002EC1 BB[58650000]            	mov	ebx, fontbuff2+(254*16) ; char = 254
  7382 00002EC6 31D2                    	xor	edx, edx
  7383 00002EC8 B008                    	mov	al, 8 ; gray (dark)
  7384                                  toffl_next_line:
  7385                                  	;;mov	edx, 8 ; 8 pixels (8*14 pixel font)
  7386                                  	;mov	dl, 8
  7387 00002ECA 88C2                    	mov	dl, al ; 8
  7388 00002ECC 8A23                    	mov	ah, [ebx]
  7389                                  toffl_next_pixel:
  7390 00002ECE D0E4                    	shl	ah, 1
  7391 00002ED0 7310                    	jnc	short toffl_skip_this
  7392 00002ED2 AA                      	stosb
  7393                                  toffl_next_pixel_@:
  7394 00002ED3 4A                      	dec	edx
  7395 00002ED4 75F8                    	jnz	short toffl_next_pixel
  7396 00002ED6 4D                      	dec	ebp
  7397 00002ED7 740C                    	jz	short toffl_next_led
  7398 00002ED9 81C778020000            	add	edi, 640-8 ; next line
  7399 00002EDF 43                      	inc	ebx
  7400 00002EE0 EBE8                    	jmp	short toffl_next_line
  7401                                  toffl_skip_this:
  7402 00002EE2 47                      	inc	edi
  7403 00002EE3 EBEE                    	jmp	short toffl_next_pixel_@
  7404                                  toffl_next_led:
  7405 00002EE5 E2D2                    	loop	turn_off_led
  7406                                  UpdateWaveLeds_ok:
  7407                                  	;;;
  7408                                  	; 09/12/2024
  7409                                  	;jmp	short turn_on_leds
  7410                                  
  7411                                  ; --------------------------------------------------------
  7412                                  
  7413                                  	; 29/12/2024
  7414                                  	; 21/12/2024 (VESA VBE Mode, 640*480, 256 colors)
  7415                                  	; 09/12/2024
  7416                                  	; 01/12/2024 (TRDOS 386, 32bit registers, flat memory)
  7417                                  	; 23/11/2024 (Retro DOS, 16bit registers, segmented)
  7418                                  	; 21/11/2024, 22/11/2024
  7419                                  	; 19/11/2024
  7420                                  turn_on_leds:
  7421                                  	; 29/12/2024
  7422 00002EE7 803D[D5840000]32        	cmp	byte [tLO],'2'
  7423 00002EEE 7509                    	jne	short tol_buffer_1
  7424                                  tol_buffer_2:
  7425 00002EF0 BA[00A00100]            	mov	edx, WAVBUFFER_2
  7426 00002EF5 EB10                    	jmp	short tol_@
  7427                                  
  7428                                  	; 29/12/2024
  7429                                  tol_clc_retn:
  7430 00002EF7 F8                      	clc
  7431                                  tol_retn:
  7432 00002EF8 C3                      	retn
  7433                                  
  7434                                  tol_buffer_1:
  7435                                  	; 29/12/2024
  7436 00002EF9 803D[D5840000]31        	cmp	byte [tLO],'1'
  7437 00002F00 75F5                    	jne	short tol_clc_retn
  7438                                  
  7439 00002F02 BA[00A00000]            	mov	edx, WAVBUFFER_1
  7440                                  tol_@:
  7441                                  	; calculate differential
  7442                                  	; 29/12/2024
  7443 00002F07 3915[E0840000]          	cmp	[pbuf_s], edx
  7444 00002F0D 7520                    	jne	short tol_ns_buf
  7445 00002F0F 8B1D[D8840000]          	mov	ebx, [wleds_dif]
  7446 00002F15 8B35[DC840000]          	mov	esi, [pbuf_o]
  7447 00002F1B 8B0D[94850000]          	mov	ecx, [buffersize] ; bytes
  7448 00002F21 29D9                    	sub	ecx, ebx ; sub ecx, [wleds_dif]
  7449 00002F23 01DE                    	add	esi, ebx
  7450 00002F25 7204                    	jc	short tol_o_@
  7451 00002F27 39CE                    	cmp	esi, ecx
  7452 00002F29 760C                    	jna	short tol_s_buf
  7453                                  tol_o_@:
  7454 00002F2B 89CE                    	mov	esi, ecx
  7455 00002F2D EB08                    	jmp	short tol_s_buf
  7456                                  
  7457                                  tol_ns_buf:
  7458                                  	; 29/12/2024
  7459 00002F2F 8915[E0840000]          	mov	[pbuf_s], edx
  7460 00002F35 31F6                    	xor	esi, esi ; 0
  7461                                  tol_s_buf:
  7462 00002F37 8935[DC840000]          	mov	[pbuf_o], esi
  7463                                  
  7464                                  tol_buf_@:
  7465                                  	; 29/12/2024
  7466 00002F3D 01D6                    	add	esi, edx ; [pbuf_s]
  7467 00002F3F B950000000              	mov	ecx, 80
  7468                                  	;xor	eax, eax ; 0
  7469 00002F44 BB[78650000]            	mov	ebx, wleds_addr
  7470                                  	; 22/12/2024
  7471 00002F49 BF[78790000]            	mov	edi, prev_leds
  7472                                  tol_fill_c:
  7473 00002F4E 31C0                    	xor	eax, eax ; 0 ; 22/12/2024
  7474 00002F50 66AD                    	lodsw	; left
  7475 00002F52 80C480                  	add	ah, 80h	; 24/12/2024
  7476 00002F55 89C2                    	mov	edx, eax
  7477 00002F57 66AD                    	lodsw	; right
  7478                                  	;add	ax, dx
  7479 00002F59 80C480                  	add	ah, 80h
  7480                                  	;; 21/12/2024 (16 volume levels)
  7481                                  	;shr	eax, 12
  7482                                  	; 24/12/2024
  7483 00002F5C 01D0                    	add	eax, edx
  7484 00002F5E C1E80D                  	shr	eax, 13	; (L+R/2) & 16 volume levels
  7485                                  
  7486 00002F61 53                      	push	ebx ; *
  7487                                  	; 01/12/2024
  7488 00002F62 C1E002                  	shl	eax, 2
  7489 00002F65 01C3                    	add	ebx, eax
  7490                                  	; 01/12/2024 (32bit address)
  7491                                  	;mov	edi, [ebx]
  7492                                  	; 22/12/2024
  7493 00002F67 8B03                    	mov	eax, [ebx]
  7494 00002F69 AB                      	stosd
  7495 00002F6A 57                      	push	edi ; **
  7496 00002F6B 89C7                    	mov	edi, eax
  7497                                  	;;;
  7498                                  	; 21/12/2024
  7499                                  	; (simulate wave leds in graphics mode)
  7500                                  	; (640*480, 256 colors)
  7501                                  turn_on_led:
  7502                                  	; edi = wave led address
  7503 00002F6D BD0E000000              	mov	ebp, 14
  7504 00002F72 BB[58650000]            	mov	ebx, fontbuff2+(254*16) ; char = 254
  7505 00002F77 A0[75470000]            	mov	al, [ccolor]
  7506                                  tol_next_line:
  7507 00002F7C BA08000000              	mov	edx, 8 ; 8 pixels (8*14 pixel font)
  7508 00002F81 8A23                    	mov	ah, [ebx]
  7509                                  tol_next_pixel:
  7510 00002F83 D0E4                    	shl	ah, 1
  7511 00002F85 7310                    	jnc	short tol_skip_this
  7512 00002F87 AA                      	stosb
  7513                                  tol_next_pixel_@:
  7514 00002F88 4A                      	dec	edx
  7515 00002F89 75F8                    	jnz	short tol_next_pixel
  7516 00002F8B 4D                      	dec	ebp
  7517 00002F8C 740C                    	jz	short tol_next_led
  7518                                  	; 22/12/2024
  7519 00002F8E 81C778020000            	add	edi, 640-8 ; next line
  7520 00002F94 43                      	inc	ebx
  7521 00002F95 EBE5                    	jmp	short tol_next_line
  7522                                  tol_skip_this:
  7523 00002F97 47                      	inc	edi
  7524 00002F98 EBEE                    	jmp	short tol_next_pixel_@
  7525                                  tol_next_led:
  7526                                  	; 22/12/2024
  7527 00002F9A 5F                      	pop	edi ; **
  7528                                  	;;;
  7529 00002F9B 5B                      	pop	ebx ; *
  7530 00002F9C 83C340                  	add	ebx, 16*4
  7531 00002F9F E2AD                    	loop	tol_fill_c
  7532                                  
  7533 00002FA1 C3                      	retn
  7534                                  
  7535                                  ; -------------------------------------------------------------
  7536                                  
  7537                                  ; -------------------------------------------------------------
  7538                                  ; ac97.inc (11/11/2023)
  7539                                  ; -------------------------------------------------------------
  7540                                  
  7541                                  ; special characters
  7542                                  LF      EQU 10
  7543                                  CR      EQU 13
  7544                                  
  7545                                  ; PCI stuff
  7546                                  
  7547                                  BIT0  EQU 1
  7548                                  BIT1  EQU 2
  7549                                  BIT2  EQU 4
  7550                                  BIT8  EQU 100h
  7551                                  BIT9  EQU 200h
  7552                                  BIT28 EQU 10000000h
  7553                                  BIT30 EQU 40000000h
  7554                                  BIT31 EQU 80000000h
  7555                                  
  7556                                  BUP		equ	BIT30		; Buffer Underrun Policy.
  7557                                  					; if this buffer is the last buffer
  7558                                  					; in a playback, fill the remaining
  7559                                  					; samples with 0 (silence) or not.
  7560                                  					; It's a good idea to set this to 1
  7561                                  					; for the last buffer in playback,
  7562                                  					; otherwise you're likely to get a lot
  7563                                  					; of noise at the end of the sound.
  7564                                  
  7565                                  RR		equ	BIT1		; reset registers. Nukes all regs
  7566                                                                          ; except bits 4:2 of this register.
  7567                                                                          ; Only set this bit if BIT 0 is 0
  7568                                  RPBM		equ	BIT0		; Run/Pause
  7569                                  					; set this bit to start the codec!
  7570                                  IO_ENA		EQU	BIT0		; i/o decode enable
  7571                                  BM_ENA		EQU	BIT2		; bus master enable
  7572                                  
  7573                                  PCI_INDEX_PORT  EQU     0CF8h
  7574                                  PCI_DATA_PORT   EQU     0CFCh
  7575                                  PCI32           EQU     BIT31           ; bitflag to signal 32bit access
  7576                                  PCI16           EQU     BIT30           ; bitflag for 16bit access
  7577                                  
  7578                                  AC97_INT_LINE	equ	3Ch		; AC97 Interrupt Line register offset
  7579                                  
  7580                                  ; Intel ICH2 equates. It is assumed that ICH0 and plain ole ICH are compatible.
  7581                                  
  7582                                  INTEL_VID       equ     8086h           ; Intel's PCI vendor ID
  7583                                  ; 03/11/2023 - Erdogan Tan (Ref: MenuetOS AC97 WAV Player source code, 2004)
  7584                                  SIS_VID		equ	1039h
  7585                                  NVIDIA_VID	equ	10DEh	 ; Ref: MPXPLAY/SBEMU/KOLIBRIOS AC97 source c.
  7586                                  AMD_VID		equ	1022h
  7587                                  
  7588                                  ICH_DID         equ     2415h           ; ICH device ID
  7589                                  ICH0_DID        equ     2425h           ; ICH0
  7590                                  ICH2_DID        equ     2445h           ; ICH2 I think there are more ICHes.
  7591                                                                          ; they all should be compatible.
  7592                                  
  7593                                  ; 17/02/2017 (Erdogan Tan, ref: ALSA Device IDs, ALSA project)
  7594                                  ICH3_DID	equ     2485h           ; ICH3
  7595                                  ICH4_DID        equ     24C5h           ; ICH4
  7596                                  ICH5_DID	equ     24D5h           ; ICH5
  7597                                  ICH6_DID	equ     266Eh           ; ICH6
  7598                                  ESB6300_DID	equ     25A6h           ; 6300ESB
  7599                                  ESB631X_DID	equ     2698h           ; 631XESB
  7600                                  ICH7_DID	equ	27DEh		; ICH7
  7601                                  ; 03/11/2023 - Erdogan Tan (Ref: MenuetOS AC97 WAV Player source code, 2004)
  7602                                  MX82440_DID	equ	7195h
  7603                                  SI7012_DID	equ	7012h
  7604                                  NFORCE_DID	equ	01B1h
  7605                                  NFORCE2_DID	equ	006Ah
  7606                                  AMD8111_DID	equ	746Dh
  7607                                  AMD768_DID	equ	7445h
  7608                                  ; 03/11/2023 - Erdogan Tan - Ref: MPXPLAY/SBEMU/KOLIBRIOS AC97 source code
  7609                                  CK804_DID	equ	0059h
  7610                                  MCP04_DID	equ	003Ah
  7611                                  CK8_DID		equ	008Ah
  7612                                  NFORCE3_DID	equ	00DAh
  7613                                  CK8S_DID	equ	00EAh
  7614                                  
  7615                                  NAMBAR_REG	equ	10h		; native audio mixer BAR
  7616                                  NABMBAR_REG	equ	14h		; native audio bus mastering BAR
  7617                                  
  7618                                  CODEC_MASTER_VOL_REG	equ	02h	; master volume
  7619                                  CODEC_MASTER_TONE_REG	equ	08h	; master tone (R+L)
  7620                                  CODEC_PCM_OUT_REG 	equ	18h     ; PCM output volume
  7621                                  CODEC_EXT_AUDIO_REG	equ	28h	; extended audio
  7622                                  CODEC_EXT_AUDIO_CTRL_REG equ	2Ah	; extended audio control
  7623                                  CODEC_PCM_FRONT_DACRATE_REG equ	2Ch	; PCM out sample rate
  7624                                  
  7625                                  ; ICH supports 3 different types of register sets for three types of things
  7626                                  ; it can do, thus:
  7627                                  ;
  7628                                  ; PCM in (for recording) aka PI
  7629                                  ; PCM out (for playback) aka PO
  7630                                  ; MIC in (for recording) aka MC
  7631                                  
  7632                                  PI_BDBAR_REG	equ	0		; PCM in buffer descriptor BAR
  7633                                  PO_BDBAR_REG	equ	10h		; PCM out buffer descriptor BAR
  7634                                  
  7635                                  GLOB_CNT_REG	equ	2Ch		; Global control register
  7636                                  GLOB_STS_REG 	equ	30h		; Global Status register (RO)
  7637                                  
  7638                                  PI_CR_REG 	equ	0Bh		; PCM in Control Register
  7639                                  PO_CR_REG	equ	1Bh		; PCM out Control Register
  7640                                  MC_CR_REG	equ	2Bh		; MIC in Control Register
  7641                                  
  7642                                  PCI_CMD_REG	EQU	04h		; reg 04h, command register
  7643                                  
  7644                                  CTRL_ST_CREADY		equ	BIT8+BIT9+BIT28 ; Primary Codec Ready
  7645                                  CODEC_REG_POWERDOWN	equ	26h
  7646                                  
  7647                                  PO_CIV_REG	equ	14h		; PCM out current Index value (RO)
  7648                                  PO_LVI_REG	equ	15h		; PCM out Last Valid Index
  7649                                  PO_SR_REG	equ	16h		; PCM out Status register
  7650                                  
  7651                                  ; -------------------------------------------------------------
  7652                                  
  7653                                  ; 22/12/2024
  7654 00002FA2 90<rep 2h>              align 4
  7655                                  
  7656                                  ; 13/11/2024
  7657                                  ; ('<<' to 'shl' conversion for FASM)
  7658                                  ;
  7659                                  ; 29/05/2024 (TRDOS 386)
  7660                                  ; 17/02/2017
  7661                                  ; Valid ICH device IDs
  7662                                  
  7663                                  valid_ids:
  7664                                  	;dd (ICH_DID shl 16) + INTEL_VID	; 8086h:2415h
  7665 00002FA4 86801524                	dd (ICH_DID << 16) + INTEL_VID		; 8086h:2415h
  7666 00002FA8 86802524                	dd (ICH0_DID << 16) + INTEL_VID		; 8086h:2425h
  7667 00002FAC 86804524                	dd (ICH2_DID << 16) + INTEL_VID		; 8086h:2445h
  7668 00002FB0 86808524                	dd (ICH3_DID << 16) + INTEL_VID		; 8086h:2485h
  7669 00002FB4 8680C524                	dd (ICH4_DID << 16) + INTEL_VID		; 8086h:24C5h
  7670 00002FB8 8680D524                	dd (ICH5_DID << 16) + INTEL_VID		; 8086h:24D5h
  7671 00002FBC 86806E26                	dd (ICH6_DID << 16) + INTEL_VID		; 8086h:266Eh
  7672 00002FC0 8680A625                	dd (ESB6300_DID << 16) + INTEL_VID	; 8086h:25A6h
  7673 00002FC4 86809826                	dd (ESB631X_DID << 16) + INTEL_VID	; 8086h:2698h
  7674 00002FC8 8680DE27                	dd (ICH7_DID << 16) + INTEL_VID		; 8086h:27DEh
  7675                                  	; 03/11/2023 - Erdogan Tan
  7676 00002FCC 86809571                	dd (MX82440_DID << 16) + INTEL_VID	; 8086h:7195h
  7677 00002FD0 39101270                	dd (SI7012_DID << 16)  + SIS_VID	; 1039h:7012h
  7678 00002FD4 DE10B101                	dd (NFORCE_DID << 16)  + NVIDIA_VID	; 10DEh:01B1h
  7679 00002FD8 DE106A00                	dd (NFORCE2_DID << 16) + NVIDIA_VID	; 10DEh:006Ah
  7680 00002FDC 22106D74                	dd (AMD8111_DID << 16) + AMD_VID	; 1022h:746Dh
  7681 00002FE0 22104574                	dd (AMD768_DID << 16)  + AMD_VID	; 1022h:7445h
  7682 00002FE4 DE105900                	dd (CK804_DID << 16) + NVIDIA_VID	; 10DEh:0059h
  7683 00002FE8 DE103A00                	dd (MCP04_DID << 16) + NVIDIA_VID	; 10DEh:003Ah
  7684 00002FEC DE108A00                	dd (CK8_DID << 16) + NVIDIA_VID		; 1022h:008Ah
  7685 00002FF0 DE10DA00                	dd (NFORCE3_DID << 16) + NVIDIA_VID	; 10DEh:00DAh
  7686 00002FF4 DE10EA00                	dd (CK8S_DID << 16) + NVIDIA_VID	; 10DEh:00EAh
  7687                                  
  7688                                  valid_id_count equ (($ - valid_ids)>>2)	; 05/11/2023
  7689                                  ; 13/11/2024
  7690                                  ;valid_id_count = ($ - valid_ids) shr 2	; 05/11/2023
  7691                                  
  7692 00002FF8 00000000                	dd 0
  7693                                  
  7694                                  Credits:
  7695 00002FFC 564741205741562050-     	db 'VGA WAV Player for TRDOS 386 by Erdogan Tan. '
  7695 00003005 6C6179657220666F72-
  7695 0000300E 205452444F53203338-
  7695 00003017 36206279204572646F-
  7695 00003020 67616E2054616E2E20 
  7696 00003029 446563656D62657220-     	db 'December 2024.',10,13,0
  7696 00003032 323032342E0A0D00   
  7697 0000303A 33302F31322F323032-     	db '30/12/2024', 10,13
  7697 00003043 340A0D             
  7698                                  ; 15/11/2024
  7699                                  reset:
  7700 00003046 00                      	db 0
  7701                                  
  7702                                  msgAudioCardInfo:
  7703 00003047 666F7220496E74656C-     	db 'for Intel AC97 (ICH) Audio Controller.', 10,13,0
  7703 00003050 204143393720284943-
  7703 00003059 482920417564696F20-
  7703 00003062 436F6E74726F6C6C65-
  7703 0000306B 722E0A0D00         
  7704                                  
  7705                                  	; 27/12/2024
  7706                                  msg_usage:
  7707 00003070 75736167653A205647-     	db 'usage: VGAPLAY3 <FileName1> <FileName2> <...>',10,13,0
  7707 00003079 41504C415933203C46-
  7707 00003082 696C654E616D65313E-
  7707 0000308B 203C46696C654E616D-
  7707 00003094 65323E203C2E2E2E3E-
  7707 0000309D 0A0D00             
  7708                                  
  7709                                  noDevMsg:
  7710 000030A0 4572726F723A20556E-     	db 'Error: Unable to find AC97 audio device!'
  7710 000030A9 61626C6520746F2066-
  7710 000030B2 696E64204143393720-
  7710 000030BB 617564696F20646576-
  7710 000030C4 69636521           
  7711 000030C8 0A0D00                  	db 10,13,0
  7712                                  
  7713                                  noFileErrMsg:
  7714 000030CB 4572726F723A206669-     	db 'Error: file not found.',10,13,0
  7714 000030D4 6C65206E6F7420666F-
  7714 000030DD 756E642E0A0D00     
  7715                                  
  7716                                  ; 07/12/2024
  7717                                  trdos386_err_msg:
  7718 000030E4 5452444F5320333836-     	db 'TRDOS 386 System call error !',10,13,0
  7718 000030ED 2053797374656D2063-
  7718 000030F6 616C6C206572726F72-
  7718 000030FF 20210A0D00         
  7719                                  
  7720                                  ; 29/05/2024
  7721                                  ; 11/11/2023
  7722                                  msg_init_err:
  7723 00003104 0D0A                    	db CR, LF
  7724 00003106 4143393720436F6E74-     	db 'AC97 Controller/Codec initialization error !'
  7724 0000310F 726F6C6C65722F436F-
  7724 00003118 64656320696E697469-
  7724 00003121 616C697A6174696F6E-
  7724 0000312A 206572726F722021   
  7725 00003132 0D0A00                  	db CR, LF, 0 ; 07/12/2024
  7726                                  
  7727                                  ; 25/11/2023
  7728                                  msg_no_vra:
  7729 00003135 0A0D                    	db 10,13
  7730 00003137 4E6F20565241207375-     	db 'No VRA support ! Only 48 kHZ sample rate supported !'
  7730 00003140 70706F72742021204F-
  7730 00003149 6E6C79203438206B48-
  7730 00003152 5A2073616D706C6520-
  7730 0000315B 726174652073757070-
  7730 00003164 6F727465642021     
  7731 0000316B 0A0D00                  	db 10,13,0
  7732                                  
  7733                                  ; 19/11/2024
  7734                                  ; 03/06/2017
  7735                                  hex_chars:
  7736 0000316E 303132333435363738-     	db '0123456789ABCDEF', 0
  7736 00003177 3941424344454600   
  7737                                  msgAC97Info:
  7738 0000317F 0D0A                    	db 0Dh, 0Ah
  7739 00003181 204143393720417564-     	db ' AC97 Audio Controller & Codec Info', 0Dh, 0Ah 
  7739 0000318A 696F20436F6E74726F-
  7739 00003193 6C6C6572202620436F-
  7739 0000319C 64656320496E666F0D-
  7739 000031A5 0A                 
  7740 000031A6 2056656E646F722049-     	db ' Vendor ID: '
  7740 000031AF 443A20             
  7741                                  msgVendorId:
  7742 000031B2 303030306820446576-     	db '0000h Device ID: '
  7742 000031BB 6963652049443A20   
  7743                                  msgDevId:
  7744 000031C3 30303030680D0A          	db '0000h', 0Dh, 0Ah
  7745 000031CA 204275733A20            	db ' Bus: '
  7746                                  msgBusNo:
  7747 000031D0 303068204465766963-     	db '00h Device: '
  7747 000031D9 653A20             
  7748                                  msgDevNo:
  7749 000031DC 3030682046756E6374-     	db '00h Function: '
  7749 000031E5 696F6E3A20         
  7750                                  msgFncNo:
  7751 000031EA 303068                  	db '00h'
  7752 000031ED 0D0A                    	db 0Dh, 0Ah
  7753 000031EF 204E414D4241523A20      	db ' NAMBAR: '
  7754                                  msgNamBar:
  7755 000031F8 30303030682020          	db '0000h  '
  7756 000031FF 4E41424D4241523A20      	db 'NABMBAR: '
  7757                                  msgNabmBar:
  7758 00003208 303030306820204952-     	db '0000h  IRQ: '
  7758 00003211 513A20             
  7759                                  msgIRQ:
  7760 00003214 3030                    	dw 3030h
  7761 00003216 0D0A00                  	db 0Dh, 0Ah, 0
  7762                                  ; 25/11/2023
  7763                                  msgVRAheader:
  7764 00003219 205652412073757070-     	db ' VRA support: '
  7764 00003222 6F72743A20         
  7765 00003227 00                      	db 0	
  7766                                  msgVRAyes:
  7767 00003228 5945530D0A00            	db 'YES', 0Dh, 0Ah, 0
  7768                                  msgVRAno:
  7769 0000322E 4E4F200D0A              	db 'NO ', 0Dh, 0Ah
  7770 00003233 2028496E746572706F-     	db ' (Interpolated sample rate playing method)'
  7770 0000323C 6C617465642073616D-
  7770 00003245 706C65207261746520-
  7770 0000324E 706C6179696E67206D-
  7770 00003257 6574686F6429       
  7771 0000325D 0D0A00                  	db 0Dh, 0Ah, 0
  7772                                  
  7773                                  align 4
  7774                                  
  7775                                  ; -------------------------------------------------------------
  7776                                  
  7777                                  	; 21/12/2024
  7778                                  SplashScreen:
  7779 00003260 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7779 00003269 202020202020202020-
  7779 00003272 202020202020202020-
  7779 0000327B 202020202020202020-
  7779 00003284 202020202020202020-
  7779 0000328D 202020202020202020-
  7779 00003296 202020202020202020-
  7779 0000329F 202020202020202020-
  7779 000032A8 2020202020DDDBDE   
  7780 000032B0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7780 000032B9 202020202020202020-
  7780 000032C2 202020202020202020-
  7780 000032CB 202020202020202020-
  7780 000032D4 202020202020202020-
  7780 000032DD 202020202020202020-
  7780 000032E6 202020202020202020-
  7780 000032EF 202020202020202020-
  7780 000032F8 2020202020DDDBDE   
  7781 00003300 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7781 00003309 202020202020202020-
  7781 00003312 202020202020202020-
  7781 0000331B 202020202020202020-
  7781 00003324 202020202020202020-
  7781 0000332D 202020202020202020-
  7781 00003336 202020202020202020-
  7781 0000333F 202020202020202020-
  7781 00003348 2020202020DDDBDE   
  7782 00003350 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7782 00003359 202020202020202020-
  7782 00003362 202020202020202020-
  7782 0000336B 202020202020202020-
  7782 00003374 202020202020202020-
  7782 0000337D 202020202020202020-
  7782 00003386 202020202020202020-
  7782 0000338F 202020202020202020-
  7782 00003398 2020202020DDDBDE   
  7783 000033A0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7783 000033A9 202020202020202020-
  7783 000033B2 202020202020202020-
  7783 000033BB 202020202020202020-
  7783 000033C4 202020202020202020-
  7783 000033CD 202020202020202020-
  7783 000033D6 202020202020202020-
  7783 000033DF 202020202020202020-
  7783 000033E8 2020202020DDDBDE   
  7784 000033F0 DDDBDE202020202020-     	db  221, 219, 222, "                     _______   ______        _______.                     ", 221, 219, 222
  7784 000033F9 202020202020202020-
  7784 00003402 2020202020205F5F5F-
  7784 0000340B 5F5F5F5F2020205F5F-
  7784 00003414 5F5F5F5F2020202020-
  7784 0000341D 2020205F5F5F5F5F5F-
  7784 00003426 5F2E20202020202020-
  7784 0000342F 202020202020202020-
  7784 00003438 2020202020DDDBDE   
  7785 00003440 DDDBDE202020202020-     	db  221, 219, 222, "                    |       \ /  __  \      /       |                     ", 221, 219, 222
  7785 00003449 202020202020202020-
  7785 00003452 20202020207C202020-
  7785 0000345B 202020205C202F2020-
  7785 00003464 5F5F20205C20202020-
  7785 0000346D 20202F202020202020-
  7785 00003476 207C20202020202020-
  7785 0000347F 202020202020202020-
  7785 00003488 2020202020DDDBDE   
  7786 00003490 DDDBDE202020202020-     	db  221, 219, 222, "                    |  .--.  |  |  |  |    |   (----`                     ", 221, 219, 222
  7786 00003499 202020202020202020-
  7786 000034A2 20202020207C20202E-
  7786 000034AB 2D2D2E20207C20207C-
  7786 000034B4 20207C20207C202020-
  7786 000034BD 207C202020282D2D2D-
  7786 000034C6 2D6020202020202020-
  7786 000034CF 202020202020202020-
  7786 000034D8 2020202020DDDBDE   
  7787 000034E0 DDDBDE202020202020-     	db  221, 219, 222, "                    |  |  |  |  |  |  |     \   \                         ", 221, 219, 222
  7787 000034E9 202020202020202020-
  7787 000034F2 20202020207C20207C-
  7787 000034FB 20207C20207C20207C-
  7787 00003504 20207C20207C202020-
  7787 0000350D 20205C2020205C2020-
  7787 00003516 202020202020202020-
  7787 0000351F 202020202020202020-
  7787 00003528 2020202020DDDBDE   
  7788 00003530 DDDBDE202020202020-     	db  221, 219, 222, "                    |  '--'  |  `--'  | .----)   |                        ", 221, 219, 222
  7788 00003539 202020202020202020-
  7788 00003542 20202020207C202027-
  7788 0000354B 2D2D2720207C202060-
  7788 00003554 2D2D2720207C202E2D-
  7788 0000355D 2D2D2D292020207C20-
  7788 00003566 202020202020202020-
  7788 0000356F 202020202020202020-
  7788 00003578 2020202020DDDBDE   
  7789 00003580 DDDBDE202020202020-     	db  221, 219, 222, "                    |_______/ \______/  |_______/                         ", 221, 219, 222
  7789 00003589 202020202020202020-
  7789 00003592 20202020207C5F5F5F-
  7789 0000359B 5F5F5F5F2F205C5F5F-
  7789 000035A4 5F5F5F5F2F20207C5F-
  7789 000035AD 5F5F5F5F5F5F2F2020-
  7789 000035B6 202020202020202020-
  7789 000035BF 202020202020202020-
  7789 000035C8 2020202020DDDBDE   
  7790 000035D0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7790 000035D9 202020202020202020-
  7790 000035E2 202020202020202020-
  7790 000035EB 202020202020202020-
  7790 000035F4 202020202020202020-
  7790 000035FD 202020202020202020-
  7790 00003606 202020202020202020-
  7790 0000360F 202020202020202020-
  7790 00003618 2020202020DDDBDE   
  7791 00003620 DDDBDE20202020202E-     	db  221, 219, 222, "     .______    __          ___   ____    ____  _______ .______           ", 221, 219, 222
  7791 00003629 5F5F5F5F5F5F202020-
  7791 00003632 205F5F202020202020-
  7791 0000363B 202020205F5F5F2020-
  7791 00003644 205F5F5F5F20202020-
  7791 0000364D 5F5F5F5F20205F5F5F-
  7791 00003656 5F5F5F5F202E5F5F5F-
  7791 0000365F 5F5F5F202020202020-
  7791 00003668 2020202020DDDBDE   
  7792 00003670 DDDBDE20202020207C-     	db  221, 219, 222, "     |   _  \  |  |        /   \  \   \  /   / |   ____||   _  \          ", 221, 219, 222
  7792 00003679 2020205F20205C2020-
  7792 00003682 7C20207C2020202020-
  7792 0000368B 2020202F2020205C20-
  7792 00003694 205C2020205C20202F-
  7792 0000369D 2020202F207C202020-
  7792 000036A6 5F5F5F5F7C7C202020-
  7792 000036AF 5F20205C2020202020-
  7792 000036B8 2020202020DDDBDE   
  7793 000036C0 DDDBDE20202020207C-     	db  221, 219, 222, "     |  |_)  | |  |       /  ^  \  \   \/   /  |  |__   |  |_)  |         ", 221, 219, 222
  7793 000036C9 20207C5F2920207C20-
  7793 000036D2 7C20207C2020202020-
  7793 000036DB 20202F20205E20205C-
  7793 000036E4 20205C2020205C2F20-
  7793 000036ED 20202F20207C20207C-
  7793 000036F6 5F5F2020207C20207C-
  7793 000036FF 5F2920207C20202020-
  7793 00003708 2020202020DDDBDE   
  7794 00003710 DDDBDE20202020207C-     	db  221, 219, 222, "     |   ___/  |  |      /  /_\  \  \_    _/   |   __|  |      /          ", 221, 219, 222
  7794 00003719 2020205F5F5F2F2020-
  7794 00003722 7C20207C2020202020-
  7794 0000372B 202F20202F5F5C2020-
  7794 00003734 5C20205C5F20202020-
  7794 0000373D 5F2F2020207C202020-
  7794 00003746 5F5F7C20207C202020-
  7794 0000374F 2020202F2020202020-
  7794 00003758 2020202020DDDBDE   
  7795 00003760 DDDBDE20202020207C-     	db  221, 219, 222, "     |  |      |  `----./  _____  \   |  |     |  |____ |  |\  \----.     ", 221, 219, 222
  7795 00003769 20207C202020202020-
  7795 00003772 7C2020602D2D2D2D2E-
  7795 0000377B 2F20205F5F5F5F5F20-
  7795 00003784 205C2020207C20207C-
  7795 0000378D 20202020207C20207C-
  7795 00003796 5F5F5F5F207C20207C-
  7795 0000379F 5C20205C2D2D2D2D2E-
  7795 000037A8 2020202020DDDBDE   
  7796 000037B0 DDDBDE20202020207C-     	db  221, 219, 222, "     | _|      |_______/__/     \__\  |__|     |_______|| _| `._____|     ", 221, 219, 222
  7796 000037B9 205F7C202020202020-
  7796 000037C2 7C5F5F5F5F5F5F5F2F-
  7796 000037CB 5F5F2F20202020205C-
  7796 000037D4 5F5F5C20207C5F5F7C-
  7796 000037DD 20202020207C5F5F5F-
  7796 000037E6 5F5F5F5F7C7C205F7C-
  7796 000037EF 20602E5F5F5F5F5F7C-
  7796 000037F8 2020202020DDDBDE   
  7797 00003800 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7797 00003809 202020202020202020-
  7797 00003812 202020202020202020-
  7797 0000381B 202020202020202020-
  7797 00003824 202020202020202020-
  7797 0000382D 202020202020202020-
  7797 00003836 202020202020202020-
  7797 0000383F 202020202020202020-
  7797 00003848 2020202020DDDBDE   
  7798 00003850 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7798 00003859 202020202020202020-
  7798 00003862 202020202020202020-
  7798 0000386B 202020202020202020-
  7798 00003874 202020202020202020-
  7798 0000387D 202020202020202020-
  7798 00003886 202020202020202020-
  7798 0000388F 202020202020202020-
  7798 00003898 2020202020DDDBDE   
  7799 000038A0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7799 000038A9 202020202020202020-
  7799 000038B2 202020202020202020-
  7799 000038BB 202020202020202020-
  7799 000038C4 202020202020202020-
  7799 000038CD 202020202020202020-
  7799 000038D6 202020202020202020-
  7799 000038DF 202020202020202020-
  7799 000038E8 2020202020DDDBDE   
  7800 000038F0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7800 000038F9 202020202020202020-
  7800 00003902 202020202020202020-
  7800 0000390B 202020202020202020-
  7800 00003914 202020202020202020-
  7800 0000391D 202020202020202020-
  7800 00003926 202020202020202020-
  7800 0000392F 202020202020202020-
  7800 00003938 2020202020DDDBDE   
  7801 00003940 DDDBDE202020202020-     	db  221, 219, 222, "                                WELCOME TO                                ", 221, 219, 222
  7801 00003949 202020202020202020-
  7801 00003952 202020202020202020-
  7801 0000395B 202020202020202057-
  7801 00003964 454C434F4D4520544F-
  7801 0000396D 202020202020202020-
  7801 00003976 202020202020202020-
  7801 0000397F 202020202020202020-
  7801 00003988 2020202020DDDBDE   
  7802 00003990 DDDBDE202020202020-     	db  221, 219, 222, "                                DOS PLAYER                                ", 221, 219, 222
  7802 00003999 202020202020202020-
  7802 000039A2 202020202020202020-
  7802 000039AB 202020202020202044-
  7802 000039B4 4F5320504C41594552-
  7802 000039BD 202020202020202020-
  7802 000039C6 202020202020202020-
  7802 000039CF 202020202020202020-
  7802 000039D8 2020202020DDDBDE   
  7803 000039E0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7803 000039E9 202020202020202020-
  7803 000039F2 202020202020202020-
  7803 000039FB 202020202020202020-
  7803 00003A04 202020202020202020-
  7803 00003A0D 202020202020202020-
  7803 00003A16 202020202020202020-
  7803 00003A1F 202020202020202020-
  7803 00003A28 2020202020DDDBDE   
  7804 00003A30 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7804 00003A39 202020202020202020-
  7804 00003A42 202020202020202020-
  7804 00003A4B 202020202020202020-
  7804 00003A54 202020202020202020-
  7804 00003A5D 202020202020202020-
  7804 00003A66 202020202020202020-
  7804 00003A6F 202020202020202020-
  7804 00003A78 2020202020DDDBDE   
  7805 00003A80 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7805 00003A89 202020202020202020-
  7805 00003A92 202020202020202020-
  7805 00003A9B 202020202020202020-
  7805 00003AA4 202020202020202020-
  7805 00003AAD 202020202020202020-
  7805 00003AB6 202020202020202020-
  7805 00003ABF 202020202020202020-
  7805 00003AC8 2020202020DDDBDE   
  7806 00003AD0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7806 00003AD9 202020202020202020-
  7806 00003AE2 202020202020202020-
  7806 00003AEB 202020202020202020-
  7806 00003AF4 202020202020202020-
  7806 00003AFD 202020202020202020-
  7806 00003B06 202020202020202020-
  7806 00003B0F 202020202020202020-
  7806 00003B18 2020202020DDDBDE   
  7807 00003B20 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7807 00003B29 202020202020202020-
  7807 00003B32 202020202020202020-
  7807 00003B3B 202020202020202020-
  7807 00003B44 202020202020202020-
  7807 00003B4D 202020202020202020-
  7807 00003B56 202020202020202020-
  7807 00003B5F 202020202020202020-
  7807 00003B68 2020202020DDDBDE   
  7808 00003B70 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7808 00003B79 202020202020202020-
  7808 00003B82 202020202020202020-
  7808 00003B8B 202020202020202020-
  7808 00003B94 202020202020202020-
  7808 00003B9D 202020202020202020-
  7808 00003BA6 202020202020202020-
  7808 00003BAF 202020202020202020-
  7808 00003BB8 2020202020DDDBDE   
  7809 00003BC0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7809 00003BC9 202020202020202020-
  7809 00003BD2 202020202020202020-
  7809 00003BDB 202020202020202020-
  7809 00003BE4 202020202020202020-
  7809 00003BED 202020202020202020-
  7809 00003BF6 202020202020202020-
  7809 00003BFF 202020202020202020-
  7809 00003C08 2020202020DDDBDE   
  7810 00003C10 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7810 00003C19 202020202020202020-
  7810 00003C22 202020202020202020-
  7810 00003C2B 202020202020202020-
  7810 00003C34 202020202020202020-
  7810 00003C3D 202020202020202020-
  7810 00003C46 202020202020202020-
  7810 00003C4F 202020202020202020-
  7810 00003C58 2020202020DDDBDE   
  7811 00003C60 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7811 00003C69 202020202020202020-
  7811 00003C72 202020202020202020-
  7811 00003C7B 202020202020202020-
  7811 00003C84 202020202020202020-
  7811 00003C8D 202020202020202020-
  7811 00003C96 202020202020202020-
  7811 00003C9F 202020202020202020-
  7811 00003CA8 2020202020DDDBDE   
  7812 00003CB0 DDDBDE202020202020-     	db  221, 219, 222, "                                                                          ", 221, 219, 222
  7812 00003CB9 202020202020202020-
  7812 00003CC2 202020202020202020-
  7812 00003CCB 202020202020202020-
  7812 00003CD4 202020202020202020-
  7812 00003CDD 202020202020202020-
  7812 00003CE6 202020202020202020-
  7812 00003CEF 202020202020202020-
  7812 00003CF8 2020202020DDDBDE   
  7813 00003D00 00                      	db 0
  7814                                  
  7815                                  ; -------------------------------------------------------------
  7816                                  
  7817                                  	; 25/12/2024
  7818                                  PlayingScreen:
  7819 00003D01 DBDBDBDBDBDBDBDBDB-     	db  34 dup(219), " DOS Player ", 34 dup(219)
  7819 00003D0A DBDBDBDBDBDBDBDBDB-
  7819 00003D13 DBDBDBDBDBDBDBDBDB-
  7819 00003D1C DBDBDBDBDBDBDB2044-
  7819 00003D25 4F5320506C61796572-
  7819 00003D2E 20DBDBDBDBDBDBDBDB-
  7819 00003D37 DBDBDBDBDBDBDBDBDB-
  7819 00003D40 DBDBDBDBDBDBDBDBDB-
  7819 00003D49 DBDBDBDBDBDBDBDB   
  7820 00003D51 C9CDCDCDCDCDCDCDCD-     	db  201, 78 dup(205), 187
  7820 00003D5A CDCDCDCDCDCDCDCDCD-
  7820 00003D63 CDCDCDCDCDCDCDCDCD-
  7820 00003D6C CDCDCDCDCDCDCDCDCD-
  7820 00003D75 CDCDCDCDCDCDCDCDCD-
  7820 00003D7E CDCDCDCDCDCDCDCDCD-
  7820 00003D87 CDCDCDCDCDCDCDCDCD-
  7820 00003D90 CDCDCDCDCDCDCDCDCD-
  7820 00003D99 CDCDCDCDCDCDCDBB   
  7821 00003DA1 BA2020202020202020-     	db  186, 33 dup(32), " User Guide ", 33 dup(32), 186
  7821 00003DAA 202020202020202020-
  7821 00003DB3 202020202020202020-
  7821 00003DBC 202020202020202055-
  7821 00003DC5 736572204775696465-
  7821 00003DCE 202020202020202020-
  7821 00003DD7 202020202020202020-
  7821 00003DE0 202020202020202020-
  7821 00003DE9 20202020202020BA   
  7822 00003DF1 BA2020202020203C53-     	db  186, 6  dup(32), "<Space>         Play/Pause    ", 4 dup(32), "<N>/<P>         Next/Previous", 9 dup(32), 186
  7822 00003DFA 706163653E20202020-
  7822 00003E03 2020202020506C6179-
  7822 00003E0C 2F5061757365202020-
  7822 00003E15 20202020203C4E3E2F-
  7822 00003E1E 3C503E202020202020-
  7822 00003E27 2020204E6578742F50-
  7822 00003E30 726576696F75732020-
  7822 00003E39 20202020202020BA   
  7823 00003E41 BA2020202020203C53-     	db  186, 6  dup(32), "<S>             Stop          ", 4 dup(32), "<Enter>/<G>     Wave Lighting", 9 dup(32), 186
  7823 00003E4A 3E2020202020202020-
  7823 00003E53 202020202053746F70-
  7823 00003E5C 202020202020202020-
  7823 00003E65 20202020203C456E74-
  7823 00003E6E 65723E2F3C473E2020-
  7823 00003E77 20202057617665204C-
  7823 00003E80 69676874696E672020-
  7823 00003E89 20202020202020BA   
  7824 00003E91 BA2020202020203C46-     	db  186, 6  dup(32), "<F>             Forwards      ", 4 dup(32), "<+>/<->         Inc/Dec Volume", 8 dup(32), 186
  7824 00003E9A 3E2020202020202020-
  7824 00003EA3 2020202020466F7277-
  7824 00003EAC 617264732020202020-
  7824 00003EB5 20202020203C2B3E2F-
  7824 00003EBE 3C2D3E202020202020-
  7824 00003EC7 202020496E632F4465-
  7824 00003ED0 6320566F6C756D6520-
  7824 00003ED9 20202020202020BA   
  7825 00003EE1 BA2020202020203C42-     	db  186, 6  dup(32), "<B>             Backwards     ", 4 dup(32), "<Q>             Quit Program ", 9 dup(32), 186
  7825 00003EEA 3E2020202020202020-
  7825 00003EF3 20202020204261636B-
  7825 00003EFC 776172647320202020-
  7825 00003F05 20202020203C513E20-
  7825 00003F0E 202020202020202020-
  7825 00003F17 202020517569742050-
  7825 00003F20 726F6772616D202020-
  7825 00003F29 20202020202020BA   
  7826 00003F31 CCCDCDCDCDCDCDCDCD-     	db  204, 78 dup(205), 185
  7826 00003F3A CDCDCDCDCDCDCDCDCD-
  7826 00003F43 CDCDCDCDCDCDCDCDCD-
  7826 00003F4C CDCDCDCDCDCDCDCDCD-
  7826 00003F55 CDCDCDCDCDCDCDCDCD-
  7826 00003F5E CDCDCDCDCDCDCDCDCD-
  7826 00003F67 CDCDCDCDCDCDCDCDCD-
  7826 00003F70 CDCDCDCDCDCDCDCDCD-
  7826 00003F79 CDCDCDCDCDCDCDB9   
  7827 00003F81 BA2020202020204669-     	db  186, 6  dup(32), "File Name :                   ", 4 dup(32), "Bit-Rate  :     0  Bits      ", 9 dup(32), 186
  7827 00003F8A 6C65204E616D65203A-
  7827 00003F93 202020202020202020-
  7827 00003F9C 202020202020202020-
  7827 00003FA5 20202020204269742D-
  7827 00003FAE 5261746520203A2020-
  7827 00003FB7 202020302020426974-
  7827 00003FC0 732020202020202020-
  7827 00003FC9 20202020202020BA   
  7828 00003FD1 BA2020202020204672-     	db  186, 6  dup(32), "Frequency :     0     Hz      ", 4 dup(32), "#-Channels:     0            ", 9 dup(32), 186
  7828 00003FDA 657175656E6379203A-
  7828 00003FE3 202020202030202020-
  7828 00003FEC 2020487A2020202020-
  7828 00003FF5 2020202020232D4368-
  7828 00003FFE 616E6E656C733A2020-
  7828 00004007 202020302020202020-
  7828 00004010 202020202020202020-
  7828 00004019 20202020202020BA   
  7829 00004021 C8CDCDCDCDCDCDCDCD-     	db  200, 78 dup(205), 188
  7829 0000402A CDCDCDCDCDCDCDCDCD-
  7829 00004033 CDCDCDCDCDCDCDCDCD-
  7829 0000403C CDCDCDCDCDCDCDCDCD-
  7829 00004045 CDCDCDCDCDCDCDCDCD-
  7829 0000404E CDCDCDCDCDCDCDCDCD-
  7829 00004057 CDCDCDCDCDCDCDCDCD-
  7829 00004060 CDCDCDCDCDCDCDCDCD-
  7829 00004069 CDCDCDCDCDCDCDBC   
  7830 00004071 202020202020202020-     	db  80 dup(32)
  7830 0000407A 202020202020202020-
  7830 00004083 202020202020202020-
  7830 0000408C 202020202020202020-
  7830 00004095 202020202020202020-
  7830 0000409E 202020202020202020-
  7830 000040A7 202020202020202020-
  7830 000040B0 202020202020202020-
  7830 000040B9 2020202020202020   
  7831                                  improper_samplerate_txt:
  7832                                  read_error_txt:
  7833 000040C1 202020202020202020-     	db  80 dup(32)
  7833 000040CA 202020202020202020-
  7833 000040D3 202020202020202020-
  7833 000040DC 202020202020202020-
  7833 000040E5 202020202020202020-
  7833 000040EE 202020202020202020-
  7833 000040F7 202020202020202020-
  7833 00004100 202020202020202020-
  7833 00004109 2020202020202020   
  7834 00004111 202020202020202020-     	db  80 dup(32)
  7834 0000411A 202020202020202020-
  7834 00004123 202020202020202020-
  7834 0000412C 202020202020202020-
  7834 00004135 202020202020202020-
  7834 0000413E 202020202020202020-
  7834 00004147 202020202020202020-
  7834 00004150 202020202020202020-
  7834 00004159 2020202020202020   
  7835 00004161 202020202020202020-     	db  80 dup(32)
  7835 0000416A 202020202020202020-
  7835 00004173 202020202020202020-
  7835 0000417C 202020202020202020-
  7835 00004185 202020202020202020-
  7835 0000418E 202020202020202020-
  7835 00004197 202020202020202020-
  7835 000041A0 202020202020202020-
  7835 000041A9 2020202020202020   
  7836 000041B1 202020202020202020-     	db  80 dup(32)
  7836 000041BA 202020202020202020-
  7836 000041C3 202020202020202020-
  7836 000041CC 202020202020202020-
  7836 000041D5 202020202020202020-
  7836 000041DE 202020202020202020-
  7836 000041E7 202020202020202020-
  7836 000041F0 202020202020202020-
  7836 000041F9 2020202020202020   
  7837 00004201 202020202020202020-     	db  80 dup(32)
  7837 0000420A 202020202020202020-
  7837 00004213 202020202020202020-
  7837 0000421C 202020202020202020-
  7837 00004225 202020202020202020-
  7837 0000422E 202020202020202020-
  7837 00004237 202020202020202020-
  7837 00004240 202020202020202020-
  7837 00004249 2020202020202020   
  7838 00004251 202020202020202020-     	db  80 dup(32)
  7838 0000425A 202020202020202020-
  7838 00004263 202020202020202020-
  7838 0000426C 202020202020202020-
  7838 00004275 202020202020202020-
  7838 0000427E 202020202020202020-
  7838 00004287 202020202020202020-
  7838 00004290 202020202020202020-
  7838 00004299 2020202020202020   
  7839 000042A1 202020202020202020-     	db  80 dup(32)
  7839 000042AA 202020202020202020-
  7839 000042B3 202020202020202020-
  7839 000042BC 202020202020202020-
  7839 000042C5 202020202020202020-
  7839 000042CE 202020202020202020-
  7839 000042D7 202020202020202020-
  7839 000042E0 202020202020202020-
  7839 000042E9 2020202020202020   
  7840 000042F1 202020202020202020-     	db  80 dup(32)
  7840 000042FA 202020202020202020-
  7840 00004303 202020202020202020-
  7840 0000430C 202020202020202020-
  7840 00004315 202020202020202020-
  7840 0000431E 202020202020202020-
  7840 00004327 202020202020202020-
  7840 00004330 202020202020202020-
  7840 00004339 2020202020202020   
  7841 00004341 202020202020202020-     	db  80 dup(32)
  7841 0000434A 202020202020202020-
  7841 00004353 202020202020202020-
  7841 0000435C 202020202020202020-
  7841 00004365 202020202020202020-
  7841 0000436E 202020202020202020-
  7841 00004377 202020202020202020-
  7841 00004380 202020202020202020-
  7841 00004389 2020202020202020   
  7842 00004391 202020202020202020-     	db  80 dup(32)
  7842 0000439A 202020202020202020-
  7842 000043A3 202020202020202020-
  7842 000043AC 202020202020202020-
  7842 000043B5 202020202020202020-
  7842 000043BE 202020202020202020-
  7842 000043C7 202020202020202020-
  7842 000043D0 202020202020202020-
  7842 000043D9 2020202020202020   
  7843 000043E1 202020202020202020-     	db  80 dup(32)
  7843 000043EA 202020202020202020-
  7843 000043F3 202020202020202020-
  7843 000043FC 202020202020202020-
  7843 00004405 202020202020202020-
  7843 0000440E 202020202020202020-
  7843 00004417 202020202020202020-
  7843 00004420 202020202020202020-
  7843 00004429 2020202020202020   
  7844 00004431 202020202020202020-     	db  80 dup(32)
  7844 0000443A 202020202020202020-
  7844 00004443 202020202020202020-
  7844 0000444C 202020202020202020-
  7844 00004455 202020202020202020-
  7844 0000445E 202020202020202020-
  7844 00004467 202020202020202020-
  7844 00004470 202020202020202020-
  7844 00004479 2020202020202020   
  7845 00004481 202020202020202020-     	db  80 dup(32)
  7845 0000448A 202020202020202020-
  7845 00004493 202020202020202020-
  7845 0000449C 202020202020202020-
  7845 000044A5 202020202020202020-
  7845 000044AE 202020202020202020-
  7845 000044B7 202020202020202020-
  7845 000044C0 202020202020202020-
  7845 000044C9 2020202020202020   
  7846 000044D1 202020202020202020-     	db  80 dup(32)
  7846 000044DA 202020202020202020-
  7846 000044E3 202020202020202020-
  7846 000044EC 202020202020202020-
  7846 000044F5 202020202020202020-
  7846 000044FE 202020202020202020-
  7846 00004507 202020202020202020-
  7846 00004510 202020202020202020-
  7846 00004519 2020202020202020   
  7847 00004521 202020202020202020-     	db  80 dup(32)
  7847 0000452A 202020202020202020-
  7847 00004533 202020202020202020-
  7847 0000453C 202020202020202020-
  7847 00004545 202020202020202020-
  7847 0000454E 202020202020202020-
  7847 00004557 202020202020202020-
  7847 00004560 202020202020202020-
  7847 00004569 2020202020202020   
  7848 00004571 202020202020202020-     	db  80 dup(32)
  7848 0000457A 202020202020202020-
  7848 00004583 202020202020202020-
  7848 0000458C 202020202020202020-
  7848 00004595 202020202020202020-
  7848 0000459E 202020202020202020-
  7848 000045A7 202020202020202020-
  7848 000045B0 202020202020202020-
  7848 000045B9 2020202020202020   
  7849 000045C1 202020202020202020-     	db  80 dup(32)
  7849 000045CA 202020202020202020-
  7849 000045D3 202020202020202020-
  7849 000045DC 202020202020202020-
  7849 000045E5 202020202020202020-
  7849 000045EE 202020202020202020-
  7849 000045F7 202020202020202020-
  7849 00004600 202020202020202020-
  7849 00004609 2020202020202020   
  7850 00004611 202020202020202020-     	db  80 dup(32)
  7850 0000461A 202020202020202020-
  7850 00004623 202020202020202020-
  7850 0000462C 202020202020202020-
  7850 00004635 202020202020202020-
  7850 0000463E 202020202020202020-
  7850 00004647 202020202020202020-
  7850 00004650 202020202020202020-
  7850 00004659 2020202020202020   
  7851 00004661 CDCDCDCDCDCDCDCDCD-     	db  80 dup(205)
  7851 0000466A CDCDCDCDCDCDCDCDCD-
  7851 00004673 CDCDCDCDCDCDCDCDCD-
  7851 0000467C CDCDCDCDCDCDCDCDCD-
  7851 00004685 CDCDCDCDCDCDCDCDCD-
  7851 0000468E CDCDCDCDCDCDCDCDCD-
  7851 00004697 CDCDCDCDCDCDCDCDCD-
  7851 000046A0 CDCDCDCDCDCDCDCDCD-
  7851 000046A9 CDCDCDCDCDCDCDCD   
  7852 000046B1 202020202020202020-     	db  80 dup(32)
  7852 000046BA 202020202020202020-
  7852 000046C3 202020202020202020-
  7852 000046CC 202020202020202020-
  7852 000046D5 202020202020202020-
  7852 000046DE 202020202020202020-
  7852 000046E7 202020202020202020-
  7852 000046F0 202020202020202020-
  7852 000046F9 2020202020202020   
  7853 00004701 202020202020202020-     	db  33 dup(32), "00:00 ", 174, 175, " 00:00", 24 dup(32), "VOL 000%"
  7853 0000470A 202020202020202020-
  7853 00004713 202020202020202020-
  7853 0000471C 20202020202030303A-
  7853 00004725 303020AEAF2030303A-
  7853 0000472E 303020202020202020-
  7853 00004737 202020202020202020-
  7853 00004740 202020202020202056-
  7853 00004749 4F4C2030303025     
  7854 00004750 00                      	db 0
  7855                                  
  7856                                  ; 25/12/2024
  7857                                  ; 28/11/2024
  7858                                  IsInSplash:
  7859 00004751 01                      	db 1
  7860                                  
  7861                                  SplashFileName:
  7862 00004752 53504C4153482E5741-     	db "SPLASH.WAV", 0
  7862 0000475B 5600               
  7863                                  
  7864                                  ; -------------------------------------------------------------
  7865                                  
  7866                                  	; 22/12/2024
  7867                                  fillblock:
  7868 0000475D FF<rep Eh>              	times 14 db 0FFh
  7869 0000476B 0000                    	dw 0
  7870                                  
  7871                                  ; -------------------------------------------------------------
  7872                                  
  7873                                  ; 23/11/2024
  7874                                  colors:
  7875 0000476D 0F0B0A0C0E090D0F        	db 0Fh, 0Bh, 0Ah, 0Ch, 0Eh, 09h, 0Dh, 0Fh
  7876                                  	; white, cyan, green, red, yellow, blue, magenta
  7877 00004775 0B                      ccolor:	db 0Bh	; cyan
  7878                                  
  7879                                  EOF: 
  7880                                  
  7881                                  ; -------------------------------------------------------------
  7882                                  
  7883                                  bss:
  7884                                  
  7885                                  ABSOLUTE bss
  7886                                  
  7887 00004776 ????                    alignb 4
  7888                                  
  7889                                  ; 21/12/2024
  7890                                  fontbuff1:
  7891 00004778 <res E00h>              	resb 256*14 ; 8x14 font data (from system)
  7892                                  fontbuff2:
  7893 00005578 <res 1000h>             	resb 256*16 ; 8x16 font data (modif. from 8x14)
  7894                                  
  7895                                  ; 11/12/2024
  7896                                  wleds_addr:
  7897 00006578 <res 1400h>             	resd 80*16 ; 32 bit addrs, 80 leds, 16 volume levels
  7898                                  ; 22/12/2024
  7899                                  prev_leds:
  7900 00007978 <res 140h>              	resd 80	; previous lighting leds
  7901                                  
  7902                                  ; 24/12/2024
  7903                                  wpoints_dif:	; wave lighting points factor (differential) 
  7904 00007AB8 ????????                	resd 1	; required bytes for 1/18 second wave lighting
  7905                                  graphstart:
  7906 00007ABC ????????                	resd 1	; start (top) line/row for wave lighting points 	 
  7907                                  
  7908                                  LFB_ADDR:
  7909 00007AC0 ????????                	resd 1
  7910                                  ;nextrow:
  7911                                  	;resd 1
  7912                                  screenpos: ; hw = (cursor) row, lw = (cursor) column
  7913 00007AC4 ????????                	resd 1
  7914 00007AC8 ????????                wcolor:	resd 1
  7915                                  ; 26/12/2024
  7916                                  ;tcolor: resb 1 ; text color
  7917                                  columns:
  7918 00007ACC ??                      	resb 1
  7919 00007ACD ??                      pbprev:	resb 1 ; previous progress bar indicator position
  7920                                  
  7921 00007ACE ????                    alignb 4
  7922                                  
  7923                                  bss_start:
  7924                                  
  7925                                  ; 29/12/2024
  7926                                  audio_buffer:
  7927 00007AD0 ????????                	resd 1
  7928                                  
  7929                                  ; 24/12/2024
  7930                                  prev_points:
  7931 00007AD4 <res A00h>              	resd 640 ; previous wave points (which are lighting)	
  7932                                  
  7933                                  ; 18/11/2024
  7934                                  stopped:
  7935 000084D4 ??                      	resb 1
  7936 000084D5 ??                      tLO:	resb 1
  7937                                  ; 21/11/2024
  7938 000084D6 ??                      tLP:	resb 1
  7939                                  ; 19/11/2024
  7940 000084D7 ??                      wleds:	resb 1
  7941                                  wleds_dif:
  7942 000084D8 ????????                	resd 1
  7943 000084DC ????????                pbuf_o:	resd 1
  7944                                  ; 29/12/2024
  7945 000084E0 ????????                pbuf_s:	resd 1
  7946                                  
  7947                                  ; 07/12/2024
  7948                                  ; 24/11/2024
  7949                                  half_buffer:
  7950 000084E4 ??                      	resb 1	; dma half buffer 1 or 2 (0 or 1)
  7951                                  
  7952                                  ; 30/05/2024
  7953 000084E5 ??                      VRA:	resb 1	; Variable Rate Audio Support Status
  7954                                  
  7955                                  ; 24/12/2024
  7956 000084E6 ??                      p_mode: resb 1	; point mode (as alternative to LED mode)
  7957                                  
  7958                                  ; 25/12/2024
  7959                                  ; 29/11/2024
  7960                                  command:
  7961 000084E7 ??                      	resb 1
  7962                                  filecount:
  7963 000084E8 ??                      	resb 1
  7964                                  
  7965                                  ; 30/11/2024
  7966 000084E9 ??????                  alignb 4
  7967                                  
  7968                                  ;;;;;;;;;;;;;;
  7969                                  ; 14/11/2024
  7970                                  ; (Ref: player.asm, Matan Alfasi, 2017)  
  7971                                  WAVFILEHEADERbuff:
  7972                                  RIFF_ChunkID:
  7973 000084EC ????????                	resd 1	; Must be equal to "RIFF" - big-endian
  7974                                  		; 0x52494646
  7975                                  RIFF_ChunkSize:
  7976 000084F0 ????????                	resd 1	; Represents total file size, not 
  7977                                          	; including the first 2 fields 
  7978                                  		; (Total_File_Size - 8), little-endian
  7979                                  RIFF_Format:
  7980 000084F4 ????????                	resd 1	; Must be equal to "WAVE" - big-endian
  7981                                  		; 0x57415645
  7982                                  
  7983                                  ;; WAVE header parameters ("Sub-chunk")
  7984                                  WAVE_SubchunkID:
  7985 000084F8 ????????                	resd 1	; Must be equal to "fmt " - big-endian
  7986                                  		; 0x666d7420
  7987                                  WAVE_SubchunkSize:
  7988 000084FC ????????                	resd 1	; Represents total chunk size
  7989                                  WAVE_AudioFormat:
  7990 00008500 ????                    	resw 1	; PCM (Raw) - is 1, other - is a form 
  7991                                  		; of compression, not supported.
  7992                                  WAVE_NumChannels:
  7993 00008502 ????                    	resw 1	; Number of channels, Mono-1, Stereo-2
  7994                                  WAVE_SampleRate:
  7995 00008504 ????????                	resd 1	; Frequency rate, in Hz (8000, 44100 ...)
  7996                                  WAVE_ByteRate:
  7997 00008508 ????????                	resd 1	; SampleRate * NumChannels * BytesPerSample
  7998                                  WAVE_BlockAlign:
  7999 0000850C ????                    	resw 1	; NumChannels * BytesPerSample
  8000                                  		; Number of bytes for one sample.
  8001                                  WAVE_BitsPerSample:
  8002 0000850E ????                    	resw 1	; 8 = 8 bits, 16 = 16 bits, etc.
  8003                                  
  8004                                  ;; DATA header parameters
  8005                                  DATA_SubchunkID:
  8006 00008510 ????????                	resd 1	; Must be equal to "data" - big-endian
  8007                                          	; 0x64617461
  8008                                  DATA_SubchunkSize:
  8009 00008514 ????????                	resd 1	; NumSamples * NumChannels * BytesPerSample
  8010                                          	; Number of bytes in the data.
  8011                                  ;;;;;;;;;;;;;;
  8012                                  
  8013                                  ; 28/12/2024
  8014                                  ; 15/11/2024
  8015                                  ;cursortype:
  8016 00008518 ????                    	resw 1
  8017 0000851A ??                      flags:	resb 1
  8018                                  ; 06/11/2023
  8019                                  ac97_int_ln_reg:
  8020 0000851B ??                      	resb 1
  8021                                  filehandle:
  8022 0000851C ????????                	resd 1
  8023                                  
  8024                                  ; 25/12/2024
  8025                                  ; 30/11/2024
  8026                                  ;argc:	resb 1	; argument count
  8027 00008520 ????????                argv:	resd 1	; current argument (wav file) ptr
  8028 00008524 ????????                argvf:	resd 1	; 1st argument (wav file) ptr
  8029 00008528 ????????                argvl:	resd 1	; last argument (wav file) ptr
  8030                                  
  8031                                  ; 30/05/2024
  8032                                  wav_file_name:
  8033 0000852C <res 50h>               	resb 80	; wave file, path name (<= 80 bytes)
  8034 0000857C ????                    	resw 1	; 30/11/2024
  8035                                  
  8036                                  ; 08/11/2023
  8037                                  ; 07/11/2023
  8038                                  fbs_shift:
  8039 0000857E ??                      	resb 1
  8040                                  ; 07/12/2024
  8041 0000857F ??                      SRB:	resb 1
  8042                                  
  8043                                  ; 12/11/2016 - Erdogan Tan
  8044                                  bus_dev_fn:
  8045 00008580 ????????                	resd 1
  8046                                  dev_vendor:
  8047 00008584 ????????                	resd 1
  8048                                  
  8049                                  ; 17/02/2017
  8050                                  ; NAMBAR:  Native Audio Mixer Base Address Register
  8051                                  ;    (ICH, Audio D31:F5, PCI Config Space) Address offset: 10h-13h
  8052                                  ; NABMBAR: Native Audio Bus Mastering Base Address register
  8053                                  ;    (ICH, Audio D31:F5, PCI Config Space) Address offset: 14h-17h
  8054 00008588 ????                    NAMBAR:	resw 1	; BAR for mixer
  8055                                  NABMBAR:
  8056 0000858A ????                    	resw 1	; BAR for bus master regs
  8057                                  
  8058                                  ; 15/11/2024
  8059                                  loadfromwavfile:
  8060 0000858C ????????                	resd 1	; 'loadfromfile' or load+conversion proc address
  8061                                  loadsize:
  8062 00008590 ????????                	resd 1	; (.wav file) read count (bytes) per one time
  8063                                  buffersize:
  8064 00008594 ????????                	resd 1	; 16 bit samples (not bytes)
  8065                                  		
  8066                                  ; 14/11/2024
  8067                                  TotalTime:
  8068 00008598 ????????                	resd 1	; Total (WAV File) Playing Time in seconds
  8069                                  ProgressTime:
  8070 0000859C ????????                	resd 1
  8071 000085A0 ????????                count:	resd 1	; byte count of one (wav file) read
  8072                                  LoadedDataBytes:
  8073 000085A4 ????????                	resd 1	; total read/load count
  8074                                  
  8075                                  timerticks:
  8076 000085A8 ????????                	resd 1	; (to eliminate excessive lookup of events in tuneloop)
  8077                                  		; (in order to get the emulator/qemu to run correctly)
  8078                                  ; 01/12/2024
  8079                                  _bdl_buffer:
  8080 000085AC ????????                	resd 1
  8081                                  
  8082                                  ; 14/11/2024
  8083                                  bss_end:
  8084                                  
  8085                                  ; 29/12/2024
  8086 000085B0 <res A50h>              alignb 4096
  8087                                  
  8088                                  ; 01/12/2024
  8089                                  BDL_BUFFER:
  8090 00009000 <res 100h>              	resb 256
  8091                                  	; 02/12/2024
  8092 00009100 <res F00h>              	resb 4096-256
  8093                                  
  8094                                  ;alignb 4096
  8095                                  
  8096                                  ; 29/05/2024
  8097                                  WAVBUFFER_1:
  8098 0000A000 <res 10000h>            	resb 65536
  8099                                  WAVBUFFER_2:
  8100 0001A000 <res 10000h>            	resb 65536
  8101                                  
  8102                                  ; 01/12/2024
  8103                                  ; 26/11/2023
  8104                                  temp_buffer:
  8105 0002A000 <res 10000h>            	resb 65536  ;  resb BUFFERSIZE
