1 ; **************************************************************************** 2 ; dplayvga.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; DPLAYVGA.PRG ! AC'97 (ICH) .WAV PLAYER program by Erdogan TAN 5 ; 6 ; 21/12/2024 7 ; 8 ; [ Last Modification: 02/02/2025 ] 9 ; 10 ; Modified from PLAYWAV9.PRG .wav player program by Erdogan Tan, 18/12/2024 11 ; 12 ; **************************************************************************** 13 ; nasm dplayvga.s -l dplayvga.txt -o DPLAYVGA.PRG -Z error.txt 14 ; (modified from 'circle10.s', 18/02/2021) 15 16 ; Draw graphics by using 'sysvideo' bx=0305h 17 ; and display text by using bx=010Fh 18 19 ; 07/12/2024 - playwav9.s - interrupt (srb) + tuneloop version 20 ; ------------------------------------------------------------ 21 ; INTERRUPT (SRB) + TUNELOOP version ; 24/11/2024 (PLAYWAV9.ASM) 22 ; (running in DOSBOX, VIRTUALBOX, QEMU is ok) 23 ; Signal Response Byte = message/signal to user about an event/interrupt 24 ; as requested (TuneLoop procedure continuously checks this SRB) 25 ; (TRDOS 386 v2 feature is used here as very simple interrupt handler output) 26 27 ; ------------------------------------------------------------ 28 29 ; 30/11/2024 30 ; 20/08/2024 ; TRDOS 386 v2.0.9 31 ; 29/04/2016 32 _ver equ 0 33 _exit equ 1 34 _fork equ 2 35 _read equ 3 36 _write equ 4 37 _open equ 5 38 _close equ 6 39 _wait equ 7 40 _creat equ 8 41 _link equ 9 42 _unlink equ 10 43 _exec equ 11 44 _chdir equ 12 45 _time equ 13 46 _mkdir equ 14 47 _chmod equ 15 48 _chown equ 16 49 _break equ 17 50 _stat equ 18 51 _seek equ 19 52 _tell equ 20 53 _mount equ 21 54 _umount equ 22 55 _setuid equ 23 56 _getuid equ 24 57 _stime equ 25 58 _quit equ 26 59 _intr equ 27 60 _fstat equ 28 61 _emt equ 29 62 _mdate equ 30 63 _video equ 31 64 _audio equ 32 65 _timer equ 33 66 _sleep equ 34 67 _msg equ 35 68 _geterr equ 36 69 _fpsave equ 37 70 _pri equ 38 71 _rele equ 39 72 _fff equ 40 73 _fnf equ 41 74 _alloc equ 42 75 _dalloc equ 43 76 _calbac equ 44 77 _dma equ 45 78 _stdio equ 46 79 80 ; ------------------------------------------------------------ 81 82 %macro sys 1-4 83 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 84 ; 03/09/2015 85 ; 13/04/2015 86 ; Retro UNIX 386 v1 system call. 87 %if %0 >= 2 88 mov ebx, %2 89 %if %0 >= 3 90 mov ecx, %3 91 %if %0 = 4 92 mov edx, %4 93 %endif 94 %endif 95 %endif 96 mov eax, %1 97 ;int 30h 98 int 40h ; TRDOS 386 (TRDOS v2.0) 99 %endmacro 100 101 ; Retro UNIX 386 v1 system call format: 102 ; sys systemcall (eax) , , 103 104 ; ------------------------------------------------------------ 105 106 ; player internal variables and other equates. 107 BUFFERSIZE equ 65536 108 ENDOFFILE equ 1 ; flag for knowing end of file 109 110 ; ------------------------------------------------------------ 111 112 [BITS 32] ; 32-bit intructions 113 114 [ORG 0] 115 116 START_CODE: 117 ; clear bss 118 00000000 BF[5C740000] mov edi, bss_start 119 00000005 B931000000 mov ecx, (bss_end - bss_start)/4 120 ;xor eax, eax 121 0000000A F3AB rep stosd 122 123 ; 21/12/2024 124 ; program message 125 0000000C BE[61400000] mov esi, program_msg 126 00000011 E86C050000 call print_msg 127 128 00000016 30E4 xor ah, ah 129 ;int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY 130 ; Return: AH = scan code, AL = character 131 00000018 CD32 int 32h ; TRDOS 386 Keyboard interrupt 132 133 ; set video mode to 03h (clear screen) 134 0000001A 66B80300 mov ax, 03h 135 0000001E CD31 int 31h 136 137 ; Prints the Credits Text. 138 sys _msg, Credits, 255, 0Bh 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000020 BB[1C290000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000025 B9FF000000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 0000002A BA0B000000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000002F B823000000 <1> mov eax, %1 97 <1> 98 00000034 CD40 <1> int 40h 139 140 ; ------------------------------------------------------------- 141 142 ; 21/12/2024 143 ; Detect (& Enable) AC'97 Audio Device 144 00000036 E847070000 call DetectAC97 145 0000003B 731B jnc short ac97_hardware_ready 146 147 ; 30/11/2024 148 ; 30/05/2024 149 _dev_not_ready: 150 ; couldn't find the audio device! 151 sys _msg, noDevMsg, 255, 0Fh 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000003D BB[AF290000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000042 B9FF000000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00000047 BA0F000000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000004C B823000000 <1> mov eax, %1 97 <1> 98 00000051 CD40 <1> int 40h 152 00000053 E9C7040000 jmp Exit 153 154 ac97_hardware_ready: 155 00000058 E8C4080000 call write_audio_dev_info 156 157 ; ------------------------------------------------------------- 158 159 ; 21/12/2024 160 ;;; 161 ; Read (copy) 8x14 system fonts 162 0000005D BE[0C410000] mov esi, fontbuff1 163 sys _video, 0C03h, 256, 0 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000062 BB030C0000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000067 B900010000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 0000006C BA00000000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000071 B81F000000 <1> mov eax, %1 97 <1> 98 00000076 CD40 <1> int 40h 164 165 ; convert 8x14 fonts to 8x16 fonts 166 ; by inserting 2 empty rows to each characters 167 ;mov esi, fontbuff1 168 00000078 BF[0C4F0000] mov edi, fontbuff2 169 ; 18/02/2021 170 ;mov cx, 256 171 fontconvert: 172 0000007D 51 push ecx 173 0000007E 66B90E00 mov cx, 14 174 00000082 F3A4 rep movsb 175 00000084 28C0 sub al, al 176 00000086 AA stosb 177 00000087 AA stosb 178 00000088 59 pop ecx 179 00000089 E2F2 loop fontconvert 180 ;;; 181 182 ; ------------------------------------------------------------- 183 184 ; 21/12/2024 185 ; Set Video Mode to 101h ; 640x480, 256 colors 186 sys _video, 08FFh, 101h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000008B BBFF080000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000090 B901010000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000095 B81F000000 <1> mov eax, %1 97 <1> 98 0000009A CD40 <1> int 40h 187 0000009C 09C0 or eax, eax 188 0000009E 0F8476040000 jz terminate ; nothing to do 189 ;jz trdos386_err ; write (OS) error msg and exit 190 191 set_vesa_mode_101h_ok: 192 ; linear frame buffer access 193 sys _video, 06FFh 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000000A4 BBFF060000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000000A9 B81F000000 <1> mov eax, %1 97 <1> 98 000000AE CD40 <1> int 40h 194 000000B0 21C0 and eax, eax 195 000000B2 0F84AD040000 jz error_exit ; set text mode and write err msg 196 000000B8 A3[4C740000] mov [LFB_ADDR], eax 197 198 ; ------------------------------------------------------------- 199 200 ; 07/12/2024 201 GetFileName_@: 202 ; 30/11/2024 203 ; (TRDOS 386 -Retro UNIX 386- argument transfer method) 204 ; (stack: argc,argv0addr,argv1addr,argv2addr .. 205 ; .. argv0text, argv1text ..) 206 ; ---- argc, argv[] ---- 207 000000BD 89E6 mov esi, esp 208 000000BF AD lodsd 209 000000C0 83F802 cmp eax, 2 ; two arguments 210 ; (program file name & mod file name) 211 000000C3 0F825F040000 jb pmsg_usage ; nothing to do 212 ; 07/12/2024 213 000000C9 AD lodsd ; skip program (PRG) file name 214 215 ; 30/11/2024 (32bit) 216 ; 29/11/2024 217 ; 30/05/2024 218 GetFileName: 219 000000CA BF[A0740000] mov edi, wav_file_name 220 ; 07/12/2024 221 000000CF 8B36 mov esi, [esi] 222 000000D1 31C9 xor ecx, ecx ; 0 223 ScanName: 224 000000D3 AC lodsb 225 ;test al, al 226 ;jz short a_4 227 ; 29/11/2024 228 000000D4 3C0D cmp al, 0Dh 229 000000D6 7638 jna short a_4 230 000000D8 3C20 cmp al, 20h 231 000000DA 74F7 je short ScanName ; scan start of name. 232 000000DC AA stosb 233 000000DD B4FF mov ah, 0FFh 234 ;;; 235 ; 14/11/2024 236 ; (max. path length = 64 bytes for MSDOS ?) (*) 237 ;xor ecx, ecx ; 0 238 ;;; 239 a_0: 240 000000DF FEC4 inc ah 241 a_1: 242 ;;; 243 ; 14/11/2024 244 000000E1 41 inc ecx 245 ;;; 246 000000E2 AC lodsb 247 000000E3 AA stosb 248 000000E4 3C2E cmp al, '.' 249 000000E6 74F7 je short a_0 250 ; 29/11/2024 251 000000E8 3C20 cmp al, 20h 252 ;and al, al 253 ;jnz short a_1 254 ;;; 255 ; 14/11/2024 256 000000EA 7613 jna short a_3 257 000000EC 20E4 and ah, ah 258 000000EE 7406 jz short a_2 259 000000F0 3C2F cmp al, '/' ; 14/12/2024 260 000000F2 7502 jne short a_2 261 000000F4 B400 mov ah, 0 262 a_2: 263 000000F6 80F94B cmp cl, 75 ; 64+8+'.'+3 -> offset 75 is the last chr 264 000000F9 72E6 jb short a_1 265 ; 29/11/2024 266 000000FB 29C9 sub ecx, ecx 267 000000FD EB11 jmp short a_4 268 a_3: 269 ; 29/11/2024 270 000000FF 4F dec edi 271 ;;; 272 00000100 08E4 or ah, ah ; if period NOT found, 273 00000102 750C jnz short a_4 ; then add a .WAV extension. 274 SetExt: 275 ; 29/11/2024 276 ;dec edi 277 00000104 C7072E574156 mov dword [edi], '.WAV' 278 ; ! 64+12 is DOS limit 279 ; but writing +4 must not 280 ; destroy the following data 281 ;mov byte [edi+4], 0 ; so, 80 bytes path + 0 is possible here 282 ; 29/11/2024 283 0000010A 83C104 add ecx, 4 284 0000010D 83C704 add edi, 4 285 a_4: 286 00000110 C60700 mov byte [edi], 0 287 288 ; open existing file 289 ; 28/11/2024 290 ;mov edx, wav_file_name 291 00000113 E8BC060000 call openFile ; no error? ok. 292 00000118 7325 jnc short getwavparms 293 294 ; 21/12/2024 295 0000011A E8E4040000 call set_text_mode 296 ; file not found! 297 ; 30/11/2024 298 sys _msg, noFileErrMsg, 255, 0Ch 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000011F BB[DA290000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000124 B9FF000000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00000129 BA0C000000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000012E B823000000 <1> mov eax, %1 97 <1> 98 00000133 CD40 <1> int 40h 299 00000135 E9E5030000 jmp Exit 300 301 _exit_: 302 0000013A E9DB030000 jmp terminate 303 304 ; ------------------------------------------------------------- 305 306 getwavparms: 307 ; 14/11/2024 308 0000013F E8C5060000 call getWAVParameters 309 00000144 72F4 jc short _exit_ ; nothing to do 310 311 ; 17/11/2024 312 00000146 B304 mov bl, 4 313 00000148 2A1D[8C740000] sub bl, byte [WAVE_BlockAlign] 314 ; = 0 for 16 bit stereo 315 ; = 2 for 8 bit stereo or 16 bit mono 316 ; = 3 for 8 bit mono 317 318 0000014E D0EB shr bl, 1 ; 0 --> 0, 2 --> 1, 3 --> 1 319 ; 15/11/2024 320 00000150 80D300 adc bl, 0 ; 3 --> 1 --> 2 321 00000153 881D[F2740000] mov byte [fbs_shift], bl ; = 2 mono and 8 bit 322 ; = 0 stereo and 16 bit 323 ; = 1 mono or 8 bit 324 325 ; ------------------------------------------------------------- 326 327 ; 21/12/2024 328 00000159 C605[58740000]0F mov byte [tcolor], 15 329 330 Player_SplashScreen: 331 _0: 332 00000160 E83E040000 call drawsplashscreen 333 334 ; 21/12/2024 335 ;;; 336 ; set wave volume led addresses 337 00000165 8B1D[4C740000] mov ebx, [LFB_ADDR] 338 0000016B 81C300C70100 add ebx, (13*80*8*14) 339 00000171 BD50000000 mov ebp, 80 340 00000176 BF[0C5F0000] mov edi, wleds_addr 341 wleds_sa_1: 342 0000017B B90F000000 mov ecx, 15 343 wleds_sa_2: 344 00000180 B800230000 mov eax, 80*8*14 ; 640*14 pixels (next row) 345 00000185 F7E1 mul ecx 346 00000187 01D8 add eax, ebx 347 00000189 AB stosd 348 0000018A E2F4 loop wleds_sa_2 349 0000018C 89D8 mov eax, ebx 350 0000018E AB stosd 351 0000018F 83C308 add ebx, 8 352 00000192 4D dec ebp 353 00000193 75E6 jnz short wleds_sa_1 354 ;;; 355 356 ; 07/12/2024 357 ;;; wait for 2 seconds 358 sys _time, 0 ; get time in unix epoch format 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000195 BB00000000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000019A B80D000000 <1> mov eax, %1 97 <1> 98 0000019F CD40 <1> int 40h 359 000001A1 89C1 mov ecx, eax 360 000001A3 83C102 add ecx, 2 361 _wait_2s: 362 000001A6 90 nop 363 sys _time, 0 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000001A7 BB00000000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000001AC B80D000000 <1> mov eax, %1 97 <1> 98 000001B1 CD40 <1> int 40h 364 000001B3 39C8 cmp eax, ecx 365 000001B5 72EF jb short _wait_2s 366 ;;; 367 368 ; ------------------------------------------------------------- 369 370 ; 07/12/2024 (playwav9.s) 371 372 ; 18/11/2023 (ich_wav4.asm) 373 ; 13/11/2023 (ich_wav3.asm) 374 375 000001B7 803D[6A740000]01 cmp byte [VRA], 1 376 000001BE 7226 jb short chk_sample_rate 377 378 playwav_48_khz: 379 000001C0 C705[00750000]- mov dword [loadfromwavfile], loadFromFile 379 000001C6 [53080000] 380 ;mov dword [loadsize], 0 ; 65536 381 ;;; 382 ; 17/11/2024 383 ;mov word [buffersize], 32768 384 ;mov ax, BUFFERSIZE/2 ; 32760 385 ; 30/11/2024 386 ;mov eax, BUFFERSIZE/2 ; 32768 387 ; 07/12/2024 388 000001CA B800000100 mov eax, BUFFERSIZE ; 65536 389 000001CF A3[08750000] mov [buffersize], eax ; 16 bit samples 390 ; 07/12/2024 391 ;shl eax, 1 ; bytes 392 000001D4 8A0D[F2740000] mov cl, [fbs_shift] 393 000001DA D3E8 shr eax, cl 394 ;mov [loadsize], ax ; 16380 or 32760 or 65520 395 000001DC A3[04750000] mov [loadsize], eax ; 16384 or 32768 or 65536 396 ;;; 397 ;jmp PlayNow ; 30/05/2024 398 ; 07/12/2024 399 000001E1 E9AA020000 jmp Player_Template 400 401 ; 02/02/2025 402 chk_sample_rate: 403 ; set conversion parameters 404 ; (for 8, 11.025, 16, 22.050, 24, 32 kHZ) 405 000001E6 66A1[84740000] mov ax, [WAVE_SampleRate] 406 000001EC 663D80BB cmp ax, 48000 407 000001F0 74CE je short playwav_48_khz 408 chk_22khz: 409 000001F2 663D2256 cmp ax, 22050 410 000001F6 7545 jne short chk_11khz 411 000001F8 803D[8E740000]08 cmp byte [WAVE_BitsPerSample], 8 412 000001FF 7615 jna short chk_22khz_1 413 00000201 BB[C3170000] mov ebx, load_22khz_stereo_16_bit 414 00000206 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 415 0000020D 751A jne short chk_22khz_2 416 0000020F BB[36170000] mov ebx, load_22khz_mono_16_bit 417 00000214 EB13 jmp short chk_22khz_2 418 chk_22khz_1: 419 00000216 BB[AF160000] mov ebx, load_22khz_stereo_8_bit 420 0000021B 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 421 00000222 7505 jne short chk_22khz_2 422 00000224 BB[26160000] mov ebx, load_22khz_mono_8_bit 423 chk_22khz_2: 424 00000229 B85A1D0000 mov eax, 7514 ; (442*17) 425 0000022E BA25000000 mov edx, 37 426 00000233 B911000000 mov ecx, 17 427 00000238 E926020000 jmp set_sizes 428 chk_11khz: 429 0000023D 663D112B cmp ax, 11025 430 00000241 7545 jne short chk_44khz 431 00000243 803D[8E740000]08 cmp byte [WAVE_BitsPerSample], 8 432 0000024A 7615 jna short chk_11khz_1 433 0000024C BB[DF190000] mov ebx, load_11khz_stereo_16_bit 434 00000251 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 435 00000258 751A jne short chk_11khz_2 436 0000025A BB[66190000] mov ebx, load_11khz_mono_16_bit 437 0000025F EB13 jmp short chk_11khz_2 438 chk_11khz_1: 439 00000261 BB[EC180000] mov ebx, load_11khz_stereo_8_bit 440 00000266 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 441 0000026D 7505 jne short chk_11khz_2 442 0000026F BB[74180000] mov ebx, load_11khz_mono_8_bit 443 chk_11khz_2: 444 00000274 B8AD0E0000 mov eax, 3757 ; (221*17) 445 00000279 BA4A000000 mov edx, 74 446 0000027E B911000000 mov ecx, 17 447 00000283 E9DB010000 jmp set_sizes 448 chk_44khz: 449 00000288 663D44AC cmp ax, 44100 450 0000028C 7545 jne short chk_16khz 451 0000028E 803D[8E740000]08 cmp byte [WAVE_BitsPerSample], 8 452 00000295 7615 jna short chk_44khz_1 453 00000297 BB[E61B0000] mov ebx, load_44khz_stereo_16_bit 454 0000029C 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 455 000002A3 751A jne short chk_44khz_2 456 000002A5 BB[6D1B0000] mov ebx, load_44khz_mono_16_bit 457 000002AA EB13 jmp short chk_44khz_2 458 chk_44khz_1: 459 000002AC BB[F01A0000] mov ebx, load_44khz_stereo_8_bit 460 000002B1 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 461 000002B8 7505 jne short chk_44khz_2 462 000002BA BB[741A0000] mov ebx, load_44khz_mono_8_bit 463 chk_44khz_2: 464 ; 30/11/2024 (TRDOS 386, 32bit DOS) 465 000002BF B8D93A0000 mov eax, 15065 ; (655*23) 466 ; 18/11/2023 ((file size + bss + stack) <= 64KB) 467 ;mov ax, 14076 ; (612*23) 468 ; 17/11/2024 469 ;mov ax, 12650 ; (550*23) 470 000002C4 BA19000000 mov edx, 25 471 000002C9 B917000000 mov ecx, 23 472 000002CE E990010000 jmp set_sizes 473 chk_16khz: 474 000002D3 663D803E cmp ax, 16000 475 000002D7 7545 jne short chk_8khz 476 000002D9 803D[8E740000]08 cmp byte [WAVE_BitsPerSample], 8 477 000002E0 7615 jna short chk_16khz_1 478 000002E2 BB[65110000] mov ebx, load_16khz_stereo_16_bit 479 000002E7 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 480 000002EE 751A jne short chk_16khz_2 481 000002F0 BB[E4100000] mov ebx, load_16khz_mono_16_bit 482 000002F5 EB13 jmp short chk_16khz_2 483 chk_16khz_1: 484 000002F7 BB[2A100000] mov ebx, load_16khz_stereo_8_bit 485 000002FC 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 486 00000303 7505 jne short chk_16khz_2 487 00000305 BB[AB0F0000] mov ebx, load_16khz_mono_8_bit 488 chk_16khz_2: 489 ; 30/11/2024 (TRDOS 386, 32bit DOS) 490 0000030A B855150000 mov eax, 5461 491 ; 17/11/2024 492 ;mov ax, 5460 493 0000030F BA03000000 mov edx, 3 494 00000314 B901000000 mov ecx, 1 495 00000319 E945010000 jmp set_sizes 496 chk_8khz: 497 0000031E 663D401F cmp ax, 8000 498 00000322 7545 jne short chk_24khz 499 00000324 803D[8E740000]08 cmp byte [WAVE_BitsPerSample], 8 500 0000032B 7615 jna short chk_8khz_1 501 0000032D BB[600E0000] mov ebx, load_8khz_stereo_16_bit 502 00000332 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 503 00000339 751A jne short chk_8khz_2 504 0000033B BB[900D0000] mov ebx, load_8khz_mono_16_bit 505 00000340 EB13 jmp short chk_8khz_2 506 chk_8khz_1: 507 00000342 BB[600C0000] mov ebx, load_8khz_stereo_8_bit 508 00000347 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 509 0000034E 7505 jne short chk_8khz_2 510 00000350 BB[7C0B0000] mov ebx, load_8khz_mono_8_bit 511 chk_8khz_2: 512 00000355 B8AA0A0000 mov eax, 2730 513 0000035A BA06000000 mov edx, 6 514 0000035F B901000000 mov ecx, 1 515 00000364 E9FA000000 jmp set_sizes 516 chk_24khz: 517 00000369 663DC05D cmp ax, 24000 518 0000036D 7545 jne short chk_32khz 519 0000036F 803D[8E740000]08 cmp byte [WAVE_BitsPerSample], 8 520 00000376 7615 jna short chk_24khz_1 521 ; 17/01/2025 (BugFix) 522 ; bx -> ebx 523 00000378 BB[92130000] mov ebx, load_24khz_stereo_16_bit 524 0000037D 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 525 00000384 751A jne short chk_24khz_2 526 00000386 BB[2C130000] mov ebx, load_24khz_mono_16_bit 527 0000038B EB13 jmp short chk_24khz_2 528 chk_24khz_1: 529 0000038D BB[A2120000] mov ebx, load_24khz_stereo_8_bit 530 00000392 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 531 00000399 7505 jne short chk_24khz_2 532 0000039B BB[3B120000] mov ebx, load_24khz_mono_8_bit 533 chk_24khz_2: 534 ; 30/11/2024 (TRDOS 386, 32bit DOS) 535 000003A0 B800200000 mov eax, 8192 536 ; 17/11/2024 537 ;mov ax, 8190 538 000003A5 BA02000000 mov edx, 2 539 000003AA B901000000 mov ecx, 1 540 000003AF E9AF000000 jmp set_sizes ; 02/02/2025 541 542 chk_32khz: 543 000003B4 663D007D cmp ax, 32000 544 ;jne short vra_needed 545 ; 02/02/2025 546 000003B8 7563 jne short chk_12khz 547 000003BA 803D[8E740000]08 cmp byte [WAVE_BitsPerSample], 8 548 000003C1 7615 jna short chk_32khz_1 549 000003C3 BB[96150000] mov ebx, load_32khz_stereo_16_bit 550 000003C8 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 551 000003CF 751A jne short chk_32khz_2 552 000003D1 BB[29150000] mov ebx, load_32khz_mono_16_bit 553 000003D6 EB13 jmp short chk_32khz_2 554 chk_32khz_1: 555 000003D8 BB[8C140000] mov ebx, load_32khz_stereo_8_bit 556 000003DD 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 557 000003E4 7505 jne short chk_32khz_2 558 000003E6 BB[19140000] mov ebx, load_32khz_mono_8_bit 559 chk_32khz_2: 560 ; 30/11/2024 (TRDOS 386, 32bit DOS) 561 000003EB B8AA2A0000 mov eax, 10922 562 ; 17/11/2024 563 ;mov ax, 10920 564 000003F0 BA03000000 mov edx, 3 565 000003F5 B902000000 mov ecx, 2 566 ; 02/02/2025 567 000003FA EB67 jmp short set_sizes 568 569 ; 07/12/2024 570 vra_needed: 571 ; 30/11/2024 (TRDOS 386, ax -> eax) 572 ; 13/11/2023 573 000003FC 58 pop eax ; discard return address to the caller 574 ; 30/05/2024 575 vra_err: 576 ; 21/12/2024 577 000003FD E801020000 call set_text_mode 578 ; 30/11/2024 579 sys _msg, msg_no_vra, 255, 0Fh 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000402 BB[442A0000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000407 B9FF000000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 0000040C BA0F000000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000411 B823000000 <1> mov eax, %1 97 <1> 98 00000416 CD40 <1> int 40h 580 00000418 E902010000 jmp Exit 581 582 ;;;; 583 ; 02/02/2025 584 chk_12khz: 585 0000041D 663DE02E cmp ax, 12000 586 00000421 75D9 jne short vra_needed 587 00000423 803D[8E740000]08 cmp byte [WAVE_BitsPerSample], 8 588 0000042A 7615 jna short chk_12khz_1 589 0000042C BB[521D0000] mov ebx, load_12khz_stereo_16_bit 590 00000431 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 591 00000438 751A jne short chk_12khz_2 592 0000043A BB[031D0000] mov ebx, load_12khz_mono_16_bit 593 0000043F EB13 jmp short chk_12khz_2 594 chk_12khz_1: 595 00000441 BB[AD1C0000] mov ebx, load_12khz_stereo_8_bit 596 00000446 803D[82740000]01 cmp byte [WAVE_NumChannels], 1 597 0000044D 7505 jne short chk_12khz_2 598 0000044F BB[651C0000] mov ebx, load_12khz_mono_8_bit 599 chk_12khz_2: 600 00000454 B800100000 mov eax, 4096 601 00000459 BA04000000 mov edx, 4 602 0000045E B901000000 mov ecx, 1 603 ; 02/02/2025 604 ;jmp short set_sizes 605 ;;;; 606 607 set_sizes: 608 ; 30/11/2024 (TRDOS 386, 32bit DOS) 609 ;;; 610 ; 17/11/2024 611 00000463 51 push ecx 612 00000464 B102 mov cl, 2 613 00000466 2A0D[F2740000] sub cl, [fbs_shift] 614 ; = 2 for 16 bit stereo 615 ; = 1 for 16 bit mono or 8 bit stereo 616 ; = 0 for 8 bit mono 617 0000046C D3E0 shl eax, cl 618 0000046E 59 pop ecx 619 0000046F A3[04750000] mov [loadsize], eax ; (one) read count in bytes 620 ;;; 621 00000474 F7E2 mul edx 622 00000476 83F901 cmp ecx, 1 623 00000479 7402 je short s_2 624 s_1: 625 0000047B F7F1 div ecx 626 s_2: 627 ;;; 628 ; eax = byte count of (to be) converted samples 629 630 ; 17/11/2024 631 ;;; 632 0000047D 8A0D[F2740000] mov cl, [fbs_shift] 633 634 00000483 D3E0 shl eax, cl 635 ; *1 for 16 bit stereo 636 ; *2 for 16 bit mono or 8 bit stereo 637 ; *4 for for 8 bit mono 638 ;;; 639 640 ; eax = 16 bit stereo byte count (target buffer size) 641 642 ; 07/12/2024 643 ;shr eax, 1 ; buffer size is 16 bit sample count 644 00000485 A3[08750000] mov [buffersize], eax ; buffer size in bytes 645 0000048A 891D[00750000] mov [loadfromwavfile], ebx 646 647 ; ------------------------------------------------------------- 648 649 Player_Template: 650 ; 21/12/2024 651 00000490 E8FE000000 call clearscreen 652 00000495 E815010000 call drawplayingscreen 653 654 ; 14/11/2024 655 0000049A E82A200000 call SetTotalTime 656 0000049F E8F7200000 call UpdateFileInfo 657 658 ; ------------------------------------------------------------- 659 660 StartPlay: 661 ; 21/12/2024 (VGA/LFB modifications) 662 ; (Direct access/map to the LFB is already done here) 663 ; ((this program is in VESA/VBE graphics mode here)) 664 PlayNow: 665 ; 07/12/2024 666 sys _audio, 0200h, [buffersize], audio_buffer 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000004A4 BB00020000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000004A9 8B0D[08750000] <1> mov ecx, %3 91 <1> %if %0 = 4 92 000004AF BA[00800000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000004B4 B820000000 <1> mov eax, %1 97 <1> 98 000004B9 CD40 <1> int 40h 667 000004BB 0F82A4000000 jc error_exit ; return to text mode and print err msg 668 669 ; 01/06/2024 670 ; Initialize Audio Device (bh = 3) 671 sys _audio, 0301h, 0, audio_int_handler 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000004C1 BB01030000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000004C6 B900000000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 000004CB BA[3F080000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000004D0 B820000000 <1> mov eax, %1 97 <1> 98 000004D5 CD40 <1> int 40h 672 ;jc short error_exit 673 000004D7 726C jc init_err ; return to text mode and print err msg 674 675 ;;; 676 ; 14/11/2024 677 000004D9 B003 mov al, 3 ; 0 = max, 31 = min 678 ; 15/11/2024 679 000004DB E888020000 call SetMasterVolume 680 ; 07/12/2024 681 ;call SetPCMOutVolume 682 000004E0 E825210000 call UpdateVolume 683 ;;; 684 ; 685 ; 14/11/2024 686 000004E5 E8B0210000 call UpdateProgressBar 687 ;;; 688 689 ; 30/05/2024 690 ; playwav4.asm 691 _2: 692 000004EA E8671F0000 call check4keyboardstop ; flush keyboard buffer 693 000004EF 72F9 jc short _2 ; 07/11/2023 694 695 ; play the .wav file. Most of the good stuff is in here. 696 697 ; 05/12/2024 698 000004F1 E814010000 call PlayWav 699 700 ; close the .wav file and exit. 701 702 ; 07/12/2024 703 ;;; 704 ; Stop Playing 705 ;sys _audio, 0700h 706 ; Cancel callback service (for user) 707 sys _audio, 0900h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000004F6 BB00090000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000004FB B820000000 <1> mov eax, %1 97 <1> 98 00000500 CD40 <1> int 40h 708 ; Deallocate Audio Buffer (for user) 709 sys _audio, 0A00h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000502 BB000A0000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000507 B820000000 <1> mov eax, %1 97 <1> 98 0000050C CD40 <1> int 40h 710 ; Disable Audio Device 711 sys _audio, 0C00h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000050E BB000C0000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000513 B820000000 <1> mov eax, %1 97 <1> 98 00000518 CD40 <1> int 40h 712 ;;; 713 714 terminate: 715 0000051A E8E4000000 call set_text_mode 716 Exit: 717 sys _exit 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000051F B801000000 <1> mov eax, %1 97 <1> 98 00000524 CD40 <1> int 40h 718 halt: 719 00000526 EBFE jmp short halt 720 721 ; ------------------------------------------------------------- 722 723 ; 30/05/2024 724 pmsg_usage: 725 ; 21/12/2024 726 00000528 E8D6000000 call set_text_mode 727 ; 01/12/2024 728 sys _msg, msg_usage, 255, 0Fh 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000052D BB[90290000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000532 B9FF000000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00000537 BA0F000000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000053C B823000000 <1> mov eax, %1 97 <1> 98 00000541 CD40 <1> int 40h 729 00000543 EBDA jmp short Exit 730 731 ; ------------------------------------------------------------- 732 733 ; 30/05/2024 734 init_err: 735 ; 21/12/2024 736 00000545 E8B9000000 call set_text_mode 737 ; 01/12/2024 738 sys _msg, msg_init_err, 255, 0Fh 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000054A BB[132A0000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 0000054F B9FF000000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00000554 BA0F000000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000559 B823000000 <1> mov eax, %1 97 <1> 98 0000055E CD40 <1> int 40h 739 00000560 EBBD jmp short Exit 740 741 ; ------------------------------------------------------------- 742 743 ; 02/12/2024 744 Player_Quit@: 745 00000562 58 pop eax ; return addr (call PlayWav@) 746 747 ; 29/11/2024 748 Player_Quit: 749 00000563 EBB5 jmp short terminate 750 751 752 ; ------------------------------------------------------------- 753 754 ; 07/12/2024 755 error_exit: 756 ; 21/12/2024 757 00000565 E899000000 call set_text_mode 758 trdos386_error: 759 sys _msg, trdos386_err_msg, 255, 0Eh 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000056A BB[F3290000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 0000056F B9FF000000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00000574 BA0E000000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000579 B823000000 <1> mov eax, %1 97 <1> 98 0000057E CD40 <1> int 40h 760 00000580 EB9D jmp short Exit 761 762 ; ------------------------------------------------------------- 763 764 ; 21/12/2024 765 print_msg: 766 00000582 B40E mov ah, 0Eh 767 00000584 BB07000000 mov ebx, 7 768 ;mov bl, 7 ; char attribute & color 769 p_next_chr: 770 00000589 AC lodsb 771 0000058A 08C0 or al, al 772 0000058C 7404 jz short p_retn ; retn 773 0000058E CD31 int 31h 774 00000590 EBF7 jmp short p_next_chr 775 p_retn: 776 00000592 C3 retn 777 778 ; ------------------------------------------------------------- 779 780 ; 21/12/2024 781 clearscreen: 782 ; fast clear 783 ; 640*480, 256 colors 784 00000593 8B3D[4C740000] mov edi, [LFB_ADDR] 785 00000599 B9002C0100 mov ecx, (640*480*1)/4 ; 22/12/2024 786 0000059E 31C0 xor eax, eax 787 000005A0 F3AB rep stosd 788 000005A2 C3 retn 789 790 ; ------------------------------------------------------------- 791 792 ; 21/12/2024 793 drawsplashscreen: 794 000005A3 BD[702B0000] mov ebp, SplashScreen 795 ;;mov dword [nextrow], 00100000h ; 8*16 796 ;mov dword [nextrow], 000E0000h ; 8*14 797 ;mov esi, 0 ; row 0, column 0 798 000005A8 BE00000200 mov esi, 00020000h ; row 2, column 0 ; top margin = 2 799 000005AD EB0A jmp short p_d_x 800 drawplayingscreen: 801 000005AF BD[11360000] mov ebp, PlayingScreen 802 ;mov dword [nextrow], 000E0000h ; 8*14 803 ;mov esi, 0 ; row 0, column 0 804 000005B4 BE00000700 mov esi, 00070000h ; row 7, column 0 ; top margin = 7 805 p_d_x: 806 000005B9 C605[59740000]50 mov byte [columns], 80 807 p_d_x_n: 808 000005C0 31D2 xor edx, edx 809 000005C2 8A5500 mov dl, [ebp] 810 000005C5 20D2 and dl, dl 811 000005C7 7439 jz short p_d_x_ok 812 000005C9 C1E204 shl edx, 4 ; * 16 (for 8x16 font) 813 814 000005CC BF[0C4F0000] mov edi, fontbuff2 ; start of user font data 815 000005D1 01D7 add edi, edx 816 817 ;; NOTE: Following system call writes fonts at 818 ;; Std VGA video memory 0A0000h, BL bit 7 selects 819 ;; screen width as 640 pixels (instead of 320 pixels) 820 ;; so 8Fh is sub function 0Fh (write char) 821 ;; with 640 pixels screen witdh. 822 ;; (Even if VESA VBE mode -LFB- is in use, QEMU and 823 ;; a real computer with NVIDIA GEFORCE FX 550 uses 824 ;; A0000h, so.. even if fonts are written at A0000h-B0000h 825 ;; region, the text is appeared on screen 826 ;; while LFB is at C0000000h or E0000000h.) 827 828 ;sys _video, 018Fh, [tcolor], 8001h 829 ;; use STD VGA video memory 830 ;; (0A0000h) 831 sys _video, 020Fh, [tcolor], 8001h ; 8x16 user font 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000005D3 BB0F020000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000005D8 8B0D[58740000] <1> mov ecx, %3 91 <1> %if %0 = 4 92 000005DE BA01800000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000005E3 B81F000000 <1> mov eax, %1 97 <1> 98 000005E8 CD40 <1> int 40h 832 ; use LFB for current VBE mode 833 ; for writing fonts on screen 834 000005EA 45 inc ebp 835 000005EB 6683C608 add si, 8 ; next char pos 836 000005EF FE0D[59740000] dec byte [columns] 837 000005F5 75C9 jnz short p_d_x_n ; next column 838 000005F7 6631F6 xor si, si 839 ;;add esi, 00100000h ; next row ; 8*16 840 ;add esi, [nextrow] 841 000005FA 81C600000E00 add esi, 000E0000h ; next row ; 8*14 842 00000600 EBB7 jmp short p_d_x 843 p_d_x_ok: 844 00000602 C3 retn 845 846 ; ------------------------------------------------------------- 847 848 ; 21/12/2024 849 set_text_mode: 850 00000603 30E4 xor ah, ah 851 00000605 B003 mov al, 3 852 ;int 10h ; al = 03h text mode, int 10 video 853 00000607 CD31 int 31h ; TRDOS 386 - Video interrupt 854 00000609 C3 retn 855 856 ; ------------------------------------------------------------- 857 858 ; 07/12/2024 (playwav9.s) 859 ; 26/11/2023 (playwav8.s) 860 PlayWav: 861 ; 19/11/2024 862 0000060A C605[5F740000]01 mov byte [wleds], 1 863 864 ;;; 865 ; 09/12/2024 866 00000611 B834290000 mov eax, 10548 ; (48000*10/182)*4 867 00000616 803D[6A740000]00 cmp byte [VRA], 0 868 0000061D 7614 jna short _3 ; 48kHZ (interpolation) 869 ;;; 870 ; 01/12/2024 (32bit) 871 ;movzx eax, word [WAVE_SampleRate] 872 ; 09/12/2024 873 0000061F 66A1[84740000] mov ax, [WAVE_SampleRate] 874 00000625 B90A000000 mov ecx, 10 875 0000062A F7E1 mul ecx 876 0000062C B1B6 mov cl, 182 877 0000062E F7F1 div ecx 878 ; ax = samples per 1/18.2 second 879 ;mov cl, byte [WAVE_BlockAlign] 880 ; 09/12/2024 881 ;mov cl, 4 ; 16 bit, stereo 882 ;mul ecx 883 00000630 C1E002 shl eax, 2 ; * 4 884 _3: 885 00000633 A3[60740000] mov [wleds_dif], eax ; buffer read differential (distance) 886 ; for wave volume leds update 887 ; (byte stream per 1/18.2 second) 888 RePlayWav: 889 ; 07/12/2024 890 00000638 BF[00800000] mov edi, audio_buffer 891 0000063D FF15[00750000] call dword [loadfromwavfile] 892 00000643 0F821CFFFFFF jc error_exit 893 894 00000649 C605[69740000]01 mov byte [half_buffer], 1 ; (DMA) Buffer 1 895 896 00000650 A1[14750000] mov eax, [count] 897 00000655 0105[18750000] add [LoadedDataBytes], eax 898 899 0000065B F605[9A740000]01 test byte [flags], ENDOFFILE ; end of file 900 00000662 752C jnz short _4 ; yes 901 ; bypass filling dma half buffer 2 902 903 ; bh = 16 : update (current, first) dma half buffer 904 ; bl = 0 : then switch to the next (second) half buffer 905 sys _audio, 1000h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000664 BB00100000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000669 B820000000 <1> mov eax, %1 97 <1> 98 0000066E CD40 <1> int 40h 906 907 ; 18/12/2024 908 00000670 C705[14750000]0000- mov dword [count], 0 908 00000678 0000 909 910 ; 07/12/2024 911 0000067A BF[00800000] mov edi, audio_buffer 912 0000067F FF15[00750000] call dword [loadfromwavfile] 913 ;jc error_exit 914 915 00000685 A1[14750000] mov eax, [count] 916 0000068A 0105[18750000] add [LoadedDataBytes], eax 917 _4: 918 ; 07/12/2024 919 00000690 668B0D[84740000] mov cx, [WAVE_SampleRate] 920 00000697 B303 mov bl, 3 ; 16 bit, stereo 921 00000699 B704 mov bh, 4 ; start to play 922 sys _audio 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000069B B820000000 <1> mov eax, %1 97 <1> 98 000006A0 CD40 <1> int 40h 923 924 ; ------------------------------------------- 925 926 ; 22/12/2024 927 ; prepare all leds as turned off 928 000006A2 E8F0200000 call reset_wave_leds 929 930 ; ------------------------------------------- 931 932 ; 07/12/2024 (playwav9.s) 933 ; 01/12/2024 (32bit) 934 ; 29/11/2024 935 tuneLoop: 936 ; 30/05/2024 937 ; 18/11/2023 (ich_wav4.asm) 938 ; 08/11/2023 939 ; 06/11/2023 940 tLWait: 941 ; 18/11/2024 942 000006A7 803D[5C740000]00 cmp byte [stopped], 0 943 ; 24/11/2024 944 000006AE 761E jna short tL1 945 tLWait@: ; 21/11/2024 946 000006B0 E8851C0000 call checkUpdateEvents 947 000006B5 726E jc _exitt_ 948 000006B7 803D[5D740000]30 cmp byte [tLO], '0' 949 000006BE 74E7 je short tLWait 950 000006C0 E86A000000 call tLZ 951 000006C5 C605[5D740000]30 mov byte [tLO], '0' 952 000006CC EBD9 jmp short tLWait 953 tL1: 954 ; 27/11/2024 955 ; Check AC'97 interrupt status 956 000006CE 803D[F3740000]00 cmp byte [SRB], 0 957 000006D5 7709 ja short tL3 958 tL2: 959 000006D7 E85E1C0000 call checkUpdateEvents 960 000006DC 7247 jc _exitt_ 961 000006DE EBC7 jmp short tLWait 962 tL3: 963 000006E0 8035[69740000]01 xor byte [half_buffer], 1 964 ; 07/12/2024 965 000006E7 C605[F3740000]00 mov byte [SRB], 0 966 967 ; 07/12/2024 968 000006EE BF[00800000] mov edi, audio_buffer 969 ;call loadFromFile 970 ; 18/11/2023 971 ;call word [loadfromwavfile] 972 ; 01/12/2024 973 000006F3 FF15[00750000] call dword [loadfromwavfile] 974 000006F9 722A jc short _exitt_ ; end of file 975 976 ; 07/12/2024 977 ;;;; 978 ; bh = 16 : update (current, first) dma half buffer 979 ; bl = 0 : then switch to the other half buffer 980 sys _audio, 1000h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000006FB BB00100000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000700 B820000000 <1> mov eax, %1 97 <1> 98 00000705 CD40 <1> int 40h 981 ;;;; 982 983 ; 26/11/2024 984 00000707 A0[69740000] mov al, [half_buffer] 985 0000070C 0431 add al, '1' 986 ; 19/11/2024 987 0000070E A2[5D740000] mov [tLO], al 988 00000713 E819000000 call tL0 989 990 ; 24/11/2024 991 ; 14/11/2024 992 ;mov ax, [count] 993 ;add [LoadedDataBytes], ax 994 ;adc word [LoadedDataBytes+2], 0 995 ; 01/12/2024 996 00000718 A1[14750000] mov eax, [count] 997 0000071D 0105[18750000] add [LoadedDataBytes], eax 998 999 ; 07/12/2024 (playwav9.s) 1000 ; 27/11/2024 (playwav9.asm) 1001 00000723 EBB2 jmp short tL2 1002 1003 _exitt_: 1004 ; 07/12/2024 1005 ; Stop Playing 1006 ;mov byte [stopped], 2 1007 ;sys _audio, 0700h 1008 00000725 E8D41B0000 call ac97_stop 1009 1010 ;;; 1011 ; 14/11/2024 1012 0000072A E86B1F0000 call UpdateProgressBar 1013 ;;; 1014 1015 ; 18/11/2024 1016 tLZ: 1017 ; 30/05/2024 1018 0000072F B030 mov al, '0' 1019 1020 ;add al, '0' 1021 ;call tL0 1022 ; 1023 ;retn 1024 ; 06/11/2023 1025 ;jmp short tL0 1026 ;retn 1027 1028 ; 06/11/2023 1029 tL0: 1030 ; 29/05/2024 (TRDOS 386) 1031 ; 08/11/2023 1032 ; 05/11/2023 1033 ; 17/02/2017 - Buffer switch test (temporary) 1034 ; 06/11/2023 1035 ; al = buffer indicator ('1', '2' or '0' -stop- ) 1036 1037 ; 22/12/2024 (graphics mode modification) 1038 ; (640*480, 256 colors) 1039 ;;; 1040 ;mov ebp, 16 1041 00000731 BD0E000000 mov ebp, 14 1042 00000736 8B3D[4C740000] mov edi, [LFB_ADDR] 1043 0000073C 0FB6F0 movzx esi, al 1044 0000073F C1E604 shl esi, 4 ; * 16 1045 00000742 81C6[0C4F0000] add esi, fontbuff2 1046 tL0_1: 1047 00000748 BA08000000 mov edx, 8 ; 8 pixels (8*16 pixel font) 1048 0000074D 8A26 mov ah, [esi] 1049 tL0_2: 1050 0000074F B00C mov al, 0Ch ; red 1051 00000751 D0E4 shl ah, 1 1052 00000753 7302 jnc short tL0_3 1053 00000755 B00E mov al, 0Eh ; yellow 1054 tL0_3: 1055 00000757 AA stosb 1056 00000758 4A dec edx 1057 00000759 75F4 jnz short tL0_2 1058 0000075B 4D dec ebp 1059 0000075C 7409 jz short tL0_4 1060 0000075E 81C778020000 add edi, 640-8 ; next line 1061 00000764 46 inc esi 1062 00000765 EBE1 jmp short tL0_1 1063 tL0_4: 1064 ;;; 1065 00000767 C3 retn 1066 1067 ; ------------------------------------------- 1068 1069 ; 07/12/2024 1070 SetMasterVolume: 1071 ;cmp al, 31 1072 ;ja short setvolume_ok 1073 00000768 A2[AD240000] mov [volume], al ; max = 0, min = 31 1074 1075 0000076D B41F mov ah, 31 1076 0000076F 28C4 sub ah, al 1077 00000771 88E0 mov al, ah 1078 1079 ; Set Master Volume Level (BL=0 or 80h) 1080 ; for next playing (BL>=80h) 1081 ;sys _audio, 0B80h, eax 1082 sys _audio, 0B00h, eax 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000773 BB000B0000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000778 89C1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000077A B820000000 <1> mov eax, %1 97 <1> 98 0000077F CD40 <1> int 40h 1083 1084 setvolume_ok: 1085 ac97_not_detected: 1086 00000781 C3 retn 1087 1088 ; ------------------------------------------- 1089 1090 ; 07/12/2024 (playwav9.s) 1091 DetectAC97: 1092 DetectICH: 1093 ; 25/11/2023 (playwav8.s) 1094 ; Detect (BH=1) AC'97 (BL=2) Audio Device 1095 sys _audio, 0102h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000782 BB02010000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000787 B820000000 <1> mov eax, %1 97 <1> 98 0000078C CD40 <1> int 40h 1096 ;jnc short d_ac97_@ 1097 ;retn 1098 0000078E 72F1 jc short ac97_not_detected 1099 d_ac97_@: 1100 ; 07/12/2024 (playwav9.s) 1101 ; 06/06/2017 1102 sys _audio, 0E00h ; get audio controller info 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000790 BB000E0000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000795 B820000000 <1> mov eax, %1 97 <1> 98 0000079A CD40 <1> int 40h 1103 0000079C 0F82C3FDFFFF jc error_exit ; 25/11/2023 1104 1105 ;cmp ah, 2 ; ICH ? (Intel AC'97 Audio Controller) 1106 ;jne _dev_not_ready 1107 1108 ; EAX = IRQ Number in AL 1109 ; Audio Device Number in AH 1110 ; EBX = DEV/VENDOR ID 1111 ; (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV) 1112 ; ECX = BUS/DEV/FN 1113 ; (00000000BBBBBBBBDDDDDFFF00000000) 1114 ; EDX = NABMBAR/NAMBAR (for AC97) 1115 ; (Low word, DX = NAMBAR address) 1116 ; EDX = Base IO Addr (DX) for SB16 & VT8233 1117 1118 000007A2 891D[F8740000] mov [dev_vendor], ebx 1119 000007A8 890D[F4740000] mov [bus_dev_fn], ecx 1120 1121 000007AE 668915[FC740000] mov [NAMBAR], dx ; save audio mixer base addr 1122 ;shr edx, 16 1123 ;mov [NABMBAR], dx ; save bus master base addr 1124 000007B5 8915[FC740000] mov [NAMBAR], edx 1125 1126 000007BB A2[9B740000] mov [ac97_int_ln_reg], al 1127 1128 ; 07/12/2024 1129 ; 01/06/2024 1130 ; 25/11/2023 1131 ; Get AC'97 Codec info 1132 ; (Function 14, sub function 1) 1133 sys _audio, 0E01h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000007C0 BB010E0000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000007C5 B820000000 <1> mov eax, %1 97 <1> 98 000007CA CD40 <1> int 40h 1134 ; Save Variable Rate Audio support bit 1135 000007CC 2401 and al, 1 1136 000007CE A2[6A740000] mov [VRA], al 1137 1138 ;clc 1139 1140 000007D3 C3 retn 1141 1142 ; ---------------------------------- 1143 1144 ; 01/12/2024 1145 ; 14/11/2024 1146 ; INPUT: ds:dx = file name address 1147 ; OUTPUT: [filehandle] = ; -1 = not open 1148 openFile: 1149 ;mov ax, 3D00h ; open File for read 1150 ;int 21h 1151 ;jnc short _of1 1152 ; 01/12/2024 (TRDOS 386) 1153 ;sys _open, edx, 0 1154 ; 07/12/2024 1155 sys _open, wav_file_name, 0 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000007D4 BB[A0740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000007D9 B900000000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000007DE B805000000 <1> mov eax, %1 97 <1> 98 000007E3 CD40 <1> int 40h 1156 000007E5 7305 jnc short _of1 1157 1158 000007E7 B8FFFFFFFF mov eax, -1 1159 ; cf = 1 -> not found or access error 1160 _of1: 1161 000007EC A3[9C740000] mov [filehandle], eax 1162 000007F1 C3 retn 1163 1164 ; ---------------------------------- 1165 1166 ; close the currently open file 1167 1168 ; 01/12/2024 1169 ; 14/11/2024 1170 ; INPUT: [filehandle] ; -1 = not open 1171 ; OUTPUT: none 1172 closeFile: 1173 000007F2 833D[9C740000]FF cmp dword [filehandle], -1 1174 000007F9 740D jz short _cf1 1175 ;mov bx, [filehandle] 1176 ;mov ax, 3E00h 1177 ;int 21h ; close file 1178 ; 01/12/2024 1179 sys _close, [filehandle] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000007FB 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000801 B806000000 <1> mov eax, %1 97 <1> 98 00000806 CD40 <1> int 40h 1180 ;mov dword [filehandle], -1 1181 _cf1: 1182 00000808 C3 retn 1183 1184 ; ---------------------------------- 1185 1186 ; 01/12/2024 1187 ; 14/11/2024 - Erdogan Tan 1188 getWAVParameters: 1189 ; reads WAV file header(s) (44 bytes) from the .wav file. 1190 ; entry: none - assumes file is already open 1191 ; exit: ax = sample rate (11025, 22050, 44100, 48000) 1192 ; cx = number of channels (mono=1, stereo=2) 1193 ; dx = bits per sample (8, 16) 1194 ; bx = number of bytes per sample (1 to 4) 1195 1196 ;mov dx, WAVFILEHEADERbuff 1197 ;mov bx, [filehandle] 1198 ;mov cx, 44 ; 44 bytes 1199 ;mov ah, 3Fh 1200 ;int 21h 1201 ;jc short gwavp_retn 1202 ; 01/12/2024 (TRDOS 386) 1203 sys _read, [filehandle], WAVFILEHEADERbuff, 44 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000809 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 0000080F B9[6C740000] <1> mov ecx, %3 91 <1> %if %0 = 4 92 00000814 BA2C000000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000819 B803000000 <1> mov eax, %1 97 <1> 98 0000081E CD40 <1> int 40h 1204 00000820 721C jc short gwavp_retn 1205 1206 00000822 83F82C cmp eax, 44 1207 00000825 7217 jb short gwavp_retn 1208 1209 00000827 813D[74740000]5741- cmp dword [RIFF_Format], 'WAVE' 1209 0000082F 5645 1210 00000831 750A jne short gwavp_stc_retn 1211 1212 00000833 66833D[80740000]01 cmp word [WAVE_AudioFormat], 1 ; Offset 20, must be 1 (= PCM) 1213 ;jne short gwavp_stc_retn 1214 0000083B 7401 je short gwavp_retn ; 15/11/2024 1215 1216 ; 15/11/2024 1217 ;mov cx, [WAVE_NumChannels] ; return num of channels in CX 1218 ;mov ax, [WAVE_SampleRate] ; return sample rate in AX 1219 ;mov dx, [WAVE_BitsPerSample] 1220 ; return bits per sample value in DX 1221 ;mov bx, [WAVE_BlockAlign] ; return bytes per sample in BX 1222 ;gwavp_retn: 1223 ;retn 1224 1225 gwavp_stc_retn: 1226 0000083D F9 stc 1227 gwavp_retn: 1228 0000083E C3 retn 1229 1230 ; -------------------------------------------------------- 1231 ; 07/12/2024 1232 ; -------------------------------------------------------- 1233 ; ref: playwav8.s (04/06/2024) 1234 1235 audio_int_handler: 1236 ; 18/08/2020 (14/10/2020, 'wavplay2.s') 1237 1238 ; 07/12/2024 1239 ;mov al, [stopped] 1240 ;cmp al, 2 1241 ;je short _callback_retn 1242 1243 ; 18/08/2020 1244 ;mov byte [SRB], 1 1245 ; 07/12/2024 1246 0000083F FE05[F3740000] inc byte [SRB] 1247 1248 ;_callback_retn: 1249 sys _rele ; return from callback service 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000845 B827000000 <1> mov eax, %1 97 <1> 98 0000084A CD40 <1> int 40h 1250 ; we must not come here ! 1251 sys _exit 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000084C B801000000 <1> mov eax, %1 97 <1> 98 00000851 CD40 <1> int 40h 1252 1253 ; -------------------------------------------------------- 1254 ; 07/12/2024 1255 ; -------------------------------------------------------- 1256 1257 ; ///// 1258 ; 14/12/2024 1259 ; 07/12/2024 1260 ; 01/12/2024 1261 ; 30/05/2024 (ich_wav4.asm, 19/05/2024) 1262 loadFromFile: 1263 ; 07/11/2023 1264 1265 00000853 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 1266 ; last of the file? 1267 0000085A 7402 jz short lff_0 ; no 1268 0000085C F9 stc 1269 0000085D C3 retn 1270 1271 lff_0: 1272 ; 07/12/2024 1273 ; 26/11/2023 (playwav8.s) 1274 ;mov edi, audio_buffer 1275 1276 ; 01/12/2024 (TRDOS 386) 1277 ; edi = audio buffer address 1278 1279 ; 14/12/2024 1280 ; 01/12/2024 1281 ; 17/11/2024 1282 ;mov ebx, [filehandle] 1283 ; 02/12/2024 1284 ;mov edx, [loadsize] 1285 1286 ; 17/11/2024 1287 0000085E 803D[F2740000]00 cmp byte [fbs_shift], 0 1288 00000865 7677 jna short lff_1 ; stereo, 16 bit 1289 1290 lff_2: 1291 ; 01/12/2024 1292 00000867 BE[00800100] mov esi, temp_buffer 1293 ; 14/12/2024 1294 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000086C 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000872 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00000874 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000087A B803000000 <1> mov eax, %1 97 <1> 98 0000087F CD40 <1> int 40h 1295 00000881 0F8289000000 jc lff_4 ; error ! 1296 1297 ; 01/12/2024 1298 ; 14/11/2024 1299 00000887 A3[14750000] mov [count], eax 1300 1301 ; 01/12/2024 1302 0000088C 21C0 and eax, eax 1303 ;jz short lff_3 1304 ; 14/12/2024 1305 0000088E 0F8485000000 jz lff_10 1306 1307 00000894 8A1D[F2740000] mov bl, [fbs_shift] 1308 1309 ; 14/12/2024 1310 0000089A 89FA mov edx, edi ; audio buffer start address 1311 1312 ; 01/12/2024 1313 0000089C 89C1 mov ecx, eax 1314 0000089E 803D[8E740000]08 cmp byte [WAVE_BitsPerSample], 8 ; bits per sample (8 or 16) 1315 000008A5 751E jne short lff_7 ; 16 bit samples 1316 ; 8 bit samples 1317 000008A7 FECB dec bl ; shift count, 1 = stereo, 2 = mono 1318 000008A9 740E jz short lff_6 ; 8 bit, stereo 1319 ; 01/12/2024 (32bit registers) 1320 lff_5: 1321 ; mono & 8 bit 1322 000008AB AC lodsb 1323 000008AC 2C80 sub al, 80h ; 08/11/2023 1324 000008AE C1E008 shl eax, 8 ; convert 8 bit sample to 16 bit sample 1325 000008B1 66AB stosw ; left channel 1326 000008B3 66AB stosw ; right channel 1327 000008B5 E2F4 loop lff_5 1328 000008B7 EB16 jmp short lff_9 1329 lff_6: 1330 ; stereo & 8 bit 1331 000008B9 AC lodsb 1332 000008BA 2C80 sub al, 80h ; 08/11/2023 1333 000008BC C1E008 shl eax, 8 ; convert 8 bit sample to 16 bit sample 1334 000008BF 66AB stosw 1335 000008C1 E2F6 loop lff_6 1336 000008C3 EB0A jmp short lff_9 1337 lff_7: 1338 000008C5 D1E9 shr ecx, 1 ; word count 1339 lff_8: 1340 000008C7 66AD lodsw 1341 000008C9 66AB stosw ; left channel 1342 000008CB 66AB stosw ; right channel 1343 000008CD E2F8 loop lff_8 1344 lff_9: 1345 ; 14/12/2024 1346 000008CF 89F8 mov eax, edi 1347 000008D1 8B0D[08750000] mov ecx, [buffersize] 1348 000008D7 01D1 add ecx, edx ; + buffer start address 1349 000008D9 39C8 cmp eax, ecx 1350 000008DB 7225 jb short lff_3 1351 000008DD C3 retn 1352 1353 lff_1: 1354 ; 07/12/2024 1355 ; 01/12/2024 1356 ;sys _read, [filehandle], esi, [loadsize] ; edx 1357 ; 14/12/2024 1358 sys _read, [filehandle], edi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000008DE 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000008E4 89F9 <1> mov ecx, %3 91 <1> %if %0 = 4 92 000008E6 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000008EC B803000000 <1> mov eax, %1 97 <1> 98 000008F1 CD40 <1> int 40h 1359 ; 07/11/2023 1360 000008F3 721B jc short lff_4 ; error ! 1361 1362 ; 01/12/2024 1363 ; 14/11/2024 1364 000008F5 A3[14750000] mov [count], eax 1365 1366 ; 02/12/2024 1367 000008FA 39D0 cmp eax, edx ; cmp eax, [loadsize] 1368 000008FC 7411 je short endLFF 1369 ; edi = buffer (start) address 1370 000008FE 01C7 add edi, eax 1371 00000900 89D1 mov ecx, edx 1372 lff_3: 1373 ;call padfill ; blank pad the remainder 1374 ; 21/12/2024 1375 padfill: 1376 ; 14/12/2024 1377 ; 01/12/2024 (TRDOS 386, 32bit registers) 1378 ; 17/11/2024 1379 ; di = offset (to be filled with ZEROs) 1380 ; bp = buffer segment 1381 ; ax = di = number of bytes loaded 1382 ; cx = buffer size (> loaded bytes) 1383 ; 07/11/2023 1384 ; 06/11/2023 1385 ; 17/02/2017 1386 ; 01/12/2024 1387 00000902 29C1 sub ecx, eax 1388 ; 01/12/2024 1389 ; 25/11/2024 1390 00000904 31C0 xor eax, eax 1391 ; 14/12/2024 1392 00000906 F3AA rep stosb 1393 ; 21/12/2024 1394 ;retn 1395 ; ---------- 1396 ;clc ; don't exit with CY yet. 1397 00000908 800D[9A740000]01 or byte [flags], ENDOFFILE ; end of file flag 1398 endLFF: 1399 0000090F C3 retn 1400 lff_4: 1401 ; 08/11/2023 1402 00000910 B021 mov al, '!' ; error 1403 00000912 E81AFEFFFF call tL0 1404 1405 ; 01/12/2024 1406 00000917 31C0 xor eax, eax 1407 lff_10: 1408 ; 14/12/2024 1409 00000919 8B0D[08750000] mov ecx, [buffersize] 1410 0000091F EBE1 jmp short lff_3 1411 1412 ; ///// 1413 1414 ; -------------------------------------------------------- 1415 ; -------------------------------------------------------- 1416 1417 write_audio_dev_info: 1418 ; 30/05/2024 1419 ;sys_msg msgAudioCardInfo, 0Fh 1420 ; 01/12/2024 1421 sys _msg, msgAudioCardInfo, 255, 0Fh 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000921 BB[67290000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000926 B9FF000000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 0000092B BA0F000000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000930 B823000000 <1> mov eax, %1 97 <1> 98 00000935 CD40 <1> int 40h 1422 00000937 C3 retn 1423 1424 ; -------------------------------------------------------- 1425 1426 write_ac97_pci_dev_info: 1427 ; 19/11/2024 1428 ; 30/05/2024 1429 ; 06/06/2017 1430 ; 03/06/2017 1431 ; BUS/DEV/FN 1432 ; 00000000BBBBBBBBDDDDDFFF00000000 1433 ; DEV/VENDOR 1434 ; DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV 1435 1436 00000938 A1[F8740000] mov eax, [dev_vendor] 1437 0000093D 31DB xor ebx, ebx 1438 0000093F 88C3 mov bl, al 1439 00000941 88DA mov dl, bl 1440 00000943 80E30F and bl, 0Fh 1441 00000946 8A83[7D2A0000] mov al, [hex_chars+ebx] 1442 0000094C A2[C42A0000] mov [msgVendorId+3], al 1443 00000951 88D3 mov bl, dl 1444 00000953 C0EB04 shr bl, 4 1445 00000956 8A83[7D2A0000] mov al, [hex_chars+ebx] 1446 0000095C A2[C32A0000] mov [msgVendorId+2], al 1447 00000961 88E3 mov bl, ah 1448 00000963 88DA mov dl, bl 1449 00000965 80E30F and bl, 0Fh 1450 00000968 8A83[7D2A0000] mov al, [hex_chars+ebx] 1451 0000096E A2[C22A0000] mov [msgVendorId+1], al 1452 00000973 88D3 mov bl, dl 1453 00000975 C0EB04 shr bl, 4 1454 00000978 8A83[7D2A0000] mov al, [hex_chars+ebx] 1455 0000097E A2[C12A0000] mov [msgVendorId], al 1456 00000983 C1E810 shr eax, 16 1457 00000986 88C3 mov bl, al 1458 00000988 88DA mov dl, bl 1459 0000098A 80E30F and bl, 0Fh 1460 0000098D 8A83[7D2A0000] mov al, [hex_chars+ebx] 1461 00000993 A2[D52A0000] mov [msgDevId+3], al 1462 00000998 88D3 mov bl, dl 1463 0000099A C0EB04 shr bl, 4 1464 0000099D 8A83[7D2A0000] mov al, [hex_chars+ebx] 1465 000009A3 A2[D42A0000] mov [msgDevId+2], al 1466 000009A8 88E3 mov bl, ah 1467 000009AA 88DA mov dl, bl 1468 000009AC 80E30F and bl, 0Fh 1469 000009AF 8A83[7D2A0000] mov al, [hex_chars+ebx] 1470 000009B5 A2[D32A0000] mov [msgDevId+1], al 1471 000009BA 88D3 mov bl, dl 1472 000009BC C0EB04 shr bl, 4 1473 000009BF 8A83[7D2A0000] mov al, [hex_chars+ebx] 1474 000009C5 A2[D22A0000] mov [msgDevId], al 1475 1476 000009CA A1[F4740000] mov eax, [bus_dev_fn] 1477 000009CF C1E808 shr eax, 8 1478 000009D2 88C3 mov bl, al 1479 000009D4 88DA mov dl, bl 1480 000009D6 80E307 and bl, 7 ; bit 0,1,2 1481 000009D9 8A83[7D2A0000] mov al, [hex_chars+ebx] 1482 000009DF A2[FA2A0000] mov [msgFncNo+1], al 1483 000009E4 88D3 mov bl, dl 1484 000009E6 C0EB03 shr bl, 3 1485 000009E9 88DA mov dl, bl 1486 000009EB 80E30F and bl, 0Fh 1487 000009EE 8A83[7D2A0000] mov al, [hex_chars+ebx] 1488 000009F4 A2[EC2A0000] mov [msgDevNo+1], al 1489 000009F9 88D3 mov bl, dl 1490 000009FB C0EB04 shr bl, 4 1491 000009FE 8A83[7D2A0000] mov al, [hex_chars+ebx] 1492 00000A04 A2[EB2A0000] mov [msgDevNo], al 1493 00000A09 88E3 mov bl, ah 1494 00000A0B 88DA mov dl, bl 1495 00000A0D 80E30F and bl, 0Fh 1496 00000A10 8A83[7D2A0000] mov al, [hex_chars+ebx] 1497 00000A16 A2[E02A0000] mov [msgBusNo+1], al 1498 00000A1B 88D3 mov bl, dl 1499 00000A1D C0EB04 shr bl, 4 1500 00000A20 8A83[7D2A0000] mov al, [hex_chars+ebx] 1501 00000A26 A2[DF2A0000] mov [msgBusNo], al 1502 1503 ;mov ax, [ac97_NamBar] 1504 00000A2B 66A1[FC740000] mov ax, [NAMBAR] 1505 00000A31 88C3 mov bl, al 1506 00000A33 88DA mov dl, bl 1507 00000A35 80E30F and bl, 0Fh 1508 00000A38 8A83[7D2A0000] mov al, [hex_chars+ebx] 1509 00000A3E A2[0A2B0000] mov [msgNamBar+3], al 1510 00000A43 88D3 mov bl, dl 1511 00000A45 C0EB04 shr bl, 4 1512 00000A48 8A83[7D2A0000] mov al, [hex_chars+ebx] 1513 00000A4E A2[092B0000] mov [msgNamBar+2], al 1514 00000A53 88E3 mov bl, ah 1515 00000A55 88DA mov dl, bl 1516 00000A57 80E30F and bl, 0Fh 1517 00000A5A 8A83[7D2A0000] mov al, [hex_chars+ebx] 1518 00000A60 A2[082B0000] mov [msgNamBar+1], al 1519 00000A65 88D3 mov bl, dl 1520 00000A67 C0EB04 shr bl, 4 1521 00000A6A 8A83[7D2A0000] mov al, [hex_chars+ebx] 1522 00000A70 A2[072B0000] mov [msgNamBar], al 1523 1524 ;mov ax, [ac97_NabmBar] 1525 00000A75 66A1[FE740000] mov ax, [NABMBAR] 1526 00000A7B 88C3 mov bl, al 1527 00000A7D 88DA mov dl, bl 1528 00000A7F 80E30F and bl, 0Fh 1529 00000A82 8A83[7D2A0000] mov al, [hex_chars+ebx] 1530 00000A88 A2[1A2B0000] mov [msgNabmBar+3], al 1531 00000A8D 88D3 mov bl, dl 1532 00000A8F C0EB04 shr bl, 4 1533 00000A92 8A83[7D2A0000] mov al, [hex_chars+ebx] 1534 00000A98 A2[192B0000] mov [msgNabmBar+2], al 1535 00000A9D 88E3 mov bl, ah 1536 00000A9F 88DA mov dl, bl 1537 00000AA1 80E30F and bl, 0Fh 1538 00000AA4 8A83[7D2A0000] mov al, [hex_chars+ebx] 1539 00000AAA A2[182B0000] mov [msgNabmBar+1], al 1540 00000AAF 88D3 mov bl, dl 1541 00000AB1 C0EB04 shr bl, 4 1542 00000AB4 8A83[7D2A0000] mov al, [hex_chars+ebx] 1543 00000ABA A2[172B0000] mov [msgNabmBar], al 1544 1545 00000ABF 31C0 xor eax, eax 1546 00000AC1 A0[9B740000] mov al, [ac97_int_ln_reg] 1547 00000AC6 B10A mov cl, 10 1548 00000AC8 F6F1 div cl 1549 ; 23/11/2024 1550 ;add [msgIRQ], ax 1551 00000ACA 66053030 add ax, 3030h 1552 00000ACE 66A3[232B0000] mov [msgIRQ], ax 1553 ;and al, al 1554 00000AD4 3C30 cmp al, 30h 1555 00000AD6 750D jnz short _w_ac97imsg_ 1556 00000AD8 A0[242B0000] mov al, byte [msgIRQ+1] 1557 00000ADD B420 mov ah, ' ' 1558 00000ADF 66A3[232B0000] mov [msgIRQ], ax 1559 _w_ac97imsg_: 1560 ; 19/11/2024 1561 00000AE5 E8971C0000 call clear_window 1562 00000AEA B60D mov dh, 13 1563 00000AEC B200 mov dl, 0 1564 00000AEE E8BB190000 call setCursorPosition 1565 ;;; 1566 ; 21/12/2024 1567 00000AF3 BD[8E2A0000] mov ebp, msgAC97Info ; message 1568 ; 22/12/2024 1569 ;mov cl, 07h ; color 1570 00000AF8 E81F000000 call sys_gmsg 1571 ; 1572 ; 30/05/2024 1573 write_VRA_info: 1574 ; 21/12/2024 1575 00000AFD BD[282B0000] mov ebp, msgVRAheader ; message 1576 ;mov cl, 07h ; color 1577 00000B02 E815000000 call sys_gmsg 1578 ; 1579 00000B07 803D[6A740000]00 cmp byte [VRA], 0 1580 00000B0E 7607 jna short _w_VRAi_no 1581 _w_VRAi_yes: 1582 00000B10 BD[372B0000] mov ebp, msgVRAyes 1583 00000B15 EB05 jmp short _w_VRAi_yn_msg 1584 _w_VRAi_no: 1585 00000B17 BD[3D2B0000] mov ebp, msgVRAno 1586 _w_VRAi_yn_msg: 1587 ;mov cl, 07h ; color 1588 ;call sys_msg 1589 ;retn 1590 ;jmp short sys_gmsg 1591 ;;; 1592 ; -------------------------------------------------------- 1593 1594 ; 22/12/2024 1595 ;;; 1596 ; 21/12/2024 1597 ; (write message in VGA/VESA-VBE mode) 1598 sys_gmsg: 1599 00000B1C 8A4500 mov al, [ebp] 1600 00000B1F 20C0 and al, al 1601 00000B21 7458 jz short sys_gmsg_ok 1602 00000B23 3C20 cmp al, 20h 1603 00000B25 731E jnb short sys_gmsg_3 1604 00000B27 3C0D cmp al, CR ; 13 1605 00000B29 750C jne short sys_gmsg_2 1606 ; carriege return, move cursor to column 0 1607 00000B2B 66C705[50740000]00- mov word [screenpos], 0 1607 00000B33 00 1608 sys_gmsg_1: 1609 00000B34 45 inc ebp 1610 00000B35 EBE5 jmp short sys_gmsg 1611 sys_gmsg_2: 1612 00000B37 3C0A cmp al, LF ; 10 1613 00000B39 7540 jne short sys_gmsg_ok ; 22/12/2024 1614 ; line feed, move cursor to next row 1615 00000B3B 668305[52740000]10 add word [screenpos+2], 16 1616 00000B43 EBEF jmp short sys_gmsg_1 1617 sys_gmsg_3: 1618 00000B45 8B35[50740000] mov esi, [screenpos] 1619 ; hw = (cursor) row 1620 ; si = (cursor) column 1621 00000B4B B907000000 mov ecx, 07h ; gray (light) 1622 00000B50 E8001B0000 call write_character 1623 00000B55 83C608 add esi, 8 1624 ;;; 1625 00000B58 6681FE8002 cmp si, 640 1626 00000B5D 7213 jb short sys_gmsg_5 1627 00000B5F C1EE10 shr esi, 16 1628 00000B62 6683C610 add si, 16 1629 00000B66 6681FEE001 cmp si, 480 1630 00000B6B 7202 jb short sys_gmsg_4 1631 00000B6D 31F6 xor esi, esi 1632 sys_gmsg_4: 1633 00000B6F C1E610 shl esi, 16 1634 ;;; 1635 sys_gmsg_5: 1636 00000B72 8935[50740000] mov [screenpos], esi 1637 00000B78 45 inc ebp 1638 00000B79 EBA1 jmp short sys_gmsg 1639 sys_gmsg_ok: 1640 00000B7B C3 retn 1641 ;;; 1642 1643 ; -------------------------------------------------------- 1644 1645 ; 02/02/2025 1646 ; 07/12/2024 - playwav9.s 1647 ; 01/12/2024 - ac97play.s 1648 ; 29/05/2024 1649 ; 26/11/2023 1650 ; 25/11/2023 - playwav6.s (32 bit registers, TRDOS 386 adaption) 1651 ; 15/11/2023 - PLAYWAV5.COM, ich_wav5.asm 1652 ; 14/11/2023 1653 ; 13/11/2023 - Erdogan Tan - (VRA, sample rate conversion) 1654 ; -------------------------------------------------------- 1655 1656 ;;Note: At the end of every buffer load, 1657 ;; during buffer switch/swap, there will be discontinuity 1658 ;; between the last converted sample and the 1st sample 1659 ;; of the next buffer. 1660 ;; (like as a dot noises vaguely between normal sound samples) 1661 ;; -To avoid this defect, the 1st sample of 1662 ;; the next buffer may be read from the wav file but 1663 ;; the file pointer would need to be set to 1 sample back 1664 ;; again via seek system call. Time comsumption problem! - 1665 ;; 1666 ;; Erdogan Tan - 15/11/2023 1667 ;; 1668 ;; ((If entire wav data would be loaded at once.. conversion 1669 ;; defect/noise would disappear.. but for DOS, to keep 1670 ;; 64KB buffer limit is important also it is important 1671 ;; for running under 1MB barrier without HIMEM.SYS or DPMI. 1672 ;; I have tested this program by using 2-30MB wav files.)) 1673 ;; 1674 ;; Test Computer: ASUS desktop/mainboard, M2N4-SLI, 2010. 1675 ;; AMD Athlon 64 X2 2200 MHZ CPU. 1676 ;; NFORCE4 (CK804) AC97 audio hardware. 1677 ;; Realtek ALC850 codec. 1678 ;; Retro DOS v4.2 (MSDOS 6.22) operating system. 1679 1680 load_8khz_mono_8_bit: 1681 ; 02/02/2025 1682 ; 15/11/2023 1683 ; 14/11/2023 1684 ; 13/11/2023 1685 00000B7C F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 1686 ; last of the file? 1687 00000B83 7402 jz short lff8m_0 ; no 1688 00000B85 F9 stc 1689 00000B86 C3 retn 1690 1691 lff8m_0: 1692 ; 01/12/2024 1693 ; edi = audio buffer address 1694 00000B87 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 1695 ;mov edx, [loadsize] 1696 1697 ; esi = buffer address 1698 ;; edx = buffer size 1699 1700 ; load file into memory 1701 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000B8C 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000B92 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00000B94 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000B9A B803000000 <1> mov eax, %1 97 <1> 98 00000B9F CD40 <1> int 40h 1702 00000BA1 7305 jnc short lff8m_6 1703 00000BA3 E9AF000000 jmp lff8m_5 ; error ! 1704 1705 lff8m_6: 1706 ; 01/12/2024 1707 00000BA8 A3[14750000] mov [count], eax 1708 ;;; 1709 ; 07/12/2024 1710 ;mov edi, audio_buffer 1711 ;;; 1712 00000BAD 21C0 and eax, eax 1713 00000BAF 0F8499000000 jz lff8_eof 1714 1715 00000BB5 89C1 mov ecx, eax ; byte count 1716 lff8m_1: 1717 00000BB7 AC lodsb 1718 00000BB8 A2[F5220000] mov [previous_val], al 1719 00000BBD 2C80 sub al, 80h 1720 00000BBF 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 1721 00000BC3 66AB stosw ; original sample (left channel) 1722 00000BC5 66AB stosw ; original sample (right channel) 1723 ; 02/02/2025 1724 ;xor eax, eax 1725 00000BC7 8A06 mov al, [esi] 1726 00000BC9 49 dec ecx 1727 00000BCA 7502 jnz short lff8m_2 1728 00000BCC B080 mov al, 80h 1729 lff8m_2: 1730 ;mov [next_val], ax 1731 00000BCE 88C7 mov bh, al ; [next_val] 1732 00000BD0 8A25[F5220000] mov ah, [previous_val] 1733 00000BD6 00E0 add al, ah ; [previous_val] 1734 00000BD8 D0D8 rcr al, 1 1735 00000BDA 88C2 mov dl, al ; this is interpolated middle (3th) sample 1736 00000BDC 00E0 add al, ah ; [previous_val] 1737 00000BDE D0D8 rcr al, 1 1738 00000BE0 88C3 mov bl, al ; this is temporary interpolation value 1739 00000BE2 00E0 add al, ah ; [previous_val] 1740 00000BE4 D0D8 rcr al, 1 1741 00000BE6 2C80 sub al, 80h 1742 00000BE8 66C1E008 shl ax, 8 1743 00000BEC 66AB stosw ; this is 1st interpolated sample (L) 1744 00000BEE 66AB stosw ; this is 1st interpolated sample (R) 1745 00000BF0 88D8 mov al, bl 1746 00000BF2 00D0 add al, dl 1747 00000BF4 D0D8 rcr al, 1 1748 00000BF6 2C80 sub al, 80h 1749 00000BF8 66C1E008 shl ax, 8 1750 00000BFC 66AB stosw ; this is 2nd interpolated sample (L) 1751 00000BFE 66AB stosw ; this is 2nd interpolated sample (R) 1752 00000C00 88D0 mov al, dl 1753 00000C02 2C80 sub al, 80h 1754 00000C04 66C1E008 shl ax, 8 1755 00000C08 66AB stosw ; this is middle (3th) interpolated sample (L) 1756 00000C0A 66AB stosw ; this is middle (3th) interpolated sample (R) 1757 ;mov al, [next_val] 1758 00000C0C 88F8 mov al, bh 1759 00000C0E 00D0 add al, dl 1760 00000C10 D0D8 rcr al, 1 1761 00000C12 88C3 mov bl, al ; this is temporary interpolation value 1762 00000C14 00D0 add al, dl 1763 00000C16 D0D8 rcr al, 1 1764 00000C18 2C80 sub al, 80h 1765 00000C1A 66C1E008 shl ax, 8 1766 00000C1E 66AB stosw ; this is 4th interpolated sample (L) 1767 00000C20 66AB stosw ; this is 4th interpolated sample (R) 1768 ;mov al, [next_val] 1769 00000C22 88F8 mov al, bh 1770 00000C24 00D8 add al, bl 1771 00000C26 D0D8 rcr al, 1 1772 00000C28 2C80 sub al, 80h 1773 00000C2A 66C1E008 shl ax, 8 1774 00000C2E 66AB stosw ; this is 5th interpolated sample (L) 1775 00000C30 66AB stosw ; this is 5th interpolated sample (R) 1776 ; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK 1777 00000C32 09C9 or ecx, ecx 1778 00000C34 7581 jnz short lff8m_1 1779 1780 ; -------------- 1781 1782 lff8s_3: 1783 lff8m_3: 1784 lff8s2_3: 1785 lff8m2_3: 1786 lff16s_3: 1787 lff16m_3: 1788 lff16s2_3: 1789 lff16m2_3: 1790 lff24_3: 1791 lff32_3: 1792 lff44_3: 1793 lff22_3: 1794 lff11_3: 1795 lff12_3: ; 02/02/2025 1796 ; 08/12/2024 (BugFix) 1797 ; 31/05/2024 (BugFix) 1798 00000C36 8B0D[08750000] mov ecx, [buffersize] ; 16 bit (48 kHZ, stereo) sample size 1799 ;shl ecx, 1 ; byte count ; Bug ! 1800 ; 08/12/2024 1801 00000C3C 81C1[00800000] add ecx, audio_buffer 1802 00000C42 29F9 sub ecx, edi 1803 00000C44 7607 jna short lff8m_4 1804 ;inc ecx 1805 00000C46 C1E902 shr ecx, 2 1806 00000C49 31C0 xor eax, eax ; fill (remain part of) buffer with zeros 1807 00000C4B F3AB rep stosd 1808 lff8m_4: 1809 ; 31/05/2024 (BugFix) 1810 ; cf=1 ; Bug ! 1811 ; 08/12/2024 1812 ;clc 1813 00000C4D C3 retn 1814 1815 lff8_eof: 1816 lff16_eof: 1817 lff24_eof: 1818 lff32_eof: 1819 lff44_eof: 1820 lff22_eof: 1821 lff11_eof: 1822 lff12_eof: ; 02/02/2025 1823 ; 15/11/2023 1824 00000C4E C605[9A740000]01 mov byte [flags], ENDOFFILE 1825 00000C55 EBDF jmp short lff8m_3 1826 1827 lff8s_5: 1828 lff8m_5: 1829 lff8s2_5: 1830 lff8m2_5: 1831 lff16s_5: 1832 lff16m_5: 1833 lff16s2_5: 1834 lff16m2_5: 1835 lff24_5: 1836 lff32_5: 1837 lff44_5: 1838 lff22_5: 1839 lff11_5: 1840 lff12_5: ; 02/02/2025 1841 00000C57 B021 mov al, '!' ; error 1842 00000C59 E8D3FAFFFF call tL0 1843 1844 ;jmp short lff8m_3 1845 ; 15/11/2023 1846 00000C5E EBEE jmp lff8_eof 1847 1848 ; -------------- 1849 1850 load_8khz_stereo_8_bit: 1851 ; 02/02/2025 1852 ; 15/11/2023 1853 ; 14/11/2023 1854 ; 13/11/2023 1855 00000C60 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 1856 ; last of the file? 1857 00000C67 7402 jz short lff8s_0 ; no 1858 00000C69 F9 stc 1859 00000C6A C3 retn 1860 1861 lff8s_0: 1862 ; 01/12/2024 1863 ; edi = audio buffer address 1864 00000C6B BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 1865 ;mov edx, [loadsize] 1866 1867 ; esi = buffer address 1868 ;; edx = buffer size 1869 1870 ; load file into memory 1871 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000C70 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000C76 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00000C78 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000C7E B803000000 <1> mov eax, %1 97 <1> 98 00000C83 CD40 <1> int 40h 1872 00000C85 72D0 jc short lff8s_5 ; error ! 1873 1874 ; 01/12/2024 1875 00000C87 A3[14750000] mov [count], eax 1876 ;;; 1877 ; 07/12/2024 1878 ;mov edi, audio_buffer 1879 ;;; 1880 00000C8C D1E8 shr eax, 1 1881 00000C8E 74BE jz short lff8_eof 1882 1883 00000C90 89C1 mov ecx, eax ; word count 1884 lff8s_1: 1885 00000C92 AC lodsb 1886 00000C93 A2[F5220000] mov [previous_val_l], al 1887 00000C98 2C80 sub al, 80h 1888 00000C9A 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 1889 00000C9E 66AB stosw ; original sample (L) 1890 00000CA0 AC lodsb 1891 00000CA1 A2[F7220000] mov [previous_val_r], al 1892 00000CA6 2C80 sub al, 80h 1893 00000CA8 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 1894 00000CAC 66AB stosw ; original sample (R) 1895 1896 ;xor eax, eax 1897 ; 02/02/2025 1898 00000CAE 668B06 mov ax, [esi] 1899 00000CB1 49 dec ecx 1900 00000CB2 7504 jnz short lff8s_2 1901 ; convert 8 bit sample to 16 bit sample 1902 00000CB4 66B88080 mov ax, 8080h 1903 lff8s_2: 1904 00000CB8 A2[F9220000] mov [next_val_l], al 1905 00000CBD 8825[FB220000] mov [next_val_r], ah 1906 00000CC3 8A25[F5220000] mov ah, [previous_val_l] 1907 00000CC9 00E0 add al, ah 1908 00000CCB D0D8 rcr al, 1 1909 00000CCD 88C2 mov dl, al ; this is interpolated middle (3th) sample (L) 1910 00000CCF 00E0 add al, ah 1911 00000CD1 D0D8 rcr al, 1 1912 00000CD3 88C3 mov bl, al ; this is temporary interpolation value (L) 1913 00000CD5 00E0 add al, ah 1914 00000CD7 D0D8 rcr al, 1 1915 00000CD9 2C80 sub al, 80h 1916 00000CDB 66C1E008 shl ax, 8 1917 00000CDF 66AB stosw ; this is 1st interpolated sample (L) 1918 00000CE1 A0[FB220000] mov al, [next_val_r] 1919 00000CE6 8A25[F7220000] mov ah, [previous_val_r] 1920 00000CEC 00E0 add al, ah 1921 00000CEE D0D8 rcr al, 1 1922 00000CF0 88C6 mov dh, al ; this is interpolated middle (3th) sample (R) 1923 00000CF2 00E0 add al, ah 1924 00000CF4 D0D8 rcr al, 1 1925 00000CF6 88C7 mov bh, al ; this is temporary interpolation value (R) 1926 00000CF8 00E0 add al, ah 1927 00000CFA D0D8 rcr al, 1 1928 00000CFC 2C80 sub al, 80h 1929 00000CFE 66C1E008 shl ax, 8 1930 00000D02 66AB stosw ; this is 1st interpolated sample (R) 1931 00000D04 88D8 mov al, bl 1932 00000D06 00D0 add al, dl 1933 00000D08 D0D8 rcr al, 1 1934 00000D0A 2C80 sub al, 80h 1935 00000D0C 66C1E008 shl ax, 8 1936 00000D10 66AB stosw ; this is 2nd interpolated sample (L) 1937 00000D12 88F8 mov al, bh 1938 00000D14 00F0 add al, dh 1939 00000D16 D0D8 rcr al, 1 1940 00000D18 2C80 sub al, 80h 1941 00000D1A 66C1E008 shl ax, 8 1942 00000D1E 66AB stosw ; this is 2nd interpolated sample (R) 1943 00000D20 88D0 mov al, dl 1944 00000D22 2C80 sub al, 80h 1945 00000D24 66C1E008 shl ax, 8 1946 00000D28 66AB stosw ; this is middle (3th) interpolated sample (L) 1947 00000D2A 88F0 mov al, dh 1948 00000D2C 2C80 sub al, 80h 1949 00000D2E 66C1E008 shl ax, 8 1950 00000D32 66AB stosw ; this is middle (3th) interpolated sample (R) 1951 00000D34 A0[F9220000] mov al, [next_val_l] 1952 00000D39 00D0 add al, dl 1953 00000D3B D0D8 rcr al, 1 1954 00000D3D 88C3 mov bl, al ; this is temporary interpolation value (L) 1955 00000D3F 00D0 add al, dl 1956 00000D41 D0D8 rcr al, 1 1957 00000D43 2C80 sub al, 80h 1958 00000D45 66C1E008 shl ax, 8 1959 00000D49 66AB stosw ; this is 4th interpolated sample (L) 1960 00000D4B A0[FB220000] mov al, [next_val_r] 1961 00000D50 00F0 add al, dh 1962 00000D52 D0D8 rcr al, 1 1963 00000D54 88C7 mov bh, al ; this is temporary interpolation value (R) 1964 00000D56 00F0 add al, dh 1965 00000D58 D0D8 rcr al, 1 1966 00000D5A 2C80 sub al, 80h 1967 00000D5C 66C1E008 shl ax, 8 1968 00000D60 66AB stosw ; this is 4th interpolated sample (R) 1969 00000D62 A0[F9220000] mov al, [next_val_l] 1970 00000D67 00D8 add al, bl 1971 00000D69 D0D8 rcr al, 1 1972 00000D6B 2C80 sub al, 80h 1973 00000D6D 66C1E008 shl ax, 8 1974 00000D71 66AB stosw ; this is 5th interpolated sample (L) 1975 00000D73 A0[FB220000] mov al, [next_val_r] 1976 00000D78 00F8 add al, bh 1977 00000D7A D0D8 rcr al, 1 1978 00000D7C 2C80 sub al, 80h 1979 00000D7E 66C1E008 shl ax, 8 1980 00000D82 66AB stosw ; this is 5th interpolated sample (R) 1981 ; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 1982 00000D84 E305 jecxz lff8s_6 1983 00000D86 E907FFFFFF jmp lff8s_1 1984 lff8s_6: 1985 00000D8B E9A6FEFFFF jmp lff8s_3 1986 1987 load_8khz_mono_16_bit: 1988 ; 02/02/2025 1989 ; 13/11/2023 1990 00000D90 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 1991 ; last of the file? 1992 00000D97 7402 jz short lff8m2_0 ; no 1993 00000D99 F9 stc 1994 00000D9A C3 retn 1995 1996 lff8m2_0: 1997 ; 01/12/2024 1998 ; edi = audio buffer address 1999 00000D9B BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 2000 ;mov edx, [loadsize] 2001 2002 ; esi = buffer address 2003 ;; edx = buffer size 2004 2005 ; load file into memory 2006 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000DA0 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000DA6 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00000DA8 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000DAE B803000000 <1> mov eax, %1 97 <1> 98 00000DB3 CD40 <1> int 40h 2007 00000DB5 0F82A0000000 jc lff8m2_7 ; error ! 2008 2009 ; 01/12/2024 2010 00000DBB A3[14750000] mov [count], eax 2011 ;;; 2012 ; 07/12/2024 2013 ;mov edi, audio_buffer 2014 ;;; 2015 00000DC0 D1E8 shr eax, 1 2016 00000DC2 7505 jnz short lff8m2_8 2017 00000DC4 E985FEFFFF jmp lff8_eof 2018 2019 lff8m2_8: 2020 00000DC9 89C1 mov ecx, eax ; word count 2021 lff8m2_1: 2022 00000DCB 66AD lodsw 2023 00000DCD 66AB stosw ; original sample (left channel) 2024 00000DCF 66AB stosw ; original sample (right channel) 2025 00000DD1 80C480 add ah, 80h ; convert sound level to 0-65535 format 2026 00000DD4 66A3[F5220000] mov [previous_val], ax 2027 ; 02/02/2025 2028 00000DDA 668B06 mov ax, [esi] 2029 00000DDD 49 dec ecx 2030 00000DDE 7502 jnz short lff8m2_2 2031 00000DE0 31C0 xor eax, eax 2032 lff8m2_2: 2033 00000DE2 80C480 add ah, 80h ; convert sound level to 0-65535 format 2034 00000DE5 89C5 mov ebp, eax ; [next_val] 2035 00000DE7 660305[F5220000] add ax, [previous_val] 2036 00000DEE 66D1D8 rcr ax, 1 2037 00000DF1 89C2 mov edx, eax ; this is interpolated middle (3th) sample 2038 00000DF3 660305[F5220000] add ax, [previous_val] 2039 00000DFA 66D1D8 rcr ax, 1 ; this is temporary interpolation value 2040 00000DFD 89C3 mov ebx, eax 2041 00000DFF 660305[F5220000] add ax, [previous_val] 2042 00000E06 66D1D8 rcr ax, 1 2043 00000E09 80EC80 sub ah, 80h ; -32768 to +32767 format again 2044 00000E0C 66AB stosw ; this is 1st interpolated sample (L) 2045 00000E0E 66AB stosw ; this is 1st interpolated sample (R) 2046 00000E10 89D8 mov eax, ebx 2047 00000E12 6601D0 add ax, dx 2048 00000E15 66D1D8 rcr ax, 1 2049 00000E18 80EC80 sub ah, 80h 2050 00000E1B 66AB stosw ; this is 2nd interpolated sample (L) 2051 00000E1D 66AB stosw ; this is 2nd interpolated sample (R) 2052 00000E1F 89D0 mov eax, edx 2053 00000E21 80EC80 sub ah, 80h ; -32768 to +32767 format again 2054 00000E24 66AB stosw ; this is middle (3th) interpolated sample (L) 2055 00000E26 66AB stosw ; this is middle (3th) interpolated sample (R) 2056 00000E28 89E8 mov eax, ebp 2057 00000E2A 6601D0 add ax, dx 2058 00000E2D 66D1D8 rcr ax, 1 2059 00000E30 89C3 mov ebx, eax ; this is temporary interpolation value 2060 00000E32 6601D0 add ax, dx 2061 00000E35 66D1D8 rcr ax, 1 2062 00000E38 80EC80 sub ah, 80h 2063 00000E3B 66AB stosw ; this is 4th interpolated sample (L) 2064 00000E3D 66AB stosw ; this is 4th interpolated sample (R) 2065 00000E3F 89E8 mov eax, ebp 2066 00000E41 6601D8 add ax, bx 2067 00000E44 66D1D8 rcr ax, 1 2068 00000E47 80EC80 sub ah, 80h ; -32768 to +32767 format again 2069 00000E4A 66AB stosw ; this is 5th interpolated sample (L) 2070 00000E4C 66AB stosw ; this is 5th interpolated sample (R) 2071 ; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK 2072 00000E4E 09C9 or ecx, ecx 2073 00000E50 0F8575FFFFFF jnz lff8m2_1 2074 00000E56 E9DBFDFFFF jmp lff8m2_3 2075 2076 lff8m2_7: 2077 lff8s2_7: 2078 00000E5B E9F7FDFFFF jmp lff8m2_5 ; error 2079 2080 load_8khz_stereo_16_bit: 2081 ; 02/02/2025 2082 ; 16/11/2023 2083 ; 15/11/2023 2084 ; 13/11/2023 2085 00000E60 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 2086 ; last of the file? 2087 00000E67 7402 jz short lff8s2_0 ; no 2088 00000E69 F9 stc 2089 00000E6A C3 retn 2090 2091 lff8s2_0: 2092 ; 01/12/2024 2093 ; edi = audio buffer address 2094 00000E6B BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 2095 ;mov edx, [loadsize] 2096 2097 ; esi = buffer address 2098 ;; edx = buffer size 2099 2100 ; load file into memory 2101 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000E70 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000E76 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00000E78 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000E7E B803000000 <1> mov eax, %1 97 <1> 98 00000E83 CD40 <1> int 40h 2102 00000E85 72D4 jc short lff8s2_7 ; error ! 2103 2104 ; 01/12/2024 2105 00000E87 A3[14750000] mov [count], eax 2106 ;;; 2107 ; 07/12/2024 2108 ;mov edi, audio_buffer 2109 ;;; 2110 00000E8C C1E802 shr eax, 2 2111 00000E8F 7505 jnz short lff8s2_8 2112 00000E91 E9B8FDFFFF jmp lff8_eof 2113 2114 lff8s2_8: 2115 00000E96 89C1 mov ecx, eax ; dword count 2116 lff8s2_1: 2117 00000E98 66AD lodsw 2118 00000E9A 66AB stosw ; original sample (L) 2119 ; 15/11/2023 2120 00000E9C 80C480 add ah, 80h ; convert sound level to 0-65535 format 2121 00000E9F 66A3[F5220000] mov [previous_val_l], ax 2122 00000EA5 66AD lodsw 2123 00000EA7 66AB stosw ; original sample (R) 2124 00000EA9 80C480 add ah, 80h ; convert sound level to 0-65535 format 2125 00000EAC 66A3[F7220000] mov [previous_val_r], ax 2126 ; 02/02/2025 2127 00000EB2 668B06 mov ax, [esi] 2128 00000EB5 668B5602 mov dx, [esi+2] 2129 ; 16/11/2023 2130 00000EB9 49 dec ecx 2131 00000EBA 7504 jnz short lff8s2_2 2132 00000EBC 31D2 xor edx, edx 2133 00000EBE 31C0 xor eax, eax 2134 lff8s2_2: 2135 00000EC0 80C480 add ah, 80h ; convert sound level to 0-65535 format 2136 00000EC3 66A3[F9220000] mov [next_val_l], ax 2137 00000EC9 80C680 add dh, 80h ; convert sound level to 0-65535 format 2138 00000ECC 668915[FB220000] mov [next_val_r], dx 2139 00000ED3 660305[F5220000] add ax, [previous_val_l] 2140 00000EDA 66D1D8 rcr ax, 1 2141 00000EDD 89C2 mov edx, eax ; this is interpolated middle (3th) sample (L) 2142 00000EDF 660305[F5220000] add ax, [previous_val_l] 2143 00000EE6 66D1D8 rcr ax, 1 2144 00000EE9 89C3 mov ebx, eax ; this is temporary interpolation value (L) 2145 00000EEB 660305[F5220000] add ax, [previous_val_l] 2146 00000EF2 66D1D8 rcr ax, 1 2147 00000EF5 80EC80 sub ah, 80h ; -32768 to +32767 format again 2148 00000EF8 66AB stosw ; this is 1st interpolated sample (L) 2149 00000EFA 66A1[FB220000] mov ax, [next_val_r] 2150 00000F00 660305[F7220000] add ax, [previous_val_r] 2151 00000F07 66D1D8 rcr ax, 1 2152 00000F0A 89C5 mov ebp, eax ; this is interpolated middle (3th) sample (R) 2153 00000F0C 660305[F7220000] add ax, [previous_val_r] 2154 00000F13 66D1D8 rcr ax, 1 2155 00000F16 50 push eax ; * ; this is temporary interpolation value (R) 2156 00000F17 660305[F7220000] add ax, [previous_val_r] 2157 00000F1E 66D1D8 rcr ax, 1 2158 00000F21 80EC80 sub ah, 80h 2159 00000F24 66AB stosw ; this is 1st interpolated sample (R) 2160 00000F26 89D8 mov eax, ebx 2161 00000F28 6601D0 add ax, dx 2162 00000F2B 66D1D8 rcr ax, 1 2163 00000F2E 80EC80 sub ah, 80h ; -32768 to +32767 format again 2164 00000F31 66AB stosw ; this is 2nd interpolated sample (L) 2165 00000F33 58 pop eax ; * 2166 00000F34 6601E8 add ax, bp 2167 00000F37 66D1D8 rcr ax, 1 2168 00000F3A 80EC80 sub ah, 80h 2169 00000F3D 66AB stosw ; this is 2nd interpolated sample (R) 2170 00000F3F 89D0 mov eax, edx 2171 00000F41 80EC80 sub ah, 80h 2172 00000F44 66AB stosw ; this is middle (3th) interpolated sample (L) 2173 00000F46 89E8 mov eax, ebp 2174 00000F48 80EC80 sub ah, 80h ; -32768 to +32767 format again 2175 00000F4B 66AB stosw ; this is middle (3th) interpolated sample (R) 2176 00000F4D 66A1[F9220000] mov ax, [next_val_l] 2177 00000F53 6601D0 add ax, dx 2178 00000F56 66D1D8 rcr ax, 1 2179 00000F59 89C3 mov ebx, eax ; this is temporary interpolation value (L) 2180 00000F5B 6601D0 add ax, dx 2181 00000F5E 66D1D8 rcr ax, 1 2182 00000F61 80EC80 sub ah, 80h 2183 00000F64 66AB stosw ; this is 4th interpolated sample (L) 2184 00000F66 66A1[FB220000] mov ax, [next_val_r] 2185 00000F6C 6601E8 add ax, bp 2186 00000F6F 66D1D8 rcr ax, 1 2187 00000F72 50 push eax ; ** ; this is temporary interpolation value (R) 2188 00000F73 6601E8 add ax, bp 2189 00000F76 66D1D8 rcr ax, 1 2190 00000F79 80EC80 sub ah, 80h 2191 00000F7C 66AB stosw ; this is 4th interpolated sample (R) 2192 00000F7E 66A1[F9220000] mov ax, [next_val_l] 2193 00000F84 6601D8 add ax, bx 2194 00000F87 66D1D8 rcr ax, 1 2195 00000F8A 80EC80 sub ah, 80h ; -32768 to +32767 format again 2196 00000F8D 66AB stosw ; this is 5th interpolated sample (L) 2197 00000F8F 58 pop eax ; ** 2198 00000F90 660305[FB220000] add ax, [next_val_r] 2199 00000F97 66D1D8 rcr ax, 1 2200 00000F9A 80EC80 sub ah, 80h 2201 00000F9D 66AB stosw ; this is 5th interpolated sample (R) 2202 ; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 2203 00000F9F E305 jecxz lff8_s2_9 2204 00000FA1 E9F2FEFFFF jmp lff8s2_1 2205 lff8_s2_9: 2206 00000FA6 E98BFCFFFF jmp lff8s2_3 2207 2208 ; ..................... 2209 2210 load_16khz_mono_8_bit: 2211 ; 02/02/2025 2212 ; 14/11/2023 2213 ; 13/11/2023 2214 00000FAB F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 2215 ; last of the file? 2216 00000FB2 7402 jz short lff16m_0 ; no 2217 00000FB4 F9 stc 2218 00000FB5 C3 retn 2219 2220 lff16m_0: 2221 ; 01/12/2024 2222 ; edi = audio buffer address 2223 00000FB6 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 2224 ;mov edx, [loadsize] 2225 2226 ; esi = buffer address 2227 ;; edx = buffer size 2228 2229 ; load file into memory 2230 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00000FBB 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00000FC1 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00000FC3 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00000FC9 B803000000 <1> mov eax, %1 97 <1> 98 00000FCE CD40 <1> int 40h 2231 00000FD0 7253 jc short lff16m_7 ; error ! 2232 2233 ; 01/12/2024 2234 00000FD2 A3[14750000] mov [count], eax 2235 ;;; 2236 ; 07/12/2024 2237 ;mov edi, audio_buffer 2238 ;;; 2239 00000FD7 21C0 and eax, eax 2240 00000FD9 7505 jnz short lff16m_8 2241 00000FDB E96EFCFFFF jmp lff16_eof 2242 2243 lff16m_8: 2244 00000FE0 89C1 mov ecx, eax ; byte count 2245 lff16m_1: 2246 00000FE2 AC lodsb 2247 ;mov [previous_val], al 2248 00000FE3 88C3 mov bl, al 2249 00000FE5 2C80 sub al, 80h 2250 00000FE7 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2251 00000FEB 66AB stosw ; original sample (left channel) 2252 00000FED 66AB stosw ; original sample (right channel) 2253 ;xor eax, eax 2254 ; 02/02/2025 2255 00000FEF 8A06 mov al, [esi] 2256 00000FF1 49 dec ecx 2257 00000FF2 7502 jnz short lff16m_2 2258 ; 14/11/2023 2259 00000FF4 B080 mov al, 80h 2260 lff16m_2: 2261 ;mov [next_val], al 2262 00000FF6 88C7 mov bh, al 2263 ;add al, [previous_val] 2264 00000FF8 00D8 add al, bl 2265 00000FFA D0D8 rcr al, 1 2266 00000FFC 88C2 mov dl, al ; this is interpolated middle (temp) sample 2267 ;add al, [previous_val] 2268 00000FFE 00D8 add al, bl 2269 00001000 D0D8 rcr al, 1 2270 00001002 2C80 sub al, 80h 2271 00001004 66C1E008 shl ax, 8 2272 00001008 66AB stosw ; this is 1st interpolated sample (L) 2273 0000100A 66AB stosw ; this is 1st interpolated sample (R) 2274 ;mov al, [next_val] 2275 0000100C 88F8 mov al, bh 2276 0000100E 00D0 add al, dl 2277 00001010 D0D8 rcr al, 1 2278 00001012 2C80 sub al, 80h 2279 00001014 66C1E008 shl ax, 8 2280 00001018 66AB stosw ; this is 2nd interpolated sample (L) 2281 0000101A 66AB stosw ; this is 2nd interpolated sample (R) 2282 2283 ; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK 2284 0000101C 09C9 or ecx, ecx 2285 0000101E 75C2 jnz short lff16m_1 2286 00001020 E911FCFFFF jmp lff16m_3 2287 2288 lff16m_7: 2289 lff16s_7: 2290 00001025 E92DFCFFFF jmp lff16m_5 ; error 2291 2292 load_16khz_stereo_8_bit: 2293 ; 02/02/2025 2294 ; 14/11/2023 2295 ; 13/11/2023 2296 0000102A F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 2297 ; last of the file? 2298 00001031 7402 jz short lff16s_0 ; no 2299 00001033 F9 stc 2300 00001034 C3 retn 2301 2302 lff16s_0: 2303 ; 01/12/2024 2304 ; edi = audio buffer address 2305 00001035 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 2306 ;mov edx, [loadsize] 2307 2308 ; esi = buffer address 2309 ;; edx = buffer size 2310 2311 ; load file into memory 2312 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000103A 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00001040 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001042 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001048 B803000000 <1> mov eax, %1 97 <1> 98 0000104D CD40 <1> int 40h 2313 0000104F 72D4 jc short lff16s_7 ; error ! 2314 2315 ; 01/12/2024 2316 00001051 A3[14750000] mov [count], eax 2317 ;;; 2318 ; 07/12/2024 2319 ;mov edi, audio_buffer 2320 ;;; 2321 00001056 D1E8 shr eax, 1 2322 00001058 7505 jnz short lff16s_8 2323 0000105A E9EFFBFFFF jmp lff16_eof 2324 2325 lff16s_8: 2326 0000105F 89C1 mov ecx, eax ; word count 2327 lff16s_1: 2328 00001061 AC lodsb 2329 00001062 A2[F5220000] mov [previous_val_l], al 2330 00001067 2C80 sub al, 80h 2331 00001069 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2332 0000106D 66AB stosw ; original sample (L) 2333 0000106F AC lodsb 2334 00001070 A2[F7220000] mov [previous_val_r], al 2335 00001075 2C80 sub al, 80h 2336 00001077 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2337 0000107B 66AB stosw ; original sample (R) 2338 2339 ;xor eax, eax 2340 ; 02/02/2025 2341 0000107D 668B06 mov ax, [esi] 2342 00001080 49 dec ecx 2343 00001081 7504 jnz short lff16s_2 2344 ; convert 8 bit sample to 16 bit sample 2345 ; 14/11/2023 2346 00001083 66B88080 mov ax, 8080h 2347 lff16s_2: 2348 ;mov [next_val_l], al 2349 ;mov [next_val_r], ah 2350 00001087 89C3 mov ebx, eax 2351 00001089 0205[F5220000] add al, [previous_val_l] 2352 0000108F D0D8 rcr al, 1 2353 00001091 88C2 mov dl, al ; this is temporary interpolation value (L) 2354 00001093 0205[F5220000] add al, [previous_val_l] 2355 00001099 D0D8 rcr al, 1 2356 0000109B 2C80 sub al, 80h 2357 0000109D 66C1E008 shl ax, 8 2358 000010A1 66AB stosw ; this is 1st interpolated sample (L) 2359 000010A3 88F8 mov al, bh ; [next_val_r] 2360 000010A5 0205[F7220000] add al, [previous_val_r] 2361 000010AB D0D8 rcr al, 1 2362 000010AD 88C6 mov dh, al ; this is temporary interpolation value (R) 2363 000010AF 0205[F7220000] add al, [previous_val_r] 2364 000010B5 D0D8 rcr al, 1 2365 000010B7 2C80 sub al, 80h 2366 000010B9 66C1E008 shl ax, 8 2367 000010BD 66AB stosw ; this is 1st interpolated sample (R) 2368 000010BF 88D0 mov al, dl 2369 000010C1 00D8 add al, bl ; [next_val_l] 2370 000010C3 D0D8 rcr al, 1 2371 000010C5 2C80 sub al, 80h 2372 000010C7 66C1E008 shl ax, 8 2373 000010CB 66AB stosw ; this is 2nd interpolated sample (L) 2374 000010CD 88F0 mov al, dh 2375 000010CF 00F8 add al, bh ; [next_val_r] 2376 000010D1 D0D8 rcr al, 1 2377 000010D3 2C80 sub al, 80h 2378 000010D5 66C1E008 shl ax, 8 2379 000010D9 66AB stosw ; this is 2nd interpolated sample (R) 2380 2381 ; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 2382 000010DB 09C9 or ecx, ecx 2383 000010DD 7582 jnz short lff16s_1 2384 000010DF E952FBFFFF jmp lff16s_3 2385 2386 load_16khz_mono_16_bit: 2387 ; 02/02/2025 2388 ; 15/11/2023 2389 ; 13/11/2023 2390 000010E4 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 2391 ; last of the file? 2392 000010EB 7402 jz short lff16m2_0 ; no 2393 000010ED F9 stc 2394 000010EE C3 retn 2395 2396 lff16m2_0: 2397 ; 01/12/2024 2398 ; edi = audio buffer address 2399 000010EF BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 2400 ;mov edx, [loadsize] 2401 2402 ; esi = buffer address 2403 ;; edx = buffer size 2404 2405 ; load file into memory 2406 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000010F4 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000010FA 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 000010FC 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001102 B803000000 <1> mov eax, %1 97 <1> 98 00001107 CD40 <1> int 40h 2407 00001109 7255 jc short lff16m2_7 ; error ! 2408 2409 ; 01/12/2024 2410 0000110B A3[14750000] mov [count], eax 2411 ;;; 2412 ; 07/12/2024 2413 ;mov edi, audio_buffer 2414 ;;; 2415 00001110 D1E8 shr eax, 1 2416 00001112 7505 jnz short lff16m2_8 2417 00001114 E935FBFFFF jmp lff16_eof 2418 2419 lff16m2_8: 2420 00001119 89C1 mov ecx, eax ; word count 2421 lff16m2_1: 2422 0000111B 66AD lodsw 2423 0000111D 66AB stosw ; original sample (left channel) 2424 0000111F 66AB stosw ; original sample (right channel) 2425 00001121 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2426 ;mov [previous_val], ax 2427 00001124 89C3 mov ebx, eax 2428 ; 02/02/2025 2429 00001126 668B06 mov ax, [esi] 2430 00001129 49 dec ecx 2431 0000112A 7502 jnz short lff16m2_2 2432 0000112C 31C0 xor eax, eax 2433 lff16m2_2: 2434 0000112E 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2435 00001131 89C5 mov ebp, eax ; [next_val] 2436 ;add ax, [previous_val] 2437 00001133 6601D8 add ax, bx 2438 00001136 66D1D8 rcr ax, 1 2439 00001139 89C2 mov edx, eax ; this is temporary interpolation value 2440 ;add ax, [previous_val] 2441 0000113B 6601D8 add ax, bx 2442 0000113E 66D1D8 rcr ax, 1 2443 00001141 80EC80 sub ah, 80h ; -32768 to +32767 format again 2444 00001144 66AB stosw ; this is 1st interpolated sample (L) 2445 00001146 66AB stosw ; this is 1st interpolated sample (R) 2446 00001148 89E8 mov eax, ebp 2447 0000114A 6601D0 add ax, dx 2448 0000114D 66D1D8 rcr ax, 1 2449 00001150 80EC80 sub ah, 80h ; -32768 to +32767 format again 2450 00001153 66AB stosw ; this is 2nd interpolated sample (L) 2451 00001155 66AB stosw ; this is 2nd interpolated sample (R) 2452 ; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK 2453 00001157 09C9 or ecx, ecx 2454 00001159 75C0 jnz short lff16m2_1 2455 0000115B E9D6FAFFFF jmp lff16m2_3 2456 2457 lff16m2_7: 2458 lff16s2_7: 2459 00001160 E9F2FAFFFF jmp lff16m2_5 ; error 2460 2461 load_16khz_stereo_16_bit: 2462 ; 02/02/2025 2463 ; 16/11/2023 2464 ; 15/11/2023 2465 ; 13/11/2023 2466 00001165 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 2467 ; last of the file? 2468 0000116C 7402 jz short lff16s2_0 ; no 2469 0000116E F9 stc 2470 0000116F C3 retn 2471 2472 lff16s2_0: 2473 ; 01/12/2024 2474 ; edi = audio buffer address 2475 00001170 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 2476 ;mov edx, [loadsize] 2477 2478 ; esi = buffer address 2479 ;; edx = buffer size 2480 2481 ; load file into memory 2482 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001175 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 0000117B 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 0000117D 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001183 B803000000 <1> mov eax, %1 97 <1> 98 00001188 CD40 <1> int 40h 2483 0000118A 72D4 jc short lff16s2_7 ; error ! 2484 2485 ; 01/12/2024 2486 0000118C A3[14750000] mov [count], eax 2487 ;;; 2488 ; 07/12/2024 2489 ;mov edi, audio_buffer 2490 ;;; 2491 00001191 C1E802 shr eax, 2 2492 00001194 7505 jnz short lff16s2_8 2493 00001196 E9B3FAFFFF jmp lff16_eof 2494 2495 lff16s2_8: 2496 0000119B 89C1 mov ecx, eax ; dword count 2497 lff16s2_1: 2498 0000119D 66AD lodsw 2499 0000119F 66AB stosw ; original sample (L) 2500 000011A1 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2501 000011A4 66A3[F5220000] mov [previous_val_l], ax 2502 000011AA 66AD lodsw 2503 000011AC 66AB stosw ; original sample (R) 2504 000011AE 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2505 000011B1 66A3[F7220000] mov [previous_val_r], ax 2506 ; 02/02/2025 2507 000011B7 668B06 mov ax, [esi] 2508 000011BA 668B5602 mov dx, [esi+2] 2509 ; 16/11/2023 2510 000011BE 49 dec ecx 2511 000011BF 7504 jnz short lff16s2_2 2512 000011C1 31D2 xor edx, edx 2513 000011C3 31C0 xor eax, eax 2514 lff16s2_2: 2515 000011C5 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2516 ;mov [next_val_l], ax 2517 000011C8 89C5 mov ebp, eax 2518 000011CA 80C680 add dh, 80h ; convert sound level 0 to 65535 format 2519 000011CD 668915[FB220000] mov [next_val_r], dx 2520 000011D4 660305[F5220000] add ax, [previous_val_l] 2521 000011DB 66D1D8 rcr ax, 1 2522 000011DE 89C2 mov edx, eax ; this is temporary interpolation value (L) 2523 000011E0 660305[F5220000] add ax, [previous_val_l] 2524 000011E7 66D1D8 rcr ax, 1 2525 000011EA 80EC80 sub ah, 80h ; -32768 to +32767 format again 2526 000011ED 66AB stosw ; this is 1st interpolated sample (L) 2527 000011EF 66A1[FB220000] mov ax, [next_val_r] 2528 000011F5 660305[F7220000] add ax, [previous_val_r] 2529 000011FC 66D1D8 rcr ax, 1 2530 000011FF 89C3 mov ebx, eax ; this is temporary interpolation value (R) 2531 00001201 660305[F7220000] add ax, [previous_val_r] 2532 00001208 66D1D8 rcr ax, 1 2533 0000120B 80EC80 sub ah, 80h ; -32768 to +32767 format again 2534 0000120E 66AB stosw ; this is 1st interpolated sample (R) 2535 ;mov ax, [next_val_l] 2536 00001210 89E8 mov eax, ebp 2537 00001212 6601D0 add ax, dx 2538 00001215 66D1D8 rcr ax, 1 2539 00001218 80EC80 sub ah, 80h ; -32768 to +32767 format again 2540 0000121B 66AB stosw ; this is 2nd interpolated sample (L) 2541 0000121D 66A1[FB220000] mov ax, [next_val_r] 2542 00001223 6601D8 add ax, bx 2543 00001226 66D1D8 rcr ax, 1 2544 00001229 80EC80 sub ah, 80h ; -32768 to +32767 format again 2545 0000122C 66AB stosw ; this is 2nd interpolated sample (R) 2546 2547 ; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 2548 0000122E 09C9 or ecx, ecx 2549 00001230 0F8567FFFFFF jnz lff16s2_1 2550 00001236 E9FBF9FFFF jmp lff16s2_3 2551 2552 ; ..................... 2553 2554 load_24khz_mono_8_bit: 2555 ; 02/02/2025 2556 ; 15/11/2023 2557 0000123B F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 2558 ; last of the file? 2559 00001242 7402 jz short lff24m_0 ; no 2560 00001244 F9 stc 2561 00001245 C3 retn 2562 2563 lff24m_0: 2564 ; 01/12/2024 2565 ; edi = audio buffer address 2566 00001246 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 2567 ;mov edx, [loadsize] 2568 2569 ; esi = buffer address 2570 ;; edx = buffer size 2571 2572 ; load file into memory 2573 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000124B 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00001251 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001253 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001259 B803000000 <1> mov eax, %1 97 <1> 98 0000125E CD40 <1> int 40h 2574 00001260 723B jc short lff24m_7 ; error ! 2575 2576 ; 01/12/2024 2577 00001262 A3[14750000] mov [count], eax 2578 ;;; 2579 ; 07/12/2024 2580 ;mov edi, audio_buffer 2581 ;;; 2582 00001267 21C0 and eax, eax 2583 00001269 7505 jnz short lff24m_8 2584 0000126B E9DEF9FFFF jmp lff24_eof 2585 2586 lff24m_8: 2587 00001270 89C1 mov ecx, eax ; byte count 2588 lff24m_1: 2589 00001272 AC lodsb 2590 ;mov [previous_val], al 2591 00001273 88C3 mov bl, al 2592 00001275 2C80 sub al, 80h 2593 00001277 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2594 0000127B 66AB stosw ; original sample (left channel) 2595 0000127D 66AB stosw ; original sample (right channel) 2596 ;xor eax, eax 2597 ; 02/02/2025 2598 0000127F 8A06 mov al, [esi] 2599 00001281 49 dec ecx 2600 00001282 7502 jnz short lff24m_2 2601 00001284 B080 mov al, 80h 2602 lff24m_2: 2603 ;;mov [next_val], al 2604 ;mov bh, al 2605 ;add al, [previous_val] 2606 00001286 00D8 add al, bl 2607 00001288 D0D8 rcr al, 1 2608 0000128A 2C80 sub al, 80h 2609 0000128C 66C1E008 shl ax, 8 2610 00001290 66AB stosw ; this is interpolated sample (L) 2611 00001292 66AB stosw ; this is interpolated sample (R) 2612 2613 ; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK 2614 00001294 09C9 or ecx, ecx 2615 00001296 75DA jnz short lff24m_1 2616 00001298 E999F9FFFF jmp lff24_3 2617 2618 lff24m_7: 2619 lff24s_7: 2620 0000129D E9B5F9FFFF jmp lff24_5 ; error 2621 2622 load_24khz_stereo_8_bit: 2623 ; 02/02/2025 2624 ; 15/11/2023 2625 000012A2 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 2626 ; last of the file? 2627 000012A9 7402 jz short lff24s_0 ; no 2628 000012AB F9 stc 2629 000012AC C3 retn 2630 2631 lff24s_0: 2632 ; 01/12/2024 2633 ; edi = audio buffer address 2634 000012AD BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 2635 ;mov edx, [loadsize] 2636 2637 ; esi = buffer address 2638 ;; edx = buffer size 2639 2640 ; load file into memory 2641 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000012B2 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000012B8 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 000012BA 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000012C0 B803000000 <1> mov eax, %1 97 <1> 98 000012C5 CD40 <1> int 40h 2642 000012C7 72D4 jc short lff24s_7 ; error ! 2643 2644 ; 01/12/2024 2645 000012C9 A3[14750000] mov [count], eax 2646 ;;; 2647 ; 07/12/2024 2648 ;mov edi, audio_buffer 2649 ;;; 2650 000012CE D1E8 shr eax, 1 2651 000012D0 7505 jnz short lff24s_8 2652 000012D2 E977F9FFFF jmp lff24_eof 2653 2654 lff24s_8: 2655 000012D7 89C1 mov ecx, eax ; word count 2656 lff24s_1: 2657 000012D9 AC lodsb 2658 000012DA A2[F5220000] mov [previous_val_l], al 2659 000012DF 2C80 sub al, 80h 2660 000012E1 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2661 000012E5 66AB stosw ; original sample (L) 2662 000012E7 AC lodsb 2663 000012E8 A2[F7220000] mov [previous_val_r], al 2664 000012ED 2C80 sub al, 80h 2665 000012EF 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2666 000012F3 66AB stosw ; original sample (R) 2667 2668 ;xor eax, eax 2669 ; 02/02/2025 2670 000012F5 668B06 mov ax, [esi] 2671 000012F8 49 dec ecx 2672 000012F9 7504 jnz short lff24s_2 2673 ; convert 8 bit sample to 16 bit sample 2674 000012FB 66B88080 mov ax, 8080h 2675 lff24s_2: 2676 ;;mov [next_val_l], al 2677 ;;mov [next_val_r], ah 2678 ;mov bx, ax 2679 000012FF 88E7 mov bh, ah 2680 00001301 0205[F5220000] add al, [previous_val_l] 2681 00001307 D0D8 rcr al, 1 2682 ;mov dl, al 2683 00001309 2C80 sub al, 80h 2684 0000130B 66C1E008 shl ax, 8 2685 0000130F 66AB stosw ; this is interpolated sample (L) 2686 00001311 88F8 mov al, bh ; [next_val_r] 2687 00001313 0205[F7220000] add al, [previous_val_r] 2688 00001319 D0D8 rcr al, 1 2689 ;mov dh, al 2690 0000131B 2C80 sub al, 80h 2691 0000131D 66C1E008 shl ax, 8 2692 00001321 66AB stosw ; this is interpolated sample (R) 2693 2694 ; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 2695 00001323 09C9 or ecx, ecx 2696 00001325 75B2 jnz short lff24s_1 2697 00001327 E90AF9FFFF jmp lff24_3 2698 2699 load_24khz_mono_16_bit: 2700 ; 02/02/2025 2701 ; 15/11/2023 2702 0000132C F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 2703 ; last of the file? 2704 00001333 7402 jz short lff24m2_0 ; no 2705 00001335 F9 stc 2706 00001336 C3 retn 2707 2708 lff24m2_0: 2709 ; 01/12/2024 2710 ; edi = audio buffer address 2711 00001337 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 2712 ;mov edx, [loadsize] 2713 2714 ; esi = buffer address 2715 ;; edx = buffer size 2716 2717 ; load file into memory 2718 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000133C 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00001342 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001344 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000134A B803000000 <1> mov eax, %1 97 <1> 98 0000134F CD40 <1> int 40h 2719 00001351 723A jc short lff24m2_7 ; error ! 2720 2721 ; 01/12/2024 2722 00001353 A3[14750000] mov [count], eax 2723 ;;; 2724 ; 07/12/2024 2725 ;mov edi, audio_buffer 2726 ;;; 2727 00001358 D1E8 shr eax, 1 2728 0000135A 7505 jnz short lff24m2_8 2729 0000135C E9EDF8FFFF jmp lff24_eof 2730 2731 lff24m2_8: 2732 00001361 89C1 mov ecx, eax ; word count 2733 lff24m2_1: 2734 00001363 66AD lodsw 2735 00001365 66AB stosw ; original sample (left channel) 2736 00001367 66AB stosw ; original sample (right channel) 2737 00001369 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2738 ;mov [previous_val], ax 2739 ;mov ebx, eax 2740 ; 02/02/2025 2741 0000136C 668B1E mov bx, [esi] 2742 0000136F 49 dec ecx 2743 00001370 7502 jnz short lff24m2_2 2744 ;xor eax, eax 2745 00001372 31DB xor ebx, ebx 2746 lff24m2_2: 2747 ; 02/02/2025 2748 00001374 80C780 add bh, 80h ; convert sound level 0 to 65535 format 2749 ;add ah, 80h 2750 ;mov ebp, eax ; [next_val] 2751 ;add ax, [previous_val] 2752 ; ax = [previous_val] 2753 ; bx = [next_val] 2754 00001377 6601D8 add ax, bx 2755 0000137A 66D1D8 rcr ax, 1 2756 0000137D 80EC80 sub ah, 80h ; -32768 to +32767 format again 2757 00001380 66AB stosw ; this is interpolated sample (L) 2758 00001382 66AB stosw ; this is interpolated sample (R) 2759 ; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK 2760 00001384 09C9 or ecx, ecx 2761 00001386 75DB jnz short lff24m2_1 2762 00001388 E9A9F8FFFF jmp lff24_3 2763 2764 lff24m2_7: 2765 lff24s2_7: 2766 0000138D E9C5F8FFFF jmp lff24_5 ; error 2767 2768 load_24khz_stereo_16_bit: 2769 ; 02/02/2025 2770 ; 16/11/2023 2771 ; 15/11/2023 2772 00001392 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 2773 ; last of the file? 2774 00001399 7402 jz short lff24s2_0 ; no 2775 0000139B F9 stc 2776 0000139C C3 retn 2777 2778 lff24s2_0: 2779 ; 01/12/2024 2780 ; edi = audio buffer address 2781 0000139D BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 2782 ;mov edx, [loadsize] 2783 2784 ; esi = buffer address 2785 ;; edx = buffer size 2786 2787 ; load file into memory 2788 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000013A2 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000013A8 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 000013AA 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000013B0 B803000000 <1> mov eax, %1 97 <1> 98 000013B5 CD40 <1> int 40h 2789 000013B7 72D4 jc short lff24s2_7 ; error ! 2790 2791 ; 01/12/2024 2792 000013B9 A3[14750000] mov [count], eax 2793 ;;; 2794 ; 07/12/2024 2795 ;mov edi, audio_buffer 2796 ;;; 2797 000013BE C1E802 shr eax, 2 2798 000013C1 7505 jnz short lff24s2_8 2799 000013C3 E986F8FFFF jmp lff24_eof 2800 2801 lff24s2_8: 2802 000013C8 89C1 mov ecx, eax ; dword count 2803 lff24s2_1: 2804 000013CA 66AD lodsw 2805 000013CC 66AB stosw ; original sample (L) 2806 000013CE 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2807 000013D1 66A3[F5220000] mov [previous_val_l], ax 2808 000013D7 66AD lodsw 2809 000013D9 66AB stosw ; original sample (R) 2810 000013DB 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2811 ;mov [previous_val_r], ax 2812 000013DE 89C3 mov ebx, eax 2813 ; 02/02/2025 2814 000013E0 668B06 mov ax, [esi] 2815 000013E3 668B5602 mov dx, [esi+2] 2816 ; 16/11/2023 2817 000013E7 49 dec ecx 2818 000013E8 7504 jnz short lff24s2_2 2819 000013EA 31D2 xor edx, edx 2820 000013EC 31C0 xor eax, eax 2821 lff24s2_2: 2822 000013EE 80C480 add ah, 80h ; convert sound level 0 to 65535 format 2823 ;;mov [next_val_l], ax 2824 ;mov ebp, eax 2825 000013F1 80C680 add dh, 80h ; convert sound level 0 to 65535 format 2826 ;mov [next_val_r], dx 2827 000013F4 660305[F5220000] add ax, [previous_val_l] 2828 000013FB 66D1D8 rcr ax, 1 2829 000013FE 80EC80 sub ah, 80h ; -32768 to +32767 format again 2830 00001401 66AB stosw ; this is interpolated sample (L) 2831 ;mov ax, [next_val_r] 2832 00001403 89D0 mov eax, edx 2833 ;add ax, [previous_val_r] 2834 00001405 6601D8 add ax, bx 2835 00001408 66D1D8 rcr ax, 1 2836 0000140B 80EC80 sub ah, 80h ; -32768 to +32767 format again 2837 0000140E 66AB stosw ; this is interpolated sample (R) 2838 2839 ; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 2840 00001410 09C9 or ecx, ecx 2841 00001412 75B6 jnz short lff24s2_1 2842 00001414 E91DF8FFFF jmp lff24_3 2843 2844 ; ..................... 2845 2846 load_32khz_mono_8_bit: 2847 ; 02/02/2025 2848 ; 15/11/2023 2849 00001419 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 2850 ; last of the file? 2851 00001420 7402 jz short lff32m_0 ; no 2852 00001422 F9 stc 2853 00001423 C3 retn 2854 2855 lff32m_0: 2856 ; 01/12/2024 2857 ; edi = audio buffer address 2858 00001424 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 2859 ;mov edx, [loadsize] 2860 2861 ; esi = buffer address 2862 ;; edx = buffer size 2863 2864 ; load file into memory 2865 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001429 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 0000142F 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001431 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001437 B803000000 <1> mov eax, %1 97 <1> 98 0000143C CD40 <1> int 40h 2866 0000143E 7247 jc short lff32m_7 ; error ! 2867 2868 ; 01/12/2024 2869 00001440 A3[14750000] mov [count], eax 2870 ;;; 2871 ; 07/12/2024 2872 ;mov edi, audio_buffer 2873 ;;; 2874 00001445 21C0 and eax, eax 2875 00001447 7505 jnz short lff32m_8 2876 00001449 E900F8FFFF jmp lff32_eof 2877 2878 lff32m_8: 2879 0000144E 89C1 mov ecx, eax ; byte count 2880 lff32m_1: 2881 00001450 AC lodsb 2882 ;mov [previous_val], al 2883 00001451 88C3 mov bl, al 2884 00001453 2C80 sub al, 80h 2885 00001455 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2886 00001459 66AB stosw ; original sample (left channel) 2887 0000145B 66AB stosw ; original sample (right channel) 2888 ;xor eax, eax 2889 ; 02/02/2025 2890 0000145D 8A06 mov al, [esi] 2891 0000145F 49 dec ecx 2892 00001460 7502 jnz short lff32m_2 2893 00001462 B080 mov al, 80h 2894 lff32m_2: 2895 ;;mov [next_val], al 2896 ;mov bh, al 2897 ;add al, [previous_val] 2898 00001464 00D8 add al, bl 2899 00001466 D0D8 rcr al, 1 2900 00001468 2C80 sub al, 80h 2901 0000146A 66C1E008 shl ax, 8 2902 0000146E 66AB stosw ; this is interpolated sample (L) 2903 00001470 66AB stosw ; this is interpolated sample (R) 2904 2905 ; different than 8-16-24 kHZ ! 2906 ; 'original-interpolated-original' trio samples 2907 00001472 E30E jecxz lff32m_3 2908 2909 00001474 AC lodsb 2910 00001475 2C80 sub al, 80h 2911 00001477 66C1E008 shl ax, 8 2912 0000147B 66AB stosw ; original sample (left channel) 2913 0000147D 66AB stosw ; original sample (right channel) 2914 2915 ; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK 2916 0000147F 49 dec ecx 2917 00001480 75CE jnz short lff32m_1 2918 lff32m_3: 2919 00001482 E9AFF7FFFF jmp lff32_3 2920 2921 lff32m_7: 2922 lff32s_7: 2923 00001487 E9CBF7FFFF jmp lff32_5 ; error 2924 2925 load_32khz_stereo_8_bit: 2926 ; 02/02/2025 2927 ; 15/11/2023 2928 0000148C F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 2929 ; last of the file? 2930 00001493 7402 jz short lff32s_0 ; no 2931 00001495 F9 stc 2932 00001496 C3 retn 2933 2934 lff32s_0: 2935 ; 01/12/2024 2936 ; edi = audio buffer address 2937 00001497 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 2938 ;mov edx, [loadsize] 2939 2940 ; esi = buffer address 2941 ;; edx = buffer size 2942 2943 ; load file into memory 2944 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000149C 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000014A2 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 000014A4 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000014AA B803000000 <1> mov eax, %1 97 <1> 98 000014AF CD40 <1> int 40h 2945 000014B1 72D4 jc short lff32s_7 ; error ! 2946 2947 ; 01/12/2024 2948 000014B3 A3[14750000] mov [count], eax 2949 ;;; 2950 ; 07/12/2024 2951 ;mov edi, audio_buffer 2952 ;;; 2953 000014B8 D1E8 shr eax, 1 2954 000014BA 7505 jnz short lff32s_8 2955 000014BC E98DF7FFFF jmp lff32_eof 2956 2957 lff32s_8: 2958 000014C1 89C1 mov ecx, eax ; word count 2959 lff32s_1: 2960 000014C3 AC lodsb 2961 000014C4 A2[F5220000] mov [previous_val_l], al 2962 000014C9 2C80 sub al, 80h 2963 000014CB 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2964 000014CF 66AB stosw ; original sample (L) 2965 000014D1 AC lodsb 2966 000014D2 A2[F7220000] mov [previous_val_r], al 2967 000014D7 2C80 sub al, 80h 2968 000014D9 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 2969 000014DD 66AB stosw ; original sample (R) 2970 2971 ;xor eax, eax 2972 ; 02/02/2025 2973 000014DF 668B06 mov ax, [esi] 2974 000014E2 49 dec ecx 2975 000014E3 7504 jnz short lff32s_2 2976 ; convert 8 bit sample to 16 bit sample 2977 000014E5 66B88080 mov ax, 8080h 2978 lff32s_2: 2979 ;;mov [next_val_l], al 2980 ;;mov [next_val_r], ah 2981 ;mov bx, ax 2982 000014E9 88E7 mov bh, ah 2983 000014EB 0205[F5220000] add al, [previous_val_l] 2984 000014F1 D0D8 rcr al, 1 2985 ;mov dl, al 2986 000014F3 2C80 sub al, 80h 2987 000014F5 66C1E008 shl ax, 8 2988 000014F9 66AB stosw ; this is interpolated sample (L) 2989 000014FB 88F8 mov al, bh ; [next_val_r] 2990 000014FD 0205[F7220000] add al, [previous_val_r] 2991 00001503 D0D8 rcr al, 1 2992 ;mov dh, al 2993 00001505 2C80 sub al, 80h 2994 00001507 66C1E008 shl ax, 8 2995 0000150B 66AB stosw ; this is interpolated sample (R) 2996 2997 ; different than 8-16-24 kHZ ! 2998 ; 'original-interpolated-original' trio samples 2999 0000150D E315 jecxz lff32s_3 3000 3001 0000150F AC lodsb 3002 00001510 2C80 sub al, 80h 3003 00001512 66C1E008 shl ax, 8 3004 00001516 66AB stosw ; original sample (left channel) 3005 3006 00001518 AC lodsb 3007 00001519 2C80 sub al, 80h 3008 0000151B 66C1E008 shl ax, 8 3009 0000151F 66AB stosw ; original sample (right channel) 3010 3011 ; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 3012 00001521 49 dec ecx 3013 00001522 759F jnz short lff32s_1 3014 lff32s_3: 3015 00001524 E90DF7FFFF jmp lff32_3 3016 3017 load_32khz_mono_16_bit: 3018 ; 02/02/2025 3019 ; 15/11/2023 3020 00001529 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 3021 ; last of the file? 3022 00001530 7402 jz short lff32m2_0 ; no 3023 00001532 F9 stc 3024 00001533 C3 retn 3025 3026 lff32m2_0: 3027 ; 01/12/2024 3028 ; edi = audio buffer address 3029 00001534 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 3030 ;mov edx, [loadsize] 3031 3032 ; esi = buffer address 3033 ;; edx = buffer size 3034 3035 ; load file into memory 3036 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001539 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 0000153F 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001541 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001547 B803000000 <1> mov eax, %1 97 <1> 98 0000154C CD40 <1> int 40h 3037 0000154E 7241 jc short lff32m2_7 ; error ! 3038 3039 ; 01/12/2024 3040 00001550 A3[14750000] mov [count], eax 3041 ;;; 3042 ; 07/12/2024 3043 ;mov edi, audio_buffer 3044 ;;; 3045 00001555 D1E8 shr eax, 1 3046 00001557 7505 jnz short lff32m2_8 3047 00001559 E9F0F6FFFF jmp lff32_eof 3048 3049 lff32m2_8: 3050 0000155E 89C1 mov ecx, eax ; word count 3051 lff32m2_1: 3052 00001560 66AD lodsw 3053 00001562 66AB stosw ; original sample (left channel) 3054 00001564 66AB stosw ; original sample (right channel) 3055 00001566 80C480 add ah, 80h ; convert sound level 0 to 65535 format 3056 ;mov [previous_val], ax 3057 ;mov ebx, eax 3058 ;xor eax, eax 3059 ; 02/02/2025 3060 ;mov ax, [esi] 3061 00001569 668B1E mov bx, [esi] 3062 0000156C 49 dec ecx 3063 0000156D 7502 jnz short lff32m2_2 3064 0000156F 31DB xor ebx, ebx 3065 lff32m2_2: 3066 ; 02/02/2025 3067 00001571 80C780 add bh, 80h ; convert sound level 0 to 65535 format 3068 ;add ah, 80h 3069 ;mov ebp, eax ; [next_val] 3070 ;add ax, [previous_val] 3071 ; ax = [previous_val] 3072 ; bx = [next_val] 3073 00001574 6601D8 add ax, bx 3074 00001577 66D1D8 rcr ax, 1 3075 0000157A 80EC80 sub ah, 80h ; -32768 to +32767 format again 3076 0000157D 66AB stosw ; this is interpolated sample (L) 3077 0000157F 66AB stosw ; this is interpolated sample (R) 3078 3079 ; different than 8-16-24 kHZ ! 3080 ; 'original-interpolated-original' trio samples 3081 00001581 E309 jecxz lff32m2_3 3082 3083 00001583 66AD lodsw 3084 00001585 66AB stosw ; original sample (left channel) 3085 00001587 66AB stosw ; original sample (right channel) 3086 3087 ; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK 3088 00001589 49 dec ecx 3089 0000158A 75D4 jnz short lff32m2_1 3090 lff32m2_3: 3091 0000158C E9A5F6FFFF jmp lff32_3 3092 3093 lff32m2_7: 3094 lff32s2_7: 3095 00001591 E9C1F6FFFF jmp lff32_5 ; error 3096 3097 load_32khz_stereo_16_bit: 3098 ; 02/02/2025 3099 ; 16/11/2023 3100 ; 15/11/2023 3101 00001596 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 3102 ; last of the file? 3103 0000159D 7402 jz short lff32s2_0 ; no 3104 0000159F F9 stc 3105 000015A0 C3 retn 3106 3107 lff32s2_0: 3108 ; 01/12/2024 3109 ; edi = audio buffer address 3110 000015A1 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 3111 ;mov edx, [loadsize] 3112 3113 ; esi = buffer address 3114 ;; edx = buffer size 3115 3116 ; load file into memory 3117 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000015A6 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000015AC 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 000015AE 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000015B4 B803000000 <1> mov eax, %1 97 <1> 98 000015B9 CD40 <1> int 40h 3118 000015BB 72D4 jc short lff32s2_7 ; error ! 3119 3120 ; 01/12/2024 3121 000015BD A3[14750000] mov [count], eax 3122 ;;; 3123 ; 07/12/2024 3124 ;mov edi, audio_buffer 3125 ;;; 3126 000015C2 C1E802 shr eax, 2 3127 000015C5 7505 jnz short lff32s2_8 3128 000015C7 E982F6FFFF jmp lff32_eof 3129 3130 lff32s2_8: 3131 000015CC 89C1 mov ecx, eax ; dword count 3132 lff32s2_1: 3133 000015CE 66AD lodsw 3134 000015D0 66AB stosw ; original sample (L) 3135 000015D2 80C480 add ah, 80h ; convert sound level 0 to 65535 format 3136 000015D5 66A3[F5220000] mov [previous_val_l], ax 3137 000015DB 66AD lodsw 3138 000015DD 66AB stosw ; original sample (R) 3139 000015DF 80C480 add ah, 80h ; convert sound level 0 to 65535 format 3140 ;mov [previous_val_r], ax 3141 000015E2 89C3 mov ebx, eax 3142 ; 02/02/2025 3143 000015E4 668B06 mov ax, [esi] 3144 000015E7 668B5602 mov dx, [esi+2] 3145 ; 16/11/2023 3146 000015EB 49 dec ecx 3147 000015EC 7504 jnz short lff32s2_2 3148 000015EE 31D2 xor edx, edx 3149 000015F0 31C0 xor eax, eax 3150 lff32s2_2: 3151 000015F2 80C480 add ah, 80h ; convert sound level 0 to 65535 format 3152 ;;mov [next_val_l], ax 3153 ;mov ebp, eax 3154 000015F5 80C680 add dh, 80h ; convert sound level 0 to 65535 format 3155 ;mov [next_val_r], dx 3156 000015F8 660305[F5220000] add ax, [previous_val_l] 3157 000015FF 66D1D8 rcr ax, 1 3158 00001602 80EC80 sub ah, 80h ; -32768 to +32767 format again 3159 00001605 66AB stosw ; this is interpolated sample (L) 3160 ;mov ax, [next_val_r] 3161 00001607 89D0 mov eax, edx 3162 ;add ax, [previous_val_r] 3163 00001609 6601D8 add ax, bx 3164 0000160C 66D1D8 rcr ax, 1 3165 0000160F 80EC80 sub ah, 80h ; -32768 to +32767 format again 3166 00001612 66AB stosw ; this is interpolated sample (R) 3167 3168 ; different than 8-16-24 kHZ ! 3169 ; 'original-interpolated-original' trio samples 3170 00001614 E30B jecxz lff32s2_3 3171 3172 00001616 66AD lodsw 3173 00001618 66AB stosw ; original sample (L) 3174 0000161A 66AD lodsw 3175 0000161C 66AB stosw ; original sample (R) 3176 3177 ; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 3178 0000161E 49 dec ecx 3179 0000161F 75AD jnz short lff32s2_1 3180 lff32s2_3: 3181 00001621 E910F6FFFF jmp lff32_3 3182 3183 ; ..................... 3184 3185 load_22khz_mono_8_bit: 3186 ; 02/02/2025 3187 ; 16/11/2023 3188 00001626 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 3189 ; last of the file? 3190 0000162D 7402 jz short lff22m_0 ; no 3191 0000162F F9 stc 3192 00001630 C3 retn 3193 3194 lff22m_0: 3195 ; 01/12/2024 3196 ; edi = audio buffer address 3197 00001631 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 3198 ;mov edx, [loadsize] 3199 3200 ; esi = buffer address 3201 ;; edx = buffer size 3202 3203 ; load file into memory 3204 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001636 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 0000163C 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 0000163E 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001644 B803000000 <1> mov eax, %1 97 <1> 98 00001649 CD40 <1> int 40h 3205 0000164B 725D jc short lff22m_7 ; error ! 3206 3207 ; 01/12/2024 3208 0000164D A3[14750000] mov [count], eax 3209 ;;; 3210 ; 07/12/2024 3211 ;mov edi, audio_buffer 3212 ;;; 3213 00001652 21C0 and eax, eax 3214 00001654 7505 jnz short lff22m_8 3215 00001656 E9F3F5FFFF jmp lff22_eof 3216 3217 lff22m_8: 3218 0000165B 89C1 mov ecx, eax ; byte count 3219 lff22m_9: 3220 0000165D BD05000000 mov ebp, 5 ; interpolation (one step) loop count 3221 00001662 C605[FD220000]03 mov byte [faz], 3 ; 3 steps/phases 3222 lff22m_1: 3223 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 3224 00001669 AC lodsb 3225 ; 02/02/2025 3226 0000166A 8A16 mov dl, [esi] 3227 0000166C 49 dec ecx 3228 0000166D 7502 jnz short lff22m_2_1 3229 0000166F B280 mov dl, 80h 3230 lff22m_2_1: 3231 ; al = [previous_val] 3232 ; dl = [next_val] 3233 00001671 E835070000 call interpolating_3_8bit_mono ; 1 of 17 3234 00001676 E32D jecxz lff22m_3 3235 lff22m_2_2: 3236 00001678 AC lodsb 3237 ; 02/02/2025 3238 00001679 8A16 mov dl, [esi] 3239 0000167B 49 dec ecx 3240 0000167C 7502 jnz short lff22m_2_3 3241 0000167E B280 mov dl, 80h 3242 lff22m_2_3: 3243 00001680 E8B0070000 call interpolating_2_8bit_mono ; 2 of 17 .. 6 of 17 3244 00001685 E31E jecxz lff22m_3 3245 00001687 4D dec ebp 3246 00001688 75EE jnz short lff22m_2_2 3247 3248 0000168A A0[FD220000] mov al, [faz] 3249 0000168F FEC8 dec al 3250 00001691 74CA jz short lff22m_9 3251 00001693 FE0D[FD220000] dec byte [faz] 3252 00001699 BD04000000 mov ebp, 4 3253 0000169E FEC8 dec al 3254 000016A0 75C7 jnz short lff22m_1 ; 3:2:2:2:2 ; 7-11 of 17 3255 000016A2 45 inc ebp ; 5 3256 000016A3 EBC4 jmp short lff22m_1 ; 3:2:2:2:2:2 ; 12-17 of 17 3257 3258 lff22m_3: 3259 lff22s_3: 3260 000016A5 E98CF5FFFF jmp lff22_3 ; padfill 3261 ; (put zeros in the remain words of the buffer) 3262 lff22m_7: 3263 lff22s_7: 3264 000016AA E9A8F5FFFF jmp lff22_5 ; error 3265 3266 load_22khz_stereo_8_bit: 3267 ; 02/02/2025 3268 ; 16/11/2023 3269 000016AF F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 3270 ; last of the file? 3271 000016B6 7402 jz short lff22s_0 ; no 3272 000016B8 F9 stc 3273 000016B9 C3 retn 3274 3275 lff22s_0: 3276 ; 01/12/2024 3277 ; edi = audio buffer address 3278 000016BA BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 3279 ;mov edx, [loadsize] 3280 3281 ; esi = buffer address 3282 ;; edx = buffer size 3283 3284 ; load file into memory 3285 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000016BF 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000016C5 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 000016C7 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000016CD B803000000 <1> mov eax, %1 97 <1> 98 000016D2 CD40 <1> int 40h 3286 000016D4 72D4 jc short lff22s_7 ; error ! 3287 3288 ; 01/12/2024 3289 000016D6 A3[14750000] mov [count], eax 3290 ;;; 3291 ; 07/12/2024 3292 ;mov edi, audio_buffer 3293 ;;; 3294 000016DB D1E8 shr eax, 1 3295 000016DD 7505 jnz short lff22s_8 3296 000016DF E96AF5FFFF jmp lff22_eof 3297 3298 lff22s_8: 3299 000016E4 89C1 mov ecx, eax ; word count 3300 lff22s_9: 3301 000016E6 BD05000000 mov ebp, 5 ; interpolation (one step) loop count 3302 000016EB C605[FD220000]03 mov byte [faz], 3 ; 3 steps/phase 3303 lff22s_1: 3304 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 3305 000016F2 66AD lodsw 3306 ; 02/02/2025 3307 000016F4 668B16 mov dx, [esi] 3308 000016F7 49 dec ecx 3309 000016F8 7504 jnz short lff22s_2_1 3310 000016FA 66BA8080 mov dx, 8080h 3311 lff22s_2_1: 3312 ; al = [previous_val_l] 3313 ; ah = [previous_val_r] 3314 ; dl = [next_val_l] 3315 ; dh = [next_val_r] 3316 000016FE E8DB060000 call interpolating_3_8bit_stereo ; 1 of 17 3317 00001703 E3A0 jecxz lff22s_3 3318 lff22s_2_2: 3319 00001705 66AD lodsw 3320 ; 02/02/2025 3321 00001707 668B16 mov dx, [esi] 3322 0000170A 49 dec ecx 3323 0000170B 7504 jnz short lff22s_2_3 3324 0000170D 66BA8080 mov dx, 8080h 3325 lff22s_2_3: 3326 00001711 E83C070000 call interpolating_2_8bit_stereo ; 2 of 17 .. 6 of 17 3327 00001716 E38D jecxz lff22s_3 3328 00001718 4D dec ebp 3329 00001719 75EA jnz short lff22s_2_2 3330 3331 0000171B A0[FD220000] mov al, [faz] 3332 00001720 FEC8 dec al 3333 00001722 74C2 jz short lff22s_9 3334 00001724 FE0D[FD220000] dec byte [faz] 3335 0000172A BD04000000 mov ebp, 4 3336 0000172F FEC8 dec al 3337 00001731 75BF jnz short lff22s_1 ; 3:2:2:2:2 ; 7-11 of 17 3338 00001733 45 inc ebp ; 5 3339 00001734 EBBC jmp short lff22s_1 ; 3:2:2:2:2:2 ; 12-17 of 17 3340 3341 load_22khz_mono_16_bit: 3342 ; 02/02/2025 3343 ; 16/11/2023 3344 00001736 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 3345 ; last of the file? 3346 0000173D 7402 jz short lff22m2_0 ; no 3347 0000173F F9 stc 3348 00001740 C3 retn 3349 3350 lff22m2_0: 3351 ; 01/12/2024 3352 ; edi = audio buffer address 3353 00001741 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 3354 ;mov edx, [loadsize] 3355 3356 ; esi = buffer address 3357 ;; edx = buffer size 3358 3359 ; load file into memory 3360 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001746 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 0000174C 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 0000174E 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001754 B803000000 <1> mov eax, %1 97 <1> 98 00001759 CD40 <1> int 40h 3361 0000175B 7261 jc short lff22m2_7 ; error ! 3362 3363 ; 01/12/2024 3364 0000175D A3[14750000] mov [count], eax 3365 ;;; 3366 ; 07/12/2024 3367 ;mov edi, audio_buffer 3368 ;;; 3369 00001762 D1E8 shr eax, 1 3370 00001764 7505 jnz short lff22m2_8 3371 00001766 E9E3F4FFFF jmp lff22_eof 3372 3373 lff22m2_8: 3374 0000176B 89C1 mov ecx, eax ; word count 3375 lff22m2_9: 3376 0000176D BD05000000 mov ebp, 5 ; interpolation (one step) loop count 3377 00001772 C605[FD220000]03 mov byte [faz], 3 ; 3 steps/phases 3378 lff22m2_1: 3379 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 3380 00001779 66AD lodsw 3381 ; 02/02/2025 3382 0000177B 668B16 mov dx, [esi] 3383 0000177E 49 dec ecx 3384 0000177F 7502 jnz short lff22m2_2_1 3385 00001781 31D2 xor edx, edx 3386 lff22m2_2_1: 3387 ; ax = [previous_val] 3388 ; dx = [next_val] 3389 00001783 E8FB060000 call interpolating_3_16bit_mono ; 1 of 17 3390 00001788 E32F jecxz lff22m2_3 3391 lff22m2_2_2: 3392 0000178A 66AD lodsw 3393 ; 02/02/2025 3394 0000178C 668B16 mov dx, [esi] 3395 0000178F 49 dec ecx 3396 00001790 7502 jnz short lff22m2_2_3 3397 00001792 31D2 xor edx, edx 3398 lff22m2_2_3: 3399 00001794 E87D070000 call interpolating_2_16bit_mono ; 2 of 17 .. 6 of 17 3400 00001799 E31E jecxz lff22m2_3 3401 0000179B 4D dec ebp 3402 0000179C 75EC jnz short lff22m2_2_2 3403 3404 0000179E A0[FD220000] mov al, [faz] 3405 000017A3 FEC8 dec al 3406 000017A5 74C6 jz short lff22m2_9 3407 000017A7 FE0D[FD220000] dec byte [faz] 3408 000017AD BD04000000 mov ebp, 4 3409 000017B2 FEC8 dec al 3410 000017B4 75C3 jnz short lff22m2_1 ; 3:2:2:2:2 ; 7-11 of 17 3411 000017B6 45 inc ebp ; 5 3412 000017B7 EBC0 jmp short lff22m2_1 ; 3:2:2:2:2:2 ; 12-17 of 17 3413 3414 lff22m2_3: 3415 lff22s2_3: 3416 000017B9 E978F4FFFF jmp lff22_3 ; padfill 3417 ; (put zeros in the remain words of the buffer) 3418 lff22m2_7: 3419 lff22s2_7: 3420 000017BE E994F4FFFF jmp lff22_5 ; error 3421 3422 load_22khz_stereo_16_bit: 3423 ; 16/11/2023 3424 000017C3 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 3425 ; last of the file? 3426 000017CA 7402 jz short lff22s2_0 ; no 3427 000017CC F9 stc 3428 000017CD C3 retn 3429 3430 lff22s2_0: 3431 ; 01/12/2024 3432 ; edi = audio buffer address 3433 000017CE BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 3434 ;mov edx, [loadsize] 3435 3436 ; esi = buffer address 3437 ;; edx = buffer size 3438 3439 ; load file into memory 3440 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000017D3 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000017D9 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 000017DB 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000017E1 B803000000 <1> mov eax, %1 97 <1> 98 000017E6 CD40 <1> int 40h 3441 000017E8 72D4 jc short lff22s2_7 ; error ! 3442 3443 ; 01/12/2024 3444 000017EA A3[14750000] mov [count], eax 3445 ;;; 3446 ; 07/12/2024 3447 ;mov edi, audio_buffer 3448 ;;; 3449 000017EF C1E802 shr eax, 2 ; dword (left chan word + right chan word) 3450 000017F2 7505 jnz short lff22s2_8 3451 000017F4 E955F4FFFF jmp lff22_eof 3452 3453 lff22s2_8: 3454 000017F9 89C1 mov ecx, eax ; dword count 3455 lff22s2_9: 3456 000017FB BD05000000 mov ebp, 5 ; interpolation (one step) loop count 3457 00001800 C605[FD220000]03 mov byte [faz], 3 ; 3 steps/phase 3458 lff22s2_1: 3459 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 3460 00001807 66AD lodsw 3461 00001809 89C3 mov ebx, eax 3462 0000180B 66AD lodsw 3463 0000180D 8B16 mov edx, [esi] 3464 0000180F 668915[F9220000] mov [next_val_l], dx 3465 ; 26/11/2023 3466 00001816 C1EA10 shr edx, 16 3467 00001819 49 dec ecx 3468 0000181A 7509 jnz short lff22s2_2_1 3469 0000181C 31D2 xor edx, edx ; 0 3470 0000181E 668915[F9220000] mov [next_val_l], dx 3471 lff22s2_2_1: 3472 ; bx = [previous_val_l] 3473 ; ax = [previous_val_r] 3474 ; [next_val_l] 3475 ; dx = [next_val_r] 3476 00001825 E889060000 call interpolating_3_16bit_stereo ; 1 of 17 3477 0000182A E38D jecxz lff22s2_3 3478 lff22s2_2_2: 3479 0000182C 66AD lodsw 3480 0000182E 89C3 mov ebx, eax 3481 00001830 66AD lodsw 3482 00001832 8B16 mov edx, [esi] 3483 00001834 668915[F9220000] mov [next_val_l], dx 3484 ; 26/11/2023 3485 0000183B C1EA10 shr edx, 16 3486 0000183E 49 dec ecx 3487 0000183F 7509 jnz short lff22s2_2_3 3488 00001841 31D2 xor edx, edx ; 0 3489 00001843 668915[F9220000] mov [next_val_l], dx 3490 lff22s2_2_3: 3491 0000184A E8DF060000 call interpolating_2_16bit_stereo ; 2 of 17 .. 6 of 17 3492 0000184F E31E jecxz lff22s2_2_4 3493 3494 00001851 4D dec ebp 3495 00001852 75D8 jnz short lff22s2_2_2 3496 3497 00001854 A0[FD220000] mov al, [faz] 3498 00001859 FEC8 dec al 3499 0000185B 749E jz short lff22s2_9 3500 0000185D FE0D[FD220000] dec byte [faz] 3501 00001863 BD04000000 mov ebp, 4 3502 00001868 FEC8 dec al 3503 0000186A 759B jnz short lff22s2_1 ; 3:2:2:2:2 ; 7-11 of 17 3504 0000186C 45 inc ebp ; 5 3505 0000186D EB98 jmp short lff22s2_1 ; 3:2:2:2:2:2 ; 12-17 of 17 3506 3507 lff22s2_2_4: 3508 ; 26/11/2023 3509 0000186F E9C2F3FFFF jmp lff22_3 ; padfill 3510 3511 ; ..................... 3512 3513 load_11khz_mono_8_bit: 3514 ; 02/02/2025 3515 ; 18/11/2023 3516 00001874 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 3517 ; last of the file? 3518 0000187B 7402 jz short lff11m_0 ; no 3519 0000187D F9 stc 3520 0000187E C3 retn 3521 3522 lff11m_0: 3523 ; 01/12/2024 3524 ; edi = audio buffer address 3525 0000187F BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 3526 ;mov edx, [loadsize] 3527 3528 ; esi = buffer address 3529 ;; edx = buffer size 3530 3531 ; load file into memory 3532 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001884 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 0000188A 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 0000188C 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001892 B803000000 <1> mov eax, %1 97 <1> 98 00001897 CD40 <1> int 40h 3533 00001899 7247 jc short lff11m_7 ; error ! 3534 3535 ; 01/12/2024 3536 0000189B A3[14750000] mov [count], eax 3537 ;;; 3538 ; 07/12/2024 3539 ;mov edi, audio_buffer 3540 ;;; 3541 000018A0 21C0 and eax, eax 3542 000018A2 7505 jnz short lff11m_8 3543 000018A4 E9A5F3FFFF jmp lff11_eof 3544 3545 lff11m_8: 3546 000018A9 89C1 mov ecx, eax ; byte count 3547 lff11m_9: 3548 000018AB BD06000000 mov ebp, 6 ; interpolation (one step) loop count 3549 lff11m_1: 3550 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 3551 000018B0 AC lodsb 3552 ; 02/02/2025 3553 000018B1 8A16 mov dl, [esi] 3554 000018B3 49 dec ecx 3555 000018B4 7502 jnz short lff11m_2_1 3556 000018B6 B280 mov dl, 80h 3557 lff11m_2_1: 3558 ; al = [previous_val] 3559 ; dl = [next_val] 3560 000018B8 E8A0060000 call interpolating_5_8bit_mono 3561 000018BD E328 jecxz lff11m_3 3562 lff11m_2_2: 3563 000018BF AC lodsb 3564 ; 02/02/2025 3565 000018C0 8A16 mov dl, [esi] 3566 000018C2 49 dec ecx 3567 000018C3 7502 jnz short lff11m_2_3 3568 000018C5 B280 mov dl, 80h 3569 lff11m_2_3: 3570 000018C7 E89D070000 call interpolating_4_8bit_mono 3571 000018CC E319 jecxz lff11m_3 3572 3573 000018CE 4D dec ebp 3574 000018CF 74DA jz short lff11m_9 3575 3576 000018D1 AC lodsb 3577 ; 02/02/2025 3578 000018D2 8A16 mov dl, [esi] 3579 000018D4 49 dec ecx 3580 000018D5 7502 jnz short lff11m_2_4 3581 000018D7 B280 mov dl, 80h 3582 lff11m_2_4: 3583 000018D9 E88B070000 call interpolating_4_8bit_mono 3584 000018DE E307 jecxz lff11m_3 3585 000018E0 EBCE jmp short lff11m_1 3586 3587 lff11m_7: 3588 lff11s_7: 3589 000018E2 E970F3FFFF jmp lff11_5 ; error 3590 3591 lff11m_3: 3592 lff11s_3: 3593 000018E7 E94AF3FFFF jmp lff11_3 ; padfill 3594 ; (put zeros in the remain words of the buffer) 3595 3596 load_11khz_stereo_8_bit: 3597 ; 02/02/2025 3598 ; 18/11/2023 3599 000018EC F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 3600 ; last of the file? 3601 000018F3 7402 jz short lff11s_0 ; no 3602 000018F5 F9 stc 3603 000018F6 C3 retn 3604 3605 lff11s_0: 3606 ; 01/12/2024 3607 ; edi = audio buffer address 3608 000018F7 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 3609 ;mov edx, [loadsize] 3610 3611 ; esi = buffer address 3612 ;; edx = buffer size 3613 3614 ; load file into memory 3615 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000018FC 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00001902 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001904 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000190A B803000000 <1> mov eax, %1 97 <1> 98 0000190F CD40 <1> int 40h 3616 00001911 72CF jc short lff11s_7 ; error ! 3617 3618 ; 01/12/2024 3619 00001913 A3[14750000] mov [count], eax 3620 ;;; 3621 ; 07/12/2024 3622 ;mov edi, audio_buffer 3623 ;;; 3624 00001918 D1E8 shr eax, 1 3625 0000191A 7505 jnz short lff11s_8 3626 0000191C E92DF3FFFF jmp lff11_eof 3627 3628 lff11s_8: 3629 00001921 89C1 mov ecx, eax ; word count 3630 lff11s_9: 3631 00001923 BD06000000 mov ebp, 6 ; interpolation (one step) loop count 3632 lff11s_1: 3633 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 3634 00001928 66AD lodsw 3635 ; 02/02/2025 3636 0000192A 668B16 mov dx, [esi] 3637 0000192D 49 dec ecx 3638 0000192E 7504 jnz short lff11s_2_1 3639 00001930 66BA8080 mov dx, 8080h 3640 lff11s_2_1: 3641 ; al = [previous_val_l] 3642 ; ah = [previous_val_r] 3643 ; dl = [next_val_l] 3644 ; dh = [next_val_r] 3645 00001934 E883060000 call interpolating_5_8bit_stereo 3646 00001939 E3AC jecxz lff11s_3 3647 lff11s_2_2: 3648 0000193B 66AD lodsw 3649 ; 02/02/2025 3650 0000193D 668B16 mov dx, [esi] 3651 00001940 49 dec ecx 3652 00001941 7504 jnz short lff11s_2_3 3653 00001943 66BA8080 mov dx, 8080h 3654 lff11s_2_3: 3655 00001947 E85C070000 call interpolating_4_8bit_stereo 3656 0000194C E399 jecxz lff11s_3 3657 3658 0000194E 4D dec ebp 3659 0000194F 74D2 jz short lff11s_9 3660 3661 00001951 66AD lodsw 3662 ; 02/02/2025 3663 00001953 668B16 mov dx, [esi] 3664 00001956 49 dec ecx 3665 00001957 7504 jnz short lff11s_2_4 3666 00001959 66BA8080 mov dx, 8080h 3667 lff11s_2_4: 3668 0000195D E846070000 call interpolating_4_8bit_stereo 3669 00001962 E383 jecxz lff11s_3 3670 00001964 EBC2 jmp short lff11s_1 3671 3672 load_11khz_mono_16_bit: 3673 ; 02/02/2025 3674 ; 18/11/2023 3675 00001966 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 3676 ; last of the file? 3677 0000196D 7402 jz short lff11m2_0 ; no 3678 0000196F F9 stc 3679 00001970 C3 retn 3680 3681 lff11m2_0: 3682 ; 01/12/2024 3683 ; edi = audio buffer address 3684 00001971 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 3685 ;mov edx, [loadsize] 3686 3687 ; esi = buffer address 3688 ;; edx = buffer size 3689 3690 ; load file into memory 3691 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001976 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 0000197C 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 0000197E 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001984 B803000000 <1> mov eax, %1 97 <1> 98 00001989 CD40 <1> int 40h 3692 0000198B 724D jc short lff11m2_7 ; error ! 3693 3694 ; 01/12/2024 3695 0000198D A3[14750000] mov [count], eax 3696 ;;; 3697 ; 07/12/2024 3698 ;mov edi, audio_buffer 3699 ;;; 3700 00001992 D1E8 shr eax, 1 3701 00001994 7505 jnz short lff11m2_8 3702 00001996 E9B3F2FFFF jmp lff11_eof 3703 3704 lff11m2_8: 3705 0000199B 89C1 mov ecx, eax ; word count 3706 lff11m2_9: 3707 0000199D BD06000000 mov ebp, 6 ; interpolation (one step) loop count 3708 lff11m2_1: 3709 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 3710 000019A2 66AD lodsw 3711 ; 02/02/2025 3712 000019A4 668B16 mov dx, [esi] 3713 000019A7 49 dec ecx 3714 000019A8 7502 jnz short lff11m2_2_1 3715 000019AA 31D2 xor edx, edx 3716 lff11m2_2_1: 3717 ; ax = [previous_val] 3718 ; dx = [next_val] 3719 000019AC E864070000 call interpolating_5_16bit_mono 3720 000019B1 E362 jecxz lff11m2_3 3721 lff11m2_2_2: 3722 000019B3 66AD lodsw 3723 ; 02/02/2025 3724 000019B5 668B16 mov dx, [esi] 3725 000019B8 49 dec ecx 3726 000019B9 7502 jnz short lff11m2_2_3 3727 000019BB 31D2 xor edx, edx 3728 lff11m2_2_3: 3729 000019BD E87D080000 call interpolating_4_16bit_mono 3730 000019C2 E351 jecxz lff11m2_3 3731 3732 000019C4 4D dec ebp 3733 000019C5 74D6 jz short lff11m2_9 3734 3735 000019C7 66AD lodsw 3736 ; 02/02/2025 3737 000019C9 668B16 mov dx, [esi] 3738 000019CC 49 dec ecx 3739 000019CD 7502 jnz short lff11m2_2_4 3740 000019CF 31D2 xor edx, edx 3741 lff11m2_2_4: 3742 000019D1 E869080000 call interpolating_4_16bit_mono 3743 000019D6 E33D jecxz lff11m2_3 3744 000019D8 EBC8 jmp short lff11m2_1 3745 3746 lff11m2_7: 3747 lff11s2_7: 3748 000019DA E978F2FFFF jmp lff11_5 ; error 3749 3750 load_11khz_stereo_16_bit: 3751 ; 17/01/2025 3752 ; 18/11/2023 3753 000019DF F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 3754 ; last of the file? 3755 000019E6 7402 jz short lff11s2_0 ; no 3756 000019E8 F9 stc 3757 000019E9 C3 retn 3758 3759 lff11s2_0: 3760 ; 01/12/2024 3761 ; edi = audio buffer address 3762 000019EA BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 3763 ;mov edx, [loadsize] 3764 3765 ; esi = buffer address 3766 ;; edx = buffer size 3767 3768 ; load file into memory 3769 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 000019EF 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 000019F5 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 000019F7 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 000019FD B803000000 <1> mov eax, %1 97 <1> 98 00001A02 CD40 <1> int 40h 3770 00001A04 72D4 jc short lff11s2_7 ; error ! 3771 3772 ; 01/12/2024 3773 00001A06 A3[14750000] mov [count], eax 3774 ;;; 3775 ; 07/12/2024 3776 ;mov edi, audio_buffer 3777 ;;; 3778 00001A0B C1E802 shr eax, 2 ; dword (left chan word + right chan word) 3779 00001A0E 750A jnz short lff11s2_8 3780 00001A10 E939F2FFFF jmp lff11_eof 3781 3782 lff11m2_3: 3783 lff11s2_3: 3784 00001A15 E91CF2FFFF jmp lff11_3 ; padfill 3785 ; (put zeros in the remain words of the buffer) 3786 3787 lff11s2_8: 3788 00001A1A 89C1 mov ecx, eax ; dword count 3789 lff11s2_9: 3790 00001A1C BD06000000 mov ebp, 6 ; interpolation (one step) loop count 3791 lff11s2_1: 3792 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 3793 00001A21 66AD lodsw 3794 00001A23 89C3 mov ebx, eax 3795 00001A25 66AD lodsw 3796 00001A27 8B16 mov edx, [esi] 3797 ; 17/01/2025 3798 ;mov [next_val_l], edx 3799 ; 26/11/2023 3800 ;shr edx, 16 3801 ;mov [next_val_r], dx 3802 00001A29 49 dec ecx 3803 00001A2A 7502 jnz short lff11s2_2_1 3804 00001A2C 31D2 xor edx, edx ; 0 3805 ;mov [next_val_l], dx 3806 ;mov [next_val_r], dx 3807 lff11s2_2_1: 3808 ; bx = [previous_val_l] 3809 ; ax = [previous_val_r] 3810 ; [next_val_l] 3811 ; dx = [next_val_r] 3812 ;;; 3813 ; 17/01/2025 (BugFix) 3814 00001A2E 8915[F9220000] mov [next_val_l], edx 3815 ;;; 3816 00001A34 E837070000 call interpolating_5_16bit_stereo 3817 00001A39 E3DA jecxz lff11s2_3 3818 lff11s2_2_2: 3819 00001A3B 66AD lodsw 3820 00001A3D 89C3 mov ebx, eax 3821 00001A3F 66AD lodsw 3822 00001A41 8B16 mov edx, [esi] 3823 ; 17/01/2025 3824 ;mov [next_val_l], dx 3825 ; 26/11/2023 3826 ;shr edx, 16 3827 ;mov [next_val_r], dx 3828 00001A43 49 dec ecx 3829 00001A44 7502 jnz short lff11s2_2_3 3830 00001A46 31D2 xor edx, edx ; 0 3831 ;mov [next_val_l], dx 3832 ;mov [next_val_r], dx 3833 lff11s2_2_3: 3834 ;;; 3835 ; 17/01/2025 (BugFix) 3836 00001A48 8915[F9220000] mov [next_val_l], edx 3837 ;;; 3838 00001A4E E825080000 call interpolating_4_16bit_stereo 3839 00001A53 E3C0 jecxz lff11s2_3 3840 3841 00001A55 4D dec ebp 3842 00001A56 74C4 jz short lff11s2_9 3843 3844 00001A58 66AD lodsw 3845 00001A5A 89C3 mov ebx, eax 3846 00001A5C 66AD lodsw 3847 00001A5E 8B16 mov edx, [esi] 3848 ; 17/01/2025 3849 ;mov [next_val_l], dx 3850 ; 26/11/2023 3851 ;shr edx, 16 3852 ;mov [next_val_r], dx 3853 00001A60 49 dec ecx 3854 00001A61 7502 jnz short lff11s2_2_4 3855 00001A63 31D2 xor edx, edx ; 0 3856 ;mov [next_val_l], dx 3857 ;mov [next_val_r], dx 3858 lff11s2_2_4: 3859 ;;; 3860 ; 17/01/2025 (BugFix) 3861 00001A65 8915[F9220000] mov [next_val_l], edx 3862 ;;; 3863 00001A6B E808080000 call interpolating_4_16bit_stereo 3864 00001A70 E3A3 jecxz lff11s2_3 3865 00001A72 EBAD jmp short lff11s2_1 3866 3867 ; ..................... 3868 3869 load_44khz_mono_8_bit: 3870 ; 02/02/2025 3871 ; 18/11/2023 3872 00001A74 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 3873 ; last of the file? 3874 00001A7B 7402 jz short lff44m_0 ; no 3875 00001A7D F9 stc 3876 00001A7E C3 retn 3877 3878 lff44m_0: 3879 ; 01/12/2024 3880 ; edi = audio buffer address 3881 00001A7F BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 3882 ;mov edx, [loadsize] 3883 3884 ; esi = buffer address 3885 ;; edx = buffer size 3886 3887 ; load file into memory 3888 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001A84 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00001A8A 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001A8C 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001A92 B803000000 <1> mov eax, %1 97 <1> 98 00001A97 CD40 <1> int 40h 3889 00001A99 7250 jc short lff44m_7 ; error ! 3890 3891 ; 01/12/2024 3892 00001A9B A3[14750000] mov [count], eax 3893 ;;; 3894 ; 07/12/2024 3895 ;mov edi, audio_buffer 3896 ;;; 3897 00001AA0 21C0 and eax, eax 3898 00001AA2 7505 jnz short lff44m_8 3899 00001AA4 E9A5F1FFFF jmp lff44_eof 3900 3901 lff44m_8: 3902 00001AA9 89C1 mov ecx, eax ; byte count 3903 lff44m_9: 3904 00001AAB BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 3905 00001AB0 C605[FD220000]02 mov byte [faz], 2 ; 2 steps/phases 3906 lff44m_1: 3907 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 3908 ; 2:1:1:1:1:1:1:1:1:1:1:1 3909 00001AB7 AC lodsb 3910 ; 02/02/2025 3911 00001AB8 8A16 mov dl, [esi] 3912 00001ABA 49 dec ecx 3913 00001ABB 7502 jnz short lff44m_2_1 3914 00001ABD B280 mov dl, 80h 3915 lff44m_2_1: 3916 ; al = [previous_val] 3917 ; dl = [next_val] 3918 00001ABF E871030000 call interpolating_2_8bit_mono 3919 00001AC4 E320 jecxz lff44m_3 3920 lff44m_2_2: 3921 00001AC6 AC lodsb 3922 00001AC7 2C80 sub al, 80h 3923 00001AC9 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 3924 00001ACD 66AB stosw ; (L) 3925 00001ACF 66AB stosw ; (R) 3926 3927 00001AD1 49 dec ecx 3928 00001AD2 7412 jz short lff44m_3 3929 00001AD4 4D dec ebp 3930 00001AD5 75EF jnz short lff44m_2_2 3931 3932 00001AD7 FE0D[FD220000] dec byte [faz] 3933 00001ADD 74CC jz short lff44m_9 3934 00001ADF BD0B000000 mov ebp, 11 3935 00001AE4 EBD1 jmp short lff44m_1 3936 3937 lff44m_3: 3938 lff44s_3: 3939 00001AE6 E94BF1FFFF jmp lff44_3 ; padfill 3940 ; (put zeros in the remain words of the buffer) 3941 lff44m_7: 3942 lff44s_7: 3943 00001AEB E967F1FFFF jmp lff44_5 ; error 3944 3945 load_44khz_stereo_8_bit: 3946 ; 02/02/2025 3947 ; 16/11/2023 3948 00001AF0 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 3949 ; last of the file? 3950 00001AF7 7402 jz short lff44s_0 ; no 3951 00001AF9 F9 stc 3952 00001AFA C3 retn 3953 3954 lff44s_0: 3955 ; 01/12/2024 3956 ; edi = audio buffer address 3957 00001AFB BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 3958 ;mov edx, [loadsize] 3959 3960 ; esi = buffer address 3961 ;; edx = buffer size 3962 3963 ; load file into memory 3964 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001B00 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00001B06 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001B08 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001B0E B803000000 <1> mov eax, %1 97 <1> 98 00001B13 CD40 <1> int 40h 3965 00001B15 72D4 jc short lff44s_7 ; error ! 3966 3967 ; 01/12/2024 3968 00001B17 A3[14750000] mov [count], eax 3969 ;;; 3970 ; 07/12/2024 3971 ;mov edi, audio_buffer 3972 ;;; 3973 00001B1C D1E8 shr eax, 1 3974 00001B1E 7505 jnz short lff44s_8 3975 00001B20 E929F1FFFF jmp lff44_eof 3976 3977 lff44s_8: 3978 00001B25 89C1 mov ecx, eax ; word count 3979 lff44s_9: 3980 00001B27 BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 3981 00001B2C C605[FD220000]02 mov byte [faz], 2 ; 2 steps/phase 3982 lff44s_1: 3983 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 3984 ; 2:1:1:1:1:1:1:1:1:1:1:1 3985 00001B33 66AD lodsw 3986 ; 02/02/2025 3987 00001B35 668B16 mov dx, [esi] 3988 00001B38 49 dec ecx 3989 00001B39 7504 jnz short lff44s_2_1 3990 00001B3B 66BA8080 mov dx, 8080h 3991 lff44s_2_1: 3992 ; al = [previous_val_l] 3993 ; ah = [previous_val_r] 3994 ; dl = [next_val_l] 3995 ; dh = [next_val_r] 3996 00001B3F E80E030000 call interpolating_2_8bit_stereo 3997 00001B44 E3A0 jecxz lff44s_3 3998 lff44s_2_2: 3999 00001B46 AC lodsb 4000 00001B47 2C80 sub al, 80h 4001 00001B49 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4002 00001B4D 66AB stosw ; (L) 4003 00001B4F AC lodsb 4004 00001B50 2C80 sub al, 80h 4005 00001B52 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4006 00001B56 66AB stosw ; (R) 4007 4008 00001B58 49 dec ecx 4009 00001B59 748B jz short lff44s_3 4010 00001B5B 4D dec ebp 4011 00001B5C 75E8 jnz short lff44s_2_2 4012 4013 00001B5E FE0D[FD220000] dec byte [faz] 4014 00001B64 74C1 jz short lff44s_9 4015 00001B66 BD0B000000 mov ebp, 11 4016 00001B6B EBC6 jmp short lff44s_1 4017 4018 load_44khz_mono_16_bit: 4019 ; 02/02/2025 4020 ; 18/11/2023 4021 00001B6D F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 4022 ; last of the file? 4023 00001B74 7402 jz short lff44m2_0 ; no 4024 00001B76 F9 stc 4025 00001B77 C3 retn 4026 4027 lff44m2_0: 4028 ; 01/12/2024 4029 ; edi = audio buffer address 4030 00001B78 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 4031 ;mov edx, [loadsize] 4032 4033 ; esi = buffer address 4034 ;; edx = buffer size 4035 4036 ; load file into memory 4037 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001B7D 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00001B83 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001B85 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001B8B B803000000 <1> mov eax, %1 97 <1> 98 00001B90 CD40 <1> int 40h 4038 00001B92 724D jc short lff44m2_7 ; error ! 4039 4040 ; 01/12/2024 4041 00001B94 A3[14750000] mov [count], eax 4042 ;;; 4043 ; 07/12/2024 4044 ;mov edi, audio_buffer 4045 ;;; 4046 00001B99 D1E8 shr eax, 1 4047 00001B9B 7505 jnz short lff44m2_8 4048 00001B9D E9ACF0FFFF jmp lff44_eof 4049 4050 lff44m2_8: 4051 00001BA2 89C1 mov ecx, eax ; word count 4052 lff44m2_9: 4053 00001BA4 BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 4054 00001BA9 C605[FD220000]02 mov byte [faz], 2 ; 2 steps/phases 4055 lff44m2_1: 4056 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 4057 ; 2:1:1:1:1:1:1:1:1:1:1:1 4058 00001BB0 66AD lodsw 4059 ; 02/02/2025 4060 00001BB2 668B16 mov dx, [esi] 4061 00001BB5 49 dec ecx 4062 00001BB6 7502 jnz short lff44m2_2_1 4063 00001BB8 31D2 xor edx, edx 4064 lff44m2_2_1: 4065 ; ax = [previous_val] 4066 ; dx = [next_val] 4067 00001BBA E857030000 call interpolating_2_16bit_mono 4068 00001BBF E31B jecxz lff44m2_3 4069 lff44m2_2_2: 4070 00001BC1 66AD lodsw 4071 00001BC3 66AB stosw ; (L)eft Channel 4072 00001BC5 66AB stosw ; (R)ight Channel 4073 4074 00001BC7 49 dec ecx 4075 00001BC8 7412 jz short lff44m2_3 4076 00001BCA 4D dec ebp 4077 00001BCB 75F4 jnz short lff44m2_2_2 4078 4079 00001BCD FE0D[FD220000] dec byte [faz] 4080 00001BD3 74CF jz short lff44m2_9 4081 00001BD5 BD0B000000 mov ebp, 11 4082 00001BDA EBD4 jmp short lff44m2_1 4083 4084 lff44m2_3: 4085 lff44s2_3: 4086 00001BDC E955F0FFFF jmp lff44_3 ; padfill 4087 ; (put zeros in the remain words of the buffer) 4088 lff44m2_7: 4089 lff44s2_7: 4090 00001BE1 E971F0FFFF jmp lff44_5 ; error 4091 4092 load_44khz_stereo_16_bit: 4093 ; 18/11/2023 4094 00001BE6 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 4095 ; last of the file? 4096 00001BED 7402 jz short lff44s2_0 ; no 4097 00001BEF F9 stc 4098 00001BF0 C3 retn 4099 4100 lff44s2_0: 4101 ; 01/12/2024 4102 ; edi = audio buffer address 4103 00001BF1 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 4104 ;mov edx, [loadsize] 4105 4106 ; esi = buffer address 4107 ;; edx = buffer size 4108 4109 ; load file into memory 4110 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001BF6 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00001BFC 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001BFE 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001C04 B803000000 <1> mov eax, %1 97 <1> 98 00001C09 CD40 <1> int 40h 4111 00001C0B 72D4 jc short lff44s2_7 ; error ! 4112 4113 ; 01/12/2024 4114 00001C0D A3[14750000] mov [count], eax 4115 ;;; 4116 ; 07/12/2024 4117 ;mov edi, audio_buffer 4118 ;;; 4119 00001C12 C1E802 shr eax, 2 ; dword (left chan word + right chan word) 4120 00001C15 7505 jnz short lff44s2_8 4121 00001C17 E932F0FFFF jmp lff44_eof 4122 4123 lff44s2_8: 4124 00001C1C 89C1 mov ecx, eax ; dword count 4125 lff44s2_9: 4126 00001C1E BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 4127 00001C23 C605[FD220000]02 mov byte [faz], 2 ; 2 steps/phase 4128 lff44s2_1: 4129 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 4130 ; 2:1:1:1:1:1:1:1:1:1:1:1 4131 00001C2A 66AD lodsw 4132 00001C2C 89C3 mov ebx, eax 4133 00001C2E 66AD lodsw 4134 ;mov dx, [esi] 4135 ;mov [next_val_l], dx 4136 ;mov dx, [esi+2] 4137 ; 26/11/2023 4138 00001C30 8B16 mov edx, [esi] 4139 00001C32 668915[F9220000] mov [next_val_l], dx 4140 00001C39 C1EA10 shr edx, 16 4141 00001C3C 49 dec ecx 4142 00001C3D 7509 jnz short lff44s2_2_1 4143 00001C3F 31D2 xor edx, edx ; 0 4144 00001C41 668915[F9220000] mov [next_val_l], dx 4145 lff44s2_2_1: 4146 ; bx = [previous_val_l] 4147 ; ax = [previous_val_r] 4148 ; [next_val_l] 4149 ; dx = [next_val_r] 4150 00001C48 E8E1020000 call interpolating_2_16bit_stereo 4151 00001C4D E38D jecxz lff44s2_3 4152 lff44s2_2_2: 4153 ;movsw ; (L)eft Channel 4154 ;movsw ; (R)ight Channel 4155 00001C4F A5 movsd 4156 4157 00001C50 49 dec ecx 4158 00001C51 7489 jz short lff44s2_3 4159 00001C53 4D dec ebp 4160 00001C54 75F9 jnz short lff44s2_2_2 4161 4162 00001C56 FE0D[FD220000] dec byte [faz] 4163 00001C5C 74C0 jz short lff44s2_9 4164 00001C5E BD0B000000 mov ebp, 11 4165 00001C63 EBC5 jmp short lff44s2_1 4166 4167 ; ..................... 4168 4169 ; 02/02/2025 4170 load_12khz_mono_8_bit: 4171 00001C65 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 4172 ; last of the file? 4173 00001C6C 7402 jz short lff12m_0 ; no 4174 00001C6E F9 stc 4175 00001C6F C3 retn 4176 4177 lff12m_0: 4178 ; edi = audio buffer address 4179 00001C70 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 4180 4181 ; load file into memory 4182 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001C75 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00001C7B 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001C7D 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001C83 B803000000 <1> mov eax, %1 97 <1> 98 00001C88 CD40 <1> int 40h 4183 00001C8A 7256 jc short lff12m_7 ; error ! 4184 4185 00001C8C A3[14750000] mov [count], eax 4186 4187 00001C91 21C0 and eax, eax 4188 00001C93 7505 jnz short lff12m_8 4189 00001C95 E9B4EFFFFF jmp lff12_eof 4190 4191 lff12m_8: 4192 00001C9A 89C1 mov ecx, eax ; byte count 4193 lff12m_1: 4194 ; original-interpolated-interpolated-interpolated 4195 00001C9C AC lodsb 4196 ; 02/02/2025 4197 00001C9D 8A16 mov dl, [esi] 4198 00001C9F 49 dec ecx 4199 00001CA0 7502 jnz short lff12m_2 4200 00001CA2 B280 mov dl, 80h 4201 lff12m_2: 4202 ; al = [previous_val] 4203 ; dl = [next_val] 4204 00001CA4 E8C0030000 call interpolating_4_8bit_mono 4205 00001CA9 E353 jecxz lff12m_3 4206 00001CAB EBEF jmp short lff12m_1 4207 4208 ; 02/02/2025 4209 load_12khz_stereo_8_bit: 4210 00001CAD F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 4211 ; last of the file? 4212 00001CB4 7402 jz short lff12s_0 ; no 4213 00001CB6 F9 stc 4214 00001CB7 C3 retn 4215 4216 lff12s_0: 4217 ; edi = audio buffer address 4218 00001CB8 BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 4219 4220 ; load file into memory 4221 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001CBD 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00001CC3 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001CC5 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001CCB B803000000 <1> mov eax, %1 97 <1> 98 00001CD0 CD40 <1> int 40h 4222 00001CD2 720E jc short lff12s_7 ; error ! 4223 4224 00001CD4 A3[14750000] mov [count], eax 4225 4226 00001CD9 D1E8 shr eax, 1 4227 00001CDB 750A jnz short lff12s_8 4228 00001CDD E96CEFFFFF jmp lff12_eof 4229 4230 lff12m_7: 4231 lff12s_7: 4232 00001CE2 E970EFFFFF jmp lff12_5 ; error 4233 4234 lff12s_8: 4235 00001CE7 89C1 mov ecx, eax ; word count 4236 lff12s_1: 4237 ; original-interpolated-interpolated-interpolated 4238 00001CE9 66AD lodsw 4239 ; 02/02/2025 4240 00001CEB 668B16 mov dx, [esi] 4241 00001CEE 49 dec ecx 4242 00001CEF 7504 jnz short lff12s_2 4243 00001CF1 66BA8080 mov dx, 8080h 4244 lff12s_2: 4245 ; al = [previous_val_l] 4246 ; ah = [previous_val_r] 4247 ; dl = [next_val_l] 4248 ; dh = [next_val_r] 4249 00001CF5 E8AE030000 call interpolating_4_8bit_stereo 4250 00001CFA E302 jecxz lff12s_3 4251 00001CFC EBEB jmp short lff12s_1 4252 4253 lff12m_3: 4254 lff12s_3: 4255 00001CFE E933EFFFFF jmp lff12_3 ; padfill 4256 ; (put zeros in the remain words of the buffer) 4257 4258 ; 02/02/2025 4259 load_12khz_mono_16_bit: 4260 00001D03 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 4261 ; last of the file? 4262 00001D0A 7402 jz short lff12m2_0 ; no 4263 00001D0C F9 stc 4264 00001D0D C3 retn 4265 4266 lff12m2_0: 4267 ; edi = audio buffer address 4268 00001D0E BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 4269 4270 ; load file into memory 4271 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001D13 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00001D19 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001D1B 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001D21 B803000000 <1> mov eax, %1 97 <1> 98 00001D26 CD40 <1> int 40h 4272 00001D28 7223 jc short lff12m2_7 ; error ! 4273 4274 00001D2A A3[14750000] mov [count], eax 4275 4276 00001D2F D1E8 shr eax, 1 4277 00001D31 7505 jnz short lff12m2_8 4278 00001D33 E916EFFFFF jmp lff12_eof 4279 4280 lff12m2_8: 4281 00001D38 89C1 mov ecx, eax ; word count 4282 lff12m2_1: 4283 ; original-interpolated-interpolated-interpolated 4284 00001D3A 66AD lodsw 4285 ; 02/02/2025 4286 00001D3C 668B16 mov dx, [esi] 4287 00001D3F 49 dec ecx 4288 00001D40 7502 jnz short lff12m2_2 4289 00001D42 31D2 xor edx, edx 4290 lff12m2_2: 4291 ; ax = [previous_val] 4292 ; dx = [next_val] 4293 00001D44 E8F6040000 call interpolating_4_16bit_mono 4294 00001D49 E3B3 jecxz lff12m_3 4295 00001D4B EBED jmp short lff12m2_1 4296 4297 lff12m2_7: 4298 lff12s2_7: 4299 00001D4D E905EFFFFF jmp lff12_5 ; error 4300 4301 ; 02/02/2025 4302 load_12khz_stereo_16_bit: 4303 00001D52 F605[9A740000]01 test byte [flags], ENDOFFILE ; have we already read the 4304 ; last of the file? 4305 00001D59 7402 jz short lff12s2_0 ; no 4306 00001D5B F9 stc 4307 00001D5C C3 retn 4308 4309 lff12s2_0: 4310 ; edi = audio buffer address 4311 00001D5D BE[00800100] mov esi, temp_buffer ; temporary buffer for wav data 4312 4313 ; load file into memory 4314 sys _read, [filehandle], esi, [loadsize] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00001D62 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00001D68 89F1 <1> mov ecx, %3 91 <1> %if %0 = 4 92 00001D6A 8B15[04750000] <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00001D70 B803000000 <1> mov eax, %1 97 <1> 98 00001D75 CD40 <1> int 40h 4315 00001D77 72D4 jc short lff12s2_7 ; error ! 4316 4317 00001D79 A3[14750000] mov [count], eax 4318 4319 00001D7E C1E802 shr eax, 2 ; dword (left chan word + right chan word) 4320 00001D81 750A jnz short lff12s2_8 4321 00001D83 E9C6EEFFFF jmp lff12_eof 4322 4323 lff12m2_3: 4324 lff12s2_3: 4325 00001D88 E9A9EEFFFF jmp lff12_3 ; padfill 4326 ; (put zeros in the remain words of the buffer) 4327 4328 lff12s2_8: 4329 00001D8D 89C1 mov ecx, eax ; dword count 4330 lff12s2_1: 4331 ; original-interpolated-interpolated-interpolated 4332 00001D8F 66AD lodsw 4333 00001D91 89C3 mov ebx, eax 4334 00001D93 66AD lodsw 4335 00001D95 8B16 mov edx, [esi] 4336 00001D97 49 dec ecx 4337 00001D98 7502 jnz short lff12s2_2 4338 00001D9A 31D2 xor edx, edx ; 0 4339 lff12s2_2: 4340 ;mov [next_val_l], dx 4341 ;shr edx, 16 4342 ;mov [next_val_r], dx 4343 ; 02/02/2025 4344 00001D9C 8915[F9220000] mov [next_val_l], edx 4345 4346 ; bx = [previous_val_l] 4347 ; ax = [previous_val_r] 4348 ; [next_val_l] 4349 ; [next_val_r] 4350 00001DA2 E8D1040000 call interpolating_4_16bit_stereo 4351 00001DA7 E3DF jecxz lff12s2_3 4352 00001DA9 EBE4 jmp short lff12s2_1 4353 4354 ; ..................... 4355 4356 interpolating_3_8bit_mono: 4357 ; 02/02/2025 4358 ; 16/11/2023 4359 ; al = [previous_val] 4360 ; dl = [next_val] 4361 ; original-interpolated-interpolated 4362 00001DAB 88C3 mov bl, al 4363 00001DAD 2C80 sub al, 80h 4364 00001DAF 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4365 00001DB3 66AB stosw ; original sample (L) 4366 00001DB5 66AB stosw ; original sample (R) 4367 00001DB7 88D8 mov al, bl 4368 00001DB9 00D0 add al, dl 4369 00001DBB D0D8 rcr al, 1 4370 00001DBD 88C7 mov bh, al ; interpolated middle (temporary) 4371 00001DBF 00D8 add al, bl 4372 00001DC1 D0D8 rcr al, 1 4373 00001DC3 2C80 sub al, 80h 4374 00001DC5 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4375 00001DC9 66AB stosw ; interpolated sample 1 (L) 4376 00001DCB 66AB stosw ; interpolated sample 1 (R) 4377 00001DCD 88F8 mov al, bh 4378 00001DCF 00D0 add al, dl ; [next_val] 4379 00001DD1 D0D8 rcr al, 1 4380 ; 02/02/2025 4381 00001DD3 2C80 sub al, 80h 4382 00001DD5 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4383 00001DD9 66AB stosw ; interpolated sample 2 (L) 4384 00001DDB 66AB stosw ; interpolated sample 2 (R) 4385 00001DDD C3 retn 4386 4387 interpolating_3_8bit_stereo: 4388 ; 02/02/2025 4389 ; 16/11/2023 4390 ; al = [previous_val_l] 4391 ; ah = [previous_val_r] 4392 ; dl = [next_val_l] 4393 ; dh = [next_val_r] 4394 ; original-interpolated-interpolated 4395 00001DDE 89C3 mov ebx, eax 4396 00001DE0 2C80 sub al, 80h 4397 00001DE2 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4398 00001DE6 66AB stosw ; original sample (L) 4399 00001DE8 88F8 mov al, bh 4400 00001DEA 2C80 sub al, 80h 4401 00001DEC 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4402 00001DF0 66AB stosw ; original sample (R) 4403 00001DF2 88D8 mov al, bl 4404 00001DF4 00D0 add al, dl ; [next_val_l] 4405 00001DF6 D0D8 rcr al, 1 4406 00001DF8 50 push eax ; * ; al = interpolated middle (L) (temporary) 4407 00001DF9 00D8 add al, bl ; [previous_val_l] 4408 00001DFB D0D8 rcr al, 1 4409 00001DFD 2C80 sub al, 80h 4410 00001DFF 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4411 00001E03 66AB stosw ; interpolated sample 1 (L) 4412 00001E05 88F8 mov al, bh 4413 00001E07 00F0 add al, dh ; [next_val_r] 4414 00001E09 D0D8 rcr al, 1 4415 00001E0B 50 push eax ; ** ; al = interpolated middle (R) (temporary) 4416 00001E0C 00F8 add al, bh ; [previous_val_r] 4417 00001E0E D0D8 rcr al, 1 4418 00001E10 2C80 sub al, 80h 4419 00001E12 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4420 00001E16 66AB stosw ; interpolated sample 1 (R) 4421 00001E18 5B pop ebx ; ** 4422 00001E19 58 pop eax ; * 4423 00001E1A 00D0 add al, dl ; [next_val_l] 4424 00001E1C D0D8 rcr al, 1 4425 ; 02/02/2025 4426 00001E1E 2C80 sub al, 80h 4427 00001E20 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4428 00001E24 66AB stosw ; interpolated sample 2 (L) 4429 00001E26 88D8 mov al, bl 4430 00001E28 00F0 add al, dh ; [next_val_r] 4431 00001E2A D0D8 rcr al, 1 4432 ; 02/02/2025 4433 00001E2C 2C80 sub al, 80h 4434 00001E2E 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4435 00001E32 66AB stosw ; interpolated sample 2 (R) 4436 00001E34 C3 retn 4437 4438 interpolating_2_8bit_mono: 4439 ; 16/11/2023 4440 ; al = [previous_val] 4441 ; dl = [next_val] 4442 ; original-interpolated 4443 00001E35 88C3 mov bl, al 4444 00001E37 2C80 sub al, 80h 4445 00001E39 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4446 00001E3D 66AB stosw ; original sample (L) 4447 00001E3F 66AB stosw ; original sample (R) 4448 00001E41 88D8 mov al, bl 4449 00001E43 00D0 add al, dl 4450 00001E45 D0D8 rcr al, 1 4451 00001E47 2C80 sub al, 80h 4452 00001E49 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4453 00001E4D 66AB stosw ; interpolated sample (L) 4454 00001E4F 66AB stosw ; interpolated sample (R) 4455 00001E51 C3 retn 4456 4457 interpolating_2_8bit_stereo: 4458 ; 16/11/2023 4459 ; al = [previous_val_l] 4460 ; ah = [previous_val_r] 4461 ; dl = [next_val_l] 4462 ; dh = [next_val_r] 4463 ; original-interpolated 4464 00001E52 89C3 mov ebx, eax 4465 00001E54 2C80 sub al, 80h 4466 00001E56 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4467 00001E5A 66AB stosw ; original sample (L) 4468 00001E5C 88F8 mov al, bh 4469 00001E5E 2C80 sub al, 80h 4470 00001E60 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4471 00001E64 66AB stosw ; original sample (R) 4472 00001E66 88D8 mov al, bl ; [previous_val_l] 4473 00001E68 00D0 add al, dl ; [next_val_l] 4474 00001E6A D0D8 rcr al, 1 4475 00001E6C 2C80 sub al, 80h 4476 00001E6E 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4477 00001E72 66AB stosw ; interpolated sample (L) 4478 00001E74 88F8 mov al, bh 4479 00001E76 00F0 add al, dh ; [next_val_r] 4480 00001E78 D0D8 rcr al, 1 4481 00001E7A 2C80 sub al, 80h 4482 00001E7C 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4483 00001E80 66AB stosw ; interpolated sample (R) 4484 00001E82 C3 retn 4485 4486 interpolating_3_16bit_mono: 4487 ; 16/11/2023 4488 ; ax = [previous_val] 4489 ; dx = [next_val] 4490 ; original-interpolated-interpolated 4491 4492 00001E83 66AB stosw ; original sample (L) 4493 00001E85 66AB stosw ; original sample (R) 4494 00001E87 80C480 add ah, 80h ; convert sound level 0 to 65535 format 4495 00001E8A 50 push eax ; * ; [previous_val] 4496 00001E8B 80C680 add dh, 80h 4497 00001E8E 6601D0 add ax, dx 4498 00001E91 66D1D8 rcr ax, 1 4499 00001E94 5B pop ebx ; * 4500 00001E95 93 xchg ebx, eax ; bx = interpolated middle (temporary) 4501 00001E96 6601D8 add ax, bx ; [previous_val] + interpolated middle 4502 00001E99 66D1D8 rcr ax, 1 4503 00001E9C 80EC80 sub ah, 80h ; -32768 to +32767 format again 4504 00001E9F 66AB stosw ; interpolated sample 1 (L) 4505 00001EA1 66AB stosw ; interpolated sample 1 (R) 4506 00001EA3 89D8 mov eax, ebx 4507 00001EA5 6601D0 add ax, dx ; interpolated middle + [next_val] 4508 00001EA8 66D1D8 rcr ax, 1 4509 00001EAB 80EC80 sub ah, 80h ; -32768 to +32767 format again 4510 00001EAE 66AB stosw ; interpolated sample 2 (L) 4511 00001EB0 66AB stosw ; interpolated sample 2 (R) 4512 00001EB2 C3 retn 4513 4514 interpolating_3_16bit_stereo: 4515 ; 16/11/2023 4516 ; bx = [previous_val_l] 4517 ; ax = [previous_val_r] 4518 ; [next_val_l] 4519 ; dx = [next_val_r] 4520 ; original-interpolated-interpolated 4521 4522 00001EB3 93 xchg eax, ebx 4523 00001EB4 66AB stosw ; original sample (L) 4524 00001EB6 93 xchg eax, ebx 4525 00001EB7 66AB stosw ; original sample (R) 4526 00001EB9 80C480 add ah, 80h ; convert sound level 0 to 65535 format 4527 00001EBC 50 push eax ; * ; [previous_val_r] 4528 00001EBD 80C780 add bh, 80h 4529 00001EC0 8005[FA220000]80 add byte [next_val_l+1], 80h 4530 00001EC7 66A1[F9220000] mov ax, [next_val_l] 4531 00001ECD 6601D8 add ax, bx ; [previous_val_l] 4532 00001ED0 66D1D8 rcr ax, 1 4533 00001ED3 93 xchg eax, ebx ; ax = [previous_val_l] 4534 00001ED4 6601D8 add ax, bx ; bx = interpolated middle (L) 4535 00001ED7 66D1D8 rcr ax, 1 4536 00001EDA 80EC80 sub ah, 80h ; -32768 to +32767 format again 4537 00001EDD 66AB stosw ; interpolated sample 1 (L) 4538 00001EDF 58 pop eax ; * 4539 00001EE0 80C680 add dh, 80h ; convert sound level 0 to 65535 format 4540 00001EE3 52 push edx ; * ; [next_val_r] 4541 00001EE4 92 xchg eax, edx 4542 00001EE5 6601D0 add ax, dx ; [next_val_r] + [previous_val_r] 4543 00001EE8 66D1D8 rcr ax, 1 ; / 2 4544 00001EEB 50 push eax ; ** ; interpolated middle (R) 4545 00001EEC 6601D0 add ax, dx ; + [previous_val_r] 4546 00001EEF 66D1D8 rcr ax, 1 4547 00001EF2 80EC80 sub ah, 80h ; -32768 to +32767 format again 4548 00001EF5 66AB stosw ; interpolated sample 1 (R) 4549 00001EF7 66A1[F9220000] mov ax, [next_val_l] 4550 00001EFD 6601D8 add ax, bx ; + interpolated middle (L) 4551 00001F00 66D1D8 rcr ax, 1 4552 00001F03 80EC80 sub ah, 80h ; -32768 to +32767 format again 4553 00001F06 66AB stosw ; interpolated sample 2 (L) 4554 00001F08 58 pop eax ; ** 4555 00001F09 5A pop edx ; * 4556 00001F0A 6601D0 add ax, dx ; interpolated middle + [next_val_r] 4557 00001F0D 66D1D8 rcr ax, 1 ; / 2 4558 00001F10 80EC80 sub ah, 80h ; -32768 to +32767 format again 4559 00001F13 66AB stosw ; interpolated sample 2 (L) 4560 00001F15 C3 retn 4561 4562 interpolating_2_16bit_mono: 4563 ; 16/11/2023 4564 ; ax = [previous_val] 4565 ; dx = [next_val] 4566 ; original-interpolated 4567 4568 00001F16 66AB stosw ; original sample (L) 4569 00001F18 66AB stosw ; original sample (R) 4570 00001F1A 80C480 add ah, 80h ; convert sound level 0 to 65535 format 4571 00001F1D 80C680 add dh, 80h 4572 00001F20 6601D0 add ax, dx 4573 00001F23 66D1D8 rcr ax, 1 4574 00001F26 80EC80 sub ah, 80h ; -32768 to +32767 format again 4575 00001F29 66AB stosw ; interpolated sample (L) 4576 00001F2B 66AB stosw ; interpolated sample (R) 4577 00001F2D C3 retn 4578 4579 interpolating_2_16bit_stereo: 4580 ; 17/01/2025 4581 ; 16/11/2023 4582 ; bx = [previous_val_l] 4583 ; ax = [previous_val_r] 4584 ; [next_val_l] 4585 ; dx = [next_val_r] 4586 ; original-interpolated 4587 4588 00001F2E 93 xchg eax, ebx 4589 00001F2F 66AB stosw ; original sample (L) 4590 00001F31 93 xchg eax, ebx 4591 00001F32 66AB stosw ; original sample (R) 4592 00001F34 80C480 add ah, 80h ; convert sound level 0 to 65535 format 4593 00001F37 80C680 add dh, 80h 4594 00001F3A 6601D0 add ax, dx ; [previous_val_r] + [next_val_r] 4595 00001F3D 66D1D8 rcr ax, 1 ; / 2 4596 ; 17/01/2025 4597 00001F40 80EC80 sub ah, 80h ; -32768 to +32767 format again 4598 ;push eax ; * ; interpolated sample (R) 4599 ; 17/01/2025 4600 00001F43 C1E010 shl eax, 16 4601 00001F46 66A1[F9220000] mov ax, [next_val_l] 4602 00001F4C 80C480 add ah, 80h 4603 00001F4F 80C780 add bh, 80h 4604 00001F52 6601D8 add ax, bx ; [next_val_l] + [previous_val_l] 4605 00001F55 66D1D8 rcr ax, 1 ; / 2 4606 00001F58 80EC80 sub ah, 80h ; -32768 to +32767 format again 4607 ; 17/01/2025 4608 ;stosw ; interpolated sample (L) 4609 ;pop eax ; * 4610 ;sub ah, 80h ; -32768 to +32767 format again 4611 ;stosw ; interpolated sample (R) 4612 ; 17/01/2025 4613 00001F5B AB stosd 4614 00001F5C C3 retn 4615 4616 interpolating_5_8bit_mono: 4617 ; 17/11/2023 4618 ; al = [previous_val] 4619 ; dl = [next_val] 4620 ; original-interpltd-interpltd-interpltd-interpltd 4621 00001F5D 88C3 mov bl, al 4622 00001F5F 2C80 sub al, 80h 4623 00001F61 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4624 00001F65 66AB stosw ; original sample (L) 4625 00001F67 66AB stosw ; original sample (R) 4626 00001F69 88D8 mov al, bl 4627 00001F6B 00D0 add al, dl 4628 00001F6D D0D8 rcr al, 1 4629 00001F6F 88C7 mov bh, al ; interpolated middle (temporary) 4630 00001F71 00D8 add al, bl ; [previous_val] 4631 00001F73 D0D8 rcr al, 1 4632 00001F75 88C6 mov dh, al ; interpolated 1st quarter (temporary) 4633 00001F77 00D8 add al, bl 4634 00001F79 D0D8 rcr al, 1 4635 00001F7B 2C80 sub al, 80h 4636 00001F7D 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4637 00001F81 66AB stosw ; interpolated sample 1 (L) 4638 00001F83 66AB stosw ; interpolated sample 1 (R) 4639 00001F85 88F8 mov al, bh 4640 00001F87 00F0 add al, dh 4641 00001F89 D0D8 rcr al, 1 4642 00001F8B 2C80 sub al, 80h 4643 00001F8D 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4644 00001F91 66AB stosw ; interpolated sample 2 (L) 4645 00001F93 66AB stosw ; interpolated sample 2 (R) 4646 00001F95 88F8 mov al, bh 4647 00001F97 00D0 add al, dl ; [next_val] 4648 00001F99 D0D8 rcr al, 1 4649 00001F9B 88C6 mov dh, al ; interpolated 3rd quarter (temporary) 4650 00001F9D 00F8 add al, bh 4651 00001F9F D0D8 rcr al, 1 4652 00001FA1 2C80 sub al, 80h 4653 00001FA3 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4654 00001FA7 66AB stosw ; interpolated sample 3 (L) 4655 00001FA9 66AB stosw ; interpolated sample 3 (R) 4656 00001FAB 88F0 mov al, dh 4657 00001FAD 00D0 add al, dl 4658 00001FAF D0D8 rcr al, 1 4659 00001FB1 2C80 sub al, 80h 4660 00001FB3 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4661 00001FB7 66AB stosw ; interpolated sample 4 (L) 4662 00001FB9 66AB stosw ; interpolated sample 4 (R) 4663 00001FBB C3 retn 4664 4665 interpolating_5_8bit_stereo: 4666 ; 17/11/2023 4667 ; al = [previous_val_l] 4668 ; ah = [previous_val_r] 4669 ; dl = [next_val_l] 4670 ; dh = [next_val_r] 4671 ; original-interpltd-interpltd-interpltd-interpltd 4672 00001FBC 89C3 mov ebx, eax 4673 00001FBE 2C80 sub al, 80h 4674 00001FC0 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4675 00001FC4 66AB stosw ; original sample (L) 4676 00001FC6 88F8 mov al, bh 4677 00001FC8 2C80 sub al, 80h 4678 00001FCA 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4679 00001FCE 66AB stosw ; original sample (R) 4680 00001FD0 52 push edx ; * 4681 00001FD1 88D8 mov al, bl 4682 00001FD3 00D0 add al, dl ; [next_val_l] 4683 00001FD5 D0D8 rcr al, 1 4684 00001FD7 50 push eax ; ** ; al = interpolated middle (L) (temporary) 4685 00001FD8 00D8 add al, bl ; [previous_val_l] 4686 00001FDA D0D8 rcr al, 1 4687 00001FDC 86D8 xchg al, bl 4688 00001FDE 00D8 add al, bl ; bl = interpolated 1st quarter (L) (temp) 4689 00001FE0 D0D8 rcr al, 1 4690 00001FE2 2C80 sub al, 80h 4691 00001FE4 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4692 00001FE8 66AB stosw ; interpolated sample 1 (L) 4693 00001FEA 88F8 mov al, bh 4694 00001FEC 00F0 add al, dh ; [next_val_r] 4695 00001FEE D0D8 rcr al, 1 4696 00001FF0 50 push eax ; *** ; al = interpolated middle (R) (temporary) 4697 00001FF1 00F8 add al, bh ; [previous_val_r] 4698 00001FF3 D0D8 rcr al, 1 4699 00001FF5 86F8 xchg al, bh 4700 00001FF7 00F8 add al, bh ; bh = interpolated 1st quarter (R) (temp) 4701 00001FF9 D0D8 rcr al, 1 4702 00001FFB 2C80 sub al, 80h 4703 00001FFD 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4704 00002001 66AB stosw ; interpolated sample 1 (R) 4705 00002003 5A pop edx ; *** 4706 00002004 58 pop eax ; ** ; al = interpolated middle (L) (temporary) 4707 00002005 86D8 xchg al, bl ; al = interpolated 1st quarter (L) (temp) 4708 00002007 00D8 add al, bl ; bl = interpolated middle (L) (temporary) 4709 00002009 D0D8 rcr al, 1 4710 0000200B 2C80 sub al, 80h 4711 0000200D 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4712 00002011 66AB stosw ; interpolated sample 2 (L) 4713 00002013 88D0 mov al, dl ; interpolated middle (R) (temporary) 4714 00002015 86F8 xchg al, bh ; al = interpolated 1st quarter (R) (temp) 4715 00002017 00F8 add al, bh ; bh = interpolated middle (R) (temporary) 4716 00002019 D0D8 rcr al, 1 4717 0000201B 2C80 sub al, 80h 4718 0000201D 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4719 00002021 66AB stosw ; interpolated sample 2 (R) 4720 00002023 5A pop edx ; * 4721 00002024 88D8 mov al, bl ; interpolated middle (L) (temporary) 4722 00002026 00D0 add al, dl ; [next_val_l] 4723 00002028 D0D8 rcr al, 1 4724 0000202A 86D8 xchg al, bl ; al = interpolated middle (R) (temporary) 4725 0000202C 00D8 add al, bl ; bl = interpolated 3rd quarter (L) (temp) 4726 0000202E D0D8 rcr al, 1 4727 00002030 2C80 sub al, 80h 4728 00002032 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4729 00002036 66AB stosw ; interpolated sample 3 (L) 4730 00002038 88F8 mov al, bh 4731 0000203A 00F0 add al, dh ; interpolated middle (R) + [next_val_r] 4732 0000203C D0D8 rcr al, 1 4733 0000203E 86F8 xchg al, bh ; al = interpolated middle (R) 4734 00002040 00F8 add al, bh ; bh = interpolated 3rd quarter (R) (temp) 4735 00002042 D0D8 rcr al, 1 4736 00002044 2C80 sub al, 80h 4737 00002046 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4738 0000204A 66AB stosw ; interpolated sample 3 (R) 4739 0000204C 88D8 mov al, bl 4740 0000204E 00D0 add al, dl ; [next_val_l] 4741 00002050 D0D8 rcr al, 1 4742 00002052 2C80 sub al, 80h 4743 00002054 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4744 00002058 66AB stosw ; interpolated sample 4 (L) 4745 0000205A 88F8 mov al, bh 4746 0000205C 00F0 add al, dh ; [next_val_r] 4747 0000205E D0D8 rcr al, 1 4748 00002060 2C80 sub al, 80h 4749 00002062 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4750 00002066 66AB stosw ; interpolated sample 4 (R) 4751 00002068 C3 retn 4752 4753 interpolating_4_8bit_mono: 4754 ; 17/11/2023 4755 ; al = [previous_val] 4756 ; dl = [next_val] 4757 ; original-interpolated-interpolated-interpolated 4758 00002069 88C3 mov bl, al 4759 0000206B 2C80 sub al, 80h 4760 0000206D 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4761 00002071 66AB stosw ; original sample (L) 4762 00002073 66AB stosw ; original sample (R) 4763 00002075 88D8 mov al, bl 4764 00002077 00D0 add al, dl 4765 00002079 D0D8 rcr al, 1 4766 0000207B 86D8 xchg al, bl ; al = [previous_val] 4767 0000207D 00D8 add al, bl ; bl = interpolated middle (sample 2) 4768 0000207F D0D8 rcr al, 1 4769 00002081 2C80 sub al, 80h 4770 00002083 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4771 00002087 66AB stosw ; interpolated sample 1 (L) 4772 00002089 66AB stosw ; interpolated sample 1 (R) 4773 0000208B 88D8 mov al, bl ; interpolated middle (sample 2) 4774 0000208D 2C80 sub al, 80h 4775 0000208F 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4776 00002093 66AB stosw ; interpolated sample 2 (L) 4777 00002095 66AB stosw ; interpolated sample 2 (R) 4778 00002097 88D8 mov al, bl 4779 00002099 00D0 add al, dl ; [next_val] 4780 0000209B D0D8 rcr al, 1 4781 0000209D 2C80 sub al, 80h 4782 0000209F 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4783 000020A3 66AB stosw ; interpolated sample 3 (L) 4784 000020A5 66AB stosw ; interpolated sample 3 (R) 4785 000020A7 C3 retn 4786 4787 interpolating_4_8bit_stereo: 4788 ; 17/11/2023 4789 ; al = [previous_val_l] 4790 ; ah = [previous_val_r] 4791 ; dl = [next_val_l] 4792 ; dh = [next_val_r] 4793 ; original-interpolated-interpolated-interpolated 4794 000020A8 89C3 mov ebx, eax 4795 000020AA 2C80 sub al, 80h 4796 000020AC 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4797 000020B0 66AB stosw ; original sample (L) 4798 000020B2 88F8 mov al, bh 4799 000020B4 2C80 sub al, 80h 4800 000020B6 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4801 000020BA 66AB stosw ; original sample (R) 4802 000020BC 88D8 mov al, bl 4803 000020BE 00D0 add al, dl ; [next_val_l] 4804 000020C0 D0D8 rcr al, 1 4805 000020C2 86D8 xchg al, bl ; al = [previous_val_l] 4806 000020C4 00D8 add al, bl ; bl = interpolated middle (L) (sample 2) 4807 000020C6 D0D8 rcr al, 1 4808 000020C8 2C80 sub al, 80h 4809 000020CA 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4810 000020CE 66AB stosw ; interpolated sample 1 (L) 4811 000020D0 88F8 mov al, bh 4812 000020D2 00F0 add al, dh ; [next_val_r] 4813 000020D4 D0D8 rcr al, 1 4814 000020D6 86F8 xchg al, bh ; al = [previous_val_h] 4815 000020D8 00F8 add al, bh ; bh = interpolated middle (R) (sample 2) 4816 000020DA D0D8 rcr al, 1 4817 000020DC 2C80 sub al, 80h 4818 000020DE 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4819 000020E2 66AB stosw ; interpolated sample 1 (R) 4820 000020E4 88D8 mov al, bl ; interpolated middle (L) (sample 2) 4821 000020E6 2C80 sub al, 80h 4822 000020E8 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4823 000020EC 66AB stosw ; interpolated sample 2 (L) 4824 000020EE 88F8 mov al, bh ; interpolated middle (L) (sample 2) 4825 000020F0 2C80 sub al, 80h 4826 000020F2 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4827 000020F6 66AB stosw ; interpolated sample 2 (L) 4828 000020F8 88D8 mov al, bl 4829 000020FA 00D0 add al, dl ; [next_val_l] 4830 000020FC D0D8 rcr al, 1 4831 000020FE 2C80 sub al, 80h 4832 00002100 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4833 00002104 66AB stosw ; interpolated sample 3 (L) 4834 00002106 88F8 mov al, bh 4835 00002108 00F0 add al, dh ; [next_val_r] 4836 0000210A D0D8 rcr al, 1 4837 0000210C 2C80 sub al, 80h 4838 0000210E 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 4839 00002112 66AB stosw ; interpolated sample 3 (R) 4840 00002114 C3 retn 4841 4842 interpolating_5_16bit_mono: 4843 ; 18/11/2023 4844 ; ax = [previous_val] 4845 ; dx = [next_val] 4846 ; original-interpltd-interpltd-interpltd-interpltd 4847 00002115 66AB stosw ; original sample (L) 4848 00002117 66AB stosw ; original sample (R) 4849 00002119 80C480 add ah, 80h ; convert sound level 0 to 65535 format 4850 0000211C 89C3 mov ebx, eax ; [previous_val] 4851 0000211E 80C680 add dh, 80h 4852 00002121 6601D0 add ax, dx 4853 00002124 66D1D8 rcr ax, 1 4854 00002127 50 push eax ; * ; interpolated middle (temporary) 4855 00002128 6601D8 add ax, bx ; interpolated middle + [previous_val] 4856 0000212B 66D1D8 rcr ax, 1 4857 0000212E 50 push eax ; ** ; interpolated 1st quarter (temporary) 4858 0000212F 6601D8 add ax, bx ; 1st quarter + [previous_val] 4859 00002132 66D1D8 rcr ax, 1 4860 00002135 80EC80 sub ah, 80h ; -32768 to +32767 format again 4861 00002138 66AB stosw ; interpolated sample 1 (L) 4862 0000213A 66AB stosw ; interpolated sample 1 (R) 4863 0000213C 58 pop eax ; ** 4864 0000213D 5B pop ebx ; * 4865 0000213E 6601D8 add ax, bx ; 1st quarter + middle 4866 00002141 66D1D8 rcr ax, 1 ; / 2 4867 00002144 80EC80 sub ah, 80h ; -32768 to +32767 format again 4868 00002147 66AB stosw ; interpolated sample 2 (L) 4869 00002149 66AB stosw ; interpolated sample 2 (R) 4870 0000214B 89D8 mov eax, ebx 4871 0000214D 6601D0 add ax, dx ; interpolated middle + [next_val] 4872 00002150 66D1D8 rcr ax, 1 4873 00002153 50 push eax ; * ; interpolated 3rd quarter (temporary) 4874 00002154 6601D8 add ax, bx ; + interpolated middle 4875 00002157 66D1D8 rcr ax, 1 4876 0000215A 80EC80 sub ah, 80h ; -32768 to +32767 format again 4877 0000215D 66AB stosw ; interpolated sample 3 (L) 4878 0000215F 66AB stosw ; interpolated sample 3 (R) 4879 00002161 58 pop eax ; * 4880 00002162 6601D0 add ax, dx ; 3rd quarter + [next_val] 4881 00002165 66D1D8 rcr ax, 1 ; / 2 4882 00002168 80EC80 sub ah, 80h ; -32768 to +32767 format again 4883 0000216B 66AB stosw ; interpolated sample 4 (L) 4884 0000216D 66AB stosw ; interpolated sample 4 (R) 4885 0000216F C3 retn 4886 4887 interpolating_5_16bit_stereo: 4888 ; 18/11/2023 4889 ; bx = [previous_val_l] 4890 ; ax = [previous_val_r] 4891 ; [next_val_l] 4892 ; [next_val_r] 4893 ; original-interpltd-interpltd-interpltd-interpltd 4894 00002170 51 push ecx ; ! 4895 00002171 93 xchg eax, ebx 4896 00002172 66AB stosw ; original sample (L) 4897 00002174 93 xchg eax, ebx 4898 00002175 66AB stosw ; original sample (R) 4899 00002177 80C480 add ah, 80h ; convert sound level 0 to 65535 format 4900 0000217A 50 push eax ; * ; [previous_val_r] 4901 0000217B 80C780 add bh, 80h 4902 0000217E 8005[FA220000]80 add byte [next_val_l+1], 80h 4903 00002185 66A1[F9220000] mov ax, [next_val_l] 4904 0000218B 6601D8 add ax, bx ; [previous_val_l] 4905 0000218E 66D1D8 rcr ax, 1 4906 00002191 89C1 mov ecx, eax ; interpolated middle (L) 4907 00002193 6601D8 add ax, bx 4908 00002196 66D1D8 rcr ax, 1 4909 00002199 89C2 mov edx, eax ; interpolated 1st quarter (L) 4910 0000219B 6601D8 add ax, bx ; [previous_val_l] 4911 0000219E 66D1D8 rcr ax, 1 4912 000021A1 80EC80 sub ah, 80h ; -32768 to +32767 format again 4913 000021A4 66AB stosw ; interpolated sample 1 (L) 4914 000021A6 89C8 mov eax, ecx 4915 000021A8 6601D0 add ax, dx ; middle (L) + 1st quarter (L) 4916 000021AB 66D1D8 rcr ax, 1 ; / 2 4917 000021AE 89C3 mov ebx, eax ; interpolated sample 2 (L) 4918 000021B0 5A pop edx ; * ; [previous_val_r] 4919 000021B1 89D0 mov eax, edx 4920 000021B3 8005[FC220000]80 add byte [next_val_r+1], 80h 4921 000021BA 660305[FB220000] add ax, [next_val_r] 4922 000021C1 66D1D8 rcr ax, 1 4923 000021C4 50 push eax ; * ; interpolated middle (R) 4924 000021C5 6601D0 add ax, dx 4925 000021C8 66D1D8 rcr ax, 1 4926 000021CB 50 push eax ; ** ; interpolated 1st quarter (R) 4927 000021CC 6601D0 add ax, dx ; [previous_val_r] 4928 000021CF 66D1D8 rcr ax, 1 4929 000021D2 80EC80 sub ah, 80h ; -32768 to +32767 format again 4930 000021D5 66AB stosw ; interpolated sample 1 (R) 4931 000021D7 89D8 mov eax, ebx 4932 000021D9 80EC80 sub ah, 80h ; -32768 to +32767 format again 4933 000021DC 66AB stosw ; interpolated sample 2 (L) 4934 000021DE 58 pop eax ; ** 4935 000021DF 5A pop edx ; * 4936 000021E0 6601D0 add ax, dx ; 1st quarter (R) + middle (R) 4937 000021E3 66D1D8 rcr ax, 1 ; / 2 4938 000021E6 80EC80 sub ah, 80h ; -32768 to +32767 format again 4939 000021E9 66AB stosw ; interpolated sample 2 (R) 4940 000021EB 89C8 mov eax, ecx 4941 000021ED 660305[F9220000] add ax, [next_val_l] 4942 000021F4 66D1D8 rcr ax, 1 4943 000021F7 50 push eax ; * ; interpolated 3rd quarter (L) 4944 000021F8 6601C8 add ax, cx ; interpolated middle (L) 4945 000021FB 66D1D8 rcr ax, 1 4946 000021FE 80EC80 sub ah, 80h ; -32768 to +32767 format again 4947 00002201 66AB stosw ; interpolated sample 3 (L) 4948 00002203 89D0 mov eax, edx 4949 00002205 660305[FB220000] add ax, [next_val_r] 4950 0000220C 66D1D8 rcr ax, 1 4951 0000220F 50 push eax ; ** ; interpolated 3rd quarter (R) 4952 00002210 6601D0 add ax, dx ; interpolated middle (R) 4953 00002213 66D1D8 rcr ax, 1 4954 00002216 80EC80 sub ah, 80h ; -32768 to +32767 format again 4955 00002219 66AB stosw ; interpolated sample 3 (R) 4956 0000221B 5B pop ebx ; ** 4957 0000221C 58 pop eax ; * 4958 0000221D 660305[F9220000] add ax, [next_val_l] 4959 00002224 66D1D8 rcr ax, 1 4960 00002227 80EC80 sub ah, 80h ; -32768 to +32767 format again 4961 0000222A 66AB stosw ; interpolated sample 4 (L) 4962 0000222C 89D8 mov eax, ebx 4963 0000222E 660305[FB220000] add ax, [next_val_r] 4964 00002235 66D1D8 rcr ax, 1 4965 00002238 80EC80 sub ah, 80h ; -32768 to +32767 format again 4966 0000223B 66AB stosw ; interpolated sample 4 (R) 4967 0000223D 59 pop ecx ; ! 4968 0000223E C3 retn 4969 4970 interpolating_4_16bit_mono: 4971 ; 18/11/2023 4972 ; ax = [previous_val] 4973 ; dx = [next_val] 4974 ; 02/02/2025 4975 ; original-interpolated-interpolated-interpolated 4976 4977 0000223F 66AB stosw ; original sample (L) 4978 00002241 66AB stosw ; original sample (R) 4979 00002243 80C480 add ah, 80h ; convert sound level 0 to 65535 format 4980 00002246 89C3 mov ebx, eax ; [previous_val] 4981 00002248 80C680 add dh, 80h 4982 0000224B 6601D0 add ax, dx ; [previous_val] + [next_val] 4983 0000224E 66D1D8 rcr ax, 1 4984 00002251 93 xchg eax, ebx 4985 00002252 6601D8 add ax, bx ; [previous_val] + interpolated middle 4986 00002255 66D1D8 rcr ax, 1 4987 00002258 80EC80 sub ah, 80h ; -32768 to +32767 format again 4988 0000225B 66AB stosw ; interpolated sample 1 (L) 4989 0000225D 66AB stosw ; interpolated sample 1 (R) 4990 0000225F 89D8 mov eax, ebx ; interpolated middle 4991 00002261 80EC80 sub ah, 80h ; -32768 to +32767 format again 4992 00002264 66AB stosw ; interpolated sample 2 (L) 4993 00002266 66AB stosw ; interpolated sample 2 (R) 4994 00002268 89D8 mov eax, ebx 4995 0000226A 6601D0 add ax, dx ; interpolated middle + [next_val] 4996 0000226D 66D1D8 rcr ax, 1 4997 00002270 80EC80 sub ah, 80h ; -32768 to +32767 format again 4998 00002273 66AB stosw ; interpolated sample 3 (L) 4999 00002275 66AB stosw ; interpolated sample 3 (R) 5000 00002277 C3 retn 5001 5002 interpolating_4_16bit_stereo: 5003 ; 18/11/2023 5004 ; bx = [previous_val_l] 5005 ; ax = [previous_val_r] 5006 ; [next_val_l] 5007 ; [next_val_r] 5008 ; original-interpolated-interpolated-interpolated 5009 00002278 93 xchg eax, ebx 5010 00002279 66AB stosw ; original sample (L) 5011 0000227B 93 xchg eax, ebx 5012 0000227C 66AB stosw ; original sample (R) 5013 0000227E 80C480 add ah, 80h ; convert sound level 0 to 65535 format 5014 00002281 89C2 mov edx, eax ; [previous_val_r] 5015 00002283 80C780 add bh, 80h 5016 00002286 8005[FA220000]80 add byte [next_val_l+1], 80h 5017 0000228D 66A1[F9220000] mov ax, [next_val_l] 5018 00002293 6601D8 add ax, bx ; [previous_val_l] 5019 00002296 66D1D8 rcr ax, 1 5020 00002299 93 xchg eax, ebx 5021 0000229A 6601D8 add ax, bx ; bx = interpolated middle (L) 5022 0000229D 66D1D8 rcr ax, 1 5023 000022A0 80EC80 sub ah, 80h ; -32768 to +32767 format again 5024 000022A3 66AB stosw ; interpolated sample 1 (L) 5025 000022A5 8005[FC220000]80 add byte [next_val_r+1], 80h 5026 000022AC 89D0 mov eax, edx ; [previous_val_r] 5027 000022AE 660305[FB220000] add ax, [next_val_r] 5028 000022B5 66D1D8 rcr ax, 1 5029 000022B8 92 xchg eax, edx 5030 000022B9 6601D0 add ax, dx ; dx = interpolated middle (R) 5031 000022BC 66D1D8 rcr ax, 1 5032 000022BF 80EC80 sub ah, 80h ; -32768 to +32767 format again 5033 000022C2 66AB stosw ; interpolated sample 1 (R) 5034 000022C4 89D8 mov eax, ebx 5035 000022C6 80EC80 sub ah, 80h ; -32768 to +32767 format again 5036 000022C9 66AB stosw ; interpolated sample 2 (L) 5037 000022CB 89D0 mov eax, edx 5038 000022CD 80EC80 sub ah, 80h ; -32768 to +32767 format again 5039 000022D0 66AB stosw ; interpolated sample 2 (R) 5040 000022D2 89D8 mov eax, ebx 5041 000022D4 660305[F9220000] add ax, [next_val_l] 5042 000022DB 66D1D8 rcr ax, 1 5043 000022DE 80EC80 sub ah, 80h ; -32768 to +32767 format again 5044 000022E1 66AB stosw ; interpolated sample 3 (L) 5045 000022E3 89D0 mov eax, edx 5046 000022E5 660305[FB220000] add ax, [next_val_r] 5047 000022EC 66D1D8 rcr ax, 1 5048 000022EF 80EC80 sub ah, 80h ; -32768 to +32767 format again 5049 000022F2 66AB stosw ; interpolated sample 3 (R) 5050 000022F4 C3 retn 5051 5052 ; 13/11/2023 5053 previous_val: 5054 000022F5 0000 previous_val_l: dw 0 5055 000022F7 0000 previous_val_r: dw 0 5056 next_val: 5057 000022F9 0000 next_val_l: dw 0 5058 000022FB 0000 next_val_r: dw 0 5059 5060 ; 16/11/2023 5061 000022FD 00 faz: db 0 5062 5063 ; -------------------------------------------------------- 5064 ; -------------------------------------------------------- 5065 5066 ; 07/12/2024 5067 ; Ref: TRDOS 386 v2.0.9, trdosk8.s (18/09/2024) 5068 ; 'sysaudio' system call (23/08/2024) 5069 ; 18/11/2024 5070 ; Ref: TRDOS 386 v2.0.9, audio.s, Erdogan Tan, 06/06/2024 5071 5072 ac97_stop: 5073 ; 18/11/2024 5074 000022FE C605[5C740000]02 mov byte [stopped], 2 5075 ; 07/12/2024 5076 sys _audio, 0700h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00002305 BB00070000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000230A B820000000 <1> mov eax, %1 97 <1> 98 0000230F CD40 <1> int 40h 5077 00002311 C3 retn 5078 5079 ac97_pause: 5080 ; 18/11/2024 5081 00002312 C605[5C740000]01 mov byte [stopped], 1 ; paused 5082 ; 07/12/2024 5083 sys _audio, 0500h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00002319 BB00050000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 0000231E B820000000 <1> mov eax, %1 97 <1> 98 00002323 CD40 <1> int 40h 5084 00002325 C3 retn 5085 5086 ac97_play: ; continue to play (after pause) 5087 ; 18/11/2024 5088 00002326 C605[5C740000]00 mov byte [stopped], 0 5089 ; 07/12/2024 5090 sys _audio, 0600h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000232D BB00060000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00002332 B820000000 <1> mov eax, %1 97 <1> 98 00002337 CD40 <1> int 40h 5091 00002339 C3 retn 5092 5093 ; -------------------------------------------------------- 5094 ; 14/11/2024 - Erdogan Tan 5095 ; -------------------------------------------------------- 5096 5097 ; 07/12/2024 5098 ; 01/12/2024 (32bit registers) 5099 ; 29/11/2024 5100 checkUpdateEvents: 5101 0000233A E817010000 call check4keyboardstop 5102 0000233F 727D jc short c4ue_ok 5103 5104 ; 18/11/2024 5105 00002341 50 push eax ; * 5106 00002342 09C0 or eax, eax 5107 00002344 0F84C2000000 jz c4ue_cpt 5108 5109 ; 18/11/2024 5110 0000234A 3C20 cmp al, 20h ; SPACE (spacebar) ; pause/play 5111 0000234C 7543 jne short ch4ue_chk_s 5112 0000234E 803D[5C740000]00 cmp byte [stopped], 0 5113 00002355 7714 ja short c4ue_chk_ps 5114 ; pause 5115 00002357 E8B6FFFFFF call ac97_pause 5116 ; 21/11/2024 5117 0000235C A0[5D740000] mov al, [tLO] 5118 00002361 A2[5E740000] mov byte [tLP], al 5119 00002366 E9A1000000 jmp c4ue_cpt 5120 c4ue_chk_ps: 5121 0000236B 803D[5C740000]01 cmp byte [stopped], 1 5122 00002372 770A ja short c4ue_replay 5123 ; continue to play (after a pause) 5124 00002374 E8ADFFFFFF call ac97_play 5125 00002379 E98E000000 jmp c4ue_cpt 5126 c4ue_replay: 5127 ; 19/11/2024 5128 0000237E 58 pop eax ; * 5129 0000237F 58 pop eax ; return address 5130 ; 07/02/2024 5131 ;mov al, [volume] 5132 ;call SetmasterVolume 5133 00002380 C605[5C740000]00 mov byte [stopped], 0 5134 00002387 E8C6030000 call move_to_beginning 5135 ;jmp PlayWav 5136 ; 07/12/2024 5137 0000238C E9A7E2FFFF jmp RePlayWav 5138 5139 ch4ue_chk_s: 5140 00002391 3C53 cmp al, 'S' ; stop 5141 00002393 751E jne short ch4ue_chk_fb 5142 00002395 803D[5C740000]00 cmp byte [stopped], 0 5143 0000239C 776E ja c4ue_cpt ; Already stopped/paused 5144 0000239E E85BFFFFFF call ac97_stop 5145 ; 19/11/2024 5146 000023A3 C605[5D740000]00 mov byte [tLO], 0 5147 ; 21/11/2024 5148 000023AA C605[5E740000]30 mov byte [tLP], '0' 5149 000023B1 EB59 jmp short c4ue_cpt 5150 5151 ch4ue_chk_fb: 5152 ; 17/11/2024 5153 000023B3 3C46 cmp al, 'F' 5154 000023B5 7508 jne short c4ue_chk_b 5155 000023B7 E86E030000 call Player_ProcessKey_Forwards 5156 000023BC EB4E jmp short c4ue_cpt 5157 5158 ; 01/12/2024 5159 ; 18/11/2024 5160 c4ue_ok: 5161 000023BE C3 retn 5162 5163 c4ue_chk_b: 5164 000023BF 3C42 cmp al, 'B' 5165 ;;jne short c4ue_cpt 5166 ; 19/11/2024 5167 000023C1 7507 jne short c4ue_chk_h 5168 000023C3 E85E030000 call Player_ProcessKey_Backwards 5169 000023C8 EB42 jmp short c4ue_cpt 5170 5171 c4ue_chk_h: 5172 ; 19/11/2024 5173 000023CA 3C48 cmp al, 'H' 5174 000023CC 750E jne short c4ue_chk_cr 5175 000023CE C605[5F740000]00 mov byte [wleds], 0 5176 000023D5 E85EE5FFFF call write_ac97_pci_dev_info 5177 ;mov dh, 24 5178 ;mov dl, 79 5179 ;call setCursorPosition 5180 ; 21/12/2024 5181 000023DA EB30 jmp short c4ue_cpt 5182 c4ue_chk_cr: 5183 ; 19/11/2024 5184 000023DC 3C0D cmp al, 0Dh ; ENTER/CR key 5185 000023DE 752C jne short c4ue_cpt 5186 ;inc byte [wleds] 5187 ;jnz short c4ue_cpt 5188 ;inc byte [wleds] 5189 ;;; 5190 ; 22/12/2024 (faster method) 5191 ; (UpdateWaveLeds procedure turns off previously 5192 ; lighting wave leds only) 5193 000023E0 E8B2030000 call reset_wave_leds ; prepare all leds as turned off 5194 ;;; 5195 ; 23/11/2024 5196 000023E5 31DB xor ebx, ebx 5197 000023E7 8A1D[5F740000] mov bl, [wleds] 5198 000023ED FEC3 inc bl 5199 000023EF 80E30F and bl, 0Fh 5200 000023F2 7501 jnz short c4ue_sc 5201 000023F4 43 inc ebx 5202 c4ue_sc: 5203 000023F5 881D[5F740000] mov [wleds], bl 5204 000023FB D0EB shr bl, 1 5205 000023FD 8A83[02410000] mov al, [ebx+colors] 5206 00002403 7302 jnc short c4ue_sc_@ 5207 00002405 0C10 or al, 10h ; blue (dark) background 5208 c4ue_sc_@: 5209 00002407 A2[0A410000] mov [ccolor], al 5210 ;;; 5211 c4ue_cpt: 5212 ; 01/12/2024 (TRDOS 386) 5213 sys _time, 4 ; get timer ticks (18.2 ticks/second) 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 0000240C BB04000000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00002411 B80D000000 <1> mov eax, %1 97 <1> 98 00002416 CD40 <1> int 40h 5214 ; 18/11/2024 5215 00002418 59 pop ecx ; * 5216 ; 01/12/2024 5217 00002419 3B05[1C750000] cmp eax, [timerticks] 5218 ;je short c4ue_ok 5219 ; 18/11/2024 5220 0000241F 7407 je short c4ue_skip_utt 5221 c4ue_utt: 5222 ; 01/12/2024 5223 00002421 A3[1C750000] mov [timerticks], eax 5224 00002426 EB04 jmp short c4ue_cpt_@ 5225 c4ue_skip_utt: 5226 ; 18/11/2024 5227 00002428 21C9 and ecx, ecx 5228 0000242A 7492 jz short c4ue_ok 5229 c4ue_cpt_@: 5230 ; 18/11/2024 5231 0000242C 803D[5C740000]00 cmp byte [stopped], 0 5232 00002433 7789 ja short c4ue_ok 5233 5234 00002435 E841010000 call CalcProgressTime 5235 5236 ;cmp ax, [ProgressTime] 5237 ; 01/12/2024 5238 0000243A 3B05[10750000] cmp eax, [ProgressTime] 5239 ;je short c4ue_ok 5240 ; same second, no need to update 5241 ; 23/11/2024 5242 00002440 7405 je short c4ue_uvb 5243 5244 ;call UpdateProgressTime 5245 ;call UpdateProgressBar@ 5246 00002442 E853020000 call UpdateProgressBar 5247 5248 ; 23/11/2024 5249 c4ue_uvb: 5250 00002447 803D[5F740000]00 cmp byte [wleds], 0 5251 0000244E 7605 jna short c4ue_vb_ok 5252 5253 00002450 E88C030000 call UpdateWaveLeds 5254 5255 c4ue_vb_ok: 5256 00002455 C3 retn 5257 5258 ; -------------------------------------------------------- 5259 ; 19/05/2024 - (playwav4.asm) ich_wav4.asm 5260 ; -------------------------------------------------------- 5261 5262 ; 07/12/2024 5263 ; 01/12/2024 (TRDOS 386) 5264 ; 29/11/2024 5265 check4keyboardstop: 5266 ; 19/05/2024 5267 ; 08/11/2023 5268 ; 04/11/2023 5269 00002456 B401 mov ah, 1 5270 ;int 16h 5271 ; 01/12/2024 (TRDOS 386 keyboard interrupt) 5272 00002458 CD32 int 32h 5273 ;clc 5274 0000245A 7433 jz short _cksr 5275 5276 0000245C 30E4 xor ah, ah 5277 ;int 16h 5278 ; 01/12/2024 (TRDOS 386 keyboard interrupt) 5279 0000245E CD32 int 32h 5280 5281 ;;; 5282 ; 19/05/2024 (change PCM out volume) 5283 00002460 3C2B cmp al, '+' 5284 00002462 750D jne short p_1 5285 5286 00002464 A0[AD240000] mov al, [volume] 5287 00002469 3C00 cmp al, 0 5288 0000246B 7624 jna short p_3 5289 0000246D FEC8 dec al 5290 0000246F EB0F jmp short p_2 5291 p_1: 5292 00002471 3C2D cmp al, '-' 5293 00002473 751D jne short p_4 5294 5295 00002475 A0[AD240000] mov al, [volume] 5296 0000247A 3C1F cmp al, 31 5297 0000247C 7313 jnb short p_3 5298 0000247E FEC0 inc al 5299 p_2: 5300 00002480 A2[AD240000] mov [volume], al 5301 ; 14/11/2024 5302 ;call SetPCMOutVolume 5303 ; 15/11/2024 (QEMU) 5304 ; 07/12/2024 5305 00002485 E8DEE2FFFF call SetMasterVolume 5306 ;call UpdateVolume 5307 ;;clc 5308 ;retn 5309 0000248A E97B010000 jmp UpdateVolume 5310 ;mov ah, al 5311 ;mov dx, [NAMBAR] 5312 ;;add dx, CODEC_MASTER_VOL_REG 5313 ;add dx, CODEC_PCM_OUT_REG 5314 ;out dx, ax 5315 ; 5316 ;call delay1_4ms 5317 ;call delay1_4ms 5318 ;call delay1_4ms 5319 ;call delay1_4ms 5320 _cksr: ; 19/05/2024 5321 ; 18/12/2024 5322 0000248F 31C0 xor eax, eax 5323 ;clc 5324 p_3: 5325 00002491 C3 retn 5326 p_4: 5327 ; 17/11/2024 5328 00002492 80FC01 cmp ah, 01h ; ESC 5329 00002495 7414 je short p_q 5330 ;cmp ax, 2E03h ; 21/12/2024 5331 00002497 3C03 cmp al, 03h ; CTRL+C 5332 00002499 7410 je short p_q 5333 5334 ; 18/11/2024 5335 0000249B 3C20 cmp al, 20h 5336 0000249D 740D je short p_r 5337 5338 ; 19/11/2024 5339 0000249F 3C0D cmp al, 0Dh ; CR/ENTER 5340 000024A1 7409 je short p_r 5341 5342 000024A3 24DF and al, 0DFh 5343 5344 ;cmp al, 'B' 5345 ;je short p_r 5346 ;cmp al, 'F' 5347 ;je short p_r 5348 5349 000024A5 3C51 cmp al, 'Q' 5350 ;je short p_q 5351 000024A7 7402 je short p_quit ; 29/11/2024 5352 5353 000024A9 F8 clc 5354 000024AA C3 retn 5355 5356 ;;; 5357 ;_cskr: 5358 p_q: 5359 p_quit: 5360 000024AB F9 stc 5361 p_r: 5362 000024AC C3 retn 5363 5364 ; 29/05/2024 5365 ; 19/05/2024 5366 000024AD 02 volume: db 02h 5367 5368 ; -------------------------------------------------------- 5369 5370 ; 22/12/2024 5371 ; 21/12/2024 5372 ; simulate cursor position in VGA (VESA VBE) mode 5373 ; ! for 640*480, 256 colors (1 byte/pixel) ! 5374 setCursorPosition: 5375 ; dh = Row 5376 ; dl = Column 5377 5378 000024AE 31C0 xor eax, eax 5379 000024B0 B00E mov al, 14 ; row height is 14 pixels (8*14) 5380 000024B2 F6E6 mul dh 5381 000024B4 6683C007 add ax, 7 ; top margin 5382 000024B8 C1E010 shl eax, 16 5383 000024BB 88D0 mov al, dl ; * 8 ; character width = 8 pixels 5384 000024BD 66C1E003 shl ax, 3 5385 ; hw = row, ax = column 5386 000024C1 A3[50740000] mov [screenpos], eax 5387 ; 22/12/2024 5388 000024C6 31C0 xor eax, eax 5389 000024C8 C3 retn 5390 5391 ; -------------------------------------------------------- 5392 ; 14/11/2024 5393 ; (Ref: player.asm, out_cs.asm, Matan Alfasi, 2017) 5394 5395 ;; NAME: SetTotalTime 5396 ;; DESCRIPTION: Calculates the total time in seconds in file 5397 ;; INPUT: DATA_SubchunkSize, WAVE_SampleRate, WAVE_BlockAlign 5398 ;; OUTPUT: CurrentTotalTime=Total time in seconds in file, 5399 ;; Output on the screen of the total time in seconds 5400 5401 ; 01/12/2024 (32 bit registers) 5402 SetTotalTime: 5403 ;; Calculate total seconds in file 5404 ;mov ax, [DATA_SubchunkSize] 5405 ;mov dx, [DATA_SubchunkSize + 2] 5406 ;mov bx, [WAVE_SampleRate] 5407 ;div bx 5408 ;xor dx, dx 5409 ; 01/12/2024 5410 000024C9 A1[94740000] mov eax, [DATA_SubchunkSize] 5411 000024CE 0FB71D[84740000] movzx ebx, word [WAVE_SampleRate] 5412 000024D5 31D2 xor edx, edx 5413 000024D7 F7F3 div ebx 5414 5415 ;mov bx, [WAVE_BlockAlign] 5416 ;div bx 5417 ; 01/12/2024 5418 000024D9 668B1D[8C740000] mov bx, [WAVE_BlockAlign] 5419 000024E0 31D2 xor edx, edx 5420 000024E2 F7F3 div ebx 5421 5422 ;mov [TotalTime], ax 5423 000024E4 A3[0C750000] mov [TotalTime], eax 5424 5425 000024E9 B33C mov bl, 60 5426 000024EB F6F3 div bl 5427 5428 ;; al = minutes, ah = seconds 5429 000024ED 50 push eax ; ** 5430 000024EE 50 push eax ; * 5431 5432 ;mov dh, 24 5433 ; 21/12/2024 (640*480) 5434 000024EF B620 mov dh, 32 5435 000024F1 B22A mov dl, 42 5436 000024F3 E8B6FFFFFF call setCursorPosition 5437 5438 000024F8 58 pop eax ; * 5439 000024F9 30E4 xor ah, ah 5440 000024FB BD02000000 mov ebp, 2 5441 00002500 E812000000 call PrintNumber 5442 5443 ;mov dh, 24 5444 ; 21/12/2024 (640*480) 5445 00002505 B620 mov dh, 32 5446 00002507 B22D mov dl, 45 5447 00002509 E8A0FFFFFF call setCursorPosition 5448 5449 0000250E 58 pop eax ; ** 5450 0000250F 88E0 mov al, ah 5451 00002511 30E4 xor ah, ah 5452 ; 21/12/2024 5453 00002513 66BD0200 mov bp, 2 5454 ;jmp short PrintNumber 5455 5456 ; -------------------------------------------------------- 5457 5458 ; 21/12/2024 (write numbers in VESA VBE graphics mode) 5459 ; 01/12/2024 (32bit registers) 5460 PrintNumber: 5461 ; eax = binary number 5462 ; ebp = digits 5463 00002517 8B35[50740000] mov esi, [screenpos] 5464 ; hw = row, si = column 5465 0000251D BB0A000000 mov ebx, 10 5466 00002522 31C9 xor ecx, ecx 5467 printNumber_CutNumber: 5468 00002524 41 inc ecx 5469 00002525 31D2 xor edx, edx 5470 00002527 F7F3 div ebx 5471 00002529 52 push edx 5472 0000252A 39E9 cmp ecx, ebp 5473 0000252C 7402 je short printNumber_printloop 5474 0000252E EBF4 jmp printNumber_CutNumber 5475 5476 printNumber_printloop: 5477 00002530 58 pop eax 5478 ; 21/12/2024 5479 ; ebp = count of digits 5480 ; eax <= 9 5481 5482 00002531 0430 add al, '0' 5483 5484 ; esi = pixel position (hw = row, si = column) 5485 ; eax = al = character 5486 ;call write_character 5487 ; 22/12/2024 5488 00002533 E818010000 call write_character_white 5489 5490 00002538 4D dec ebp 5491 00002539 7405 jz short printNumber_ok 5492 0000253B 83C608 add esi, 8 ; next column 5493 0000253E EBF0 jmp short printNumber_printloop 5494 printNumber_ok: 5495 00002540 C3 retn 5496 5497 ; -------------------------------------------------------- 5498 5499 ; 14/11/2024 - Erdogan Tan 5500 SetProgressTime: 5501 ;; Calculate playing/progress seconds in file 5502 00002541 E835000000 call CalcProgressTime 5503 5504 ; 01/12/2024 (32bit registers) 5505 UpdateProgressTime: 5506 ; eax = (new) progress time 5507 5508 00002546 A3[10750000] mov [ProgressTime], eax 5509 5510 0000254B B33C mov bl, 60 5511 0000254D F6F3 div bl 5512 5513 ;; al = minutes, ah = seconds 5514 0000254F 50 push eax ; ** 5515 00002550 50 push eax ; * 5516 5517 ;mov dh, 24 5518 ; 21/12/2024 (640*480) 5519 00002551 B620 mov dh, 32 5520 00002553 B221 mov dl, 33 5521 00002555 E854FFFFFF call setCursorPosition 5522 5523 0000255A 58 pop eax ; * 5524 0000255B 30E4 xor ah, ah 5525 0000255D BD02000000 mov ebp, 2 5526 00002562 E8B0FFFFFF call PrintNumber 5527 5528 ;mov dh, 24 5529 ; 21/12/2024 (640*480) 5530 00002567 B620 mov dh, 32 5531 00002569 B224 mov dl, 36 5532 0000256B E83EFFFFFF call setCursorPosition 5533 5534 00002570 58 pop eax ; ** 5535 00002571 88E0 mov al, ah 5536 00002573 30E4 xor ah, ah 5537 ; 21/12/2024 5538 00002575 66BD0200 mov bp, 2 5539 00002579 EB9C jmp short PrintNumber 5540 5541 ; -------------------------------------------------------- 5542 5543 ; 01/12/2024 (32bit registers) 5544 ; 17/11/2024 5545 ; 14/11/2024 5546 CalcProgressTime: 5547 ;mov ax, [LoadedDataBytes] 5548 ;mov dx, [LoadedDataBytes+2] 5549 ;mov bx, ax 5550 ;or bx, dx 5551 ;jz short cpt_ok 5552 ; 01/12/2024 5553 0000257B A1[18750000] mov eax, [LoadedDataBytes] 5554 00002580 09C0 or eax, eax 5555 00002582 7416 jz short cpt_ok 5556 5557 ;mov bx, [WAVE_SampleRate] 5558 ;div bx 5559 ;xor dx, dx 5560 ;mov bx, [WAVE_BlockAlign] 5561 ;div bx 5562 ; 01/12/2024 5563 00002584 0FB71D[84740000] movzx ebx, word [WAVE_SampleRate] 5564 0000258B 31D2 xor edx, edx 5565 0000258D F7F3 div ebx 5566 0000258F 31D2 xor edx, edx 5567 00002591 668B1D[8C740000] mov bx, [WAVE_BlockAlign] 5568 00002598 F7F3 div ebx 5569 cpt_ok: 5570 ; eax = (new) progress time 5571 0000259A C3 retn 5572 5573 ; -------------------------------------------------------- 5574 ; 14/11/2024 5575 ; (Ref: player.asm, out_cs.asm, Matan Alfasi, 2017) 5576 5577 ;; DESCRIPTION: Update file information on template 5578 ;; PARAMS: WAVE parameters and other variables 5579 ;; REGS: AX(RW) 5580 ;; VARS: CurrentFileName, WAVE_SampleRate, 5581 ;; RETURNS: On-screen file info is updated. 5582 5583 ; 01/12/2024 (32bit registers) 5584 UpdateFileInfo: 5585 ;; Print File Name 5586 ;mov dh, 9 5587 ; 21/12/2024 (640*480 graphics display) 5588 0000259B B608 mov dh, 8 5589 0000259D B217 mov dl, 23 5590 0000259F E80AFFFFFF call setCursorPosition 5591 5592 000025A4 BE[A0740000] mov esi, wav_file_name 5593 5594 ;;; 5595 ; 14/11/2024 5596 ; skip directory separators 5597 ; (note: asciiz string, max. 79 bytes except zero tail) 5598 000025A9 89F3 mov ebx, esi 5599 chk4_nxt_sep: 5600 000025AB AC lodsb 5601 000025AC 3C2F cmp al, '/' ; 14/12/2024 5602 000025AE 7406 je short chg_fpos 5603 000025B0 20C0 and al, al 5604 000025B2 7406 jz short chg_fpos_ok 5605 000025B4 EBF5 jmp short chk4_nxt_sep 5606 chg_fpos: 5607 000025B6 89F3 mov ebx, esi 5608 000025B8 EBF1 jmp short chk4_nxt_sep 5609 chg_fpos_ok: 5610 000025BA 89DE mov esi, ebx ; file name (without its path/directory) 5611 ;;; 5612 5613 000025BC E870000000 call PrintString 5614 5615 ;; Print Frequency 5616 ;mov dh, 10 5617 ; 21/12/2024 (640*480 graphics display) 5618 000025C1 B609 mov dh, 9 5619 000025C3 B217 mov dl, 23 5620 000025C5 E8E4FEFFFF call setCursorPosition 5621 ;movzx eax, word [WAVE_SampleRate] 5622 ; 22/12/2024 5623 ; eax = 0 5624 000025CA 66A1[84740000] mov ax, [WAVE_SampleRate] 5625 000025D0 BD05000000 mov ebp, 5 5626 000025D5 E83DFFFFFF call PrintNumber 5627 5628 ;; Print BitRate 5629 ;mov dh, 9 5630 ; 21/12/2024 (640*480 graphics display) 5631 000025DA B608 mov dh, 8 5632 000025DC B239 mov dl, 57 5633 000025DE E8CBFEFFFF call setCursorPosition 5634 000025E3 66A1[8E740000] mov ax, [WAVE_BitsPerSample] 5635 000025E9 66BD0200 mov bp, 2 5636 000025ED E825FFFFFF call PrintNumber 5637 5638 ;; Print Channel Number 5639 ;mov dh, 10 5640 ; 21/12/2024 (640*480 graphics display) 5641 000025F2 B609 mov dh, 9 5642 000025F4 B239 mov dl, 57 5643 000025F6 E8B3FEFFFF call setCursorPosition 5644 000025FB 66A1[82740000] mov ax, [WAVE_NumChannels] 5645 00002601 66BD0100 mov bp, 1 5646 00002605 E80DFFFFFF call PrintNumber 5647 5648 ;call UpdateVolume 5649 ;retn 5650 5651 ; -------------------------------------------------------- 5652 5653 ; 14/11/2024 5654 UpdateVolume: 5655 ;; Print Volume 5656 ;mov dh, 24 5657 ; 21/12/2024 (640*480) 5658 0000260A B620 mov dh, 32 5659 0000260C B24B mov dl, 75 5660 0000260E E89BFEFFFF call setCursorPosition 5661 ; 22/12/2024 5662 ; eax = 0 5663 5664 00002613 A0[AD240000] mov al, [volume] 5665 5666 00002618 B364 mov bl, 100 5667 0000261A F6E3 mul bl 5668 5669 0000261C B31F mov bl, 31 5670 0000261E F6F3 div bl 5671 5672 ;neg ax 5673 ;add ax, 100 5674 ; 01/12/2024 5675 00002620 B464 mov ah, 100 5676 00002622 28C4 sub ah, al 5677 00002624 0FB6C4 movzx eax, ah 5678 ;xor ah, ah 5679 ;mov bp, 3 5680 00002627 BD03000000 mov ebp, 3 5681 ;call PrintNumber 5682 ;retn 5683 0000262C E9E6FEFFFF jmp PrintNumber 5684 5685 ; -------------------------------------------------------- 5686 5687 ; 21/12/2024 5688 ; write text in VESA VBE graphics mode 5689 PrintString: 5690 ; esi = string address 5691 printstr_loop: 5692 00002631 31C0 xor eax, eax 5693 00002633 AC lodsb 5694 00002634 08C0 or al, al 5695 00002636 7417 jz short printstr_ok 5696 5697 00002638 56 push esi 5698 5699 00002639 8B35[50740000] mov esi, [screenpos] 5700 5701 ; esi = pixel position (hw = row, si = column) 5702 ; eax = al = character 5703 ;call write_character 5704 ; 22/12/2024 5705 0000263F E80C000000 call write_character_white 5706 5707 00002644 668305[50740000]08 add word [screenpos], 8 ; update column (only, not row) 5708 5709 0000264C 5E pop esi 5710 0000264D EBE2 jmp short printstr_loop 5711 5712 printstr_ok: 5713 0000264F C3 retn 5714 5715 ; -------------------------------------------------------- 5716 5717 ; 21/12/2024 5718 ; write character (at cursor position) 5719 ; in graphics mode (640*480, 256 colors) 5720 ; 22/12/2024 5721 write_character_white: 5722 00002650 B90F000000 mov ecx, 0Fh 5723 write_character: 5724 ; esi = pixel position (hw = row, si = column) 5725 ; eax = al = character 5726 ; cl = color 5727 00002655 890D[54740000] mov [wcolor], ecx ; 22/12/2024 5728 5729 ; 22/12/2024 5730 0000265B 50 push eax 5731 ; clear previous character pixels 5732 0000265C BF[F2400000] mov edi, fillblock 5733 sys _video, 020Fh, 0, 8001h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00002661 BB0F020000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00002666 B900000000 <1> mov ecx, %3 91 <1> %if %0 = 4 92 0000266B BA01800000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00002670 B81F000000 <1> mov eax, %1 97 <1> 98 00002675 CD40 <1> int 40h 5734 00002677 58 pop eax 5735 5736 00002678 C1E004 shl eax, 4 ; 8*16 pixel user font 5737 0000267B BF[0C4F0000] mov edi, fontbuff2 ; start of user font data 5738 00002680 01C7 add edi, eax 5739 5740 ; 21/12/2024 5741 ; NOTE: 5742 ; TRDOS 386 does not use 8*14 pixel fonts in sysvideo 5743 ; system calls -in graphics mode- 5744 ; because 8*16 pixel operations are faster 5745 ; than 8*14 pixel operations. 5746 ; ((so, 8*14 fonts can be converted to 8*16 fonts by 5747 ; adding 2 empty lines)) 5748 ; (8*14 characters can be written via pixel operations) 5749 5750 ; 21/12/2024 (TRDOS 386 v2.0.9, trdosk6.s, 27/09/2024) 5751 ;;;;;;;;;;;;;;;;; ; sysvideo system call 5752 ;sysvideo: 5753 ; function in BH 5754 ; 02h: Super VGA, LINEAR FRAME BUFFER data transfers 5755 ; sub function in BL 5756 ; 0Fh: WRITE CHARACTER (FONT) 5757 ; CL = char's color (8 bit, 256 colors) 5758 ; If DH bit 7 = 1 5759 ; USER FONT (from user buffer) 5760 ; DL = 1 -> 8x16 pixel font 5761 ; EDI = user's font buffer address 5762 ; (NOTE: byte order is as row0,row1,row2..) 5763 ; ESI = start position (row, column) 5764 ; (HW = row, SI = column) 5765 ;;;;;;;;;;;;;;;;; 5766 5767 sys _video, 020Fh, [wcolor], 8001h 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00002682 BB0F020000 <1> mov ebx, %2 89 <1> %if %0 >= 3 90 00002687 8B0D[54740000] <1> mov ecx, %3 91 <1> %if %0 = 4 92 0000268D BA01800000 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00002692 B81F000000 <1> mov eax, %1 97 <1> 98 00002697 CD40 <1> int 40h 5768 5769 00002699 C3 retn 5770 5771 ; -------------------------------------------------------- 5772 5773 ; 22/12/2024 5774 ; 21/12/2024 5775 ; (write chars in VESA VBE graphics mode) 5776 ; 14/11/2024 5777 ; (Ref: player.asm, Matan Alfasi, 2017) 5778 ; (Modification: Erdogan Tan, 14/11/2024) 5779 5780 ;PROGRESSBAR_ROW equ 23 5781 ; 21/12/2024 (640*480) 5782 PROGRESSBAR_ROW equ 31 5783 5784 UpdateProgressBar: 5785 0000269A E8A2FEFFFF call SetProgressTime ; 14/11/2024 5786 5787 ; 01/12/2024 (32bit registers) 5788 0000269F A1[10750000] mov eax, [ProgressTime] 5789 UpdateProgressBar@: 5790 000026A4 BA50000000 mov edx, 80 5791 000026A9 F7E2 mul edx 5792 000026AB 8B1D[0C750000] mov ebx, [TotalTime] 5793 000026B1 F7F3 div ebx 5794 5795 ; 22/12/2024 5796 ; check progress bar indicator position if it is same 5797 000026B3 3A05[5A740000] cmp al, [pbprev] 5798 000026B9 7430 je short UpdateProgressBar_ok 5799 000026BB A2[5A740000] mov [pbprev], al 5800 5801 UpdateProgressBar@@: 5802 ;; Push for the 'Clean' part 5803 000026C0 50 push eax ; ** 5804 000026C1 50 push eax ; * 5805 5806 ;; Set cursor position 5807 000026C2 B61F mov dh, PROGRESSBAR_ROW 5808 000026C4 B200 mov dl, 0 5809 000026C6 E8E3FDFFFF call setCursorPosition 5810 5811 000026CB 58 pop eax ; * 5812 000026CC 09C0 or eax, eax 5813 000026CE 742D jz short UpdateProgressBar_Clean 5814 5815 UpdateProgressBar_DrawProgress: 5816 ; 22/12/2024 5817 ; 21/12/2024 5818 ; (write progress bar chars in graphics mode) 5819 ;;;; 5820 000026D0 89C5 mov ebp, eax 5821 000026D2 50 push eax ; *** 5822 000026D3 8B35[50740000] mov esi, [screenpos] 5823 UpdateProgressBar_DrawProgress_@: 5824 000026D9 B8DF000000 mov eax, 223 5825 5826 ; esi = pixel position (hw = row, si = column) 5827 ; eax = al = character 5828 ;call write_character 5829 ; 22/12/2024 5830 000026DE E86DFFFFFF call write_character_white 5831 5832 000026E3 4D dec ebp 5833 000026E4 7406 jz short UpdateProgressBar_DrawCursor 5834 5835 000026E6 83C608 add esi, 8 ; next column 5836 000026E9 EBEE jmp short UpdateProgressBar_DrawProgress_@ 5837 ;;; 5838 5839 UpdateProgressBar_ok: 5840 000026EB C3 retn 5841 5842 UpdateProgressBar_DrawCursor: 5843 ; 22/12/2024 5844 000026EC 5A pop edx ; *** 5845 000026ED B61F mov dh, PROGRESSBAR_ROW 5846 000026EF E8BAFDFFFF call setCursorPosition 5847 5848 ; 21/12/2024 5849 ; (write progress bar character in graphics mode) 5850 ;;;; 5851 ;;;mov eax, 223 5852 ;;;shl eax, 4 ; 8*16 pixel user font 5853 ;;mov eax, 223*16 5854 ;;mov edi, fontbuff2 ; start of user font data 5855 ;;add edi, eax 5856 ;mov edi, fontbuff2+(223*16) 5857 ; 5858 ;sys _video, 020Fh, 0Ch, 8001h 5859 ; 22/12/2024 5860 ;mov eax, 223 5861 ; eax = 0 5862 000026F4 B0DF mov al, 223 5863 000026F6 B10C mov cl, 0Ch ; red 5864 000026F8 E858FFFFFF call write_character 5865 ;;;; 5866 5867 UpdateProgressBar_Clean: 5868 ;pop eax ; ** 5869 ; 22/12/2024 5870 000026FD 5A pop edx ; ** 5871 ; 21/12/2024 5872 000026FE BD50000000 mov ebp, 80 5873 ;sub bp, ax 5874 00002703 6629D5 sub bp, dx ; 22/12/2024 5875 00002706 74E3 jz short UpdateProgressBar_ok 5876 5877 00002708 B61F mov dh, PROGRESSBAR_ROW 5878 ;mov dl, al ; 22/12/2024 5879 0000270A E89FFDFFFF call setCursorPosition 5880 5881 ; 21/12/2024 5882 ; (write progress bar chars in graphics mode) 5883 ;;;; 5884 0000270F 8B35[50740000] mov esi, [screenpos] 5885 UpdateProgressBar_Clean_@: 5886 ;;;mov eax, 223 5887 ;;;shl eax, 4 ; 8*16 pixel user font 5888 ;;mov eax, 223*16 5889 ;mov edi, fontbuff2 ; start of user font data 5890 ;add edi, eax 5891 ;mov edi, fontbuff2+(223*16) 5892 ; 5893 ;sys _video, 020Fh, 08h, 8001h 5894 ; 22/12/2024 5895 ;mov eax, 223 5896 ; eax = 0 5897 00002715 B0DF mov al, 223 5898 00002717 B108 mov cl, 08h ; gray (dark) 5899 00002719 E837FFFFFF call write_character 5900 ;;;; 5901 5902 0000271E 4D dec ebp 5903 0000271F 74CA jz short UpdateProgressBar_ok 5904 5905 00002721 83C608 add esi, 8 ; next column 5906 00002724 EBEF jmp short UpdateProgressBar_Clean_@ 5907 ;;;; 5908 5909 ; -------------------------------------------------------- 5910 ; 17/11/2024 5911 5912 Player_ProcessKey_Backwards: 5913 ;; In order to go backwards 5 seconds: 5914 ;; Update file pointer to the beginning, skip headers 5915 00002726 B142 mov cl, 'B' 5916 00002728 EB02 jmp short Player_ProcessKey_B_or_F 5917 5918 Player_ProcessKey_Forwards: 5919 ;; In order to fast-forward 5 seconds, set the file pointer 5920 ;; to CUR_SEEK + 5 * Freq 5921 5922 0000272A B146 mov cl, 'F' 5923 ;jmp short Player_ProcessKey_B_or_F 5924 5925 ; 01/12/2024 (32bit regsisters) 5926 Player_ProcessKey_B_or_F: 5927 ; 17/11/2024 5928 ; 04/11/2024 5929 ; (Ref: player.asm, Matan Alfasi, 2017) 5930 5931 ; 04/11/2024 5932 0000272C B805000000 mov eax, 5 5933 00002731 0FB71D[8C740000] movzx ebx, word [WAVE_BlockAlign] 5934 00002738 F7E3 mul ebx 5935 0000273A 668B1D[84740000] mov bx, [WAVE_SampleRate] 5936 00002741 F7E3 mul ebx 5937 ; eax = transfer byte count for 5 seconds 5938 5939 ; 17/11/2024 5940 00002743 80F942 cmp cl, 'B' 5941 ;mov bx, [LoadedDataBytes] 5942 ;mov cx, [LoadedDataBytes+2] 5943 ; 01/12/2024 5944 00002746 8B0D[18750000] mov ecx, [LoadedDataBytes] 5945 0000274C 7508 jne short move_forward ; cl = 'F' 5946 move_backward: 5947 ;sub bx, ax 5948 ;sbb cx, dx 5949 0000274E 29C1 sub ecx, eax 5950 00002750 7316 jnc short move_file_pointer 5951 move_to_beginning: 5952 ;xor cx, cx ; 0 5953 ;xor bx, bx ; 0 5954 00002752 31C9 xor ecx, ecx 5955 00002754 EB12 jmp short move_file_pointer 5956 move_forward: 5957 ;add bx, ax 5958 ;adc cx, dx 5959 00002756 01C1 add ecx, eax 5960 00002758 7208 jc short move_to_end 5961 ;cmp cx, [DATA_SubchunkSize+2] 5962 ;ja short move_to_end 5963 ;jb short move_file_pointer 5964 ;cmp bx, [DATA_SubchunkSize] 5965 ;jna short move_file_pointer 5966 0000275A 3B0D[94740000] cmp ecx, [DATA_SubchunkSize] 5967 00002760 7606 jna short move_file_pointer 5968 move_to_end: 5969 ;mov bx, [DATA_SubchunkSize] 5970 ;mov cx, [DATA_SubchunkSize+2] 5971 00002762 8B0D[94740000] mov ecx, [DATA_SubchunkSize] 5972 move_file_pointer: 5973 ;mov dx, bx 5974 ;mov [LoadedDataBytes], dx 5975 ;mov [LoadedDataBytes+2], cx 5976 00002768 890D[18750000] mov [LoadedDataBytes], ecx 5977 ;add dx, 44 ; + header 5978 ;adc cx, 0 5979 0000276E 83C12C add ecx, 44 5980 5981 ; seek 5982 ;mov bx, [filehandle] 5983 ;mov ax, 4200h 5984 ;int 21h 5985 ; 01/12/2024 5986 00002771 31D2 xor edx, edx ; offset from beginning of the file 5987 ; ecx = offset 5988 ; ebx = file handle 5989 ; edx = 0 5990 sys _seek, [filehandle] 83 <1> 84 <1> 85 <1> 86 <1> 87 <1> %if %0 >= 2 88 00002773 8B1D[9C740000] <1> mov ebx, %2 89 <1> %if %0 >= 3 90 <1> mov ecx, %3 91 <1> %if %0 = 4 92 <1> mov edx, %4 93 <1> %endif 94 <1> %endif 95 <1> %endif 96 00002779 B813000000 <1> mov eax, %1 97 <1> 98 0000277E CD40 <1> int 40h 5991 00002780 C3 retn 5992 5993 ; -------------------------------------------------------- 5994 5995 ; 22/12/2024 (VESA VBE mode graphics) 5996 ; (640*480, 256 colors) 5997 clear_window: 5998 00002781 8B3D[4C740000] mov edi, [LFB_ADDR] 5999 00002787 81C700C70100 add edi, (13*80*8*14) 6000 0000278D 29C0 sub eax, eax 6001 0000278F B9008C0000 mov ecx, (16*640*14)/4 ; 16 rows 6002 00002794 F3AB rep stosd 6003 00002796 C3 retn 6004 6005 ; -------------------------------------------------------- 6006 6007 ; 22/12/2024 6008 ; 21/12/2024 6009 ; (simulate wave leds in graphics mode) 6010 ; (640*480, 256 colors) 6011 reset_wave_leds: 6012 ; 22/12/2024 6013 00002797 C705[0C730000]0000- mov dword [prev_leds], 0 6013 0000279F 0000 6014 ; 6015 000027A1 BD00050000 mov ebp, 16*80 ; 80 columns with 16 levels 6016 000027A6 BE[0C5F0000] mov esi, wleds_addr 6017 next_led: 6018 000027AB AD lodsd 6019 000027AC 89C7 mov edi, eax 6020 000027AE BA0E000000 mov edx, 14 ; 14 lines (8*14 pixel font) 6021 000027B3 BB[EC5E0000] mov ebx, fontbuff2+(254*16) ; char = 254 6022 led_line: 6023 000027B8 8A23 mov ah, [ebx] 6024 000027BA B908000000 mov ecx, 8 ; 8 pixels (8*16 pixel font) 6025 next_pixel: 6026 000027BF D0E4 shl ah, 1 6027 000027C1 7308 jnc short skip_this 6028 000027C3 B008 mov al, 8 ; gray 6029 000027C5 AA stosb 6030 000027C6 49 dec ecx 6031 000027C7 75F6 jnz short next_pixel 6032 000027C9 EB06 jmp short next_line 6033 skip_this: 6034 000027CB B000 mov al, 0 ; black 6035 000027CD AA stosb 6036 000027CE 49 dec ecx 6037 000027CF 75EE jnz short next_pixel 6038 next_line: 6039 000027D1 4A dec edx 6040 000027D2 7504 jnz short next_line_@ 6041 000027D4 4D dec ebp 6042 000027D5 75D4 jnz short next_led 6043 000027D7 C3 retn 6044 next_line_@: 6045 ; 22/12/2024 6046 000027D8 81C778020000 add edi, 640-8 ; next line 6047 000027DE 43 inc ebx 6048 000027DF EBD7 jmp short led_line 6049 6050 ; -------------------------------------------------------- 6051 6052 ; 22/12/2024 (graphics mode) 6053 ; 09/12/2024 6054 ; 19/11/2024 6055 UpdateWaveLeds: 6056 ; 23/11/2024 6057 ;call reset_wave_leds 6058 ; 22/12/2024 (faster method, 80 against 80*16) 6059 ; turn off previously lighting wave leds at first 6060 ;;; 6061 000027E1 BE[0C730000] mov esi, prev_leds 6062 000027E6 833E00 cmp dword [esi], 0 6063 000027E9 7433 jz short UpdateWaveLeds_ok 6064 000027EB B950000000 mov ecx, 80 6065 turn_off_led: 6066 000027F0 AD lodsd 6067 000027F1 89C7 mov edi, eax 6068 ; edi = wave led address 6069 000027F3 BD0E000000 mov ebp, 14 6070 000027F8 BB[EC5E0000] mov ebx, fontbuff2+(254*16) ; char = 254 6071 000027FD 31D2 xor edx, edx 6072 000027FF B008 mov al, 8 ; gray (dark) 6073 toffl_next_line: 6074 ;;mov edx, 8 ; 8 pixels (8*14 pixel font) 6075 ;mov dl, 8 6076 00002801 88C2 mov dl, al ; 8 6077 00002803 8A23 mov ah, [ebx] 6078 toffl_next_pixel: 6079 00002805 D0E4 shl ah, 1 6080 00002807 7310 jnc short toffl_skip_this 6081 00002809 AA stosb 6082 toffl_next_pixel_@: 6083 0000280A 4A dec edx 6084 0000280B 75F8 jnz short toffl_next_pixel 6085 0000280D 4D dec ebp 6086 0000280E 740C jz short toffl_next_led 6087 00002810 81C778020000 add edi, 640-8 ; next line 6088 00002816 43 inc ebx 6089 00002817 EBE8 jmp short toffl_next_line 6090 toffl_skip_this: 6091 00002819 47 inc edi 6092 0000281A EBEE jmp short toffl_next_pixel_@ 6093 toffl_next_led: 6094 0000281C E2D2 loop turn_off_led 6095 UpdateWaveLeds_ok: 6096 ;;; 6097 ; 09/12/2024 6098 ;jmp short turn_on_leds 6099 6100 ; -------------------------------------------------------- 6101 6102 ; 21/12/2024 (VESA VBE Mode, 640*480, 256 colors) 6103 ; 09/12/2024 6104 ; 01/12/2024 (TRDOS 386, 32bit registers, flat memory) 6105 ; 23/11/2024 (Retro DOS, 16bit registers, segmented) 6106 ; 21/11/2024, 22/11/2024 6107 ; 19/11/2024 6108 turn_on_leds: 6109 ; 09/12/2024 6110 ; 07/12/2024 6111 0000281E 8A15[69740000] mov dl, [half_buffer] 6112 tol_@: 6113 ; 07/12/2024 6114 00002824 3815[68740000] cmp [pbuf_s], dl 6115 0000282A 7520 jne short tol_ns_buf 6116 0000282C 8B1D[60740000] mov ebx, [wleds_dif] 6117 00002832 8B35[64740000] mov esi, [pbuf_o] 6118 00002838 8B0D[08750000] mov ecx, [buffersize] ; bytes 6119 0000283E 29D9 sub ecx, ebx ; sub ecx, [wleds_dif] 6120 00002840 01DE add esi, ebx 6121 00002842 7204 jc short tol_o_@ 6122 00002844 39CE cmp esi, ecx 6123 00002846 760C jna short tol_s_buf 6124 tol_o_@: 6125 00002848 89CE mov esi, ecx 6126 0000284A EB08 jmp short tol_s_buf 6127 6128 tol_ns_buf: 6129 0000284C 8815[68740000] mov [pbuf_s], dl 6130 00002852 31F6 xor esi, esi ; 0 6131 tol_s_buf: 6132 00002854 8935[64740000] mov [pbuf_o], esi 6133 6134 tol_buf_@: 6135 ; 07/12/2024 6136 0000285A 81C6[00800000] add esi, audio_buffer 6137 00002860 B950000000 mov ecx, 80 6138 ;xor eax, eax ; 0 6139 00002865 BB[0C5F0000] mov ebx, wleds_addr 6140 ; 22/12/2024 6141 0000286A BF[0C730000] mov edi, prev_leds 6142 tol_fill_c: 6143 0000286F 31C0 xor eax, eax ; 0 ; 22/12/2024 6144 00002871 66AD lodsw ; left 6145 ; 23/01/2025 6146 00002873 80C480 add ah, 80h 6147 00002876 89C2 mov edx, eax 6148 00002878 66AD lodsw ; right 6149 ;add ax, dx 6150 0000287A 80C480 add ah, 80h 6151 ; 21/12/2024 (16 volume levels) 6152 ;shr eax, 12 6153 ; 23/01/2025 6154 0000287D 01D0 add eax, edx ; L+R 6155 0000287F C1E80D shr eax, 13 ; (L+R)/2 & 16 volume levels 6156 6157 00002882 53 push ebx ; * 6158 ; 01/12/2024 6159 00002883 C1E002 shl eax, 2 6160 00002886 01C3 add ebx, eax 6161 ; 01/12/2024 (32bit address) 6162 ;mov edi, [ebx] 6163 ; 22/12/2024 6164 00002888 8B03 mov eax, [ebx] 6165 0000288A AB stosd 6166 0000288B 57 push edi ; ** 6167 0000288C 89C7 mov edi, eax 6168 ;;; 6169 ; 21/12/2024 6170 ; (simulate wave leds in graphics mode) 6171 ; (640*480, 256 colors) 6172 turn_on_led: 6173 ; edi = wave led address 6174 0000288E BD0E000000 mov ebp, 14 6175 00002893 BB[EC5E0000] mov ebx, fontbuff2+(254*16) ; char = 254 6176 00002898 A0[0A410000] mov al, [ccolor] 6177 tol_next_line: 6178 0000289D BA08000000 mov edx, 8 ; 8 pixels (8*14 pixel font) 6179 000028A2 8A23 mov ah, [ebx] 6180 tol_next_pixel: 6181 000028A4 D0E4 shl ah, 1 6182 000028A6 7310 jnc short tol_skip_this 6183 000028A8 AA stosb 6184 tol_next_pixel_@: 6185 000028A9 4A dec edx 6186 000028AA 75F8 jnz short tol_next_pixel 6187 000028AC 4D dec ebp 6188 000028AD 740C jz short tol_next_led 6189 ; 22/12/2024 6190 000028AF 81C778020000 add edi, 640-8 ; next line 6191 000028B5 43 inc ebx 6192 000028B6 EBE5 jmp short tol_next_line 6193 tol_skip_this: 6194 000028B8 47 inc edi 6195 000028B9 EBEE jmp short tol_next_pixel_@ 6196 tol_next_led: 6197 ; 22/12/2024 6198 000028BB 5F pop edi ; ** 6199 ;;; 6200 000028BC 5B pop ebx ; * 6201 000028BD 83C340 add ebx, 16*4 6202 000028C0 E2AD loop tol_fill_c 6203 6204 000028C2 C3 retn 6205 6206 ; ------------------------------------------------------------- 6207 6208 ; ------------------------------------------------------------- 6209 ; ac97.inc (11/11/2023) 6210 ; ------------------------------------------------------------- 6211 6212 ; special characters 6213 LF EQU 10 6214 CR EQU 13 6215 6216 ; PCI stuff 6217 6218 ; Intel ICH2 equates. It is assumed that ICH0 and plain ole ICH are compatible. 6219 6220 INTEL_VID equ 8086h ; Intel's PCI vendor ID 6221 ; 03/11/2023 - Erdogan Tan (Ref: MenuetOS AC97 WAV Player source code, 2004) 6222 SIS_VID equ 1039h 6223 NVIDIA_VID equ 10DEh ; Ref: MPXPLAY/SBEMU/KOLIBRIOS AC97 source c. 6224 AMD_VID equ 1022h 6225 6226 ICH_DID equ 2415h ; ICH device ID 6227 ICH0_DID equ 2425h ; ICH0 6228 ICH2_DID equ 2445h ; ICH2 I think there are more ICHes. 6229 ; they all should be compatible. 6230 6231 ; 17/02/2017 (Erdogan Tan, ref: ALSA Device IDs, ALSA project) 6232 ICH3_DID equ 2485h ; ICH3 6233 ICH4_DID equ 24C5h ; ICH4 6234 ICH5_DID equ 24D5h ; ICH5 6235 ICH6_DID equ 266Eh ; ICH6 6236 ESB6300_DID equ 25A6h ; 6300ESB 6237 ESB631X_DID equ 2698h ; 631XESB 6238 ICH7_DID equ 27DEh ; ICH7 6239 ; 03/11/2023 - Erdogan Tan (Ref: MenuetOS AC97 WAV Player source code, 2004) 6240 MX82440_DID equ 7195h 6241 SI7012_DID equ 7012h 6242 NFORCE_DID equ 01B1h 6243 NFORCE2_DID equ 006Ah 6244 AMD8111_DID equ 746Dh 6245 AMD768_DID equ 7445h 6246 ; 03/11/2023 - Erdogan Tan - Ref: MPXPLAY/SBEMU/KOLIBRIOS AC97 source code 6247 CK804_DID equ 0059h 6248 MCP04_DID equ 003Ah 6249 CK8_DID equ 008Ah 6250 NFORCE3_DID equ 00DAh 6251 CK8S_DID equ 00EAh 6252 6253 ; ------------------------------------------------------------- 6254 6255 ; 22/12/2024 6256 000028C3 90 align 4 6257 6258 ; 13/11/2024 6259 ; ('<<' to 'shl' conversion for FASM) 6260 ; 6261 ; 29/05/2024 (TRDOS 386) 6262 ; 17/02/2017 6263 ; Valid ICH device IDs 6264 6265 valid_ids: 6266 ;dd (ICH_DID shl 16) + INTEL_VID ; 8086h:2415h 6267 000028C4 86801524 dd (ICH_DID << 16) + INTEL_VID ; 8086h:2415h 6268 000028C8 86802524 dd (ICH0_DID << 16) + INTEL_VID ; 8086h:2425h 6269 000028CC 86804524 dd (ICH2_DID << 16) + INTEL_VID ; 8086h:2445h 6270 000028D0 86808524 dd (ICH3_DID << 16) + INTEL_VID ; 8086h:2485h 6271 000028D4 8680C524 dd (ICH4_DID << 16) + INTEL_VID ; 8086h:24C5h 6272 000028D8 8680D524 dd (ICH5_DID << 16) + INTEL_VID ; 8086h:24D5h 6273 000028DC 86806E26 dd (ICH6_DID << 16) + INTEL_VID ; 8086h:266Eh 6274 000028E0 8680A625 dd (ESB6300_DID << 16) + INTEL_VID ; 8086h:25A6h 6275 000028E4 86809826 dd (ESB631X_DID << 16) + INTEL_VID ; 8086h:2698h 6276 000028E8 8680DE27 dd (ICH7_DID << 16) + INTEL_VID ; 8086h:27DEh 6277 ; 03/11/2023 - Erdogan Tan 6278 000028EC 86809571 dd (MX82440_DID << 16) + INTEL_VID ; 8086h:7195h 6279 000028F0 39101270 dd (SI7012_DID << 16) + SIS_VID ; 1039h:7012h 6280 000028F4 DE10B101 dd (NFORCE_DID << 16) + NVIDIA_VID ; 10DEh:01B1h 6281 000028F8 DE106A00 dd (NFORCE2_DID << 16) + NVIDIA_VID ; 10DEh:006Ah 6282 000028FC 22106D74 dd (AMD8111_DID << 16) + AMD_VID ; 1022h:746Dh 6283 00002900 22104574 dd (AMD768_DID << 16) + AMD_VID ; 1022h:7445h 6284 00002904 DE105900 dd (CK804_DID << 16) + NVIDIA_VID ; 10DEh:0059h 6285 00002908 DE103A00 dd (MCP04_DID << 16) + NVIDIA_VID ; 10DEh:003Ah 6286 0000290C DE108A00 dd (CK8_DID << 16) + NVIDIA_VID ; 1022h:008Ah 6287 00002910 DE10DA00 dd (NFORCE3_DID << 16) + NVIDIA_VID ; 10DEh:00DAh 6288 00002914 DE10EA00 dd (CK8S_DID << 16) + NVIDIA_VID ; 10DEh:00EAh 6289 6290 valid_id_count equ (($ - valid_ids)>>2) ; 05/11/2023 6291 ; 13/11/2024 6292 ;valid_id_count = ($ - valid_ids) shr 2 ; 05/11/2023 6293 6294 00002918 00000000 dd 0 6295 6296 Credits: 6297 0000291C 564741205741562050- db 'VGA WAV Player for TRDOS 386 by Erdogan Tan. ' 6297 00002925 6C6179657220666F72- 6297 0000292E 205452444F53203338- 6297 00002937 36206279204572646F- 6297 00002940 67616E2054616E2E20 6298 ;;db 'December 2024.', 10,13,0 6299 ;db 'January 2025.', 10,13,0 6300 00002949 466562727561727920- db 'February 2025.', 10,13,0 6300 00002952 323032352E0A0D00 6301 ;;;db '22/12/2024', 10,13 6302 ;;db '17/01/2025', 10,13 6303 ;db '23/01/2025', 10,13 6304 0000295A 30322F30322F323032- db '02/02/2025', 10,13 6304 00002963 350A0D 6305 ; 15/11/2024 6306 reset: 6307 00002966 00 db 0 6308 6309 msgAudioCardInfo: 6310 00002967 666F7220496E74656C- db 'for Intel AC97 (ICH) Audio Controller.', 10,13,0 6310 00002970 204143393720284943- 6310 00002979 482920417564696F20- 6310 00002982 436F6E74726F6C6C65- 6310 0000298B 722E0A0D00 6311 6312 ; 21/12/2024 6313 msg_usage: 6314 00002990 75736167653A206470- db 'usage: dplayvga filename.wav',10,13,0 6314 00002999 6C6179766761206669- 6314 000029A2 6C656E616D652E7761- 6314 000029AB 760A0D00 6315 6316 noDevMsg: 6317 000029AF 4572726F723A20556E- db 'Error: Unable to find AC97 audio device!' 6317 000029B8 61626C6520746F2066- 6317 000029C1 696E64204143393720- 6317 000029CA 617564696F20646576- 6317 000029D3 69636521 6318 000029D7 0A0D00 db 10,13,0 6319 6320 noFileErrMsg: 6321 000029DA 4572726F723A206669- db 'Error: file not found.',10,13,0 6321 000029E3 6C65206E6F7420666F- 6321 000029EC 756E642E0A0D00 6322 6323 ; 07/12/2024 6324 trdos386_err_msg: 6325 000029F3 5452444F5320333836- db 'TRDOS 386 System call error !',10,13,0 6325 000029FC 2053797374656D2063- 6325 00002A05 616C6C206572726F72- 6325 00002A0E 20210A0D00 6326 6327 ; 29/05/2024 6328 ; 11/11/2023 6329 msg_init_err: 6330 00002A13 0D0A db CR, LF 6331 00002A15 4143393720436F6E74- db 'AC97 Controller/Codec initialization error !' 6331 00002A1E 726F6C6C65722F436F- 6331 00002A27 64656320696E697469- 6331 00002A30 616C697A6174696F6E- 6331 00002A39 206572726F722021 6332 00002A41 0D0A00 db CR, LF, 0 ; 07/12/2024 6333 6334 ; 25/11/2023 6335 msg_no_vra: 6336 00002A44 0A0D db 10,13 6337 00002A46 4E6F20565241207375- db 'No VRA support ! Only 48 kHZ sample rate supported !' 6337 00002A4F 70706F72742021204F- 6337 00002A58 6E6C79203438206B48- 6337 00002A61 5A2073616D706C6520- 6337 00002A6A 726174652073757070- 6337 00002A73 6F727465642021 6338 00002A7A 0A0D00 db 10,13,0 6339 6340 ; 19/11/2024 6341 ; 03/06/2017 6342 hex_chars: 6343 00002A7D 303132333435363738- db '0123456789ABCDEF', 0 6343 00002A86 3941424344454600 6344 msgAC97Info: 6345 00002A8E 0D0A db 0Dh, 0Ah 6346 00002A90 204143393720417564- db ' AC97 Audio Controller & Codec Info', 0Dh, 0Ah 6346 00002A99 696F20436F6E74726F- 6346 00002AA2 6C6C6572202620436F- 6346 00002AAB 64656320496E666F0D- 6346 00002AB4 0A 6347 00002AB5 2056656E646F722049- db ' Vendor ID: ' 6347 00002ABE 443A20 6348 msgVendorId: 6349 00002AC1 303030306820446576- db '0000h Device ID: ' 6349 00002ACA 6963652049443A20 6350 msgDevId: 6351 00002AD2 30303030680D0A db '0000h', 0Dh, 0Ah 6352 00002AD9 204275733A20 db ' Bus: ' 6353 msgBusNo: 6354 00002ADF 303068204465766963- db '00h Device: ' 6354 00002AE8 653A20 6355 msgDevNo: 6356 00002AEB 3030682046756E6374- db '00h Function: ' 6356 00002AF4 696F6E3A20 6357 msgFncNo: 6358 00002AF9 303068 db '00h' 6359 00002AFC 0D0A db 0Dh, 0Ah 6360 00002AFE 204E414D4241523A20 db ' NAMBAR: ' 6361 msgNamBar: 6362 00002B07 30303030682020 db '0000h ' 6363 00002B0E 4E41424D4241523A20 db 'NABMBAR: ' 6364 msgNabmBar: 6365 00002B17 303030306820204952- db '0000h IRQ: ' 6365 00002B20 513A20 6366 msgIRQ: 6367 00002B23 3030 dw 3030h 6368 00002B25 0D0A00 db 0Dh, 0Ah, 0 6369 ; 25/11/2023 6370 msgVRAheader: 6371 00002B28 205652412073757070- db ' VRA support: ' 6371 00002B31 6F72743A20 6372 00002B36 00 db 0 6373 msgVRAyes: 6374 00002B37 5945530D0A00 db 'YES', 0Dh, 0Ah, 0 6375 msgVRAno: 6376 00002B3D 4E4F200D0A db 'NO ', 0Dh, 0Ah 6377 00002B42 2028496E746572706F- db ' (Interpolated sample rate playing method)' 6377 00002B4B 6C617465642073616D- 6377 00002B54 706C65207261746520- 6377 00002B5D 706C6179696E67206D- 6377 00002B66 6574686F6429 6378 00002B6C 0D0A00 db 0Dh, 0Ah, 0 6379 6380 00002B6F 90 align 4 6381 6382 ; ------------------------------------------------------------- 6383 6384 ; 21/12/2024 6385 SplashScreen: 6386 00002B70 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6386 00002B79 202020202020202020- 6386 00002B82 202020202020202020- 6386 00002B8B 202020202020202020- 6386 00002B94 202020202020202020- 6386 00002B9D 202020202020202020- 6386 00002BA6 202020202020202020- 6386 00002BAF 202020202020202020- 6386 00002BB8 2020202020DDDBDE 6387 00002BC0 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6387 00002BC9 202020202020202020- 6387 00002BD2 202020202020202020- 6387 00002BDB 202020202020202020- 6387 00002BE4 202020202020202020- 6387 00002BED 202020202020202020- 6387 00002BF6 202020202020202020- 6387 00002BFF 202020202020202020- 6387 00002C08 2020202020DDDBDE 6388 00002C10 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6388 00002C19 202020202020202020- 6388 00002C22 202020202020202020- 6388 00002C2B 202020202020202020- 6388 00002C34 202020202020202020- 6388 00002C3D 202020202020202020- 6388 00002C46 202020202020202020- 6388 00002C4F 202020202020202020- 6388 00002C58 2020202020DDDBDE 6389 00002C60 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6389 00002C69 202020202020202020- 6389 00002C72 202020202020202020- 6389 00002C7B 202020202020202020- 6389 00002C84 202020202020202020- 6389 00002C8D 202020202020202020- 6389 00002C96 202020202020202020- 6389 00002C9F 202020202020202020- 6389 00002CA8 2020202020DDDBDE 6390 00002CB0 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6390 00002CB9 202020202020202020- 6390 00002CC2 202020202020202020- 6390 00002CCB 202020202020202020- 6390 00002CD4 202020202020202020- 6390 00002CDD 202020202020202020- 6390 00002CE6 202020202020202020- 6390 00002CEF 202020202020202020- 6390 00002CF8 2020202020DDDBDE 6391 00002D00 DDDBDE202020202020- db 221, 219, 222, " _______ ______ _______. ", 221, 219, 222 6391 00002D09 202020202020202020- 6391 00002D12 2020202020205F5F5F- 6391 00002D1B 5F5F5F5F2020205F5F- 6391 00002D24 5F5F5F5F2020202020- 6391 00002D2D 2020205F5F5F5F5F5F- 6391 00002D36 5F2E20202020202020- 6391 00002D3F 202020202020202020- 6391 00002D48 2020202020DDDBDE 6392 00002D50 DDDBDE202020202020- db 221, 219, 222, " | \ / __ \ / | ", 221, 219, 222 6392 00002D59 202020202020202020- 6392 00002D62 20202020207C202020- 6392 00002D6B 202020205C202F2020- 6392 00002D74 5F5F20205C20202020- 6392 00002D7D 20202F202020202020- 6392 00002D86 207C20202020202020- 6392 00002D8F 202020202020202020- 6392 00002D98 2020202020DDDBDE 6393 00002DA0 DDDBDE202020202020- db 221, 219, 222, " | .--. | | | | | (----` ", 221, 219, 222 6393 00002DA9 202020202020202020- 6393 00002DB2 20202020207C20202E- 6393 00002DBB 2D2D2E20207C20207C- 6393 00002DC4 20207C20207C202020- 6393 00002DCD 207C202020282D2D2D- 6393 00002DD6 2D6020202020202020- 6393 00002DDF 202020202020202020- 6393 00002DE8 2020202020DDDBDE 6394 00002DF0 DDDBDE202020202020- db 221, 219, 222, " | | | | | | | \ \ ", 221, 219, 222 6394 00002DF9 202020202020202020- 6394 00002E02 20202020207C20207C- 6394 00002E0B 20207C20207C20207C- 6394 00002E14 20207C20207C202020- 6394 00002E1D 20205C2020205C2020- 6394 00002E26 202020202020202020- 6394 00002E2F 202020202020202020- 6394 00002E38 2020202020DDDBDE 6395 00002E40 DDDBDE202020202020- db 221, 219, 222, " | '--' | `--' | .----) | ", 221, 219, 222 6395 00002E49 202020202020202020- 6395 00002E52 20202020207C202027- 6395 00002E5B 2D2D2720207C202060- 6395 00002E64 2D2D2720207C202E2D- 6395 00002E6D 2D2D2D292020207C20- 6395 00002E76 202020202020202020- 6395 00002E7F 202020202020202020- 6395 00002E88 2020202020DDDBDE 6396 00002E90 DDDBDE202020202020- db 221, 219, 222, " |_______/ \______/ |_______/ ", 221, 219, 222 6396 00002E99 202020202020202020- 6396 00002EA2 20202020207C5F5F5F- 6396 00002EAB 5F5F5F5F2F205C5F5F- 6396 00002EB4 5F5F5F5F2F20207C5F- 6396 00002EBD 5F5F5F5F5F5F2F2020- 6396 00002EC6 202020202020202020- 6396 00002ECF 202020202020202020- 6396 00002ED8 2020202020DDDBDE 6397 00002EE0 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6397 00002EE9 202020202020202020- 6397 00002EF2 202020202020202020- 6397 00002EFB 202020202020202020- 6397 00002F04 202020202020202020- 6397 00002F0D 202020202020202020- 6397 00002F16 202020202020202020- 6397 00002F1F 202020202020202020- 6397 00002F28 2020202020DDDBDE 6398 00002F30 DDDBDE20202020202E- db 221, 219, 222, " .______ __ ___ ____ ____ _______ .______ ", 221, 219, 222 6398 00002F39 5F5F5F5F5F5F202020- 6398 00002F42 205F5F202020202020- 6398 00002F4B 202020205F5F5F2020- 6398 00002F54 205F5F5F5F20202020- 6398 00002F5D 5F5F5F5F20205F5F5F- 6398 00002F66 5F5F5F5F202E5F5F5F- 6398 00002F6F 5F5F5F202020202020- 6398 00002F78 2020202020DDDBDE 6399 00002F80 DDDBDE20202020207C- db 221, 219, 222, " | _ \ | | / \ \ \ / / | ____|| _ \ ", 221, 219, 222 6399 00002F89 2020205F20205C2020- 6399 00002F92 7C20207C2020202020- 6399 00002F9B 2020202F2020205C20- 6399 00002FA4 205C2020205C20202F- 6399 00002FAD 2020202F207C202020- 6399 00002FB6 5F5F5F5F7C7C202020- 6399 00002FBF 5F20205C2020202020- 6399 00002FC8 2020202020DDDBDE 6400 00002FD0 DDDBDE20202020207C- db 221, 219, 222, " | |_) | | | / ^ \ \ \/ / | |__ | |_) | ", 221, 219, 222 6400 00002FD9 20207C5F2920207C20- 6400 00002FE2 7C20207C2020202020- 6400 00002FEB 20202F20205E20205C- 6400 00002FF4 20205C2020205C2F20- 6400 00002FFD 20202F20207C20207C- 6400 00003006 5F5F2020207C20207C- 6400 0000300F 5F2920207C20202020- 6400 00003018 2020202020DDDBDE 6401 00003020 DDDBDE20202020207C- db 221, 219, 222, " | ___/ | | / /_\ \ \_ _/ | __| | / ", 221, 219, 222 6401 00003029 2020205F5F5F2F2020- 6401 00003032 7C20207C2020202020- 6401 0000303B 202F20202F5F5C2020- 6401 00003044 5C20205C5F20202020- 6401 0000304D 5F2F2020207C202020- 6401 00003056 5F5F7C20207C202020- 6401 0000305F 2020202F2020202020- 6401 00003068 2020202020DDDBDE 6402 00003070 DDDBDE20202020207C- db 221, 219, 222, " | | | `----./ _____ \ | | | |____ | |\ \----. ", 221, 219, 222 6402 00003079 20207C202020202020- 6402 00003082 7C2020602D2D2D2D2E- 6402 0000308B 2F20205F5F5F5F5F20- 6402 00003094 205C2020207C20207C- 6402 0000309D 20202020207C20207C- 6402 000030A6 5F5F5F5F207C20207C- 6402 000030AF 5C20205C2D2D2D2D2E- 6402 000030B8 2020202020DDDBDE 6403 000030C0 DDDBDE20202020207C- db 221, 219, 222, " | _| |_______/__/ \__\ |__| |_______|| _| `._____| ", 221, 219, 222 6403 000030C9 205F7C202020202020- 6403 000030D2 7C5F5F5F5F5F5F5F2F- 6403 000030DB 5F5F2F20202020205C- 6403 000030E4 5F5F5C20207C5F5F7C- 6403 000030ED 20202020207C5F5F5F- 6403 000030F6 5F5F5F5F7C7C205F7C- 6403 000030FF 20602E5F5F5F5F5F7C- 6403 00003108 2020202020DDDBDE 6404 00003110 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6404 00003119 202020202020202020- 6404 00003122 202020202020202020- 6404 0000312B 202020202020202020- 6404 00003134 202020202020202020- 6404 0000313D 202020202020202020- 6404 00003146 202020202020202020- 6404 0000314F 202020202020202020- 6404 00003158 2020202020DDDBDE 6405 00003160 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6405 00003169 202020202020202020- 6405 00003172 202020202020202020- 6405 0000317B 202020202020202020- 6405 00003184 202020202020202020- 6405 0000318D 202020202020202020- 6405 00003196 202020202020202020- 6405 0000319F 202020202020202020- 6405 000031A8 2020202020DDDBDE 6406 000031B0 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6406 000031B9 202020202020202020- 6406 000031C2 202020202020202020- 6406 000031CB 202020202020202020- 6406 000031D4 202020202020202020- 6406 000031DD 202020202020202020- 6406 000031E6 202020202020202020- 6406 000031EF 202020202020202020- 6406 000031F8 2020202020DDDBDE 6407 00003200 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6407 00003209 202020202020202020- 6407 00003212 202020202020202020- 6407 0000321B 202020202020202020- 6407 00003224 202020202020202020- 6407 0000322D 202020202020202020- 6407 00003236 202020202020202020- 6407 0000323F 202020202020202020- 6407 00003248 2020202020DDDBDE 6408 00003250 DDDBDE202020202020- db 221, 219, 222, " WELCOME TO ", 221, 219, 222 6408 00003259 202020202020202020- 6408 00003262 202020202020202020- 6408 0000326B 202020202020202057- 6408 00003274 454C434F4D4520544F- 6408 0000327D 202020202020202020- 6408 00003286 202020202020202020- 6408 0000328F 202020202020202020- 6408 00003298 2020202020DDDBDE 6409 000032A0 DDDBDE202020202020- db 221, 219, 222, " DOS PLAYER ", 221, 219, 222 6409 000032A9 202020202020202020- 6409 000032B2 202020202020202020- 6409 000032BB 202020202020202044- 6409 000032C4 4F5320504C41594552- 6409 000032CD 202020202020202020- 6409 000032D6 202020202020202020- 6409 000032DF 202020202020202020- 6409 000032E8 2020202020DDDBDE 6410 000032F0 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6410 000032F9 202020202020202020- 6410 00003302 202020202020202020- 6410 0000330B 202020202020202020- 6410 00003314 202020202020202020- 6410 0000331D 202020202020202020- 6410 00003326 202020202020202020- 6410 0000332F 202020202020202020- 6410 00003338 2020202020DDDBDE 6411 00003340 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6411 00003349 202020202020202020- 6411 00003352 202020202020202020- 6411 0000335B 202020202020202020- 6411 00003364 202020202020202020- 6411 0000336D 202020202020202020- 6411 00003376 202020202020202020- 6411 0000337F 202020202020202020- 6411 00003388 2020202020DDDBDE 6412 00003390 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6412 00003399 202020202020202020- 6412 000033A2 202020202020202020- 6412 000033AB 202020202020202020- 6412 000033B4 202020202020202020- 6412 000033BD 202020202020202020- 6412 000033C6 202020202020202020- 6412 000033CF 202020202020202020- 6412 000033D8 2020202020DDDBDE 6413 000033E0 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6413 000033E9 202020202020202020- 6413 000033F2 202020202020202020- 6413 000033FB 202020202020202020- 6413 00003404 202020202020202020- 6413 0000340D 202020202020202020- 6413 00003416 202020202020202020- 6413 0000341F 202020202020202020- 6413 00003428 2020202020DDDBDE 6414 00003430 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6414 00003439 202020202020202020- 6414 00003442 202020202020202020- 6414 0000344B 202020202020202020- 6414 00003454 202020202020202020- 6414 0000345D 202020202020202020- 6414 00003466 202020202020202020- 6414 0000346F 202020202020202020- 6414 00003478 2020202020DDDBDE 6415 00003480 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6415 00003489 202020202020202020- 6415 00003492 202020202020202020- 6415 0000349B 202020202020202020- 6415 000034A4 202020202020202020- 6415 000034AD 202020202020202020- 6415 000034B6 202020202020202020- 6415 000034BF 202020202020202020- 6415 000034C8 2020202020DDDBDE 6416 000034D0 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6416 000034D9 202020202020202020- 6416 000034E2 202020202020202020- 6416 000034EB 202020202020202020- 6416 000034F4 202020202020202020- 6416 000034FD 202020202020202020- 6416 00003506 202020202020202020- 6416 0000350F 202020202020202020- 6416 00003518 2020202020DDDBDE 6417 00003520 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6417 00003529 202020202020202020- 6417 00003532 202020202020202020- 6417 0000353B 202020202020202020- 6417 00003544 202020202020202020- 6417 0000354D 202020202020202020- 6417 00003556 202020202020202020- 6417 0000355F 202020202020202020- 6417 00003568 2020202020DDDBDE 6418 00003570 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6418 00003579 202020202020202020- 6418 00003582 202020202020202020- 6418 0000358B 202020202020202020- 6418 00003594 202020202020202020- 6418 0000359D 202020202020202020- 6418 000035A6 202020202020202020- 6418 000035AF 202020202020202020- 6418 000035B8 2020202020DDDBDE 6419 000035C0 DDDBDE202020202020- db 221, 219, 222, " ", 221, 219, 222 6419 000035C9 202020202020202020- 6419 000035D2 202020202020202020- 6419 000035DB 202020202020202020- 6419 000035E4 202020202020202020- 6419 000035ED 202020202020202020- 6419 000035F6 202020202020202020- 6419 000035FF 202020202020202020- 6419 00003608 2020202020DDDBDE 6420 00003610 00 db 0 6421 6422 ; ------------------------------------------------------------- 6423 6424 ; 22/12/2024 6425 ; 21/12/2024 6426 PlayingScreen: 6427 00003611 DBDBDBDBDBDBDBDBDB- db 34 dup(219), " DOS Player ", 34 dup(219) 6427 0000361A DBDBDBDBDBDBDBDBDB- 6427 00003623 DBDBDBDBDBDBDBDBDB- 6427 0000362C DBDBDBDBDBDBDB2044- 6427 00003635 4F5320506C61796572- 6427 0000363E 20DBDBDBDBDBDBDBDB- 6427 00003647 DBDBDBDBDBDBDBDBDB- 6427 00003650 DBDBDBDBDBDBDBDBDB- 6427 00003659 DBDBDBDBDBDBDBDB 6428 00003661 C9CDCDCDCDCDCDCDCD- db 201, 78 dup(205), 187 6428 0000366A CDCDCDCDCDCDCDCDCD- 6428 00003673 CDCDCDCDCDCDCDCDCD- 6428 0000367C CDCDCDCDCDCDCDCDCD- 6428 00003685 CDCDCDCDCDCDCDCDCD- 6428 0000368E CDCDCDCDCDCDCDCDCD- 6428 00003697 CDCDCDCDCDCDCDCDCD- 6428 000036A0 CDCDCDCDCDCDCDCDCD- 6428 000036A9 CDCDCDCDCDCDCDBB 6429 000036B1 BA2020202020202020- db 186, 33 dup(32), " User Guide ", 33 dup(32), 186 6429 000036BA 202020202020202020- 6429 000036C3 202020202020202020- 6429 000036CC 202020202020202055- 6429 000036D5 736572204775696465- 6429 000036DE 202020202020202020- 6429 000036E7 202020202020202020- 6429 000036F0 202020202020202020- 6429 000036F9 20202020202020BA 6430 00003701 BA2020202020203C53- db 186, 6 dup(32), " Play/Pause ", 4 dup(32), " Hardware Info", 9 dup(32), 186 6430 0000370A 706163653E20202020- 6430 00003713 2020202020506C6179- 6430 0000371C 2F5061757365202020- 6430 00003725 20202020203C483E20- 6430 0000372E 202020202020202020- 6430 00003737 202020486172647761- 6430 00003740 726520496E666F2020- 6430 00003749 20202020202020BA 6431 00003751 BA2020202020203C53- db 186, 6 dup(32), " Stop ", 4 dup(32), " Wave Lighting", 9 dup(32), 186 6431 0000375A 3E2020202020202020- 6431 00003763 202020202053746F70- 6431 0000376C 202020202020202020- 6431 00003775 20202020203C456E74- 6431 0000377E 65723E202020202020- 6431 00003787 20202057617665204C- 6431 00003790 69676874696E672020- 6431 00003799 20202020202020BA 6432 000037A1 BA2020202020203C46- db 186, 6 dup(32), " Forwards ", 4 dup(32), "<+>/<-> Inc/Dec Volume", 8 dup(32), 186 6432 000037AA 3E2020202020202020- 6432 000037B3 2020202020466F7277- 6432 000037BC 617264732020202020- 6432 000037C5 20202020203C2B3E2F- 6432 000037CE 3C2D3E202020202020- 6432 000037D7 202020496E632F4465- 6432 000037E0 6320566F6C756D6520- 6432 000037E9 20202020202020BA 6433 000037F1 BA2020202020203C42- db 186, 6 dup(32), " Backwards ", 4 dup(32), " Quit Program ", 9 dup(32), 186 6433 000037FA 3E2020202020202020- 6433 00003803 20202020204261636B- 6433 0000380C 776172647320202020- 6433 00003815 20202020203C513E20- 6433 0000381E 202020202020202020- 6433 00003827 202020517569742050- 6433 00003830 726F6772616D202020- 6433 00003839 20202020202020BA 6434 00003841 CCCDCDCDCDCDCDCDCD- db 204, 78 dup(205), 185 6434 0000384A CDCDCDCDCDCDCDCDCD- 6434 00003853 CDCDCDCDCDCDCDCDCD- 6434 0000385C CDCDCDCDCDCDCDCDCD- 6434 00003865 CDCDCDCDCDCDCDCDCD- 6434 0000386E CDCDCDCDCDCDCDCDCD- 6434 00003877 CDCDCDCDCDCDCDCDCD- 6434 00003880 CDCDCDCDCDCDCDCDCD- 6434 00003889 CDCDCDCDCDCDCDB9 6435 00003891 BA2020202020204669- db 186, 6 dup(32), "File Name : ", 4 dup(32), "Bit-Rate : 0 Bits ", 9 dup(32), 186 6435 0000389A 6C65204E616D65203A- 6435 000038A3 202020202020202020- 6435 000038AC 202020202020202020- 6435 000038B5 20202020204269742D- 6435 000038BE 5261746520203A2020- 6435 000038C7 202020302020426974- 6435 000038D0 732020202020202020- 6435 000038D9 20202020202020BA 6436 000038E1 BA2020202020204672- db 186, 6 dup(32), "Frequency : 0 Hz ", 4 dup(32), "#-Channels: 0 ", 9 dup(32), 186 6436 000038EA 657175656E6379203A- 6436 000038F3 202020202030202020- 6436 000038FC 2020487A2020202020- 6436 00003905 2020202020232D4368- 6436 0000390E 616E6E656C733A2020- 6436 00003917 202020302020202020- 6436 00003920 202020202020202020- 6436 00003929 20202020202020BA 6437 00003931 C8CDCDCDCDCDCDCDCD- db 200, 78 dup(205), 188 6437 0000393A CDCDCDCDCDCDCDCDCD- 6437 00003943 CDCDCDCDCDCDCDCDCD- 6437 0000394C CDCDCDCDCDCDCDCDCD- 6437 00003955 CDCDCDCDCDCDCDCDCD- 6437 0000395E CDCDCDCDCDCDCDCDCD- 6437 00003967 CDCDCDCDCDCDCDCDCD- 6437 00003970 CDCDCDCDCDCDCDCDCD- 6437 00003979 CDCDCDCDCDCDCDBC 6438 00003981 202020202020202020- db 80 dup(32) 6438 0000398A 202020202020202020- 6438 00003993 202020202020202020- 6438 0000399C 202020202020202020- 6438 000039A5 202020202020202020- 6438 000039AE 202020202020202020- 6438 000039B7 202020202020202020- 6438 000039C0 202020202020202020- 6438 000039C9 2020202020202020 6439 improper_samplerate_txt: 6440 read_error_txt: 6441 000039D1 202020202020202020- db 80 dup(32) 6441 000039DA 202020202020202020- 6441 000039E3 202020202020202020- 6441 000039EC 202020202020202020- 6441 000039F5 202020202020202020- 6441 000039FE 202020202020202020- 6441 00003A07 202020202020202020- 6441 00003A10 202020202020202020- 6441 00003A19 2020202020202020 6442 00003A21 202020202020202020- db 80 dup(32) 6442 00003A2A 202020202020202020- 6442 00003A33 202020202020202020- 6442 00003A3C 202020202020202020- 6442 00003A45 202020202020202020- 6442 00003A4E 202020202020202020- 6442 00003A57 202020202020202020- 6442 00003A60 202020202020202020- 6442 00003A69 2020202020202020 6443 00003A71 202020202020202020- db 80 dup(32) 6443 00003A7A 202020202020202020- 6443 00003A83 202020202020202020- 6443 00003A8C 202020202020202020- 6443 00003A95 202020202020202020- 6443 00003A9E 202020202020202020- 6443 00003AA7 202020202020202020- 6443 00003AB0 202020202020202020- 6443 00003AB9 2020202020202020 6444 00003AC1 202020202020202020- db 80 dup(32) 6444 00003ACA 202020202020202020- 6444 00003AD3 202020202020202020- 6444 00003ADC 202020202020202020- 6444 00003AE5 202020202020202020- 6444 00003AEE 202020202020202020- 6444 00003AF7 202020202020202020- 6444 00003B00 202020202020202020- 6444 00003B09 2020202020202020 6445 00003B11 202020202020202020- db 80 dup(32) 6445 00003B1A 202020202020202020- 6445 00003B23 202020202020202020- 6445 00003B2C 202020202020202020- 6445 00003B35 202020202020202020- 6445 00003B3E 202020202020202020- 6445 00003B47 202020202020202020- 6445 00003B50 202020202020202020- 6445 00003B59 2020202020202020 6446 00003B61 202020202020202020- db 80 dup(32) 6446 00003B6A 202020202020202020- 6446 00003B73 202020202020202020- 6446 00003B7C 202020202020202020- 6446 00003B85 202020202020202020- 6446 00003B8E 202020202020202020- 6446 00003B97 202020202020202020- 6446 00003BA0 202020202020202020- 6446 00003BA9 2020202020202020 6447 00003BB1 202020202020202020- db 80 dup(32) 6447 00003BBA 202020202020202020- 6447 00003BC3 202020202020202020- 6447 00003BCC 202020202020202020- 6447 00003BD5 202020202020202020- 6447 00003BDE 202020202020202020- 6447 00003BE7 202020202020202020- 6447 00003BF0 202020202020202020- 6447 00003BF9 2020202020202020 6448 00003C01 202020202020202020- db 80 dup(32) 6448 00003C0A 202020202020202020- 6448 00003C13 202020202020202020- 6448 00003C1C 202020202020202020- 6448 00003C25 202020202020202020- 6448 00003C2E 202020202020202020- 6448 00003C37 202020202020202020- 6448 00003C40 202020202020202020- 6448 00003C49 2020202020202020 6449 00003C51 202020202020202020- db 80 dup(32) 6449 00003C5A 202020202020202020- 6449 00003C63 202020202020202020- 6449 00003C6C 202020202020202020- 6449 00003C75 202020202020202020- 6449 00003C7E 202020202020202020- 6449 00003C87 202020202020202020- 6449 00003C90 202020202020202020- 6449 00003C99 2020202020202020 6450 00003CA1 202020202020202020- db 80 dup(32) 6450 00003CAA 202020202020202020- 6450 00003CB3 202020202020202020- 6450 00003CBC 202020202020202020- 6450 00003CC5 202020202020202020- 6450 00003CCE 202020202020202020- 6450 00003CD7 202020202020202020- 6450 00003CE0 202020202020202020- 6450 00003CE9 2020202020202020 6451 00003CF1 202020202020202020- db 80 dup(32) 6451 00003CFA 202020202020202020- 6451 00003D03 202020202020202020- 6451 00003D0C 202020202020202020- 6451 00003D15 202020202020202020- 6451 00003D1E 202020202020202020- 6451 00003D27 202020202020202020- 6451 00003D30 202020202020202020- 6451 00003D39 2020202020202020 6452 00003D41 202020202020202020- db 80 dup(32) 6452 00003D4A 202020202020202020- 6452 00003D53 202020202020202020- 6452 00003D5C 202020202020202020- 6452 00003D65 202020202020202020- 6452 00003D6E 202020202020202020- 6452 00003D77 202020202020202020- 6452 00003D80 202020202020202020- 6452 00003D89 2020202020202020 6453 00003D91 202020202020202020- db 80 dup(32) 6453 00003D9A 202020202020202020- 6453 00003DA3 202020202020202020- 6453 00003DAC 202020202020202020- 6453 00003DB5 202020202020202020- 6453 00003DBE 202020202020202020- 6453 00003DC7 202020202020202020- 6453 00003DD0 202020202020202020- 6453 00003DD9 2020202020202020 6454 00003DE1 202020202020202020- db 80 dup(32) 6454 00003DEA 202020202020202020- 6454 00003DF3 202020202020202020- 6454 00003DFC 202020202020202020- 6454 00003E05 202020202020202020- 6454 00003E0E 202020202020202020- 6454 00003E17 202020202020202020- 6454 00003E20 202020202020202020- 6454 00003E29 2020202020202020 6455 00003E31 202020202020202020- db 80 dup(32) 6455 00003E3A 202020202020202020- 6455 00003E43 202020202020202020- 6455 00003E4C 202020202020202020- 6455 00003E55 202020202020202020- 6455 00003E5E 202020202020202020- 6455 00003E67 202020202020202020- 6455 00003E70 202020202020202020- 6455 00003E79 2020202020202020 6456 00003E81 202020202020202020- db 80 dup(32) 6456 00003E8A 202020202020202020- 6456 00003E93 202020202020202020- 6456 00003E9C 202020202020202020- 6456 00003EA5 202020202020202020- 6456 00003EAE 202020202020202020- 6456 00003EB7 202020202020202020- 6456 00003EC0 202020202020202020- 6456 00003EC9 2020202020202020 6457 00003ED1 202020202020202020- db 80 dup(32) 6457 00003EDA 202020202020202020- 6457 00003EE3 202020202020202020- 6457 00003EEC 202020202020202020- 6457 00003EF5 202020202020202020- 6457 00003EFE 202020202020202020- 6457 00003F07 202020202020202020- 6457 00003F10 202020202020202020- 6457 00003F19 2020202020202020 6458 00003F21 202020202020202020- db 80 dup(32) 6458 00003F2A 202020202020202020- 6458 00003F33 202020202020202020- 6458 00003F3C 202020202020202020- 6458 00003F45 202020202020202020- 6458 00003F4E 202020202020202020- 6458 00003F57 202020202020202020- 6458 00003F60 202020202020202020- 6458 00003F69 2020202020202020 6459 00003F71 CDCDCDCDCDCDCDCDCD- db 80 dup(205) 6459 00003F7A CDCDCDCDCDCDCDCDCD- 6459 00003F83 CDCDCDCDCDCDCDCDCD- 6459 00003F8C CDCDCDCDCDCDCDCDCD- 6459 00003F95 CDCDCDCDCDCDCDCDCD- 6459 00003F9E CDCDCDCDCDCDCDCDCD- 6459 00003FA7 CDCDCDCDCDCDCDCDCD- 6459 00003FB0 CDCDCDCDCDCDCDCDCD- 6459 00003FB9 CDCDCDCDCDCDCDCD 6460 00003FC1 202020202020202020- db 80 dup(32) 6460 00003FCA 202020202020202020- 6460 00003FD3 202020202020202020- 6460 00003FDC 202020202020202020- 6460 00003FE5 202020202020202020- 6460 00003FEE 202020202020202020- 6460 00003FF7 202020202020202020- 6460 00004000 202020202020202020- 6460 00004009 2020202020202020 6461 00004011 202020202020202020- db 33 dup(32), "00:00 ", 174, 175, " 00:00", 24 dup(32), "VOL 000%" 6461 0000401A 202020202020202020- 6461 00004023 202020202020202020- 6461 0000402C 20202020202030303A- 6461 00004035 303020AEAF2030303A- 6461 0000403E 303020202020202020- 6461 00004047 202020202020202020- 6461 00004050 202020202020202056- 6461 00004059 4F4C2030303025 6462 00004060 00 db 0 6463 6464 ; ------------------------------------------------------------- 6465 6466 program_msg: 6467 00004061 5452444F5320333836- db "TRDOS 386 v2.0.9 - ('sysvideo') Test Program - Dos Player" 6467 0000406A 2076322E302E39202D- 6467 00004073 202827737973766964- 6467 0000407C 656F27292054657374- 6467 00004085 2050726F6772616D20- 6467 0000408E 2D20446F7320506C61- 6467 00004097 796572 6468 0000409A 0D0A db 0Dh, 0Ah 6469 0000409C 6279204572646F6761- db "by Erdogan Tan - 22/12/2024" 6469 000040A5 6E2054616E202D2032- 6469 000040AE 322F31322F32303234 6470 000040B7 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 6471 6472 000040BB 507265737320455343- db "Press ESC to exit .." 6472 000040C4 20746F206578697420- 6472 000040CD 2E2E 6473 000040CF 0D0A db 0Dh, 0Ah 6474 000040D1 0D0A db 0Dh, 0Ah 6475 000040D3 507265737320616E79- db "Press any key to continue .." 6475 000040DC 206B657920746F2063- 6475 000040E5 6F6E74696E7565202E- 6475 000040EE 2E 6476 nextline: 6477 000040EF 0D0A00 db 0Dh, 0Ah, 0 6478 6479 ; ------------------------------------------------------------- 6480 6481 ; 22/12/2024 6482 fillblock: 6483 000040F2 FF times 14 db 0FFh 6484 00004100 0000 dw 0 6485 6486 ; ------------------------------------------------------------- 6487 6488 ; 23/11/2024 6489 colors: 6490 00004102 0F0B0A0C0E090D0F db 0Fh, 0Bh, 0Ah, 0Ch, 0Eh, 09h, 0Dh, 0Fh 6491 ; white, cyan, green, red, yellow, blue, magenta 6492 0000410A 0B ccolor: db 0Bh ; cyan 6493 6494 EOF: 6495 6496 ; ------------------------------------------------------------- 6497 6498 bss: 6499 6500 ABSOLUTE bss 6501 6502 0000410B ?? alignb 4 6503 6504 ; 21/12/2024 6505 fontbuff1: 6506 0000410C resb 256*14 ; 8x14 font data (from system) 6507 fontbuff2: 6508 00004F0C resb 256*16 ; 8x16 font data (modif. from 8x14) 6509 6510 ; 11/12/2024 6511 wleds_addr: 6512 00005F0C resd 80*16 ; 32 bit addrs, 80 leds, 16 volume levels 6513 ; 22/12/2024 6514 prev_leds: 6515 0000730C resd 80 ; previous lighting leds 6516 6517 LFB_ADDR: 6518 0000744C ???????? resd 1 6519 ;nextrow: 6520 ;resd 1 6521 screenpos: ; hw = (cursor) row, lw = (cursor) column 6522 00007450 ???????? resd 1 6523 00007454 ???????? wcolor: resd 1 6524 00007458 ?? tcolor: resb 1 ; text color 6525 columns: 6526 00007459 ?? resb 1 6527 0000745A ?? pbprev: resb 1 ; previous progress bar indicator position 6528 6529 0000745B ?? alignb 4 6530 6531 bss_start: 6532 6533 ; 18/11/2024 6534 stopped: 6535 0000745C ?? resb 1 6536 0000745D ?? tLO: resb 1 6537 ; 21/11/2024 6538 0000745E ?? tLP: resb 1 6539 ; 19/11/2024 6540 0000745F ?? wleds: resb 1 6541 wleds_dif: 6542 00007460 ???????? resd 1 6543 00007464 ???????? pbuf_o: resd 1 6544 ; 07/12/2024 6545 00007468 ?? pbuf_s: resb 1 6546 6547 ; 07/12/2024 6548 ; 24/11/2024 6549 half_buffer: 6550 00007469 ?? resb 1 ; dma half buffer 1 or 2 (0 or 1) 6551 6552 ; 30/05/2024 6553 0000746A ?? VRA: resb 1 ; Variable Rate Audio Support Status 6554 6555 ; 30/11/2024 6556 0000746B ?? alignb 4 6557 6558 ;;;;;;;;;;;;;; 6559 ; 14/11/2024 6560 ; (Ref: player.asm, Matan Alfasi, 2017) 6561 WAVFILEHEADERbuff: 6562 RIFF_ChunkID: 6563 0000746C ???????? resd 1 ; Must be equal to "RIFF" - big-endian 6564 ; 0x52494646 6565 RIFF_ChunkSize: 6566 00007470 ???????? resd 1 ; Represents total file size, not 6567 ; including the first 2 fields 6568 ; (Total_File_Size - 8), little-endian 6569 RIFF_Format: 6570 00007474 ???????? resd 1 ; Must be equal to "WAVE" - big-endian 6571 ; 0x57415645 6572 6573 ;; WAVE header parameters ("Sub-chunk") 6574 WAVE_SubchunkID: 6575 00007478 ???????? resd 1 ; Must be equal to "fmt " - big-endian 6576 ; 0x666d7420 6577 WAVE_SubchunkSize: 6578 0000747C ???????? resd 1 ; Represents total chunk size 6579 WAVE_AudioFormat: 6580 00007480 ???? resw 1 ; PCM (Raw) - is 1, other - is a form 6581 ; of compression, not supported. 6582 WAVE_NumChannels: 6583 00007482 ???? resw 1 ; Number of channels, Mono-1, Stereo-2 6584 WAVE_SampleRate: 6585 00007484 ???????? resd 1 ; Frequency rate, in Hz (8000, 44100 ...) 6586 WAVE_ByteRate: 6587 00007488 ???????? resd 1 ; SampleRate * NumChannels * BytesPerSample 6588 WAVE_BlockAlign: 6589 0000748C ???? resw 1 ; NumChannels * BytesPerSample 6590 ; Number of bytes for one sample. 6591 WAVE_BitsPerSample: 6592 0000748E ???? resw 1 ; 8 = 8 bits, 16 = 16 bits, etc. 6593 6594 ;; DATA header parameters 6595 DATA_SubchunkID: 6596 00007490 ???????? resd 1 ; Must be equal to "data" - big-endian 6597 ; 0x64617461 6598 DATA_SubchunkSize: 6599 00007494 ???????? resd 1 ; NumSamples * NumChannels * BytesPerSample 6600 ; Number of bytes in the data. 6601 ;;;;;;;;;;;;;; 6602 6603 ; 15/11/2024 6604 cursortype: 6605 00007498 ???? resw 1 6606 0000749A ?? flags: resb 1 6607 ; 06/11/2023 6608 ac97_int_ln_reg: 6609 0000749B ?? resb 1 6610 filehandle: 6611 0000749C ???????? resd 1 6612 6613 ; 30/05/2024 6614 wav_file_name: 6615 000074A0 resb 80 ; wave file, path name (<= 80 bytes) 6616 000074F0 ???? resw 1 ; 30/11/2024 6617 6618 ; 08/11/2023 6619 ; 07/11/2023 6620 fbs_shift: 6621 000074F2 ?? resb 1 6622 ; 07/12/2024 6623 000074F3 ?? SRB: resb 1 6624 6625 ; 12/11/2016 - Erdogan Tan 6626 bus_dev_fn: 6627 000074F4 ???????? resd 1 6628 dev_vendor: 6629 000074F8 ???????? resd 1 6630 6631 ; 17/02/2017 6632 ; NAMBAR: Native Audio Mixer Base Address Register 6633 ; (ICH, Audio D31:F5, PCI Config Space) Address offset: 10h-13h 6634 ; NABMBAR: Native Audio Bus Mastering Base Address register 6635 ; (ICH, Audio D31:F5, PCI Config Space) Address offset: 14h-17h 6636 000074FC ???? NAMBAR: resw 1 ; BAR for mixer 6637 NABMBAR: 6638 000074FE ???? resw 1 ; BAR for bus master regs 6639 6640 ; 15/11/2024 6641 loadfromwavfile: 6642 00007500 ???????? resd 1 ; 'loadfromfile' or load+conversion proc address 6643 loadsize: 6644 00007504 ???????? resd 1 ; (.wav file) read count (bytes) per one time 6645 buffersize: 6646 00007508 ???????? resd 1 ; 16 bit samples (not bytes) 6647 6648 ; 14/11/2024 6649 TotalTime: 6650 0000750C ???????? resd 1 ; Total (WAV File) Playing Time in seconds 6651 ProgressTime: 6652 00007510 ???????? resd 1 6653 00007514 ???????? count: resd 1 ; byte count of one (wav file) read 6654 LoadedDataBytes: 6655 00007518 ???????? resd 1 ; total read/load count 6656 6657 timerticks: 6658 0000751C ???????? resd 1 ; (to eliminate excessive lookup of events in tuneloop) 6659 ; (in order to get the emulator/qemu to run correctly) 6660 ; 14/11/2024 6661 bss_end: 6662 6663 ; 02/12/2024 6664 00007520 alignb 4096 6665 6666 ; 07/12/2024 6667 ; 26/11/2023 6668 audio_buffer: 6669 00008000 resb 65536 ; DMA Buffer Size / 2 6670 6671 ; 01/12/2024 6672 ; 26/11/2023 6673 temp_buffer: 6674 00018000 resb 65536 ; rb BUFFERSIZE