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