1 ; **************************************************************************** 2 ; vgaplay2.s - TRDOS 386 (TRDOS v2.0.9) WAV PLAYER - VESA VBE Video Mode 101h 3 ; ---------------------------------------------------------------------------- 4 ; VGAPLAY2.PRG ! AC'97 (ICH) .WAV PLAYER program by Erdogan TAN 5 ; 6 ; 27/12/2024 - play music from multiple wav files - 7 ; 8 ; [ Last Modification: 05/02/2025 ] 9 ; 10 ; Modified from VGAPLAY.PRG .wav player program by Erdogan Tan, 26/12/2024 11 ; 12 ; **************************************************************************** 13 ; nasm vgaplay2.s -l vgaplay2.txt -o VGAPLAY2.PRG -Z error.txt 14 15 ; 27/12/2024 16 ; vgaplay2.s : DMA buffer tracking (instead of user's audio buffer) 17 18 ; vgaplay.s (26/12/2024) - play music from multiple wav files - 19 ; dplayvga.s (25/12/2024) - play music from single wav file - 20 ; ac97play.s (18/12/2024) - play music from multiple wav files - 21 22 ; 07/12/2024 - playwav9.s - interrupt (srb) + tuneloop version 23 ; ------------------------------------------------------------ 24 ; INTERRUPT (SRB) + TUNELOOP version ; 24/11/2024 (PLAYWAV9.ASM) 25 ; (running in DOSBOX, VIRTUALBOX, QEMU is ok) 26 ; Signal Response Byte = message/signal to user about an event/interrupt 27 ; as requested (TuneLoop procedure continuously checks this SRB) 28 ; (TRDOS 386 v2 feature is used here as very simple interrupt handler output) 29 30 ; ------------------------------------------------------------ 31 32 ; 30/11/2024 33 ; 20/08/2024 ; TRDOS 386 v2.0.9 34 ; 29/04/2016 35 _ver equ 0 36 _exit equ 1 37 _fork equ 2 38 _read equ 3 39 _write equ 4 40 _open equ 5 41 _close equ 6 42 _wait equ 7 43 _creat equ 8 44 _link equ 9 45 _unlink equ 10 46 _exec equ 11 47 _chdir equ 12 48 _time equ 13 49 _mkdir equ 14 50 _chmod equ 15 51 _chown equ 16 52 _break equ 17 53 _stat equ 18 54 _seek equ 19 55 _tell equ 20 56 _mount equ 21 57 _umount equ 22 58 _setuid equ 23 59 _getuid equ 24 60 _stime equ 25 61 _quit equ 26 62 _intr equ 27 63 _fstat equ 28 64 _emt equ 29 65 _mdate equ 30 66 _video equ 31 67 _audio equ 32 68 _timer equ 33 69 _sleep equ 34 70 _msg equ 35 71 _geterr equ 36 72 _fpsave equ 37 73 _pri equ 38 74 _rele equ 39 75 _fff equ 40 76 _fnf equ 41 77 _alloc equ 42 78 _dalloc equ 43 79 _calbac equ 44 80 _dma equ 45 81 _stdio equ 46 82 83 ; ------------------------------------------------------------ 84 85 %macro sys 1-4 86 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 87 ; 03/09/2015 88 ; 13/04/2015 89 ; Retro UNIX 386 v1 system call. 90 %if %0 >= 2 91 mov ebx, %2 92 %if %0 >= 3 93 mov ecx, %3 94 %if %0 = 4 95 mov edx, %4 96 %endif 97 %endif 98 %endif 99 mov eax, %1 100 ;int 30h 101 int 40h ; TRDOS 386 (TRDOS v2.0) 102 %endmacro 103 104 ; Retro UNIX 386 v1 system call format: 105 ; sys systemcall (eax) , , 106 107 ; ------------------------------------------------------------ 108 109 ; player internal variables and other equates. 110 BUFFERSIZE equ 65536 111 ENDOFFILE equ 1 ; flag for knowing end of file 112 113 ; ------------------------------------------------------------ 114 115 [BITS 32] ; 32-bit intructions 116 117 [ORG 0] 118 119 START_CODE: 120 ; Prints the Credits Text. 121 sys _msg, Credits, 255, 0Bh 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000000 BB[9C2B0000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00000005 B9FF000000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 0000000A BA0B000000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 0000000F B823000000 <1> mov eax, %1 100 <1> 101 00000014 CD40 <1> int 40h 122 123 ; clear bss 124 00000016 BF[8C760000] mov edi, bss_start 125 0000001B B9B5020000 mov ecx, (bss_end - bss_start)/4 126 00000020 31C0 xor eax, eax 127 00000022 F3AB rep stosd 128 129 ; ------------------------------------------------------------- 130 131 ; 21/12/2024 132 ; Detect (& Enable) AC'97 Audio Device 133 00000024 E8F3080000 call DetectAC97 134 00000029 731B jnc short ac97_hardware_ready 135 136 ; 30/11/2024 137 ; 30/05/2024 138 _dev_not_ready: 139 ; couldn't find the audio device! 140 sys _msg, noDevMsg, 255, 0Fh 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 0000002B BB[5A2C0000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00000030 B9FF000000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00000035 BA0F000000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 0000003A B823000000 <1> mov eax, %1 100 <1> 101 0000003F CD40 <1> int 40h 141 00000041 E9E6050000 jmp Exit 142 143 ac97_hardware_ready: 144 00000046 E8790A0000 call write_audio_dev_info 145 146 ; ------------------------------------------------------------- 147 148 ; 21/12/2024 149 ;;; 150 ; Read (copy) 8x14 system fonts 151 0000004B BE[34430000] mov esi, fontbuff1 152 sys _video, 0C03h, 256, 0 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000050 BB030C0000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00000055 B900010000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 0000005A BA00000000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 0000005F B81F000000 <1> mov eax, %1 100 <1> 101 00000064 CD40 <1> int 40h 153 154 ; convert 8x14 fonts to 8x16 fonts 155 ; by inserting 2 empty rows to each characters 156 ;mov esi, fontbuff1 157 00000066 BF[34510000] mov edi, fontbuff2 158 ; 18/02/2021 159 ;mov cx, 256 160 fontconvert: 161 0000006B 51 push ecx 162 0000006C 66B90E00 mov cx, 14 163 00000070 F3A4 rep movsb 164 00000072 28C0 sub al, al 165 00000074 AA stosb 166 00000075 AA stosb 167 00000076 59 pop ecx 168 00000077 E2F2 loop fontconvert 169 ;;; 170 171 ; ------------------------------------------------------------- 172 173 ; 21/12/2024 174 ; Set Video Mode to 101h ; 640x480, 256 colors 175 sys _video, 08FFh, 101h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000079 BBFF080000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000007E B901010000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000083 B81F000000 <1> mov eax, %1 100 <1> 101 00000088 CD40 <1> int 40h 176 0000008A 09C0 or eax, eax 177 0000008C 0F8495050000 jz terminate ; nothing to do 178 ;jz trdos386_err ; write (OS) error msg and exit 179 180 set_vesa_mode_101h_ok: 181 ; linear frame buffer access 182 sys _video, 06FFh 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000092 BBFF060000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000097 B81F000000 <1> mov eax, %1 100 <1> 101 0000009C CD40 <1> int 40h 183 0000009E 21C0 and eax, eax 184 000000A0 0F84CC050000 jz error_exit ; set text mode and write err msg 185 000000A6 A3[7C760000] mov [LFB_ADDR], eax 186 187 ; ------------------------------------------------------------- 188 189 ; 25/12/2024 190 ; 28/11/2024 191 Player_InitalizePSP: 192 ; 30/11/2024 193 ; (TRDOS 386 -Retro UNIX 386- argument transfer method) 194 ; (stack: argc,argv0addr,argv1addr,argv2addr .. 195 ; .. argv0text, argv1text ..) 196 ; ---- argc, argv[] ---- 197 000000AB 89E6 mov esi, esp 198 000000AD AD lodsd 199 000000AE 83F802 cmp eax, 2 ; two arguments 200 ; (program file name & mod file name) 201 000000B1 0F827E050000 jb pmsg_usage ; nothing to do 202 ;mov [argc], al 203 000000B7 C1E002 shl eax, 2 ; *4 204 000000BA 01E0 add eax, esp 205 ; eax = last argument's address pointer 206 000000BC A3[DC800000] mov [argvl], eax ; last wav file (argument) 207 000000C1 8935[D4800000] mov [argv], esi ; current argument (PRG file name) 208 000000C7 AD lodsd ; skip program (PRG) file name 209 000000C8 8935[D8800000] mov [argvf], esi ; 1st wav file (argument) 210 211 ; 25/12/2024 212 Player_ParseParameters: 213 ; 30/11/2024 214 ; 29/11/2024 215 ; 18/12/2024 216 ;mov edx, wav_file_name 217 218 ; 26/12/2024 219 ;cmp byte [IsInSplash], 0 220 ;jna short check_p_command 221 222 000000CE BA[0E430000] mov edx, SplashFileName 223 000000D3 EB3E jmp short _1 224 225 ; 25/12/2024 226 check_p_command: 227 ; 07/12/2024 228 000000D5 8B35[D4800000] mov esi, [argv] 229 ; 230 000000DB 803D[9C800000]50 cmp byte [command], 'P' 231 000000E2 7410 je short Player_ParsePreviousParameter 232 233 ; 07/12/2024 234 ; 30/11/2024 235 ;mov esi, [argv] ; current argument (wav file) ptr 236 000000E4 83C604 add esi, 4 237 000000E7 3B35[DC800000] cmp esi, [argvl] ; last argument (wav file) ptr 238 000000ED 7610 jna short Player_ParseNextParameter 239 jmp_Player_Quit: 240 000000EF E97C050000 jmp Player_Quit 241 242 Player_ParsePreviousParameter: 243 ; 29/11/2024 244 ;mov byte [command], 0 245 ; 30/11/2024 246 ;mov esi, [argv] ; 07/12/2024 247 000000F4 3B35[D8800000] cmp esi, [argvf] ; first argument (wav file) ptr 248 000000FA 7603 jna short Player_ParseNextParameter 249 000000FC 83EE04 sub esi, 4 250 Player_ParseNextParameter: 251 ; 30/11/2024 252 000000FF 8935[D4800000] mov [argv], esi ; set as current argument 253 ; 01/12/2024 254 00000105 8B36 mov esi, [esi] 255 ; 07/12/2024 256 ;mov ecx, esi 257 ;mov esi, [ecx] 258 259 ; 29/11/2024 260 00000107 E84D000000 call GetFileName 261 ;jcxz jmp_Player_Quit 262 0000010C E3E1 jecxz jmp_Player_Quit ; 30/11/2024 263 264 ; 30/11/2024 265 ; 28/11/2024 266 0000010E BA[E0800000] mov edx, wav_file_name 267 ;;; 268 _1: 269 270 ; open the file 271 ; open existing file 272 ; 28/11/2024 273 ;mov edx, wav_file_name 274 00000113 E856080000 call openFile ; no error? ok. 275 00000118 0F8383000000 jnc getwavparms ; 14/11/2024 276 277 ; 28/11/2024 278 0000011E 803D[0D430000]00 cmp byte [IsInSplash], 0 279 00000125 0F8799000000 ja Player_SplashScreen 280 281 ; 29/11/2024 282 0000012B 803D[9D800000]00 cmp byte [filecount], 0 283 00000132 77A1 ja short check_p_command 284 285 ; 25/12/2024 286 ; 21/12/2024 287 00000134 E8D6050000 call set_text_mode 288 ; file not found! 289 ; 30/11/2024 290 sys _msg, noFileErrMsg, 255, 0Ch 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000139 BB[852C0000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000013E B9FF000000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00000143 BA0C000000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000148 B823000000 <1> mov eax, %1 100 <1> 101 0000014D CD40 <1> int 40h 291 0000014F E9D8040000 jmp Exit 292 293 _exit_: 294 00000154 E9CE040000 jmp terminate 295 296 ; ------------------------------------------------------------- 297 298 ; 26/12/2024 299 ; 25/12/2024 300 ; 30/11/2024 (32bit) 301 ; 29/11/2024 302 ; 30/05/2024 303 GetFileName: 304 00000159 BF[E0800000] mov edi, wav_file_name 305 ; 30/11/2024 306 ;mov esi, [argv] 307 0000015E 31C9 xor ecx, ecx ; 0 308 ScanName: 309 00000160 AC lodsb 310 ;test al, al 311 ;jz short a_4 312 ; 29/11/2024 313 00000161 3C0D cmp al, 0Dh 314 00000163 7638 jna short a_4 315 00000165 3C20 cmp al, 20h 316 00000167 74F7 je short ScanName ; scan start of name. 317 00000169 AA stosb 318 0000016A B4FF mov ah, 0FFh 319 ;;; 320 ; 14/11/2024 321 ; (max. path length = 64 bytes for MSDOS ?) (*) 322 ;xor ecx, ecx ; 0 323 ;;; 324 a_0: 325 0000016C FEC4 inc ah 326 a_1: 327 ;;; 328 ; 14/11/2024 329 0000016E 41 inc ecx 330 ;;; 331 0000016F AC lodsb 332 00000170 AA stosb 333 00000171 3C2E cmp al, '.' 334 00000173 74F7 je short a_0 335 ; 29/11/2024 336 00000175 3C20 cmp al, 20h 337 ;and al, al 338 ;jnz short a_1 339 ;;; 340 ; 14/11/2024 341 00000177 7613 jna short a_3 342 00000179 20E4 and ah, ah 343 0000017B 7406 jz short a_2 344 0000017D 3C2F cmp al, '/' ; 14/12/2024 345 0000017F 7502 jne short a_2 346 00000181 B400 mov ah, 0 347 a_2: 348 00000183 80F94B cmp cl, 75 ; 64+8+'.'+3 -> offset 75 is the last chr 349 00000186 72E6 jb short a_1 350 ; 29/11/2024 351 00000188 29C9 sub ecx, ecx 352 0000018A EB11 jmp short a_4 353 a_3: 354 ; 29/11/2024 355 0000018C 4F dec edi 356 ;;; 357 0000018D 08E4 or ah, ah ; if period NOT found, 358 0000018F 750C jnz short a_4 ; then add a .WAV extension. 359 SetExt: 360 ; 29/11/2024 361 ;dec edi 362 00000191 C7072E574156 mov dword [edi], '.WAV' 363 ; ! 64+12 is DOS limit 364 ; but writing +4 must not 365 ; destroy the following data 366 ;mov byte [edi+4], 0 ; so, 80 bytes path + 0 is possible here 367 ; 29/11/2024 368 00000197 83C104 add ecx, 4 369 0000019A 83C704 add edi, 4 370 a_4: 371 0000019D C60700 mov byte [edi], 0 372 ; 30/11/2024 373 000001A0 C3 retn 374 375 ; ------------------------------------------------------------- 376 377 getwavparms: 378 ; 14/11/2024 379 000001A1 E8FA070000 call getWAVParameters 380 000001A6 72AC jc short _exit_ ; nothing to do 381 382 ; 17/11/2024 383 000001A8 B304 mov bl, 4 384 000001AA 2A1D[C0800000] sub bl, byte [WAVE_BlockAlign] 385 ; = 0 for 16 bit stereo 386 ; = 2 for 8 bit stereo or 16 bit mono 387 ; = 3 for 8 bit mono 388 389 000001B0 D0EB shr bl, 1 ; 0 --> 0, 2 --> 1, 3 --> 1 390 ; 15/11/2024 391 000001B2 80D300 adc bl, 0 ; 3 --> 1 --> 2 392 000001B5 881D[32810000] mov byte [fbs_shift], bl ; = 2 mono and 8 bit 393 ; = 0 stereo and 16 bit 394 ; = 1 mono or 8 bit 395 396 ; ------------------------------------------------------------- 397 398 ; 25/12/2024 399 000001BB 803D[0D430000]00 cmp byte [IsInSplash], 0 400 ;jna short StartPlay 401 ; 27/12/2024 402 000001C2 7672 jna short StartPlay@ 403 404 ; ------------------------------------------------------------- 405 406 ; 26/12/2024 407 Player_SplashScreen: 408 ; 21/12/2024 409 ;mov byte [tcolor], 15 410 _0: 411 000001C4 E8E7040000 call drawsplashscreen 412 413 ; 21/12/2024 414 ;;; 415 ; set wave volume led addresses 416 000001C9 8B1D[7C760000] mov ebx, [LFB_ADDR] 417 000001CF 81C300C70100 add ebx, (13*80*8*14) 418 000001D5 BD50000000 mov ebp, 80 419 000001DA BF[34610000] mov edi, wleds_addr 420 wleds_sa_1: 421 000001DF B90F000000 mov ecx, 15 422 wleds_sa_2: 423 000001E4 B800230000 mov eax, 80*8*14 ; 640*14 pixels (next row) 424 000001E9 F7E1 mul ecx 425 000001EB 01D8 add eax, ebx 426 000001ED AB stosd 427 000001EE E2F4 loop wleds_sa_2 428 000001F0 89D8 mov eax, ebx 429 000001F2 AB stosd 430 000001F3 83C308 add ebx, 8 431 000001F6 4D dec ebp 432 000001F7 75E6 jnz short wleds_sa_1 433 ;;; 434 435 ; 25/12/5024 436 ; 28/11/2024 437 000001F9 833D[D0800000]FF cmp dword [filehandle], -1 438 00000200 7540 jne short StartPlay 439 440 ; 24/12/2024 441 ; 07/12/2024 442 ;;; wait for 3 seconds 443 sys _time, 0 ; get time in unix epoch format 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000202 BB00000000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000207 B80D000000 <1> mov eax, %1 100 <1> 101 0000020C CD40 <1> int 40h 444 0000020E 89C1 mov ecx, eax 445 00000210 83C103 add ecx, 3 446 _wait_3s: 447 00000213 90 nop 448 sys _time, 0 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000214 BB00000000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000219 B80D000000 <1> mov eax, %1 100 <1> 101 0000021E CD40 <1> int 40h 449 00000220 39C8 cmp eax, ecx 450 00000222 72EF jb short _wait_3s 451 ;;; 452 453 ; 25/12/2024 454 ; 28/11/2024 455 00000224 C605[0D430000]00 mov byte [IsInSplash], 0 456 ;mov edx, wav_file_name 457 ; 30/11/2024 458 0000022B 8B35[D8800000] mov esi, [argvf] 459 ; 29/11/2024 460 00000231 E9C9FEFFFF jmp Player_ParseNextParameter 461 462 ; ------------------------------------------------------------- 463 464 ; 27/12/2024 465 StartPlay@: 466 467 ; 27/12/2024 (Detect & Enable AC97 hardware again) 468 ; (this is needed after disabling audio system) 469 ; Detect (BH=1) AC'97 (BL=2) Audio Device 470 sys _audio, 0102h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000236 BB02010000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 0000023B B820000000 <1> mov eax, %1 100 <1> 101 00000240 CD40 <1> int 40h 471 ; ignore error at this stage 472 ;jc short ac97_not_detected 473 474 ; ------------------------------------------------------------- 475 476 ; 25/12/2024 477 StartPlay: 478 00000242 FE05[9D800000] inc byte [filecount] 479 00000248 C605[9C800000]00 mov byte [command], 0 480 481 ; ------------------------------------------------------------- 482 483 ; 07/12/2024 (playwav9.s) 484 485 ; 18/11/2023 (ich_wav4.asm) 486 ; 13/11/2023 (ich_wav3.asm) 487 488 0000024F 803D[9A800000]01 cmp byte [VRA], 1 489 00000256 7226 jb short chk_sample_rate 490 491 playwav_48_khz: 492 00000258 C705[40810000]- mov dword [loadfromwavfile], loadFromFile 492 0000025E [F6090000] 493 ;mov dword [loadsize], 0 ; 65536 494 ;;; 495 ; 17/11/2024 496 ;mov word [buffersize], 32768 497 ;mov ax, BUFFERSIZE/2 ; 32760 498 ; 30/11/2024 499 ;mov eax, BUFFERSIZE/2 ; 32768 500 ; 07/12/2024 501 00000262 B800000100 mov eax, BUFFERSIZE ; 65536 502 00000267 A3[48810000] mov [buffersize], eax ; 16 bit samples 503 ; 07/12/2024 504 ;shl eax, 1 ; bytes 505 0000026C 8A0D[32810000] mov cl, [fbs_shift] 506 00000272 D3E8 shr eax, cl 507 ;mov [loadsize], ax ; 16380 or 32760 or 65520 508 00000274 A3[44810000] mov [loadsize], eax ; 16384 or 32768 or 65536 509 ;;; 510 ;jmp PlayNow ; 30/05/2024 511 ; 07/12/2024 512 00000279 E9AA020000 jmp Player_Template 513 514 ; 05/02/2025 515 chk_sample_rate: 516 ; set conversion parameters 517 ; (for 8, 11.025, 16, 22.050, 24, 32 kHZ) 518 0000027E 66A1[B8800000] mov ax, [WAVE_SampleRate] 519 00000284 663D80BB cmp ax, 48000 520 00000288 74CE je short playwav_48_khz 521 chk_22khz: 522 0000028A 663D2256 cmp ax, 22050 523 0000028E 7545 jne short chk_11khz 524 00000290 803D[C2800000]08 cmp byte [WAVE_BitsPerSample], 8 525 00000297 7615 jna short chk_22khz_1 526 00000299 BB[66190000] mov ebx, load_22khz_stereo_16_bit 527 0000029E 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 528 000002A5 751A jne short chk_22khz_2 529 000002A7 BB[D9180000] mov ebx, load_22khz_mono_16_bit 530 000002AC EB13 jmp short chk_22khz_2 531 chk_22khz_1: 532 000002AE BB[52180000] mov ebx, load_22khz_stereo_8_bit 533 000002B3 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 534 000002BA 7505 jne short chk_22khz_2 535 000002BC BB[C9170000] mov ebx, load_22khz_mono_8_bit 536 chk_22khz_2: 537 000002C1 B85A1D0000 mov eax, 7514 ; (442*17) 538 000002C6 BA25000000 mov edx, 37 539 000002CB B911000000 mov ecx, 17 540 000002D0 E926020000 jmp set_sizes 541 chk_11khz: 542 000002D5 663D112B cmp ax, 11025 543 000002D9 7545 jne short chk_44khz 544 000002DB 803D[C2800000]08 cmp byte [WAVE_BitsPerSample], 8 545 000002E2 7615 jna short chk_11khz_1 546 000002E4 BB[821B0000] mov ebx, load_11khz_stereo_16_bit 547 000002E9 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 548 000002F0 751A jne short chk_11khz_2 549 000002F2 BB[091B0000] mov ebx, load_11khz_mono_16_bit 550 000002F7 EB13 jmp short chk_11khz_2 551 chk_11khz_1: 552 000002F9 BB[8F1A0000] mov ebx, load_11khz_stereo_8_bit 553 000002FE 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 554 00000305 7505 jne short chk_11khz_2 555 00000307 BB[171A0000] mov ebx, load_11khz_mono_8_bit 556 chk_11khz_2: 557 0000030C B8AD0E0000 mov eax, 3757 ; (221*17) 558 00000311 BA4A000000 mov edx, 74 559 00000316 B911000000 mov ecx, 17 560 0000031B E9DB010000 jmp set_sizes 561 chk_44khz: 562 00000320 663D44AC cmp ax, 44100 563 00000324 7545 jne short chk_16khz 564 00000326 803D[C2800000]08 cmp byte [WAVE_BitsPerSample], 8 565 0000032D 7615 jna short chk_44khz_1 566 0000032F BB[891D0000] mov ebx, load_44khz_stereo_16_bit 567 00000334 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 568 0000033B 751A jne short chk_44khz_2 569 0000033D BB[101D0000] mov ebx, load_44khz_mono_16_bit 570 00000342 EB13 jmp short chk_44khz_2 571 chk_44khz_1: 572 00000344 BB[931C0000] mov ebx, load_44khz_stereo_8_bit 573 00000349 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 574 00000350 7505 jne short chk_44khz_2 575 00000352 BB[171C0000] mov ebx, load_44khz_mono_8_bit 576 chk_44khz_2: 577 ; 30/11/2024 (TRDOS 386, 32bit DOS) 578 00000357 B8D93A0000 mov eax, 15065 ; (655*23) 579 ; 18/11/2023 ((file size + bss + stack) <= 64KB) 580 ;mov ax, 14076 ; (612*23) 581 ; 17/11/2024 582 ;mov ax, 12650 ; (550*23) 583 0000035C BA19000000 mov edx, 25 584 00000361 B917000000 mov ecx, 23 585 00000366 E990010000 jmp set_sizes 586 chk_16khz: 587 0000036B 663D803E cmp ax, 16000 588 0000036F 7545 jne short chk_8khz 589 00000371 803D[C2800000]08 cmp byte [WAVE_BitsPerSample], 8 590 00000378 7615 jna short chk_16khz_1 591 0000037A BB[08130000] mov ebx, load_16khz_stereo_16_bit 592 0000037F 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 593 00000386 751A jne short chk_16khz_2 594 00000388 BB[87120000] mov ebx, load_16khz_mono_16_bit 595 0000038D EB13 jmp short chk_16khz_2 596 chk_16khz_1: 597 0000038F BB[CD110000] mov ebx, load_16khz_stereo_8_bit 598 00000394 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 599 0000039B 7505 jne short chk_16khz_2 600 0000039D BB[4E110000] mov ebx, load_16khz_mono_8_bit 601 chk_16khz_2: 602 ; 30/11/2024 (TRDOS 386, 32bit DOS) 603 000003A2 B855150000 mov eax, 5461 604 ; 17/11/2024 605 ;mov ax, 5460 606 000003A7 BA03000000 mov edx, 3 607 000003AC B901000000 mov ecx, 1 608 000003B1 E945010000 jmp set_sizes 609 chk_8khz: 610 000003B6 663D401F cmp ax, 8000 611 000003BA 7545 jne short chk_24khz 612 000003BC 803D[C2800000]08 cmp byte [WAVE_BitsPerSample], 8 613 000003C3 7615 jna short chk_8khz_1 614 000003C5 BB[03100000] mov ebx, load_8khz_stereo_16_bit 615 000003CA 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 616 000003D1 751A jne short chk_8khz_2 617 000003D3 BB[330F0000] mov ebx, load_8khz_mono_16_bit 618 000003D8 EB13 jmp short chk_8khz_2 619 chk_8khz_1: 620 000003DA BB[030E0000] mov ebx, load_8khz_stereo_8_bit 621 000003DF 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 622 000003E6 7505 jne short chk_8khz_2 623 000003E8 BB[1F0D0000] mov ebx, load_8khz_mono_8_bit 624 chk_8khz_2: 625 000003ED B8AA0A0000 mov eax, 2730 626 000003F2 BA06000000 mov edx, 6 627 000003F7 B901000000 mov ecx, 1 628 000003FC E9FA000000 jmp set_sizes 629 chk_24khz: 630 00000401 663DC05D cmp ax, 24000 631 00000405 7545 jne short chk_32khz 632 00000407 803D[C2800000]08 cmp byte [WAVE_BitsPerSample], 8 633 0000040E 7615 jna short chk_24khz_1 634 ; 18/01/2025 (BugFix) 635 ; bx -> ebx 636 00000410 BB[35150000] mov ebx, load_24khz_stereo_16_bit 637 00000415 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 638 0000041C 751A jne short chk_24khz_2 639 0000041E BB[CF140000] mov ebx, load_24khz_mono_16_bit 640 00000423 EB13 jmp short chk_24khz_2 641 chk_24khz_1: 642 00000425 BB[45140000] mov ebx, load_24khz_stereo_8_bit 643 0000042A 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 644 00000431 7505 jne short chk_24khz_2 645 00000433 BB[DE130000] mov ebx, load_24khz_mono_8_bit 646 chk_24khz_2: 647 ; 30/11/2024 (TRDOS 386, 32bit DOS) 648 00000438 B800200000 mov eax, 8192 649 ; 17/11/2024 650 ;mov ax, 8190 651 0000043D BA02000000 mov edx, 2 652 00000442 B901000000 mov ecx, 1 653 00000447 E9AF000000 jmp set_sizes ; 02/02/2025 654 655 chk_32khz: 656 0000044C 663D007D cmp ax, 32000 657 ;jne short vra_needed 658 ; 05/02/2025 659 00000450 7563 jne short chk_12khz 660 00000452 803D[C2800000]08 cmp byte [WAVE_BitsPerSample], 8 661 00000459 7615 jna short chk_32khz_1 662 0000045B BB[39170000] mov ebx, load_32khz_stereo_16_bit 663 00000460 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 664 00000467 751A jne short chk_32khz_2 665 00000469 BB[CC160000] mov ebx, load_32khz_mono_16_bit 666 0000046E EB13 jmp short chk_32khz_2 667 chk_32khz_1: 668 00000470 BB[2F160000] mov ebx, load_32khz_stereo_8_bit 669 00000475 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 670 0000047C 7505 jne short chk_32khz_2 671 0000047E BB[BC150000] mov ebx, load_32khz_mono_8_bit 672 chk_32khz_2: 673 ; 30/11/2024 (TRDOS 386, 32bit DOS) 674 00000483 B8AA2A0000 mov eax, 10922 675 ; 17/11/2024 676 ;mov ax, 10920 677 00000488 BA03000000 mov edx, 3 678 0000048D B902000000 mov ecx, 2 679 ; 05/02/2025 680 00000492 EB67 jmp short set_sizes 681 682 ; 07/12/2024 683 vra_needed: 684 ; 30/11/2024 (TRDOS 386, ax -> eax) 685 ; 13/11/2023 686 00000494 58 pop eax ; discard return address to the caller 687 ; 30/05/2024 688 vra_err: 689 ; 21/12/2024 690 00000495 E875020000 call set_text_mode 691 ; 30/11/2024 692 sys _msg, msg_no_vra, 255, 0Fh 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 0000049A BB[EF2C0000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000049F B9FF000000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 000004A4 BA0F000000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000004A9 B823000000 <1> mov eax, %1 100 <1> 101 000004AE CD40 <1> int 40h 693 000004B0 E977010000 jmp Exit 694 695 ;;;; 696 ; 05/02/2025 697 chk_12khz: 698 000004B5 663DE02E cmp ax, 12000 699 000004B9 75D9 jne short vra_needed 700 000004BB 803D[C2800000]08 cmp byte [WAVE_BitsPerSample], 8 701 000004C2 7615 jna short chk_12khz_1 702 000004C4 BB[F51E0000] mov ebx, load_12khz_stereo_16_bit 703 000004C9 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 704 000004D0 751A jne short chk_12khz_2 705 000004D2 BB[A61E0000] mov ebx, load_12khz_mono_16_bit 706 000004D7 EB13 jmp short chk_12khz_2 707 chk_12khz_1: 708 000004D9 BB[501E0000] mov ebx, load_12khz_stereo_8_bit 709 000004DE 803D[B6800000]01 cmp byte [WAVE_NumChannels], 1 710 000004E5 7505 jne short chk_12khz_2 711 000004E7 BB[081E0000] mov ebx, load_12khz_mono_8_bit 712 chk_12khz_2: 713 000004EC B800100000 mov eax, 4096 714 000004F1 BA04000000 mov edx, 4 715 000004F6 B901000000 mov ecx, 1 716 ; 05/02/2025 717 ;jmp short set_sizes 718 ;;;; 719 720 set_sizes: 721 ; 30/11/2024 (TRDOS 386, 32bit DOS) 722 ;;; 723 ; 17/11/2024 724 000004FB 51 push ecx 725 000004FC B102 mov cl, 2 726 000004FE 2A0D[32810000] sub cl, [fbs_shift] 727 ; = 2 for 16 bit stereo 728 ; = 1 for 16 bit mono or 8 bit stereo 729 ; = 0 for 8 bit mono 730 00000504 D3E0 shl eax, cl 731 00000506 59 pop ecx 732 00000507 A3[44810000] mov [loadsize], eax ; (one) read count in bytes 733 ;;; 734 0000050C F7E2 mul edx 735 0000050E 83F901 cmp ecx, 1 736 00000511 7402 je short s_2 737 s_1: 738 00000513 F7F1 div ecx 739 s_2: 740 ;;; 741 ; eax = byte count of (to be) converted samples 742 743 ; 17/11/2024 744 ;;; 745 00000515 8A0D[32810000] mov cl, [fbs_shift] 746 747 0000051B D3E0 shl eax, cl 748 ; *1 for 16 bit stereo 749 ; *2 for 16 bit mono or 8 bit stereo 750 ; *4 for for 8 bit mono 751 ;;; 752 753 ; eax = 16 bit stereo byte count (target buffer size) 754 755 ; 07/12/2024 756 ;shr eax, 1 ; buffer size is 16 bit sample count 757 0000051D A3[48810000] mov [buffersize], eax ; buffer size in bytes 758 00000522 891D[40810000] mov [loadfromwavfile], ebx 759 760 ; ------------------------------------------------------------- 761 762 Player_Template: 763 764 ; 26/12/2024 765 00000528 803D[0D430000]00 cmp byte [IsInSplash], 0 766 0000052F 7611 jna short Player_Template_@ 767 768 ; 24/12/2024 (setting for wave lighting points) 769 00000531 A1[7C760000] mov eax, [LFB_ADDR] 770 ;add eax, 228*640 ; wave graphics start (top) line/row 771 00000536 05009A0100 add eax, 164*640 ; 256 volume levels ; 24/12/2024 772 0000053B A3[78760000] mov [graphstart], eax 773 774 ; 26/12/2024 775 00000540 EB14 jmp short PlayNow 776 777 Player_Template_@: 778 ; 21/12/2024 779 00000542 E859010000 call clearscreen 780 00000547 E870010000 call drawplayingscreen 781 782 ; 14/11/2024 783 0000054C E8E0210000 call SetTotalTime 784 00000551 E8AD220000 call UpdateFileInfo 785 786 ; ------------------------------------------------------------- 787 788 ; 21/12/2024 (VGA/LFB modifications) 789 ; (Direct access/map to the LFB is already done here) 790 ; ((this program is in VESA/VBE graphics mode here)) 791 PlayNow: 792 ; 07/12/2024 793 sys _audio, 0200h, [buffersize], audio_buffer 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000556 BB00020000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000055B 8B0D[48810000] <1> mov ecx, %3 94 <1> %if %0 = 4 95 00000561 BA[00900000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000566 B820000000 <1> mov eax, %1 100 <1> 101 0000056B CD40 <1> int 40h 794 0000056D 0F82FF000000 jc error_exit ; return to text mode and print err msg 795 796 ; 01/06/2024 797 ; Initialize Audio Device (bh = 3) 798 sys _audio, 0301h, 0, audio_int_handler 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000573 BB01030000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00000578 B900000000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 0000057D BA[E2090000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000582 B820000000 <1> mov eax, %1 100 <1> 101 00000587 CD40 <1> int 40h 799 ;jc short error_exit 800 00000589 0F82C3000000 jc init_err ; return to text mode and print err msg 801 802 ; 30/05/2024 803 ; playwav4.asm 804 ;_2: ; 24/12/2024 805 ;call check4keyboardstop ; flush keyboard buffer 806 ;jc short _2 ; 07/11/2023 807 808 ;;; 809 ; 26/12/2024 810 ; 14/11/2024 811 ;mov al, 3 ; 0 = max, 31 = min 812 ; 15/11/2024 813 0000058F E86E030000 call SetMasterVolume 814 815 ; 26/12/2024 816 00000594 803D[0D430000]00 cmp byte [IsInSplash], 0 817 0000059B 770A ja short _2 818 819 ; 07/12/2024 820 ;call SetPCMOutVolume 821 0000059D E8E2220000 call UpdateVolume 822 ;;; 823 ; 14/11/2024 824 000005A2 E86D230000 call UpdateProgressBar 825 ;;; 826 827 ; 26/12/2024 828 _2: 829 830 ; play the .wav file. Most of the good stuff is in here. 831 832 ; 05/12/2024 833 000005A7 E86A010000 call PlayWav 834 835 ; close the .wav file and exit. 836 837 ; 25/12/2024 838 000005AC E8D8030000 call closeFile 839 840 ; 25/12/2024 841 ;;; 842 ; reset file loading and EOF parameters 843 ; 18/12/2024 844 000005B1 C705[54810000]0000- mov dword [count], 0 844 000005B9 0000 845 000005BB C705[58810000]0000- mov dword [LoadedDataBytes], 0 845 000005C3 0000 846 000005C5 C605[CE800000]00 mov byte [flags], 0 847 000005CC C605[8C800000]00 mov byte [stopped], 0 848 ; 26/12/2024 849 000005D3 C605[98800000]FF mov byte [pbuf_s], 0FFh 850 ;;; 851 852 ; cmp byte [IsInSplash], 0 853 ; jna short _6 854 ; mov byte [IsInSplash], 0 855 ; mov esi, [argvf] 856 ; jmp Player_ParseNextParameter 857 ; 858 ; ; 29/11/2024 859 ;_6: 860 ; cmp byte [command], 'Q' 861 ; je short _7 ; 25/12/2024 862 ; jmp check_p_command 863 ; 864 ;_7: 865 ; 07/12/2024 866 ;;; 867 ; Stop Playing 868 ;sys _audio, 0700h 869 ; Cancel callback service (for user) 870 sys _audio, 0900h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000005DA BB00090000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000005DF B820000000 <1> mov eax, %1 100 <1> 101 000005E4 CD40 <1> int 40h 871 ; Deallocate Audio Buffer (for user) 872 sys _audio, 0A00h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000005E6 BB000A0000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000005EB B820000000 <1> mov eax, %1 100 <1> 101 000005F0 CD40 <1> int 40h 873 ; Disable Audio Device 874 sys _audio, 0C00h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000005F2 BB000C0000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000005F7 B820000000 <1> mov eax, %1 100 <1> 101 000005FC CD40 <1> int 40h 875 ;;; 876 877 ; 27/12/2024 878 ; 26/12/2024 879 000005FE 803D[0D430000]00 cmp byte [IsInSplash], 0 880 00000605 7612 jna short _6 881 00000607 C605[0D430000]00 mov byte [IsInSplash], 0 882 0000060E 8B35[D8800000] mov esi, [argvf] 883 00000614 E9E6FAFFFF jmp Player_ParseNextParameter 884 _6: 885 00000619 803D[9C800000]51 cmp byte [command], 'Q' 886 00000620 7405 je short terminate 887 00000622 E9AEFAFFFF jmp check_p_command 888 889 terminate: 890 00000627 E8E3000000 call set_text_mode 891 Exit: 892 sys _exit 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 0000062C B801000000 <1> mov eax, %1 100 <1> 101 00000631 CD40 <1> int 40h 893 halt: 894 00000633 EBFE jmp short halt 895 896 ; ------------------------------------------------------------- 897 898 ; 30/05/2024 899 pmsg_usage: 900 ; 21/12/2024 901 00000635 E8D5000000 call set_text_mode 902 ; 01/12/2024 903 sys _msg, msg_usage, 255, 0Fh 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 0000063A BB[2A2C0000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000063F B9FF000000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00000644 BA0F000000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000649 B823000000 <1> mov eax, %1 100 <1> 101 0000064E CD40 <1> int 40h 904 00000650 EBDA jmp short Exit 905 906 ; ------------------------------------------------------------- 907 908 ; 30/05/2024 909 init_err: 910 ; 21/12/2024 911 00000652 E8B8000000 call set_text_mode 912 ; 01/12/2024 913 sys _msg, msg_init_err, 255, 0Fh 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000657 BB[BE2C0000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000065C B9FF000000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00000661 BA0F000000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000666 B823000000 <1> mov eax, %1 100 <1> 101 0000066B CD40 <1> int 40h 914 0000066D EBBD jmp short Exit 915 916 ; ------------------------------------------------------------- 917 918 ; 02/12/2024 919 Player_Quit@: 920 0000066F 58 pop eax ; return addr (call PlayWav@) 921 922 ; 29/11/2024 923 Player_Quit: 924 00000670 EBB5 jmp short terminate 925 926 927 ; ------------------------------------------------------------- 928 929 ; 07/12/2024 930 error_exit: 931 ; 21/12/2024 932 00000672 E898000000 call set_text_mode 933 trdos386_error: 934 sys _msg, trdos386_err_msg, 255, 0Eh 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000677 BB[9E2C0000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000067C B9FF000000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00000681 BA0E000000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000686 B823000000 <1> mov eax, %1 100 <1> 101 0000068B CD40 <1> int 40h 935 0000068D EB9D jmp short Exit 936 937 ; ------------------------------------------------------------- 938 939 ; 21/12/2024 940 print_msg: 941 0000068F B40E mov ah, 0Eh 942 00000691 BB07000000 mov ebx, 7 943 ;mov bl, 7 ; char attribute & color 944 p_next_chr: 945 00000696 AC lodsb 946 00000697 08C0 or al, al 947 00000699 7404 jz short p_retn ; retn 948 0000069B CD31 int 31h 949 0000069D EBF7 jmp short p_next_chr 950 p_retn: 951 0000069F C3 retn 952 953 ; ------------------------------------------------------------- 954 955 ; 21/12/2024 956 clearscreen: 957 ; fast clear 958 ; 640*480, 256 colors 959 000006A0 8B3D[7C760000] mov edi, [LFB_ADDR] 960 000006A6 B9002C0100 mov ecx, (640*480*1)/4 ; 22/12/2024 961 000006AB 31C0 xor eax, eax 962 000006AD F3AB rep stosd 963 000006AF C3 retn 964 965 ; ------------------------------------------------------------- 966 967 ; 26/12/2024 968 ; 21/12/2024 969 drawsplashscreen: 970 000006B0 BD[1C2E0000] mov ebp, SplashScreen 971 ;;mov dword [nextrow], 00100000h ; 8*16 972 ;mov dword [nextrow], 000E0000h ; 8*14 973 ;mov esi, 0 ; row 0, column 0 974 000006B5 BE00000200 mov esi, 00020000h ; row 2, column 0 ; top margin = 2 975 000006BA EB0A jmp short p_d_x 976 drawplayingscreen: 977 000006BC BD[BD380000] mov ebp, PlayingScreen 978 ;mov dword [nextrow], 000E0000h ; 8*14 979 ;mov esi, 0 ; row 0, column 0 980 000006C1 BE00000700 mov esi, 00070000h ; row 7, column 0 ; top margin = 7 981 p_d_x: 982 000006C6 C605[88760000]50 mov byte [columns], 80 983 p_d_x_n: 984 000006CD 31D2 xor edx, edx 985 000006CF 8A5500 mov dl, [ebp] 986 000006D2 20D2 and dl, dl 987 000006D4 7438 jz short p_d_x_ok 988 000006D6 C1E204 shl edx, 4 ; * 16 (for 8x16 font) 989 990 000006D9 BF[34510000] mov edi, fontbuff2 ; start of user font data 991 000006DE 01D7 add edi, edx 992 993 ;; NOTE: Following system call writes fonts at 994 ;; Std VGA video memory 0A0000h, BL bit 7 selects 995 ;; screen width as 640 pixels (instead of 320 pixels) 996 ;; so 8Fh is sub function 0Fh (write char) 997 ;; with 640 pixels screen witdh. 998 ;; (Even if VESA VBE mode -LFB- is in use, QEMU and 999 ;; a real computer with NVIDIA GEFORCE FX 550 uses 1000 ;; A0000h, so.. even if fonts are written at A0000h-B0000h 1001 ;; region, the text is appeared on screen 1002 ;; while LFB is at C0000000h or E0000000h.) 1003 1004 ;sys _video, 018Fh, [tcolor], 8001h 1005 ;; use STD VGA video memory 1006 ;; (0A0000h) 1007 ;sys _video, 020Fh, [tcolor], 8001h ; 8x16 user font 1008 ; use LFB for current VBE mode 1009 ; for writing fonts on screen 1010 ; 26/12/2024 1011 sys _video, 020Fh, 0Fh, 8001h ; 8x16 user font 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000006E0 BB0F020000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 000006E5 B90F000000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 000006EA BA01800000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000006EF B81F000000 <1> mov eax, %1 100 <1> 101 000006F4 CD40 <1> int 40h 1012 1013 000006F6 45 inc ebp 1014 000006F7 6683C608 add si, 8 ; next char pos 1015 000006FB FE0D[88760000] dec byte [columns] 1016 00000701 75CA jnz short p_d_x_n ; next column 1017 00000703 6631F6 xor si, si 1018 ;;add esi, 00100000h ; next row ; 8*16 1019 ;add esi, [nextrow] 1020 00000706 81C600000E00 add esi, 000E0000h ; next row ; 8*14 1021 0000070C EBB8 jmp short p_d_x 1022 p_d_x_ok: 1023 0000070E C3 retn 1024 1025 ; ------------------------------------------------------------- 1026 1027 ; 21/12/2024 1028 set_text_mode: 1029 0000070F 30E4 xor ah, ah 1030 00000711 B003 mov al, 3 1031 ;int 10h ; al = 03h text mode, int 10 video 1032 00000713 CD31 int 31h ; TRDOS 386 - Video interrupt 1033 00000715 C3 retn 1034 1035 ; ------------------------------------------------------------- 1036 1037 ; 07/12/2024 (playwav9.s) 1038 ; 26/11/2023 (playwav8.s) 1039 PlayWav: 1040 ; 19/11/2024 1041 00000716 C605[8F800000]01 mov byte [wleds], 1 1042 1043 ;;; 1044 ; 09/12/2024 1045 0000071D B834290000 mov eax, 10548 ; (48000*10/182)*4 1046 00000722 803D[9A800000]00 cmp byte [VRA], 0 1047 00000729 7614 jna short _3 ; 48kHZ (interpolation) 1048 ;;; 1049 ; 01/12/2024 (32bit) 1050 ;movzx eax, word [WAVE_SampleRate] 1051 ; 09/12/2024 1052 0000072B 66A1[B8800000] mov ax, [WAVE_SampleRate] 1053 00000731 B90A000000 mov ecx, 10 1054 00000736 F7E1 mul ecx 1055 00000738 B1B6 mov cl, 182 1056 0000073A F7F1 div ecx 1057 ; ax = samples per 1/18.2 second 1058 ;mov cl, byte [WAVE_BlockAlign] 1059 ; 09/12/2024 1060 ;mov cl, 4 ; 16 bit, stereo 1061 ;mul ecx 1062 0000073C C1E002 shl eax, 2 ; * 4 1063 _3: 1064 0000073F A3[90800000] mov [wleds_dif], eax ; buffer read differential (distance) 1065 ; for wave volume leds update 1066 ; (byte stream per 1/18.2 second) 1067 ;;; 1068 ; 24/12/2024 1069 00000744 3D000A0000 cmp eax, 640*4 ; 640 samples (for 640 wave light points) 1070 00000749 7305 jnb short _4 1071 0000074B B8000A0000 mov eax, 640*4 1072 _4: 1073 00000750 A3[74760000] mov [wpoints_dif], eax 1074 ;;; 1075 1076 RePlayWav: 1077 ; 07/12/2024 1078 00000755 BF[00900000] mov edi, audio_buffer 1079 0000075A FF15[40810000] call dword [loadfromwavfile] 1080 00000760 0F820CFFFFFF jc error_exit 1081 1082 00000766 C605[99800000]01 mov byte [half_buffer], 1 ; (DMA) Buffer 1 1083 1084 0000076D A1[54810000] mov eax, [count] 1085 00000772 0105[58810000] add [LoadedDataBytes], eax 1086 1087 00000778 F605[CE800000]01 test byte [flags], ENDOFFILE ; end of file 1088 0000077F 752C jnz short _5 ; yes 1089 ; bypass filling dma half buffer 2 1090 1091 ; bh = 16 : update (current, first) dma half buffer 1092 ; bl = 0 : then switch to the next (second) half buffer 1093 sys _audio, 1000h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000781 BB00100000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000786 B820000000 <1> mov eax, %1 100 <1> 101 0000078B CD40 <1> int 40h 1094 1095 ; 18/12/2024 1096 0000078D C705[54810000]0000- mov dword [count], 0 1096 00000795 0000 1097 1098 ; 07/12/2024 1099 00000797 BF[00900000] mov edi, audio_buffer 1100 0000079C FF15[40810000] call dword [loadfromwavfile] 1101 ;jc error_exit 1102 1103 000007A2 A1[54810000] mov eax, [count] 1104 000007A7 0105[58810000] add [LoadedDataBytes], eax 1105 _5: 1106 ; 07/12/2024 1107 000007AD 668B0D[B8800000] mov cx, [WAVE_SampleRate] 1108 000007B4 B303 mov bl, 3 ; 16 bit, stereo 1109 000007B6 B704 mov bh, 4 ; start to play 1110 sys _audio 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000007B8 B820000000 <1> mov eax, %1 100 <1> 101 000007BD CD40 <1> int 40h 1111 1112 ;;; 1113 ; 26/12/2024 1114 SplashLoop: 1115 000007BF 803D[0D430000]00 cmp byte [IsInSplash], 0 1116 000007C6 7648 jna short _10 1117 ;; skip 1st signal without sound data loading 1118 ;nop 1119 ;nop 1120 ;nop 1121 ;cmp byte [SRB], 0 1122 ;jna short SplashLoop 1123 ;mov byte [SRB], 0 1124 _8: 1125 000007C8 F605[CE800000]01 test byte [flags], ENDOFFILE ; end of file 1126 000007CF 0F85CC1C0000 jnz ac97_stop ; yes 1127 1128 ; bh = 16 : update (current, first) dma half buffer 1129 ; bl = 0 : then switch to the next (second) half buffer 1130 sys _audio, 1000h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000007D5 BB00100000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000007DA B820000000 <1> mov eax, %1 100 <1> 101 000007DF CD40 <1> int 40h 1131 1132 000007E1 803D[33810000]00 cmp byte [SRB], 0 1133 000007E8 7619 jna short _9 1134 000007EA C605[33810000]00 mov byte [SRB], 0 1135 000007F1 BF[00900000] mov edi, audio_buffer 1136 000007F6 FF15[40810000] call dword [loadfromwavfile] 1137 000007FC 7305 jnc short _9 1138 ; end of file 1139 ;call ac97_stop 1140 ;retn 1141 000007FE E99E1C0000 jmp ac97_stop 1142 _9: 1143 00000803 E8AA1E0000 call check4keyboardstop 1144 00000808 0F82B1000000 jc _exitt_ 1145 0000080E EBB8 jmp short _8 1146 _10: 1147 ; 26/12/2024 1148 00000810 803D[9B800000]00 cmp byte [p_mode], 0 1149 00000817 7705 ja short tuneLoop 1150 ;;; 1151 1152 ; ------------------------------------------- 1153 1154 ; 22/12/2024 1155 ; prepare all leds as turned off 1156 00000819 E8F8210000 call reset_wave_leds 1157 1158 ; ------------------------------------------- 1159 1160 ; 07/12/2024 (playwav9.s) 1161 ; 01/12/2024 (32bit) 1162 ; 29/11/2024 1163 tuneLoop: 1164 ; 30/05/2024 1165 ; 18/11/2023 (ich_wav4.asm) 1166 ; 08/11/2023 1167 ; 06/11/2023 1168 tLWait: 1169 ; 18/11/2024 1170 0000081E 803D[8C800000]00 cmp byte [stopped], 0 1171 ; 24/11/2024 1172 00000825 7641 jna short tL1 1173 1174 tLWait@: ; 21/11/2024 1175 ;;; 1176 ; 25/12/2024 1177 ; 09/12/2024 1178 00000827 803D[8C800000]03 cmp byte [stopped], 3 1179 0000082E 0F838B000000 jnb _exitt_ 1180 ;;; 1181 00000834 E8A41C0000 call checkUpdateEvents 1182 00000839 0F8280000000 jc _exitt_ 1183 ;;; 1184 ; 25/12/2024 1185 ; 29/11/2024 1186 0000083F 803D[9C800000]4E cmp byte [command], 'N' 1187 00000846 7477 je _exitt_ 1188 00000848 803D[9C800000]50 cmp byte [command], 'P' 1189 0000084F 746E je _exitt_ 1190 ;;; 1191 00000851 803D[8D800000]30 cmp byte [tLO], '0' 1192 00000858 74C4 je short tLWait 1193 0000085A E86A000000 call tLZ 1194 0000085F C605[8D800000]30 mov byte [tLO], '0' 1195 00000866 EBB6 jmp short tLWait 1196 tL1: 1197 ; 27/11/2024 1198 ; Check AC'97 interrupt status 1199 00000868 803D[33810000]00 cmp byte [SRB], 0 1200 0000086F 7709 ja short tL3 1201 tL2: 1202 00000871 E8671C0000 call checkUpdateEvents 1203 00000876 7247 jc _exitt_ 1204 00000878 EBA4 jmp short tLWait 1205 tL3: 1206 0000087A 8035[99800000]01 xor byte [half_buffer], 1 1207 ; 07/12/2024 1208 00000881 C605[33810000]00 mov byte [SRB], 0 1209 1210 ; 07/12/2024 1211 00000888 BF[00900000] mov edi, audio_buffer 1212 ;call loadFromFile 1213 ; 18/11/2023 1214 ;call word [loadfromwavfile] 1215 ; 01/12/2024 1216 0000088D FF15[40810000] call dword [loadfromwavfile] 1217 00000893 722A jc short _exitt_ ; end of file 1218 1219 ; 07/12/2024 1220 ;;;; 1221 ; bh = 16 : update (current, first) dma half buffer 1222 ; bl = 0 : then switch to the other half buffer 1223 sys _audio, 1000h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000895 BB00100000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 0000089A B820000000 <1> mov eax, %1 100 <1> 101 0000089F CD40 <1> int 40h 1224 ;;;; 1225 1226 ; 26/11/2024 1227 000008A1 A0[99800000] mov al, [half_buffer] 1228 000008A6 0431 add al, '1' 1229 ; 19/11/2024 1230 000008A8 A2[8D800000] mov [tLO], al 1231 000008AD E819000000 call tL0 1232 1233 ; 24/11/2024 1234 ; 14/11/2024 1235 ;mov ax, [count] 1236 ;add [LoadedDataBytes], ax 1237 ;adc word [LoadedDataBytes+2], 0 1238 ; 01/12/2024 1239 000008B2 A1[54810000] mov eax, [count] 1240 000008B7 0105[58810000] add [LoadedDataBytes], eax 1241 1242 ; 07/12/2024 (playwav9.s) 1243 ; 27/11/2024 (playwav9.asm) 1244 000008BD EBB2 jmp short tL2 1245 1246 _exitt_: 1247 ; 07/12/2024 1248 ; Stop Playing 1249 ;mov byte [stopped], 2 1250 ;sys _audio, 0700h 1251 000008BF E8DD1B0000 call ac97_stop 1252 1253 ;;; 1254 ; 14/11/2024 1255 000008C4 E84B200000 call UpdateProgressBar 1256 ;;; 1257 1258 ; 18/11/2024 1259 tLZ: 1260 ; 30/05/2024 1261 000008C9 B030 mov al, '0' 1262 1263 ;add al, '0' 1264 ;call tL0 1265 ; 1266 ;retn 1267 ; 06/11/2023 1268 ;jmp short tL0 1269 ;retn 1270 1271 ; 06/11/2023 1272 tL0: 1273 ; 29/05/2024 (TRDOS 386) 1274 ; 08/11/2023 1275 ; 05/11/2023 1276 ; 17/02/2017 - Buffer switch test (temporary) 1277 ; 06/11/2023 1278 ; al = buffer indicator ('1', '2' or '0' -stop- ) 1279 1280 ; 22/12/2024 (graphics mode modification) 1281 ; (640*480, 256 colors) 1282 ;;; 1283 ;mov ebp, 16 1284 000008CB BD0E000000 mov ebp, 14 1285 000008D0 8B3D[7C760000] mov edi, [LFB_ADDR] 1286 000008D6 0FB6F0 movzx esi, al 1287 000008D9 C1E604 shl esi, 4 ; * 16 1288 000008DC 81C6[34510000] add esi, fontbuff2 1289 tL0_1: 1290 000008E2 BA08000000 mov edx, 8 ; 8 pixels (8*16 pixel font) 1291 000008E7 8A26 mov ah, [esi] 1292 tL0_2: 1293 000008E9 B00C mov al, 0Ch ; red 1294 000008EB D0E4 shl ah, 1 1295 000008ED 7302 jnc short tL0_3 1296 000008EF B00E mov al, 0Eh ; yellow 1297 tL0_3: 1298 000008F1 AA stosb 1299 000008F2 4A dec edx 1300 000008F3 75F4 jnz short tL0_2 1301 000008F5 4D dec ebp 1302 000008F6 7409 jz short tL0_4 1303 000008F8 81C778020000 add edi, 640-8 ; next line 1304 000008FE 46 inc esi 1305 000008FF EBE1 jmp short tL0_1 1306 tL0_4: 1307 ;;; 1308 00000901 C3 retn 1309 1310 ; ------------------------------------------- 1311 1312 ; 26/12/2024 1313 ; 07/12/2024 1314 SetMasterVolume: 1315 00000902 A0[15270000] mov al, [volume] 1316 ; 26/12/2024 1317 ;mov [volume], al ; max = 0, min = 31 1318 1319 00000907 B41F mov ah, 31 1320 00000909 28C4 sub ah, al 1321 0000090B 88E0 mov al, ah 1322 1323 ; Set Master Volume Level (BL=0 or 80h) 1324 ; for next playing (BL>=80h) 1325 ;sys _audio, 0B80h, eax 1326 sys _audio, 0B00h, eax 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 0000090D BB000B0000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00000912 89C1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000914 B820000000 <1> mov eax, %1 100 <1> 101 00000919 CD40 <1> int 40h 1327 1328 setvolume_ok: 1329 ac97_not_detected: 1330 0000091B C3 retn 1331 1332 ; ------------------------------------------- 1333 1334 ; 07/12/2024 (playwav9.s) 1335 DetectAC97: 1336 DetectICH: 1337 ; 25/11/2023 (playwav8.s) 1338 ; Detect (BH=1) AC'97 (BL=2) Audio Device 1339 sys _audio, 0102h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 0000091C BB02010000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000921 B820000000 <1> mov eax, %1 100 <1> 101 00000926 CD40 <1> int 40h 1340 ;jnc short d_ac97_@ 1341 ;retn 1342 00000928 72F1 jc short ac97_not_detected 1343 d_ac97_@: 1344 ; 07/12/2024 (playwav9.s) 1345 ; 06/06/2017 1346 sys _audio, 0E00h ; get audio controller info 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 0000092A BB000E0000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 0000092F B820000000 <1> mov eax, %1 100 <1> 101 00000934 CD40 <1> int 40h 1347 00000936 0F8236FDFFFF jc error_exit ; 25/11/2023 1348 1349 ;cmp ah, 2 ; ICH ? (Intel AC'97 Audio Controller) 1350 ;jne _dev_not_ready 1351 1352 ; EAX = IRQ Number in AL 1353 ; Audio Device Number in AH 1354 ; EBX = DEV/VENDOR ID 1355 ; (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV) 1356 ; ECX = BUS/DEV/FN 1357 ; (00000000BBBBBBBBDDDDDFFF00000000) 1358 ; EDX = NABMBAR/NAMBAR (for AC97) 1359 ; (Low word, DX = NAMBAR address) 1360 ; EDX = Base IO Addr (DX) for SB16 & VT8233 1361 1362 0000093C 891D[38810000] mov [dev_vendor], ebx 1363 00000942 890D[34810000] mov [bus_dev_fn], ecx 1364 1365 00000948 668915[3C810000] mov [NAMBAR], dx ; save audio mixer base addr 1366 ;shr edx, 16 1367 ;mov [NABMBAR], dx ; save bus master base addr 1368 0000094F 8915[3C810000] mov [NAMBAR], edx 1369 1370 00000955 A2[CF800000] mov [ac97_int_ln_reg], al 1371 1372 ; 07/12/2024 1373 ; 01/06/2024 1374 ; 25/11/2023 1375 ; Get AC'97 Codec info 1376 ; (Function 14, sub function 1) 1377 sys _audio, 0E01h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 0000095A BB010E0000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 0000095F B820000000 <1> mov eax, %1 100 <1> 101 00000964 CD40 <1> int 40h 1378 ; Save Variable Rate Audio support bit 1379 00000966 2401 and al, 1 1380 00000968 A2[9A800000] mov [VRA], al 1381 1382 ;clc 1383 1384 0000096D C3 retn 1385 1386 ; ---------------------------------- 1387 1388 ; 26/12/2024 1389 ; 07/12/2024 1390 ; 01/12/2024 1391 ; 14/11/2024 1392 ; INPUT: ds:dx = file name address 1393 ; OUTPUT: [filehandle] = ; -1 = not open 1394 openFile: 1395 ; 26/12/2024 1396 ; 01/12/2024 1397 sys _open, edx, 0 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 0000096E 89D3 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00000970 B900000000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000975 B805000000 <1> mov eax, %1 100 <1> 101 0000097A CD40 <1> int 40h 1398 ; 07/12/2024 1399 ;sys _open, wav_file_name, 0 1400 0000097C 7305 jnc short _of1 1401 1402 0000097E B8FFFFFFFF mov eax, -1 1403 ; cf = 1 -> not found or access error 1404 _of1: 1405 00000983 A3[D0800000] mov [filehandle], eax 1406 00000988 C3 retn 1407 1408 ; ---------------------------------- 1409 1410 ; close the currently open file 1411 1412 ; 01/12/2024 1413 ; 14/11/2024 1414 ; INPUT: [filehandle] ; -1 = not open 1415 ; OUTPUT: none 1416 closeFile: 1417 00000989 833D[D0800000]FF cmp dword [filehandle], -1 1418 00000990 740D jz short _cf1 1419 ; 01/12/2024 1420 sys _close, [filehandle] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000992 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000998 B806000000 <1> mov eax, %1 100 <1> 101 0000099D CD40 <1> int 40h 1421 ;mov dword [filehandle], -1 1422 _cf1: 1423 0000099F C3 retn 1424 1425 ; ---------------------------------- 1426 1427 ; 05/02/2025 1428 ; 01/12/2024 1429 ; 14/11/2024 - Erdogan Tan 1430 getWAVParameters: 1431 ; reads WAV file header(s) (44 bytes) from the .wav file. 1432 ; entry: none - assumes file is already open 1433 ; exit: ax = sample rate (11025, 22050, 44100, 48000) 1434 ; cx = number of channels (mono=1, stereo=2) 1435 ; dx = bits per sample (8, 16) 1436 ; bx = number of bytes per sample (1 to 4) 1437 1438 ;mov dx, WAVFILEHEADERbuff 1439 ;mov bx, [filehandle] 1440 ;mov cx, 44 ; 44 bytes 1441 ;mov ah, 3Fh 1442 ;int 21h 1443 ;jc short gwavp_retn 1444 ; 01/12/2024 (TRDOS 386) 1445 sys _read, [filehandle], WAVFILEHEADERbuff, 44 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000009A0 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 000009A6 B9[A0800000] <1> mov ecx, %3 94 <1> %if %0 = 4 95 000009AB BA2C000000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000009B0 B803000000 <1> mov eax, %1 100 <1> 101 000009B5 CD40 <1> int 40h 1446 000009B7 7228 jc short gwavp_retn 1447 1448 000009B9 83F82C cmp eax, 44 1449 000009BC 7223 jb short gwavp_retn 1450 1451 000009BE 813D[A8800000]5741- cmp dword [RIFF_Format], 'WAVE' 1451 000009C6 5645 1452 000009C8 7516 jne short gwavp_stc_retn 1453 1454 000009CA 66833D[B4800000]01 cmp word [WAVE_AudioFormat], 1 ; Offset 20, must be 1 (= PCM) 1455 ; 05/02/2025 1456 000009D2 750C jne short gwavp_stc_retn 1457 ;je short gwavp_retn ; 15/11/2024 1458 1459 ; 05/02/2025 1460 ; (Open MPT creates wav files with a new type header, 1461 ; this program can not use the new type 1462 ; because of 'data' offset is not at DATA_SubchunkID.) 1463 ; ((GoldWave creates common type wav file.)) 1464 000009D4 813D[C4800000]6461- cmp dword [DATA_SubchunkID], 'data' 1464 000009DC 7461 1465 000009DE 7401 je short gwavp_retn 1466 1467 ; 15/11/2024 1468 ;mov cx, [WAVE_NumChannels] ; return num of channels in CX 1469 ;mov ax, [WAVE_SampleRate] ; return sample rate in AX 1470 ;mov dx, [WAVE_BitsPerSample] 1471 ; return bits per sample value in DX 1472 ;mov bx, [WAVE_BlockAlign] ; return bytes per sample in BX 1473 ;gwavp_retn: 1474 ;retn 1475 1476 gwavp_stc_retn: 1477 000009E0 F9 stc 1478 gwavp_retn: 1479 000009E1 C3 retn 1480 1481 ; -------------------------------------------------------- 1482 ; 07/12/2024 1483 ; -------------------------------------------------------- 1484 ; ref: playwav8.s (04/06/2024) 1485 1486 audio_int_handler: 1487 ; 18/08/2020 (14/10/2020, 'wavplay2.s') 1488 1489 ; 07/12/2024 1490 ;mov al, [stopped] 1491 ;cmp al, 2 1492 ;je short _callback_retn 1493 1494 ; 18/08/2020 1495 ;mov byte [SRB], 1 1496 ; 07/12/2024 1497 000009E2 FE05[33810000] inc byte [SRB] 1498 1499 ;_callback_retn: 1500 sys _rele ; return from callback service 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000009E8 B827000000 <1> mov eax, %1 100 <1> 101 000009ED CD40 <1> int 40h 1501 ; we must not come here ! 1502 sys _exit 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000009EF B801000000 <1> mov eax, %1 100 <1> 101 000009F4 CD40 <1> int 40h 1503 1504 ; -------------------------------------------------------- 1505 ; 07/12/2024 1506 ; -------------------------------------------------------- 1507 1508 ; ///// 1509 ; 14/12/2024 1510 ; 07/12/2024 1511 ; 01/12/2024 1512 ; 30/05/2024 (ich_wav4.asm, 19/05/2024) 1513 loadFromFile: 1514 ; 07/11/2023 1515 1516 000009F6 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 1517 ; last of the file? 1518 000009FD 7402 jz short lff_0 ; no 1519 000009FF F9 stc 1520 00000A00 C3 retn 1521 1522 lff_0: 1523 ; 07/12/2024 1524 ; 26/11/2023 (playwav8.s) 1525 ;mov edi, audio_buffer 1526 1527 ; 01/12/2024 (TRDOS 386) 1528 ; edi = audio buffer address 1529 1530 ; 14/12/2024 1531 ; 01/12/2024 1532 ; 17/11/2024 1533 ;mov ebx, [filehandle] 1534 ; 02/12/2024 1535 ;mov edx, [loadsize] 1536 1537 ; 17/11/2024 1538 00000A01 803D[32810000]00 cmp byte [fbs_shift], 0 1539 00000A08 7677 jna short lff_1 ; stereo, 16 bit 1540 1541 lff_2: 1542 ; 01/12/2024 1543 00000A0A BE[00900100] mov esi, temp_buffer 1544 ; 14/12/2024 1545 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000A0F 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00000A15 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00000A17 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000A1D B803000000 <1> mov eax, %1 100 <1> 101 00000A22 CD40 <1> int 40h 1546 00000A24 0F8289000000 jc lff_4 ; error ! 1547 1548 ; 01/12/2024 1549 ; 14/11/2024 1550 00000A2A A3[54810000] mov [count], eax 1551 1552 ; 01/12/2024 1553 00000A2F 21C0 and eax, eax 1554 ;jz short lff_3 1555 ; 14/12/2024 1556 00000A31 0F8485000000 jz lff_10 1557 1558 00000A37 8A1D[32810000] mov bl, [fbs_shift] 1559 1560 ; 14/12/2024 1561 00000A3D 89FA mov edx, edi ; audio buffer start address 1562 1563 ; 01/12/2024 1564 00000A3F 89C1 mov ecx, eax 1565 00000A41 803D[C2800000]08 cmp byte [WAVE_BitsPerSample], 8 ; bits per sample (8 or 16) 1566 00000A48 751E jne short lff_7 ; 16 bit samples 1567 ; 8 bit samples 1568 00000A4A FECB dec bl ; shift count, 1 = stereo, 2 = mono 1569 00000A4C 740E jz short lff_6 ; 8 bit, stereo 1570 ; 01/12/2024 (32bit registers) 1571 lff_5: 1572 ; mono & 8 bit 1573 00000A4E AC lodsb 1574 00000A4F 2C80 sub al, 80h ; 08/11/2023 1575 00000A51 C1E008 shl eax, 8 ; convert 8 bit sample to 16 bit sample 1576 00000A54 66AB stosw ; left channel 1577 00000A56 66AB stosw ; right channel 1578 00000A58 E2F4 loop lff_5 1579 00000A5A EB16 jmp short lff_9 1580 lff_6: 1581 ; stereo & 8 bit 1582 00000A5C AC lodsb 1583 00000A5D 2C80 sub al, 80h ; 08/11/2023 1584 00000A5F C1E008 shl eax, 8 ; convert 8 bit sample to 16 bit sample 1585 00000A62 66AB stosw 1586 00000A64 E2F6 loop lff_6 1587 00000A66 EB0A jmp short lff_9 1588 lff_7: 1589 00000A68 D1E9 shr ecx, 1 ; word count 1590 lff_8: 1591 00000A6A 66AD lodsw 1592 00000A6C 66AB stosw ; left channel 1593 00000A6E 66AB stosw ; right channel 1594 00000A70 E2F8 loop lff_8 1595 lff_9: 1596 ; 14/12/2024 1597 00000A72 89F8 mov eax, edi 1598 00000A74 8B0D[48810000] mov ecx, [buffersize] 1599 00000A7A 01D1 add ecx, edx ; + buffer start address 1600 00000A7C 39C8 cmp eax, ecx 1601 00000A7E 7225 jb short lff_3 1602 00000A80 C3 retn 1603 1604 lff_1: 1605 ; 07/12/2024 1606 ; 01/12/2024 1607 ;sys _read, [filehandle], esi, [loadsize] ; edx 1608 ; 14/12/2024 1609 sys _read, [filehandle], edi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000A81 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00000A87 89F9 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00000A89 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000A8F B803000000 <1> mov eax, %1 100 <1> 101 00000A94 CD40 <1> int 40h 1610 ; 07/11/2023 1611 00000A96 721B jc short lff_4 ; error ! 1612 1613 ; 01/12/2024 1614 ; 14/11/2024 1615 00000A98 A3[54810000] mov [count], eax 1616 1617 ; 02/12/2024 1618 00000A9D 39D0 cmp eax, edx ; cmp eax, [loadsize] 1619 00000A9F 7411 je short endLFF 1620 ; edi = buffer (start) address 1621 00000AA1 01C7 add edi, eax 1622 00000AA3 89D1 mov ecx, edx 1623 lff_3: 1624 ;call padfill ; blank pad the remainder 1625 ; 21/12/2024 1626 padfill: 1627 ; 14/12/2024 1628 ; 01/12/2024 (TRDOS 386, 32bit registers) 1629 ; 17/11/2024 1630 ; di = offset (to be filled with ZEROs) 1631 ; bp = buffer segment 1632 ; ax = di = number of bytes loaded 1633 ; cx = buffer size (> loaded bytes) 1634 ; 07/11/2023 1635 ; 06/11/2023 1636 ; 17/02/2017 1637 ; 01/12/2024 1638 00000AA5 29C1 sub ecx, eax 1639 ; 01/12/2024 1640 ; 25/11/2024 1641 00000AA7 31C0 xor eax, eax 1642 ; 14/12/2024 1643 00000AA9 F3AA rep stosb 1644 ; 21/12/2024 1645 ;retn 1646 ; ---------- 1647 ;clc ; don't exit with CY yet. 1648 00000AAB 800D[CE800000]01 or byte [flags], ENDOFFILE ; end of file flag 1649 endLFF: 1650 00000AB2 C3 retn 1651 lff_4: 1652 ; 08/11/2023 1653 00000AB3 B021 mov al, '!' ; error 1654 00000AB5 E811FEFFFF call tL0 1655 1656 ; 01/12/2024 1657 00000ABA 31C0 xor eax, eax 1658 lff_10: 1659 ; 14/12/2024 1660 00000ABC 8B0D[48810000] mov ecx, [buffersize] 1661 00000AC2 EBE1 jmp short lff_3 1662 1663 ; ///// 1664 1665 ; -------------------------------------------------------- 1666 ; -------------------------------------------------------- 1667 1668 write_audio_dev_info: 1669 ; 30/05/2024 1670 ;sys_msg msgAudioCardInfo, 0Fh 1671 ; 01/12/2024 1672 sys _msg, msgAudioCardInfo, 255, 0Fh 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000AC4 BB[012C0000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00000AC9 B9FF000000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00000ACE BA0F000000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000AD3 B823000000 <1> mov eax, %1 100 <1> 101 00000AD8 CD40 <1> int 40h 1673 00000ADA C3 retn 1674 1675 ; -------------------------------------------------------- 1676 1677 write_ac97_pci_dev_info: 1678 ; 19/11/2024 1679 ; 30/05/2024 1680 ; 06/06/2017 1681 ; 03/06/2017 1682 ; BUS/DEV/FN 1683 ; 00000000BBBBBBBBDDDDDFFF00000000 1684 ; DEV/VENDOR 1685 ; DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV 1686 1687 00000ADB A1[38810000] mov eax, [dev_vendor] 1688 00000AE0 31DB xor ebx, ebx 1689 00000AE2 88C3 mov bl, al 1690 00000AE4 88DA mov dl, bl 1691 00000AE6 80E30F and bl, 0Fh 1692 00000AE9 8A83[282D0000] mov al, [hex_chars+ebx] 1693 00000AEF A2[6F2D0000] mov [msgVendorId+3], al 1694 00000AF4 88D3 mov bl, dl 1695 00000AF6 C0EB04 shr bl, 4 1696 00000AF9 8A83[282D0000] mov al, [hex_chars+ebx] 1697 00000AFF A2[6E2D0000] mov [msgVendorId+2], al 1698 00000B04 88E3 mov bl, ah 1699 00000B06 88DA mov dl, bl 1700 00000B08 80E30F and bl, 0Fh 1701 00000B0B 8A83[282D0000] mov al, [hex_chars+ebx] 1702 00000B11 A2[6D2D0000] mov [msgVendorId+1], al 1703 00000B16 88D3 mov bl, dl 1704 00000B18 C0EB04 shr bl, 4 1705 00000B1B 8A83[282D0000] mov al, [hex_chars+ebx] 1706 00000B21 A2[6C2D0000] mov [msgVendorId], al 1707 00000B26 C1E810 shr eax, 16 1708 00000B29 88C3 mov bl, al 1709 00000B2B 88DA mov dl, bl 1710 00000B2D 80E30F and bl, 0Fh 1711 00000B30 8A83[282D0000] mov al, [hex_chars+ebx] 1712 00000B36 A2[802D0000] mov [msgDevId+3], al 1713 00000B3B 88D3 mov bl, dl 1714 00000B3D C0EB04 shr bl, 4 1715 00000B40 8A83[282D0000] mov al, [hex_chars+ebx] 1716 00000B46 A2[7F2D0000] mov [msgDevId+2], al 1717 00000B4B 88E3 mov bl, ah 1718 00000B4D 88DA mov dl, bl 1719 00000B4F 80E30F and bl, 0Fh 1720 00000B52 8A83[282D0000] mov al, [hex_chars+ebx] 1721 00000B58 A2[7E2D0000] mov [msgDevId+1], al 1722 00000B5D 88D3 mov bl, dl 1723 00000B5F C0EB04 shr bl, 4 1724 00000B62 8A83[282D0000] mov al, [hex_chars+ebx] 1725 00000B68 A2[7D2D0000] mov [msgDevId], al 1726 1727 00000B6D A1[34810000] mov eax, [bus_dev_fn] 1728 00000B72 C1E808 shr eax, 8 1729 00000B75 88C3 mov bl, al 1730 00000B77 88DA mov dl, bl 1731 00000B79 80E307 and bl, 7 ; bit 0,1,2 1732 00000B7C 8A83[282D0000] mov al, [hex_chars+ebx] 1733 00000B82 A2[A52D0000] mov [msgFncNo+1], al 1734 00000B87 88D3 mov bl, dl 1735 00000B89 C0EB03 shr bl, 3 1736 00000B8C 88DA mov dl, bl 1737 00000B8E 80E30F and bl, 0Fh 1738 00000B91 8A83[282D0000] mov al, [hex_chars+ebx] 1739 00000B97 A2[972D0000] mov [msgDevNo+1], al 1740 00000B9C 88D3 mov bl, dl 1741 00000B9E C0EB04 shr bl, 4 1742 00000BA1 8A83[282D0000] mov al, [hex_chars+ebx] 1743 00000BA7 A2[962D0000] mov [msgDevNo], al 1744 00000BAC 88E3 mov bl, ah 1745 00000BAE 88DA mov dl, bl 1746 00000BB0 80E30F and bl, 0Fh 1747 00000BB3 8A83[282D0000] mov al, [hex_chars+ebx] 1748 00000BB9 A2[8B2D0000] mov [msgBusNo+1], al 1749 00000BBE 88D3 mov bl, dl 1750 00000BC0 C0EB04 shr bl, 4 1751 00000BC3 8A83[282D0000] mov al, [hex_chars+ebx] 1752 00000BC9 A2[8A2D0000] mov [msgBusNo], al 1753 1754 ;mov ax, [ac97_NamBar] 1755 00000BCE 66A1[3C810000] mov ax, [NAMBAR] 1756 00000BD4 88C3 mov bl, al 1757 00000BD6 88DA mov dl, bl 1758 00000BD8 80E30F and bl, 0Fh 1759 00000BDB 8A83[282D0000] mov al, [hex_chars+ebx] 1760 00000BE1 A2[B52D0000] mov [msgNamBar+3], al 1761 00000BE6 88D3 mov bl, dl 1762 00000BE8 C0EB04 shr bl, 4 1763 00000BEB 8A83[282D0000] mov al, [hex_chars+ebx] 1764 00000BF1 A2[B42D0000] mov [msgNamBar+2], al 1765 00000BF6 88E3 mov bl, ah 1766 00000BF8 88DA mov dl, bl 1767 00000BFA 80E30F and bl, 0Fh 1768 00000BFD 8A83[282D0000] mov al, [hex_chars+ebx] 1769 00000C03 A2[B32D0000] mov [msgNamBar+1], al 1770 00000C08 88D3 mov bl, dl 1771 00000C0A C0EB04 shr bl, 4 1772 00000C0D 8A83[282D0000] mov al, [hex_chars+ebx] 1773 00000C13 A2[B22D0000] mov [msgNamBar], al 1774 1775 ;mov ax, [ac97_NabmBar] 1776 00000C18 66A1[3E810000] mov ax, [NABMBAR] 1777 00000C1E 88C3 mov bl, al 1778 00000C20 88DA mov dl, bl 1779 00000C22 80E30F and bl, 0Fh 1780 00000C25 8A83[282D0000] mov al, [hex_chars+ebx] 1781 00000C2B A2[C52D0000] mov [msgNabmBar+3], al 1782 00000C30 88D3 mov bl, dl 1783 00000C32 C0EB04 shr bl, 4 1784 00000C35 8A83[282D0000] mov al, [hex_chars+ebx] 1785 00000C3B A2[C42D0000] mov [msgNabmBar+2], al 1786 00000C40 88E3 mov bl, ah 1787 00000C42 88DA mov dl, bl 1788 00000C44 80E30F and bl, 0Fh 1789 00000C47 8A83[282D0000] mov al, [hex_chars+ebx] 1790 00000C4D A2[C32D0000] mov [msgNabmBar+1], al 1791 00000C52 88D3 mov bl, dl 1792 00000C54 C0EB04 shr bl, 4 1793 00000C57 8A83[282D0000] mov al, [hex_chars+ebx] 1794 00000C5D A2[C22D0000] mov [msgNabmBar], al 1795 1796 00000C62 31C0 xor eax, eax 1797 00000C64 A0[CF800000] mov al, [ac97_int_ln_reg] 1798 00000C69 B10A mov cl, 10 1799 00000C6B F6F1 div cl 1800 ; 23/11/2024 1801 ;add [msgIRQ], ax 1802 00000C6D 66053030 add ax, 3030h 1803 00000C71 66A3[CE2D0000] mov [msgIRQ], ax 1804 ;and al, al 1805 00000C77 3C30 cmp al, 30h 1806 00000C79 750D jnz short _w_ac97imsg_ 1807 00000C7B A0[CF2D0000] mov al, byte [msgIRQ+1] 1808 00000C80 B420 mov ah, ' ' 1809 00000C82 66A3[CE2D0000] mov [msgIRQ], ax 1810 _w_ac97imsg_: 1811 ; 19/11/2024 1812 00000C88 E86E1D0000 call clear_window 1813 00000C8D B60D mov dh, 13 1814 00000C8F B200 mov dl, 0 1815 00000C91 E8801A0000 call setCursorPosition 1816 ;;; 1817 ; 21/12/2024 1818 00000C96 BD[392D0000] mov ebp, msgAC97Info ; message 1819 ; 22/12/2024 1820 ;mov cl, 07h ; color 1821 00000C9B E81F000000 call sys_gmsg 1822 ; 1823 ; 30/05/2024 1824 write_VRA_info: 1825 ; 21/12/2024 1826 00000CA0 BD[D32D0000] mov ebp, msgVRAheader ; message 1827 ;mov cl, 07h ; color 1828 00000CA5 E815000000 call sys_gmsg 1829 ; 1830 00000CAA 803D[9A800000]00 cmp byte [VRA], 0 1831 00000CB1 7607 jna short _w_VRAi_no 1832 _w_VRAi_yes: 1833 00000CB3 BD[E22D0000] mov ebp, msgVRAyes 1834 00000CB8 EB05 jmp short _w_VRAi_yn_msg 1835 _w_VRAi_no: 1836 00000CBA BD[E82D0000] mov ebp, msgVRAno 1837 _w_VRAi_yn_msg: 1838 ;mov cl, 07h ; color 1839 ;call sys_msg 1840 ;retn 1841 ;jmp short sys_gmsg 1842 ;;; 1843 ; -------------------------------------------------------- 1844 1845 ; 22/12/2024 1846 ;;; 1847 ; 21/12/2024 1848 ; (write message in VGA/VESA-VBE mode) 1849 sys_gmsg: 1850 00000CBF 8A4500 mov al, [ebp] 1851 00000CC2 20C0 and al, al 1852 00000CC4 7458 jz short sys_gmsg_ok 1853 00000CC6 3C20 cmp al, 20h 1854 00000CC8 731E jnb short sys_gmsg_3 1855 00000CCA 3C0D cmp al, CR ; 13 1856 00000CCC 750C jne short sys_gmsg_2 1857 ; carriege return, move cursor to column 0 1858 00000CCE 66C705[80760000]00- mov word [screenpos], 0 1858 00000CD6 00 1859 sys_gmsg_1: 1860 00000CD7 45 inc ebp 1861 00000CD8 EBE5 jmp short sys_gmsg 1862 sys_gmsg_2: 1863 00000CDA 3C0A cmp al, LF ; 10 1864 00000CDC 7540 jne short sys_gmsg_ok ; 22/12/2024 1865 ; line feed, move cursor to next row 1866 00000CDE 668305[82760000]10 add word [screenpos+2], 16 1867 00000CE6 EBEF jmp short sys_gmsg_1 1868 sys_gmsg_3: 1869 00000CE8 8B35[80760000] mov esi, [screenpos] 1870 ; hw = (cursor) row 1871 ; si = (cursor) column 1872 00000CEE B907000000 mov ecx, 07h ; gray (light) 1873 00000CF3 E8D71B0000 call write_character 1874 00000CF8 83C608 add esi, 8 1875 ;;; 1876 00000CFB 6681FE8002 cmp si, 640 1877 00000D00 7213 jb short sys_gmsg_5 1878 00000D02 C1EE10 shr esi, 16 1879 00000D05 6683C610 add si, 16 1880 00000D09 6681FEE001 cmp si, 480 1881 00000D0E 7202 jb short sys_gmsg_4 1882 00000D10 31F6 xor esi, esi 1883 sys_gmsg_4: 1884 00000D12 C1E610 shl esi, 16 1885 ;;; 1886 sys_gmsg_5: 1887 00000D15 8935[80760000] mov [screenpos], esi 1888 00000D1B 45 inc ebp 1889 00000D1C EBA1 jmp short sys_gmsg 1890 sys_gmsg_ok: 1891 00000D1E C3 retn 1892 ;;; 1893 1894 ; -------------------------------------------------------- 1895 1896 ; 05/02/2025 - vgaplay.s - cgaplay.s - cgaplay1.s - vgaplay2.s 1897 ; 02/02/2025 - playwav9.s - ac97play.s - dplaywav.s - dplayw2.s 1898 ; 29/12/2024 - vgaplay3.s 1899 ; 18/12/2024 1900 ; 07/12/2024 - playwav9.s 1901 ; 01/12/2024 - ac97play.s 1902 ; 29/05/2024 1903 ; 26/11/2023 1904 ; 25/11/2023 - playwav6.s (32 bit registers, TRDOS 386 adaption) 1905 ; 15/11/2023 - PLAYWAV5.COM, ich_wav5.asm 1906 ; 14/11/2023 1907 ; 13/11/2023 - Erdogan Tan - (VRA, sample rate conversion) 1908 ; -------------------------------------------------------- 1909 1910 ;;Note: At the end of every buffer load, 1911 ;; during buffer switch/swap, there will be discontinuity 1912 ;; between the last converted sample and the 1st sample 1913 ;; of the next buffer. 1914 ;; (like as a dot noises vaguely between normal sound samples) 1915 ;; -To avoid this defect, the 1st sample of 1916 ;; the next buffer may be read from the wav file but 1917 ;; the file pointer would need to be set to 1 sample back 1918 ;; again via seek system call. Time comsumption problem! - 1919 ;; 1920 ;; Erdogan Tan - 15/11/2023 1921 ;; 1922 ;; ((If entire wav data would be loaded at once.. conversion 1923 ;; defect/noise would disappear.. but for DOS, to keep 1924 ;; 64KB buffer limit is important also it is important 1925 ;; for running under 1MB barrier without HIMEM.SYS or DPMI. 1926 ;; I have tested this program by using 2-30MB wav files.)) 1927 ;; 1928 ;; Test Computer: ASUS desktop/mainboard, M2N4-SLI, 2010. 1929 ;; AMD Athlon 64 X2 2200 MHZ CPU. 1930 ;; NFORCE4 (CK804) AC97 audio hardware. 1931 ;; Realtek ALC850 codec. 1932 ;; Retro DOS v4.2 (MSDOS 6.22) operating system. 1933 1934 load_8khz_mono_8_bit: 1935 ; 02/02/2025 1936 ; 15/11/2023 1937 ; 14/11/2023 1938 ; 13/11/2023 1939 00000D1F F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 1940 ; last of the file? 1941 00000D26 7402 jz short lff8m_0 ; no 1942 00000D28 F9 stc 1943 00000D29 C3 retn 1944 1945 lff8m_0: 1946 ; 01/12/2024 1947 ; edi = audio buffer address 1948 00000D2A BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 1949 ;mov edx, [loadsize] 1950 1951 ; esi = buffer address 1952 ;; edx = buffer size 1953 1954 ; load file into memory 1955 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000D2F 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00000D35 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00000D37 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000D3D B803000000 <1> mov eax, %1 100 <1> 101 00000D42 CD40 <1> int 40h 1956 00000D44 7305 jnc short lff8m_6 1957 00000D46 E9AF000000 jmp lff8m_5 ; error ! 1958 1959 lff8m_6: 1960 ; 01/12/2024 1961 00000D4B A3[54810000] mov [count], eax 1962 ;;; 1963 ; 07/12/2024 1964 ;mov edi, audio_buffer 1965 ;;; 1966 00000D50 21C0 and eax, eax 1967 00000D52 0F8499000000 jz lff8_eof 1968 1969 00000D58 89C1 mov ecx, eax ; byte count 1970 lff8m_1: 1971 00000D5A AC lodsb 1972 00000D5B A2[98240000] mov [previous_val], al 1973 00000D60 2C80 sub al, 80h 1974 00000D62 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 1975 00000D66 66AB stosw ; original sample (left channel) 1976 00000D68 66AB stosw ; original sample (right channel) 1977 ; 02/02/2025 1978 ;xor eax, eax 1979 00000D6A 8A06 mov al, [esi] 1980 00000D6C 49 dec ecx 1981 00000D6D 7502 jnz short lff8m_2 1982 00000D6F B080 mov al, 80h 1983 lff8m_2: 1984 ;mov [next_val], ax 1985 00000D71 88C7 mov bh, al ; [next_val] 1986 00000D73 8A25[98240000] mov ah, [previous_val] 1987 00000D79 00E0 add al, ah ; [previous_val] 1988 00000D7B D0D8 rcr al, 1 1989 00000D7D 88C2 mov dl, al ; this is interpolated middle (3th) sample 1990 00000D7F 00E0 add al, ah ; [previous_val] 1991 00000D81 D0D8 rcr al, 1 1992 00000D83 88C3 mov bl, al ; this is temporary interpolation value 1993 00000D85 00E0 add al, ah ; [previous_val] 1994 00000D87 D0D8 rcr al, 1 1995 00000D89 2C80 sub al, 80h 1996 00000D8B 66C1E008 shl ax, 8 1997 00000D8F 66AB stosw ; this is 1st interpolated sample (L) 1998 00000D91 66AB stosw ; this is 1st interpolated sample (R) 1999 00000D93 88D8 mov al, bl 2000 00000D95 00D0 add al, dl 2001 00000D97 D0D8 rcr al, 1 2002 00000D99 2C80 sub al, 80h 2003 00000D9B 66C1E008 shl ax, 8 2004 00000D9F 66AB stosw ; this is 2nd interpolated sample (L) 2005 00000DA1 66AB stosw ; this is 2nd interpolated sample (R) 2006 00000DA3 88D0 mov al, dl 2007 00000DA5 2C80 sub al, 80h 2008 00000DA7 66C1E008 shl ax, 8 2009 00000DAB 66AB stosw ; this is middle (3th) interpolated sample (L) 2010 00000DAD 66AB stosw ; this is middle (3th) interpolated sample (R) 2011 ;mov al, [next_val] 2012 00000DAF 88F8 mov al, bh 2013 00000DB1 00D0 add al, dl 2014 00000DB3 D0D8 rcr al, 1 2015 00000DB5 88C3 mov bl, al ; this is temporary interpolation value 2016 00000DB7 00D0 add al, dl 2017 00000DB9 D0D8 rcr al, 1 2018 00000DBB 2C80 sub al, 80h 2019 00000DBD 66C1E008 shl ax, 8 2020 00000DC1 66AB stosw ; this is 4th interpolated sample (L) 2021 00000DC3 66AB stosw ; this is 4th interpolated sample (R) 2022 ;mov al, [next_val] 2023 00000DC5 88F8 mov al, bh 2024 00000DC7 00D8 add al, bl 2025 00000DC9 D0D8 rcr al, 1 2026 00000DCB 2C80 sub al, 80h 2027 00000DCD 66C1E008 shl ax, 8 2028 00000DD1 66AB stosw ; this is 5th interpolated sample (L) 2029 00000DD3 66AB stosw ; this is 5th interpolated sample (R) 2030 ; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK 2031 00000DD5 09C9 or ecx, ecx 2032 00000DD7 7581 jnz short lff8m_1 2033 2034 ; -------------- 2035 2036 lff8s_3: 2037 lff8m_3: 2038 lff8s2_3: 2039 lff8m2_3: 2040 lff16s_3: 2041 lff16m_3: 2042 lff16s2_3: 2043 lff16m2_3: 2044 lff24_3: 2045 lff32_3: 2046 lff44_3: 2047 lff22_3: 2048 lff11_3: 2049 lff12_3: ; 02/02/2025 2050 ; 08/12/2024 (BugFix) 2051 ; 31/05/2024 (BugFix) 2052 00000DD9 8B0D[48810000] mov ecx, [buffersize] ; 16 bit (48 kHZ, stereo) sample size 2053 ;shl ecx, 1 ; byte count ; Bug ! 2054 ; 08/12/2024 2055 00000DDF 81C1[00900000] add ecx, audio_buffer 2056 00000DE5 29F9 sub ecx, edi 2057 00000DE7 7607 jna short lff8m_4 2058 ;inc ecx 2059 00000DE9 C1E902 shr ecx, 2 2060 00000DEC 31C0 xor eax, eax ; fill (remain part of) buffer with zeros 2061 00000DEE F3AB rep stosd 2062 lff8m_4: 2063 ; 31/05/2024 (BugFix) 2064 ; cf=1 ; Bug ! 2065 ; 08/12/2024 2066 ;clc 2067 00000DF0 C3 retn 2068 2069 lff8_eof: 2070 lff16_eof: 2071 lff24_eof: 2072 lff32_eof: 2073 lff44_eof: 2074 lff22_eof: 2075 lff11_eof: 2076 lff12_eof: ; 02/02/2025 2077 ; 15/11/2023 2078 00000DF1 C605[CE800000]01 mov byte [flags], ENDOFFILE 2079 00000DF8 EBDF jmp short lff8m_3 2080 2081 lff8s_5: 2082 lff8m_5: 2083 lff8s2_5: 2084 lff8m2_5: 2085 lff16s_5: 2086 lff16m_5: 2087 lff16s2_5: 2088 lff16m2_5: 2089 lff24_5: 2090 lff32_5: 2091 lff44_5: 2092 lff22_5: 2093 lff11_5: 2094 lff12_5: ; 02/02/2025 2095 00000DFA B021 mov al, '!' ; error 2096 00000DFC E8CAFAFFFF call tL0 2097 2098 ;jmp short lff8m_3 2099 ; 15/11/2023 2100 00000E01 EBEE jmp lff8_eof 2101 2102 ; -------------- 2103 2104 load_8khz_stereo_8_bit: 2105 ; 02/02/2025 2106 ; 15/11/2023 2107 ; 14/11/2023 2108 ; 13/11/2023 2109 00000E03 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 2110 ; last of the file? 2111 00000E0A 7402 jz short lff8s_0 ; no 2112 00000E0C F9 stc 2113 00000E0D C3 retn 2114 2115 lff8s_0: 2116 ; 01/12/2024 2117 ; edi = audio buffer address 2118 00000E0E BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 2119 ;mov edx, [loadsize] 2120 2121 ; esi = buffer address 2122 ;; edx = buffer size 2123 2124 ; load file into memory 2125 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000E13 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00000E19 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00000E1B 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000E21 B803000000 <1> mov eax, %1 100 <1> 101 00000E26 CD40 <1> int 40h 2126 00000E28 72D0 jc short lff8s_5 ; error ! 2127 2128 ; 01/12/2024 2129 00000E2A A3[54810000] mov [count], eax 2130 ;;; 2131 ; 07/12/2024 2132 ;mov edi, audio_buffer 2133 ;;; 2134 00000E2F D1E8 shr eax, 1 2135 00000E31 74BE jz short lff8_eof 2136 2137 00000E33 89C1 mov ecx, eax ; word count 2138 lff8s_1: 2139 00000E35 AC lodsb 2140 00000E36 A2[98240000] mov [previous_val_l], al 2141 00000E3B 2C80 sub al, 80h 2142 00000E3D 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2143 00000E41 66AB stosw ; original sample (L) 2144 00000E43 AC lodsb 2145 00000E44 A2[9A240000] mov [previous_val_r], al 2146 00000E49 2C80 sub al, 80h 2147 00000E4B 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2148 00000E4F 66AB stosw ; original sample (R) 2149 2150 ;xor eax, eax 2151 ; 02/02/2025 2152 00000E51 668B06 mov ax, [esi] 2153 00000E54 49 dec ecx 2154 00000E55 7504 jnz short lff8s_2 2155 ; convert 8 bit sample to 16 bit sample 2156 00000E57 66B88080 mov ax, 8080h 2157 lff8s_2: 2158 00000E5B A2[9C240000] mov [next_val_l], al 2159 00000E60 8825[9E240000] mov [next_val_r], ah 2160 00000E66 8A25[98240000] mov ah, [previous_val_l] 2161 00000E6C 00E0 add al, ah 2162 00000E6E D0D8 rcr al, 1 2163 00000E70 88C2 mov dl, al ; this is interpolated middle (3th) sample (L) 2164 00000E72 00E0 add al, ah 2165 00000E74 D0D8 rcr al, 1 2166 00000E76 88C3 mov bl, al ; this is temporary interpolation value (L) 2167 00000E78 00E0 add al, ah 2168 00000E7A D0D8 rcr al, 1 2169 00000E7C 2C80 sub al, 80h 2170 00000E7E 66C1E008 shl ax, 8 2171 00000E82 66AB stosw ; this is 1st interpolated sample (L) 2172 00000E84 A0[9E240000] mov al, [next_val_r] 2173 00000E89 8A25[9A240000] mov ah, [previous_val_r] 2174 00000E8F 00E0 add al, ah 2175 00000E91 D0D8 rcr al, 1 2176 00000E93 88C6 mov dh, al ; this is interpolated middle (3th) sample (R) 2177 00000E95 00E0 add al, ah 2178 00000E97 D0D8 rcr al, 1 2179 00000E99 88C7 mov bh, al ; this is temporary interpolation value (R) 2180 00000E9B 00E0 add al, ah 2181 00000E9D D0D8 rcr al, 1 2182 00000E9F 2C80 sub al, 80h 2183 00000EA1 66C1E008 shl ax, 8 2184 00000EA5 66AB stosw ; this is 1st interpolated sample (R) 2185 00000EA7 88D8 mov al, bl 2186 00000EA9 00D0 add al, dl 2187 00000EAB D0D8 rcr al, 1 2188 00000EAD 2C80 sub al, 80h 2189 00000EAF 66C1E008 shl ax, 8 2190 00000EB3 66AB stosw ; this is 2nd interpolated sample (L) 2191 00000EB5 88F8 mov al, bh 2192 00000EB7 00F0 add al, dh 2193 00000EB9 D0D8 rcr al, 1 2194 00000EBB 2C80 sub al, 80h 2195 00000EBD 66C1E008 shl ax, 8 2196 00000EC1 66AB stosw ; this is 2nd interpolated sample (R) 2197 00000EC3 88D0 mov al, dl 2198 00000EC5 2C80 sub al, 80h 2199 00000EC7 66C1E008 shl ax, 8 2200 00000ECB 66AB stosw ; this is middle (3th) interpolated sample (L) 2201 00000ECD 88F0 mov al, dh 2202 00000ECF 2C80 sub al, 80h 2203 00000ED1 66C1E008 shl ax, 8 2204 00000ED5 66AB stosw ; this is middle (3th) interpolated sample (R) 2205 00000ED7 A0[9C240000] mov al, [next_val_l] 2206 00000EDC 00D0 add al, dl 2207 00000EDE D0D8 rcr al, 1 2208 00000EE0 88C3 mov bl, al ; this is temporary interpolation value (L) 2209 00000EE2 00D0 add al, dl 2210 00000EE4 D0D8 rcr al, 1 2211 00000EE6 2C80 sub al, 80h 2212 00000EE8 66C1E008 shl ax, 8 2213 00000EEC 66AB stosw ; this is 4th interpolated sample (L) 2214 00000EEE A0[9E240000] mov al, [next_val_r] 2215 00000EF3 00F0 add al, dh 2216 00000EF5 D0D8 rcr al, 1 2217 00000EF7 88C7 mov bh, al ; this is temporary interpolation value (R) 2218 00000EF9 00F0 add al, dh 2219 00000EFB D0D8 rcr al, 1 2220 00000EFD 2C80 sub al, 80h 2221 00000EFF 66C1E008 shl ax, 8 2222 00000F03 66AB stosw ; this is 4th interpolated sample (R) 2223 00000F05 A0[9C240000] mov al, [next_val_l] 2224 00000F0A 00D8 add al, bl 2225 00000F0C D0D8 rcr al, 1 2226 00000F0E 2C80 sub al, 80h 2227 00000F10 66C1E008 shl ax, 8 2228 00000F14 66AB stosw ; this is 5th interpolated sample (L) 2229 00000F16 A0[9E240000] mov al, [next_val_r] 2230 00000F1B 00F8 add al, bh 2231 00000F1D D0D8 rcr al, 1 2232 00000F1F 2C80 sub al, 80h 2233 00000F21 66C1E008 shl ax, 8 2234 00000F25 66AB stosw ; this is 5th interpolated sample (R) 2235 ; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 2236 00000F27 E305 jecxz lff8s_6 2237 00000F29 E907FFFFFF jmp lff8s_1 2238 lff8s_6: 2239 00000F2E E9A6FEFFFF jmp lff8s_3 2240 2241 load_8khz_mono_16_bit: 2242 ; 02/02/2025 2243 ; 13/11/2023 2244 00000F33 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 2245 ; last of the file? 2246 00000F3A 7402 jz short lff8m2_0 ; no 2247 00000F3C F9 stc 2248 00000F3D C3 retn 2249 2250 lff8m2_0: 2251 ; 01/12/2024 2252 ; edi = audio buffer address 2253 00000F3E BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 2254 ;mov edx, [loadsize] 2255 2256 ; esi = buffer address 2257 ;; edx = buffer size 2258 2259 ; load file into memory 2260 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00000F43 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00000F49 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00000F4B 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00000F51 B803000000 <1> mov eax, %1 100 <1> 101 00000F56 CD40 <1> int 40h 2261 00000F58 0F82A0000000 jc lff8m2_7 ; error ! 2262 2263 ; 01/12/2024 2264 00000F5E A3[54810000] mov [count], eax 2265 ;;; 2266 ; 07/12/2024 2267 ;mov edi, audio_buffer 2268 ;;; 2269 00000F63 D1E8 shr eax, 1 2270 00000F65 7505 jnz short lff8m2_8 2271 00000F67 E985FEFFFF jmp lff8_eof 2272 2273 lff8m2_8: 2274 00000F6C 89C1 mov ecx, eax ; word count 2275 lff8m2_1: 2276 00000F6E 66AD lodsw 2277 00000F70 66AB stosw ; original sample (left channel) 2278 00000F72 66AB stosw ; original sample (right channel) 2279 00000F74 80C480 add ah, 80h ; convert sound level to 0-65535 format 2280 00000F77 66A3[98240000] mov [previous_val], ax 2281 ; 02/02/2025 2282 00000F7D 668B06 mov ax, [esi] 2283 00000F80 49 dec ecx 2284 00000F81 7502 jnz short lff8m2_2 2285 00000F83 31C0 xor eax, eax 2286 lff8m2_2: 2287 00000F85 80C480 add ah, 80h ; convert sound level to 0-65535 format 2288 00000F88 89C5 mov ebp, eax ; [next_val] 2289 00000F8A 660305[98240000] add ax, [previous_val] 2290 00000F91 66D1D8 rcr ax, 1 2291 00000F94 89C2 mov edx, eax ; this is interpolated middle (3th) sample 2292 00000F96 660305[98240000] add ax, [previous_val] 2293 00000F9D 66D1D8 rcr ax, 1 ; this is temporary interpolation value 2294 00000FA0 89C3 mov ebx, eax 2295 00000FA2 660305[98240000] add ax, [previous_val] 2296 00000FA9 66D1D8 rcr ax, 1 2297 00000FAC 80EC80 sub ah, 80h ; -32768 to +32767 format again 2298 00000FAF 66AB stosw ; this is 1st interpolated sample (L) 2299 00000FB1 66AB stosw ; this is 1st interpolated sample (R) 2300 00000FB3 89D8 mov eax, ebx 2301 00000FB5 6601D0 add ax, dx 2302 00000FB8 66D1D8 rcr ax, 1 2303 00000FBB 80EC80 sub ah, 80h 2304 00000FBE 66AB stosw ; this is 2nd interpolated sample (L) 2305 00000FC0 66AB stosw ; this is 2nd interpolated sample (R) 2306 00000FC2 89D0 mov eax, edx 2307 00000FC4 80EC80 sub ah, 80h ; -32768 to +32767 format again 2308 00000FC7 66AB stosw ; this is middle (3th) interpolated sample (L) 2309 00000FC9 66AB stosw ; this is middle (3th) interpolated sample (R) 2310 00000FCB 89E8 mov eax, ebp 2311 00000FCD 6601D0 add ax, dx 2312 00000FD0 66D1D8 rcr ax, 1 2313 00000FD3 89C3 mov ebx, eax ; this is temporary interpolation value 2314 00000FD5 6601D0 add ax, dx 2315 00000FD8 66D1D8 rcr ax, 1 2316 00000FDB 80EC80 sub ah, 80h 2317 00000FDE 66AB stosw ; this is 4th interpolated sample (L) 2318 00000FE0 66AB stosw ; this is 4th interpolated sample (R) 2319 00000FE2 89E8 mov eax, ebp 2320 00000FE4 6601D8 add ax, bx 2321 00000FE7 66D1D8 rcr ax, 1 2322 00000FEA 80EC80 sub ah, 80h ; -32768 to +32767 format again 2323 00000FED 66AB stosw ; this is 5th interpolated sample (L) 2324 00000FEF 66AB stosw ; this is 5th interpolated sample (R) 2325 ; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK 2326 00000FF1 09C9 or ecx, ecx 2327 00000FF3 0F8575FFFFFF jnz lff8m2_1 2328 00000FF9 E9DBFDFFFF jmp lff8m2_3 2329 2330 lff8m2_7: 2331 lff8s2_7: 2332 00000FFE E9F7FDFFFF jmp lff8m2_5 ; error 2333 2334 load_8khz_stereo_16_bit: 2335 ; 02/02/2025 2336 ; 16/11/2023 2337 ; 15/11/2023 2338 ; 13/11/2023 2339 00001003 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 2340 ; last of the file? 2341 0000100A 7402 jz short lff8s2_0 ; no 2342 0000100C F9 stc 2343 0000100D C3 retn 2344 2345 lff8s2_0: 2346 ; 01/12/2024 2347 ; edi = audio buffer address 2348 0000100E BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 2349 ;mov edx, [loadsize] 2350 2351 ; esi = buffer address 2352 ;; edx = buffer size 2353 2354 ; load file into memory 2355 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001013 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001019 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 0000101B 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001021 B803000000 <1> mov eax, %1 100 <1> 101 00001026 CD40 <1> int 40h 2356 00001028 72D4 jc short lff8s2_7 ; error ! 2357 2358 ; 01/12/2024 2359 0000102A A3[54810000] mov [count], eax 2360 ;;; 2361 ; 07/12/2024 2362 ;mov edi, audio_buffer 2363 ;;; 2364 0000102F C1E802 shr eax, 2 2365 00001032 7505 jnz short lff8s2_8 2366 00001034 E9B8FDFFFF jmp lff8_eof 2367 2368 lff8s2_8: 2369 00001039 89C1 mov ecx, eax ; dword count 2370 lff8s2_1: 2371 0000103B 66AD lodsw 2372 0000103D 66AB stosw ; original sample (L) 2373 ; 15/11/2023 2374 0000103F 80C480 add ah, 80h ; convert sound level to 0-65535 format 2375 00001042 66A3[98240000] mov [previous_val_l], ax 2376 00001048 66AD lodsw 2377 0000104A 66AB stosw ; original sample (R) 2378 0000104C 80C480 add ah, 80h ; convert sound level to 0-65535 format 2379 0000104F 66A3[9A240000] mov [previous_val_r], ax 2380 ; 02/02/2025 2381 00001055 668B06 mov ax, [esi] 2382 00001058 668B5602 mov dx, [esi+2] 2383 ; 16/11/2023 2384 0000105C 49 dec ecx 2385 0000105D 7504 jnz short lff8s2_2 2386 0000105F 31D2 xor edx, edx 2387 00001061 31C0 xor eax, eax 2388 lff8s2_2: 2389 00001063 80C480 add ah, 80h ; convert sound level to 0-65535 format 2390 00001066 66A3[9C240000] mov [next_val_l], ax 2391 0000106C 80C680 add dh, 80h ; convert sound level to 0-65535 format 2392 0000106F 668915[9E240000] mov [next_val_r], dx 2393 00001076 660305[98240000] add ax, [previous_val_l] 2394 0000107D 66D1D8 rcr ax, 1 2395 00001080 89C2 mov edx, eax ; this is interpolated middle (3th) sample (L) 2396 00001082 660305[98240000] add ax, [previous_val_l] 2397 00001089 66D1D8 rcr ax, 1 2398 0000108C 89C3 mov ebx, eax ; this is temporary interpolation value (L) 2399 0000108E 660305[98240000] add ax, [previous_val_l] 2400 00001095 66D1D8 rcr ax, 1 2401 00001098 80EC80 sub ah, 80h ; -32768 to +32767 format again 2402 0000109B 66AB stosw ; this is 1st interpolated sample (L) 2403 0000109D 66A1[9E240000] mov ax, [next_val_r] 2404 000010A3 660305[9A240000] add ax, [previous_val_r] 2405 000010AA 66D1D8 rcr ax, 1 2406 000010AD 89C5 mov ebp, eax ; this is interpolated middle (3th) sample (R) 2407 000010AF 660305[9A240000] add ax, [previous_val_r] 2408 000010B6 66D1D8 rcr ax, 1 2409 000010B9 50 push eax ; * ; this is temporary interpolation value (R) 2410 000010BA 660305[9A240000] add ax, [previous_val_r] 2411 000010C1 66D1D8 rcr ax, 1 2412 000010C4 80EC80 sub ah, 80h 2413 000010C7 66AB stosw ; this is 1st interpolated sample (R) 2414 000010C9 89D8 mov eax, ebx 2415 000010CB 6601D0 add ax, dx 2416 000010CE 66D1D8 rcr ax, 1 2417 000010D1 80EC80 sub ah, 80h ; -32768 to +32767 format again 2418 000010D4 66AB stosw ; this is 2nd interpolated sample (L) 2419 000010D6 58 pop eax ; * 2420 000010D7 6601E8 add ax, bp 2421 000010DA 66D1D8 rcr ax, 1 2422 000010DD 80EC80 sub ah, 80h 2423 000010E0 66AB stosw ; this is 2nd interpolated sample (R) 2424 000010E2 89D0 mov eax, edx 2425 000010E4 80EC80 sub ah, 80h 2426 000010E7 66AB stosw ; this is middle (3th) interpolated sample (L) 2427 000010E9 89E8 mov eax, ebp 2428 000010EB 80EC80 sub ah, 80h ; -32768 to +32767 format again 2429 000010EE 66AB stosw ; this is middle (3th) interpolated sample (R) 2430 000010F0 66A1[9C240000] mov ax, [next_val_l] 2431 000010F6 6601D0 add ax, dx 2432 000010F9 66D1D8 rcr ax, 1 2433 000010FC 89C3 mov ebx, eax ; this is temporary interpolation value (L) 2434 000010FE 6601D0 add ax, dx 2435 00001101 66D1D8 rcr ax, 1 2436 00001104 80EC80 sub ah, 80h 2437 00001107 66AB stosw ; this is 4th interpolated sample (L) 2438 00001109 66A1[9E240000] mov ax, [next_val_r] 2439 0000110F 6601E8 add ax, bp 2440 00001112 66D1D8 rcr ax, 1 2441 00001115 50 push eax ; ** ; this is temporary interpolation value (R) 2442 00001116 6601E8 add ax, bp 2443 00001119 66D1D8 rcr ax, 1 2444 0000111C 80EC80 sub ah, 80h 2445 0000111F 66AB stosw ; this is 4th interpolated sample (R) 2446 00001121 66A1[9C240000] mov ax, [next_val_l] 2447 00001127 6601D8 add ax, bx 2448 0000112A 66D1D8 rcr ax, 1 2449 0000112D 80EC80 sub ah, 80h ; -32768 to +32767 format again 2450 00001130 66AB stosw ; this is 5th interpolated sample (L) 2451 00001132 58 pop eax ; ** 2452 00001133 660305[9E240000] add ax, [next_val_r] 2453 0000113A 66D1D8 rcr ax, 1 2454 0000113D 80EC80 sub ah, 80h 2455 00001140 66AB stosw ; this is 5th interpolated sample (R) 2456 ; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 2457 00001142 E305 jecxz lff8_s2_9 2458 00001144 E9F2FEFFFF jmp lff8s2_1 2459 lff8_s2_9: 2460 00001149 E98BFCFFFF jmp lff8s2_3 2461 2462 ; ..................... 2463 2464 load_16khz_mono_8_bit: 2465 ; 02/02/2025 2466 ; 14/11/2023 2467 ; 13/11/2023 2468 0000114E F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 2469 ; last of the file? 2470 00001155 7402 jz short lff16m_0 ; no 2471 00001157 F9 stc 2472 00001158 C3 retn 2473 2474 lff16m_0: 2475 ; 01/12/2024 2476 ; edi = audio buffer address 2477 00001159 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 2478 ;mov edx, [loadsize] 2479 2480 ; esi = buffer address 2481 ;; edx = buffer size 2482 2483 ; load file into memory 2484 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 0000115E 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001164 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001166 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 0000116C B803000000 <1> mov eax, %1 100 <1> 101 00001171 CD40 <1> int 40h 2485 00001173 7253 jc short lff16m_7 ; error ! 2486 2487 ; 01/12/2024 2488 00001175 A3[54810000] mov [count], eax 2489 ;;; 2490 ; 07/12/2024 2491 ;mov edi, audio_buffer 2492 ;;; 2493 0000117A 21C0 and eax, eax 2494 0000117C 7505 jnz short lff16m_8 2495 0000117E E96EFCFFFF jmp lff16_eof 2496 2497 lff16m_8: 2498 00001183 89C1 mov ecx, eax ; byte count 2499 lff16m_1: 2500 00001185 AC lodsb 2501 ;mov [previous_val], al 2502 00001186 88C3 mov bl, al 2503 00001188 2C80 sub al, 80h 2504 0000118A 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2505 0000118E 66AB stosw ; original sample (left channel) 2506 00001190 66AB stosw ; original sample (right channel) 2507 ;xor eax, eax 2508 ; 02/02/2025 2509 00001192 8A06 mov al, [esi] 2510 00001194 49 dec ecx 2511 00001195 7502 jnz short lff16m_2 2512 ; 14/11/2023 2513 00001197 B080 mov al, 80h 2514 lff16m_2: 2515 ;mov [next_val], al 2516 00001199 88C7 mov bh, al 2517 ;add al, [previous_val] 2518 0000119B 00D8 add al, bl 2519 0000119D D0D8 rcr al, 1 2520 0000119F 88C2 mov dl, al ; this is interpolated middle (temp) sample 2521 ;add al, [previous_val] 2522 000011A1 00D8 add al, bl 2523 000011A3 D0D8 rcr al, 1 2524 000011A5 2C80 sub al, 80h 2525 000011A7 66C1E008 shl ax, 8 2526 000011AB 66AB stosw ; this is 1st interpolated sample (L) 2527 000011AD 66AB stosw ; this is 1st interpolated sample (R) 2528 ;mov al, [next_val] 2529 000011AF 88F8 mov al, bh 2530 000011B1 00D0 add al, dl 2531 000011B3 D0D8 rcr al, 1 2532 000011B5 2C80 sub al, 80h 2533 000011B7 66C1E008 shl ax, 8 2534 000011BB 66AB stosw ; this is 2nd interpolated sample (L) 2535 000011BD 66AB stosw ; this is 2nd interpolated sample (R) 2536 2537 ; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK 2538 000011BF 09C9 or ecx, ecx 2539 000011C1 75C2 jnz short lff16m_1 2540 000011C3 E911FCFFFF jmp lff16m_3 2541 2542 lff16m_7: 2543 lff16s_7: 2544 000011C8 E92DFCFFFF jmp lff16m_5 ; error 2545 2546 load_16khz_stereo_8_bit: 2547 ; 02/02/2025 2548 ; 14/11/2023 2549 ; 13/11/2023 2550 000011CD F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 2551 ; last of the file? 2552 000011D4 7402 jz short lff16s_0 ; no 2553 000011D6 F9 stc 2554 000011D7 C3 retn 2555 2556 lff16s_0: 2557 ; 01/12/2024 2558 ; edi = audio buffer address 2559 000011D8 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 2560 ;mov edx, [loadsize] 2561 2562 ; esi = buffer address 2563 ;; edx = buffer size 2564 2565 ; load file into memory 2566 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000011DD 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 000011E3 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 000011E5 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000011EB B803000000 <1> mov eax, %1 100 <1> 101 000011F0 CD40 <1> int 40h 2567 000011F2 72D4 jc short lff16s_7 ; error ! 2568 2569 ; 01/12/2024 2570 000011F4 A3[54810000] mov [count], eax 2571 ;;; 2572 ; 07/12/2024 2573 ;mov edi, audio_buffer 2574 ;;; 2575 000011F9 D1E8 shr eax, 1 2576 000011FB 7505 jnz short lff16s_8 2577 000011FD E9EFFBFFFF jmp lff16_eof 2578 2579 lff16s_8: 2580 00001202 89C1 mov ecx, eax ; word count 2581 lff16s_1: 2582 00001204 AC lodsb 2583 00001205 A2[98240000] mov [previous_val_l], al 2584 0000120A 2C80 sub al, 80h 2585 0000120C 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2586 00001210 66AB stosw ; original sample (L) 2587 00001212 AC lodsb 2588 00001213 A2[9A240000] mov [previous_val_r], al 2589 00001218 2C80 sub al, 80h 2590 0000121A 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2591 0000121E 66AB stosw ; original sample (R) 2592 2593 ;xor eax, eax 2594 ; 02/02/2025 2595 00001220 668B06 mov ax, [esi] 2596 00001223 49 dec ecx 2597 00001224 7504 jnz short lff16s_2 2598 ; convert 8 bit sample to 16 bit sample 2599 ; 14/11/2023 2600 00001226 66B88080 mov ax, 8080h 2601 lff16s_2: 2602 ;mov [next_val_l], al 2603 ;mov [next_val_r], ah 2604 0000122A 89C3 mov ebx, eax 2605 0000122C 0205[98240000] add al, [previous_val_l] 2606 00001232 D0D8 rcr al, 1 2607 00001234 88C2 mov dl, al ; this is temporary interpolation value (L) 2608 00001236 0205[98240000] add al, [previous_val_l] 2609 0000123C D0D8 rcr al, 1 2610 0000123E 2C80 sub al, 80h 2611 00001240 66C1E008 shl ax, 8 2612 00001244 66AB stosw ; this is 1st interpolated sample (L) 2613 00001246 88F8 mov al, bh ; [next_val_r] 2614 00001248 0205[9A240000] add al, [previous_val_r] 2615 0000124E D0D8 rcr al, 1 2616 00001250 88C6 mov dh, al ; this is temporary interpolation value (R) 2617 00001252 0205[9A240000] add al, [previous_val_r] 2618 00001258 D0D8 rcr al, 1 2619 0000125A 2C80 sub al, 80h 2620 0000125C 66C1E008 shl ax, 8 2621 00001260 66AB stosw ; this is 1st interpolated sample (R) 2622 00001262 88D0 mov al, dl 2623 00001264 00D8 add al, bl ; [next_val_l] 2624 00001266 D0D8 rcr al, 1 2625 00001268 2C80 sub al, 80h 2626 0000126A 66C1E008 shl ax, 8 2627 0000126E 66AB stosw ; this is 2nd interpolated sample (L) 2628 00001270 88F0 mov al, dh 2629 00001272 00F8 add al, bh ; [next_val_r] 2630 00001274 D0D8 rcr al, 1 2631 00001276 2C80 sub al, 80h 2632 00001278 66C1E008 shl ax, 8 2633 0000127C 66AB stosw ; this is 2nd interpolated sample (R) 2634 2635 ; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 2636 0000127E 09C9 or ecx, ecx 2637 00001280 7582 jnz short lff16s_1 2638 00001282 E952FBFFFF jmp lff16s_3 2639 2640 load_16khz_mono_16_bit: 2641 ; 02/02/2025 2642 ; 15/11/2023 2643 ; 13/11/2023 2644 00001287 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 2645 ; last of the file? 2646 0000128E 7402 jz short lff16m2_0 ; no 2647 00001290 F9 stc 2648 00001291 C3 retn 2649 2650 lff16m2_0: 2651 ; 01/12/2024 2652 ; edi = audio buffer address 2653 00001292 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 2654 ;mov edx, [loadsize] 2655 2656 ; esi = buffer address 2657 ;; edx = buffer size 2658 2659 ; load file into memory 2660 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001297 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000129D 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 0000129F 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000012A5 B803000000 <1> mov eax, %1 100 <1> 101 000012AA CD40 <1> int 40h 2661 000012AC 7255 jc short lff16m2_7 ; error ! 2662 2663 ; 01/12/2024 2664 000012AE A3[54810000] mov [count], eax 2665 ;;; 2666 ; 07/12/2024 2667 ;mov edi, audio_buffer 2668 ;;; 2669 000012B3 D1E8 shr eax, 1 2670 000012B5 7505 jnz short lff16m2_8 2671 000012B7 E935FBFFFF jmp lff16_eof 2672 2673 lff16m2_8: 2674 000012BC 89C1 mov ecx, eax ; word count 2675 lff16m2_1: 2676 000012BE 66AD lodsw 2677 000012C0 66AB stosw ; original sample (left channel) 2678 000012C2 66AB stosw ; original sample (right channel) 2679 000012C4 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2680 ;mov [previous_val], ax 2681 000012C7 89C3 mov ebx, eax 2682 ; 02/02/2025 2683 000012C9 668B06 mov ax, [esi] 2684 000012CC 49 dec ecx 2685 000012CD 7502 jnz short lff16m2_2 2686 000012CF 31C0 xor eax, eax 2687 lff16m2_2: 2688 000012D1 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2689 000012D4 89C5 mov ebp, eax ; [next_val] 2690 ;add ax, [previous_val] 2691 000012D6 6601D8 add ax, bx 2692 000012D9 66D1D8 rcr ax, 1 2693 000012DC 89C2 mov edx, eax ; this is temporary interpolation value 2694 ;add ax, [previous_val] 2695 000012DE 6601D8 add ax, bx 2696 000012E1 66D1D8 rcr ax, 1 2697 000012E4 80EC80 sub ah, 80h ; -32768 to +32767 format again 2698 000012E7 66AB stosw ; this is 1st interpolated sample (L) 2699 000012E9 66AB stosw ; this is 1st interpolated sample (R) 2700 000012EB 89E8 mov eax, ebp 2701 000012ED 6601D0 add ax, dx 2702 000012F0 66D1D8 rcr ax, 1 2703 000012F3 80EC80 sub ah, 80h ; -32768 to +32767 format again 2704 000012F6 66AB stosw ; this is 2nd interpolated sample (L) 2705 000012F8 66AB stosw ; this is 2nd interpolated sample (R) 2706 ; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK 2707 000012FA 09C9 or ecx, ecx 2708 000012FC 75C0 jnz short lff16m2_1 2709 000012FE E9D6FAFFFF jmp lff16m2_3 2710 2711 lff16m2_7: 2712 lff16s2_7: 2713 00001303 E9F2FAFFFF jmp lff16m2_5 ; error 2714 2715 load_16khz_stereo_16_bit: 2716 ; 02/02/2025 2717 ; 16/11/2023 2718 ; 15/11/2023 2719 ; 13/11/2023 2720 00001308 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 2721 ; last of the file? 2722 0000130F 7402 jz short lff16s2_0 ; no 2723 00001311 F9 stc 2724 00001312 C3 retn 2725 2726 lff16s2_0: 2727 ; 01/12/2024 2728 ; edi = audio buffer address 2729 00001313 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 2730 ;mov edx, [loadsize] 2731 2732 ; esi = buffer address 2733 ;; edx = buffer size 2734 2735 ; load file into memory 2736 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001318 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000131E 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001320 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001326 B803000000 <1> mov eax, %1 100 <1> 101 0000132B CD40 <1> int 40h 2737 0000132D 72D4 jc short lff16s2_7 ; error ! 2738 2739 ; 01/12/2024 2740 0000132F A3[54810000] mov [count], eax 2741 ;;; 2742 ; 07/12/2024 2743 ;mov edi, audio_buffer 2744 ;;; 2745 00001334 C1E802 shr eax, 2 2746 00001337 7505 jnz short lff16s2_8 2747 00001339 E9B3FAFFFF jmp lff16_eof 2748 2749 lff16s2_8: 2750 0000133E 89C1 mov ecx, eax ; dword count 2751 lff16s2_1: 2752 00001340 66AD lodsw 2753 00001342 66AB stosw ; original sample (L) 2754 00001344 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2755 00001347 66A3[98240000] mov [previous_val_l], ax 2756 0000134D 66AD lodsw 2757 0000134F 66AB stosw ; original sample (R) 2758 00001351 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2759 00001354 66A3[9A240000] mov [previous_val_r], ax 2760 ; 02/02/2025 2761 0000135A 668B06 mov ax, [esi] 2762 0000135D 668B5602 mov dx, [esi+2] 2763 ; 16/11/2023 2764 00001361 49 dec ecx 2765 00001362 7504 jnz short lff16s2_2 2766 00001364 31D2 xor edx, edx 2767 00001366 31C0 xor eax, eax 2768 lff16s2_2: 2769 00001368 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2770 ;mov [next_val_l], ax 2771 0000136B 89C5 mov ebp, eax 2772 0000136D 80C680 add dh, 80h ; convert sound level 0 to 65535 format 2773 00001370 668915[9E240000] mov [next_val_r], dx 2774 00001377 660305[98240000] add ax, [previous_val_l] 2775 0000137E 66D1D8 rcr ax, 1 2776 00001381 89C2 mov edx, eax ; this is temporary interpolation value (L) 2777 00001383 660305[98240000] add ax, [previous_val_l] 2778 0000138A 66D1D8 rcr ax, 1 2779 0000138D 80EC80 sub ah, 80h ; -32768 to +32767 format again 2780 00001390 66AB stosw ; this is 1st interpolated sample (L) 2781 00001392 66A1[9E240000] mov ax, [next_val_r] 2782 00001398 660305[9A240000] add ax, [previous_val_r] 2783 0000139F 66D1D8 rcr ax, 1 2784 000013A2 89C3 mov ebx, eax ; this is temporary interpolation value (R) 2785 000013A4 660305[9A240000] add ax, [previous_val_r] 2786 000013AB 66D1D8 rcr ax, 1 2787 000013AE 80EC80 sub ah, 80h ; -32768 to +32767 format again 2788 000013B1 66AB stosw ; this is 1st interpolated sample (R) 2789 ;mov ax, [next_val_l] 2790 000013B3 89E8 mov eax, ebp 2791 000013B5 6601D0 add ax, dx 2792 000013B8 66D1D8 rcr ax, 1 2793 000013BB 80EC80 sub ah, 80h ; -32768 to +32767 format again 2794 000013BE 66AB stosw ; this is 2nd interpolated sample (L) 2795 000013C0 66A1[9E240000] mov ax, [next_val_r] 2796 000013C6 6601D8 add ax, bx 2797 000013C9 66D1D8 rcr ax, 1 2798 000013CC 80EC80 sub ah, 80h ; -32768 to +32767 format again 2799 000013CF 66AB stosw ; this is 2nd interpolated sample (R) 2800 2801 ; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 2802 000013D1 09C9 or ecx, ecx 2803 000013D3 0F8567FFFFFF jnz lff16s2_1 2804 000013D9 E9FBF9FFFF jmp lff16s2_3 2805 2806 ; ..................... 2807 2808 load_24khz_mono_8_bit: 2809 ; 02/02/2025 2810 ; 15/11/2023 2811 000013DE F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 2812 ; last of the file? 2813 000013E5 7402 jz short lff24m_0 ; no 2814 000013E7 F9 stc 2815 000013E8 C3 retn 2816 2817 lff24m_0: 2818 ; 01/12/2024 2819 ; edi = audio buffer address 2820 000013E9 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 2821 ;mov edx, [loadsize] 2822 2823 ; esi = buffer address 2824 ;; edx = buffer size 2825 2826 ; load file into memory 2827 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000013EE 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 000013F4 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 000013F6 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000013FC B803000000 <1> mov eax, %1 100 <1> 101 00001401 CD40 <1> int 40h 2828 00001403 723B jc short lff24m_7 ; error ! 2829 2830 ; 01/12/2024 2831 00001405 A3[54810000] mov [count], eax 2832 ;;; 2833 ; 07/12/2024 2834 ;mov edi, audio_buffer 2835 ;;; 2836 0000140A 21C0 and eax, eax 2837 0000140C 7505 jnz short lff24m_8 2838 0000140E E9DEF9FFFF jmp lff24_eof 2839 2840 lff24m_8: 2841 00001413 89C1 mov ecx, eax ; byte count 2842 lff24m_1: 2843 00001415 AC lodsb 2844 ;mov [previous_val], al 2845 00001416 88C3 mov bl, al 2846 00001418 2C80 sub al, 80h 2847 0000141A 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2848 0000141E 66AB stosw ; original sample (left channel) 2849 00001420 66AB stosw ; original sample (right channel) 2850 ;xor eax, eax 2851 ; 02/02/2025 2852 00001422 8A06 mov al, [esi] 2853 00001424 49 dec ecx 2854 00001425 7502 jnz short lff24m_2 2855 00001427 B080 mov al, 80h 2856 lff24m_2: 2857 ;;mov [next_val], al 2858 ;mov bh, al 2859 ;add al, [previous_val] 2860 00001429 00D8 add al, bl 2861 0000142B D0D8 rcr al, 1 2862 0000142D 2C80 sub al, 80h 2863 0000142F 66C1E008 shl ax, 8 2864 00001433 66AB stosw ; this is interpolated sample (L) 2865 00001435 66AB stosw ; this is interpolated sample (R) 2866 2867 ; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK 2868 00001437 09C9 or ecx, ecx 2869 00001439 75DA jnz short lff24m_1 2870 0000143B E999F9FFFF jmp lff24_3 2871 2872 lff24m_7: 2873 lff24s_7: 2874 00001440 E9B5F9FFFF jmp lff24_5 ; error 2875 2876 load_24khz_stereo_8_bit: 2877 ; 02/02/2025 2878 ; 15/11/2023 2879 00001445 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 2880 ; last of the file? 2881 0000144C 7402 jz short lff24s_0 ; no 2882 0000144E F9 stc 2883 0000144F C3 retn 2884 2885 lff24s_0: 2886 ; 01/12/2024 2887 ; edi = audio buffer address 2888 00001450 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 2889 ;mov edx, [loadsize] 2890 2891 ; esi = buffer address 2892 ;; edx = buffer size 2893 2894 ; load file into memory 2895 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001455 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000145B 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 0000145D 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001463 B803000000 <1> mov eax, %1 100 <1> 101 00001468 CD40 <1> int 40h 2896 0000146A 72D4 jc short lff24s_7 ; error ! 2897 2898 ; 01/12/2024 2899 0000146C A3[54810000] mov [count], eax 2900 ;;; 2901 ; 07/12/2024 2902 ;mov edi, audio_buffer 2903 ;;; 2904 00001471 D1E8 shr eax, 1 2905 00001473 7505 jnz short lff24s_8 2906 00001475 E977F9FFFF jmp lff24_eof 2907 2908 lff24s_8: 2909 0000147A 89C1 mov ecx, eax ; word count 2910 lff24s_1: 2911 0000147C AC lodsb 2912 0000147D A2[98240000] mov [previous_val_l], al 2913 00001482 2C80 sub al, 80h 2914 00001484 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2915 00001488 66AB stosw ; original sample (L) 2916 0000148A AC lodsb 2917 0000148B A2[9A240000] mov [previous_val_r], al 2918 00001490 2C80 sub al, 80h 2919 00001492 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2920 00001496 66AB stosw ; original sample (R) 2921 2922 ;xor eax, eax 2923 ; 02/02/2025 2924 00001498 668B06 mov ax, [esi] 2925 0000149B 49 dec ecx 2926 0000149C 7504 jnz short lff24s_2 2927 ; convert 8 bit sample to 16 bit sample 2928 0000149E 66B88080 mov ax, 8080h 2929 lff24s_2: 2930 ;;mov [next_val_l], al 2931 ;;mov [next_val_r], ah 2932 ;mov bx, ax 2933 000014A2 88E7 mov bh, ah 2934 000014A4 0205[98240000] add al, [previous_val_l] 2935 000014AA D0D8 rcr al, 1 2936 ;mov dl, al 2937 000014AC 2C80 sub al, 80h 2938 000014AE 66C1E008 shl ax, 8 2939 000014B2 66AB stosw ; this is interpolated sample (L) 2940 000014B4 88F8 mov al, bh ; [next_val_r] 2941 000014B6 0205[9A240000] add al, [previous_val_r] 2942 000014BC D0D8 rcr al, 1 2943 ;mov dh, al 2944 000014BE 2C80 sub al, 80h 2945 000014C0 66C1E008 shl ax, 8 2946 000014C4 66AB stosw ; this is interpolated sample (R) 2947 2948 ; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 2949 000014C6 09C9 or ecx, ecx 2950 000014C8 75B2 jnz short lff24s_1 2951 000014CA E90AF9FFFF jmp lff24_3 2952 2953 load_24khz_mono_16_bit: 2954 ; 02/02/2025 2955 ; 15/11/2023 2956 000014CF F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 2957 ; last of the file? 2958 000014D6 7402 jz short lff24m2_0 ; no 2959 000014D8 F9 stc 2960 000014D9 C3 retn 2961 2962 lff24m2_0: 2963 ; 01/12/2024 2964 ; edi = audio buffer address 2965 000014DA BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 2966 ;mov edx, [loadsize] 2967 2968 ; esi = buffer address 2969 ;; edx = buffer size 2970 2971 ; load file into memory 2972 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000014DF 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 000014E5 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 000014E7 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000014ED B803000000 <1> mov eax, %1 100 <1> 101 000014F2 CD40 <1> int 40h 2973 000014F4 723A jc short lff24m2_7 ; error ! 2974 2975 ; 01/12/2024 2976 000014F6 A3[54810000] mov [count], eax 2977 ;;; 2978 ; 07/12/2024 2979 ;mov edi, audio_buffer 2980 ;;; 2981 000014FB D1E8 shr eax, 1 2982 000014FD 7505 jnz short lff24m2_8 2983 000014FF E9EDF8FFFF jmp lff24_eof 2984 2985 lff24m2_8: 2986 00001504 89C1 mov ecx, eax ; word count 2987 lff24m2_1: 2988 00001506 66AD lodsw 2989 00001508 66AB stosw ; original sample (left channel) 2990 0000150A 66AB stosw ; original sample (right channel) 2991 0000150C 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2992 ;mov [previous_val], ax 2993 ;mov ebx, eax 2994 ; 02/02/2025 2995 0000150F 668B1E mov bx, [esi] 2996 00001512 49 dec ecx 2997 00001513 7502 jnz short lff24m2_2 2998 ;xor eax, eax 2999 00001515 31DB xor ebx, ebx 3000 lff24m2_2: 3001 ; 02/02/2025 3002 00001517 80C780 add bh, 80h ; convert sound level 0 to 65535 format 3003 ;add ah, 80h 3004 ;mov ebp, eax ; [next_val] 3005 ;add ax, [previous_val] 3006 ; ax = [previous_val] 3007 ; bx = [next_val] 3008 0000151A 6601D8 add ax, bx 3009 0000151D 66D1D8 rcr ax, 1 3010 00001520 80EC80 sub ah, 80h ; -32768 to +32767 format again 3011 00001523 66AB stosw ; this is interpolated sample (L) 3012 00001525 66AB stosw ; this is interpolated sample (R) 3013 ; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK 3014 00001527 09C9 or ecx, ecx 3015 00001529 75DB jnz short lff24m2_1 3016 0000152B E9A9F8FFFF jmp lff24_3 3017 3018 lff24m2_7: 3019 lff24s2_7: 3020 00001530 E9C5F8FFFF jmp lff24_5 ; error 3021 3022 load_24khz_stereo_16_bit: 3023 ; 02/02/2025 3024 ; 16/11/2023 3025 ; 15/11/2023 3026 00001535 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 3027 ; last of the file? 3028 0000153C 7402 jz short lff24s2_0 ; no 3029 0000153E F9 stc 3030 0000153F C3 retn 3031 3032 lff24s2_0: 3033 ; 01/12/2024 3034 ; edi = audio buffer address 3035 00001540 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 3036 ;mov edx, [loadsize] 3037 3038 ; esi = buffer address 3039 ;; edx = buffer size 3040 3041 ; load file into memory 3042 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001545 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000154B 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 0000154D 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001553 B803000000 <1> mov eax, %1 100 <1> 101 00001558 CD40 <1> int 40h 3043 0000155A 72D4 jc short lff24s2_7 ; error ! 3044 3045 ; 01/12/2024 3046 0000155C A3[54810000] mov [count], eax 3047 ;;; 3048 ; 07/12/2024 3049 ;mov edi, audio_buffer 3050 ;;; 3051 00001561 C1E802 shr eax, 2 3052 00001564 7505 jnz short lff24s2_8 3053 00001566 E986F8FFFF jmp lff24_eof 3054 3055 lff24s2_8: 3056 0000156B 89C1 mov ecx, eax ; dword count 3057 lff24s2_1: 3058 0000156D 66AD lodsw 3059 0000156F 66AB stosw ; original sample (L) 3060 00001571 80C480 add ah, 80h ; convert sound level 0 to 65535 format 3061 00001574 66A3[98240000] mov [previous_val_l], ax 3062 0000157A 66AD lodsw 3063 0000157C 66AB stosw ; original sample (R) 3064 0000157E 80C480 add ah, 80h ; convert sound level 0 to 65535 format 3065 ;mov [previous_val_r], ax 3066 00001581 89C3 mov ebx, eax 3067 ; 02/02/2025 3068 00001583 668B06 mov ax, [esi] 3069 00001586 668B5602 mov dx, [esi+2] 3070 ; 16/11/2023 3071 0000158A 49 dec ecx 3072 0000158B 7504 jnz short lff24s2_2 3073 0000158D 31D2 xor edx, edx 3074 0000158F 31C0 xor eax, eax 3075 lff24s2_2: 3076 00001591 80C480 add ah, 80h ; convert sound level 0 to 65535 format 3077 ;;mov [next_val_l], ax 3078 ;mov ebp, eax 3079 00001594 80C680 add dh, 80h ; convert sound level 0 to 65535 format 3080 ;mov [next_val_r], dx 3081 00001597 660305[98240000] add ax, [previous_val_l] 3082 0000159E 66D1D8 rcr ax, 1 3083 000015A1 80EC80 sub ah, 80h ; -32768 to +32767 format again 3084 000015A4 66AB stosw ; this is interpolated sample (L) 3085 ;mov ax, [next_val_r] 3086 000015A6 89D0 mov eax, edx 3087 ;add ax, [previous_val_r] 3088 000015A8 6601D8 add ax, bx 3089 000015AB 66D1D8 rcr ax, 1 3090 000015AE 80EC80 sub ah, 80h ; -32768 to +32767 format again 3091 000015B1 66AB stosw ; this is interpolated sample (R) 3092 3093 ; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 3094 000015B3 09C9 or ecx, ecx 3095 000015B5 75B6 jnz short lff24s2_1 3096 000015B7 E91DF8FFFF jmp lff24_3 3097 3098 ; ..................... 3099 3100 load_32khz_mono_8_bit: 3101 ; 02/02/2025 3102 ; 15/11/2023 3103 000015BC F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 3104 ; last of the file? 3105 000015C3 7402 jz short lff32m_0 ; no 3106 000015C5 F9 stc 3107 000015C6 C3 retn 3108 3109 lff32m_0: 3110 ; 01/12/2024 3111 ; edi = audio buffer address 3112 000015C7 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 3113 ;mov edx, [loadsize] 3114 3115 ; esi = buffer address 3116 ;; edx = buffer size 3117 3118 ; load file into memory 3119 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000015CC 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 000015D2 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 000015D4 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000015DA B803000000 <1> mov eax, %1 100 <1> 101 000015DF CD40 <1> int 40h 3120 000015E1 7247 jc short lff32m_7 ; error ! 3121 3122 ; 01/12/2024 3123 000015E3 A3[54810000] mov [count], eax 3124 ;;; 3125 ; 07/12/2024 3126 ;mov edi, audio_buffer 3127 ;;; 3128 000015E8 21C0 and eax, eax 3129 000015EA 7505 jnz short lff32m_8 3130 000015EC E900F8FFFF jmp lff32_eof 3131 3132 lff32m_8: 3133 000015F1 89C1 mov ecx, eax ; byte count 3134 lff32m_1: 3135 000015F3 AC lodsb 3136 ;mov [previous_val], al 3137 000015F4 88C3 mov bl, al 3138 000015F6 2C80 sub al, 80h 3139 000015F8 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 3140 000015FC 66AB stosw ; original sample (left channel) 3141 000015FE 66AB stosw ; original sample (right channel) 3142 ;xor eax, eax 3143 ; 02/02/2025 3144 00001600 8A06 mov al, [esi] 3145 00001602 49 dec ecx 3146 00001603 7502 jnz short lff32m_2 3147 00001605 B080 mov al, 80h 3148 lff32m_2: 3149 ;;mov [next_val], al 3150 ;mov bh, al 3151 ;add al, [previous_val] 3152 00001607 00D8 add al, bl 3153 00001609 D0D8 rcr al, 1 3154 0000160B 2C80 sub al, 80h 3155 0000160D 66C1E008 shl ax, 8 3156 00001611 66AB stosw ; this is interpolated sample (L) 3157 00001613 66AB stosw ; this is interpolated sample (R) 3158 3159 ; different than 8-16-24 kHZ ! 3160 ; 'original-interpolated-original' trio samples 3161 00001615 E30E jecxz lff32m_3 3162 3163 00001617 AC lodsb 3164 00001618 2C80 sub al, 80h 3165 0000161A 66C1E008 shl ax, 8 3166 0000161E 66AB stosw ; original sample (left channel) 3167 00001620 66AB stosw ; original sample (right channel) 3168 3169 ; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK 3170 00001622 49 dec ecx 3171 00001623 75CE jnz short lff32m_1 3172 lff32m_3: 3173 00001625 E9AFF7FFFF jmp lff32_3 3174 3175 lff32m_7: 3176 lff32s_7: 3177 0000162A E9CBF7FFFF jmp lff32_5 ; error 3178 3179 load_32khz_stereo_8_bit: 3180 ; 02/02/2025 3181 ; 15/11/2023 3182 0000162F F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 3183 ; last of the file? 3184 00001636 7402 jz short lff32s_0 ; no 3185 00001638 F9 stc 3186 00001639 C3 retn 3187 3188 lff32s_0: 3189 ; 01/12/2024 3190 ; edi = audio buffer address 3191 0000163A BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 3192 ;mov edx, [loadsize] 3193 3194 ; esi = buffer address 3195 ;; edx = buffer size 3196 3197 ; load file into memory 3198 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 0000163F 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001645 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001647 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 0000164D B803000000 <1> mov eax, %1 100 <1> 101 00001652 CD40 <1> int 40h 3199 00001654 72D4 jc short lff32s_7 ; error ! 3200 3201 ; 01/12/2024 3202 00001656 A3[54810000] mov [count], eax 3203 ;;; 3204 ; 07/12/2024 3205 ;mov edi, audio_buffer 3206 ;;; 3207 0000165B D1E8 shr eax, 1 3208 0000165D 7505 jnz short lff32s_8 3209 0000165F E98DF7FFFF jmp lff32_eof 3210 3211 lff32s_8: 3212 00001664 89C1 mov ecx, eax ; word count 3213 lff32s_1: 3214 00001666 AC lodsb 3215 00001667 A2[98240000] mov [previous_val_l], al 3216 0000166C 2C80 sub al, 80h 3217 0000166E 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 3218 00001672 66AB stosw ; original sample (L) 3219 00001674 AC lodsb 3220 00001675 A2[9A240000] mov [previous_val_r], al 3221 0000167A 2C80 sub al, 80h 3222 0000167C 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 3223 00001680 66AB stosw ; original sample (R) 3224 3225 ;xor eax, eax 3226 ; 02/02/2025 3227 00001682 668B06 mov ax, [esi] 3228 00001685 49 dec ecx 3229 00001686 7504 jnz short lff32s_2 3230 ; convert 8 bit sample to 16 bit sample 3231 00001688 66B88080 mov ax, 8080h 3232 lff32s_2: 3233 ;;mov [next_val_l], al 3234 ;;mov [next_val_r], ah 3235 ;mov bx, ax 3236 0000168C 88E7 mov bh, ah 3237 0000168E 0205[98240000] add al, [previous_val_l] 3238 00001694 D0D8 rcr al, 1 3239 ;mov dl, al 3240 00001696 2C80 sub al, 80h 3241 00001698 66C1E008 shl ax, 8 3242 0000169C 66AB stosw ; this is interpolated sample (L) 3243 0000169E 88F8 mov al, bh ; [next_val_r] 3244 000016A0 0205[9A240000] add al, [previous_val_r] 3245 000016A6 D0D8 rcr al, 1 3246 ;mov dh, al 3247 000016A8 2C80 sub al, 80h 3248 000016AA 66C1E008 shl ax, 8 3249 000016AE 66AB stosw ; this is interpolated sample (R) 3250 3251 ; different than 8-16-24 kHZ ! 3252 ; 'original-interpolated-original' trio samples 3253 000016B0 E315 jecxz lff32s_3 3254 3255 000016B2 AC lodsb 3256 000016B3 2C80 sub al, 80h 3257 000016B5 66C1E008 shl ax, 8 3258 000016B9 66AB stosw ; original sample (left channel) 3259 3260 000016BB AC lodsb 3261 000016BC 2C80 sub al, 80h 3262 000016BE 66C1E008 shl ax, 8 3263 000016C2 66AB stosw ; original sample (right channel) 3264 3265 ; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 3266 000016C4 49 dec ecx 3267 000016C5 759F jnz short lff32s_1 3268 lff32s_3: 3269 000016C7 E90DF7FFFF jmp lff32_3 3270 3271 load_32khz_mono_16_bit: 3272 ; 02/02/2025 3273 ; 15/11/2023 3274 000016CC F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 3275 ; last of the file? 3276 000016D3 7402 jz short lff32m2_0 ; no 3277 000016D5 F9 stc 3278 000016D6 C3 retn 3279 3280 lff32m2_0: 3281 ; 01/12/2024 3282 ; edi = audio buffer address 3283 000016D7 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 3284 ;mov edx, [loadsize] 3285 3286 ; esi = buffer address 3287 ;; edx = buffer size 3288 3289 ; load file into memory 3290 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000016DC 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 000016E2 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 000016E4 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000016EA B803000000 <1> mov eax, %1 100 <1> 101 000016EF CD40 <1> int 40h 3291 000016F1 7241 jc short lff32m2_7 ; error ! 3292 3293 ; 01/12/2024 3294 000016F3 A3[54810000] mov [count], eax 3295 ;;; 3296 ; 07/12/2024 3297 ;mov edi, audio_buffer 3298 ;;; 3299 000016F8 D1E8 shr eax, 1 3300 000016FA 7505 jnz short lff32m2_8 3301 000016FC E9F0F6FFFF jmp lff32_eof 3302 3303 lff32m2_8: 3304 00001701 89C1 mov ecx, eax ; word count 3305 lff32m2_1: 3306 00001703 66AD lodsw 3307 00001705 66AB stosw ; original sample (left channel) 3308 00001707 66AB stosw ; original sample (right channel) 3309 00001709 80C480 add ah, 80h ; convert sound level 0 to 65535 format 3310 ;mov [previous_val], ax 3311 ;mov ebx, eax 3312 ;xor eax, eax 3313 ; 02/02/2025 3314 ;mov ax, [esi] 3315 0000170C 668B1E mov bx, [esi] 3316 0000170F 49 dec ecx 3317 00001710 7502 jnz short lff32m2_2 3318 00001712 31DB xor ebx, ebx 3319 lff32m2_2: 3320 ; 02/02/2025 3321 00001714 80C780 add bh, 80h ; convert sound level 0 to 65535 format 3322 ;add ah, 80h 3323 ;mov ebp, eax ; [next_val] 3324 ;add ax, [previous_val] 3325 ; ax = [previous_val] 3326 ; bx = [next_val] 3327 00001717 6601D8 add ax, bx 3328 0000171A 66D1D8 rcr ax, 1 3329 0000171D 80EC80 sub ah, 80h ; -32768 to +32767 format again 3330 00001720 66AB stosw ; this is interpolated sample (L) 3331 00001722 66AB stosw ; this is interpolated sample (R) 3332 3333 ; different than 8-16-24 kHZ ! 3334 ; 'original-interpolated-original' trio samples 3335 00001724 E309 jecxz lff32m2_3 3336 3337 00001726 66AD lodsw 3338 00001728 66AB stosw ; original sample (left channel) 3339 0000172A 66AB stosw ; original sample (right channel) 3340 3341 ; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK 3342 0000172C 49 dec ecx 3343 0000172D 75D4 jnz short lff32m2_1 3344 lff32m2_3: 3345 0000172F E9A5F6FFFF jmp lff32_3 3346 3347 lff32m2_7: 3348 lff32s2_7: 3349 00001734 E9C1F6FFFF jmp lff32_5 ; error 3350 3351 load_32khz_stereo_16_bit: 3352 ; 02/02/2025 3353 ; 16/11/2023 3354 ; 15/11/2023 3355 00001739 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 3356 ; last of the file? 3357 00001740 7402 jz short lff32s2_0 ; no 3358 00001742 F9 stc 3359 00001743 C3 retn 3360 3361 lff32s2_0: 3362 ; 01/12/2024 3363 ; edi = audio buffer address 3364 00001744 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 3365 ;mov edx, [loadsize] 3366 3367 ; esi = buffer address 3368 ;; edx = buffer size 3369 3370 ; load file into memory 3371 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001749 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000174F 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001751 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001757 B803000000 <1> mov eax, %1 100 <1> 101 0000175C CD40 <1> int 40h 3372 0000175E 72D4 jc short lff32s2_7 ; error ! 3373 3374 ; 01/12/2024 3375 00001760 A3[54810000] mov [count], eax 3376 ;;; 3377 ; 07/12/2024 3378 ;mov edi, audio_buffer 3379 ;;; 3380 00001765 C1E802 shr eax, 2 3381 00001768 7505 jnz short lff32s2_8 3382 0000176A E982F6FFFF jmp lff32_eof 3383 3384 lff32s2_8: 3385 0000176F 89C1 mov ecx, eax ; dword count 3386 lff32s2_1: 3387 00001771 66AD lodsw 3388 00001773 66AB stosw ; original sample (L) 3389 00001775 80C480 add ah, 80h ; convert sound level 0 to 65535 format 3390 00001778 66A3[98240000] mov [previous_val_l], ax 3391 0000177E 66AD lodsw 3392 00001780 66AB stosw ; original sample (R) 3393 00001782 80C480 add ah, 80h ; convert sound level 0 to 65535 format 3394 ;mov [previous_val_r], ax 3395 00001785 89C3 mov ebx, eax 3396 ; 02/02/2025 3397 00001787 668B06 mov ax, [esi] 3398 0000178A 668B5602 mov dx, [esi+2] 3399 ; 16/11/2023 3400 0000178E 49 dec ecx 3401 0000178F 7504 jnz short lff32s2_2 3402 00001791 31D2 xor edx, edx 3403 00001793 31C0 xor eax, eax 3404 lff32s2_2: 3405 00001795 80C480 add ah, 80h ; convert sound level 0 to 65535 format 3406 ;;mov [next_val_l], ax 3407 ;mov ebp, eax 3408 00001798 80C680 add dh, 80h ; convert sound level 0 to 65535 format 3409 ;mov [next_val_r], dx 3410 0000179B 660305[98240000] add ax, [previous_val_l] 3411 000017A2 66D1D8 rcr ax, 1 3412 000017A5 80EC80 sub ah, 80h ; -32768 to +32767 format again 3413 000017A8 66AB stosw ; this is interpolated sample (L) 3414 ;mov ax, [next_val_r] 3415 000017AA 89D0 mov eax, edx 3416 ;add ax, [previous_val_r] 3417 000017AC 6601D8 add ax, bx 3418 000017AF 66D1D8 rcr ax, 1 3419 000017B2 80EC80 sub ah, 80h ; -32768 to +32767 format again 3420 000017B5 66AB stosw ; this is interpolated sample (R) 3421 3422 ; different than 8-16-24 kHZ ! 3423 ; 'original-interpolated-original' trio samples 3424 000017B7 E30B jecxz lff32s2_3 3425 3426 000017B9 66AD lodsw 3427 000017BB 66AB stosw ; original sample (L) 3428 000017BD 66AD lodsw 3429 000017BF 66AB stosw ; original sample (R) 3430 3431 ; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 3432 000017C1 49 dec ecx 3433 000017C2 75AD jnz short lff32s2_1 3434 lff32s2_3: 3435 000017C4 E910F6FFFF jmp lff32_3 3436 3437 ; ..................... 3438 3439 load_22khz_mono_8_bit: 3440 ; 02/02/2025 3441 ; 16/11/2023 3442 000017C9 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 3443 ; last of the file? 3444 000017D0 7402 jz short lff22m_0 ; no 3445 000017D2 F9 stc 3446 000017D3 C3 retn 3447 3448 lff22m_0: 3449 ; 01/12/2024 3450 ; edi = audio buffer address 3451 000017D4 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 3452 ;mov edx, [loadsize] 3453 3454 ; esi = buffer address 3455 ;; edx = buffer size 3456 3457 ; load file into memory 3458 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000017D9 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 000017DF 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 000017E1 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000017E7 B803000000 <1> mov eax, %1 100 <1> 101 000017EC CD40 <1> int 40h 3459 000017EE 725D jc short lff22m_7 ; error ! 3460 3461 ; 01/12/2024 3462 000017F0 A3[54810000] mov [count], eax 3463 ;;; 3464 ; 07/12/2024 3465 ;mov edi, audio_buffer 3466 ;;; 3467 000017F5 21C0 and eax, eax 3468 000017F7 7505 jnz short lff22m_8 3469 000017F9 E9F3F5FFFF jmp lff22_eof 3470 3471 lff22m_8: 3472 000017FE 89C1 mov ecx, eax ; byte count 3473 lff22m_9: 3474 00001800 BD05000000 mov ebp, 5 ; interpolation (one step) loop count 3475 00001805 C605[A0240000]03 mov byte [faz], 3 ; 3 steps/phases 3476 lff22m_1: 3477 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 3478 0000180C AC lodsb 3479 ; 02/02/2025 3480 0000180D 8A16 mov dl, [esi] 3481 0000180F 49 dec ecx 3482 00001810 7502 jnz short lff22m_2_1 3483 00001812 B280 mov dl, 80h 3484 lff22m_2_1: 3485 ; al = [previous_val] 3486 ; dl = [next_val] 3487 00001814 E835070000 call interpolating_3_8bit_mono ; 1 of 17 3488 00001819 E32D jecxz lff22m_3 3489 lff22m_2_2: 3490 0000181B AC lodsb 3491 ; 02/02/2025 3492 0000181C 8A16 mov dl, [esi] 3493 0000181E 49 dec ecx 3494 0000181F 7502 jnz short lff22m_2_3 3495 00001821 B280 mov dl, 80h 3496 lff22m_2_3: 3497 00001823 E8B0070000 call interpolating_2_8bit_mono ; 2 of 17 .. 6 of 17 3498 00001828 E31E jecxz lff22m_3 3499 0000182A 4D dec ebp 3500 0000182B 75EE jnz short lff22m_2_2 3501 3502 0000182D A0[A0240000] mov al, [faz] 3503 00001832 FEC8 dec al 3504 00001834 74CA jz short lff22m_9 3505 00001836 FE0D[A0240000] dec byte [faz] 3506 0000183C BD04000000 mov ebp, 4 3507 00001841 FEC8 dec al 3508 00001843 75C7 jnz short lff22m_1 ; 3:2:2:2:2 ; 7-11 of 17 3509 00001845 45 inc ebp ; 5 3510 00001846 EBC4 jmp short lff22m_1 ; 3:2:2:2:2:2 ; 12-17 of 17 3511 3512 lff22m_3: 3513 lff22s_3: 3514 00001848 E98CF5FFFF jmp lff22_3 ; padfill 3515 ; (put zeros in the remain words of the buffer) 3516 lff22m_7: 3517 lff22s_7: 3518 0000184D E9A8F5FFFF jmp lff22_5 ; error 3519 3520 load_22khz_stereo_8_bit: 3521 ; 02/02/2025 3522 ; 16/11/2023 3523 00001852 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 3524 ; last of the file? 3525 00001859 7402 jz short lff22s_0 ; no 3526 0000185B F9 stc 3527 0000185C C3 retn 3528 3529 lff22s_0: 3530 ; 01/12/2024 3531 ; edi = audio buffer address 3532 0000185D BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 3533 ;mov edx, [loadsize] 3534 3535 ; esi = buffer address 3536 ;; edx = buffer size 3537 3538 ; load file into memory 3539 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001862 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001868 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 0000186A 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001870 B803000000 <1> mov eax, %1 100 <1> 101 00001875 CD40 <1> int 40h 3540 00001877 72D4 jc short lff22s_7 ; error ! 3541 3542 ; 01/12/2024 3543 00001879 A3[54810000] mov [count], eax 3544 ;;; 3545 ; 07/12/2024 3546 ;mov edi, audio_buffer 3547 ;;; 3548 0000187E D1E8 shr eax, 1 3549 00001880 7505 jnz short lff22s_8 3550 00001882 E96AF5FFFF jmp lff22_eof 3551 3552 lff22s_8: 3553 00001887 89C1 mov ecx, eax ; word count 3554 lff22s_9: 3555 00001889 BD05000000 mov ebp, 5 ; interpolation (one step) loop count 3556 0000188E C605[A0240000]03 mov byte [faz], 3 ; 3 steps/phase 3557 lff22s_1: 3558 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 3559 00001895 66AD lodsw 3560 ; 02/02/2025 3561 00001897 668B16 mov dx, [esi] 3562 0000189A 49 dec ecx 3563 0000189B 7504 jnz short lff22s_2_1 3564 0000189D 66BA8080 mov dx, 8080h 3565 lff22s_2_1: 3566 ; al = [previous_val_l] 3567 ; ah = [previous_val_r] 3568 ; dl = [next_val_l] 3569 ; dh = [next_val_r] 3570 000018A1 E8DB060000 call interpolating_3_8bit_stereo ; 1 of 17 3571 000018A6 E3A0 jecxz lff22s_3 3572 lff22s_2_2: 3573 000018A8 66AD lodsw 3574 ; 02/02/2025 3575 000018AA 668B16 mov dx, [esi] 3576 000018AD 49 dec ecx 3577 000018AE 7504 jnz short lff22s_2_3 3578 000018B0 66BA8080 mov dx, 8080h 3579 lff22s_2_3: 3580 000018B4 E83C070000 call interpolating_2_8bit_stereo ; 2 of 17 .. 6 of 17 3581 000018B9 E38D jecxz lff22s_3 3582 000018BB 4D dec ebp 3583 000018BC 75EA jnz short lff22s_2_2 3584 3585 000018BE A0[A0240000] mov al, [faz] 3586 000018C3 FEC8 dec al 3587 000018C5 74C2 jz short lff22s_9 3588 000018C7 FE0D[A0240000] dec byte [faz] 3589 000018CD BD04000000 mov ebp, 4 3590 000018D2 FEC8 dec al 3591 000018D4 75BF jnz short lff22s_1 ; 3:2:2:2:2 ; 7-11 of 17 3592 000018D6 45 inc ebp ; 5 3593 000018D7 EBBC jmp short lff22s_1 ; 3:2:2:2:2:2 ; 12-17 of 17 3594 3595 load_22khz_mono_16_bit: 3596 ; 02/02/2025 3597 ; 16/11/2023 3598 000018D9 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 3599 ; last of the file? 3600 000018E0 7402 jz short lff22m2_0 ; no 3601 000018E2 F9 stc 3602 000018E3 C3 retn 3603 3604 lff22m2_0: 3605 ; 01/12/2024 3606 ; edi = audio buffer address 3607 000018E4 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 3608 ;mov edx, [loadsize] 3609 3610 ; esi = buffer address 3611 ;; edx = buffer size 3612 3613 ; load file into memory 3614 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000018E9 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 000018EF 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 000018F1 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000018F7 B803000000 <1> mov eax, %1 100 <1> 101 000018FC CD40 <1> int 40h 3615 000018FE 7261 jc short lff22m2_7 ; error ! 3616 3617 ; 01/12/2024 3618 00001900 A3[54810000] mov [count], eax 3619 ;;; 3620 ; 07/12/2024 3621 ;mov edi, audio_buffer 3622 ;;; 3623 00001905 D1E8 shr eax, 1 3624 00001907 7505 jnz short lff22m2_8 3625 00001909 E9E3F4FFFF jmp lff22_eof 3626 3627 lff22m2_8: 3628 0000190E 89C1 mov ecx, eax ; word count 3629 lff22m2_9: 3630 00001910 BD05000000 mov ebp, 5 ; interpolation (one step) loop count 3631 00001915 C605[A0240000]03 mov byte [faz], 3 ; 3 steps/phases 3632 lff22m2_1: 3633 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 3634 0000191C 66AD lodsw 3635 ; 02/02/2025 3636 0000191E 668B16 mov dx, [esi] 3637 00001921 49 dec ecx 3638 00001922 7502 jnz short lff22m2_2_1 3639 00001924 31D2 xor edx, edx 3640 lff22m2_2_1: 3641 ; ax = [previous_val] 3642 ; dx = [next_val] 3643 00001926 E8FB060000 call interpolating_3_16bit_mono ; 1 of 17 3644 0000192B E32F jecxz lff22m2_3 3645 lff22m2_2_2: 3646 0000192D 66AD lodsw 3647 ; 02/02/2025 3648 0000192F 668B16 mov dx, [esi] 3649 00001932 49 dec ecx 3650 00001933 7502 jnz short lff22m2_2_3 3651 00001935 31D2 xor edx, edx 3652 lff22m2_2_3: 3653 00001937 E87D070000 call interpolating_2_16bit_mono ; 2 of 17 .. 6 of 17 3654 0000193C E31E jecxz lff22m2_3 3655 0000193E 4D dec ebp 3656 0000193F 75EC jnz short lff22m2_2_2 3657 3658 00001941 A0[A0240000] mov al, [faz] 3659 00001946 FEC8 dec al 3660 00001948 74C6 jz short lff22m2_9 3661 0000194A FE0D[A0240000] dec byte [faz] 3662 00001950 BD04000000 mov ebp, 4 3663 00001955 FEC8 dec al 3664 00001957 75C3 jnz short lff22m2_1 ; 3:2:2:2:2 ; 7-11 of 17 3665 00001959 45 inc ebp ; 5 3666 0000195A EBC0 jmp short lff22m2_1 ; 3:2:2:2:2:2 ; 12-17 of 17 3667 3668 lff22m2_3: 3669 lff22s2_3: 3670 0000195C E978F4FFFF jmp lff22_3 ; padfill 3671 ; (put zeros in the remain words of the buffer) 3672 lff22m2_7: 3673 lff22s2_7: 3674 00001961 E994F4FFFF jmp lff22_5 ; error 3675 3676 load_22khz_stereo_16_bit: 3677 ; 16/11/2023 3678 00001966 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 3679 ; last of the file? 3680 0000196D 7402 jz short lff22s2_0 ; no 3681 0000196F F9 stc 3682 00001970 C3 retn 3683 3684 lff22s2_0: 3685 ; 01/12/2024 3686 ; edi = audio buffer address 3687 00001971 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 3688 ;mov edx, [loadsize] 3689 3690 ; esi = buffer address 3691 ;; edx = buffer size 3692 3693 ; load file into memory 3694 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001976 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000197C 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 0000197E 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001984 B803000000 <1> mov eax, %1 100 <1> 101 00001989 CD40 <1> int 40h 3695 0000198B 72D4 jc short lff22s2_7 ; error ! 3696 3697 ; 01/12/2024 3698 0000198D A3[54810000] mov [count], eax 3699 ;;; 3700 ; 07/12/2024 3701 ;mov edi, audio_buffer 3702 ;;; 3703 00001992 C1E802 shr eax, 2 ; dword (left chan word + right chan word) 3704 00001995 7505 jnz short lff22s2_8 3705 00001997 E955F4FFFF jmp lff22_eof 3706 3707 lff22s2_8: 3708 0000199C 89C1 mov ecx, eax ; dword count 3709 lff22s2_9: 3710 0000199E BD05000000 mov ebp, 5 ; interpolation (one step) loop count 3711 000019A3 C605[A0240000]03 mov byte [faz], 3 ; 3 steps/phase 3712 lff22s2_1: 3713 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 3714 000019AA 66AD lodsw 3715 000019AC 89C3 mov ebx, eax 3716 000019AE 66AD lodsw 3717 000019B0 8B16 mov edx, [esi] 3718 000019B2 668915[9C240000] mov [next_val_l], dx 3719 ; 26/11/2023 3720 000019B9 C1EA10 shr edx, 16 3721 000019BC 49 dec ecx 3722 000019BD 7509 jnz short lff22s2_2_1 3723 000019BF 31D2 xor edx, edx ; 0 3724 000019C1 668915[9C240000] mov [next_val_l], dx 3725 lff22s2_2_1: 3726 ; bx = [previous_val_l] 3727 ; ax = [previous_val_r] 3728 ; [next_val_l] 3729 ; dx = [next_val_r] 3730 000019C8 E889060000 call interpolating_3_16bit_stereo ; 1 of 17 3731 000019CD E38D jecxz lff22s2_3 3732 lff22s2_2_2: 3733 000019CF 66AD lodsw 3734 000019D1 89C3 mov ebx, eax 3735 000019D3 66AD lodsw 3736 000019D5 8B16 mov edx, [esi] 3737 000019D7 668915[9C240000] mov [next_val_l], dx 3738 ; 26/11/2023 3739 000019DE C1EA10 shr edx, 16 3740 000019E1 49 dec ecx 3741 000019E2 7509 jnz short lff22s2_2_3 3742 000019E4 31D2 xor edx, edx ; 0 3743 000019E6 668915[9C240000] mov [next_val_l], dx 3744 lff22s2_2_3: 3745 000019ED E8DF060000 call interpolating_2_16bit_stereo ; 2 of 17 .. 6 of 17 3746 000019F2 E31E jecxz lff22s2_2_4 3747 3748 000019F4 4D dec ebp 3749 000019F5 75D8 jnz short lff22s2_2_2 3750 3751 000019F7 A0[A0240000] mov al, [faz] 3752 000019FC FEC8 dec al 3753 000019FE 749E jz short lff22s2_9 3754 00001A00 FE0D[A0240000] dec byte [faz] 3755 00001A06 BD04000000 mov ebp, 4 3756 00001A0B FEC8 dec al 3757 00001A0D 759B jnz short lff22s2_1 ; 3:2:2:2:2 ; 7-11 of 17 3758 00001A0F 45 inc ebp ; 5 3759 00001A10 EB98 jmp short lff22s2_1 ; 3:2:2:2:2:2 ; 12-17 of 17 3760 3761 lff22s2_2_4: 3762 ; 26/11/2023 3763 00001A12 E9C2F3FFFF jmp lff22_3 ; padfill 3764 3765 ; ..................... 3766 3767 load_11khz_mono_8_bit: 3768 ; 02/02/2025 3769 ; 18/11/2023 3770 00001A17 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 3771 ; last of the file? 3772 00001A1E 7402 jz short lff11m_0 ; no 3773 00001A20 F9 stc 3774 00001A21 C3 retn 3775 3776 lff11m_0: 3777 ; 01/12/2024 3778 ; edi = audio buffer address 3779 00001A22 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 3780 ;mov edx, [loadsize] 3781 3782 ; esi = buffer address 3783 ;; edx = buffer size 3784 3785 ; load file into memory 3786 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001A27 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001A2D 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001A2F 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001A35 B803000000 <1> mov eax, %1 100 <1> 101 00001A3A CD40 <1> int 40h 3787 00001A3C 7247 jc short lff11m_7 ; error ! 3788 3789 ; 01/12/2024 3790 00001A3E A3[54810000] mov [count], eax 3791 ;;; 3792 ; 07/12/2024 3793 ;mov edi, audio_buffer 3794 ;;; 3795 00001A43 21C0 and eax, eax 3796 00001A45 7505 jnz short lff11m_8 3797 00001A47 E9A5F3FFFF jmp lff11_eof 3798 3799 lff11m_8: 3800 00001A4C 89C1 mov ecx, eax ; byte count 3801 lff11m_9: 3802 00001A4E BD06000000 mov ebp, 6 ; interpolation (one step) loop count 3803 lff11m_1: 3804 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 3805 00001A53 AC lodsb 3806 ; 02/02/2025 3807 00001A54 8A16 mov dl, [esi] 3808 00001A56 49 dec ecx 3809 00001A57 7502 jnz short lff11m_2_1 3810 00001A59 B280 mov dl, 80h 3811 lff11m_2_1: 3812 ; al = [previous_val] 3813 ; dl = [next_val] 3814 00001A5B E8A0060000 call interpolating_5_8bit_mono 3815 00001A60 E328 jecxz lff11m_3 3816 lff11m_2_2: 3817 00001A62 AC lodsb 3818 ; 02/02/2025 3819 00001A63 8A16 mov dl, [esi] 3820 00001A65 49 dec ecx 3821 00001A66 7502 jnz short lff11m_2_3 3822 00001A68 B280 mov dl, 80h 3823 lff11m_2_3: 3824 00001A6A E89D070000 call interpolating_4_8bit_mono 3825 00001A6F E319 jecxz lff11m_3 3826 3827 00001A71 4D dec ebp 3828 00001A72 74DA jz short lff11m_9 3829 3830 00001A74 AC lodsb 3831 ; 02/02/2025 3832 00001A75 8A16 mov dl, [esi] 3833 00001A77 49 dec ecx 3834 00001A78 7502 jnz short lff11m_2_4 3835 00001A7A B280 mov dl, 80h 3836 lff11m_2_4: 3837 00001A7C E88B070000 call interpolating_4_8bit_mono 3838 00001A81 E307 jecxz lff11m_3 3839 00001A83 EBCE jmp short lff11m_1 3840 3841 lff11m_7: 3842 lff11s_7: 3843 00001A85 E970F3FFFF jmp lff11_5 ; error 3844 3845 lff11m_3: 3846 lff11s_3: 3847 00001A8A E94AF3FFFF jmp lff11_3 ; padfill 3848 ; (put zeros in the remain words of the buffer) 3849 3850 load_11khz_stereo_8_bit: 3851 ; 02/02/2025 3852 ; 18/11/2023 3853 00001A8F F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 3854 ; last of the file? 3855 00001A96 7402 jz short lff11s_0 ; no 3856 00001A98 F9 stc 3857 00001A99 C3 retn 3858 3859 lff11s_0: 3860 ; 01/12/2024 3861 ; edi = audio buffer address 3862 00001A9A BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 3863 ;mov edx, [loadsize] 3864 3865 ; esi = buffer address 3866 ;; edx = buffer size 3867 3868 ; load file into memory 3869 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001A9F 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001AA5 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001AA7 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001AAD B803000000 <1> mov eax, %1 100 <1> 101 00001AB2 CD40 <1> int 40h 3870 00001AB4 72CF jc short lff11s_7 ; error ! 3871 3872 ; 01/12/2024 3873 00001AB6 A3[54810000] mov [count], eax 3874 ;;; 3875 ; 07/12/2024 3876 ;mov edi, audio_buffer 3877 ;;; 3878 00001ABB D1E8 shr eax, 1 3879 00001ABD 7505 jnz short lff11s_8 3880 00001ABF E92DF3FFFF jmp lff11_eof 3881 3882 lff11s_8: 3883 00001AC4 89C1 mov ecx, eax ; word count 3884 lff11s_9: 3885 00001AC6 BD06000000 mov ebp, 6 ; interpolation (one step) loop count 3886 lff11s_1: 3887 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 3888 00001ACB 66AD lodsw 3889 ; 02/02/2025 3890 00001ACD 668B16 mov dx, [esi] 3891 00001AD0 49 dec ecx 3892 00001AD1 7504 jnz short lff11s_2_1 3893 00001AD3 66BA8080 mov dx, 8080h 3894 lff11s_2_1: 3895 ; al = [previous_val_l] 3896 ; ah = [previous_val_r] 3897 ; dl = [next_val_l] 3898 ; dh = [next_val_r] 3899 00001AD7 E883060000 call interpolating_5_8bit_stereo 3900 00001ADC E3AC jecxz lff11s_3 3901 lff11s_2_2: 3902 00001ADE 66AD lodsw 3903 ; 02/02/2025 3904 00001AE0 668B16 mov dx, [esi] 3905 00001AE3 49 dec ecx 3906 00001AE4 7504 jnz short lff11s_2_3 3907 00001AE6 66BA8080 mov dx, 8080h 3908 lff11s_2_3: 3909 00001AEA E85C070000 call interpolating_4_8bit_stereo 3910 00001AEF E399 jecxz lff11s_3 3911 3912 00001AF1 4D dec ebp 3913 00001AF2 74D2 jz short lff11s_9 3914 3915 00001AF4 66AD lodsw 3916 ; 02/02/2025 3917 00001AF6 668B16 mov dx, [esi] 3918 00001AF9 49 dec ecx 3919 00001AFA 7504 jnz short lff11s_2_4 3920 00001AFC 66BA8080 mov dx, 8080h 3921 lff11s_2_4: 3922 00001B00 E846070000 call interpolating_4_8bit_stereo 3923 00001B05 E383 jecxz lff11s_3 3924 00001B07 EBC2 jmp short lff11s_1 3925 3926 load_11khz_mono_16_bit: 3927 ; 02/02/2025 3928 ; 18/11/2023 3929 00001B09 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 3930 ; last of the file? 3931 00001B10 7402 jz short lff11m2_0 ; no 3932 00001B12 F9 stc 3933 00001B13 C3 retn 3934 3935 lff11m2_0: 3936 ; 01/12/2024 3937 ; edi = audio buffer address 3938 00001B14 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 3939 ;mov edx, [loadsize] 3940 3941 ; esi = buffer address 3942 ;; edx = buffer size 3943 3944 ; load file into memory 3945 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001B19 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001B1F 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001B21 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001B27 B803000000 <1> mov eax, %1 100 <1> 101 00001B2C CD40 <1> int 40h 3946 00001B2E 724D jc short lff11m2_7 ; error ! 3947 3948 ; 01/12/2024 3949 00001B30 A3[54810000] mov [count], eax 3950 ;;; 3951 ; 07/12/2024 3952 ;mov edi, audio_buffer 3953 ;;; 3954 00001B35 D1E8 shr eax, 1 3955 00001B37 7505 jnz short lff11m2_8 3956 00001B39 E9B3F2FFFF jmp lff11_eof 3957 3958 lff11m2_8: 3959 00001B3E 89C1 mov ecx, eax ; word count 3960 lff11m2_9: 3961 00001B40 BD06000000 mov ebp, 6 ; interpolation (one step) loop count 3962 lff11m2_1: 3963 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 3964 00001B45 66AD lodsw 3965 ; 02/02/2025 3966 00001B47 668B16 mov dx, [esi] 3967 00001B4A 49 dec ecx 3968 00001B4B 7502 jnz short lff11m2_2_1 3969 00001B4D 31D2 xor edx, edx 3970 lff11m2_2_1: 3971 ; ax = [previous_val] 3972 ; dx = [next_val] 3973 00001B4F E864070000 call interpolating_5_16bit_mono 3974 00001B54 E362 jecxz lff11m2_3 3975 lff11m2_2_2: 3976 00001B56 66AD lodsw 3977 ; 02/02/2025 3978 00001B58 668B16 mov dx, [esi] 3979 00001B5B 49 dec ecx 3980 00001B5C 7502 jnz short lff11m2_2_3 3981 00001B5E 31D2 xor edx, edx 3982 lff11m2_2_3: 3983 00001B60 E87D080000 call interpolating_4_16bit_mono 3984 00001B65 E351 jecxz lff11m2_3 3985 3986 00001B67 4D dec ebp 3987 00001B68 74D6 jz short lff11m2_9 3988 3989 00001B6A 66AD lodsw 3990 ; 02/02/2025 3991 00001B6C 668B16 mov dx, [esi] 3992 00001B6F 49 dec ecx 3993 00001B70 7502 jnz short lff11m2_2_4 3994 00001B72 31D2 xor edx, edx 3995 lff11m2_2_4: 3996 00001B74 E869080000 call interpolating_4_16bit_mono 3997 00001B79 E33D jecxz lff11m2_3 3998 00001B7B EBC8 jmp short lff11m2_1 3999 4000 lff11m2_7: 4001 lff11s2_7: 4002 00001B7D E978F2FFFF jmp lff11_5 ; error 4003 4004 load_11khz_stereo_16_bit: 4005 ; 17/01/2025 4006 ; 18/11/2023 4007 00001B82 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 4008 ; last of the file? 4009 00001B89 7402 jz short lff11s2_0 ; no 4010 00001B8B F9 stc 4011 00001B8C C3 retn 4012 4013 lff11s2_0: 4014 ; 01/12/2024 4015 ; edi = audio buffer address 4016 00001B8D BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 4017 ;mov edx, [loadsize] 4018 4019 ; esi = buffer address 4020 ;; edx = buffer size 4021 4022 ; load file into memory 4023 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001B92 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001B98 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001B9A 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001BA0 B803000000 <1> mov eax, %1 100 <1> 101 00001BA5 CD40 <1> int 40h 4024 00001BA7 72D4 jc short lff11s2_7 ; error ! 4025 4026 ; 01/12/2024 4027 00001BA9 A3[54810000] mov [count], eax 4028 ;;; 4029 ; 07/12/2024 4030 ;mov edi, audio_buffer 4031 ;;; 4032 00001BAE C1E802 shr eax, 2 ; dword (left chan word + right chan word) 4033 00001BB1 750A jnz short lff11s2_8 4034 00001BB3 E939F2FFFF jmp lff11_eof 4035 4036 lff11m2_3: 4037 lff11s2_3: 4038 00001BB8 E91CF2FFFF jmp lff11_3 ; padfill 4039 ; (put zeros in the remain words of the buffer) 4040 4041 lff11s2_8: 4042 00001BBD 89C1 mov ecx, eax ; dword count 4043 lff11s2_9: 4044 00001BBF BD06000000 mov ebp, 6 ; interpolation (one step) loop count 4045 lff11s2_1: 4046 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 4047 00001BC4 66AD lodsw 4048 00001BC6 89C3 mov ebx, eax 4049 00001BC8 66AD lodsw 4050 00001BCA 8B16 mov edx, [esi] 4051 ; 17/01/2025 4052 ;mov [next_val_l], edx 4053 ; 26/11/2023 4054 ;shr edx, 16 4055 ;mov [next_val_r], dx 4056 00001BCC 49 dec ecx 4057 00001BCD 7502 jnz short lff11s2_2_1 4058 00001BCF 31D2 xor edx, edx ; 0 4059 ;mov [next_val_l], dx 4060 ;mov [next_val_r], dx 4061 lff11s2_2_1: 4062 ; bx = [previous_val_l] 4063 ; ax = [previous_val_r] 4064 ; [next_val_l] 4065 ; dx = [next_val_r] 4066 ;;; 4067 ; 17/01/2025 (BugFix) 4068 00001BD1 8915[9C240000] mov [next_val_l], edx 4069 ;;; 4070 00001BD7 E837070000 call interpolating_5_16bit_stereo 4071 00001BDC E3DA jecxz lff11s2_3 4072 lff11s2_2_2: 4073 00001BDE 66AD lodsw 4074 00001BE0 89C3 mov ebx, eax 4075 00001BE2 66AD lodsw 4076 00001BE4 8B16 mov edx, [esi] 4077 ; 17/01/2025 4078 ;mov [next_val_l], dx 4079 ; 26/11/2023 4080 ;shr edx, 16 4081 ;mov [next_val_r], dx 4082 00001BE6 49 dec ecx 4083 00001BE7 7502 jnz short lff11s2_2_3 4084 00001BE9 31D2 xor edx, edx ; 0 4085 ;mov [next_val_l], dx 4086 ;mov [next_val_r], dx 4087 lff11s2_2_3: 4088 ;;; 4089 ; 17/01/2025 (BugFix) 4090 00001BEB 8915[9C240000] mov [next_val_l], edx 4091 ;;; 4092 00001BF1 E825080000 call interpolating_4_16bit_stereo 4093 00001BF6 E3C0 jecxz lff11s2_3 4094 4095 00001BF8 4D dec ebp 4096 00001BF9 74C4 jz short lff11s2_9 4097 4098 00001BFB 66AD lodsw 4099 00001BFD 89C3 mov ebx, eax 4100 00001BFF 66AD lodsw 4101 00001C01 8B16 mov edx, [esi] 4102 ; 17/01/2025 4103 ;mov [next_val_l], dx 4104 ; 26/11/2023 4105 ;shr edx, 16 4106 ;mov [next_val_r], dx 4107 00001C03 49 dec ecx 4108 00001C04 7502 jnz short lff11s2_2_4 4109 00001C06 31D2 xor edx, edx ; 0 4110 ;mov [next_val_l], dx 4111 ;mov [next_val_r], dx 4112 lff11s2_2_4: 4113 ;;; 4114 ; 17/01/2025 (BugFix) 4115 00001C08 8915[9C240000] mov [next_val_l], edx 4116 ;;; 4117 00001C0E E808080000 call interpolating_4_16bit_stereo 4118 00001C13 E3A3 jecxz lff11s2_3 4119 00001C15 EBAD jmp short lff11s2_1 4120 4121 ; ..................... 4122 4123 load_44khz_mono_8_bit: 4124 ; 02/02/2025 4125 ; 18/11/2023 4126 00001C17 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 4127 ; last of the file? 4128 00001C1E 7402 jz short lff44m_0 ; no 4129 00001C20 F9 stc 4130 00001C21 C3 retn 4131 4132 lff44m_0: 4133 ; 01/12/2024 4134 ; edi = audio buffer address 4135 00001C22 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 4136 ;mov edx, [loadsize] 4137 4138 ; esi = buffer address 4139 ;; edx = buffer size 4140 4141 ; load file into memory 4142 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001C27 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001C2D 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001C2F 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001C35 B803000000 <1> mov eax, %1 100 <1> 101 00001C3A CD40 <1> int 40h 4143 00001C3C 7250 jc short lff44m_7 ; error ! 4144 4145 ; 01/12/2024 4146 00001C3E A3[54810000] mov [count], eax 4147 ;;; 4148 ; 07/12/2024 4149 ;mov edi, audio_buffer 4150 ;;; 4151 00001C43 21C0 and eax, eax 4152 00001C45 7505 jnz short lff44m_8 4153 00001C47 E9A5F1FFFF jmp lff44_eof 4154 4155 lff44m_8: 4156 00001C4C 89C1 mov ecx, eax ; byte count 4157 lff44m_9: 4158 00001C4E BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 4159 00001C53 C605[A0240000]02 mov byte [faz], 2 ; 2 steps/phases 4160 lff44m_1: 4161 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 4162 ; 2:1:1:1:1:1:1:1:1:1:1:1 4163 00001C5A AC lodsb 4164 ; 02/02/2025 4165 00001C5B 8A16 mov dl, [esi] 4166 00001C5D 49 dec ecx 4167 00001C5E 7502 jnz short lff44m_2_1 4168 00001C60 B280 mov dl, 80h 4169 lff44m_2_1: 4170 ; al = [previous_val] 4171 ; dl = [next_val] 4172 00001C62 E871030000 call interpolating_2_8bit_mono 4173 00001C67 E320 jecxz lff44m_3 4174 lff44m_2_2: 4175 00001C69 AC lodsb 4176 00001C6A 2C80 sub al, 80h 4177 00001C6C 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4178 00001C70 66AB stosw ; (L) 4179 00001C72 66AB stosw ; (R) 4180 4181 00001C74 49 dec ecx 4182 00001C75 7412 jz short lff44m_3 4183 00001C77 4D dec ebp 4184 00001C78 75EF jnz short lff44m_2_2 4185 4186 00001C7A FE0D[A0240000] dec byte [faz] 4187 00001C80 74CC jz short lff44m_9 4188 00001C82 BD0B000000 mov ebp, 11 4189 00001C87 EBD1 jmp short lff44m_1 4190 4191 lff44m_3: 4192 lff44s_3: 4193 00001C89 E94BF1FFFF jmp lff44_3 ; padfill 4194 ; (put zeros in the remain words of the buffer) 4195 lff44m_7: 4196 lff44s_7: 4197 00001C8E E967F1FFFF jmp lff44_5 ; error 4198 4199 load_44khz_stereo_8_bit: 4200 ; 02/02/2025 4201 ; 16/11/2023 4202 00001C93 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 4203 ; last of the file? 4204 00001C9A 7402 jz short lff44s_0 ; no 4205 00001C9C F9 stc 4206 00001C9D C3 retn 4207 4208 lff44s_0: 4209 ; 01/12/2024 4210 ; edi = audio buffer address 4211 00001C9E BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 4212 ;mov edx, [loadsize] 4213 4214 ; esi = buffer address 4215 ;; edx = buffer size 4216 4217 ; load file into memory 4218 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001CA3 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001CA9 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001CAB 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001CB1 B803000000 <1> mov eax, %1 100 <1> 101 00001CB6 CD40 <1> int 40h 4219 00001CB8 72D4 jc short lff44s_7 ; error ! 4220 4221 ; 01/12/2024 4222 00001CBA A3[54810000] mov [count], eax 4223 ;;; 4224 ; 07/12/2024 4225 ;mov edi, audio_buffer 4226 ;;; 4227 00001CBF D1E8 shr eax, 1 4228 00001CC1 7505 jnz short lff44s_8 4229 00001CC3 E929F1FFFF jmp lff44_eof 4230 4231 lff44s_8: 4232 00001CC8 89C1 mov ecx, eax ; word count 4233 lff44s_9: 4234 00001CCA BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 4235 00001CCF C605[A0240000]02 mov byte [faz], 2 ; 2 steps/phase 4236 lff44s_1: 4237 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 4238 ; 2:1:1:1:1:1:1:1:1:1:1:1 4239 00001CD6 66AD lodsw 4240 ; 02/02/2025 4241 00001CD8 668B16 mov dx, [esi] 4242 00001CDB 49 dec ecx 4243 00001CDC 7504 jnz short lff44s_2_1 4244 00001CDE 66BA8080 mov dx, 8080h 4245 lff44s_2_1: 4246 ; al = [previous_val_l] 4247 ; ah = [previous_val_r] 4248 ; dl = [next_val_l] 4249 ; dh = [next_val_r] 4250 00001CE2 E80E030000 call interpolating_2_8bit_stereo 4251 00001CE7 E3A0 jecxz lff44s_3 4252 lff44s_2_2: 4253 00001CE9 AC lodsb 4254 00001CEA 2C80 sub al, 80h 4255 00001CEC 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4256 00001CF0 66AB stosw ; (L) 4257 00001CF2 AC lodsb 4258 00001CF3 2C80 sub al, 80h 4259 00001CF5 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4260 00001CF9 66AB stosw ; (R) 4261 4262 00001CFB 49 dec ecx 4263 00001CFC 748B jz short lff44s_3 4264 00001CFE 4D dec ebp 4265 00001CFF 75E8 jnz short lff44s_2_2 4266 4267 00001D01 FE0D[A0240000] dec byte [faz] 4268 00001D07 74C1 jz short lff44s_9 4269 00001D09 BD0B000000 mov ebp, 11 4270 00001D0E EBC6 jmp short lff44s_1 4271 4272 load_44khz_mono_16_bit: 4273 ; 02/02/2025 4274 ; 18/11/2023 4275 00001D10 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 4276 ; last of the file? 4277 00001D17 7402 jz short lff44m2_0 ; no 4278 00001D19 F9 stc 4279 00001D1A C3 retn 4280 4281 lff44m2_0: 4282 ; 01/12/2024 4283 ; edi = audio buffer address 4284 00001D1B BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 4285 ;mov edx, [loadsize] 4286 4287 ; esi = buffer address 4288 ;; edx = buffer size 4289 4290 ; load file into memory 4291 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001D20 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001D26 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001D28 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001D2E B803000000 <1> mov eax, %1 100 <1> 101 00001D33 CD40 <1> int 40h 4292 00001D35 724D jc short lff44m2_7 ; error ! 4293 4294 ; 01/12/2024 4295 00001D37 A3[54810000] mov [count], eax 4296 ;;; 4297 ; 07/12/2024 4298 ;mov edi, audio_buffer 4299 ;;; 4300 00001D3C D1E8 shr eax, 1 4301 00001D3E 7505 jnz short lff44m2_8 4302 00001D40 E9ACF0FFFF jmp lff44_eof 4303 4304 lff44m2_8: 4305 00001D45 89C1 mov ecx, eax ; word count 4306 lff44m2_9: 4307 00001D47 BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 4308 00001D4C C605[A0240000]02 mov byte [faz], 2 ; 2 steps/phases 4309 lff44m2_1: 4310 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 4311 ; 2:1:1:1:1:1:1:1:1:1:1:1 4312 00001D53 66AD lodsw 4313 ; 02/02/2025 4314 00001D55 668B16 mov dx, [esi] 4315 00001D58 49 dec ecx 4316 00001D59 7502 jnz short lff44m2_2_1 4317 00001D5B 31D2 xor edx, edx 4318 lff44m2_2_1: 4319 ; ax = [previous_val] 4320 ; dx = [next_val] 4321 00001D5D E857030000 call interpolating_2_16bit_mono 4322 00001D62 E31B jecxz lff44m2_3 4323 lff44m2_2_2: 4324 00001D64 66AD lodsw 4325 00001D66 66AB stosw ; (L)eft Channel 4326 00001D68 66AB stosw ; (R)ight Channel 4327 4328 00001D6A 49 dec ecx 4329 00001D6B 7412 jz short lff44m2_3 4330 00001D6D 4D dec ebp 4331 00001D6E 75F4 jnz short lff44m2_2_2 4332 4333 00001D70 FE0D[A0240000] dec byte [faz] 4334 00001D76 74CF jz short lff44m2_9 4335 00001D78 BD0B000000 mov ebp, 11 4336 00001D7D EBD4 jmp short lff44m2_1 4337 4338 lff44m2_3: 4339 lff44s2_3: 4340 00001D7F E955F0FFFF jmp lff44_3 ; padfill 4341 ; (put zeros in the remain words of the buffer) 4342 lff44m2_7: 4343 lff44s2_7: 4344 00001D84 E971F0FFFF jmp lff44_5 ; error 4345 4346 load_44khz_stereo_16_bit: 4347 ; 18/11/2023 4348 00001D89 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 4349 ; last of the file? 4350 00001D90 7402 jz short lff44s2_0 ; no 4351 00001D92 F9 stc 4352 00001D93 C3 retn 4353 4354 lff44s2_0: 4355 ; 01/12/2024 4356 ; edi = audio buffer address 4357 00001D94 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 4358 ;mov edx, [loadsize] 4359 4360 ; esi = buffer address 4361 ;; edx = buffer size 4362 4363 ; load file into memory 4364 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001D99 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001D9F 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001DA1 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001DA7 B803000000 <1> mov eax, %1 100 <1> 101 00001DAC CD40 <1> int 40h 4365 00001DAE 72D4 jc short lff44s2_7 ; error ! 4366 4367 ; 01/12/2024 4368 00001DB0 A3[54810000] mov [count], eax 4369 ;;; 4370 ; 07/12/2024 4371 ;mov edi, audio_buffer 4372 ;;; 4373 00001DB5 C1E802 shr eax, 2 ; dword (left chan word + right chan word) 4374 00001DB8 7505 jnz short lff44s2_8 4375 00001DBA E932F0FFFF jmp lff44_eof 4376 4377 lff44s2_8: 4378 00001DBF 89C1 mov ecx, eax ; dword count 4379 lff44s2_9: 4380 00001DC1 BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 4381 00001DC6 C605[A0240000]02 mov byte [faz], 2 ; 2 steps/phase 4382 lff44s2_1: 4383 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 4384 ; 2:1:1:1:1:1:1:1:1:1:1:1 4385 00001DCD 66AD lodsw 4386 00001DCF 89C3 mov ebx, eax 4387 00001DD1 66AD lodsw 4388 ;mov dx, [esi] 4389 ;mov [next_val_l], dx 4390 ;mov dx, [esi+2] 4391 ; 26/11/2023 4392 00001DD3 8B16 mov edx, [esi] 4393 00001DD5 668915[9C240000] mov [next_val_l], dx 4394 00001DDC C1EA10 shr edx, 16 4395 00001DDF 49 dec ecx 4396 00001DE0 7509 jnz short lff44s2_2_1 4397 00001DE2 31D2 xor edx, edx ; 0 4398 00001DE4 668915[9C240000] mov [next_val_l], dx 4399 lff44s2_2_1: 4400 ; bx = [previous_val_l] 4401 ; ax = [previous_val_r] 4402 ; [next_val_l] 4403 ; dx = [next_val_r] 4404 00001DEB E8E1020000 call interpolating_2_16bit_stereo 4405 00001DF0 E38D jecxz lff44s2_3 4406 lff44s2_2_2: 4407 ;movsw ; (L)eft Channel 4408 ;movsw ; (R)ight Channel 4409 00001DF2 A5 movsd 4410 4411 00001DF3 49 dec ecx 4412 00001DF4 7489 jz short lff44s2_3 4413 00001DF6 4D dec ebp 4414 00001DF7 75F9 jnz short lff44s2_2_2 4415 4416 00001DF9 FE0D[A0240000] dec byte [faz] 4417 00001DFF 74C0 jz short lff44s2_9 4418 00001E01 BD0B000000 mov ebp, 11 4419 00001E06 EBC5 jmp short lff44s2_1 4420 4421 ; ..................... 4422 4423 ; 02/02/2025 4424 load_12khz_mono_8_bit: 4425 00001E08 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 4426 ; last of the file? 4427 00001E0F 7402 jz short lff12m_0 ; no 4428 00001E11 F9 stc 4429 00001E12 C3 retn 4430 4431 lff12m_0: 4432 ; edi = audio buffer address 4433 00001E13 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 4434 4435 ; load file into memory 4436 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001E18 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001E1E 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001E20 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001E26 B803000000 <1> mov eax, %1 100 <1> 101 00001E2B CD40 <1> int 40h 4437 00001E2D 7256 jc short lff12m_7 ; error ! 4438 4439 00001E2F A3[54810000] mov [count], eax 4440 4441 00001E34 21C0 and eax, eax 4442 00001E36 7505 jnz short lff12m_8 4443 00001E38 E9B4EFFFFF jmp lff12_eof 4444 4445 lff12m_8: 4446 00001E3D 89C1 mov ecx, eax ; byte count 4447 lff12m_1: 4448 ; original-interpolated-interpolated-interpolated 4449 00001E3F AC lodsb 4450 ; 02/02/2025 4451 00001E40 8A16 mov dl, [esi] 4452 00001E42 49 dec ecx 4453 00001E43 7502 jnz short lff12m_2 4454 00001E45 B280 mov dl, 80h 4455 lff12m_2: 4456 ; al = [previous_val] 4457 ; dl = [next_val] 4458 00001E47 E8C0030000 call interpolating_4_8bit_mono 4459 00001E4C E353 jecxz lff12m_3 4460 00001E4E EBEF jmp short lff12m_1 4461 4462 ; 02/02/2025 4463 load_12khz_stereo_8_bit: 4464 00001E50 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 4465 ; last of the file? 4466 00001E57 7402 jz short lff12s_0 ; no 4467 00001E59 F9 stc 4468 00001E5A C3 retn 4469 4470 lff12s_0: 4471 ; edi = audio buffer address 4472 00001E5B BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 4473 4474 ; load file into memory 4475 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001E60 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001E66 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001E68 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001E6E B803000000 <1> mov eax, %1 100 <1> 101 00001E73 CD40 <1> int 40h 4476 00001E75 720E jc short lff12s_7 ; error ! 4477 4478 00001E77 A3[54810000] mov [count], eax 4479 4480 00001E7C D1E8 shr eax, 1 4481 00001E7E 750A jnz short lff12s_8 4482 00001E80 E96CEFFFFF jmp lff12_eof 4483 4484 lff12m_7: 4485 lff12s_7: 4486 00001E85 E970EFFFFF jmp lff12_5 ; error 4487 4488 lff12s_8: 4489 00001E8A 89C1 mov ecx, eax ; word count 4490 lff12s_1: 4491 ; original-interpolated-interpolated-interpolated 4492 00001E8C 66AD lodsw 4493 ; 02/02/2025 4494 00001E8E 668B16 mov dx, [esi] 4495 00001E91 49 dec ecx 4496 00001E92 7504 jnz short lff12s_2 4497 00001E94 66BA8080 mov dx, 8080h 4498 lff12s_2: 4499 ; al = [previous_val_l] 4500 ; ah = [previous_val_r] 4501 ; dl = [next_val_l] 4502 ; dh = [next_val_r] 4503 00001E98 E8AE030000 call interpolating_4_8bit_stereo 4504 00001E9D E302 jecxz lff12s_3 4505 00001E9F EBEB jmp short lff12s_1 4506 4507 lff12m_3: 4508 lff12s_3: 4509 00001EA1 E933EFFFFF jmp lff12_3 ; padfill 4510 ; (put zeros in the remain words of the buffer) 4511 4512 ; 02/02/2025 4513 load_12khz_mono_16_bit: 4514 00001EA6 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 4515 ; last of the file? 4516 00001EAD 7402 jz short lff12m2_0 ; no 4517 00001EAF F9 stc 4518 00001EB0 C3 retn 4519 4520 lff12m2_0: 4521 ; edi = audio buffer address 4522 00001EB1 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 4523 4524 ; load file into memory 4525 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001EB6 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001EBC 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001EBE 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001EC4 B803000000 <1> mov eax, %1 100 <1> 101 00001EC9 CD40 <1> int 40h 4526 00001ECB 7223 jc short lff12m2_7 ; error ! 4527 4528 00001ECD A3[54810000] mov [count], eax 4529 4530 00001ED2 D1E8 shr eax, 1 4531 00001ED4 7505 jnz short lff12m2_8 4532 00001ED6 E916EFFFFF jmp lff12_eof 4533 4534 lff12m2_8: 4535 00001EDB 89C1 mov ecx, eax ; word count 4536 lff12m2_1: 4537 ; original-interpolated-interpolated-interpolated 4538 00001EDD 66AD lodsw 4539 ; 02/02/2025 4540 00001EDF 668B16 mov dx, [esi] 4541 00001EE2 49 dec ecx 4542 00001EE3 7502 jnz short lff12m2_2 4543 00001EE5 31D2 xor edx, edx 4544 lff12m2_2: 4545 ; ax = [previous_val] 4546 ; dx = [next_val] 4547 00001EE7 E8F6040000 call interpolating_4_16bit_mono 4548 00001EEC E3B3 jecxz lff12m_3 4549 00001EEE EBED jmp short lff12m2_1 4550 4551 lff12m2_7: 4552 lff12s2_7: 4553 00001EF0 E905EFFFFF jmp lff12_5 ; error 4554 4555 ; 02/02/2025 4556 load_12khz_stereo_16_bit: 4557 00001EF5 F605[CE800000]01 test byte [flags], ENDOFFILE ; have we already read the 4558 ; last of the file? 4559 00001EFC 7402 jz short lff12s2_0 ; no 4560 00001EFE F9 stc 4561 00001EFF C3 retn 4562 4563 lff12s2_0: 4564 ; edi = audio buffer address 4565 00001F00 BE[00900100] mov esi, temp_buffer ; temporary buffer for wav data 4566 4567 ; load file into memory 4568 sys _read, [filehandle], esi, [loadsize] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00001F05 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00001F0B 89F1 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00001F0D 8B15[44810000] <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00001F13 B803000000 <1> mov eax, %1 100 <1> 101 00001F18 CD40 <1> int 40h 4569 00001F1A 72D4 jc short lff12s2_7 ; error ! 4570 4571 00001F1C A3[54810000] mov [count], eax 4572 4573 00001F21 C1E802 shr eax, 2 ; dword (left chan word + right chan word) 4574 00001F24 750A jnz short lff12s2_8 4575 00001F26 E9C6EEFFFF jmp lff12_eof 4576 4577 lff12m2_3: 4578 lff12s2_3: 4579 00001F2B E9A9EEFFFF jmp lff12_3 ; padfill 4580 ; (put zeros in the remain words of the buffer) 4581 4582 lff12s2_8: 4583 00001F30 89C1 mov ecx, eax ; dword count 4584 lff12s2_1: 4585 ; original-interpolated-interpolated-interpolated 4586 00001F32 66AD lodsw 4587 00001F34 89C3 mov ebx, eax 4588 00001F36 66AD lodsw 4589 00001F38 8B16 mov edx, [esi] 4590 00001F3A 49 dec ecx 4591 00001F3B 7502 jnz short lff12s2_2 4592 00001F3D 31D2 xor edx, edx ; 0 4593 lff12s2_2: 4594 ;mov [next_val_l], dx 4595 ;shr edx, 16 4596 ;mov [next_val_r], dx 4597 ; 02/02/2025 4598 00001F3F 8915[9C240000] mov [next_val_l], edx 4599 4600 ; bx = [previous_val_l] 4601 ; ax = [previous_val_r] 4602 ; [next_val_l] 4603 ; [next_val_r] 4604 00001F45 E8D1040000 call interpolating_4_16bit_stereo 4605 00001F4A E3DF jecxz lff12s2_3 4606 00001F4C EBE4 jmp short lff12s2_1 4607 4608 ; ..................... 4609 4610 interpolating_3_8bit_mono: 4611 ; 02/02/2025 4612 ; 16/11/2023 4613 ; al = [previous_val] 4614 ; dl = [next_val] 4615 ; original-interpolated-interpolated 4616 00001F4E 88C3 mov bl, al 4617 00001F50 2C80 sub al, 80h 4618 00001F52 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4619 00001F56 66AB stosw ; original sample (L) 4620 00001F58 66AB stosw ; original sample (R) 4621 00001F5A 88D8 mov al, bl 4622 00001F5C 00D0 add al, dl 4623 00001F5E D0D8 rcr al, 1 4624 00001F60 88C7 mov bh, al ; interpolated middle (temporary) 4625 00001F62 00D8 add al, bl 4626 00001F64 D0D8 rcr al, 1 4627 00001F66 2C80 sub al, 80h 4628 00001F68 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4629 00001F6C 66AB stosw ; interpolated sample 1 (L) 4630 00001F6E 66AB stosw ; interpolated sample 1 (R) 4631 00001F70 88F8 mov al, bh 4632 00001F72 00D0 add al, dl ; [next_val] 4633 00001F74 D0D8 rcr al, 1 4634 ; 02/02/2025 4635 00001F76 2C80 sub al, 80h 4636 00001F78 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4637 00001F7C 66AB stosw ; interpolated sample 2 (L) 4638 00001F7E 66AB stosw ; interpolated sample 2 (R) 4639 00001F80 C3 retn 4640 4641 interpolating_3_8bit_stereo: 4642 ; 02/02/2025 4643 ; 16/11/2023 4644 ; al = [previous_val_l] 4645 ; ah = [previous_val_r] 4646 ; dl = [next_val_l] 4647 ; dh = [next_val_r] 4648 ; original-interpolated-interpolated 4649 00001F81 89C3 mov ebx, eax 4650 00001F83 2C80 sub al, 80h 4651 00001F85 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4652 00001F89 66AB stosw ; original sample (L) 4653 00001F8B 88F8 mov al, bh 4654 00001F8D 2C80 sub al, 80h 4655 00001F8F 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4656 00001F93 66AB stosw ; original sample (R) 4657 00001F95 88D8 mov al, bl 4658 00001F97 00D0 add al, dl ; [next_val_l] 4659 00001F99 D0D8 rcr al, 1 4660 00001F9B 50 push eax ; * ; al = interpolated middle (L) (temporary) 4661 00001F9C 00D8 add al, bl ; [previous_val_l] 4662 00001F9E D0D8 rcr al, 1 4663 00001FA0 2C80 sub al, 80h 4664 00001FA2 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4665 00001FA6 66AB stosw ; interpolated sample 1 (L) 4666 00001FA8 88F8 mov al, bh 4667 00001FAA 00F0 add al, dh ; [next_val_r] 4668 00001FAC D0D8 rcr al, 1 4669 00001FAE 50 push eax ; ** ; al = interpolated middle (R) (temporary) 4670 00001FAF 00F8 add al, bh ; [previous_val_r] 4671 00001FB1 D0D8 rcr al, 1 4672 00001FB3 2C80 sub al, 80h 4673 00001FB5 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4674 00001FB9 66AB stosw ; interpolated sample 1 (R) 4675 00001FBB 5B pop ebx ; ** 4676 00001FBC 58 pop eax ; * 4677 00001FBD 00D0 add al, dl ; [next_val_l] 4678 00001FBF D0D8 rcr al, 1 4679 ; 02/02/2025 4680 00001FC1 2C80 sub al, 80h 4681 00001FC3 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4682 00001FC7 66AB stosw ; interpolated sample 2 (L) 4683 00001FC9 88D8 mov al, bl 4684 00001FCB 00F0 add al, dh ; [next_val_r] 4685 00001FCD D0D8 rcr al, 1 4686 ; 02/02/2025 4687 00001FCF 2C80 sub al, 80h 4688 00001FD1 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4689 00001FD5 66AB stosw ; interpolated sample 2 (R) 4690 00001FD7 C3 retn 4691 4692 interpolating_2_8bit_mono: 4693 ; 16/11/2023 4694 ; al = [previous_val] 4695 ; dl = [next_val] 4696 ; original-interpolated 4697 00001FD8 88C3 mov bl, al 4698 00001FDA 2C80 sub al, 80h 4699 00001FDC 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4700 00001FE0 66AB stosw ; original sample (L) 4701 00001FE2 66AB stosw ; original sample (R) 4702 00001FE4 88D8 mov al, bl 4703 00001FE6 00D0 add al, dl 4704 00001FE8 D0D8 rcr al, 1 4705 00001FEA 2C80 sub al, 80h 4706 00001FEC 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4707 00001FF0 66AB stosw ; interpolated sample (L) 4708 00001FF2 66AB stosw ; interpolated sample (R) 4709 00001FF4 C3 retn 4710 4711 interpolating_2_8bit_stereo: 4712 ; 16/11/2023 4713 ; al = [previous_val_l] 4714 ; ah = [previous_val_r] 4715 ; dl = [next_val_l] 4716 ; dh = [next_val_r] 4717 ; original-interpolated 4718 00001FF5 89C3 mov ebx, eax 4719 00001FF7 2C80 sub al, 80h 4720 00001FF9 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4721 00001FFD 66AB stosw ; original sample (L) 4722 00001FFF 88F8 mov al, bh 4723 00002001 2C80 sub al, 80h 4724 00002003 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4725 00002007 66AB stosw ; original sample (R) 4726 00002009 88D8 mov al, bl ; [previous_val_l] 4727 0000200B 00D0 add al, dl ; [next_val_l] 4728 0000200D D0D8 rcr al, 1 4729 0000200F 2C80 sub al, 80h 4730 00002011 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4731 00002015 66AB stosw ; interpolated sample (L) 4732 00002017 88F8 mov al, bh 4733 00002019 00F0 add al, dh ; [next_val_r] 4734 0000201B D0D8 rcr al, 1 4735 0000201D 2C80 sub al, 80h 4736 0000201F 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4737 00002023 66AB stosw ; interpolated sample (R) 4738 00002025 C3 retn 4739 4740 interpolating_3_16bit_mono: 4741 ; 16/11/2023 4742 ; ax = [previous_val] 4743 ; dx = [next_val] 4744 ; original-interpolated-interpolated 4745 4746 00002026 66AB stosw ; original sample (L) 4747 00002028 66AB stosw ; original sample (R) 4748 0000202A 80C480 add ah, 80h ; convert sound level 0 to 65535 format 4749 0000202D 50 push eax ; * ; [previous_val] 4750 0000202E 80C680 add dh, 80h 4751 00002031 6601D0 add ax, dx 4752 00002034 66D1D8 rcr ax, 1 4753 00002037 5B pop ebx ; * 4754 00002038 93 xchg ebx, eax ; bx = interpolated middle (temporary) 4755 00002039 6601D8 add ax, bx ; [previous_val] + interpolated middle 4756 0000203C 66D1D8 rcr ax, 1 4757 0000203F 80EC80 sub ah, 80h ; -32768 to +32767 format again 4758 00002042 66AB stosw ; interpolated sample 1 (L) 4759 00002044 66AB stosw ; interpolated sample 1 (R) 4760 00002046 89D8 mov eax, ebx 4761 00002048 6601D0 add ax, dx ; interpolated middle + [next_val] 4762 0000204B 66D1D8 rcr ax, 1 4763 0000204E 80EC80 sub ah, 80h ; -32768 to +32767 format again 4764 00002051 66AB stosw ; interpolated sample 2 (L) 4765 00002053 66AB stosw ; interpolated sample 2 (R) 4766 00002055 C3 retn 4767 4768 interpolating_3_16bit_stereo: 4769 ; 16/11/2023 4770 ; bx = [previous_val_l] 4771 ; ax = [previous_val_r] 4772 ; [next_val_l] 4773 ; dx = [next_val_r] 4774 ; original-interpolated-interpolated 4775 4776 00002056 93 xchg eax, ebx 4777 00002057 66AB stosw ; original sample (L) 4778 00002059 93 xchg eax, ebx 4779 0000205A 66AB stosw ; original sample (R) 4780 0000205C 80C480 add ah, 80h ; convert sound level 0 to 65535 format 4781 0000205F 50 push eax ; * ; [previous_val_r] 4782 00002060 80C780 add bh, 80h 4783 00002063 8005[9D240000]80 add byte [next_val_l+1], 80h 4784 0000206A 66A1[9C240000] mov ax, [next_val_l] 4785 00002070 6601D8 add ax, bx ; [previous_val_l] 4786 00002073 66D1D8 rcr ax, 1 4787 00002076 93 xchg eax, ebx ; ax = [previous_val_l] 4788 00002077 6601D8 add ax, bx ; bx = interpolated middle (L) 4789 0000207A 66D1D8 rcr ax, 1 4790 0000207D 80EC80 sub ah, 80h ; -32768 to +32767 format again 4791 00002080 66AB stosw ; interpolated sample 1 (L) 4792 00002082 58 pop eax ; * 4793 00002083 80C680 add dh, 80h ; convert sound level 0 to 65535 format 4794 00002086 52 push edx ; * ; [next_val_r] 4795 00002087 92 xchg eax, edx 4796 00002088 6601D0 add ax, dx ; [next_val_r] + [previous_val_r] 4797 0000208B 66D1D8 rcr ax, 1 ; / 2 4798 0000208E 50 push eax ; ** ; interpolated middle (R) 4799 0000208F 6601D0 add ax, dx ; + [previous_val_r] 4800 00002092 66D1D8 rcr ax, 1 4801 00002095 80EC80 sub ah, 80h ; -32768 to +32767 format again 4802 00002098 66AB stosw ; interpolated sample 1 (R) 4803 0000209A 66A1[9C240000] mov ax, [next_val_l] 4804 000020A0 6601D8 add ax, bx ; + interpolated middle (L) 4805 000020A3 66D1D8 rcr ax, 1 4806 000020A6 80EC80 sub ah, 80h ; -32768 to +32767 format again 4807 000020A9 66AB stosw ; interpolated sample 2 (L) 4808 000020AB 58 pop eax ; ** 4809 000020AC 5A pop edx ; * 4810 000020AD 6601D0 add ax, dx ; interpolated middle + [next_val_r] 4811 000020B0 66D1D8 rcr ax, 1 ; / 2 4812 000020B3 80EC80 sub ah, 80h ; -32768 to +32767 format again 4813 000020B6 66AB stosw ; interpolated sample 2 (L) 4814 000020B8 C3 retn 4815 4816 interpolating_2_16bit_mono: 4817 ; 16/11/2023 4818 ; ax = [previous_val] 4819 ; dx = [next_val] 4820 ; original-interpolated 4821 4822 000020B9 66AB stosw ; original sample (L) 4823 000020BB 66AB stosw ; original sample (R) 4824 000020BD 80C480 add ah, 80h ; convert sound level 0 to 65535 format 4825 000020C0 80C680 add dh, 80h 4826 000020C3 6601D0 add ax, dx 4827 000020C6 66D1D8 rcr ax, 1 4828 000020C9 80EC80 sub ah, 80h ; -32768 to +32767 format again 4829 000020CC 66AB stosw ; interpolated sample (L) 4830 000020CE 66AB stosw ; interpolated sample (R) 4831 000020D0 C3 retn 4832 4833 interpolating_2_16bit_stereo: 4834 ; 17/01/2025 4835 ; 16/11/2023 4836 ; bx = [previous_val_l] 4837 ; ax = [previous_val_r] 4838 ; [next_val_l] 4839 ; dx = [next_val_r] 4840 ; original-interpolated 4841 4842 000020D1 93 xchg eax, ebx 4843 000020D2 66AB stosw ; original sample (L) 4844 000020D4 93 xchg eax, ebx 4845 000020D5 66AB stosw ; original sample (R) 4846 000020D7 80C480 add ah, 80h ; convert sound level 0 to 65535 format 4847 000020DA 80C680 add dh, 80h 4848 000020DD 6601D0 add ax, dx ; [previous_val_r] + [next_val_r] 4849 000020E0 66D1D8 rcr ax, 1 ; / 2 4850 ; 17/01/2025 4851 000020E3 80EC80 sub ah, 80h ; -32768 to +32767 format again 4852 ;push eax ; * ; interpolated sample (R) 4853 ; 17/01/2025 4854 000020E6 C1E010 shl eax, 16 4855 000020E9 66A1[9C240000] mov ax, [next_val_l] 4856 000020EF 80C480 add ah, 80h 4857 000020F2 80C780 add bh, 80h 4858 000020F5 6601D8 add ax, bx ; [next_val_l] + [previous_val_l] 4859 000020F8 66D1D8 rcr ax, 1 ; / 2 4860 000020FB 80EC80 sub ah, 80h ; -32768 to +32767 format again 4861 ; 17/01/2025 4862 ;stosw ; interpolated sample (L) 4863 ;pop eax ; * 4864 ;sub ah, 80h ; -32768 to +32767 format again 4865 ;stosw ; interpolated sample (R) 4866 ; 17/01/2025 4867 000020FE AB stosd 4868 000020FF C3 retn 4869 4870 interpolating_5_8bit_mono: 4871 ; 17/11/2023 4872 ; al = [previous_val] 4873 ; dl = [next_val] 4874 ; original-interpltd-interpltd-interpltd-interpltd 4875 00002100 88C3 mov bl, al 4876 00002102 2C80 sub al, 80h 4877 00002104 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4878 00002108 66AB stosw ; original sample (L) 4879 0000210A 66AB stosw ; original sample (R) 4880 0000210C 88D8 mov al, bl 4881 0000210E 00D0 add al, dl 4882 00002110 D0D8 rcr al, 1 4883 00002112 88C7 mov bh, al ; interpolated middle (temporary) 4884 00002114 00D8 add al, bl ; [previous_val] 4885 00002116 D0D8 rcr al, 1 4886 00002118 88C6 mov dh, al ; interpolated 1st quarter (temporary) 4887 0000211A 00D8 add al, bl 4888 0000211C D0D8 rcr al, 1 4889 0000211E 2C80 sub al, 80h 4890 00002120 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4891 00002124 66AB stosw ; interpolated sample 1 (L) 4892 00002126 66AB stosw ; interpolated sample 1 (R) 4893 00002128 88F8 mov al, bh 4894 0000212A 00F0 add al, dh 4895 0000212C D0D8 rcr al, 1 4896 0000212E 2C80 sub al, 80h 4897 00002130 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4898 00002134 66AB stosw ; interpolated sample 2 (L) 4899 00002136 66AB stosw ; interpolated sample 2 (R) 4900 00002138 88F8 mov al, bh 4901 0000213A 00D0 add al, dl ; [next_val] 4902 0000213C D0D8 rcr al, 1 4903 0000213E 88C6 mov dh, al ; interpolated 3rd quarter (temporary) 4904 00002140 00F8 add al, bh 4905 00002142 D0D8 rcr al, 1 4906 00002144 2C80 sub al, 80h 4907 00002146 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4908 0000214A 66AB stosw ; interpolated sample 3 (L) 4909 0000214C 66AB stosw ; interpolated sample 3 (R) 4910 0000214E 88F0 mov al, dh 4911 00002150 00D0 add al, dl 4912 00002152 D0D8 rcr al, 1 4913 00002154 2C80 sub al, 80h 4914 00002156 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4915 0000215A 66AB stosw ; interpolated sample 4 (L) 4916 0000215C 66AB stosw ; interpolated sample 4 (R) 4917 0000215E C3 retn 4918 4919 interpolating_5_8bit_stereo: 4920 ; 17/11/2023 4921 ; al = [previous_val_l] 4922 ; ah = [previous_val_r] 4923 ; dl = [next_val_l] 4924 ; dh = [next_val_r] 4925 ; original-interpltd-interpltd-interpltd-interpltd 4926 0000215F 89C3 mov ebx, eax 4927 00002161 2C80 sub al, 80h 4928 00002163 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4929 00002167 66AB stosw ; original sample (L) 4930 00002169 88F8 mov al, bh 4931 0000216B 2C80 sub al, 80h 4932 0000216D 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4933 00002171 66AB stosw ; original sample (R) 4934 00002173 52 push edx ; * 4935 00002174 88D8 mov al, bl 4936 00002176 00D0 add al, dl ; [next_val_l] 4937 00002178 D0D8 rcr al, 1 4938 0000217A 50 push eax ; ** ; al = interpolated middle (L) (temporary) 4939 0000217B 00D8 add al, bl ; [previous_val_l] 4940 0000217D D0D8 rcr al, 1 4941 0000217F 86D8 xchg al, bl 4942 00002181 00D8 add al, bl ; bl = interpolated 1st quarter (L) (temp) 4943 00002183 D0D8 rcr al, 1 4944 00002185 2C80 sub al, 80h 4945 00002187 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4946 0000218B 66AB stosw ; interpolated sample 1 (L) 4947 0000218D 88F8 mov al, bh 4948 0000218F 00F0 add al, dh ; [next_val_r] 4949 00002191 D0D8 rcr al, 1 4950 00002193 50 push eax ; *** ; al = interpolated middle (R) (temporary) 4951 00002194 00F8 add al, bh ; [previous_val_r] 4952 00002196 D0D8 rcr al, 1 4953 00002198 86F8 xchg al, bh 4954 0000219A 00F8 add al, bh ; bh = interpolated 1st quarter (R) (temp) 4955 0000219C D0D8 rcr al, 1 4956 0000219E 2C80 sub al, 80h 4957 000021A0 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4958 000021A4 66AB stosw ; interpolated sample 1 (R) 4959 000021A6 5A pop edx ; *** 4960 000021A7 58 pop eax ; ** ; al = interpolated middle (L) (temporary) 4961 000021A8 86D8 xchg al, bl ; al = interpolated 1st quarter (L) (temp) 4962 000021AA 00D8 add al, bl ; bl = interpolated middle (L) (temporary) 4963 000021AC D0D8 rcr al, 1 4964 000021AE 2C80 sub al, 80h 4965 000021B0 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4966 000021B4 66AB stosw ; interpolated sample 2 (L) 4967 000021B6 88D0 mov al, dl ; interpolated middle (R) (temporary) 4968 000021B8 86F8 xchg al, bh ; al = interpolated 1st quarter (R) (temp) 4969 000021BA 00F8 add al, bh ; bh = interpolated middle (R) (temporary) 4970 000021BC D0D8 rcr al, 1 4971 000021BE 2C80 sub al, 80h 4972 000021C0 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4973 000021C4 66AB stosw ; interpolated sample 2 (R) 4974 000021C6 5A pop edx ; * 4975 000021C7 88D8 mov al, bl ; interpolated middle (L) (temporary) 4976 000021C9 00D0 add al, dl ; [next_val_l] 4977 000021CB D0D8 rcr al, 1 4978 000021CD 86D8 xchg al, bl ; al = interpolated middle (R) (temporary) 4979 000021CF 00D8 add al, bl ; bl = interpolated 3rd quarter (L) (temp) 4980 000021D1 D0D8 rcr al, 1 4981 000021D3 2C80 sub al, 80h 4982 000021D5 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4983 000021D9 66AB stosw ; interpolated sample 3 (L) 4984 000021DB 88F8 mov al, bh 4985 000021DD 00F0 add al, dh ; interpolated middle (R) + [next_val_r] 4986 000021DF D0D8 rcr al, 1 4987 000021E1 86F8 xchg al, bh ; al = interpolated middle (R) 4988 000021E3 00F8 add al, bh ; bh = interpolated 3rd quarter (R) (temp) 4989 000021E5 D0D8 rcr al, 1 4990 000021E7 2C80 sub al, 80h 4991 000021E9 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4992 000021ED 66AB stosw ; interpolated sample 3 (R) 4993 000021EF 88D8 mov al, bl 4994 000021F1 00D0 add al, dl ; [next_val_l] 4995 000021F3 D0D8 rcr al, 1 4996 000021F5 2C80 sub al, 80h 4997 000021F7 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4998 000021FB 66AB stosw ; interpolated sample 4 (L) 4999 000021FD 88F8 mov al, bh 5000 000021FF 00F0 add al, dh ; [next_val_r] 5001 00002201 D0D8 rcr al, 1 5002 00002203 2C80 sub al, 80h 5003 00002205 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5004 00002209 66AB stosw ; interpolated sample 4 (R) 5005 0000220B C3 retn 5006 5007 interpolating_4_8bit_mono: 5008 ; 17/11/2023 5009 ; al = [previous_val] 5010 ; dl = [next_val] 5011 ; original-interpolated-interpolated-interpolated 5012 0000220C 88C3 mov bl, al 5013 0000220E 2C80 sub al, 80h 5014 00002210 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5015 00002214 66AB stosw ; original sample (L) 5016 00002216 66AB stosw ; original sample (R) 5017 00002218 88D8 mov al, bl 5018 0000221A 00D0 add al, dl 5019 0000221C D0D8 rcr al, 1 5020 0000221E 86D8 xchg al, bl ; al = [previous_val] 5021 00002220 00D8 add al, bl ; bl = interpolated middle (sample 2) 5022 00002222 D0D8 rcr al, 1 5023 00002224 2C80 sub al, 80h 5024 00002226 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5025 0000222A 66AB stosw ; interpolated sample 1 (L) 5026 0000222C 66AB stosw ; interpolated sample 1 (R) 5027 0000222E 88D8 mov al, bl ; interpolated middle (sample 2) 5028 00002230 2C80 sub al, 80h 5029 00002232 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5030 00002236 66AB stosw ; interpolated sample 2 (L) 5031 00002238 66AB stosw ; interpolated sample 2 (R) 5032 0000223A 88D8 mov al, bl 5033 0000223C 00D0 add al, dl ; [next_val] 5034 0000223E D0D8 rcr al, 1 5035 00002240 2C80 sub al, 80h 5036 00002242 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5037 00002246 66AB stosw ; interpolated sample 3 (L) 5038 00002248 66AB stosw ; interpolated sample 3 (R) 5039 0000224A C3 retn 5040 5041 interpolating_4_8bit_stereo: 5042 ; 17/11/2023 5043 ; al = [previous_val_l] 5044 ; ah = [previous_val_r] 5045 ; dl = [next_val_l] 5046 ; dh = [next_val_r] 5047 ; original-interpolated-interpolated-interpolated 5048 0000224B 89C3 mov ebx, eax 5049 0000224D 2C80 sub al, 80h 5050 0000224F 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5051 00002253 66AB stosw ; original sample (L) 5052 00002255 88F8 mov al, bh 5053 00002257 2C80 sub al, 80h 5054 00002259 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5055 0000225D 66AB stosw ; original sample (R) 5056 0000225F 88D8 mov al, bl 5057 00002261 00D0 add al, dl ; [next_val_l] 5058 00002263 D0D8 rcr al, 1 5059 00002265 86D8 xchg al, bl ; al = [previous_val_l] 5060 00002267 00D8 add al, bl ; bl = interpolated middle (L) (sample 2) 5061 00002269 D0D8 rcr al, 1 5062 0000226B 2C80 sub al, 80h 5063 0000226D 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5064 00002271 66AB stosw ; interpolated sample 1 (L) 5065 00002273 88F8 mov al, bh 5066 00002275 00F0 add al, dh ; [next_val_r] 5067 00002277 D0D8 rcr al, 1 5068 00002279 86F8 xchg al, bh ; al = [previous_val_h] 5069 0000227B 00F8 add al, bh ; bh = interpolated middle (R) (sample 2) 5070 0000227D D0D8 rcr al, 1 5071 0000227F 2C80 sub al, 80h 5072 00002281 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5073 00002285 66AB stosw ; interpolated sample 1 (R) 5074 00002287 88D8 mov al, bl ; interpolated middle (L) (sample 2) 5075 00002289 2C80 sub al, 80h 5076 0000228B 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5077 0000228F 66AB stosw ; interpolated sample 2 (L) 5078 00002291 88F8 mov al, bh ; interpolated middle (L) (sample 2) 5079 00002293 2C80 sub al, 80h 5080 00002295 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5081 00002299 66AB stosw ; interpolated sample 2 (L) 5082 0000229B 88D8 mov al, bl 5083 0000229D 00D0 add al, dl ; [next_val_l] 5084 0000229F D0D8 rcr al, 1 5085 000022A1 2C80 sub al, 80h 5086 000022A3 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5087 000022A7 66AB stosw ; interpolated sample 3 (L) 5088 000022A9 88F8 mov al, bh 5089 000022AB 00F0 add al, dh ; [next_val_r] 5090 000022AD D0D8 rcr al, 1 5091 000022AF 2C80 sub al, 80h 5092 000022B1 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 5093 000022B5 66AB stosw ; interpolated sample 3 (R) 5094 000022B7 C3 retn 5095 5096 interpolating_5_16bit_mono: 5097 ; 18/11/2023 5098 ; ax = [previous_val] 5099 ; dx = [next_val] 5100 ; original-interpltd-interpltd-interpltd-interpltd 5101 000022B8 66AB stosw ; original sample (L) 5102 000022BA 66AB stosw ; original sample (R) 5103 000022BC 80C480 add ah, 80h ; convert sound level 0 to 65535 format 5104 000022BF 89C3 mov ebx, eax ; [previous_val] 5105 000022C1 80C680 add dh, 80h 5106 000022C4 6601D0 add ax, dx 5107 000022C7 66D1D8 rcr ax, 1 5108 000022CA 50 push eax ; * ; interpolated middle (temporary) 5109 000022CB 6601D8 add ax, bx ; interpolated middle + [previous_val] 5110 000022CE 66D1D8 rcr ax, 1 5111 000022D1 50 push eax ; ** ; interpolated 1st quarter (temporary) 5112 000022D2 6601D8 add ax, bx ; 1st quarter + [previous_val] 5113 000022D5 66D1D8 rcr ax, 1 5114 000022D8 80EC80 sub ah, 80h ; -32768 to +32767 format again 5115 000022DB 66AB stosw ; interpolated sample 1 (L) 5116 000022DD 66AB stosw ; interpolated sample 1 (R) 5117 000022DF 58 pop eax ; ** 5118 000022E0 5B pop ebx ; * 5119 000022E1 6601D8 add ax, bx ; 1st quarter + middle 5120 000022E4 66D1D8 rcr ax, 1 ; / 2 5121 000022E7 80EC80 sub ah, 80h ; -32768 to +32767 format again 5122 000022EA 66AB stosw ; interpolated sample 2 (L) 5123 000022EC 66AB stosw ; interpolated sample 2 (R) 5124 000022EE 89D8 mov eax, ebx 5125 000022F0 6601D0 add ax, dx ; interpolated middle + [next_val] 5126 000022F3 66D1D8 rcr ax, 1 5127 000022F6 50 push eax ; * ; interpolated 3rd quarter (temporary) 5128 000022F7 6601D8 add ax, bx ; + interpolated middle 5129 000022FA 66D1D8 rcr ax, 1 5130 000022FD 80EC80 sub ah, 80h ; -32768 to +32767 format again 5131 00002300 66AB stosw ; interpolated sample 3 (L) 5132 00002302 66AB stosw ; interpolated sample 3 (R) 5133 00002304 58 pop eax ; * 5134 00002305 6601D0 add ax, dx ; 3rd quarter + [next_val] 5135 00002308 66D1D8 rcr ax, 1 ; / 2 5136 0000230B 80EC80 sub ah, 80h ; -32768 to +32767 format again 5137 0000230E 66AB stosw ; interpolated sample 4 (L) 5138 00002310 66AB stosw ; interpolated sample 4 (R) 5139 00002312 C3 retn 5140 5141 interpolating_5_16bit_stereo: 5142 ; 18/11/2023 5143 ; bx = [previous_val_l] 5144 ; ax = [previous_val_r] 5145 ; [next_val_l] 5146 ; [next_val_r] 5147 ; original-interpltd-interpltd-interpltd-interpltd 5148 00002313 51 push ecx ; ! 5149 00002314 93 xchg eax, ebx 5150 00002315 66AB stosw ; original sample (L) 5151 00002317 93 xchg eax, ebx 5152 00002318 66AB stosw ; original sample (R) 5153 0000231A 80C480 add ah, 80h ; convert sound level 0 to 65535 format 5154 0000231D 50 push eax ; * ; [previous_val_r] 5155 0000231E 80C780 add bh, 80h 5156 00002321 8005[9D240000]80 add byte [next_val_l+1], 80h 5157 00002328 66A1[9C240000] mov ax, [next_val_l] 5158 0000232E 6601D8 add ax, bx ; [previous_val_l] 5159 00002331 66D1D8 rcr ax, 1 5160 00002334 89C1 mov ecx, eax ; interpolated middle (L) 5161 00002336 6601D8 add ax, bx 5162 00002339 66D1D8 rcr ax, 1 5163 0000233C 89C2 mov edx, eax ; interpolated 1st quarter (L) 5164 0000233E 6601D8 add ax, bx ; [previous_val_l] 5165 00002341 66D1D8 rcr ax, 1 5166 00002344 80EC80 sub ah, 80h ; -32768 to +32767 format again 5167 00002347 66AB stosw ; interpolated sample 1 (L) 5168 00002349 89C8 mov eax, ecx 5169 0000234B 6601D0 add ax, dx ; middle (L) + 1st quarter (L) 5170 0000234E 66D1D8 rcr ax, 1 ; / 2 5171 00002351 89C3 mov ebx, eax ; interpolated sample 2 (L) 5172 00002353 5A pop edx ; * ; [previous_val_r] 5173 00002354 89D0 mov eax, edx 5174 00002356 8005[9F240000]80 add byte [next_val_r+1], 80h 5175 0000235D 660305[9E240000] add ax, [next_val_r] 5176 00002364 66D1D8 rcr ax, 1 5177 00002367 50 push eax ; * ; interpolated middle (R) 5178 00002368 6601D0 add ax, dx 5179 0000236B 66D1D8 rcr ax, 1 5180 0000236E 50 push eax ; ** ; interpolated 1st quarter (R) 5181 0000236F 6601D0 add ax, dx ; [previous_val_r] 5182 00002372 66D1D8 rcr ax, 1 5183 00002375 80EC80 sub ah, 80h ; -32768 to +32767 format again 5184 00002378 66AB stosw ; interpolated sample 1 (R) 5185 0000237A 89D8 mov eax, ebx 5186 0000237C 80EC80 sub ah, 80h ; -32768 to +32767 format again 5187 0000237F 66AB stosw ; interpolated sample 2 (L) 5188 00002381 58 pop eax ; ** 5189 00002382 5A pop edx ; * 5190 00002383 6601D0 add ax, dx ; 1st quarter (R) + middle (R) 5191 00002386 66D1D8 rcr ax, 1 ; / 2 5192 00002389 80EC80 sub ah, 80h ; -32768 to +32767 format again 5193 0000238C 66AB stosw ; interpolated sample 2 (R) 5194 0000238E 89C8 mov eax, ecx 5195 00002390 660305[9C240000] add ax, [next_val_l] 5196 00002397 66D1D8 rcr ax, 1 5197 0000239A 50 push eax ; * ; interpolated 3rd quarter (L) 5198 0000239B 6601C8 add ax, cx ; interpolated middle (L) 5199 0000239E 66D1D8 rcr ax, 1 5200 000023A1 80EC80 sub ah, 80h ; -32768 to +32767 format again 5201 000023A4 66AB stosw ; interpolated sample 3 (L) 5202 000023A6 89D0 mov eax, edx 5203 000023A8 660305[9E240000] add ax, [next_val_r] 5204 000023AF 66D1D8 rcr ax, 1 5205 000023B2 50 push eax ; ** ; interpolated 3rd quarter (R) 5206 000023B3 6601D0 add ax, dx ; interpolated middle (R) 5207 000023B6 66D1D8 rcr ax, 1 5208 000023B9 80EC80 sub ah, 80h ; -32768 to +32767 format again 5209 000023BC 66AB stosw ; interpolated sample 3 (R) 5210 000023BE 5B pop ebx ; ** 5211 000023BF 58 pop eax ; * 5212 000023C0 660305[9C240000] add ax, [next_val_l] 5213 000023C7 66D1D8 rcr ax, 1 5214 000023CA 80EC80 sub ah, 80h ; -32768 to +32767 format again 5215 000023CD 66AB stosw ; interpolated sample 4 (L) 5216 000023CF 89D8 mov eax, ebx 5217 000023D1 660305[9E240000] add ax, [next_val_r] 5218 000023D8 66D1D8 rcr ax, 1 5219 000023DB 80EC80 sub ah, 80h ; -32768 to +32767 format again 5220 000023DE 66AB stosw ; interpolated sample 4 (R) 5221 000023E0 59 pop ecx ; ! 5222 000023E1 C3 retn 5223 5224 interpolating_4_16bit_mono: 5225 ; 18/11/2023 5226 ; ax = [previous_val] 5227 ; dx = [next_val] 5228 ; 02/02/2025 5229 ; original-interpolated-interpolated-interpolated 5230 5231 000023E2 66AB stosw ; original sample (L) 5232 000023E4 66AB stosw ; original sample (R) 5233 000023E6 80C480 add ah, 80h ; convert sound level 0 to 65535 format 5234 000023E9 89C3 mov ebx, eax ; [previous_val] 5235 000023EB 80C680 add dh, 80h 5236 000023EE 6601D0 add ax, dx ; [previous_val] + [next_val] 5237 000023F1 66D1D8 rcr ax, 1 5238 000023F4 93 xchg eax, ebx 5239 000023F5 6601D8 add ax, bx ; [previous_val] + interpolated middle 5240 000023F8 66D1D8 rcr ax, 1 5241 000023FB 80EC80 sub ah, 80h ; -32768 to +32767 format again 5242 000023FE 66AB stosw ; interpolated sample 1 (L) 5243 00002400 66AB stosw ; interpolated sample 1 (R) 5244 00002402 89D8 mov eax, ebx ; interpolated middle 5245 00002404 80EC80 sub ah, 80h ; -32768 to +32767 format again 5246 00002407 66AB stosw ; interpolated sample 2 (L) 5247 00002409 66AB stosw ; interpolated sample 2 (R) 5248 0000240B 89D8 mov eax, ebx 5249 0000240D 6601D0 add ax, dx ; interpolated middle + [next_val] 5250 00002410 66D1D8 rcr ax, 1 5251 00002413 80EC80 sub ah, 80h ; -32768 to +32767 format again 5252 00002416 66AB stosw ; interpolated sample 3 (L) 5253 00002418 66AB stosw ; interpolated sample 3 (R) 5254 0000241A C3 retn 5255 5256 interpolating_4_16bit_stereo: 5257 ; 18/11/2023 5258 ; bx = [previous_val_l] 5259 ; ax = [previous_val_r] 5260 ; [next_val_l] 5261 ; [next_val_r] 5262 ; original-interpolated-interpolated-interpolated 5263 0000241B 93 xchg eax, ebx 5264 0000241C 66AB stosw ; original sample (L) 5265 0000241E 93 xchg eax, ebx 5266 0000241F 66AB stosw ; original sample (R) 5267 00002421 80C480 add ah, 80h ; convert sound level 0 to 65535 format 5268 00002424 89C2 mov edx, eax ; [previous_val_r] 5269 00002426 80C780 add bh, 80h 5270 00002429 8005[9D240000]80 add byte [next_val_l+1], 80h 5271 00002430 66A1[9C240000] mov ax, [next_val_l] 5272 00002436 6601D8 add ax, bx ; [previous_val_l] 5273 00002439 66D1D8 rcr ax, 1 5274 0000243C 93 xchg eax, ebx 5275 0000243D 6601D8 add ax, bx ; bx = interpolated middle (L) 5276 00002440 66D1D8 rcr ax, 1 5277 00002443 80EC80 sub ah, 80h ; -32768 to +32767 format again 5278 00002446 66AB stosw ; interpolated sample 1 (L) 5279 00002448 8005[9F240000]80 add byte [next_val_r+1], 80h 5280 0000244F 89D0 mov eax, edx ; [previous_val_r] 5281 00002451 660305[9E240000] add ax, [next_val_r] 5282 00002458 66D1D8 rcr ax, 1 5283 0000245B 92 xchg eax, edx 5284 0000245C 6601D0 add ax, dx ; dx = interpolated middle (R) 5285 0000245F 66D1D8 rcr ax, 1 5286 00002462 80EC80 sub ah, 80h ; -32768 to +32767 format again 5287 00002465 66AB stosw ; interpolated sample 1 (R) 5288 00002467 89D8 mov eax, ebx 5289 00002469 80EC80 sub ah, 80h ; -32768 to +32767 format again 5290 0000246C 66AB stosw ; interpolated sample 2 (L) 5291 0000246E 89D0 mov eax, edx 5292 00002470 80EC80 sub ah, 80h ; -32768 to +32767 format again 5293 00002473 66AB stosw ; interpolated sample 2 (R) 5294 00002475 89D8 mov eax, ebx 5295 00002477 660305[9C240000] add ax, [next_val_l] 5296 0000247E 66D1D8 rcr ax, 1 5297 00002481 80EC80 sub ah, 80h ; -32768 to +32767 format again 5298 00002484 66AB stosw ; interpolated sample 3 (L) 5299 00002486 89D0 mov eax, edx 5300 00002488 660305[9E240000] add ax, [next_val_r] 5301 0000248F 66D1D8 rcr ax, 1 5302 00002492 80EC80 sub ah, 80h ; -32768 to +32767 format again 5303 00002495 66AB stosw ; interpolated sample 3 (R) 5304 00002497 C3 retn 5305 5306 ; 13/11/2023 5307 previous_val: 5308 00002498 0000 previous_val_l: dw 0 5309 0000249A 0000 previous_val_r: dw 0 5310 next_val: 5311 0000249C 0000 next_val_l: dw 0 5312 0000249E 0000 next_val_r: dw 0 5313 5314 ; 16/11/2023 5315 000024A0 00 faz: db 0 5316 5317 ; -------------------------------------------------------- 5318 ; -------------------------------------------------------- 5319 5320 ; 07/12/2024 5321 ; Ref: TRDOS 386 v2.0.9, trdosk8.s (18/09/2024) 5322 ; 'sysaudio' system call (23/08/2024) 5323 ; 18/11/2024 5324 ; Ref: TRDOS 386 v2.0.9, audio.s, Erdogan Tan, 06/06/2024 5325 5326 ac97_stop: 5327 ; 18/11/2024 5328 000024A1 C605[8C800000]02 mov byte [stopped], 2 5329 ; 07/12/2024 5330 sys _audio, 0700h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000024A8 BB00070000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000024AD B820000000 <1> mov eax, %1 100 <1> 101 000024B2 CD40 <1> int 40h 5331 000024B4 C3 retn 5332 5333 ac97_pause: 5334 ; 18/11/2024 5335 000024B5 C605[8C800000]01 mov byte [stopped], 1 ; paused 5336 ; 07/12/2024 5337 sys _audio, 0500h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000024BC BB00050000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000024C1 B820000000 <1> mov eax, %1 100 <1> 101 000024C6 CD40 <1> int 40h 5338 000024C8 C3 retn 5339 5340 ac97_play: ; continue to play (after pause) 5341 ; 18/11/2024 5342 000024C9 C605[8C800000]00 mov byte [stopped], 0 5343 ; 07/12/2024 5344 sys _audio, 0600h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000024D0 BB00060000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000024D5 B820000000 <1> mov eax, %1 100 <1> 101 000024DA CD40 <1> int 40h 5345 000024DC C3 retn 5346 5347 ; -------------------------------------------------------- 5348 ; 14/11/2024 - Erdogan Tan 5349 ; -------------------------------------------------------- 5350 5351 ; 07/12/2024 5352 ; 01/12/2024 (32bit registers) 5353 ; 29/11/2024 5354 checkUpdateEvents: 5355 000024DD E8D0010000 call check4keyboardstop 5356 000024E2 7279 jc short c4ue_ok 5357 5358 ; 18/11/2024 5359 000024E4 50 push eax ; * 5360 000024E5 09C0 or eax, eax 5361 000024E7 0F8406010000 jz c4ue_cpt 5362 5363 ; 18/11/2024 5364 000024ED 3C20 cmp al, 20h ; SPACE (spacebar) ; pause/play 5365 000024EF 7543 jne short c4ue_chk_s 5366 000024F1 803D[8C800000]00 cmp byte [stopped], 0 5367 000024F8 7714 ja short c4ue_chk_ps 5368 ; pause 5369 000024FA E8B6FFFFFF call ac97_pause 5370 ; 21/11/2024 5371 000024FF A0[8D800000] mov al, [tLO] 5372 00002504 A2[8E800000] mov byte [tLP], al 5373 00002509 E9E5000000 jmp c4ue_cpt 5374 c4ue_chk_ps: 5375 0000250E 803D[8C800000]01 cmp byte [stopped], 1 5376 00002515 770A ja short c4ue_replay 5377 ; continue to play (after a pause) 5378 00002517 E8ADFFFFFF call ac97_play 5379 0000251C E9D2000000 jmp c4ue_cpt 5380 c4ue_replay: 5381 ; 19/11/2024 5382 00002521 58 pop eax ; * 5383 00002522 58 pop eax ; return address 5384 ; 07/02/2024 5385 ;mov al, [volume] 5386 ;call SetmasterVolume 5387 00002523 C605[8C800000]00 mov byte [stopped], 0 5388 0000252A E89D040000 call move_to_beginning 5389 ;jmp PlayWav 5390 ; 07/12/2024 5391 0000252F E921E2FFFF jmp RePlayWav 5392 5393 c4ue_chk_s: 5394 00002534 3C53 cmp al, 'S' ; stop 5395 00002536 7526 jne short c4ue_chk_fb 5396 00002538 803D[8C800000]00 cmp byte [stopped], 0 5397 0000253F 0F87AE000000 ja c4ue_cpt ; Already stopped/paused 5398 00002545 E857FFFFFF call ac97_stop 5399 ; 19/11/2024 5400 0000254A C605[8D800000]00 mov byte [tLO], 0 5401 ; 21/11/2024 5402 00002551 C605[8E800000]30 mov byte [tLP], '0' 5403 00002558 E996000000 jmp c4ue_cpt 5404 5405 ; 01/12/2024 5406 ; 18/11/2024 5407 c4ue_ok: 5408 0000255D C3 retn 5409 5410 c4ue_chk_fb: 5411 ; 17/11/2024 5412 0000255E 3C46 cmp al, 'F' 5413 00002560 750A jne short c4ue_chk_b 5414 00002562 E83D040000 call Player_ProcessKey_Forwards 5415 00002567 E987000000 jmp c4ue_cpt 5416 5417 c4ue_chk_b: 5418 0000256C 3C42 cmp al, 'B' 5419 ;;jne short c4ue_cpt 5420 ; 19/11/2024 5421 ;jne short c4ue_chk_h 5422 ; 25/12/2024 5423 ; 29/11/2024 5424 0000256E 7507 jne short c4ue_chk_n 5425 00002570 E82B040000 call Player_ProcessKey_Backwards 5426 00002575 EB7C jmp short c4ue_cpt 5427 5428 ;;; 5429 ; 25/12/2024 5430 ; 29/11/2024 5431 c4ue_chk_n: 5432 00002577 3C4E cmp al, 'N' 5433 00002579 7404 je short c4ue_nps 5434 c4ue_chk_p: 5435 0000257B 3C50 cmp al, 'P' 5436 0000257D 7509 jne short c4ue_chk_h 5437 c4ue_nps: 5438 0000257F C605[8C800000]03 mov byte [stopped], 3 5439 00002586 EB6B jmp short c4ue_cpt 5440 ;;; 5441 5442 c4ue_chk_h: 5443 ; 19/11/2024 5444 00002588 3C48 cmp al, 'H' 5445 0000258A 7515 jne short c4ue_chk_cr 5446 0000258C C605[8F800000]00 mov byte [wleds], 0 5447 00002593 E843E5FFFF call write_ac97_pci_dev_info 5448 ;;; 5449 ;24/12/2024 (wave lighting points option) 5450 00002598 C605[9B800000]01 mov byte [p_mode], 1 5451 ;;; 5452 ;mov dh, 24 5453 ;mov dl, 79 5454 ;call setCursorPosition 5455 ; 21/12/2024 5456 0000259F EB52 jmp short c4ue_cpt 5457 c4ue_chk_cr: 5458 ;;; 5459 ; 24/12/2024 (wave lighting points option) 5460 000025A1 8A25[8F800000] mov ah, [wleds] 5461 000025A7 3C47 cmp al, 'G' 5462 000025A9 7432 je short c4ue_g 5463 ; ;;; 5464 ; ; 26/12/2024 5465 ; cmp al, 'T' 5466 ; jne short c4ue_chk_cr_@ 5467 ; inc byte [tcolor] 5468 ; and byte [tcolor], 0Fh 5469 ; jnz short c4ue_cpt 5470 ; inc byte [tcolor] 5471 ; jmp short c4ue_cpt 5472 ;c4ue_chk_cr_@: 5473 ; ;;; 5474 ; 19/11/2024 5475 000025AB 3C0D cmp al, 0Dh ; ENTER/CR key 5476 000025AD 7544 jne short c4ue_cpt 5477 ;inc byte [wleds] 5478 ;jnz short c4ue_cpt 5479 ;inc byte [wleds] 5480 ;;; 5481 ; 24/12/2024 5482 ; 22/12/2024 (faster method) 5483 ; (UpdateWaveLeds procedure turns off previously 5484 ; lighting wave leds only) 5485 ;call reset_wave_leds ; prepare all leds as turned off 5486 ;;; 5487 ; 23/11/2024 5488 000025AF 31DB xor ebx, ebx 5489 ; 24/12/2024 (wave lighting points option) 5490 000025B1 881D[9B800000] mov [p_mode], bl ; 0 5491 ; 5492 ;mov bl, [wleds] 5493 000025B7 88E3 mov bl, ah ; 24/12/2024 5494 000025B9 FEC3 inc bl 5495 000025BB 80E30F and bl, 0Fh 5496 000025BE 7501 jnz short c4ue_sc 5497 000025C0 43 inc ebx 5498 c4ue_sc: 5499 000025C1 881D[8F800000] mov [wleds], bl 5500 000025C7 D0EB shr bl, 1 5501 000025C9 8A83[29430000] mov al, [ebx+colors] 5502 ; 24/12/2024 5503 000025CF A2[31430000] mov [ccolor], al 5504 000025D4 7211 jc short c4ue_g_@ 5505 ; 24/12/2024 5506 000025D6 E83B040000 call reset_wave_leds ; prepare all leds as turned off 5507 000025DB EB16 jmp short c4ue_cpt 5508 ; 24/12/2024 5509 c4ue_g: 5510 000025DD 08E4 or ah, ah ; byte [wleds] 5511 000025DF 7506 jnz short c4ue_g_@ 5512 000025E1 FE05[8F800000] inc byte [wleds] ; force wave lighting ('G' key) 5513 c4ue_g_@: 5514 ; 24/12/2024 (wave lighting points option) 5515 000025E7 C605[9B800000]01 mov byte [p_mode], 1 5516 000025EE E808040000 call clear_window 5517 ;;; 5518 c4ue_cpt: 5519 ; 24/12/2024 5520 ; 18/11/2024 5521 000025F3 59 pop ecx ; * 5522 ;;; 5523 ; 24/12/2024 (skip wave lighting if data is not loaded yet) 5524 000025F4 803D[33810000]00 cmp byte [SRB], 0 5525 000025FB 7751 ja short c4ue_vb_ok 5526 ;;; 5527 ; 01/12/2024 (TRDOS 386) 5528 sys _time, 4 ; get timer ticks (18.2 ticks/second), 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000025FD BB04000000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00002602 B80D000000 <1> mov eax, %1 100 <1> 101 00002607 CD40 <1> int 40h 5529 ; 24/12/2024 5530 ; 18/11/2024 5531 ;pop ecx ; * 5532 ; 01/12/2024 5533 00002609 3B05[5C810000] cmp eax, [timerticks] 5534 ;je short c4ue_ok 5535 ; 18/11/2024 5536 0000260F 7407 je short c4ue_skip_utt 5537 c4ue_utt: 5538 ; 01/12/2024 5539 00002611 A3[5C810000] mov [timerticks], eax 5540 00002616 EB04 jmp short c4ue_cpt_@ 5541 c4ue_skip_utt: 5542 ; 18/11/2024 5543 00002618 21C9 and ecx, ecx 5544 0000261A 7432 jz short c4ue_vb_ok 5545 c4ue_cpt_@: 5546 ; 18/11/2024 5547 0000261C 803D[8C800000]00 cmp byte [stopped], 0 5548 00002623 7729 ja short c4ue_vb_ok 5549 5550 00002625 E8B9010000 call CalcProgressTime 5551 5552 ;cmp ax, [ProgressTime] 5553 ; 01/12/2024 5554 0000262A 3B05[50810000] cmp eax, [ProgressTime] 5555 ;je short c4ue_vb_ok 5556 ; same second, no need to update 5557 ; 23/11/2024 5558 00002630 7405 je short c4ue_uvb 5559 5560 ;call UpdateProgressTime 5561 ;call UpdateProgressBar@ 5562 00002632 E8DD020000 call UpdateProgressBar 5563 5564 ; 23/11/2024 5565 c4ue_uvb: 5566 00002637 803D[8F800000]00 cmp byte [wleds], 0 5567 0000263E 760E jna short c4ue_vb_ok 5568 5569 ; 24/12/2024 (wave points mode) 5570 00002640 803D[9B800000]00 cmp byte [p_mode], 0 5571 00002647 7706 ja short c4ue_uwp 5572 5573 00002649 E812040000 call UpdateWaveLeds 5574 5575 c4ue_vb_ok: 5576 0000264E C3 retn 5577 5578 ; 22/12/2024 5579 c4ue_uwp: 5580 ;call UpdateWavePoints 5581 ;retn 5582 5583 ; -------------------------------------------------------- 5584 ; 27/12/2024 - Erdogan Tan 5585 ; -------------------------------------------------------- 5586 5587 ; 27/12/2024 (DMA Buffer Tracking) 5588 ; 26/12/2024 5589 ; 24/12/2024 5590 UpdateWavePoints: 5591 0000264F BE[8C760000] mov esi, prev_points 5592 00002654 833E00 cmp dword [esi], 0 5593 00002657 740B jz short lights_off_ok 5594 00002659 B980020000 mov ecx, 640 5595 light_off: 5596 0000265E AD lodsd 5597 ; eax = wave point (lighting point) address 5598 0000265F C60000 mov byte [eax], 0 ; black point (light off) 5599 00002662 E2FA loop light_off 5600 5601 lights_off_ok: 5602 ; 27/12/2024 5603 ; ref: modplay8.s (02/06/2024) 5604 ; ---------------------------- 5605 ; Get Current Sound Data (in DMA buffer) ((320 bytes)) 5606 ; 23/06/2017 5607 ; 22/06/2017 5608 ; bh = 15, get current sound data/samples 5609 ; bl = 0, for PCM OUT 5610 ; ecx = count of sample/data bytes (1 to 4096) 5611 ; edx = destination buffer address 5612 ; (page aligned address is better) 5613 5614 00002664 BE[00900200] mov esi, g_buff 5615 5616 sys _audio, 0F00h, 640*4, esi ; 27/12/2024 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 00002669 BB000F0000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 0000266E B9000A0000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 00002673 89F2 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 00002675 B820000000 <1> mov eax, %1 100 <1> 101 0000267A CD40 <1> int 40h 5617 ;jnc short lgbuff_ok 5618 ; clear g_buff content 5619 ;mov edi, esi 5620 ;sub eax, eax 5621 ;shr ecx, 2 5622 ;rep stosd 5623 ;mov ecx, 640 5624 ;lgbuff_ok: 5625 5626 0000267C B980020000 mov ecx, 640 5627 00002681 89CD mov ebp, ecx 5628 ; 26/12/2024 5629 00002683 BF[8C760000] mov edi, prev_points 5630 00002688 8B1D[78760000] mov ebx, [graphstart] ; start (top) line 5631 lights_on_4: 5632 0000268E 31C0 xor eax, eax ; 0 5633 00002690 66AD lodsw ; left 5634 00002692 80C480 add ah, 80h 5635 00002695 89C2 mov edx, eax 5636 00002697 66AD lodsw ; right 5637 ;add ax, dx 5638 00002699 80C480 add ah, 80h 5639 ;shr eax, 9 ; 128 volume levels 5640 0000269C 01D0 add eax, edx 5641 ;shr eax, 10 ; (L+R/2) & 128 volume levels 5642 0000269E C1E809 shr eax, 9 ; (L+R/2) & 256 volume levels 5643 000026A1 F7E5 mul ebp ; * 640 (row) 5644 000026A3 01D8 add eax, ebx ; + column 5645 000026A5 8A15[31430000] mov dl, [ccolor] 5646 000026AB 8810 mov [eax], dl ; pixel (light on) color 5647 000026AD AB stosd ; save light on addr in prev_points 5648 000026AE 43 inc ebx 5649 000026AF E2DD loop lights_on_4 5650 000026B1 C3 retn 5651 5652 ; -------------------------------------------------------- 5653 ; 19/05/2024 - (playwav4.asm) ich_wav4.asm 5654 ; -------------------------------------------------------- 5655 5656 ; 25/12/2024 5657 ; 07/12/2024 5658 ; 01/12/2024 (TRDOS 386) 5659 ; 29/11/2024 5660 check4keyboardstop: 5661 ; 19/05/2024 5662 ; 08/11/2023 5663 ; 04/11/2023 5664 000026B2 B401 mov ah, 1 5665 ;int 16h 5666 ; 01/12/2024 (TRDOS 386 keyboard interrupt) 5667 000026B4 CD32 int 32h 5668 ;clc 5669 000026B6 7433 jz short _cksr 5670 5671 000026B8 30E4 xor ah, ah 5672 ;int 16h 5673 ; 01/12/2024 (TRDOS 386 keyboard interrupt) 5674 000026BA CD32 int 32h 5675 5676 ; 25/12/2024 5677 ; 29/11/2024 5678 ;mov [command], al 5679 5680 ;;; 5681 ; 19/05/2024 (change PCM out volume) 5682 000026BC 3C2B cmp al, '+' 5683 000026BE 750D jne short p_1 5684 5685 000026C0 A0[15270000] mov al, [volume] 5686 000026C5 3C00 cmp al, 0 5687 000026C7 7624 jna short p_3 5688 000026C9 FEC8 dec al 5689 000026CB EB0F jmp short p_2 5690 p_1: 5691 000026CD 3C2D cmp al, '-' 5692 000026CF 751D jne short p_4 5693 5694 000026D1 A0[15270000] mov al, [volume] 5695 000026D6 3C1F cmp al, 31 5696 000026D8 7313 jnb short p_3 5697 000026DA FEC0 inc al 5698 p_2: 5699 000026DC A2[15270000] mov [volume], al 5700 ; 14/11/2024 5701 ;call SetPCMOutVolume 5702 ; 15/11/2024 (QEMU) 5703 ; 07/12/2024 5704 000026E1 E81CE2FFFF call SetMasterVolume 5705 ;call UpdateVolume 5706 ;;clc 5707 ;retn 5708 000026E6 E999010000 jmp UpdateVolume 5709 ;mov ah, al 5710 ;mov dx, [NAMBAR] 5711 ;;add dx, CODEC_MASTER_VOL_REG 5712 ;add dx, CODEC_PCM_OUT_REG 5713 ;out dx, ax 5714 ; 5715 ;call delay1_4ms 5716 ;call delay1_4ms 5717 ;call delay1_4ms 5718 ;call delay1_4ms 5719 _cksr: ; 19/05/2024 5720 ; 18/12/2024 5721 000026EB 31C0 xor eax, eax 5722 ;clc 5723 p_3: 5724 000026ED C3 retn 5725 p_4: 5726 ; 17/11/2024 5727 000026EE 80FC01 cmp ah, 01h ; ESC 5728 000026F1 7419 je short p_q 5729 ;cmp ax, 2E03h ; 21/12/2024 5730 000026F3 3C03 cmp al, 03h ; CTRL+C 5731 000026F5 7415 je short p_q 5732 5733 ; 18/11/2024 5734 000026F7 3C20 cmp al, 20h 5735 000026F9 7419 je short p_r 5736 5737 ; 19/11/2024 5738 000026FB 3C0D cmp al, 0Dh ; CR/ENTER 5739 000026FD 7415 je short p_r 5740 5741 000026FF 24DF and al, 0DFh 5742 5743 ; 25/12/2024 5744 ; 29/11/2024 5745 00002701 A2[9C800000] mov [command], al 5746 5747 ;cmp al, 'B' 5748 ;je short p_r 5749 ;cmp al, 'F' 5750 ;je short p_r 5751 5752 ; 29/11/2024 5753 ;cmp al, 'N' 5754 ;je short p_r 5755 ;cmp al, 'P' 5756 ;je short p_r 5757 5758 00002706 3C51 cmp al, 'Q' 5759 ;je short p_q 5760 00002708 7409 je short p_quit ; 29/11/2024 5761 5762 0000270A F8 clc 5763 0000270B C3 retn 5764 5765 ;;; 5766 ;_cskr: 5767 p_q: 5768 ; 27/12/2024 5769 0000270C C605[9C800000]51 mov byte [command], 'Q' 5770 p_quit: 5771 00002713 F9 stc 5772 p_r: 5773 00002714 C3 retn 5774 5775 ; 29/05/2024 5776 ; 19/05/2024 5777 volume: 5778 ;db 02h 5779 ; 26/12/2024 5780 00002715 03 db 03h 5781 5782 ; -------------------------------------------------------- 5783 5784 ; 22/12/2024 5785 ; 21/12/2024 5786 ; simulate cursor position in VGA (VESA VBE) mode 5787 ; ! for 640*480, 256 colors (1 byte/pixel) ! 5788 setCursorPosition: 5789 ; dh = Row 5790 ; dl = Column 5791 5792 00002716 31C0 xor eax, eax 5793 00002718 B00E mov al, 14 ; row height is 14 pixels (8*14) 5794 0000271A F6E6 mul dh 5795 0000271C 6683C007 add ax, 7 ; top margin 5796 00002720 C1E010 shl eax, 16 5797 00002723 88D0 mov al, dl ; * 8 ; character width = 8 pixels 5798 00002725 66C1E003 shl ax, 3 5799 ; hw = row, ax = column 5800 00002729 A3[80760000] mov [screenpos], eax 5801 ; 22/12/2024 5802 0000272E 31C0 xor eax, eax 5803 00002730 C3 retn 5804 5805 ; -------------------------------------------------------- 5806 ; 14/11/2024 5807 ; (Ref: player.asm, out_cs.asm, Matan Alfasi, 2017) 5808 5809 ;; NAME: SetTotalTime 5810 ;; DESCRIPTION: Calculates the total time in seconds in file 5811 ;; INPUT: DATA_SubchunkSize, WAVE_SampleRate, WAVE_BlockAlign 5812 ;; OUTPUT: CurrentTotalTime=Total time in seconds in file, 5813 ;; Output on the screen of the total time in seconds 5814 5815 ; 01/12/2024 (32 bit registers) 5816 SetTotalTime: 5817 ;; Calculate total seconds in file 5818 ;mov ax, [DATA_SubchunkSize] 5819 ;mov dx, [DATA_SubchunkSize + 2] 5820 ;mov bx, [WAVE_SampleRate] 5821 ;div bx 5822 ;xor dx, dx 5823 ; 01/12/2024 5824 00002731 A1[C8800000] mov eax, [DATA_SubchunkSize] 5825 00002736 0FB71D[B8800000] movzx ebx, word [WAVE_SampleRate] 5826 0000273D 31D2 xor edx, edx 5827 0000273F F7F3 div ebx 5828 5829 ;mov bx, [WAVE_BlockAlign] 5830 ;div bx 5831 ; 01/12/2024 5832 00002741 668B1D[C0800000] mov bx, [WAVE_BlockAlign] 5833 00002748 31D2 xor edx, edx 5834 0000274A F7F3 div ebx 5835 5836 ;mov [TotalTime], ax 5837 0000274C A3[4C810000] mov [TotalTime], eax 5838 5839 00002751 B33C mov bl, 60 5840 00002753 F6F3 div bl 5841 5842 ;; al = minutes, ah = seconds 5843 00002755 50 push eax ; ** 5844 00002756 50 push eax ; * 5845 5846 ;mov dh, 24 5847 ; 21/12/2024 (640*480) 5848 00002757 B620 mov dh, 32 5849 00002759 B22A mov dl, 42 5850 0000275B E8B6FFFFFF call setCursorPosition 5851 5852 00002760 58 pop eax ; * 5853 00002761 30E4 xor ah, ah 5854 00002763 BD02000000 mov ebp, 2 5855 00002768 E812000000 call PrintNumber 5856 5857 ;mov dh, 24 5858 ; 21/12/2024 (640*480) 5859 0000276D B620 mov dh, 32 5860 0000276F B22D mov dl, 45 5861 00002771 E8A0FFFFFF call setCursorPosition 5862 5863 00002776 58 pop eax ; ** 5864 00002777 88E0 mov al, ah 5865 00002779 30E4 xor ah, ah 5866 ; 21/12/2024 5867 0000277B 66BD0200 mov bp, 2 5868 ;jmp short PrintNumber 5869 5870 ; -------------------------------------------------------- 5871 5872 ; 21/12/2024 (write numbers in VESA VBE graphics mode) 5873 ; 01/12/2024 (32bit registers) 5874 PrintNumber: 5875 ; eax = binary number 5876 ; ebp = digits 5877 0000277F 8B35[80760000] mov esi, [screenpos] 5878 ; hw = row, si = column 5879 00002785 BB0A000000 mov ebx, 10 5880 0000278A 31C9 xor ecx, ecx 5881 printNumber_CutNumber: 5882 0000278C 41 inc ecx 5883 0000278D 31D2 xor edx, edx 5884 0000278F F7F3 div ebx 5885 00002791 52 push edx 5886 00002792 39E9 cmp ecx, ebp 5887 00002794 7402 je short printNumber_printloop 5888 00002796 EBF4 jmp printNumber_CutNumber 5889 5890 printNumber_printloop: 5891 00002798 58 pop eax 5892 ; 21/12/2024 5893 ; ebp = count of digits 5894 ; eax <= 9 5895 5896 00002799 0430 add al, '0' 5897 5898 ; esi = pixel position (hw = row, si = column) 5899 ; eax = al = character 5900 ;call write_character 5901 ; 22/12/2024 5902 0000279B E82A010000 call write_character_white 5903 5904 000027A0 4D dec ebp 5905 000027A1 7405 jz short printNumber_ok 5906 000027A3 83C608 add esi, 8 ; next column 5907 000027A6 EBF0 jmp short printNumber_printloop 5908 printNumber_ok: 5909 000027A8 C3 retn 5910 5911 ; -------------------------------------------------------- 5912 5913 ; 14/11/2024 - Erdogan Tan 5914 SetProgressTime: 5915 ;; Calculate playing/progress seconds in file 5916 000027A9 E835000000 call CalcProgressTime 5917 5918 ; 01/12/2024 (32bit registers) 5919 UpdateProgressTime: 5920 ; eax = (new) progress time 5921 5922 000027AE A3[50810000] mov [ProgressTime], eax 5923 5924 000027B3 B33C mov bl, 60 5925 000027B5 F6F3 div bl 5926 5927 ;; al = minutes, ah = seconds 5928 000027B7 50 push eax ; ** 5929 000027B8 50 push eax ; * 5930 5931 ;mov dh, 24 5932 ; 21/12/2024 (640*480) 5933 000027B9 B620 mov dh, 32 5934 000027BB B221 mov dl, 33 5935 000027BD E854FFFFFF call setCursorPosition 5936 5937 000027C2 58 pop eax ; * 5938 000027C3 30E4 xor ah, ah 5939 000027C5 BD02000000 mov ebp, 2 5940 000027CA E8B0FFFFFF call PrintNumber 5941 5942 ;mov dh, 24 5943 ; 21/12/2024 (640*480) 5944 000027CF B620 mov dh, 32 5945 000027D1 B224 mov dl, 36 5946 000027D3 E83EFFFFFF call setCursorPosition 5947 5948 000027D8 58 pop eax ; ** 5949 000027D9 88E0 mov al, ah 5950 000027DB 30E4 xor ah, ah 5951 ; 21/12/2024 5952 000027DD 66BD0200 mov bp, 2 5953 000027E1 EB9C jmp short PrintNumber 5954 5955 ; -------------------------------------------------------- 5956 5957 ; 01/12/2024 (32bit registers) 5958 ; 17/11/2024 5959 ; 14/11/2024 5960 CalcProgressTime: 5961 ;mov ax, [LoadedDataBytes] 5962 ;mov dx, [LoadedDataBytes+2] 5963 ;mov bx, ax 5964 ;or bx, dx 5965 ;jz short cpt_ok 5966 ; 01/12/2024 5967 000027E3 A1[58810000] mov eax, [LoadedDataBytes] 5968 000027E8 09C0 or eax, eax 5969 000027EA 7416 jz short cpt_ok 5970 5971 ;mov bx, [WAVE_SampleRate] 5972 ;div bx 5973 ;xor dx, dx 5974 ;mov bx, [WAVE_BlockAlign] 5975 ;div bx 5976 ; 01/12/2024 5977 000027EC 0FB71D[B8800000] movzx ebx, word [WAVE_SampleRate] 5978 000027F3 31D2 xor edx, edx 5979 000027F5 F7F3 div ebx 5980 000027F7 31D2 xor edx, edx 5981 000027F9 668B1D[C0800000] mov bx, [WAVE_BlockAlign] 5982 00002800 F7F3 div ebx 5983 cpt_ok: 5984 ; eax = (new) progress time 5985 00002802 C3 retn 5986 5987 ; -------------------------------------------------------- 5988 ; 14/11/2024 5989 ; (Ref: player.asm, out_cs.asm, Matan Alfasi, 2017) 5990 5991 ;; DESCRIPTION: Update file information on template 5992 ;; PARAMS: WAVE parameters and other variables 5993 ;; REGS: AX(RW) 5994 ;; VARS: CurrentFileName, WAVE_SampleRate, 5995 ;; RETURNS: On-screen file info is updated. 5996 5997 ; 01/12/2024 (32bit registers) 5998 UpdateFileInfo: 5999 ;; Print File Name 6000 ;mov dh, 9 6001 ; 21/12/2024 (640*480 graphics display) 6002 00002803 B608 mov dh, 8 6003 00002805 B217 mov dl, 23 6004 00002807 E80AFFFFFF call setCursorPosition 6005 6006 0000280C BE[E0800000] mov esi, wav_file_name 6007 6008 ;;; 6009 ; 14/11/2024 6010 ; skip directory separators 6011 ; (note: asciiz string, max. 79 bytes except zero tail) 6012 00002811 89F3 mov ebx, esi 6013 chk4_nxt_sep: 6014 00002813 AC lodsb 6015 00002814 3C2F cmp al, '/' ; 14/12/2024 6016 00002816 7406 je short chg_fpos 6017 00002818 20C0 and al, al 6018 0000281A 7406 jz short chg_fpos_ok 6019 0000281C EBF5 jmp short chk4_nxt_sep 6020 chg_fpos: 6021 0000281E 89F3 mov ebx, esi 6022 00002820 EBF1 jmp short chk4_nxt_sep 6023 chg_fpos_ok: 6024 00002822 89DE mov esi, ebx ; file name (without its path/directory) 6025 ;;; 6026 _fnl_chk: 6027 ; 26/12/2024 (file name length limit -display-) 6028 ;mov ebx, 12 6029 00002824 BB11000000 mov ebx, 17 ; ????????.wav????? 6030 00002829 56 push esi 6031 _fnl_chk_loop: 6032 0000282A AC lodsb 6033 0000282B 20C0 and al, al 6034 0000282D 7406 jz short _fnl_ok 6035 0000282F 4B dec ebx 6036 00002830 75F8 jnz short _fnl_chk_loop 6037 00002832 C60600 mov byte [esi], 0 6038 _fnl_ok: 6039 00002835 5E pop esi 6040 ;;; 6041 6042 00002836 E870000000 call PrintString 6043 6044 ;; Print Frequency 6045 ;mov dh, 10 6046 ; 21/12/2024 (640*480 graphics display) 6047 0000283B B609 mov dh, 9 6048 0000283D B217 mov dl, 23 6049 0000283F E8D2FEFFFF call setCursorPosition 6050 ;movzx eax, word [WAVE_SampleRate] 6051 ; 22/12/2024 6052 ; eax = 0 6053 00002844 66A1[B8800000] mov ax, [WAVE_SampleRate] 6054 0000284A BD05000000 mov ebp, 5 6055 0000284F E82BFFFFFF call PrintNumber 6056 6057 ;; Print BitRate 6058 ;mov dh, 9 6059 ; 21/12/2024 (640*480 graphics display) 6060 00002854 B608 mov dh, 8 6061 00002856 B239 mov dl, 57 6062 00002858 E8B9FEFFFF call setCursorPosition 6063 0000285D 66A1[C2800000] mov ax, [WAVE_BitsPerSample] 6064 00002863 66BD0200 mov bp, 2 6065 00002867 E813FFFFFF call PrintNumber 6066 6067 ;; Print Channel Number 6068 ;mov dh, 10 6069 ; 21/12/2024 (640*480 graphics display) 6070 0000286C B609 mov dh, 9 6071 0000286E B239 mov dl, 57 6072 00002870 E8A1FEFFFF call setCursorPosition 6073 00002875 66A1[B6800000] mov ax, [WAVE_NumChannels] 6074 0000287B 66BD0100 mov bp, 1 6075 0000287F E8FBFEFFFF call PrintNumber 6076 6077 ;call UpdateVolume 6078 ;retn 6079 6080 ; -------------------------------------------------------- 6081 6082 ; 14/11/2024 6083 UpdateVolume: 6084 ;; Print Volume 6085 ;mov dh, 24 6086 ; 21/12/2024 (640*480) 6087 00002884 B620 mov dh, 32 6088 00002886 B24B mov dl, 75 6089 00002888 E889FEFFFF call setCursorPosition 6090 ; 22/12/2024 6091 ; eax = 0 6092 6093 0000288D A0[15270000] mov al, [volume] 6094 6095 00002892 B364 mov bl, 100 6096 00002894 F6E3 mul bl 6097 6098 00002896 B31F mov bl, 31 6099 00002898 F6F3 div bl 6100 6101 ;neg ax 6102 ;add ax, 100 6103 ; 01/12/2024 6104 0000289A B464 mov ah, 100 6105 0000289C 28C4 sub ah, al 6106 0000289E 0FB6C4 movzx eax, ah 6107 ;xor ah, ah 6108 ;mov bp, 3 6109 000028A1 BD03000000 mov ebp, 3 6110 ;call PrintNumber 6111 ;retn 6112 000028A6 E9D4FEFFFF jmp PrintNumber 6113 6114 ; -------------------------------------------------------- 6115 6116 ; 21/12/2024 6117 ; write text in VESA VBE graphics mode 6118 PrintString: 6119 ; esi = string address 6120 printstr_loop: 6121 000028AB 31C0 xor eax, eax 6122 000028AD AC lodsb 6123 000028AE 08C0 or al, al 6124 000028B0 7417 jz short printstr_ok 6125 6126 000028B2 56 push esi 6127 6128 000028B3 8B35[80760000] mov esi, [screenpos] 6129 6130 ; esi = pixel position (hw = row, si = column) 6131 ; eax = al = character 6132 ;call write_character 6133 ; 22/12/2024 6134 000028B9 E80C000000 call write_character_white 6135 6136 000028BE 668305[80760000]08 add word [screenpos], 8 ; update column (only, not row) 6137 6138 000028C6 5E pop esi 6139 000028C7 EBE2 jmp short printstr_loop 6140 6141 printstr_ok: 6142 000028C9 C3 retn 6143 6144 ; -------------------------------------------------------- 6145 6146 ; 21/12/2024 6147 ; write character (at cursor position) 6148 ; in graphics mode (640*480, 256 colors) 6149 ; 22/12/2024 6150 write_character_white: 6151 000028CA B90F000000 mov ecx, 0Fh 6152 ; 26/12/2024 6153 ;movzx ecx, byte [tcolor] 6154 write_character: 6155 ; esi = pixel position (hw = row, si = column) 6156 ; eax = al = character 6157 ; cl = color 6158 000028CF 890D[84760000] mov [wcolor], ecx ; 22/12/2024 6159 6160 ; 22/12/2024 6161 000028D5 50 push eax 6162 ; clear previous character pixels 6163 000028D6 BF[19430000] mov edi, fillblock 6164 sys _video, 020Fh, 0, 8001h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000028DB BB0F020000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 000028E0 B900000000 <1> mov ecx, %3 94 <1> %if %0 = 4 95 000028E5 BA01800000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000028EA B81F000000 <1> mov eax, %1 100 <1> 101 000028EF CD40 <1> int 40h 6165 000028F1 58 pop eax 6166 6167 000028F2 C1E004 shl eax, 4 ; 8*16 pixel user font 6168 000028F5 BF[34510000] mov edi, fontbuff2 ; start of user font data 6169 000028FA 01C7 add edi, eax 6170 6171 ; 21/12/2024 6172 ; NOTE: 6173 ; TRDOS 386 does not use 8*14 pixel fonts in sysvideo 6174 ; system calls -in graphics mode- 6175 ; because 8*16 pixel operations are faster 6176 ; than 8*14 pixel operations. 6177 ; ((so, 8*14 fonts can be converted to 8*16 fonts by 6178 ; adding 2 empty lines)) 6179 ; (8*14 characters can be written via pixel operations) 6180 6181 ; 21/12/2024 (TRDOS 386 v2.0.9, trdosk6.s, 27/09/2024) 6182 ;;;;;;;;;;;;;;;;; ; sysvideo system call 6183 ;sysvideo: 6184 ; function in BH 6185 ; 02h: Super VGA, LINEAR FRAME BUFFER data transfers 6186 ; sub function in BL 6187 ; 0Fh: WRITE CHARACTER (FONT) 6188 ; CL = char's color (8 bit, 256 colors) 6189 ; If DH bit 7 = 1 6190 ; USER FONT (from user buffer) 6191 ; DL = 1 -> 8x16 pixel font 6192 ; EDI = user's font buffer address 6193 ; (NOTE: byte order is as row0,row1,row2..) 6194 ; ESI = start position (row, column) 6195 ; (HW = row, SI = column) 6196 ;;;;;;;;;;;;;;;;; 6197 6198 sys _video, 020Fh, [wcolor], 8001h 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000028FC BB0F020000 <1> mov ebx, %2 92 <1> %if %0 >= 3 93 00002901 8B0D[84760000] <1> mov ecx, %3 94 <1> %if %0 = 4 95 00002907 BA01800000 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 0000290C B81F000000 <1> mov eax, %1 100 <1> 101 00002911 CD40 <1> int 40h 6199 6200 00002913 C3 retn 6201 6202 ; -------------------------------------------------------- 6203 6204 ; 22/12/2024 6205 ; 21/12/2024 6206 ; (write chars in VESA VBE graphics mode) 6207 ; 14/11/2024 6208 ; (Ref: player.asm, Matan Alfasi, 2017) 6209 ; (Modification: Erdogan Tan, 14/11/2024) 6210 6211 ;PROGRESSBAR_ROW equ 23 6212 ; 21/12/2024 (640*480) 6213 PROGRESSBAR_ROW equ 31 6214 6215 UpdateProgressBar: 6216 00002914 E890FEFFFF call SetProgressTime ; 14/11/2024 6217 6218 ; 01/12/2024 (32bit registers) 6219 00002919 A1[50810000] mov eax, [ProgressTime] 6220 UpdateProgressBar@: 6221 0000291E BA50000000 mov edx, 80 6222 00002923 F7E2 mul edx 6223 00002925 8B1D[4C810000] mov ebx, [TotalTime] 6224 0000292B F7F3 div ebx 6225 6226 ; 22/12/2024 6227 ; check progress bar indicator position if it is same 6228 0000292D 3A05[89760000] cmp al, [pbprev] 6229 00002933 7430 je short UpdateProgressBar_ok 6230 00002935 A2[89760000] mov [pbprev], al 6231 6232 UpdateProgressBar@@: 6233 ;; Push for the 'Clean' part 6234 0000293A 50 push eax ; ** 6235 0000293B 50 push eax ; * 6236 6237 ;; Set cursor position 6238 0000293C B61F mov dh, PROGRESSBAR_ROW 6239 0000293E B200 mov dl, 0 6240 00002940 E8D1FDFFFF call setCursorPosition 6241 6242 00002945 58 pop eax ; * 6243 00002946 09C0 or eax, eax 6244 00002948 742D jz short UpdateProgressBar_Clean 6245 6246 UpdateProgressBar_DrawProgress: 6247 ; 22/12/2024 6248 ; 21/12/2024 6249 ; (write progress bar chars in graphics mode) 6250 ;;;; 6251 0000294A 89C5 mov ebp, eax 6252 0000294C 50 push eax ; *** 6253 0000294D 8B35[80760000] mov esi, [screenpos] 6254 UpdateProgressBar_DrawProgress_@: 6255 00002953 B8DF000000 mov eax, 223 6256 6257 ; esi = pixel position (hw = row, si = column) 6258 ; eax = al = character 6259 ;call write_character 6260 ; 22/12/2024 6261 00002958 E86DFFFFFF call write_character_white 6262 6263 0000295D 4D dec ebp 6264 0000295E 7406 jz short UpdateProgressBar_DrawCursor 6265 6266 00002960 83C608 add esi, 8 ; next column 6267 00002963 EBEE jmp short UpdateProgressBar_DrawProgress_@ 6268 ;;; 6269 6270 UpdateProgressBar_ok: 6271 00002965 C3 retn 6272 6273 UpdateProgressBar_DrawCursor: 6274 ; 22/12/2024 6275 00002966 5A pop edx ; *** 6276 00002967 B61F mov dh, PROGRESSBAR_ROW 6277 00002969 E8A8FDFFFF call setCursorPosition 6278 6279 ; 21/12/2024 6280 ; (write progress bar character in graphics mode) 6281 ;;;; 6282 ;;;mov eax, 223 6283 ;;;shl eax, 4 ; 8*16 pixel user font 6284 ;;mov eax, 223*16 6285 ;;mov edi, fontbuff2 ; start of user font data 6286 ;;add edi, eax 6287 ;mov edi, fontbuff2+(223*16) 6288 ; 6289 ;sys _video, 020Fh, 0Ch, 8001h 6290 ; 22/12/2024 6291 ;mov eax, 223 6292 ; eax = 0 6293 0000296E B0DF mov al, 223 6294 00002970 B10C mov cl, 0Ch ; red 6295 00002972 E858FFFFFF call write_character 6296 ;;;; 6297 6298 UpdateProgressBar_Clean: 6299 ;pop eax ; ** 6300 ; 22/12/2024 6301 00002977 5A pop edx ; ** 6302 ; 21/12/2024 6303 00002978 BD50000000 mov ebp, 80 6304 ;sub bp, ax 6305 0000297D 6629D5 sub bp, dx ; 22/12/2024 6306 00002980 74E3 jz short UpdateProgressBar_ok 6307 6308 00002982 B61F mov dh, PROGRESSBAR_ROW 6309 ;mov dl, al ; 22/12/2024 6310 00002984 E88DFDFFFF call setCursorPosition 6311 6312 ; 21/12/2024 6313 ; (write progress bar chars in graphics mode) 6314 ;;;; 6315 00002989 8B35[80760000] mov esi, [screenpos] 6316 UpdateProgressBar_Clean_@: 6317 ;;;mov eax, 223 6318 ;;;shl eax, 4 ; 8*16 pixel user font 6319 ;;mov eax, 223*16 6320 ;mov edi, fontbuff2 ; start of user font data 6321 ;add edi, eax 6322 ;mov edi, fontbuff2+(223*16) 6323 ; 6324 ;sys _video, 020Fh, 08h, 8001h 6325 ; 22/12/2024 6326 ;mov eax, 223 6327 ; eax = 0 6328 0000298F B0DF mov al, 223 6329 00002991 B108 mov cl, 08h ; gray (dark) 6330 00002993 E837FFFFFF call write_character 6331 ;;;; 6332 6333 00002998 4D dec ebp 6334 00002999 74CA jz short UpdateProgressBar_ok 6335 6336 0000299B 83C608 add esi, 8 ; next column 6337 0000299E EBEF jmp short UpdateProgressBar_Clean_@ 6338 ;;;; 6339 6340 ; -------------------------------------------------------- 6341 ; 17/11/2024 6342 6343 Player_ProcessKey_Backwards: 6344 ;; In order to go backwards 5 seconds: 6345 ;; Update file pointer to the beginning, skip headers 6346 000029A0 B142 mov cl, 'B' 6347 000029A2 EB02 jmp short Player_ProcessKey_B_or_F 6348 6349 Player_ProcessKey_Forwards: 6350 ;; In order to fast-forward 5 seconds, set the file pointer 6351 ;; to CUR_SEEK + 5 * Freq 6352 6353 000029A4 B146 mov cl, 'F' 6354 ;jmp short Player_ProcessKey_B_or_F 6355 6356 ; 01/12/2024 (32bit regsisters) 6357 Player_ProcessKey_B_or_F: 6358 ; 17/11/2024 6359 ; 04/11/2024 6360 ; (Ref: player.asm, Matan Alfasi, 2017) 6361 6362 ; 04/11/2024 6363 000029A6 B805000000 mov eax, 5 6364 000029AB 0FB71D[C0800000] movzx ebx, word [WAVE_BlockAlign] 6365 000029B2 F7E3 mul ebx 6366 000029B4 668B1D[B8800000] mov bx, [WAVE_SampleRate] 6367 000029BB F7E3 mul ebx 6368 ; eax = transfer byte count for 5 seconds 6369 6370 ; 17/11/2024 6371 000029BD 80F942 cmp cl, 'B' 6372 ;mov bx, [LoadedDataBytes] 6373 ;mov cx, [LoadedDataBytes+2] 6374 ; 01/12/2024 6375 000029C0 8B0D[58810000] mov ecx, [LoadedDataBytes] 6376 000029C6 7508 jne short move_forward ; cl = 'F' 6377 move_backward: 6378 ;sub bx, ax 6379 ;sbb cx, dx 6380 000029C8 29C1 sub ecx, eax 6381 000029CA 7316 jnc short move_file_pointer 6382 move_to_beginning: 6383 ;xor cx, cx ; 0 6384 ;xor bx, bx ; 0 6385 000029CC 31C9 xor ecx, ecx 6386 000029CE EB12 jmp short move_file_pointer 6387 move_forward: 6388 ;add bx, ax 6389 ;adc cx, dx 6390 000029D0 01C1 add ecx, eax 6391 000029D2 7208 jc short move_to_end 6392 ;cmp cx, [DATA_SubchunkSize+2] 6393 ;ja short move_to_end 6394 ;jb short move_file_pointer 6395 ;cmp bx, [DATA_SubchunkSize] 6396 ;jna short move_file_pointer 6397 000029D4 3B0D[C8800000] cmp ecx, [DATA_SubchunkSize] 6398 000029DA 7606 jna short move_file_pointer 6399 move_to_end: 6400 ;mov bx, [DATA_SubchunkSize] 6401 ;mov cx, [DATA_SubchunkSize+2] 6402 000029DC 8B0D[C8800000] mov ecx, [DATA_SubchunkSize] 6403 move_file_pointer: 6404 ;mov dx, bx 6405 ;mov [LoadedDataBytes], dx 6406 ;mov [LoadedDataBytes+2], cx 6407 000029E2 890D[58810000] mov [LoadedDataBytes], ecx 6408 ;add dx, 44 ; + header 6409 ;adc cx, 0 6410 000029E8 83C12C add ecx, 44 6411 6412 ; seek 6413 ;mov bx, [filehandle] 6414 ;mov ax, 4200h 6415 ;int 21h 6416 ; 01/12/2024 6417 000029EB 31D2 xor edx, edx ; offset from beginning of the file 6418 ; ecx = offset 6419 ; ebx = file handle 6420 ; edx = 0 6421 sys _seek, [filehandle] 86 <1> 87 <1> 88 <1> 89 <1> 90 <1> %if %0 >= 2 91 000029ED 8B1D[D0800000] <1> mov ebx, %2 92 <1> %if %0 >= 3 93 <1> mov ecx, %3 94 <1> %if %0 = 4 95 <1> mov edx, %4 96 <1> %endif 97 <1> %endif 98 <1> %endif 99 000029F3 B813000000 <1> mov eax, %1 100 <1> 101 000029F8 CD40 <1> int 40h 6422 000029FA C3 retn 6423 6424 ; -------------------------------------------------------- 6425 6426 ; 25/12/2024 6427 ; 22/12/2024 (VESA VBE mode graphics) 6428 ; (640*480, 256 colors) 6429 clear_window: 6430 000029FB 8B3D[7C760000] mov edi, [LFB_ADDR] 6431 ;add edi, (13*80*8*14) 6432 ; 25/12/2024 6433 00002A01 81C7009A0100 add edi, 164*640 6434 00002A07 29C0 sub eax, eax 6435 ;mov ecx, (16*640*14)/4 ; 16 rows 6436 00002A09 B900A00000 mov ecx, 64*640 ; 256 volume level points 6437 00002A0E F3AB rep stosd 6438 ; 24/12/2024 6439 00002A10 A3[8C760000] mov [prev_points], eax ; 0 6440 ; 6441 00002A15 C3 retn 6442 6443 ; -------------------------------------------------------- 6444 6445 ; 22/12/2024 6446 ; 21/12/2024 6447 ; (simulate wave leds in graphics mode) 6448 ; (640*480, 256 colors) 6449 reset_wave_leds: 6450 ; 22/12/2024 6451 00002A16 C705[34750000]0000- mov dword [prev_leds], 0 6451 00002A1E 0000 6452 ; 6453 00002A20 BD00050000 mov ebp, 16*80 ; 80 columns with 16 levels 6454 00002A25 BE[34610000] mov esi, wleds_addr 6455 next_led: 6456 00002A2A AD lodsd 6457 00002A2B 89C7 mov edi, eax 6458 00002A2D BA0E000000 mov edx, 14 ; 14 lines (8*14 pixel font) 6459 00002A32 BB[14610000] mov ebx, fontbuff2+(254*16) ; char = 254 6460 led_line: 6461 00002A37 8A23 mov ah, [ebx] 6462 00002A39 B908000000 mov ecx, 8 ; 8 pixels (8*16 pixel font) 6463 next_pixel: 6464 00002A3E D0E4 shl ah, 1 6465 00002A40 7308 jnc short skip_this 6466 00002A42 B008 mov al, 8 ; gray 6467 00002A44 AA stosb 6468 00002A45 49 dec ecx 6469 00002A46 75F6 jnz short next_pixel 6470 00002A48 EB06 jmp short next_line 6471 skip_this: 6472 00002A4A B000 mov al, 0 ; black 6473 00002A4C AA stosb 6474 00002A4D 49 dec ecx 6475 00002A4E 75EE jnz short next_pixel 6476 next_line: 6477 00002A50 4A dec edx 6478 00002A51 7504 jnz short next_line_@ 6479 00002A53 4D dec ebp 6480 00002A54 75D4 jnz short next_led 6481 ;clc ; 25/12/2024 6482 00002A56 C3 retn 6483 next_line_@: 6484 ; 22/12/2024 6485 00002A57 81C778020000 add edi, 640-8 ; next line 6486 00002A5D 43 inc ebx 6487 00002A5E EBD7 jmp short led_line 6488 6489 ; -------------------------------------------------------- 6490 6491 ; 22/12/2024 (graphics mode) 6492 ; 09/12/2024 6493 ; 19/11/2024 6494 UpdateWaveLeds: 6495 ; 23/11/2024 6496 ;call reset_wave_leds 6497 ; 22/12/2024 (faster method, 80 against 80*16) 6498 ; turn off previously lighting wave leds at first 6499 ;;; 6500 00002A60 BE[34750000] mov esi, prev_leds 6501 00002A65 833E00 cmp dword [esi], 0 6502 00002A68 7433 jz short UpdateWaveLeds_ok 6503 00002A6A B950000000 mov ecx, 80 6504 turn_off_led: 6505 00002A6F AD lodsd 6506 00002A70 89C7 mov edi, eax 6507 ; edi = wave led address 6508 00002A72 BD0E000000 mov ebp, 14 6509 00002A77 BB[14610000] mov ebx, fontbuff2+(254*16) ; char = 254 6510 00002A7C 31D2 xor edx, edx 6511 00002A7E B008 mov al, 8 ; gray (dark) 6512 toffl_next_line: 6513 ;;mov edx, 8 ; 8 pixels (8*14 pixel font) 6514 ;mov dl, 8 6515 00002A80 88C2 mov dl, al ; 8 6516 00002A82 8A23 mov ah, [ebx] 6517 toffl_next_pixel: 6518 00002A84 D0E4 shl ah, 1 6519 00002A86 7310 jnc short toffl_skip_this 6520 00002A88 AA stosb 6521 toffl_next_pixel_@: 6522 00002A89 4A dec edx 6523 00002A8A 75F8 jnz short toffl_next_pixel 6524 00002A8C 4D dec ebp 6525 00002A8D 740C jz short toffl_next_led 6526 00002A8F 81C778020000 add edi, 640-8 ; next line 6527 00002A95 43 inc ebx 6528 00002A96 EBE8 jmp short toffl_next_line 6529 toffl_skip_this: 6530 00002A98 47 inc edi 6531 00002A99 EBEE jmp short toffl_next_pixel_@ 6532 toffl_next_led: 6533 00002A9B E2D2 loop turn_off_led 6534 UpdateWaveLeds_ok: 6535 ;;; 6536 ; 09/12/2024 6537 ;jmp short turn_on_leds 6538 6539 ; -------------------------------------------------------- 6540 6541 ; 21/12/2024 (VESA VBE Mode, 640*480, 256 colors) 6542 ; 09/12/2024 6543 ; 01/12/2024 (TRDOS 386, 32bit registers, flat memory) 6544 ; 23/11/2024 (Retro DOS, 16bit registers, segmented) 6545 ; 21/11/2024, 22/11/2024 6546 ; 19/11/2024 6547 turn_on_leds: 6548 ; 09/12/2024 6549 ; 07/12/2024 6550 00002A9D 8A15[99800000] mov dl, [half_buffer] 6551 tol_@: 6552 ; 07/12/2024 6553 00002AA3 3815[98800000] cmp [pbuf_s], dl 6554 00002AA9 7520 jne short tol_ns_buf 6555 00002AAB 8B1D[90800000] mov ebx, [wleds_dif] 6556 00002AB1 8B35[94800000] mov esi, [pbuf_o] 6557 00002AB7 8B0D[48810000] mov ecx, [buffersize] ; bytes 6558 00002ABD 29D9 sub ecx, ebx ; sub ecx, [wleds_dif] 6559 00002ABF 01DE add esi, ebx 6560 00002AC1 7204 jc short tol_o_@ 6561 00002AC3 39CE cmp esi, ecx 6562 00002AC5 760C jna short tol_s_buf 6563 tol_o_@: 6564 00002AC7 89CE mov esi, ecx 6565 00002AC9 EB08 jmp short tol_s_buf 6566 6567 tol_ns_buf: 6568 00002ACB 8815[98800000] mov [pbuf_s], dl 6569 00002AD1 31F6 xor esi, esi ; 0 6570 tol_s_buf: 6571 00002AD3 8935[94800000] mov [pbuf_o], esi 6572 6573 tol_buf_@: 6574 ; 07/12/2024 6575 00002AD9 81C6[00900000] add esi, audio_buffer 6576 00002ADF B950000000 mov ecx, 80 6577 ;xor eax, eax ; 0 6578 00002AE4 BB[34610000] mov ebx, wleds_addr 6579 ; 22/12/2024 6580 00002AE9 BF[34750000] mov edi, prev_leds 6581 tol_fill_c: 6582 00002AEE 31C0 xor eax, eax ; 0 ; 22/12/2024 6583 00002AF0 66AD lodsw ; left 6584 00002AF2 80C480 add ah, 80h ; 24/12/2024 6585 00002AF5 89C2 mov edx, eax 6586 00002AF7 66AD lodsw ; right 6587 ;add ax, dx 6588 00002AF9 80C480 add ah, 80h 6589 ;; 21/12/2024 (16 volume levels) 6590 ;shr eax, 12 6591 ; 24/12/2024 6592 00002AFC 01D0 add eax, edx 6593 00002AFE C1E80D shr eax, 13 ; (L+R/2) & 16 volume levels 6594 6595 00002B01 53 push ebx ; * 6596 ; 01/12/2024 6597 00002B02 C1E002 shl eax, 2 6598 00002B05 01C3 add ebx, eax 6599 ; 01/12/2024 (32bit address) 6600 ;mov edi, [ebx] 6601 ; 22/12/2024 6602 00002B07 8B03 mov eax, [ebx] 6603 00002B09 AB stosd 6604 00002B0A 57 push edi ; ** 6605 00002B0B 89C7 mov edi, eax 6606 ;;; 6607 ; 21/12/2024 6608 ; (simulate wave leds in graphics mode) 6609 ; (640*480, 256 colors) 6610 turn_on_led: 6611 ; edi = wave led address 6612 00002B0D BD0E000000 mov ebp, 14 6613 00002B12 BB[14610000] mov ebx, fontbuff2+(254*16) ; char = 254 6614 00002B17 A0[31430000] mov al, [ccolor] 6615 tol_next_line: 6616 00002B1C BA08000000 mov edx, 8 ; 8 pixels (8*14 pixel font) 6617 00002B21 8A23 mov ah, [ebx] 6618 tol_next_pixel: 6619 00002B23 D0E4 shl ah, 1 6620 00002B25 7310 jnc short tol_skip_this 6621 00002B27 AA stosb 6622 tol_next_pixel_@: 6623 00002B28 4A dec edx 6624 00002B29 75F8 jnz short tol_next_pixel 6625 00002B2B 4D dec ebp 6626 00002B2C 740C jz short tol_next_led 6627 ; 22/12/2024 6628 00002B2E 81C778020000 add edi, 640-8 ; next line 6629 00002B34 43 inc ebx 6630 00002B35 EBE5 jmp short tol_next_line 6631 tol_skip_this: 6632 00002B37 47 inc edi 6633 00002B38 EBEE jmp short tol_next_pixel_@ 6634 tol_next_led: 6635 ; 22/12/2024 6636 00002B3A 5F pop edi ; ** 6637 ;;; 6638 00002B3B 5B pop ebx ; * 6639 00002B3C 83C340 add ebx, 16*4 6640 00002B3F E2AD loop tol_fill_c 6641 6642 00002B41 C3 retn 6643 6644 ; ------------------------------------------------------------- 6645 6646 ; ------------------------------------------------------------- 6647 ; ac97.inc (11/11/2023) 6648 ; ------------------------------------------------------------- 6649 6650 ; special characters 6651 LF EQU 10 6652 CR EQU 13 6653 6654 ; PCI stuff 6655 6656 ; Intel ICH2 equates. It is assumed that ICH0 and plain ole ICH are compatible. 6657 6658 INTEL_VID equ 8086h ; Intel's PCI vendor ID 6659 ; 03/11/2023 - Erdogan Tan (Ref: MenuetOS AC97 WAV Player source code, 2004) 6660 SIS_VID equ 1039h 6661 NVIDIA_VID equ 10DEh ; Ref: MPXPLAY/SBEMU/KOLIBRIOS AC97 source c. 6662 AMD_VID equ 1022h 6663 6664 ICH_DID equ 2415h ; ICH device ID 6665 ICH0_DID equ 2425h ; ICH0 6666 ICH2_DID equ 2445h ; ICH2 I think there are more ICHes. 6667 ; they all should be compatible. 6668 6669 ; 17/02/2017 (Erdogan Tan, ref: ALSA Device IDs, ALSA project) 6670 ICH3_DID equ 2485h ; ICH3 6671 ICH4_DID equ 24C5h ; ICH4 6672 ICH5_DID equ 24D5h ; ICH5 6673 ICH6_DID equ 266Eh ; ICH6 6674 ESB6300_DID equ 25A6h ; 6300ESB 6675 ESB631X_DID equ 2698h ; 631XESB 6676 ICH7_DID equ 27DEh ; ICH7 6677 ; 03/11/2023 - Erdogan Tan (Ref: MenuetOS AC97 WAV Player source code, 2004) 6678 MX82440_DID equ 7195h 6679 SI7012_DID equ 7012h 6680 NFORCE_DID equ 01B1h 6681 NFORCE2_DID equ 006Ah 6682 AMD8111_DID equ 746Dh 6683 AMD768_DID equ 7445h 6684 ; 03/11/2023 - Erdogan Tan - Ref: MPXPLAY/SBEMU/KOLIBRIOS AC97 source code 6685 CK804_DID equ 0059h 6686 MCP04_DID equ 003Ah 6687 CK8_DID equ 008Ah 6688 NFORCE3_DID equ 00DAh 6689 CK8S_DID equ 00EAh 6690 6691 ; ------------------------------------------------------------- 6692 6693 ; 22/12/2024 6694 00002B42 90 align 4 6695 6696 ; 13/11/2024 6697 ; ('<<' to 'shl' conversion for FASM) 6698 ; 6699 ; 29/05/2024 (TRDOS 386) 6700 ; 17/02/2017 6701 ; Valid ICH device IDs 6702 6703 valid_ids: 6704 ;dd (ICH_DID shl 16) + INTEL_VID ; 8086h:2415h 6705 00002B44 86801524 dd (ICH_DID << 16) + INTEL_VID ; 8086h:2415h 6706 00002B48 86802524 dd (ICH0_DID << 16) + INTEL_VID ; 8086h:2425h 6707 00002B4C 86804524 dd (ICH2_DID << 16) + INTEL_VID ; 8086h:2445h 6708 00002B50 86808524 dd (ICH3_DID << 16) + INTEL_VID ; 8086h:2485h 6709 00002B54 8680C524 dd (ICH4_DID << 16) + INTEL_VID ; 8086h:24C5h 6710 00002B58 8680D524 dd (ICH5_DID << 16) + INTEL_VID ; 8086h:24D5h 6711 00002B5C 86806E26 dd (ICH6_DID << 16) + INTEL_VID ; 8086h:266Eh 6712 00002B60 8680A625 dd (ESB6300_DID << 16) + INTEL_VID ; 8086h:25A6h 6713 00002B64 86809826 dd (ESB631X_DID << 16) + INTEL_VID ; 8086h:2698h 6714 00002B68 8680DE27 dd (ICH7_DID << 16) + INTEL_VID ; 8086h:27DEh 6715 ; 03/11/2023 - Erdogan Tan 6716 00002B6C 86809571 dd (MX82440_DID << 16) + INTEL_VID ; 8086h:7195h 6717 00002B70 39101270 dd (SI7012_DID << 16) + SIS_VID ; 1039h:7012h 6718 00002B74 DE10B101 dd (NFORCE_DID << 16) + NVIDIA_VID ; 10DEh:01B1h 6719 00002B78 DE106A00 dd (NFORCE2_DID << 16) + NVIDIA_VID ; 10DEh:006Ah 6720 00002B7C 22106D74 dd (AMD8111_DID << 16) + AMD_VID ; 1022h:746Dh 6721 00002B80 22104574 dd (AMD768_DID << 16) + AMD_VID ; 1022h:7445h 6722 00002B84 DE105900 dd (CK804_DID << 16) + NVIDIA_VID ; 10DEh:0059h 6723 00002B88 DE103A00 dd (MCP04_DID << 16) + NVIDIA_VID ; 10DEh:003Ah 6724 00002B8C DE108A00 dd (CK8_DID << 16) + NVIDIA_VID ; 1022h:008Ah 6725 00002B90 DE10DA00 dd (NFORCE3_DID << 16) + NVIDIA_VID ; 10DEh:00DAh 6726 00002B94 DE10EA00 dd (CK8S_DID << 16) + NVIDIA_VID ; 10DEh:00EAh 6727 6728 valid_id_count equ (($ - valid_ids)>>2) ; 05/11/2023 6729 ; 13/11/2024 6730 ;valid_id_count = ($ - valid_ids) shr 2 ; 05/11/2023 6731 6732 00002B98 00000000 dd 0 6733 6734 Credits: 6735 00002B9C 564741205741562050- db 'VGA WAV Player for TRDOS 386 by Erdogan Tan. ' 6735 00002BA5 6C6179657220666F72- 6735 00002BAE 205452444F53203338- 6735 00002BB7 36206279204572646F- 6735 00002BC0 67616E2054616E2E20 6736 ;;db 'December 2024.', 10,13,0 6737 ;db 'January 2025.', 10,13,0 6738 00002BC9 466562727561727920- db 'February 2025.', 10,13,0 6738 00002BD2 323032352E0A0D00 6739 00002BDA 32372F31322F323032- db '27/12/2024', 10,13,0 6739 00002BE3 340A0D00 6740 00002BE7 31382F30312F323032- db '18/01/2025', 10,13,0 6740 00002BF0 350A0D00 6741 00002BF4 30352F30322F323032- db '05/02/2025', 10,13 6741 00002BFD 350A0D 6742 ; 15/11/2024 6743 reset: 6744 00002C00 00 db 0 6745 6746 msgAudioCardInfo: 6747 00002C01 666F7220496E74656C- db 'for Intel AC97 (ICH) Audio Controller.', 10,13,0 6747 00002C0A 204143393720284943- 6747 00002C13 482920417564696F20- 6747 00002C1C 436F6E74726F6C6C65- 6747 00002C25 722E0A0D00 6748 6749 ; 27/12/2024 6750 msg_usage: 6751 00002C2A 75736167653A205647- db 'usage: VGAPLAY2 <...>',10,13,0 6751 00002C33 41504C415932203C46- 6751 00002C3C 696C654E616D65313E- 6751 00002C45 203C46696C654E616D- 6751 00002C4E 65323E203C2E2E2E3E- 6751 00002C57 0A0D00 6752 6753 noDevMsg: 6754 00002C5A 4572726F723A20556E- db 'Error: Unable to find AC97 audio device!' 6754 00002C63 61626C6520746F2066- 6754 00002C6C 696E64204143393720- 6754 00002C75 617564696F20646576- 6754 00002C7E 69636521 6755 00002C82 0A0D00 db 10,13,0 6756 6757 noFileErrMsg: 6758 00002C85 4572726F723A206669- db 'Error: file not found.',10,13,0 6758 00002C8E 6C65206E6F7420666F- 6758 00002C97 756E642E0A0D00 6759 6760 ; 07/12/2024 6761 trdos386_err_msg: 6762 00002C9E 5452444F5320333836- db 'TRDOS 386 System call error !',10,13,0 6762 00002CA7 2053797374656D2063- 6762 00002CB0 616C6C206572726F72- 6762 00002CB9 20210A0D00 6763 6764 ; 29/05/2024 6765 ; 11/11/2023 6766 msg_init_err: 6767 00002CBE 0D0A db CR, LF 6768 00002CC0 4143393720436F6E74- db 'AC97 Controller/Codec initialization error !' 6768 00002CC9 726F6C6C65722F436F- 6768 00002CD2 64656320696E697469- 6768 00002CDB 616C697A6174696F6E- 6768 00002CE4 206572726F722021 6769 00002CEC 0D0A00 db CR, LF, 0 ; 07/12/2024 6770 6771 ; 25/11/2023 6772 msg_no_vra: 6773 00002CEF 0A0D db 10,13 6774 00002CF1 4E6F20565241207375- db 'No VRA support ! Only 48 kHZ sample rate supported !' 6774 00002CFA 70706F72742021204F- 6774 00002D03 6E6C79203438206B48- 6774 00002D0C 5A2073616D706C6520- 6774 00002D15 726174652073757070- 6774 00002D1E 6F727465642021 6775 00002D25 0A0D00 db 10,13,0 6776 6777 ; 19/11/2024 6778 ; 03/06/2017 6779 hex_chars: 6780 00002D28 303132333435363738- db '0123456789ABCDEF', 0 6780 00002D31 3941424344454600 6781 msgAC97Info: 6782 00002D39 0D0A db 0Dh, 0Ah 6783 00002D3B 204143393720417564- db ' AC97 Audio Controller & Codec Info', 0Dh, 0Ah 6783 00002D44 696F20436F6E74726F- 6783 00002D4D 6C6C6572202620436F- 6783 00002D56 64656320496E666F0D- 6783 00002D5F 0A 6784 00002D60 2056656E646F722049- db ' Vendor ID: ' 6784 00002D69 443A20 6785 msgVendorId: 6786 00002D6C 303030306820446576- db '0000h Device ID: ' 6786 00002D75 6963652049443A20 6787 msgDevId: 6788 00002D7D 30303030680D0A db '0000h', 0Dh, 0Ah 6789 00002D84 204275733A20 db ' Bus: ' 6790 msgBusNo: 6791 00002D8A 303068204465766963- db '00h Device: ' 6791 00002D93 653A20 6792 msgDevNo: 6793 00002D96 3030682046756E6374- db '00h Function: ' 6793 00002D9F 696F6E3A20 6794 msgFncNo: 6795 00002DA4 303068 db '00h' 6796 00002DA7 0D0A db 0Dh, 0Ah 6797 00002DA9 204E414D4241523A20 db ' NAMBAR: ' 6798 msgNamBar: 6799 00002DB2 30303030682020 db '0000h ' 6800 00002DB9 4E41424D4241523A20 db 'NABMBAR: ' 6801 msgNabmBar: 6802 00002DC2 303030306820204952- db '0000h IRQ: ' 6802 00002DCB 513A20 6803 msgIRQ: 6804 00002DCE 3030 dw 3030h 6805 00002DD0 0D0A00 db 0Dh, 0Ah, 0 6806 ; 25/11/2023 6807 msgVRAheader: 6808 00002DD3 205652412073757070- db ' VRA support: ' 6808 00002DDC 6F72743A20 6809 00002DE1 00 db 0 6810 msgVRAyes: 6811 00002DE2 5945530D0A00 db 'YES', 0Dh, 0Ah, 0 6812 msgVRAno: 6813 00002DE8 4E4F200D0A db 'NO ', 0Dh, 0Ah 6814 00002DED 2028496E746572706F- db ' (Interpolated sample rate playing method)' 6814 00002DF6 6C617465642073616D- 6814 00002DFF 706C65207261746520- 6814 00002E08 706C6179696E67206D- 6814 00002E11 6574686F6429 6815 00002E17 0D0A00 db 0Dh, 0Ah, 0 6816 6817 00002E1A 90 align 4 6818 6819 ; ------------------------------------------------------------- 6820 6821 ; 21/12/2024 6822 SplashScreen: 6823 00002E1C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6823 00002E25 202020202020202020- 6823 00002E2E 202020202020202020- 6823 00002E37 202020202020202020- 6823 00002E40 202020202020202020- 6823 00002E49 202020202020202020- 6823 00002E52 202020202020202020- 6823 00002E5B 202020202020202020- 6823 00002E64 2020202020DDDBDE 6824 00002E6C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6824 00002E75 202020202020202020- 6824 00002E7E 202020202020202020- 6824 00002E87 202020202020202020- 6824 00002E90 202020202020202020- 6824 00002E99 202020202020202020- 6824 00002EA2 202020202020202020- 6824 00002EAB 202020202020202020- 6824 00002EB4 2020202020DDDBDE 6825 00002EBC DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6825 00002EC5 202020202020202020- 6825 00002ECE 202020202020202020- 6825 00002ED7 202020202020202020- 6825 00002EE0 202020202020202020- 6825 00002EE9 202020202020202020- 6825 00002EF2 202020202020202020- 6825 00002EFB 202020202020202020- 6825 00002F04 2020202020DDDBDE 6826 00002F0C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6826 00002F15 202020202020202020- 6826 00002F1E 202020202020202020- 6826 00002F27 202020202020202020- 6826 00002F30 202020202020202020- 6826 00002F39 202020202020202020- 6826 00002F42 202020202020202020- 6826 00002F4B 202020202020202020- 6826 00002F54 2020202020DDDBDE 6827 00002F5C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6827 00002F65 202020202020202020- 6827 00002F6E 202020202020202020- 6827 00002F77 202020202020202020- 6827 00002F80 202020202020202020- 6827 00002F89 202020202020202020- 6827 00002F92 202020202020202020- 6827 00002F9B 202020202020202020- 6827 00002FA4 2020202020DDDBDE 6828 00002FAC DDDBDE202020202020- db 221, 219, 222, " _______ ______ _______. ", 221, 219, 222 6828 00002FB5 202020202020202020- 6828 00002FBE 2020202020205F5F5F- 6828 00002FC7 5F5F5F5F2020205F5F- 6828 00002FD0 5F5F5F5F2020202020- 6828 00002FD9 2020205F5F5F5F5F5F- 6828 00002FE2 5F2E20202020202020- 6828 00002FEB 202020202020202020- 6828 00002FF4 2020202020DDDBDE 6829 00002FFC DDDBDE202020202020- db 221, 219, 222, " | \ / __ \ / | ", 221, 219, 222 6829 00003005 202020202020202020- 6829 0000300E 20202020207C202020- 6829 00003017 202020205C202F2020- 6829 00003020 5F5F20205C20202020- 6829 00003029 20202F202020202020- 6829 00003032 207C20202020202020- 6829 0000303B 202020202020202020- 6829 00003044 2020202020DDDBDE 6830 0000304C DDDBDE202020202020- db 221, 219, 222, " | .--. | | | | | (----` ", 221, 219, 222 6830 00003055 202020202020202020- 6830 0000305E 20202020207C20202E- 6830 00003067 2D2D2E20207C20207C- 6830 00003070 20207C20207C202020- 6830 00003079 207C202020282D2D2D- 6830 00003082 2D6020202020202020- 6830 0000308B 202020202020202020- 6830 00003094 2020202020DDDBDE 6831 0000309C DDDBDE202020202020- db 221, 219, 222, " | | | | | | | \ \ ", 221, 219, 222 6831 000030A5 202020202020202020- 6831 000030AE 20202020207C20207C- 6831 000030B7 20207C20207C20207C- 6831 000030C0 20207C20207C202020- 6831 000030C9 20205C2020205C2020- 6831 000030D2 202020202020202020- 6831 000030DB 202020202020202020- 6831 000030E4 2020202020DDDBDE 6832 000030EC DDDBDE202020202020- db 221, 219, 222, " | '--' | `--' | .----) | ", 221, 219, 222 6832 000030F5 202020202020202020- 6832 000030FE 20202020207C202027- 6832 00003107 2D2D2720207C202060- 6832 00003110 2D2D2720207C202E2D- 6832 00003119 2D2D2D292020207C20- 6832 00003122 202020202020202020- 6832 0000312B 202020202020202020- 6832 00003134 2020202020DDDBDE 6833 0000313C DDDBDE202020202020- db 221, 219, 222, " |_______/ \______/ |_______/ ", 221, 219, 222 6833 00003145 202020202020202020- 6833 0000314E 20202020207C5F5F5F- 6833 00003157 5F5F5F5F2F205C5F5F- 6833 00003160 5F5F5F5F2F20207C5F- 6833 00003169 5F5F5F5F5F5F2F2020- 6833 00003172 202020202020202020- 6833 0000317B 202020202020202020- 6833 00003184 2020202020DDDBDE 6834 0000318C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6834 00003195 202020202020202020- 6834 0000319E 202020202020202020- 6834 000031A7 202020202020202020- 6834 000031B0 202020202020202020- 6834 000031B9 202020202020202020- 6834 000031C2 202020202020202020- 6834 000031CB 202020202020202020- 6834 000031D4 2020202020DDDBDE 6835 000031DC DDDBDE20202020202E- db 221, 219, 222, " .______ __ ___ ____ ____ _______ .______ ", 221, 219, 222 6835 000031E5 5F5F5F5F5F5F202020- 6835 000031EE 205F5F202020202020- 6835 000031F7 202020205F5F5F2020- 6835 00003200 205F5F5F5F20202020- 6835 00003209 5F5F5F5F20205F5F5F- 6835 00003212 5F5F5F5F202E5F5F5F- 6835 0000321B 5F5F5F202020202020- 6835 00003224 2020202020DDDBDE 6836 0000322C DDDBDE20202020207C- db 221, 219, 222, " | _ \ | | / \ \ \ / / | ____|| _ \ ", 221, 219, 222 6836 00003235 2020205F20205C2020- 6836 0000323E 7C20207C2020202020- 6836 00003247 2020202F2020205C20- 6836 00003250 205C2020205C20202F- 6836 00003259 2020202F207C202020- 6836 00003262 5F5F5F5F7C7C202020- 6836 0000326B 5F20205C2020202020- 6836 00003274 2020202020DDDBDE 6837 0000327C DDDBDE20202020207C- db 221, 219, 222, " | |_) | | | / ^ \ \ \/ / | |__ | |_) | ", 221, 219, 222 6837 00003285 20207C5F2920207C20- 6837 0000328E 7C20207C2020202020- 6837 00003297 20202F20205E20205C- 6837 000032A0 20205C2020205C2F20- 6837 000032A9 20202F20207C20207C- 6837 000032B2 5F5F2020207C20207C- 6837 000032BB 5F2920207C20202020- 6837 000032C4 2020202020DDDBDE 6838 000032CC DDDBDE20202020207C- db 221, 219, 222, " | ___/ | | / /_\ \ \_ _/ | __| | / ", 221, 219, 222 6838 000032D5 2020205F5F5F2F2020- 6838 000032DE 7C20207C2020202020- 6838 000032E7 202F20202F5F5C2020- 6838 000032F0 5C20205C5F20202020- 6838 000032F9 5F2F2020207C202020- 6838 00003302 5F5F7C20207C202020- 6838 0000330B 2020202F2020202020- 6838 00003314 2020202020DDDBDE 6839 0000331C DDDBDE20202020207C- db 221, 219, 222, " | | | `----./ _____ \ | | | |____ | |\ \----. ", 221, 219, 222 6839 00003325 20207C202020202020- 6839 0000332E 7C2020602D2D2D2D2E- 6839 00003337 2F20205F5F5F5F5F20- 6839 00003340 205C2020207C20207C- 6839 00003349 20202020207C20207C- 6839 00003352 5F5F5F5F207C20207C- 6839 0000335B 5C20205C2D2D2D2D2E- 6839 00003364 2020202020DDDBDE 6840 0000336C DDDBDE20202020207C- db 221, 219, 222, " | _| |_______/__/ \__\ |__| |_______|| _| `._____| ", 221, 219, 222 6840 00003375 205F7C202020202020- 6840 0000337E 7C5F5F5F5F5F5F5F2F- 6840 00003387 5F5F2F20202020205C- 6840 00003390 5F5F5C20207C5F5F7C- 6840 00003399 20202020207C5F5F5F- 6840 000033A2 5F5F5F5F7C7C205F7C- 6840 000033AB 20602E5F5F5F5F5F7C- 6840 000033B4 2020202020DDDBDE 6841 000033BC DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6841 000033C5 202020202020202020- 6841 000033CE 202020202020202020- 6841 000033D7 202020202020202020- 6841 000033E0 202020202020202020- 6841 000033E9 202020202020202020- 6841 000033F2 202020202020202020- 6841 000033FB 202020202020202020- 6841 00003404 2020202020DDDBDE 6842 0000340C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6842 00003415 202020202020202020- 6842 0000341E 202020202020202020- 6842 00003427 202020202020202020- 6842 00003430 202020202020202020- 6842 00003439 202020202020202020- 6842 00003442 202020202020202020- 6842 0000344B 202020202020202020- 6842 00003454 2020202020DDDBDE 6843 0000345C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6843 00003465 202020202020202020- 6843 0000346E 202020202020202020- 6843 00003477 202020202020202020- 6843 00003480 202020202020202020- 6843 00003489 202020202020202020- 6843 00003492 202020202020202020- 6843 0000349B 202020202020202020- 6843 000034A4 2020202020DDDBDE 6844 000034AC DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6844 000034B5 202020202020202020- 6844 000034BE 202020202020202020- 6844 000034C7 202020202020202020- 6844 000034D0 202020202020202020- 6844 000034D9 202020202020202020- 6844 000034E2 202020202020202020- 6844 000034EB 202020202020202020- 6844 000034F4 2020202020DDDBDE 6845 000034FC DDDBDE202020202020- db 221, 219, 222, " WELCOME TO ", 221, 219, 222 6845 00003505 202020202020202020- 6845 0000350E 202020202020202020- 6845 00003517 202020202020202057- 6845 00003520 454C434F4D4520544F- 6845 00003529 202020202020202020- 6845 00003532 202020202020202020- 6845 0000353B 202020202020202020- 6845 00003544 2020202020DDDBDE 6846 0000354C DDDBDE202020202020- db 221, 219, 222, " DOS PLAYER ", 221, 219, 222 6846 00003555 202020202020202020- 6846 0000355E 202020202020202020- 6846 00003567 202020202020202044- 6846 00003570 4F5320504C41594552- 6846 00003579 202020202020202020- 6846 00003582 202020202020202020- 6846 0000358B 202020202020202020- 6846 00003594 2020202020DDDBDE 6847 0000359C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6847 000035A5 202020202020202020- 6847 000035AE 202020202020202020- 6847 000035B7 202020202020202020- 6847 000035C0 202020202020202020- 6847 000035C9 202020202020202020- 6847 000035D2 202020202020202020- 6847 000035DB 202020202020202020- 6847 000035E4 2020202020DDDBDE 6848 000035EC DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6848 000035F5 202020202020202020- 6848 000035FE 202020202020202020- 6848 00003607 202020202020202020- 6848 00003610 202020202020202020- 6848 00003619 202020202020202020- 6848 00003622 202020202020202020- 6848 0000362B 202020202020202020- 6848 00003634 2020202020DDDBDE 6849 0000363C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6849 00003645 202020202020202020- 6849 0000364E 202020202020202020- 6849 00003657 202020202020202020- 6849 00003660 202020202020202020- 6849 00003669 202020202020202020- 6849 00003672 202020202020202020- 6849 0000367B 202020202020202020- 6849 00003684 2020202020DDDBDE 6850 0000368C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6850 00003695 202020202020202020- 6850 0000369E 202020202020202020- 6850 000036A7 202020202020202020- 6850 000036B0 202020202020202020- 6850 000036B9 202020202020202020- 6850 000036C2 202020202020202020- 6850 000036CB 202020202020202020- 6850 000036D4 2020202020DDDBDE 6851 000036DC DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6851 000036E5 202020202020202020- 6851 000036EE 202020202020202020- 6851 000036F7 202020202020202020- 6851 00003700 202020202020202020- 6851 00003709 202020202020202020- 6851 00003712 202020202020202020- 6851 0000371B 202020202020202020- 6851 00003724 2020202020DDDBDE 6852 0000372C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6852 00003735 202020202020202020- 6852 0000373E 202020202020202020- 6852 00003747 202020202020202020- 6852 00003750 202020202020202020- 6852 00003759 202020202020202020- 6852 00003762 202020202020202020- 6852 0000376B 202020202020202020- 6852 00003774 2020202020DDDBDE 6853 0000377C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6853 00003785 202020202020202020- 6853 0000378E 202020202020202020- 6853 00003797 202020202020202020- 6853 000037A0 202020202020202020- 6853 000037A9 202020202020202020- 6853 000037B2 202020202020202020- 6853 000037BB 202020202020202020- 6853 000037C4 2020202020DDDBDE 6854 000037CC DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6854 000037D5 202020202020202020- 6854 000037DE 202020202020202020- 6854 000037E7 202020202020202020- 6854 000037F0 202020202020202020- 6854 000037F9 202020202020202020- 6854 00003802 202020202020202020- 6854 0000380B 202020202020202020- 6854 00003814 2020202020DDDBDE 6855 0000381C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6855 00003825 202020202020202020- 6855 0000382E 202020202020202020- 6855 00003837 202020202020202020- 6855 00003840 202020202020202020- 6855 00003849 202020202020202020- 6855 00003852 202020202020202020- 6855 0000385B 202020202020202020- 6855 00003864 2020202020DDDBDE 6856 0000386C DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6856 00003875 202020202020202020- 6856 0000387E 202020202020202020- 6856 00003887 202020202020202020- 6856 00003890 202020202020202020- 6856 00003899 202020202020202020- 6856 000038A2 202020202020202020- 6856 000038AB 202020202020202020- 6856 000038B4 2020202020DDDBDE 6857 000038BC 00 db 0 6858 6859 ; ------------------------------------------------------------- 6860 6861 ; 25/12/2024 6862 PlayingScreen: 6863 000038BD DBDBDBDBDBDBDBDBDB- db 34 dup(219), " DOS Player ", 34 dup(219) 6863 000038C6 DBDBDBDBDBDBDBDBDB- 6863 000038CF DBDBDBDBDBDBDBDBDB- 6863 000038D8 DBDBDBDBDBDBDB2044- 6863 000038E1 4F5320506C61796572- 6863 000038EA 20DBDBDBDBDBDBDBDB- 6863 000038F3 DBDBDBDBDBDBDBDBDB- 6863 000038FC DBDBDBDBDBDBDBDBDB- 6863 00003905 DBDBDBDBDBDBDBDB 6864 0000390D C9CDCDCDCDCDCDCDCD- db 201, 78 dup(205), 187 6864 00003916 CDCDCDCDCDCDCDCDCD- 6864 0000391F CDCDCDCDCDCDCDCDCD- 6864 00003928 CDCDCDCDCDCDCDCDCD- 6864 00003931 CDCDCDCDCDCDCDCDCD- 6864 0000393A CDCDCDCDCDCDCDCDCD- 6864 00003943 CDCDCDCDCDCDCDCDCD- 6864 0000394C CDCDCDCDCDCDCDCDCD- 6864 00003955 CDCDCDCDCDCDCDBB 6865 0000395D BA2020202020202020- db 186, 33 dup(32), " User Guide ", 33 dup(32), 186 6865 00003966 202020202020202020- 6865 0000396F 202020202020202020- 6865 00003978 202020202020202055- 6865 00003981 736572204775696465- 6865 0000398A 202020202020202020- 6865 00003993 202020202020202020- 6865 0000399C 202020202020202020- 6865 000039A5 20202020202020BA 6866 000039AD BA2020202020203C53- db 186, 6 dup(32), " Play/Pause ", 4 dup(32), "/

Next/Previous", 9 dup(32), 186 6866 000039B6 706163653E20202020- 6866 000039BF 2020202020506C6179- 6866 000039C8 2F5061757365202020- 6866 000039D1 20202020203C4E3E2F- 6866 000039DA 3C503E202020202020- 6866 000039E3 2020204E6578742F50- 6866 000039EC 726576696F75732020- 6866 000039F5 20202020202020BA 6867 000039FD BA2020202020203C53- db 186, 6 dup(32), " Stop ", 4 dup(32), "/ Wave Lighting", 9 dup(32), 186 6867 00003A06 3E2020202020202020- 6867 00003A0F 202020202053746F70- 6867 00003A18 202020202020202020- 6867 00003A21 20202020203C456E74- 6867 00003A2A 65723E2F3C473E2020- 6867 00003A33 20202057617665204C- 6867 00003A3C 69676874696E672020- 6867 00003A45 20202020202020BA 6868 00003A4D BA2020202020203C46- db 186, 6 dup(32), " Forwards ", 4 dup(32), "<+>/<-> Inc/Dec Volume", 8 dup(32), 186 6868 00003A56 3E2020202020202020- 6868 00003A5F 2020202020466F7277- 6868 00003A68 617264732020202020- 6868 00003A71 20202020203C2B3E2F- 6868 00003A7A 3C2D3E202020202020- 6868 00003A83 202020496E632F4465- 6868 00003A8C 6320566F6C756D6520- 6868 00003A95 20202020202020BA 6869 00003A9D BA2020202020203C42- db 186, 6 dup(32), " Backwards ", 4 dup(32), " Quit Program ", 9 dup(32), 186 6869 00003AA6 3E2020202020202020- 6869 00003AAF 20202020204261636B- 6869 00003AB8 776172647320202020- 6869 00003AC1 20202020203C513E20- 6869 00003ACA 202020202020202020- 6869 00003AD3 202020517569742050- 6869 00003ADC 726F6772616D202020- 6869 00003AE5 20202020202020BA 6870 00003AED CCCDCDCDCDCDCDCDCD- db 204, 78 dup(205), 185 6870 00003AF6 CDCDCDCDCDCDCDCDCD- 6870 00003AFF CDCDCDCDCDCDCDCDCD- 6870 00003B08 CDCDCDCDCDCDCDCDCD- 6870 00003B11 CDCDCDCDCDCDCDCDCD- 6870 00003B1A CDCDCDCDCDCDCDCDCD- 6870 00003B23 CDCDCDCDCDCDCDCDCD- 6870 00003B2C CDCDCDCDCDCDCDCDCD- 6870 00003B35 CDCDCDCDCDCDCDB9 6871 00003B3D BA2020202020204669- db 186, 6 dup(32), "File Name : ", 4 dup(32), "Bit-Rate : 0 Bits ", 9 dup(32), 186 6871 00003B46 6C65204E616D65203A- 6871 00003B4F 202020202020202020- 6871 00003B58 202020202020202020- 6871 00003B61 20202020204269742D- 6871 00003B6A 5261746520203A2020- 6871 00003B73 202020302020426974- 6871 00003B7C 732020202020202020- 6871 00003B85 20202020202020BA 6872 00003B8D BA2020202020204672- db 186, 6 dup(32), "Frequency : 0 Hz ", 4 dup(32), "#-Channels: 0 ", 9 dup(32), 186 6872 00003B96 657175656E6379203A- 6872 00003B9F 202020202030202020- 6872 00003BA8 2020487A2020202020- 6872 00003BB1 2020202020232D4368- 6872 00003BBA 616E6E656C733A2020- 6872 00003BC3 202020302020202020- 6872 00003BCC 202020202020202020- 6872 00003BD5 20202020202020BA 6873 00003BDD C8CDCDCDCDCDCDCDCD- db 200, 78 dup(205), 188 6873 00003BE6 CDCDCDCDCDCDCDCDCD- 6873 00003BEF CDCDCDCDCDCDCDCDCD- 6873 00003BF8 CDCDCDCDCDCDCDCDCD- 6873 00003C01 CDCDCDCDCDCDCDCDCD- 6873 00003C0A CDCDCDCDCDCDCDCDCD- 6873 00003C13 CDCDCDCDCDCDCDCDCD- 6873 00003C1C CDCDCDCDCDCDCDCDCD- 6873 00003C25 CDCDCDCDCDCDCDBC 6874 00003C2D 202020202020202020- db 80 dup(32) 6874 00003C36 202020202020202020- 6874 00003C3F 202020202020202020- 6874 00003C48 202020202020202020- 6874 00003C51 202020202020202020- 6874 00003C5A 202020202020202020- 6874 00003C63 202020202020202020- 6874 00003C6C 202020202020202020- 6874 00003C75 2020202020202020 6875 improper_samplerate_txt: 6876 read_error_txt: 6877 00003C7D 202020202020202020- db 80 dup(32) 6877 00003C86 202020202020202020- 6877 00003C8F 202020202020202020- 6877 00003C98 202020202020202020- 6877 00003CA1 202020202020202020- 6877 00003CAA 202020202020202020- 6877 00003CB3 202020202020202020- 6877 00003CBC 202020202020202020- 6877 00003CC5 2020202020202020 6878 00003CCD 202020202020202020- db 80 dup(32) 6878 00003CD6 202020202020202020- 6878 00003CDF 202020202020202020- 6878 00003CE8 202020202020202020- 6878 00003CF1 202020202020202020- 6878 00003CFA 202020202020202020- 6878 00003D03 202020202020202020- 6878 00003D0C 202020202020202020- 6878 00003D15 2020202020202020 6879 00003D1D 202020202020202020- db 80 dup(32) 6879 00003D26 202020202020202020- 6879 00003D2F 202020202020202020- 6879 00003D38 202020202020202020- 6879 00003D41 202020202020202020- 6879 00003D4A 202020202020202020- 6879 00003D53 202020202020202020- 6879 00003D5C 202020202020202020- 6879 00003D65 2020202020202020 6880 00003D6D 202020202020202020- db 80 dup(32) 6880 00003D76 202020202020202020- 6880 00003D7F 202020202020202020- 6880 00003D88 202020202020202020- 6880 00003D91 202020202020202020- 6880 00003D9A 202020202020202020- 6880 00003DA3 202020202020202020- 6880 00003DAC 202020202020202020- 6880 00003DB5 2020202020202020 6881 00003DBD 202020202020202020- db 80 dup(32) 6881 00003DC6 202020202020202020- 6881 00003DCF 202020202020202020- 6881 00003DD8 202020202020202020- 6881 00003DE1 202020202020202020- 6881 00003DEA 202020202020202020- 6881 00003DF3 202020202020202020- 6881 00003DFC 202020202020202020- 6881 00003E05 2020202020202020 6882 00003E0D 202020202020202020- db 80 dup(32) 6882 00003E16 202020202020202020- 6882 00003E1F 202020202020202020- 6882 00003E28 202020202020202020- 6882 00003E31 202020202020202020- 6882 00003E3A 202020202020202020- 6882 00003E43 202020202020202020- 6882 00003E4C 202020202020202020- 6882 00003E55 2020202020202020 6883 00003E5D 202020202020202020- db 80 dup(32) 6883 00003E66 202020202020202020- 6883 00003E6F 202020202020202020- 6883 00003E78 202020202020202020- 6883 00003E81 202020202020202020- 6883 00003E8A 202020202020202020- 6883 00003E93 202020202020202020- 6883 00003E9C 202020202020202020- 6883 00003EA5 2020202020202020 6884 00003EAD 202020202020202020- db 80 dup(32) 6884 00003EB6 202020202020202020- 6884 00003EBF 202020202020202020- 6884 00003EC8 202020202020202020- 6884 00003ED1 202020202020202020- 6884 00003EDA 202020202020202020- 6884 00003EE3 202020202020202020- 6884 00003EEC 202020202020202020- 6884 00003EF5 2020202020202020 6885 00003EFD 202020202020202020- db 80 dup(32) 6885 00003F06 202020202020202020- 6885 00003F0F 202020202020202020- 6885 00003F18 202020202020202020- 6885 00003F21 202020202020202020- 6885 00003F2A 202020202020202020- 6885 00003F33 202020202020202020- 6885 00003F3C 202020202020202020- 6885 00003F45 2020202020202020 6886 00003F4D 202020202020202020- db 80 dup(32) 6886 00003F56 202020202020202020- 6886 00003F5F 202020202020202020- 6886 00003F68 202020202020202020- 6886 00003F71 202020202020202020- 6886 00003F7A 202020202020202020- 6886 00003F83 202020202020202020- 6886 00003F8C 202020202020202020- 6886 00003F95 2020202020202020 6887 00003F9D 202020202020202020- db 80 dup(32) 6887 00003FA6 202020202020202020- 6887 00003FAF 202020202020202020- 6887 00003FB8 202020202020202020- 6887 00003FC1 202020202020202020- 6887 00003FCA 202020202020202020- 6887 00003FD3 202020202020202020- 6887 00003FDC 202020202020202020- 6887 00003FE5 2020202020202020 6888 00003FED 202020202020202020- db 80 dup(32) 6888 00003FF6 202020202020202020- 6888 00003FFF 202020202020202020- 6888 00004008 202020202020202020- 6888 00004011 202020202020202020- 6888 0000401A 202020202020202020- 6888 00004023 202020202020202020- 6888 0000402C 202020202020202020- 6888 00004035 2020202020202020 6889 0000403D 202020202020202020- db 80 dup(32) 6889 00004046 202020202020202020- 6889 0000404F 202020202020202020- 6889 00004058 202020202020202020- 6889 00004061 202020202020202020- 6889 0000406A 202020202020202020- 6889 00004073 202020202020202020- 6889 0000407C 202020202020202020- 6889 00004085 2020202020202020 6890 0000408D 202020202020202020- db 80 dup(32) 6890 00004096 202020202020202020- 6890 0000409F 202020202020202020- 6890 000040A8 202020202020202020- 6890 000040B1 202020202020202020- 6890 000040BA 202020202020202020- 6890 000040C3 202020202020202020- 6890 000040CC 202020202020202020- 6890 000040D5 2020202020202020 6891 000040DD 202020202020202020- db 80 dup(32) 6891 000040E6 202020202020202020- 6891 000040EF 202020202020202020- 6891 000040F8 202020202020202020- 6891 00004101 202020202020202020- 6891 0000410A 202020202020202020- 6891 00004113 202020202020202020- 6891 0000411C 202020202020202020- 6891 00004125 2020202020202020 6892 0000412D 202020202020202020- db 80 dup(32) 6892 00004136 202020202020202020- 6892 0000413F 202020202020202020- 6892 00004148 202020202020202020- 6892 00004151 202020202020202020- 6892 0000415A 202020202020202020- 6892 00004163 202020202020202020- 6892 0000416C 202020202020202020- 6892 00004175 2020202020202020 6893 0000417D 202020202020202020- db 80 dup(32) 6893 00004186 202020202020202020- 6893 0000418F 202020202020202020- 6893 00004198 202020202020202020- 6893 000041A1 202020202020202020- 6893 000041AA 202020202020202020- 6893 000041B3 202020202020202020- 6893 000041BC 202020202020202020- 6893 000041C5 2020202020202020 6894 000041CD 202020202020202020- db 80 dup(32) 6894 000041D6 202020202020202020- 6894 000041DF 202020202020202020- 6894 000041E8 202020202020202020- 6894 000041F1 202020202020202020- 6894 000041FA 202020202020202020- 6894 00004203 202020202020202020- 6894 0000420C 202020202020202020- 6894 00004215 2020202020202020 6895 0000421D CDCDCDCDCDCDCDCDCD- db 80 dup(205) 6895 00004226 CDCDCDCDCDCDCDCDCD- 6895 0000422F CDCDCDCDCDCDCDCDCD- 6895 00004238 CDCDCDCDCDCDCDCDCD- 6895 00004241 CDCDCDCDCDCDCDCDCD- 6895 0000424A CDCDCDCDCDCDCDCDCD- 6895 00004253 CDCDCDCDCDCDCDCDCD- 6895 0000425C CDCDCDCDCDCDCDCDCD- 6895 00004265 CDCDCDCDCDCDCDCD 6896 0000426D 202020202020202020- db 80 dup(32) 6896 00004276 202020202020202020- 6896 0000427F 202020202020202020- 6896 00004288 202020202020202020- 6896 00004291 202020202020202020- 6896 0000429A 202020202020202020- 6896 000042A3 202020202020202020- 6896 000042AC 202020202020202020- 6896 000042B5 2020202020202020 6897 000042BD 202020202020202020- db 33 dup(32), "00:00 ", 174, 175, " 00:00", 24 dup(32), "VOL 000%" 6897 000042C6 202020202020202020- 6897 000042CF 202020202020202020- 6897 000042D8 20202020202030303A- 6897 000042E1 303020AEAF2030303A- 6897 000042EA 303020202020202020- 6897 000042F3 202020202020202020- 6897 000042FC 202020202020202056- 6897 00004305 4F4C2030303025 6898 0000430C 00 db 0 6899 6900 ; 25/12/2024 6901 ; 28/11/2024 6902 IsInSplash: 6903 0000430D 01 db 1 6904 6905 SplashFileName: 6906 0000430E 53504C4153482E5741- db "SPLASH.WAV", 0 6906 00004317 5600 6907 6908 ; ------------------------------------------------------------- 6909 6910 ; 22/12/2024 6911 fillblock: 6912 00004319 FF times 14 db 0FFh 6913 00004327 0000 dw 0 6914 6915 ; ------------------------------------------------------------- 6916 6917 ; 23/11/2024 6918 colors: 6919 00004329 0F0B0A0C0E090D0F db 0Fh, 0Bh, 0Ah, 0Ch, 0Eh, 09h, 0Dh, 0Fh 6920 ; white, cyan, green, red, yellow, blue, magenta 6921 00004331 0B ccolor: db 0Bh ; cyan 6922 6923 EOF: 6924 6925 ; ------------------------------------------------------------- 6926 6927 bss: 6928 6929 ABSOLUTE bss 6930 6931 00004332 ???? alignb 4 6932 6933 ; 21/12/2024 6934 fontbuff1: 6935 00004334 resb 256*14 ; 8x14 font data (from system) 6936 fontbuff2: 6937 00005134 resb 256*16 ; 8x16 font data (modif. from 8x14) 6938 6939 ; 11/12/2024 6940 wleds_addr: 6941 00006134 resd 80*16 ; 32 bit addrs, 80 leds, 16 volume levels 6942 ; 22/12/2024 6943 prev_leds: 6944 00007534 resd 80 ; previous lighting leds 6945 6946 ; 24/12/2024 6947 wpoints_dif: ; wave lighting points factor (differential) 6948 00007674 ???????? resd 1 ; required bytes for 1/18 second wave lighting 6949 graphstart: 6950 00007678 ???????? resd 1 ; start (top) line/row for wave lighting points 6951 6952 LFB_ADDR: 6953 0000767C ???????? resd 1 6954 ;nextrow: 6955 ;resd 1 6956 screenpos: ; hw = (cursor) row, lw = (cursor) column 6957 00007680 ???????? resd 1 6958 00007684 ???????? wcolor: resd 1 6959 ; 26/12/2024 6960 ;tcolor: resb 1 ; text color 6961 columns: 6962 00007688 ?? resb 1 6963 00007689 ?? pbprev: resb 1 ; previous progress bar indicator position 6964 6965 0000768A ???? alignb 4 6966 6967 bss_start: 6968 6969 ; 24/12/2024 6970 prev_points: 6971 0000768C resd 640 ; previous wave points (which are lighting) 6972 6973 ; 18/11/2024 6974 stopped: 6975 0000808C ?? resb 1 6976 0000808D ?? tLO: resb 1 6977 ; 21/11/2024 6978 0000808E ?? tLP: resb 1 6979 ; 19/11/2024 6980 0000808F ?? wleds: resb 1 6981 wleds_dif: 6982 00008090 ???????? resd 1 6983 00008094 ???????? pbuf_o: resd 1 6984 ; 07/12/2024 6985 00008098 ?? pbuf_s: resb 1 6986 6987 ; 07/12/2024 6988 ; 24/11/2024 6989 half_buffer: 6990 00008099 ?? resb 1 ; dma half buffer 1 or 2 (0 or 1) 6991 6992 ; 30/05/2024 6993 0000809A ?? VRA: resb 1 ; Variable Rate Audio Support Status 6994 6995 ; 24/12/2024 6996 0000809B ?? p_mode: resb 1 ; point mode (as alternative to LED mode) 6997 6998 ; 25/12/2024 6999 ; 29/11/2024 7000 command: 7001 0000809C ?? resb 1 7002 filecount: 7003 0000809D ?? resb 1 7004 7005 ; 30/11/2024 7006 0000809E ???? alignb 4 7007 7008 ;;;;;;;;;;;;;; 7009 ; 14/11/2024 7010 ; (Ref: player.asm, Matan Alfasi, 2017) 7011 WAVFILEHEADERbuff: 7012 RIFF_ChunkID: 7013 000080A0 ???????? resd 1 ; Must be equal to "RIFF" - big-endian 7014 ; 0x52494646 7015 RIFF_ChunkSize: 7016 000080A4 ???????? resd 1 ; Represents total file size, not 7017 ; including the first 2 fields 7018 ; (Total_File_Size - 8), little-endian 7019 RIFF_Format: 7020 000080A8 ???????? resd 1 ; Must be equal to "WAVE" - big-endian 7021 ; 0x57415645 7022 7023 ;; WAVE header parameters ("Sub-chunk") 7024 WAVE_SubchunkID: 7025 000080AC ???????? resd 1 ; Must be equal to "fmt " - big-endian 7026 ; 0x666d7420 7027 WAVE_SubchunkSize: 7028 000080B0 ???????? resd 1 ; Represents total chunk size 7029 WAVE_AudioFormat: 7030 000080B4 ???? resw 1 ; PCM (Raw) - is 1, other - is a form 7031 ; of compression, not supported. 7032 WAVE_NumChannels: 7033 000080B6 ???? resw 1 ; Number of channels, Mono-1, Stereo-2 7034 WAVE_SampleRate: 7035 000080B8 ???????? resd 1 ; Frequency rate, in Hz (8000, 44100 ...) 7036 WAVE_ByteRate: 7037 000080BC ???????? resd 1 ; SampleRate * NumChannels * BytesPerSample 7038 WAVE_BlockAlign: 7039 000080C0 ???? resw 1 ; NumChannels * BytesPerSample 7040 ; Number of bytes for one sample. 7041 WAVE_BitsPerSample: 7042 000080C2 ???? resw 1 ; 8 = 8 bits, 16 = 16 bits, etc. 7043 7044 ;; DATA header parameters 7045 DATA_SubchunkID: 7046 000080C4 ???????? resd 1 ; Must be equal to "data" - big-endian 7047 ; 0x64617461 7048 DATA_SubchunkSize: 7049 000080C8 ???????? resd 1 ; NumSamples * NumChannels * BytesPerSample 7050 ; Number of bytes in the data. 7051 ;;;;;;;;;;;;;; 7052 7053 ; 15/11/2024 7054 cursortype: 7055 000080CC ???? resw 1 7056 000080CE ?? flags: resb 1 7057 ; 06/11/2023 7058 ac97_int_ln_reg: 7059 000080CF ?? resb 1 7060 filehandle: 7061 000080D0 ???????? resd 1 7062 7063 ; 25/12/2024 7064 ; 30/11/2024 7065 ;argc: resb 1 ; argument count 7066 000080D4 ???????? argv: resd 1 ; current argument (wav file) ptr 7067 000080D8 ???????? argvf: resd 1 ; 1st argument (wav file) ptr 7068 000080DC ???????? argvl: resd 1 ; last argument (wav file) ptr 7069 7070 ; 30/05/2024 7071 wav_file_name: 7072 000080E0 resb 80 ; wave file, path name (<= 80 bytes) 7073 00008130 ???? resw 1 ; 30/11/2024 7074 7075 ; 08/11/2023 7076 ; 07/11/2023 7077 fbs_shift: 7078 00008132 ?? resb 1 7079 ; 07/12/2024 7080 00008133 ?? SRB: resb 1 7081 7082 ; 12/11/2016 - Erdogan Tan 7083 bus_dev_fn: 7084 00008134 ???????? resd 1 7085 dev_vendor: 7086 00008138 ???????? resd 1 7087 7088 ; 17/02/2017 7089 ; NAMBAR: Native Audio Mixer Base Address Register 7090 ; (ICH, Audio D31:F5, PCI Config Space) Address offset: 10h-13h 7091 ; NABMBAR: Native Audio Bus Mastering Base Address register 7092 ; (ICH, Audio D31:F5, PCI Config Space) Address offset: 14h-17h 7093 0000813C ???? NAMBAR: resw 1 ; BAR for mixer 7094 NABMBAR: 7095 0000813E ???? resw 1 ; BAR for bus master regs 7096 7097 ; 15/11/2024 7098 loadfromwavfile: 7099 00008140 ???????? resd 1 ; 'loadfromfile' or load+conversion proc address 7100 loadsize: 7101 00008144 ???????? resd 1 ; (.wav file) read count (bytes) per one time 7102 buffersize: 7103 00008148 ???????? resd 1 ; 16 bit samples (not bytes) 7104 7105 ; 14/11/2024 7106 TotalTime: 7107 0000814C ???????? resd 1 ; Total (WAV File) Playing Time in seconds 7108 ProgressTime: 7109 00008150 ???????? resd 1 7110 00008154 ???????? count: resd 1 ; byte count of one (wav file) read 7111 LoadedDataBytes: 7112 00008158 ???????? resd 1 ; total read/load count 7113 7114 timerticks: 7115 0000815C ???????? resd 1 ; (to eliminate excessive lookup of events in tuneloop) 7116 ; (in order to get the emulator/qemu to run correctly) 7117 ; 14/11/2024 7118 bss_end: 7119 7120 ; 02/12/2024 7121 00008160 alignb 4096 7122 7123 ; 07/12/2024 7124 ; 26/11/2023 7125 audio_buffer: 7126 00009000 resb 65536 ; DMA Buffer Size / 2 7127 7128 ; 01/12/2024 7129 ; 26/11/2023 7130 temp_buffer: 7131 00019000 resb 65536 ; rb BUFFERSIZE 7132 7133 ; 27/12/2024 7134 alignb 4096 7135 00029000 g_buff: resb 640*4