1 ; **************************************************************************** 2 ; modplay.s (for TRDOS 386) 3 ; ---------------------------------------------------------------------------- 4 ; MODPLAY.PRG ! AC'97 (ICH) MOD PLAYER & VGA DEMO program by Erdogan TAN 5 ; 6 ; 24/06/2017 7 ; 8 ; [ Last Modification: 13/01/2026 ] ; modplayv.s (this file) 9 ; ; modified from modplayk.s (27/12/2024) 10 ; 11 ; Derived from source code of 'PLAY.EXE' (TINYPLAY) by Carlos Hasan (1993) 12 ; PLAY.EXE: PLAY.ASM, MODLOAD.ASM, MODPLAY.ASM, SB.ASM 13 ; 14 ; Modified by using the source code of 'tinyplay.s' ('TINYPLAY.PRG') 15 ; by Erdogan Tan (07/10/2017) 16 ; 17 ; Modified from 'playwav3.s' (13/06/2017) 18 ; 19 ; Modified from 'PLAYMOD.PRG' ('playmod.s') source code by Erdogan Tan 20 ; (23/06/2017) 21 ; 22 ; Derived from source code of 'TINYPLAY.COM' ('TINYPLAY.ASM') by Erdogan Tan 23 ; (04/03/2017) 24 ; Assembler: NASM 2.15 25 ; ---------------------------------------------------------------------------- 26 ; nasm modplay.s -l modplay.txt -o MODPLAY.PRG 27 ; **************************************************************************** 28 ; PLAYMOD.ASM by Erdogan Tan (for MSDOS) (15/02/2017) 29 30 ; 27/11/2024 (ref: vgaplay2.s, 27/12/2024) 31 ; modplayv.s - display/graphics : VESA VBE Mode 101h, 640*480, 256 colors 32 33 ; 14/07/2020 34 ; 31/12/2017 35 ; TRDOS 386 (v2.0) system calls 36 _ver equ 0 37 _exit equ 1 38 _fork equ 2 39 _read equ 3 40 _write equ 4 41 _open equ 5 42 _close equ 6 43 _wait equ 7 44 _create equ 8 45 _rename equ 9 46 _delete equ 10 47 _exec equ 11 48 _chdir equ 12 49 _time equ 13 50 _mkdir equ 14 51 _chmod equ 15 52 _rmdir equ 16 53 _break equ 17 54 _drive equ 18 55 _seek equ 19 56 _tell equ 20 57 _memory equ 21 58 _prompt equ 22 59 _path equ 23 60 _env equ 24 61 _stime equ 25 62 _quit equ 26 63 _intr equ 27 64 _dir equ 28 65 _emt equ 29 66 _ldrvt equ 30 67 _video equ 31 68 _audio equ 32 69 _timer equ 33 70 _sleep equ 34 71 _msg equ 35 72 _geterr equ 36 73 _fpstat equ 37 74 _pri equ 38 75 _rele equ 39 76 _fff equ 40 77 _fnf equ 41 78 _alloc equ 42 79 _dalloc equ 43 80 _calbac equ 44 81 _dma equ 45 82 83 %macro sys 1-4 84 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 85 ; 03/09/2015 86 ; 13/04/2015 87 ; Retro UNIX 386 v1 system call. 88 %if %0 >= 2 89 mov ebx, %2 90 %if %0 >= 3 91 mov ecx, %3 92 %if %0 = 4 93 mov edx, %4 94 %endif 95 %endif 96 %endif 97 mov eax, %1 98 ;int 30h 99 int 40h ; TRDOS 386 (TRDOS v2.0) 100 %endmacro 101 102 ; TRDOS 386 (and Retro UNIX 386 v1) system call format: 103 ; sys systemcall (eax) , , 104 105 ; 19/06/2017 106 BUFFERSIZE equ 32768 107 108 ; ---------------------------------------------------------------------------- 109 ; Tiny MOD Player v0.1b by Carlos Hasan. 110 ; July 14th, 1993. 111 112 ;============================================================================= 113 ; 114 ;============================================================================= 115 116 [BITS 32] 117 [org 0] 118 119 Start: 120 ; clear bss 121 00000000 B9[00000800] mov ecx, EOF 122 00000005 BF[130F0000] mov edi, bss_start 123 0000000A 29F9 sub ecx, edi 124 0000000C D1E9 shr ecx, 1 125 0000000E 31C0 xor eax, eax 126 00000010 F366AB rep stosw 127 128 ; Detect (& Enable) AC'97 (ICH) Audio Device 129 00000013 E833020000 call DetectICH 130 00000018 731B jnc short GetFileName 131 132 _dev_not_ready: 133 ; couldn't find the audio device! 134 sys _msg, noDevMsg, 255, 0Fh 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 0000001A BB[58020000] <1> mov ebx, %2 90 <1> %if %0 >= 3 91 0000001F B9FF000000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 00000024 BA0F000000 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000029 B823000000 <1> mov eax, %1 98 <1> 99 0000002E CD40 <1> int 40h 135 00000030 E9EE010000 jmp Exit 136 137 GetFileName: 138 00000035 89E6 mov esi, esp 139 00000037 AD lodsd 140 00000038 83F802 cmp eax, 2 ; two arguments 141 ; (program file name & mod file name) 142 0000003B 0F82EB010000 jb pmsg_2017 ; nothing to do 143 144 00000041 AD lodsd ; program file name address 145 00000042 AD lodsd ; mod file name address (file to be read) 146 00000043 89C6 mov esi, eax 147 00000045 BF[C87B0000] mov edi, mod_file_name 148 ScanName: 149 0000004A AC lodsb 150 0000004B 84C0 test al, al 151 0000004D 0F84D9010000 je pmsg_2017 152 00000053 3C20 cmp al, 20h 153 00000055 74F3 je short ScanName ; scan start of name. 154 00000057 AA stosb 155 00000058 B4FF mov ah, 0FFh 156 a_0: 157 0000005A FEC4 inc ah 158 a_1: 159 0000005C AC lodsb 160 0000005D AA stosb 161 0000005E 3C2E cmp al, '.' 162 00000060 74F8 je short a_0 163 00000062 20C0 and al, al 164 00000064 75F6 jnz short a_1 165 166 00000066 08E4 or ah, ah ; if period NOT found, 167 00000068 750B jnz short PrintMesg ; then add a .MOD extension. 168 SetExt: 169 0000006A 4F dec edi 170 0000006B C7072E4D4F44 mov dword [edi], '.MOD' 171 00000071 C6470400 mov byte [edi+4], 0 172 PrintMesg: 173 ; Prints the Credits Text. 174 sys _msg, Credits, 255, 0Fh 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 00000075 BB[8F0D0000] <1> mov ebx, %2 90 <1> %if %0 >= 3 91 0000007A B9FF000000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 0000007F BA0F000000 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000084 B823000000 <1> mov eax, %1 98 <1> 99 00000089 CD40 <1> int 40h 175 _1: 176 ; 19/06/2017 177 ; Allocate Audio Buffer (for user) 178 sys _audio, 0200h, BUFFERSIZE, Audio_Buffer 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 0000008B BB00020000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 00000090 B900800000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 00000095 BA[00000100] <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 0000009A B820000000 <1> mov eax, %1 98 <1> 99 0000009F CD40 <1> int 40h 179 000000A1 0F82E0000000 jc error_exit 180 _2: 181 ; Initialize Audio Device 182 sys _audio, 0301h, 0, ac97_int_handler 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 000000A7 BB01030000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 000000AC B900000000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 000000B1 BA[83020000] <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 000000B6 B820000000 <1> mov eax, %1 98 <1> 99 000000BB CD40 <1> int 40h 183 000000BD 0F82C4000000 jc error_exit 184 185 ; 27/12/2024 186 ; Set Master Volume Level (to 0) 187 ;sys _audio, 0B00h, 0 188 189 LoadMod: 190 000000C3 BF[C87B0000] mov edi, mod_file_name 191 000000C8 E8D1020000 call LoadModule ; Load the MODule... 192 ; 08/10/2017 193 000000CD 731B jnc short _3 ; any error loading? 194 195 ; yes, print error and Exit. 196 197 sys _msg, ErrorMesg, 255, 0Fh 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 000000CF BB[C30D0000] <1> mov ebx, %2 90 <1> %if %0 >= 3 91 000000D4 B9FF000000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 000000D9 BA0F000000 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 000000DE B823000000 <1> mov eax, %1 98 <1> 99 000000E3 CD40 <1> int 40h 198 199 000000E5 E939010000 jmp Exit 200 201 _3: 202 ; 10/06/2017 203 sys _audio, 0E00h ; get audio controller info 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 000000EA BB000E0000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 000000EF B820000000 <1> mov eax, %1 98 <1> 99 000000F4 CD40 <1> int 40h 204 000000F6 0F828B000000 jc error_exit 205 206 ;cmp ah, 2 ; AC'97 (Intel ICH) Audio Controller 207 ;jne _dev_not_ready 208 209 ; EAX = IRQ Number in AL 210 ; Audio Device Number in AH 211 ; EBX = DEV/VENDOR ID 212 ; (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV) 213 ; ECX = BUS/DEV/FN 214 ; (00000000BBBBBBBBDDDDDFFF00000000) 215 ; EDX = Base IO Addr (DX) for SB16 & VT8233 216 ; EDX = NABMBAR/NAMBAR (for AC97) 217 ; (Low word, DX = NAMBAR address) 218 219 000000FC A2[240F0000] mov [ac97_int_ln_reg], al 220 00000101 891D[140F0000] mov [dev_vendor], ebx 221 00000107 890D[180F0000] mov [bus_dev_fn], ecx 222 0000010D 668915[200F0000] mov [ac97_NamBar], dx 223 ;mov [ac97_NamBar], dx 224 ;shr dx, 16 225 ;mov [ac97_NabmBar], dx 226 00000114 8915[200F0000] mov [ac97_NamBar], edx 227 228 0000011A E8310A0000 call write_audio_dev_info 229 230 PlayNow: 231 0000011F E82A090000 call StartPlaying 232 233 ; load 32768 bytes into audio buffer 234 ;mov edi, Audio_Buffer 235 ;mov ebx, BUFFERSIZE 236 ; 24/06/2017 237 ; load 8192 bytes into audio buffer 238 00000124 BF[00800100] mov edi, temp_buffer 239 00000129 BB00200000 mov ebx, BUFFERSIZE / 4 240 0000012E E89E080000 call GetSamples 241 00000133 7252 jc error_exit 242 243 ; 24/06/2017 244 ; 8 bit to 16 bit (*2) 245 ; mono to stereo (*2) 246 ; 4* (BUFFERSIZE/4) 247 ; source = temp_buffer 248 ; destination = Audio_Buffer 249 00000135 E8E9090000 call ConvertSamples 250 251 ; 27/12/2024 252 ; bh = 16 : update (current, first) dma half buffer 253 ; bl = 0 : then switch to the next (second) half buffer 254 sys _audio, 1000h 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 0000013A BB00100000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 0000013F B820000000 <1> mov eax, %1 98 <1> 99 00000144 CD40 <1> int 40h 255 256 ; 27/12/2024 257 ; load 8192 bytes into audio buffer 258 00000146 BF[00800100] mov edi, temp_buffer 259 0000014B BB00200000 mov ebx, BUFFERSIZE / 4 260 00000150 E87C080000 call GetSamples 261 ;jc error_exit 262 00000155 7205 jc short _@ 263 264 ; 27/12/2024 265 00000157 E8C7090000 call ConvertSamples 266 _@: 267 ; 27/12/2024 268 ; Set Master Volume Level 269 sys _audio, 0B00h, 1D1Dh 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 0000015C BB000B0000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 00000161 B91D1D0000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000166 B820000000 <1> mov eax, %1 98 <1> 99 0000016B CD40 <1> int 40h 270 271 ;mov word [MixSpeed], 22050 ; Mixing at 22.050 kHz 272 273 ;;;; 274 ; 27/12/2024 275 ; Set Video Mode to 101h ; 640x480, 256 colors 276 ;sys _video, 08FFh, 101h 277 ; 13/01/2026 278 ; (edx = LFBINFO buffer address) 279 ; (edx = 0 -> do not return LFBINFO) 280 sys _video, 08FFh, 101h, 0 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 0000016D BBFF080000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 00000172 B901010000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 00000177 BA00000000 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 0000017C B81F000000 <1> mov eax, %1 98 <1> 99 00000181 CD40 <1> int 40h 281 00000183 09C0 or eax, eax 282 00000185 751B jnz short set_vesa_mode_101h_ok 283 284 ; write (OS) error msg and exit 285 error_exit: 286 sys _msg, trdos386_err_msg, 255, 0Eh 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 00000187 BB[E00D0000] <1> mov ebx, %2 90 <1> %if %0 >= 3 91 0000018C B9FF000000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 00000191 BA0E000000 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000196 B823000000 <1> mov eax, %1 98 <1> 99 0000019B CD40 <1> int 40h 287 0000019D E981000000 jmp Exit 288 289 set_vesa_mode_101h_ok: 290 ; linear frame buffer access 291 sys _video, 06FFh 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 000001A2 BBFF060000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 000001A7 B81F000000 <1> mov eax, %1 98 <1> 99 000001AC CD40 <1> int 40h 292 000001AE 21C0 and eax, eax 293 000001B0 7507 jnz short _a3 294 295 ; set text mode and write err msg 296 000001B2 E88D000000 call set_text_mode 297 000001B7 EBCE jmp short error_exit 298 _a3: 299 000001B9 A3[C47B0000] mov [LFB_ADDR], eax 300 ;;;; 301 302 ; 27/12/2024 303 000001BE B900010000 mov ecx, 256 304 %if 0 305 ;mov ecx, 128 ; Make a lookup table 306 ;;mov cl, 128 307 xor ebx, ebx ; for fastest pixel 308 ;mov edx, 320*(100-64) ; addressing. 309 ; 27/12/2024 310 mov edx, 640*(240-128) 311 MakeOfs: 312 ;mov [RowOfs+ebx], dx 313 ;mov [RowOfs+ebx+2], dx 314 ; 27/12/2024 315 mov [RowOfs+ebx], edx 316 ;add dx, 320 317 ;add ebx, 4 318 add edx, 640 319 add ebx, 4 320 loop MakeOfs 321 %else 322 ; 27/12/2024 323 000001C3 B900010000 mov ecx, 256 324 000001C8 BF[C0770000] mov edi, RowOfs 325 000001CD A1[C47B0000] mov eax, [LFB_ADDR] 326 000001D2 0500180100 add eax, 640*(240-128) 327 MakeOfs: 328 000001D7 AB stosd 329 000001D8 0580020000 add eax, 640 330 000001DD E2F8 loop MakeOfs 331 %endif 332 333 ; Start to play 334 000001DF A0[690E0000] mov al, [bps] 335 000001E4 C0E804 shr al, 4 ; 8 -> 0, 16 -> 1 336 000001E7 D0E0 shl al, 1 ; 16 -> 2, 8 -> 0 337 000001E9 8A1D[680E0000] mov bl, [stmo] 338 000001EF FECB dec bl 339 000001F1 08C3 or bl, al 340 000001F3 668B0D[6A0E0000] mov cx, [MixSpeed] ; [Sample_Rate] ; Hz 341 000001FA B704 mov bh, 4 ; start to play 342 sys _audio 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 000001FC B820000000 <1> mov eax, %1 98 <1> 99 00000201 CD40 <1> int 40h 343 344 ;; SETUP SIGNAL RESPONSE BYTE 345 ;; 06/03/2017 346 ;mov bl, [ac97_int_ln_reg] ; IRQ number 347 ;mov bh, 1 ; Link IRQ to user for Signal Response Byte 348 ;mov edx, srb ; Signal Response/Return Byte address 349 ;mov ecx, 0FFh ; Signal Response/Return Byte value 350 ;sys _calbac 351 ;jc short error_exit 352 353 ;; DIRECT VGA MEMORY ACCESS 354 ;; bl = 0, bh = 5 355 ;; Direct access/map to VGA memory (0A0000h) 356 357 ;sys _video, 0500h 358 ;cmp eax, 0A0000h 359 ;je short _a3 360 ;error_exit: 361 ;sys _msg, trdos386_err_msg, 255, 0Eh 362 ;jmp short Exit 363 364 ; Note: Normally IRQ 0 calls the ModPlay Polling at 18.2Hz thru 365 ; the software interrupt 1Ch. If the IRQ 0 is disabled, then 366 ; the INT 1Ch MUST BE CALLED at least MixSpeed/1024 times per 367 ; second, or the module will sound "looped". 368 ; Because we need better sync with the ModPlayer to draw the scope, 369 ; the polling is called from my routine, and then the irq 0 must be 370 ; disabled. The [DmaBuffer] points to the current buffer of 8-bit 371 ; samples played by the Sound Blaster. Note that some samples are 372 ; discarded in the next code, just for fun! 373 374 ;_a3: 375 ; mov ax, 0013h ; Set Mode 320x200x256 376 ; int 31h 377 378 ; 27/12/2024 379 ; Set Master Volume Level (to 29) -max:31- 380 sys _audio, 0B00h, 1D1Dh 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 00000203 BB000B0000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 00000208 B91D1D0000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 0000020D B820000000 <1> mov eax, %1 98 <1> 99 00000212 CD40 <1> int 40h 381 382 ; 24/06/2017 383 00000214 E87F000000 call PlayMod ; 13/02/2017 (ModPlay) 384 385 _s_exit: 386 00000219 E8D4080000 call StopPlaying ; STOP! 387 388 ; 27/12/2024 389 0000021E E821000000 call set_text_mode 390 Exit: 391 ;call FreeModule ; Free MODule core. 392 393 sys _exit ; Bye ! 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000223 B801000000 <1> mov eax, %1 98 <1> 99 00000228 CD40 <1> int 40h 394 here: 395 0000022A EBFE jmp short here 396 397 pmsg_2017: 398 sys _msg, msg_2017, 255, 0Fh 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 0000022C BB[1B0D0000] <1> mov ebx, %2 90 <1> %if %0 >= 3 91 00000231 B9FF000000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 00000236 BA0F000000 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 0000023B B823000000 <1> mov eax, %1 98 <1> 99 00000240 CD40 <1> int 40h 399 00000242 EBDF jmp short Exit 400 401 ; 27/12/2024 402 set_text_mode: 403 00000244 66B80300 mov ax, 0003h ; Set Text Mode 80x25x16 404 00000248 CD31 int 31h 405 0000024A C3 retn 406 407 DetectICH: 408 ; 24/06/2017 409 ; Detect (BH=1) AC97 (BL=2) Audio Controller 410 sys _audio, 0102h 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 0000024B BB02010000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000250 B820000000 <1> mov eax, %1 98 <1> 99 00000255 CD40 <1> int 40h 411 00000257 C3 retn 412 413 noDevMsg: 414 00000258 4572726F723A20556E- db "Error: Unable to find AC97 audio device!",13,10,0 414 00000261 61626C6520746F2066- 414 0000026A 696E64204143393720- 414 00000273 617564696F20646576- 414 0000027C 696365210D0A00 415 416 ac97_int_handler: 417 ; 19/06/2017 418 00000283 C605[250F0000]01 mov byte [srb], 1 ; interrupt (or signal response byte) 419 420 sys _rele ; return from callback service 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 0000028A B827000000 <1> mov eax, %1 98 <1> 99 0000028F CD40 <1> int 40h 421 ; we must not come here ! 422 sys _exit 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000291 B801000000 <1> mov eax, %1 98 <1> 99 00000296 CD40 <1> int 40h 423 424 ;============================================================================= 425 ; 426 ;============================================================================= 427 428 ; 27/12/2024 429 PlayMod: 430 ; 23/06/2017 431 ; 21/06/2017 432 ; 19/06/2017 433 434 ; 05/03/2017 (TRDOS 386) 435 ; 14/02/2017 436 ; 13/02/2017 437 ; 08/12/2016 438 ; 28/11/2016 439 440 00000298 EB11 jmp short modp_gs ; 23/06/2017 441 442 ;;; 27/12/2024 443 q_return: 444 0000029A C3 retn 445 ;;; 446 447 p_loop: 448 0000029B 803D[250F0000]00 cmp byte [srb], 0 449 000002A2 762F jna short q_loop 450 000002A4 C605[250F0000]00 mov byte [srb], 0 451 modp_gs: 452 ;mov edi, Audio_Buffer 453 ;mov ebx, BUFFERSIZE ; 32768 bytes ; 14/03/2017 454 ;call GetSamples 455 456 ; 24/06/2017 457 ; load 8192 bytes into audio buffer 458 000002AB BF[00800100] mov edi, temp_buffer 459 000002B0 BB00200000 mov ebx, BUFFERSIZE / 4 460 000002B5 E817070000 call GetSamples 461 000002BA 0F82C7FEFFFF jc error_exit 462 463 ; 24/06/2017 464 ; 8 bit to 16 bit (*2) 465 ; mono to stereo (*2) 466 ; 4* (BUFFERSIZE/4) 467 ; source = temp_buffer 468 ; destination = Audio_Buffer 469 000002C0 E85E080000 call ConvertSamples 470 471 ;;; 472 ; 27/12/2024 473 000002C5 803D[9D030000]00 cmp byte [volume_change], 0 474 000002CC 7605 jna short q_loop 475 476 000002CE E8AD000000 call change_volume_level 477 ;;; 478 q_loop: 479 000002D3 B401 mov ah, 1 ; any key pressed? 480 000002D5 CD32 int 32h ; no, Loop. 481 000002D7 7435 jz short r_loop 482 483 000002D9 B400 mov ah, 0 ; flush key buffer... 484 000002DB CD32 int 32h 485 486 ;q_return: 487 ;retn 488 489 ;;; 490 ; 27/12/204 (ref: modplayx.s - 06/06/2024) 491 000002DD 3C2B cmp al, '+' ; increase sound volume 492 000002DF 7413 je short inc_volume_level 493 000002E1 3C2D cmp al, '-' 494 ;je short dec_volume_level 495 000002E3 75B5 jne short q_return 496 ;q_return: 497 ;retn 498 499 dec_volume_level: 500 000002E5 8A0D[9C030000] mov cl, [volume_level] 501 000002EB 80F901 cmp cl, 1 ; 1 502 ;jna short r_loop 503 ; 27/12/2024 504 000002EE 721E jb short r_loop 505 000002F0 FEC9 dec cl 506 000002F2 EB0D jmp short volume_level_change 507 508 inc_volume_level: 509 000002F4 8A0D[9C030000] mov cl, [volume_level] 510 000002FA 80F91F cmp cl, 1Fh ; 31 511 000002FD 730F jnb short r_loop 512 000002FF FEC1 inc cl 513 ; 27/12/2024 514 volume_level_change: 515 00000301 880D[9C030000] mov [volume_level], cl 516 00000307 C605[9D030000]01 mov byte [volume_change], 1 517 r_loop: 518 ;;; 519 ; 27/12/2024 520 sys _time, 4 ; get timer ticks (18.2 ticks/second) 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 0000030E BB04000000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000313 B80D000000 <1> mov eax, %1 98 <1> 99 00000318 CD40 <1> int 40h 521 0000031A 3B05[C07B0000] cmp eax, [timerticks] 522 00000320 0F8475FFFFFF je p_loop 523 00000326 A3[C07B0000] mov [timerticks], eax 524 ;;; 525 526 527 ; 27/12/2024 (640 pixels) 528 ; ---------- 529 ; Get Current Sound Data (in DMA buffer) ((320 bytes)) 530 ; 23/06/2017 531 ; 22/06/2017 532 ; bh = 15, get current sound data/samples 533 ; bl = 0, for PCM OUT 534 ; ecx = count of sample/data bytes (1 to 4096) 535 ; edx = destination buffer address 536 ; (page aligned address is better) 537 ; 538 ;sys _audio, 0F00h, 320*4, g_buff 539 540 ; 27/12/2024 541 sys _audio, 0F00h, 640*4, g_buff 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 0000032B BB000F0000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 00000330 B9000A0000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 00000335 BA[00800000] <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 0000033A B820000000 <1> mov eax, %1 98 <1> 99 0000033F CD40 <1> int 40h 542 543 ; 27/12/2024 544 ScopeLoop: 545 ;mov edi, 0A0000h ; VGA display memory address 546 ; 27/12/2024 547 ;mov edi, [LFB_ADDR] 548 ; 19/06/2017 549 00000341 BE[00800000] mov esi, g_buff ; display current samples 550 00000346 31C9 xor ecx, ecx ; to be drawed ... 551 00000348 31D2 xor edx, edx 552 DrawLoop: 553 ;mov ebx, edx ; (save Index) 554 ;mov di, [Scope+ebx] ; get old SCOPE pixel address 555 ; 27/12/2024 556 ;mov edi, [Scope+ebx] 557 0000034A 8BBA[C06D0000] mov edi, [Scope+edx] 558 00000350 C60700 mov byte [edi], 0 ; erase it! 559 ; 24/06/2017 560 00000353 AD lodsd 561 00000354 80C480 add ah, 80h 562 ;mov bl, ah 563 ; 27/12/2024 564 00000357 31DB xor ebx, ebx 565 00000359 88E3 mov bl, ah 566 ; 567 ;xor bh, bh 568 ;shl bx, 1 569 ;mov di, [RowOfs+ebx] 570 ;add di, cx 571 ;mov bx, dx ; (restore Index) 572 ;mov [Scope+ebx], di ; save new address... 573 ; 27/12/2024 574 ;shl ebx, 1 575 0000035B C1E302 shl ebx, 2 ; max. 255*4 (row 112 + w_row 0 to 255) 576 0000035E 8BBB[C0770000] mov edi, [RowOfs+ebx] ; row start position/offset 577 00000364 01CF add edi, ecx ; column 578 ;mov ebx, edx 579 ;mov [Scope+ebx], edi 580 ; 27/12/2024 581 00000366 89BA[C06D0000] mov [Scope+edx], edi 582 0000036C C6070A mov byte [edi], 10 ; and DRAW. 583 ;add dx, 2 ; the next pixel... 584 0000036F 83C204 add edx, 4 585 00000372 41 inc ecx 586 ;cmp cx, 320 ; 320 pixels drawed? 587 ; 27/12/2024 588 00000373 81F980020000 cmp ecx, 640 ; 640 pixels drawn? 589 00000379 72CF jb short DrawLoop 590 0000037B E91BFFFFFF jmp p_loop 591 592 ; ---------------------------------------------------------------------------- 593 594 ; 27/12/2024 595 change_volume_level: 596 00000380 8A0D[9C030000] mov cl, [volume_level] 597 00000386 88CD mov ch, cl 598 ; Set Master Volume Level 599 sys _audio, 0B00h 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 00000388 BB000B0000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 0000038D B820000000 <1> mov eax, %1 98 <1> 99 00000392 CD40 <1> int 40h 600 00000394 C605[9D030000]00 mov byte [volume_change], 0 ; reset volume change (required) flag 601 0000039B C3 retn 602 603 ;;;; 27/12/2024 604 0000039C 1D volume_level: db 1Dh 605 0000039D 01 volume_change: db 1 606 ;;;; 607 608 ;============================================================================= 609 ; MODLOAD.ASM 610 ;============================================================================= 611 612 ; Amiga Module Loader v0.1b by Carlos Hasan. 613 ; July 10th, 1993. 614 615 ; STRUCTURES 616 617 struc ModSample 618 00000000 .msName: resb 22 619 00000016 ???? .msLength: resw 1 620 00000018 ?? .msFinetune: resb 1 621 00000019 ?? .msVolume: resb 1 622 0000001A ???? .msRepeat: resw 1 623 0000001C ???? .msRepLen: resw 1 624 .size: 625 endstruc 626 627 struc ModHeader 628 00000000 .mhName: resb 20 629 00000014 .mhSamples: resb ModSample.size*31 630 000003B6 ?? .mhOrderLen: resb 1 631 000003B7 ?? .mhReStart: resb 1 632 000003B8 .mhOrder: resb 128 633 00000438 ???????? .mhSign: resw 2 634 .size: 635 endstruc 636 637 struc ModInfoRec 638 00000000 ?? .OrderLen: resb 1 639 00000001 ?? .ReStart: resb 1 640 00000002 .Order: resb 128 641 00000082 ???????? .Patterns: resd 1 642 00000086 .SampOfs: resw 31 643 000000C4 .SampSeg: resw 31 644 00000102 .SampLen: resw 31 645 00000140 .SampRep: resw 31 646 0000017E .SampRepLen: resw 31 647 000001BC .SampVol: resw 31 648 .size: 649 endstruc 650 651 ; CODE 652 653 ; 07/10/2017 (modplay.s) 654 655 LoadModule: 656 ; edi = file name address 657 658 0000039E 60 pushad 659 660 ;call ClearModInfo ; 07/10/2017 (not necessary.) 661 OpenFile: 662 ; ebx = ASCIIZ file name address 663 ; ecx = open mode (0 = open for read) 664 sys _open, edi, 0 ; open for reading 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 0000039F 89FB <1> mov ebx, %2 90 <1> %if %0 >= 3 91 000003A1 B900000000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 000003A6 B805000000 <1> mov eax, %1 98 <1> 99 000003AB CD40 <1> int 40h 665 000003AD 0F8244010000 jc Failed 666 000003B3 A3[260F0000] mov [FileHandle], eax 667 ReadHeader: 668 ; ebx = File handle 669 ; ecx = Buffer address 670 ; edx = Byte count 671 sys _read, [FileHandle], Header, ModHeader.size 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 000003B8 8B1D[260F0000] <1> mov ebx, %2 90 <1> %if %0 >= 3 91 000003BE B9[2A0F0000] <1> mov ecx, %3 92 <1> %if %0 = 4 93 000003C3 BA3C040000 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 000003C8 B803000000 <1> mov eax, %1 98 <1> 99 000003CD CD40 <1> int 40h 672 000003CF 0F8213010000 jc CloseFile 673 CheckMK: 674 000003D5 813D[62130000]4D2E- cmp dword [Header+ModHeader.mhSign], 'M.K.' 674 000003DD 4B2E 675 000003DF 7412 je short IsModFile 676 CheckFLT4: 677 000003E1 813D[62130000]464C- cmp dword [Header+ModHeader.mhSign], 'FLT4' 677 000003E9 5434 678 000003EB 7406 je short IsModFile 679 ; 07/10/2017 680 000003ED F9 stc 681 000003EE E9F5000000 jmp CloseFile 682 IsModFile: 683 000003F3 A0[E0120000] mov al, [Header+ModHeader.mhOrderLen] 684 000003F8 A2[66130000] mov [ModInfo.OrderLen], al 685 686 000003FD A0[E1120000] mov al, [Header+ModHeader.mhReStart] 687 00000402 3A05[E0120000] cmp al, [Header+ModHeader.mhOrderLen] 688 00000408 7202 jb short SetReStart 689 0000040A B07F mov al, 7Fh 690 SetReStart: 691 0000040C A2[67130000] mov [ModInfo.ReStart], al 692 693 ;mov ecx, 128 694 00000411 66B98000 mov cx, 128 695 00000415 31D2 xor edx, edx 696 00000417 31DB xor ebx, ebx 697 CopyOrder: 698 00000419 8AB3[E2120000] mov dh, [Header+ModHeader.mhOrder+ebx] 699 0000041F 88B3[68130000] mov [ModInfo.Order+ebx], dh 700 00000425 38D6 cmp dh, dl 701 00000427 7202 jb short NextOrder 702 00000429 88F2 mov dl, dh 703 NextOrder: 704 0000042B 43 inc ebx 705 0000042C E2EB loop CopyOrder 706 AllocPatterns: 707 0000042E 81E2FF000000 and edx, 0FFh 708 ;inc dx 709 00000434 FEC2 inc dl ; 07/10/2017 710 ; dl = count of 1024 bytes ; count of patterns (04/07/2017) 711 00000436 C1E20A shl edx, 10 ; *1024 ; (count of patterns *64*16) 712 713 00000439 89D5 mov ebp, edx ; offset of samples (04/07/2017) 714 ;mov ecx, 10000h ; next 64K (4096*16) 715 0000043B B9[00000200] mov ecx, file_buffer ; 12/03/2017 716 ; 717 00000440 890D[E8130000] mov [ModInfo.Patterns], ecx 718 ; 719 00000446 01CD add ebp, ecx ; next offset for samples 720 ReadPatterns: 721 ;mov ebx, [FileHandle] 722 ; ebx = File handle 723 ; ecx = Buffer address 724 ; edx = Byte count 725 sys _read, [FileHandle] 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 00000448 8B1D[260F0000] <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 0000044E B803000000 <1> mov eax, %1 98 <1> 99 00000453 CD40 <1> int 40h 726 00000455 0F828D000000 jc CloseFile 727 728 ; paterns have been loaded here... (04/07/2017) 729 730 0000045B BE[3E0F0000] mov esi, Header+ModHeader.mhSamples 731 00000460 31FF xor edi, edi 732 CopySamples: 733 00000462 668B4616 mov ax, [esi+ModSample.msLength] 734 00000466 86E0 xchg al, ah 735 00000468 66D1E0 shl ax, 1 736 0000046B 668987[68140000] mov [ModInfo.SampLen+edi], ax 737 00000472 8A4619 mov al, [esi+ModSample.msVolume] 738 00000475 30E4 xor ah, ah 739 00000477 668987[22150000] mov [ModInfo.SampVol+edi], ax 740 0000047E 668B461A mov ax, [esi+ModSample.msRepeat] 741 00000482 86E0 xchg al, ah 742 00000484 66D1E0 shl ax, 1 743 00000487 668987[A6140000] mov [ModInfo.SampRep+edi], ax 744 0000048E 668B461C mov ax, [esi+ModSample.msRepLen] 745 00000492 86E0 xchg al, ah 746 00000494 66D1E0 shl ax, 1 747 00000497 668987[E4140000] mov [ModInfo.SampRepLen+edi], ax 748 0000049E 83C61E add esi, ModSample.size 749 000004A1 6683C702 add di, 2 750 000004A5 6683FF3E cmp di, 2*31 751 000004A9 72B7 jb short CopySamples 752 753 000004AB 31F6 xor esi, esi 754 AllocSamples: 755 000004AD 0FB796[68140000] movzx edx, word [ModInfo.SampLen+esi] 756 ; 07/10/2017 757 ;shr dx, 4 ; *** 758 000004B4 21D2 and edx, edx 759 000004B6 7426 jz short NextSample 760 ;inc dx ; number of paragraphs ; *** 761 ;shl dx, 4 ; *** 762 000004B8 89E8 mov eax, ebp 763 000004BA 668986[EC130000] mov [ModInfo.SampOfs+esi], ax 764 000004C1 C1E810 shr eax, 16 765 000004C4 668986[2A140000] mov [ModInfo.SampSeg+esi], ax 766 000004CB 89E9 mov ecx, ebp 767 000004CD 01D5 add ebp, edx ; next offset for sample 768 ReadSample: 769 ;mov ebx, [FileHandle] 770 ;movzx edx, [ModInfo.SampLen+esi] 771 ;mov ecx, [ModInfo.SampOfs+esi] 772 773 ; ebx = File handle 774 ; ecx = Buffer address 775 ; edx = Byte count 776 sys _read, [FileHandle] 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 000004CF 8B1D[260F0000] <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 000004D5 B803000000 <1> mov eax, %1 98 <1> 99 000004DA CD40 <1> int 40h 777 000004DC 720A jc short CloseFile 778 779 NextSample: 780 000004DE 6683C602 add si, 2 781 000004E2 6683FE3E cmp si, 2*31 782 000004E6 72C5 jb short AllocSamples 783 CloseFile: 784 000004E8 9C pushf 785 sys _close, [FileHandle] 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 000004E9 8B1D[260F0000] <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 000004EF B806000000 <1> mov eax, %1 98 <1> 99 000004F4 CD40 <1> int 40h 786 000004F6 9D popf 787 Failed: 788 000004F7 61 popad 789 790 000004F8 C3 retn 791 792 FreeModule: 793 ; Erdogan Tan (13/02/2017) 794 ; nothing to do here for memory de-allocation 795 ClearModInfo: 796 000004F9 57 push edi 797 000004FA BF[66130000] mov edi, ModInfo 798 000004FF B9FA010000 mov ecx, ModInfoRec.size 799 ;cld 800 00000504 30C0 xor al, al 801 00000506 F3AA rep stosb 802 00000508 5F pop edi 803 00000509 C3 retn 804 805 ;============================================================================= 806 ; MODPLAY.ASM 807 ;============================================================================= 808 809 ; Amiga Module Loader v0.3b by Carlos Hasan. 810 ; July 23th, 1993. 811 812 ; EQUATES 813 814 NumTracks equ 4 815 DefTempo equ 6 816 DefBpm equ 125 817 MidCRate equ 8448 818 MixBufSize equ 4096 819 820 ; STRUCTURES 821 822 struc TrackInfo 823 00000000 ???????? .Samples: resd 1 824 00000004 ???????? .Position: resd 1 825 00000008 ???? .Len: resw 1 826 0000000A ???? .Repeat: resw 1 827 0000000C ???? .RepLen: resw 1 828 0000000E ?? .Volume: resb 1 829 0000000F ?? .Error: resb 1 830 00000010 ???? .Period: resw 1 831 00000012 ???? .Pitch: resw 1 832 00000014 ???? .Effect: resw 1 833 00000016 ???? .PortTo: resw 1 834 00000018 ?? .PortParm: resb 1 835 00000019 ?? .VibPos: resb 1 836 0000001A ?? .VibParm: resb 1 837 0000001B ?? .OldSampOfs: resb 1 838 0000001C ???????????? .Arp: resw 3 839 00000022 ???? .ArpIndex: resw 1 840 .size: 841 endstruc 842 843 ; CODE 844 845 ;-------------------------------------------------------------------------- 846 ; BeatTrack: Process the next beat in one track. 847 ; In: 848 ; ds:di - Track info Address. 849 ;-------------------------------------------------------------------------- 850 851 ; edi = Track info address 852 853 BeatTrack: 854 0000050A 668B5714 mov dx, [edi+TrackInfo.Effect] 855 0000050E 6685D2 test dx, dx 856 00000511 743C je short None 857 00000513 80FE00 cmp dh, 00h 858 00000516 7438 je short Arpeggio 859 00000518 80FE01 cmp dh, 01h 860 0000051B 7451 je short PortUp 861 0000051D 80FE02 cmp dh, 02h 862 00000520 7471 je short PortDown 863 00000522 80FE03 cmp dh, 03h 864 00000525 0F848E000000 je TonePort 865 0000052B 80FE04 cmp dh, 04h 866 0000052E 0F84BD000000 je Vibrato 867 00000534 80FE05 cmp dh, 05h 868 00000537 0F840E010000 je PortSlide 869 0000053D 80FE06 cmp dh, 06h 870 00000540 0F8412010000 je VibSlide 871 00000546 80FE0A cmp dh, 0Ah 872 00000549 0F8413010000 je VolSlide 873 None: 874 0000054F C3 retn 875 Arpeggio: 876 00000550 0FB75F22 movzx ebx, word [edi+TrackInfo.ArpIndex] 877 00000554 668B441F1C mov ax, [edi+TrackInfo.Arp+ebx] 878 00000559 66894712 mov [edi+TrackInfo.Pitch], ax 879 0000055D 6683C302 add bx, 2 880 00000561 6683FB06 cmp bx, 6 881 00000565 7202 jb short SetArpIndex 882 00000567 31DB xor ebx, ebx 883 SetArpIndex: 884 00000569 66895F22 mov [edi+TrackInfo.ArpIndex], bx 885 0000056D C3 retn 886 PortUp: 887 0000056E 30F6 xor dh, dh 888 00000570 668B5F10 mov bx, [edi+TrackInfo.Period] 889 00000574 6629D3 sub bx, dx 890 00000577 6683FB71 cmp bx, 113 891 0000057B 7D04 jge short NotSmall 892 0000057D 66BB7100 mov bx, 113 893 NotSmall: 894 00000581 66895F10 mov [edi+TrackInfo.Period], bx 895 00000585 6601DB add bx, bx 896 00000588 66678B87[6015] mov ax, [PitchTable+bx] 897 0000058E 66894712 mov [edi+TrackInfo.Pitch], ax 898 00000592 C3 retn 899 PortDown: 900 00000593 30F6 xor dh, dh 901 00000595 668B5F10 mov bx, [edi+TrackInfo.Period] 902 00000599 6601D3 add bx, dx 903 0000059C 6681FB5803 cmp bx, 856 904 000005A1 7E04 jle short NotBig 905 000005A3 66BB5803 mov bx, 856 906 NotBig: 907 000005A7 66895F10 mov [edi+TrackInfo.Period], bx 908 000005AB 6601DB add bx, bx 909 000005AE 66678B87[6015] mov ax, [PitchTable+bx] 910 000005B4 66894712 mov [edi+TrackInfo.Pitch], ax 911 000005B8 C3 retn 912 TonePort: 913 000005B9 30F6 xor dh, dh 914 000005BB 668B4716 mov ax, [edi+TrackInfo.PortTo] 915 000005BF 668B5F10 mov bx, [edi+TrackInfo.Period] 916 000005C3 6639C3 cmp bx, ax 917 000005C6 7428 je short NoPort 918 000005C8 7F0D jg short PortToUp 919 PortToDown: 920 000005CA 6601D3 add bx, dx 921 000005CD 6639C3 cmp bx, ax 922 000005D0 7E0D jle short SetPort 923 FixPort: 924 000005D2 6689C3 mov bx, ax 925 000005D5 EB08 jmp short SetPort 926 PortToUp: 927 000005D7 6629D3 sub bx, dx 928 000005DA 6639C3 cmp bx, ax 929 000005DD 7CF3 jl short FixPort 930 SetPort: 931 000005DF 66895F10 mov [edi+TrackInfo.Period], bx 932 000005E3 6601DB add bx, bx 933 000005E6 66678B87[6015] mov ax, [PitchTable+bx] 934 000005EC 66894712 mov [edi+TrackInfo.Pitch], ax 935 NoPort: 936 000005F0 C3 retn 937 Vibrato: 938 000005F1 88D6 mov dh, dl 939 000005F3 80E20F and dl, 0Fh 940 000005F6 C0EE04 shr dh, 4 941 000005F9 C0E602 shl dh, 2 942 000005FC 007719 add [edi+TrackInfo.VibPos], dh 943 000005FF 8A7719 mov dh, [edi+TrackInfo.VibPos] 944 00000602 88F3 mov bl, dh 945 00000604 C0EB02 shr bl, 2 946 00000607 6683E31F and bx, 1Fh 947 0000060B 678A87[000E] mov al, [SinTable+bx] 948 00000610 F6E2 mul dl 949 00000612 66D1C0 rol ax, 1 950 00000615 86E0 xchg al, ah 951 00000617 80E401 and ah, 1 952 0000061A 84F6 test dh, dh 953 0000061C 7903 jns short VibUp 954 0000061E 66F7D8 neg ax 955 VibUp: 956 00000621 66034710 add ax, [edi+TrackInfo.Period] 957 00000625 6689C3 mov bx, ax 958 00000628 6683FB71 cmp bx, 113 959 0000062C 7D04 jge short NoLoVib 960 0000062E 66BB7100 mov bx, 113 961 NoLoVib: 962 00000632 6681FB5803 cmp bx, 856 963 00000637 7E04 jle short NoHiVib 964 00000639 66BB5803 mov bx, 856 965 NoHiVib: 966 0000063D 6601DB add bx, bx 967 00000640 66678B87[6015] mov ax, [PitchTable+bx] 968 00000646 66894712 mov [edi+TrackInfo.Pitch], ax 969 0000064A C3 retn 970 PortSlide: 971 0000064B E812000000 call VolSlide 972 00000650 8A5718 mov dl, [edi+TrackInfo.PortParm] 973 00000653 E961FFFFFF jmp TonePort 974 VibSlide: 975 00000658 E805000000 call VolSlide 976 0000065D 8A571A mov dl, [edi+TrackInfo.VibParm] 977 00000660 EB8F jmp short Vibrato 978 VolSlide: 979 00000662 88D6 mov dh, dl 980 00000664 80E20F and dl, 0Fh 981 00000667 C0EE04 shr dh, 4 982 0000066A 8A470E mov al, [edi+TrackInfo.Volume] 983 0000066D 28D0 sub al, dl 984 0000066F 7D02 jge short NoLoVol 985 00000671 30C0 xor al, al 986 NoLoVol: 987 00000673 00F0 add al, dh 988 00000675 3C40 cmp al, 64 989 00000677 7602 jbe short NoHiVol 990 00000679 B040 mov al, 64 991 NoHiVol: 992 0000067B 88470E mov [edi+TrackInfo.Volume], al 993 0000067E C3 retn 994 995 ;-------------------------------------------------------------------------- 996 ; GetTrack: Get the next Note from a pattern. 997 ; In: 998 ; ds:di - Track info Address. 999 ; es:si - Pattern Note Address. 1000 ; Out: 1001 ; es:si - The Next Pattern Note address. 1002 ;-------------------------------------------------------------------------- 1003 1004 ; esi = Pattern note address 1005 ; edi = Track info address 1006 1007 GetTrack: 1008 0000067F 66AD lodsw 1009 00000681 86E0 xchg al, ah 1010 00000683 88E3 mov bl, ah 1011 00000685 80E40F and ah, 0Fh 1012 00000688 6689C1 mov cx, ax 1013 0000068B 66AD lodsw 1014 0000068D 86E0 xchg al, ah 1015 0000068F 88E7 mov bh, ah 1016 00000691 80E40F and ah, 0Fh 1017 00000694 6689C2 mov dx, ax 1018 00000697 66895714 mov [edi+TrackInfo.Effect], dx 1019 0000069B 80E3F0 and bl, 0F0h 1020 0000069E C0EF04 shr bh, 4 1021 000006A1 08FB or bl, bh 1022 000006A3 7449 je short SetPeriod 1023 SetSample: 1024 ;xor bh, bh 1025 000006A5 81E3FF000000 and ebx, 0FFh 1026 000006AB 4B dec ebx 1027 000006AC 01DB add ebx, ebx 1028 000006AE 668B83[22150000] mov ax, [ModInfo.SampVol+ebx] 1029 000006B5 88470E mov [edi+TrackInfo.Volume], al 1030 000006B8 668B83[EC130000] mov ax, [ModInfo.SampOfs+ebx] 1031 000006BF 668907 mov [edi+TrackInfo.Samples], ax 1032 000006C2 668B83[2A140000] mov ax, [ModInfo.SampSeg+ebx] 1033 000006C9 66894702 mov [edi+TrackInfo.Samples+2], ax 1034 000006CD 668B83[68140000] mov ax, [ModInfo.SampLen+ebx] 1035 000006D4 66894708 mov [edi+TrackInfo.Len], ax 1036 000006D8 668B83[A6140000] mov ax, [ModInfo.SampRep+ebx] 1037 000006DF 6689470A mov [edi+TrackInfo.Repeat], ax 1038 000006E3 668B83[E4140000] mov ax, [ModInfo.SampRepLen+ebx] 1039 000006EA 6689470C mov [edi+TrackInfo.RepLen], ax 1040 SetPeriod: 1041 000006EE 6685C9 test cx, cx 1042 000006F1 7424 jz short SetEffect 1043 1044 000006F3 66894F16 mov [edi+TrackInfo.PortTo], cx 1045 000006F7 80FE03 cmp dh, 03h 1046 000006FA 741B je short SetEffect 1047 1048 000006FC 66894F10 mov [edi+TrackInfo.Period], cx 1049 00000700 6689CB mov bx, cx 1050 00000703 6601DB add bx, bx 1051 00000706 66678B87[6015] mov ax, [PitchTable+bx] 1052 0000070C 66894712 mov [edi+TrackInfo.Pitch], ax 1053 00000710 C7470400000000 mov dword [edi+TrackInfo.Position], 0 1054 SetEffect: 1055 00000717 6685D2 test dx, dx 1056 0000071A 7430 jz short InitNone 1057 0000071C 80FE00 cmp dh, 00h 1058 0000071F 0F84E5000000 je InitArpeggio 1059 00000725 80FE03 cmp dh, 03h 1060 00000728 7423 je short InitTonePort 1061 0000072A 80FE04 cmp dh, 04h 1062 0000072D 742D je short InitVibrato 1063 0000072F 80FE09 cmp dh, 09h 1064 00000732 7451 je short SampleOfs 1065 00000734 80FE0B cmp dh, 0Bh 1066 00000737 7462 je short PosJump 1067 00000739 80FE0C cmp dh, 0Ch 1068 0000073C 746B je short SetVolume 1069 0000073E 80FE0D cmp dh, 0Dh 1070 00000741 7471 je short Break 1071 00000743 80FE0F cmp dh, 0Fh 1072 00000746 0F8487000000 je SetSpeed 1073 InitNone: 1074 0000074C C3 retn 1075 InitTonePort: 1076 0000074D 84D2 test dl, dl 1077 0000074F 7503 jnz short SetPortParm 1078 00000751 8A5718 mov dl, [edi+TrackInfo.PortParm] 1079 SetPortParm: 1080 00000754 885718 mov [edi+TrackInfo.PortParm], dl 1081 00000757 66895714 mov [edi+TrackInfo.Effect], dx 1082 0000075B C3 retn 1083 InitVibrato: 1084 0000075C 8A471A mov al, [edi+TrackInfo.VibParm] 1085 0000075F 88C4 mov ah, al 1086 00000761 240F and al, 0Fh 1087 00000763 80E4F0 and ah, 0F0h 1088 00000766 F6C20F test dl, 0Fh 1089 00000769 7502 jne short OkDepth 1090 0000076B 08C2 or dl, al 1091 OkDepth: 1092 0000076D F6C2F0 test dl, 0F0h 1093 00000770 7502 jnz short OkRate 1094 00000772 08E2 or dl, ah 1095 OkRate: 1096 00000774 88571A mov [edi+TrackInfo.VibParm], dl 1097 00000777 66895714 mov [edi+TrackInfo.Effect], dx 1098 0000077B 6685C9 test cx, cx 1099 0000077E 7404 jz short OkPos 1100 00000780 C6471900 mov byte [edi+TrackInfo.VibPos], 0 1101 OkPos: 1102 00000784 C3 retn 1103 SampleOfs: 1104 00000785 84D2 test dl, dl 1105 00000787 7503 jnz short SetSampleOfs 1106 00000789 8A571B mov dl, [edi+TrackInfo.OldSampOfs] 1107 SetSampleOfs: 1108 0000078C 88571B mov [edi+TrackInfo.OldSampOfs], dl 1109 0000078F 88D6 mov dh, dl 1110 00000791 81E200FF0000 and edx, 0FF00h ; 05/03/2017 1111 00000797 895704 mov [edi+TrackInfo.Position], edx 1112 0000079A C3 retn 1113 PosJump: 1114 0000079B 8815[126D0000] mov [OrderPos], dl 1115 000007A1 C605[166D0000]40 mov byte [Row], 64 1116 000007A8 C3 retn 1117 SetVolume: 1118 000007A9 80FA40 cmp dl, 64 1119 000007AC 7602 jbe short OkVol 1120 000007AE B240 mov dl, 64 1121 OkVol: 1122 000007B0 88570E mov [edi+TrackInfo.Volume], dl 1123 000007B3 C3 retn 1124 Break: 1125 000007B4 88D6 mov dh, dl 1126 000007B6 80E20F and dl, 0Fh 1127 000007B9 C0EE04 shr dh, 4 1128 000007BC 00F6 add dh, dh 1129 000007BE 00F2 add dl, dh 1130 000007C0 C0E602 shl dh, 2 1131 000007C3 00F2 add dl, dh 1132 000007C5 8815[176D0000] mov [BreakRow], dl 1133 000007CB C605[166D0000]40 mov byte [Row], 64 1134 000007D2 C3 retn 1135 SetSpeed: 1136 000007D3 84D2 test dl,dl 1137 000007D5 7432 je Skip 1138 000007D7 80FA1F cmp dl,31 1139 000007DA 770D ja short SetBpm 1140 SetTempo: 1141 000007DC 8815[136D0000] mov [Tempo], dl 1142 000007E2 8815[146D0000] mov [TempoWait], dl 1143 000007E8 C3 retn 1144 SetBpm: 1145 000007E9 8815[156D0000] mov [Bpm], dl 1146 000007EF B067 mov al, 103 1147 000007F1 F6E2 mul dl 1148 000007F3 88E3 mov bl, ah 1149 000007F5 30FF xor bh, bh 1150 000007F7 66A1[6A0E0000] mov ax, [MixSpeed] 1151 000007FD 6631D2 xor dx, dx 1152 00000800 66F7F3 div bx 1153 00000803 66A3[186D0000] mov [BpmSamples], ax 1154 Skip: 1155 00000809 C3 retn 1156 InitArpeggio: 1157 0000080A 88D6 mov dh, dl 1158 0000080C 80E20F and dl, 0Fh 1159 0000080F C0EE04 shr dh, 4 1160 00000812 66B92400 mov cx, 36 1161 00000816 31DB xor ebx, ebx 1162 00000818 668B4710 mov ax, [edi+TrackInfo.Period] 1163 gt_ScanPeriod: 1164 0000081C 66673B87[200E] cmp ax, [PeriodTable+bx] 1165 00000822 7306 jae short SetArp 1166 00000824 6683C302 add bx, 2 1167 00000828 E2F2 loop gt_ScanPeriod 1168 SetArp: 1169 0000082A 6601D2 add dx, dx 1170 0000082D 00DE add dh, bl 1171 0000082F 00DA add dl, bl 1172 00000831 66678B9F[200E] mov bx, [PeriodTable+bx] 1173 00000837 6601DB add bx, bx 1174 0000083A 66678B87[6015] mov ax, [PitchTable+bx] 1175 00000840 6689471C mov [edi+TrackInfo.Arp], ax 1176 00000844 88F3 mov bl, dh 1177 00000846 30FF xor bh, bh 1178 00000848 66678B9F[200E] mov bx, [PeriodTable+bx] 1179 0000084E 6601DB add bx, bx 1180 00000851 66678B87[6015] mov ax, [PitchTable+bx] 1181 00000857 6689471E mov [edi+TrackInfo.Arp+2], ax 1182 0000085B 88D3 mov bl, dl 1183 0000085D 30FF xor bh, bh 1184 0000085F 66678B9F[200E] mov bx, [PeriodTable+bx] 1185 00000865 6601DB add bx, bx 1186 00000868 66678B87[6015] mov ax, [PitchTable+bx] 1187 0000086E 66894720 mov [edi+TrackInfo.Arp+4], ax 1188 00000872 66C747220000 mov word [edi+TrackInfo.ArpIndex], 0 1189 00000878 C3 retn 1190 1191 ;-------------------------------------------------------------------------- 1192 ; UpdateTracks: Main code to process the next tick to be played. 1193 ;-------------------------------------------------------------------------- 1194 1195 UpdateTracks: 1196 00000879 FE0D[146D0000] dec byte [TempoWait] 1197 0000087F 7415 jz short GetTracks 1198 1199 00000881 B904000000 mov ecx, NumTracks 1200 00000886 BF[286D0000] mov edi, Tracks 1201 BeatTracks: 1202 0000088B E87AFCFFFF call BeatTrack 1203 00000890 83C724 add edi, TrackInfo.size 1204 00000893 E2F6 loop BeatTracks 1205 00000895 C3 retn 1206 GetTracks: 1207 00000896 A0[136D0000] mov al, [Tempo] 1208 0000089B A2[146D0000] mov [TempoWait], al 1209 1210 000008A0 8B35[246D0000] mov esi, [Note] 1211 000008A6 803D[166D0000]40 cmp byte [Row], 64 1212 000008AD 7263 jb short NoPattWrap 1213 1214 000008AF 8B35[E8130000] mov esi, [ModInfo.Patterns] 1215 000008B5 8A1D[126D0000] mov bl, [OrderPos] 1216 000008BB 3A1D[66130000] cmp bl, [ModInfo.OrderLen] 1217 000008C1 7214 jb short NoOrderWrap 1218 000008C3 8A1D[67130000] mov bl, [ModInfo.ReStart] 1219 000008C9 881D[126D0000] mov [OrderPos], bl 1220 000008CF 3A1D[66130000] cmp bl, [ModInfo.OrderLen] 1221 000008D5 735D jae short NoUpdate 1222 NoOrderWrap: 1223 ;xor bh, bh 1224 000008D7 81E3FF000000 and ebx, 0FFh 1225 000008DD 8A9B[68130000] mov bl, [ModInfo.Order+ebx] 1226 000008E3 C1E30A shl ebx, 10 ; *1024 1227 000008E6 01DE add esi, ebx 1228 000008E8 8A1D[176D0000] mov bl, [BreakRow] 1229 000008EE 881D[166D0000] mov [Row], bl 1230 ;xor bh, bh 1231 000008F4 81E3FF000000 and ebx, 0FFh 1232 000008FA 883D[176D0000] mov [BreakRow], bh ; 0 1233 00000900 66C1E304 shl bx, 4 1234 00000904 01DE add esi, ebx 1235 00000906 8935[246D0000] mov [Note], esi 1236 0000090C FE05[126D0000] inc byte [OrderPos] 1237 NoPattWrap: 1238 00000912 FE05[166D0000] inc byte [Row] 1239 1240 ;cld 1241 00000918 B904000000 mov ecx, NumTracks 1242 0000091D BF[286D0000] mov edi, Tracks 1243 GetTracks_next: 1244 00000922 51 push ecx 1245 00000923 E857FDFFFF call GetTrack 1246 00000928 59 pop ecx 1247 00000929 83C724 add edi, TrackInfo.size 1248 0000092C E2F4 loop GetTracks_next 1249 1250 0000092E 8935[246D0000] mov [Note], esi 1251 NoUpdate: 1252 00000934 C3 retn 1253 1254 ;-------------------------------------------------------------------------- 1255 ; MixTrack: Mixes one track into a CLEAN buffer. 1256 ; In: 1257 ; ds:si - Track Info Address. 1258 ; ds:di - Buffer Address. 1259 ; cx - Buffer Size. 1260 ;-------------------------------------------------------------------------- 1261 1262 ; esi = Track info address 1263 ; edi = Buffer address 1264 ; ecx = Buffer size 1265 1266 MixTrack: 1267 00000935 66837E0C02 cmp word [esi+TrackInfo.RepLen], 2 1268 0000093A 7748 ja short MixLooped 1269 MixNonLooped: 1270 0000093C 8B16 mov edx, [esi+TrackInfo.Samples] 1271 0000093E 8B5E04 mov ebx, [esi+TrackInfo.Position] 1272 00000941 0FB76E08 movzx ebp, word [esi+TrackInfo.Len] 1273 00000945 52 push edx 1274 00000946 56 push esi 1275 00000947 01D3 add ebx, edx 1276 00000949 01D5 add ebp, edx 1277 0000094B 668B5612 mov dx, [esi+TrackInfo.Pitch] 1278 0000094F 8A460E mov al, [esi+TrackInfo.Volume] 1279 00000952 8A660F mov ah, [esi+TrackInfo.Error] 1280 00000955 89DE mov esi, ebx 1281 00000957 88C7 mov bh, al 1282 00000959 88D0 mov al, dl 1283 0000095B 88F2 mov dl, dh 1284 ;xor dh, dh 1285 0000095D 81E2FF000000 and edx, 0FFh 1286 nlMixSamp: 1287 00000963 39EE cmp esi, ebp 1288 00000965 7310 jae short nlMixBye 1289 00000967 8A1E mov bl, [esi] 1290 00000969 678A9F[121C] mov bl, [VolTable+bx] 1291 0000096E 001F add [edi], bl 1292 00000970 47 inc edi 1293 00000971 00C4 add ah, al 1294 00000973 11D6 adc esi, edx 1295 00000975 E2EC loop nlMixSamp 1296 nlMixBye: 1297 00000977 89F3 mov ebx, esi 1298 00000979 5E pop esi 1299 0000097A 5A pop edx 1300 0000097B 29D3 sub ebx, edx 1301 0000097D 895E04 mov [esi+TrackInfo.Position], ebx 1302 00000980 88660F mov [esi+TrackInfo.Error], ah 1303 00000983 C3 retn 1304 MixLooped: 1305 00000984 8B16 mov edx, [esi+TrackInfo.Samples] 1306 00000986 8B5E04 mov ebx, [esi+TrackInfo.Position] 1307 00000989 0FB76E0C movzx ebp, word [esi+TrackInfo.RepLen] 1308 0000098D 892D[206D0000] mov [BufRep], ebp 1309 ;add ebp, [esi+TrackInfo.Repeat] ; BUG ! 1310 00000993 66036E0A add bp, [esi+TrackInfo.Repeat] ; 07/10/2017 (BUGfix!) 1311 00000997 52 push edx 1312 00000998 56 push esi 1313 00000999 01D3 add ebx, edx 1314 0000099B 01D5 add ebp, edx 1315 0000099D 668B5612 mov dx, [esi+TrackInfo.Pitch] 1316 000009A1 8A460E mov al, [esi+TrackInfo.Volume] 1317 000009A4 8A660F mov ah, [esi+TrackInfo.Error] 1318 ;mov si, bx 1319 000009A7 89DE mov esi, ebx ; 04/09/2017 1320 000009A9 88C7 mov bh, al 1321 000009AB 88D0 mov al, dl 1322 000009AD 88F2 mov dl, dh 1323 ;xor dh, dh 1324 000009AF 81E2FF000000 and edx, 0FFh 1325 lpMixSamp: 1326 000009B5 39EE cmp esi, ebp 1327 000009B7 7206 jb short lpMixNow 1328 000009B9 2B35[206D0000] sub esi, [BufRep] 1329 lpMixNow: 1330 000009BF 8A1E mov bl, [esi] 1331 000009C1 678A9F[121C] mov bl, [VolTable+bx] 1332 000009C6 001F add [edi], bl 1333 000009C8 47 inc edi 1334 000009C9 00C4 add ah, al 1335 000009CB 11D6 adc esi, edx 1336 000009CD E2E6 loop lpMixSamp 1337 lpMixBye: 1338 ; mov ebx, esi 1339 ; pop esi 1340 ; pop edx 1341 ; sub ebx, edx 1342 ; mov [esi+TrackInfo.Position], ebx 1343 ; mov [esi+TrackInfo.Error], ah 1344 ; retn 1345 000009CF EBA6 jmp short nlMixBye 1346 1347 ;-------------------------------------------------------------------------- 1348 ; GetSamples: Returns the next chunk of samples to be played. 1349 ; In: 1350 ; Buffer - Buffer Address. 1351 ; Count - Buffer Size. 1352 ;-------------------------------------------------------------------------- 1353 1354 GetSamples: 1355 ; edi = buffer address 1356 ; ebx = count 1357 1358 000009D1 60 pushad 1359 1360 ;cld 1361 NextChunk: 1362 000009D2 66833D[1E6D0000]00 cmp word [BufLen], 0 1363 000009DA 7548 jne short CopyChunk 1364 1365 000009DC 53 push ebx 1366 000009DD 57 push edi 1367 MixChunk: 1368 000009DE BF[125D0000] mov edi, MixBuffer 1369 000009E3 0FB70D[186D0000] movzx ecx, word [BpmSamples] 1370 000009EA 893D[1A6D0000] mov [BufPtr], edi 1371 000009F0 66890D[1E6D0000] mov [BufLen], cx 1372 1373 000009F7 B080 mov al, 80h 1374 000009F9 F3AA rep stosb 1375 1376 000009FB 66B90400 mov cx, NumTracks 1377 000009FF BE[046D0000] mov esi, Tracks - TrackInfo.size 1378 GetSamples_next: 1379 00000A04 51 push ecx 1380 00000A05 83C624 add esi, TrackInfo.size 1381 00000A08 668B0D[1E6D0000] mov cx, [BufLen] 1382 00000A0F 8B3D[1A6D0000] mov edi, [BufPtr] 1383 00000A15 E81BFFFFFF call MixTrack 1384 00000A1A 59 pop ecx 1385 00000A1B E2E7 loop GetSamples_next 1386 1387 00000A1D E857FEFFFF call UpdateTracks 1388 1389 00000A22 5F pop edi 1390 00000A23 5B pop ebx 1391 CopyChunk: 1392 ;mov cx, [BufLen] 1393 00000A24 0FB70D[1E6D0000] movzx ecx, word [BufLen] 1394 00000A2B 39D9 cmp ecx, ebx 1395 ;cmp cx, bx 1396 00000A2D 7602 jbe short MoveChunk 1397 ;mov cx, bx 1398 00000A2F 89D9 mov ecx, ebx 1399 MoveChunk: 1400 00000A31 8B35[1A6D0000] mov esi, [BufPtr] 1401 00000A37 010D[1A6D0000] add [BufPtr], ecx 1402 00000A3D 66290D[1E6D0000] sub [BufLen], cx 1403 00000A44 29CB sub ebx, ecx 1404 00000A46 F3A4 rep movsb 1405 00000A48 85DB test ebx, ebx 1406 00000A4A 7586 jnz short NextChunk 1407 1408 00000A4C 61 popad 1409 00000A4D C3 retn 1410 1411 ;-------------------------------------------------------------------------- 1412 ; StartPlaying: Initializes the Sound System. 1413 ; In: 1414 ; Module Information Resources. 1415 ;-------------------------------------------------------------------------- 1416 1417 StartPlaying: 1418 00000A4E 60 pushad 1419 SetModParms: 1420 00000A4F C605[126D0000]00 mov byte [OrderPos], 0 1421 00000A56 C605[136D0000]06 mov byte [Tempo], DefTempo 1422 00000A5D C605[146D0000]06 mov byte [TempoWait], DefTempo 1423 00000A64 C605[156D0000]7D mov byte [Bpm], DefBpm 1424 00000A6B C605[166D0000]40 mov byte [Row], 64 1425 00000A72 C605[176D0000]00 mov byte [BreakRow], 0 1426 00000A79 66A1[6A0E0000] mov ax, [MixSpeed] 1427 00000A7F 31D2 xor edx, edx 1428 00000A81 66BB3200 mov bx, 24*DefBpm/60 1429 00000A85 66F7F3 div bx 1430 00000A88 66A3[186D0000] mov [BpmSamples], ax 1431 ClearTracks: 1432 00000A8E BF[286D0000] mov edi, Tracks 1433 00000A93 B990000000 mov ecx, NumTracks*TrackInfo.size 1434 00000A98 31C0 xor eax, eax 1435 ;cld 1436 00000A9A F3AA rep stosb 1437 1438 00000A9C A3[1A6D0000] mov [BufPtr], eax 1439 00000AA1 66A3[1E6D0000] mov [BufLen], ax 1440 MakePitch: 1441 00000AA7 66B80021 mov ax, MidCRate 1442 00000AAB 66BBAC01 mov bx, 428 1443 00000AAF 66F7E3 mul bx 1444 00000AB2 66F735[6A0E0000] div word [MixSpeed] 1445 00000AB9 30F6 xor dh, dh 1446 00000ABB 88E2 mov dl, ah 1447 00000ABD 88C4 mov ah, al 1448 00000ABF 30C0 xor al, al 1449 00000AC1 66B95903 mov cx, 857 1450 00000AC5 31DB xor ebx, ebx 1451 00000AC7 BF[60150000] mov edi, PitchTable 1452 PitchLoop: 1453 00000ACC 50 push eax 1454 00000ACD 52 push edx 1455 00000ACE 6639DA cmp dx, bx 1456 00000AD1 7303 jae short NoDiv 1457 00000AD3 66F7F3 div bx 1458 NoDiv: 1459 00000AD6 66AB stosw 1460 00000AD8 5A pop edx 1461 00000AD9 58 pop eax 1462 00000ADA 43 inc ebx 1463 00000ADB E2EF loop PitchLoop 1464 MakeVolume: 1465 00000ADD 66B90041 mov cx, 16640 1466 00000AE1 89CB mov ebx, ecx 1467 VolLoop: 1468 00000AE3 4B dec ebx 1469 00000AE4 88D8 mov al, bl 1470 00000AE6 F6EF imul bh 1471 00000AE8 88A3[121C0000] mov [VolTable+ebx], ah 1472 00000AEE E2F3 loop VolLoop 1473 1474 00000AF0 61 popad 1475 00000AF1 C3 retn 1476 1477 ;-------------------------------------------------------------------------- 1478 ; StopPlaying: ShutDown the Sound System. 1479 ;-------------------------------------------------------------------------- 1480 1481 StopPlaying: 1482 ; 19/06/2017 1483 ; Stop Playing 1484 sys _audio, 0700h 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 00000AF2 BB00070000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000AF7 B820000000 <1> mov eax, %1 98 <1> 99 00000AFC CD40 <1> int 40h 1485 ; Cancel callback service (for user) 1486 sys _audio, 0900h 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 00000AFE BB00090000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000B03 B820000000 <1> mov eax, %1 98 <1> 99 00000B08 CD40 <1> int 40h 1487 ; Deallocate Audio Buffer (for user) 1488 sys _audio, 0A00h 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 00000B0A BB000A0000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000B0F B820000000 <1> mov eax, %1 98 <1> 99 00000B14 CD40 <1> int 40h 1489 ; Disable Audio Device 1490 sys _audio, 0C00h 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 00000B16 BB000C0000 <1> mov ebx, %2 90 <1> %if %0 >= 3 91 <1> mov ecx, %3 92 <1> %if %0 = 4 93 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000B1B B820000000 <1> mov eax, %1 98 <1> 99 00000B20 CD40 <1> int 40h 1491 1492 00000B22 C3 retn 1493 1494 ; 24/06/2017 1495 ;-------------------------------------------------------------------------- 1496 ; ConvertSamples: Convert 8 bit mono samples to 16 bit stereo samples 1497 ;-------------------------------------------------------------------------- 1498 ; This Conversion is needed for AC'97 hardware 1499 ; which ony supports 16 bit stereo samples ! 1500 1501 ; source = temp_buffer (8192 bytes) 1502 ; destination = Audio_Buffer (32768 bytes) 1503 1504 ConvertSamples: 1505 ; 24/06/2017 1506 00000B23 B900200000 mov ecx, BUFFERSIZE /4 ; 8192 1507 00000B28 BE[00800100] mov esi, temp_buffer 1508 00000B2D BF[00000100] mov edi, Audio_Buffer 1509 c_smpl_1: 1510 00000B32 AC lodsb ; get 8 bit mono sample 1511 00000B33 20C0 and al, al 1512 00000B35 7506 jnz short c_smpl_2 1513 00000B37 66B80080 mov ax, 8000h 1514 00000B3B EB06 jmp short c_smpl_3 1515 c_smpl_2: 1516 00000B3D 2C80 sub al, 80h 1517 00000B3F 88C4 mov ah, al 1518 00000B41 28C0 sub al, al 1519 c_smpl_3: 1520 00000B43 6689C2 mov dx, ax 1521 00000B46 C1E010 shl eax, 16 1522 00000B49 6689D0 mov ax, dx 1523 00000B4C AB stosd ; save 16 bit stereo sample 1524 00000B4D E2E3 loop c_smpl_1 1525 1526 00000B4F C3 retn 1527 1528 ;============================================================================= 1529 ; 1530 ;============================================================================= 1531 1532 ;dword2str: 1533 ; ; 13/11/2016 - Erdogan Tan 1534 ; ; eax = dword value 1535 ; ; 1536 ; call dwordtohex 1537 ; mov [dword_str], edx 1538 ; mov [dword_str+4], eax 1539 ; mov si, dword_str 1540 ; retn 1541 1542 ; 05/03/2017 (TRDOS 386) 1543 ; trdos386.s (unix386.s) - 10/05/2015 1544 ; Convert binary number to hexadecimal string 1545 1546 ;bytetohex: 1547 ; ; INPUT -> 1548 ; ; AL = byte (binary number) 1549 ; ; OUTPUT -> 1550 ; ; AX = hexadecimal string 1551 ; ; 1552 ; push ebx 1553 ; movzx ebx, al 1554 ; shr bl, 4 1555 ; mov bl, [ebx+hex_chars] 1556 ; xchg bl, al 1557 ; and bl, 0Fh 1558 ; mov ah, [ebx+hex_chars] 1559 ; pop ebx 1560 ; retn 1561 1562 ;wordtohex: 1563 ; ; INPUT -> 1564 ; ; AX = word (binary number) 1565 ; ; OUTPUT -> 1566 ; ; EAX = hexadecimal string 1567 ; ; 1568 ; push ebx 1569 ; xor ebx, ebx 1570 ; xchg ah, al 1571 ; push eax 1572 ; mov bl, ah 1573 ; shr bl, 4 1574 ; mov al, [ebx+hex_chars] 1575 ; mov bl, ah 1576 ; and bl, 0Fh 1577 ; mov ah, [ebx+hex_chars] 1578 ; shl eax, 16 1579 ; pop eax 1580 ; pop ebx 1581 ; jmp short bytetohex 1582 1583 ;dwordtohex: 1584 ; ; INPUT -> 1585 ; ; EAX = dword (binary number) 1586 ; ; OUTPUT -> 1587 ; ; EDX:EAX = hexadecimal string 1588 ; ; 1589 ; push eax 1590 ; shr eax, 16 1591 ; call wordtohex 1592 ; mov edx, eax 1593 ; pop eax 1594 ; call wordtohex 1595 ; retn 1596 1597 ; 24/06/2017 1598 ; 19/06/2017 1599 ; 05/03/2017 (TRDOS 386) 1600 ; 13/11/2016 - Erdogan Tan 1601 write_audio_dev_info: 1602 ; BUS/DEV/FN 1603 ; 00000000BBBBBBBBDDDDDFFF00000000 1604 ; DEV/VENDOR 1605 ; DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV 1606 1607 00000B50 8B35[140F0000] mov esi, [dev_vendor] 1608 00000B56 6689F0 mov ax, si 1609 00000B59 0FB6D8 movzx ebx, al 1610 00000B5C 88DA mov dl, bl 1611 00000B5E 80E30F and bl, 0Fh 1612 00000B61 8A83[6C0E0000] mov al, [ebx+hex_chars] 1613 00000B67 A2[B10E0000] mov [msgVendorId+3], al 1614 00000B6C 88D3 mov bl, dl 1615 00000B6E C0EB04 shr bl, 4 1616 00000B71 8A83[6C0E0000] mov al, [ebx+hex_chars] 1617 00000B77 A2[B00E0000] mov [msgVendorId+2], al 1618 00000B7C 88E3 mov bl, ah 1619 00000B7E 88DA mov dl, bl 1620 00000B80 80E30F and bl, 0Fh 1621 00000B83 8A83[6C0E0000] mov al, [ebx+hex_chars] 1622 00000B89 A2[AF0E0000] mov [msgVendorId+1], al 1623 00000B8E 88D3 mov bl, dl 1624 00000B90 C0EB04 shr bl, 4 1625 00000B93 8A83[6C0E0000] mov al, [ebx+hex_chars] 1626 00000B99 A2[AE0E0000] mov [msgVendorId], al 1627 00000B9E C1EE10 shr esi, 16 1628 00000BA1 6689F0 mov ax, si 1629 00000BA4 88C3 mov bl, al 1630 00000BA6 88DA mov dl, bl 1631 00000BA8 80E30F and bl, 0Fh 1632 00000BAB 8A83[6C0E0000] mov al, [ebx+hex_chars] 1633 00000BB1 A2[C20E0000] mov [msgDevId+3], al 1634 00000BB6 88D3 mov bl, dl 1635 00000BB8 C0EB04 shr bl, 4 1636 00000BBB 8A83[6C0E0000] mov al, [ebx+hex_chars] 1637 00000BC1 A2[C10E0000] mov [msgDevId+2], al 1638 00000BC6 88E3 mov bl, ah 1639 00000BC8 88DA mov dl, bl 1640 00000BCA 80E30F and bl, 0Fh 1641 00000BCD 8A83[6C0E0000] mov al, [ebx+hex_chars] 1642 00000BD3 A2[C00E0000] mov [msgDevId+1], al 1643 00000BD8 88D3 mov bl, dl 1644 00000BDA C0EB04 shr bl, 4 1645 00000BDD 8A83[6C0E0000] mov al, [ebx+hex_chars] 1646 00000BE3 A2[BF0E0000] mov [msgDevId], al 1647 1648 00000BE8 8B35[180F0000] mov esi, [bus_dev_fn] 1649 00000BEE C1EE08 shr esi, 8 1650 00000BF1 6689F0 mov ax, si 1651 00000BF4 88C3 mov bl, al 1652 00000BF6 88DA mov dl, bl 1653 00000BF8 80E307 and bl, 7 ; bit 0,1,2 1654 00000BFB 8A83[6C0E0000] mov al, [ebx+hex_chars] 1655 00000C01 A2[E60E0000] mov [msgFncNo+1], al 1656 00000C06 88D3 mov bl, dl 1657 00000C08 C0EB03 shr bl, 3 1658 00000C0B 88DA mov dl, bl 1659 00000C0D 80E30F and bl, 0Fh 1660 00000C10 8A83[6C0E0000] mov al, [ebx+hex_chars] 1661 00000C16 A2[D80E0000] mov [msgDevNo+1], al 1662 00000C1B 88D3 mov bl, dl 1663 00000C1D C0EB04 shr bl, 4 1664 00000C20 8A83[6C0E0000] mov al, [ebx+hex_chars] 1665 00000C26 A2[D70E0000] mov [msgDevNo], al 1666 00000C2B 88E3 mov bl, ah 1667 00000C2D 88DA mov dl, bl 1668 00000C2F 80E30F and bl, 0Fh 1669 00000C32 8A83[6C0E0000] mov al, [ebx+hex_chars] 1670 00000C38 A2[CC0E0000] mov [msgBusNo+1], al 1671 00000C3D 88D3 mov bl, dl 1672 00000C3F C0EB04 shr bl, 4 1673 00000C42 8A83[6C0E0000] mov al, [ebx+hex_chars] 1674 00000C48 A2[CB0E0000] mov [msgBusNo], al 1675 1676 ; 24/06/2017 1677 00000C4D 66A1[200F0000] mov ax, [ac97_NamBar] 1678 00000C53 88C3 mov bl, al 1679 00000C55 88DA mov dl, bl 1680 00000C57 80E30F and bl, 0Fh 1681 00000C5A 8A83[6C0E0000] mov al, [ebx+hex_chars] 1682 00000C60 A2[F50E0000] mov [msgNamBar+3], al 1683 00000C65 88D3 mov bl, dl 1684 00000C67 C0EB04 shr bl, 4 1685 00000C6A 8A83[6C0E0000] mov al, [ebx+hex_chars] 1686 00000C70 A2[F40E0000] mov [msgNamBar+2], al 1687 00000C75 88E3 mov bl, ah 1688 00000C77 88DA mov dl, bl 1689 00000C79 80E30F and bl, 0Fh 1690 00000C7C 8A83[6C0E0000] mov al, [ebx+hex_chars] 1691 00000C82 A2[F30E0000] mov [msgNamBar+1], al 1692 00000C87 88D3 mov bl, dl 1693 00000C89 C0EB04 shr bl, 4 1694 00000C8C 8A83[6C0E0000] mov al, [ebx+hex_chars] 1695 00000C92 A2[F20E0000] mov [msgNamBar], al 1696 1697 00000C97 66A1[220F0000] mov ax, [ac97_NabmBar] 1698 00000C9D 88C3 mov bl, al 1699 00000C9F 88DA mov dl, bl 1700 00000CA1 80E30F and bl, 0Fh 1701 00000CA4 8A83[6C0E0000] mov al, [ebx+hex_chars] 1702 00000CAA A2[050F0000] mov [msgNabmBar+3], al 1703 00000CAF 88D3 mov bl, dl 1704 00000CB1 C0EB04 shr bl, 4 1705 00000CB4 8A83[6C0E0000] mov al, [ebx+hex_chars] 1706 00000CBA A2[040F0000] mov [msgNabmBar+2], al 1707 00000CBF 88E3 mov bl, ah 1708 00000CC1 88DA mov dl, bl 1709 00000CC3 80E30F and bl, 0Fh 1710 00000CC6 8A83[6C0E0000] mov al, [ebx+hex_chars] 1711 00000CCC A2[030F0000] mov [msgNabmBar+1], al 1712 00000CD1 88D3 mov bl, dl 1713 00000CD3 C0EB04 shr bl, 4 1714 00000CD6 8A83[6C0E0000] mov al, [ebx+hex_chars] 1715 00000CDC A2[020F0000] mov [msgNabmBar], al 1716 1717 ; 24/11/2016 1718 00000CE1 30E4 xor ah, ah 1719 00000CE3 A0[240F0000] mov al, [ac97_int_ln_reg] 1720 00000CE8 B10A mov cl, 10 1721 00000CEA F6F1 div cl 1722 00000CEC 660105[0E0F0000] add [msgIRQ], ax 1723 00000CF3 20C0 and al, al 1724 00000CF5 750D jnz short _w_ac97imsg_ ; 19/06/2017 1725 00000CF7 A0[0F0F0000] mov al, [msgIRQ+1] 1726 00000CFC B420 mov ah, ' ' 1727 00000CFE 66A3[0E0F0000] mov [msgIRQ], ax 1728 _w_ac97imsg_: 1729 ; EBX = Message address 1730 ; ECX = Max. message length (or stop on ZERO character) 1731 ; (1 to 255) 1732 ; DL = Message color (07h = light gray, 0Fh = white) 1733 sys _msg, msgAC97Info, 255, 07h 84 <1> 85 <1> 86 <1> 87 <1> 88 <1> %if %0 >= 2 89 00000D04 BB[7D0E0000] <1> mov ebx, %2 90 <1> %if %0 >= 3 91 00000D09 B9FF000000 <1> mov ecx, %3 92 <1> %if %0 = 4 93 00000D0E BA07000000 <1> mov edx, %4 94 <1> %endif 95 <1> %endif 96 <1> %endif 97 00000D13 B823000000 <1> mov eax, %1 98 <1> 99 00000D18 CD40 <1> int 40h 1734 00000D1A C3 retn 1735 1736 ;============================================================================= 1737 ; preinitialized data 1738 ;============================================================================= 1739 1740 ;============================================================================= 1741 ; PLAY.ASM - DATA 1742 ;============================================================================= 1743 1744 msg_2017: 1745 00000D1B 54696E79204D4F4420- db 'Tiny MOD Player for TRDOS 386 by Erdogan Tan. ' 1745 00000D24 506C6179657220666F- 1745 00000D2D 72205452444F532033- 1745 00000D36 383620627920457264- 1745 00000D3F 6F67616E2054616E2E- 1745 00000D48 20 1746 ;;;db 'October 2017.',10,13 1747 ;;db 'June 2024.',10,13 1748 ;db 'December 2024',10,13 1749 00000D49 4A616E756172792032- db 'January 2026',10,13 1749 00000D52 3032360A0D 1750 00000D57 75736167653A206D6F- db 'usage: modplay filename.mod', 10,13,0 1750 00000D60 64706C61792066696C- 1750 00000D69 656E616D652E6D6F64- 1750 00000D72 0A0D00 1751 00000D75 30382F31302F323031- db '08/10/2017',10,13,0 1751 00000D7E 370A0D00 1752 ;;db '02/06/2024',10,13,0 1753 ;db '27/12/2024',10,13,0 1754 00000D82 31332F30312F323032- db '13/01/2026',10,13,0 1754 00000D8B 360A0D00 1755 1756 00000D8F 54696E79204D4F4420- Credits: db 'Tiny MOD Player v0.1b by Carlos Hasan. July 1993.' 1756 00000D98 506C61796572207630- 1756 00000DA1 2E3162206279204361- 1756 00000DAA 726C6F732048617361- 1756 00000DB3 6E2E204A756C792031- 1756 00000DBC 3939332E 1757 00000DC0 0A0D00 db 10,13,0 1758 00000DC3 4572726F72206C6F61- ErrorMesg: db 'Error loading Module file.',10,13,0 1758 00000DCC 64696E67204D6F6475- 1758 00000DD5 6C652066696C652E0A- 1758 00000DDE 0D00 1759 ;MsgNotFound: db 'Sound Blaster not found or IRQ error.',10,13,0 1760 ;MsgFound: db 'Sound Blaster found at Address 2' 1761 ;PortText: db 'x0h, IRQ ' 1762 ;IrqText: db 'x.',10,13,0 1763 1764 trdos386_err_msg: 1765 00000DE0 5452444F5320333836- db 'TRDOS 386 System call error !', 10, 13,0 1765 00000DE9 2053797374656D2063- 1765 00000DF2 616C6C206572726F72- 1765 00000DFB 20210A0D00 1766 1767 ;============================================================================= 1768 ; MODPLAY.ASM - DATA 1769 ;============================================================================= 1770 1771 ;Credits: db 'Amiga Module Player v0.3b by Carlos Hasan.' 1772 1773 00000E00 0019324A62788EA2B4- SinTable: db 0,25,50,74,98,120,142,162,180,197,212,225 1773 00000E09 C5D4E1 1774 00000E0C ECF4FAFEFFFEFAF4EC- db 236,244,250,254,255,254,250,244,236,225 1774 00000E15 E1 1775 00000E16 D4C5B4A28E78624A32- db 212,197,180,162,142,120,98,74,50,25 1775 00000E1F 19 1776 1777 00000E20 58032803FA02D002A6- PeriodTable: dw 856,808,762,720,678,640,604,570,538,508,480,453 1777 00000E29 0280025C023A021A02- 1777 00000E32 FC01E001C501 1778 00000E38 AC0194017D01680153- dw 428,404,381,360,339,320,302,285,269,254,240,226 1778 00000E41 0140012E011D010D01- 1778 00000E4A FE00F000E200 1779 00000E50 D600CA00BE00B400AA- dw 214,202,190,180,170,160,151,143,135,127,120,113 1779 00000E59 00A00097008F008700- 1779 00000E62 7F0078007100 1780 1781 ;============================================================================= 1782 ; PLAYER.ASM - DATA 1783 ;============================================================================= 1784 1785 00000E68 01 stmo: db 1 ; stereo (2) or mono (1) 1786 00000E69 08 bps: db 8 ; bits per sample (8 or 16) 1787 Sample_Rate: 1788 MixSpeed: ;dw 22050 ; Hz 1789 ; 02/06/2024 1790 00000E6A 80BB dw 48000 ; Hz 1791 1792 ; 13/11/2016 1793 00000E6C 303132333435363738- hex_chars: db "0123456789ABCDEF", 0 1793 00000E75 3941424344454600 1794 ; 1795 msgAC97Info: 1796 00000E7D 0D0A db 0Dh, 0Ah 1797 00000E7F 414339372041756469- db "AC97 Audio Controller & Codec Info", 0Dh, 0Ah 1797 00000E88 6F20436F6E74726F6C- 1797 00000E91 6C6572202620436F64- 1797 00000E9A 656320496E666F0D0A 1798 00000EA3 56656E646F72204944- db "Vendor ID: " 1798 00000EAC 3A20 1799 00000EAE 303030306820446576- msgVendorId: db "0000h Device ID: " 1799 00000EB7 6963652049443A20 1800 00000EBF 30303030680D0A msgDevId: db "0000h", 0Dh, 0Ah 1801 00000EC6 4275733A20 db "Bus: " 1802 00000ECB 303068204465766963- msgBusNo: db "00h Device: " 1802 00000ED4 653A20 1803 00000ED7 3030682046756E6374- msgDevNo: db "00h Function: " 1803 00000EE0 696F6E3A20 1804 00000EE5 303068 msgFncNo db "00h" 1805 00000EE8 0D0A db 0Dh, 0Ah 1806 00000EEA 4E414D4241523A20 db "NAMBAR: " 1807 00000EF2 30303030682020 msgNamBar db "0000h " 1808 00000EF9 4E41424D4241523A20 db "NABMBAR: " 1809 00000F02 303030306820204952- msgNabmBar db "0000h IRQ: " 1809 00000F0B 513A20 1810 00000F0E 3030 msgIRQ: dw 3030h 1811 00000F10 0D0A00 db 0Dh, 0Ah, 0 1812 1813 ;; 13/11/2016 - Erdogan Tan (Ref: KolibriOS, codec.inc) 1814 ;codec_id: dd 0 1815 ;codec_chip_id: dd 0 1816 ;codec_vendor_ids: dw 0 1817 ;codec_chip_ids: dw 0 1818 1819 ;dword_str: dd 30303030h, 30303030h 1820 ; db 'h', 0Dh, 0Ah, 0 1821 1822 ;============================================================================= 1823 ; uninitialized data 1824 ;============================================================================= 1825 1826 bss_start: 1827 1828 ABSOLUTE bss_start 1829 1830 00000F13 ?? alignb 4 1831 1832 00000F14 ???????? dev_vendor: resd 1 1833 00000F18 ???????? bus_dev_fn: resd 1 1834 00000F1C ???????? stats_cmd: resd 1 1835 00000F20 ???? ac97_NamBar: resw 1 1836 00000F22 ???? ac97_NabmBar: resw 1 1837 00000F24 ?? ac97_int_ln_reg: resb 1 1838 00000F25 ?? srb: resb 1 1839 1840 ; MODLOAD.ASM 1841 00000F26 ???????? FileHandle: resd 1 1842 00000F2A Header: resb ModHeader.size 1843 1844 ; MODPLAY.ASM 1845 ;MixSpeed: resw 1 1846 1847 ModInfo: 1848 00001366 ?? ModInfo.OrderLen: resb 1 1849 00001367 ?? ModInfo.ReStart: resb 1 1850 00001368 ModInfo.Order: resb 128 1851 000013E8 ???????? ModInfo.Patterns: resd 1 1852 1853 000013EC ModInfo.SampOfs: resw 31 1854 0000142A ModInfo.SampSeg: resw 31 1855 00001468 ModInfo.SampLen: resw 31 1856 000014A6 ModInfo.SampRep: resw 31 1857 000014E4 ModInfo.SampRepLen: resw 31 1858 00001522 ModInfo.SampVol: resw 31 1859 1860 ; MODPLAY.ASM 1861 00001560 PitchTable: resw 857 1862 00001C12 VolTable: resb 16640 1863 00005D12 MixBuffer resb MixBufSize 1864 1865 ; MODPLAY.ASM 1866 00006D12 ?? OrderPos: resb 1 1867 00006D13 ?? Tempo: resb 1 1868 00006D14 ?? TempoWait: resb 1 1869 00006D15 ?? Bpm: resb 1 1870 00006D16 ?? Row: resb 1 1871 00006D17 ?? BreakRow: resb 1 1872 00006D18 ???? BpmSamples: resw 1 1873 00006D1A ???????? BufPtr: resd 1 1874 00006D1E ???? BufLen: resw 1 1875 00006D20 ???????? BufRep: resd 1 1876 00006D24 ???????? Note: resd 1 1877 00006D28 Tracks: resb TrackInfo.size*NumTracks 1878 1879 00006DB8 ???????????????? alignb 16 1880 1881 ; PLAY.ASM 1882 Scope: ;resw 320 1883 00006DC0 resd 640 ; 27/12/2024 1884 RowOfs: ;resw 256 1885 000077C0 resd 256 ; 27/12/2024 1886 1887 ; 27/12/2024 1888 00007BC0 ???????? timerticks: resd 1 1889 00007BC4 ???????? LFB_ADDR: resd 1 1890 1891 mod_file_name: 1892 00007BC8 resb 80 1893 1894 00007C18 alignb 4096 1895 1896 g_buff: ;resb 320*4 ; 24/06/2017 1897 00008000 resb 640*4 ; 27/12/2024 1898 1899 00008A00 alignb 65536 1900 1901 Audio_Buffer: 1902 00010000 resb BUFFERSIZE ; DMA Buffer Size / 2 (32768) 1903 temp_buffer: 1904 00018000 resb BUFFERSIZE / 4 ; 8192 1905 1906 0001A000 alignb 65536 1907 1908 file_buffer: 1909 00020000 resb 65536*6 1910 EOF: