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

Next/Previous", 9 dup(32), 186 8087 00003F16 706163653E20202020- 8087 00003F1F 2020202020506C6179- 8087 00003F28 2F5061757365202020- 8087 00003F31 20202020203C4E3E2F- 8087 00003F3A 3C503E202020202020- 8087 00003F43 2020204E6578742F50- 8087 00003F4C 726576696F75732020- 8087 00003F55 20202020202020BA 8088 00003F5D BA2020202020203C53- db 186, 6 dup(32), " Stop ", 4 dup(32), "/ Wave Lighting", 9 dup(32), 186 8088 00003F66 3E2020202020202020- 8088 00003F6F 202020202053746F70- 8088 00003F78 202020202020202020- 8088 00003F81 20202020203C456E74- 8088 00003F8A 65723E2F3C473E2020- 8088 00003F93 20202057617665204C- 8088 00003F9C 69676874696E672020- 8088 00003FA5 20202020202020BA 8089 00003FAD BA2020202020203C46- db 186, 6 dup(32), " Forwards ", 4 dup(32), "<+>/<-> Inc/Dec Volume", 8 dup(32), 186 8089 00003FB6 3E2020202020202020- 8089 00003FBF 2020202020466F7277- 8089 00003FC8 617264732020202020- 8089 00003FD1 20202020203C2B3E2F- 8089 00003FDA 3C2D3E202020202020- 8089 00003FE3 202020496E632F4465- 8089 00003FEC 6320566F6C756D6520- 8089 00003FF5 20202020202020BA 8090 00003FFD BA2020202020203C42- db 186, 6 dup(32), " Backwards ", 4 dup(32), " Quit Program ", 9 dup(32), 186 8090 00004006 3E2020202020202020- 8090 0000400F 20202020204261636B- 8090 00004018 776172647320202020- 8090 00004021 20202020203C513E20- 8090 0000402A 202020202020202020- 8090 00004033 202020517569742050- 8090 0000403C 726F6772616D202020- 8090 00004045 20202020202020BA 8091 0000404D CCCDCDCDCDCDCDCDCD- db 204, 78 dup(205), 185 8091 00004056 CDCDCDCDCDCDCDCDCD- 8091 0000405F CDCDCDCDCDCDCDCDCD- 8091 00004068 CDCDCDCDCDCDCDCDCD- 8091 00004071 CDCDCDCDCDCDCDCDCD- 8091 0000407A CDCDCDCDCDCDCDCDCD- 8091 00004083 CDCDCDCDCDCDCDCDCD- 8091 0000408C CDCDCDCDCDCDCDCDCD- 8091 00004095 CDCDCDCDCDCDCDB9 8092 0000409D BA2020202020204669- db 186, 6 dup(32), "File Name : ", 4 dup(32), "Bit-Rate : 0 Bits ", 9 dup(32), 186 8092 000040A6 6C65204E616D65203A- 8092 000040AF 202020202020202020- 8092 000040B8 202020202020202020- 8092 000040C1 20202020204269742D- 8092 000040CA 5261746520203A2020- 8092 000040D3 202020302020426974- 8092 000040DC 732020202020202020- 8092 000040E5 20202020202020BA 8093 000040ED BA2020202020204672- db 186, 6 dup(32), "Frequency : 0 Hz ", 4 dup(32), "#-Channels: 0 ", 9 dup(32), 186 8093 000040F6 657175656E6379203A- 8093 000040FF 202020202030202020- 8093 00004108 2020487A2020202020- 8093 00004111 2020202020232D4368- 8093 0000411A 616E6E656C733A2020- 8093 00004123 202020302020202020- 8093 0000412C 202020202020202020- 8093 00004135 20202020202020BA 8094 0000413D C8CDCDCDCDCDCDCDCD- db 200, 78 dup(205), 188 8094 00004146 CDCDCDCDCDCDCDCDCD- 8094 0000414F CDCDCDCDCDCDCDCDCD- 8094 00004158 CDCDCDCDCDCDCDCDCD- 8094 00004161 CDCDCDCDCDCDCDCDCD- 8094 0000416A CDCDCDCDCDCDCDCDCD- 8094 00004173 CDCDCDCDCDCDCDCDCD- 8094 0000417C CDCDCDCDCDCDCDCDCD- 8094 00004185 CDCDCDCDCDCDCDBC 8095 0000418D 202020202020202020- db 80 dup(32) 8095 00004196 202020202020202020- 8095 0000419F 202020202020202020- 8095 000041A8 202020202020202020- 8095 000041B1 202020202020202020- 8095 000041BA 202020202020202020- 8095 000041C3 202020202020202020- 8095 000041CC 202020202020202020- 8095 000041D5 2020202020202020 8096 improper_samplerate_txt: 8097 read_error_txt: 8098 000041DD 202020202020202020- db 80 dup(32) 8098 000041E6 202020202020202020- 8098 000041EF 202020202020202020- 8098 000041F8 202020202020202020- 8098 00004201 202020202020202020- 8098 0000420A 202020202020202020- 8098 00004213 202020202020202020- 8098 0000421C 202020202020202020- 8098 00004225 2020202020202020 8099 0000422D 202020202020202020- db 80 dup(32) 8099 00004236 202020202020202020- 8099 0000423F 202020202020202020- 8099 00004248 202020202020202020- 8099 00004251 202020202020202020- 8099 0000425A 202020202020202020- 8099 00004263 202020202020202020- 8099 0000426C 202020202020202020- 8099 00004275 2020202020202020 8100 0000427D 202020202020202020- db 80 dup(32) 8100 00004286 202020202020202020- 8100 0000428F 202020202020202020- 8100 00004298 202020202020202020- 8100 000042A1 202020202020202020- 8100 000042AA 202020202020202020- 8100 000042B3 202020202020202020- 8100 000042BC 202020202020202020- 8100 000042C5 2020202020202020 8101 000042CD 202020202020202020- db 80 dup(32) 8101 000042D6 202020202020202020- 8101 000042DF 202020202020202020- 8101 000042E8 202020202020202020- 8101 000042F1 202020202020202020- 8101 000042FA 202020202020202020- 8101 00004303 202020202020202020- 8101 0000430C 202020202020202020- 8101 00004315 2020202020202020 8102 0000431D 202020202020202020- db 80 dup(32) 8102 00004326 202020202020202020- 8102 0000432F 202020202020202020- 8102 00004338 202020202020202020- 8102 00004341 202020202020202020- 8102 0000434A 202020202020202020- 8102 00004353 202020202020202020- 8102 0000435C 202020202020202020- 8102 00004365 2020202020202020 8103 0000436D 202020202020202020- db 80 dup(32) 8103 00004376 202020202020202020- 8103 0000437F 202020202020202020- 8103 00004388 202020202020202020- 8103 00004391 202020202020202020- 8103 0000439A 202020202020202020- 8103 000043A3 202020202020202020- 8103 000043AC 202020202020202020- 8103 000043B5 2020202020202020 8104 000043BD 202020202020202020- db 80 dup(32) 8104 000043C6 202020202020202020- 8104 000043CF 202020202020202020- 8104 000043D8 202020202020202020- 8104 000043E1 202020202020202020- 8104 000043EA 202020202020202020- 8104 000043F3 202020202020202020- 8104 000043FC 202020202020202020- 8104 00004405 2020202020202020 8105 0000440D 202020202020202020- db 80 dup(32) 8105 00004416 202020202020202020- 8105 0000441F 202020202020202020- 8105 00004428 202020202020202020- 8105 00004431 202020202020202020- 8105 0000443A 202020202020202020- 8105 00004443 202020202020202020- 8105 0000444C 202020202020202020- 8105 00004455 2020202020202020 8106 0000445D 202020202020202020- db 80 dup(32) 8106 00004466 202020202020202020- 8106 0000446F 202020202020202020- 8106 00004478 202020202020202020- 8106 00004481 202020202020202020- 8106 0000448A 202020202020202020- 8106 00004493 202020202020202020- 8106 0000449C 202020202020202020- 8106 000044A5 2020202020202020 8107 000044AD 202020202020202020- db 80 dup(32) 8107 000044B6 202020202020202020- 8107 000044BF 202020202020202020- 8107 000044C8 202020202020202020- 8107 000044D1 202020202020202020- 8107 000044DA 202020202020202020- 8107 000044E3 202020202020202020- 8107 000044EC 202020202020202020- 8107 000044F5 2020202020202020 8108 000044FD 202020202020202020- db 80 dup(32) 8108 00004506 202020202020202020- 8108 0000450F 202020202020202020- 8108 00004518 202020202020202020- 8108 00004521 202020202020202020- 8108 0000452A 202020202020202020- 8108 00004533 202020202020202020- 8108 0000453C 202020202020202020- 8108 00004545 2020202020202020 8109 0000454D 202020202020202020- db 80 dup(32) 8109 00004556 202020202020202020- 8109 0000455F 202020202020202020- 8109 00004568 202020202020202020- 8109 00004571 202020202020202020- 8109 0000457A 202020202020202020- 8109 00004583 202020202020202020- 8109 0000458C 202020202020202020- 8109 00004595 2020202020202020 8110 0000459D 202020202020202020- db 80 dup(32) 8110 000045A6 202020202020202020- 8110 000045AF 202020202020202020- 8110 000045B8 202020202020202020- 8110 000045C1 202020202020202020- 8110 000045CA 202020202020202020- 8110 000045D3 202020202020202020- 8110 000045DC 202020202020202020- 8110 000045E5 2020202020202020 8111 000045ED 202020202020202020- db 80 dup(32) 8111 000045F6 202020202020202020- 8111 000045FF 202020202020202020- 8111 00004608 202020202020202020- 8111 00004611 202020202020202020- 8111 0000461A 202020202020202020- 8111 00004623 202020202020202020- 8111 0000462C 202020202020202020- 8111 00004635 2020202020202020 8112 0000463D 202020202020202020- db 80 dup(32) 8112 00004646 202020202020202020- 8112 0000464F 202020202020202020- 8112 00004658 202020202020202020- 8112 00004661 202020202020202020- 8112 0000466A 202020202020202020- 8112 00004673 202020202020202020- 8112 0000467C 202020202020202020- 8112 00004685 2020202020202020 8113 0000468D 202020202020202020- db 80 dup(32) 8113 00004696 202020202020202020- 8113 0000469F 202020202020202020- 8113 000046A8 202020202020202020- 8113 000046B1 202020202020202020- 8113 000046BA 202020202020202020- 8113 000046C3 202020202020202020- 8113 000046CC 202020202020202020- 8113 000046D5 2020202020202020 8114 000046DD 202020202020202020- db 80 dup(32) 8114 000046E6 202020202020202020- 8114 000046EF 202020202020202020- 8114 000046F8 202020202020202020- 8114 00004701 202020202020202020- 8114 0000470A 202020202020202020- 8114 00004713 202020202020202020- 8114 0000471C 202020202020202020- 8114 00004725 2020202020202020 8115 0000472D 202020202020202020- db 80 dup(32) 8115 00004736 202020202020202020- 8115 0000473F 202020202020202020- 8115 00004748 202020202020202020- 8115 00004751 202020202020202020- 8115 0000475A 202020202020202020- 8115 00004763 202020202020202020- 8115 0000476C 202020202020202020- 8115 00004775 2020202020202020 8116 0000477D CDCDCDCDCDCDCDCDCD- db 80 dup(205) 8116 00004786 CDCDCDCDCDCDCDCDCD- 8116 0000478F CDCDCDCDCDCDCDCDCD- 8116 00004798 CDCDCDCDCDCDCDCDCD- 8116 000047A1 CDCDCDCDCDCDCDCDCD- 8116 000047AA CDCDCDCDCDCDCDCDCD- 8116 000047B3 CDCDCDCDCDCDCDCDCD- 8116 000047BC CDCDCDCDCDCDCDCDCD- 8116 000047C5 CDCDCDCDCDCDCDCD 8117 000047CD 202020202020202020- db 80 dup(32) 8117 000047D6 202020202020202020- 8117 000047DF 202020202020202020- 8117 000047E8 202020202020202020- 8117 000047F1 202020202020202020- 8117 000047FA 202020202020202020- 8117 00004803 202020202020202020- 8117 0000480C 202020202020202020- 8117 00004815 2020202020202020 8118 0000481D 202020202020202020- db 33 dup(32), "00:00 ", 174, 175, " 00:00", 24 dup(32), "VOL 000%" 8118 00004826 202020202020202020- 8118 0000482F 202020202020202020- 8118 00004838 20202020202030303A- 8118 00004841 303020AEAF2030303A- 8118 0000484A 303020202020202020- 8118 00004853 202020202020202020- 8118 0000485C 202020202020202056- 8118 00004865 4F4C2030303025 8119 0000486C 00 db 0 8120 8121 ; 25/12/2024 8122 ; 28/11/2024 8123 IsInSplash: 8124 0000486D 01 db 1 8125 8126 SplashFileName: 8127 0000486E 53504C4153482E5741- db "SPLASH.WAV", 0 8127 00004877 5600 8128 8129 ; ------------------------------------------------------------- 8130 8131 ; 22/12/2024 8132 fillblock: 8133 00004879 FF times 14 db 0FFh 8134 00004887 0000 dw 0 8135 8136 ; ------------------------------------------------------------- 8137 8138 ; 23/11/2024 8139 colors: 8140 00004889 0F0B0A0C0E090D0F db 0Fh, 0Bh, 0Ah, 0Ch, 0Eh, 09h, 0Dh, 0Fh 8141 ; white, cyan, green, red, yellow, blue, magenta 8142 00004891 0B ccolor: db 0Bh ; cyan 8143 8144 EOF: 8145 8146 ; ------------------------------------------------------------- 8147 8148 bss: 8149 8150 ABSOLUTE bss 8151 8152 00004892 ???? alignb 4 8153 8154 ; 21/12/2024 8155 fontbuff1: 8156 00004894 resb 256*14 ; 8x14 font data (from system) 8157 fontbuff2: 8158 00005694 resb 256*16 ; 8x16 font data (modif. from 8x14) 8159 8160 ; 11/12/2024 8161 wleds_addr: 8162 00006694 resd 80*16 ; 32 bit addrs, 80 leds, 16 volume levels 8163 ; 22/12/2024 8164 prev_leds: 8165 00007A94 resd 80 ; previous lighting leds 8166 8167 ; 24/12/2024 8168 wpoints_dif: ; wave lighting points factor (differential) 8169 00007BD4 ???????? resd 1 ; required bytes for 1/18 second wave lighting 8170 graphstart: 8171 00007BD8 ???????? resd 1 ; start (top) line/row for wave lighting points 8172 8173 LFB_ADDR: 8174 00007BDC ???????? resd 1 8175 ;nextrow: 8176 ;resd 1 8177 screenpos: ; hw = (cursor) row, lw = (cursor) column 8178 00007BE0 ???????? resd 1 8179 00007BE4 ???????? wcolor: resd 1 8180 ; 26/12/2024 8181 ;tcolor: resb 1 ; text color 8182 columns: 8183 00007BE8 ?? resb 1 8184 00007BE9 ?? pbprev: resb 1 ; previous progress bar indicator position 8185 8186 00007BEA ???? alignb 4 8187 8188 bss_start: 8189 8190 ; 29/12/2024 8191 audio_buffer: 8192 00007BEC ???????? resd 1 8193 8194 ; 24/12/2024 8195 prev_points: 8196 00007BF0 resd 640 ; previous wave points (which are lighting) 8197 8198 ; 18/11/2024 8199 stopped: 8200 000085F0 ?? resb 1 8201 000085F1 ?? tLO: resb 1 8202 ; 21/11/2024 8203 000085F2 ?? tLP: resb 1 8204 ; 19/11/2024 8205 000085F3 ?? wleds: resb 1 8206 wleds_dif: 8207 000085F4 ???????? resd 1 8208 000085F8 ???????? pbuf_o: resd 1 8209 ; 29/12/2024 8210 000085FC ???????? pbuf_s: resd 1 8211 8212 ; 07/12/2024 8213 ; 24/11/2024 8214 half_buffer: 8215 00008600 ?? resb 1 ; dma half buffer 1 or 2 (0 or 1) 8216 8217 ; 30/05/2024 8218 00008601 ?? VRA: resb 1 ; Variable Rate Audio Support Status 8219 8220 ; 24/12/2024 8221 00008602 ?? p_mode: resb 1 ; point mode (as alternative to LED mode) 8222 8223 ; 25/12/2024 8224 ; 29/11/2024 8225 command: 8226 00008603 ?? resb 1 8227 filecount: 8228 00008604 ?? resb 1 8229 8230 ; 30/11/2024 8231 00008605 ?????? alignb 4 8232 8233 ;;;;;;;;;;;;;; 8234 ; 14/11/2024 8235 ; (Ref: player.asm, Matan Alfasi, 2017) 8236 WAVFILEHEADERbuff: 8237 RIFF_ChunkID: 8238 00008608 ???????? resd 1 ; Must be equal to "RIFF" - big-endian 8239 ; 0x52494646 8240 RIFF_ChunkSize: 8241 0000860C ???????? resd 1 ; Represents total file size, not 8242 ; including the first 2 fields 8243 ; (Total_File_Size - 8), little-endian 8244 RIFF_Format: 8245 00008610 ???????? resd 1 ; Must be equal to "WAVE" - big-endian 8246 ; 0x57415645 8247 8248 ;; WAVE header parameters ("Sub-chunk") 8249 WAVE_SubchunkID: 8250 00008614 ???????? resd 1 ; Must be equal to "fmt " - big-endian 8251 ; 0x666d7420 8252 WAVE_SubchunkSize: 8253 00008618 ???????? resd 1 ; Represents total chunk size 8254 WAVE_AudioFormat: 8255 0000861C ???? resw 1 ; PCM (Raw) - is 1, other - is a form 8256 ; of compression, not supported. 8257 WAVE_NumChannels: 8258 0000861E ???? resw 1 ; Number of channels, Mono-1, Stereo-2 8259 WAVE_SampleRate: 8260 00008620 ???????? resd 1 ; Frequency rate, in Hz (8000, 44100 ...) 8261 WAVE_ByteRate: 8262 00008624 ???????? resd 1 ; SampleRate * NumChannels * BytesPerSample 8263 WAVE_BlockAlign: 8264 00008628 ???? resw 1 ; NumChannels * BytesPerSample 8265 ; Number of bytes for one sample. 8266 WAVE_BitsPerSample: 8267 0000862A ???? resw 1 ; 8 = 8 bits, 16 = 16 bits, etc. 8268 8269 ;; DATA header parameters 8270 DATA_SubchunkID: 8271 0000862C ???????? resd 1 ; Must be equal to "data" - big-endian 8272 ; 0x64617461 8273 DATA_SubchunkSize: 8274 00008630 ???????? resd 1 ; NumSamples * NumChannels * BytesPerSample 8275 ; Number of bytes in the data. 8276 ;;;;;;;;;;;;;; 8277 8278 ; 28/12/2024 8279 ; 15/11/2024 8280 ;cursortype: 8281 00008634 ???? resw 1 8282 00008636 ?? flags: resb 1 8283 ; 06/11/2023 8284 ac97_int_ln_reg: 8285 00008637 ?? resb 1 8286 filehandle: 8287 00008638 ???????? resd 1 8288 8289 ; 25/12/2024 8290 ; 30/11/2024 8291 ;argc: resb 1 ; argument count 8292 0000863C ???????? argv: resd 1 ; current argument (wav file) ptr 8293 00008640 ???????? argvf: resd 1 ; 1st argument (wav file) ptr 8294 00008644 ???????? argvl: resd 1 ; last argument (wav file) ptr 8295 8296 ; 30/05/2024 8297 wav_file_name: 8298 00008648 resb 80 ; wave file, path name (<= 80 bytes) 8299 00008698 ???? resw 1 ; 30/11/2024 8300 8301 ; 08/11/2023 8302 ; 07/11/2023 8303 fbs_shift: 8304 0000869A ?? resb 1 8305 ; 07/12/2024 8306 0000869B ?? SRB: resb 1 8307 8308 ; 12/11/2016 - Erdogan Tan 8309 bus_dev_fn: 8310 0000869C ???????? resd 1 8311 dev_vendor: 8312 000086A0 ???????? resd 1 8313 8314 ; 17/02/2017 8315 ; NAMBAR: Native Audio Mixer Base Address Register 8316 ; (ICH, Audio D31:F5, PCI Config Space) Address offset: 10h-13h 8317 ; NABMBAR: Native Audio Bus Mastering Base Address register 8318 ; (ICH, Audio D31:F5, PCI Config Space) Address offset: 14h-17h 8319 000086A4 ???? NAMBAR: resw 1 ; BAR for mixer 8320 NABMBAR: 8321 000086A6 ???? resw 1 ; BAR for bus master regs 8322 8323 ; 15/11/2024 8324 loadfromwavfile: 8325 000086A8 ???????? resd 1 ; 'loadfromfile' or load+conversion proc address 8326 loadsize: 8327 000086AC ???????? resd 1 ; (.wav file) read count (bytes) per one time 8328 buffersize: 8329 000086B0 ???????? resd 1 ; 16 bit samples (not bytes) 8330 8331 ; 14/11/2024 8332 TotalTime: 8333 000086B4 ???????? resd 1 ; Total (WAV File) Playing Time in seconds 8334 ProgressTime: 8335 000086B8 ???????? resd 1 8336 000086BC ???????? count: resd 1 ; byte count of one (wav file) read 8337 LoadedDataBytes: 8338 000086C0 ???????? resd 1 ; total read/load count 8339 8340 timerticks: 8341 000086C4 ???????? resd 1 ; (to eliminate excessive lookup of events in tuneloop) 8342 ; (in order to get the emulator/qemu to run correctly) 8343 ; 01/12/2024 8344 _bdl_buffer: 8345 000086C8 ???????? resd 1 8346 8347 ; 14/11/2024 8348 bss_end: 8349 8350 ; 29/12/2024 8351 000086CC alignb 4096 8352 8353 ; 01/12/2024 8354 BDL_BUFFER: 8355 00009000 resb 256 8356 ; 02/12/2024 8357 00009100 resb 4096-256 8358 8359 ;alignb 4096 8360 8361 ; 29/05/2024 8362 WAVBUFFER_1: 8363 0000A000 resb 65536 8364 WAVBUFFER_2: 8365 0001A000 resb 65536 8366 8367 ; 01/12/2024 8368 ; 26/11/2023 8369 temp_buffer: 8370 0002A000 resb 65536 ; resb BUFFERSIZE