1 ; **************************************************************************** 2 ; playmod4.s (for TRDOS 386) 3 ; ---------------------------------------------------------------------------- 4 ; PLAYMOD4.PRG ! VIA VT8237R MOD PLAYER & VGA DEMO program by Erdogan TAN 5 ; 6 ; 05/03/2017 7 ; 8 ; [ Last Modification: 08/10/2017 ] 9 ; 10 ; Derived from source code of 'PLAY.EXE' (TINYPLAY) by Carlos Hasan (1993) 11 ; PLAY.EXE: PLAY.ASM, MODLOAD.ASM, MODPLAY.ASM, SB.ASM 12 ; 13 ; Modified by using the source code of 'tinyply3.s' ('TINYPLY3.PRG') 14 ; by Erdogan Tan (07/10/2017) 15 ; 16 ; Modified from 'wavplay2.s' (11/06/2017) 17 ; 18 ; Modified from 'TINYPLAY.PRG' ('tinyplay.s') source code by Erdogan Tan 19 ; (05/03/2017) 20 ; 21 ; Derived from source code of 'TINYPLAY.COM' ('TINYPLAY.ASM') by Erdogan Tan 22 ; (04/03/2017) 23 ; Assembler: NASM 2.11 24 ; ---------------------------------------------------------------------------- 25 ; nasm playmod.s -l playmod.txt -o PLAYMOD.PRG 26 ; **************************************************************************** 27 ; PLAYMOD.ASM by Erdogan Tan (for MSDOS) (15/02/2017) 28 ; TMODYPLAY.ASM by Erdogan Tan (for MSDOS) (01/10/2017) 29 30 ; 01/03/2017 31 ; 16/10/2016 32 ; 29/04/2016 33 ; TRDOS 386 system calls (temporary list!) 34 _ver equ 0 35 _exit equ 1 36 _fork equ 2 37 _read equ 3 38 _write equ 4 39 _open equ 5 40 _close equ 6 41 _wait equ 7 42 _creat equ 8 43 _link equ 9 44 _unlink equ 10 45 _exec equ 11 46 _chdir equ 12 47 _time equ 13 48 _mkdir equ 14 49 _chmod equ 15 50 _chown equ 16 51 _break equ 17 52 _stat equ 18 53 _seek equ 19 54 _tell equ 20 55 _mount equ 21 56 _umount equ 22 57 _setuid equ 23 58 _getuid equ 24 59 _stime equ 25 60 _quit equ 26 61 _intr equ 27 62 _fstat equ 28 63 _emt equ 29 64 _mdate equ 30 65 _video equ 31 66 _audio equ 32 67 _timer equ 33 68 _sleep equ 34 69 _msg equ 35 70 _geterr equ 36 71 _fpsave equ 37 72 _pri equ 38 73 _rele equ 39 74 _fff equ 40 75 _fnf equ 41 76 _alloc equ 42 77 _dalloc equ 43 78 _calbac equ 44 79 80 %macro sys 1-4 81 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 82 ; 03/09/2015 83 ; 13/04/2015 84 ; Retro UNIX 386 v1 system call. 85 %if %0 >= 2 86 mov ebx, %2 87 %if %0 >= 3 88 mov ecx, %3 89 %if %0 = 4 90 mov edx, %4 91 %endif 92 %endif 93 %endif 94 mov eax, %1 95 ;int 30h 96 int 40h ; TRDOS 386 (TRDOS v2.0) 97 %endmacro 98 99 ; TRDOS 386 (and Retro UNIX 386 v1) system call format: 100 ; sys systemcall (eax) , , 101 102 ; 19/06/2017 103 BUFFERSIZE equ 2*32768 ; 25/06/2017 104 105 ; ---------------------------------------------------------------------------- 106 ; Tiny MOD Player v0.1b by Carlos Hasan. 107 ; July 14th, 1993. 108 109 ;============================================================================= 110 ; 111 ;============================================================================= 112 113 [BITS 32] 114 [org 0] 115 116 Start: 117 ; clear bss 118 00000000 B9[00000900] mov ecx, EOF 119 00000005 BF[F80E0000] mov edi, bss_start 120 0000000A 29F9 sub ecx, edi 121 0000000C D1E9 shr ecx, 1 122 0000000E 31C0 xor eax, eax 123 00000010 F366AB rep stosw 124 125 ; Detect (& Enable) VT8233 Audio Device 126 00000013 E8E5010000 call DetectVT8233 127 00000018 731B jnc short GetFileName 128 129 _dev_not_ready: 130 ; couldn't find the audio device! 131 sys _msg, noDevMsg, 255, 0Fh 131 <1> 131 <1> 131 <1> 131 <1> 131 <1> %if %0 >= 2 131 0000001A BB[0A020000] <1> mov ebx, %2 131 <1> %if %0 >= 3 131 0000001F B9FF000000 <1> mov ecx, %3 131 <1> %if %0 = 4 131 00000024 BA0F000000 <1> mov edx, %4 131 <1> %endif 131 <1> %endif 131 <1> %endif 131 00000029 B823000000 <1> mov eax, %1 131 <1> 131 0000002E CD40 <1> int 40h 132 00000030 E9A7010000 jmp Exit 133 134 GetFileName: 135 00000035 89E6 mov esi, esp 136 00000037 AD lodsd 137 00000038 83F802 cmp eax, 2 ; two arguments 138 ; (program file name & mod file name) 139 0000003B 0F82A4010000 jb pmsg_usage ; nothing to do 140 141 00000041 AD lodsd ; program file name address 142 00000042 AD lodsd ; mod file name address (file to be read) 143 00000043 89C6 mov esi, eax 144 00000045 BF[D0860000] mov edi, mod_file_name 145 ScanName: 146 0000004A AC lodsb 147 0000004B 84C0 test al, al 148 0000004D 0F8492010000 je pmsg_usage 149 00000053 3C20 cmp al, 20h 150 00000055 74F3 je short ScanName ; scan start of name. 151 00000057 AA stosb 152 00000058 B4FF mov ah, 0FFh 153 a_0: 154 0000005A FEC4 inc ah 155 a_1: 156 0000005C AC lodsb 157 0000005D AA stosb 158 0000005E 3C2E cmp al, '.' 159 00000060 74F8 je short a_0 160 00000062 20C0 and al, al 161 00000064 75F6 jnz short a_1 162 163 00000066 08E4 or ah, ah ; if period NOT found, 164 00000068 750B jnz short PrintMesg ; then add a .MOD extension. 165 SetExt: 166 0000006A 4F dec edi 167 0000006B C7072E4D4F44 mov dword [edi], '.MOD' 168 00000071 C6470400 mov byte [edi+4], 0 169 PrintMesg: 170 ; Prints the Credits Text. 171 sys _msg, Credits, 255, 0Fh 171 <1> 171 <1> 171 <1> 171 <1> 171 <1> %if %0 >= 2 171 00000075 BB[E00D0000] <1> mov ebx, %2 171 <1> %if %0 >= 3 171 0000007A B9FF000000 <1> mov ecx, %3 171 <1> %if %0 = 4 171 0000007F BA0F000000 <1> mov edx, %4 171 <1> %endif 171 <1> %endif 171 <1> %endif 171 00000084 B823000000 <1> mov eax, %1 171 <1> 171 00000089 CD40 <1> int 40h 172 _1: 173 ; 19/06/2017 174 ; Allocate Audio Buffer (for user) 175 sys _audio, 0200h, BUFFERSIZE, Audio_Buffer 175 <1> 175 <1> 175 <1> 175 <1> 175 <1> %if %0 >= 2 175 0000008B BB00020000 <1> mov ebx, %2 175 <1> %if %0 >= 3 175 00000090 B900000100 <1> mov ecx, %3 175 <1> %if %0 = 4 175 00000095 BA[00900000] <1> mov edx, %4 175 <1> %endif 175 <1> %endif 175 <1> %endif 175 0000009A B820000000 <1> mov eax, %1 175 <1> 175 0000009F CD40 <1> int 40h 176 000000A1 0F8207010000 jc error_exit 177 _2: 178 ; Initialize Audio Device (bl = 1 -> Interrrupt method) 179 ;sys _audio, 0301h, 0, ac97_int_handler 180 ;jc error_exit 181 182 ; Initialize Audio Device (bl = 0 -> SRB method) 183 sys _audio, 0300h, 1, srb 183 <1> 183 <1> 183 <1> 183 <1> 183 <1> %if %0 >= 2 183 000000A7 BB00030000 <1> mov ebx, %2 183 <1> %if %0 >= 3 183 000000AC B901000000 <1> mov ecx, %3 183 <1> %if %0 = 4 183 000000B1 BA[070F0000] <1> mov edx, %4 183 <1> %endif 183 <1> %endif 183 <1> %endif 183 000000B6 B820000000 <1> mov eax, %1 183 <1> 183 000000BB CD40 <1> int 40h 184 000000BD 0F82EB000000 jc error_exit 185 186 LoadMod: 187 000000C3 BF[D0860000] mov edi, mod_file_name 188 000000C8 E808020000 call LoadModule ; Load the MODule... 189 ; 08/10/2017 190 000000CD 731B jnc short _3 ; any error loading? 191 192 ; yes, print error and Exit. 193 194 sys _msg, ErrorMesg, 255, 0Fh 194 <1> 194 <1> 194 <1> 194 <1> 194 <1> %if %0 >= 2 194 000000CF BB[140E0000] <1> mov ebx, %2 194 <1> %if %0 >= 3 194 000000D4 B9FF000000 <1> mov ecx, %3 194 <1> %if %0 = 4 194 000000D9 BA0F000000 <1> mov edx, %4 194 <1> %endif 194 <1> %endif 194 <1> %endif 194 000000DE B823000000 <1> mov eax, %1 194 <1> 194 000000E3 CD40 <1> int 40h 195 000000E5 E9F2000000 jmp Exit 196 197 _3: 198 ; 10/06/2017 199 sys _audio, 0E00h ; get audio controller info 199 <1> 199 <1> 199 <1> 199 <1> 199 <1> %if %0 >= 2 199 000000EA BB000E0000 <1> mov ebx, %2 199 <1> %if %0 >= 3 199 <1> mov ecx, %3 199 <1> %if %0 = 4 199 <1> mov edx, %4 199 <1> %endif 199 <1> %endif 199 <1> %endif 199 000000EF B820000000 <1> mov eax, %1 199 <1> 199 000000F4 CD40 <1> int 40h 200 000000F6 0F82B2000000 jc error_exit 201 202 ;cmp ah, 3 ; VT 8233? (VIA AC'97 Audio Controller) 203 ;jne _dev_not_ready 204 205 ; EAX = IRQ Number in AL 206 ; Audio Device Number in AH 207 ; EBX = DEV/VENDOR ID 208 ; (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV) 209 ; ECX = BUS/DEV/FN 210 ; (00000000BBBBBBBBDDDDDFFF00000000) 211 ; EDX = Base IO Addr (DX) for SB16 & VT8233 212 ; EDX = NABMBAR/NAMBAR (for AC97) 213 ; (Low word, DX = NAMBAR address) 214 215 000000FC A2[060F0000] mov [ac97_int_ln_reg], al 216 00000101 891D[F80E0000] mov [dev_vendor], ebx 217 00000107 890D[FC0E0000] mov [bus_dev_fn], ecx 218 0000010D 668915[040F0000] mov [ac97_io_base], dx 219 220 00000114 E894090000 call write_audio_dev_info 221 222 PlayNow: 223 00000119 E8AE080000 call StartPlaying 224 225 ; load 65536 bytes into audio buffer 226 0000011E BF[00900000] mov edi, Audio_Buffer 227 00000123 BB00000100 mov ebx, BUFFERSIZE 228 00000128 E820080000 call GetSamples 229 0000012D 727F jc error_exit 230 231 ;mov ecx, 128 ; Make a lookup table 232 0000012F B180 mov cl, 128 233 00000131 31DB xor ebx, ebx ; for fastest pixel 234 00000133 BA002D0000 mov edx, 320*(100-64) ; addressing. 235 MakeOfs: 236 00000138 668993[D0840000] mov [RowOfs+ebx], dx 237 0000013F 668993[D2840000] mov [RowOfs+ebx+2], dx 238 00000146 6681C24001 add dx, 320 239 0000014B 83C304 add ebx, 4 240 0000014E E2E8 loop MakeOfs 241 242 ; 23/06/2017 243 ; Map DMA buffer to user's memory space 244 sys _audio, 0D00h, 2*65536, DMA_Buffer 244 <1> 244 <1> 244 <1> 244 <1> 244 <1> %if %0 >= 2 244 00000150 BB000D0000 <1> mov ebx, %2 244 <1> %if %0 >= 3 244 00000155 B900000200 <1> mov ecx, %3 244 <1> %if %0 = 4 244 0000015A BA[00000200] <1> mov edx, %4 244 <1> %endif 244 <1> %endif 244 <1> %endif 244 0000015F B820000000 <1> mov eax, %1 244 <1> 244 00000164 CD40 <1> int 40h 245 ;jc error_exit 246 247 ; Set Master Volume Level 248 sys _audio, 0B00h, 1D1Dh 248 <1> 248 <1> 248 <1> 248 <1> 248 <1> %if %0 >= 2 248 00000166 BB000B0000 <1> mov ebx, %2 248 <1> %if %0 >= 3 248 0000016B B91D1D0000 <1> mov ecx, %3 248 <1> %if %0 = 4 248 <1> mov edx, %4 248 <1> %endif 248 <1> %endif 248 <1> %endif 248 00000170 B820000000 <1> mov eax, %1 248 <1> 248 00000175 CD40 <1> int 40h 249 250 ;mov word [MixSpeed], 22050 ; Mixing at 22.050 kHz 251 252 ; Start to play 253 00000177 A0[550E0000] mov al, [bps] 254 0000017C C0E804 shr al, 4 ; 8 -> 0, 16 -> 1 255 0000017F D0E0 shl al, 1 ; 16 -> 2, 8 -> 0 256 00000181 8A1D[540E0000] mov bl, [stmo] 257 00000187 FECB dec bl 258 00000189 08C3 or bl, al 259 0000018B 668B0D[560E0000] mov cx, [MixSpeed] ; [Sample_Rate] ; Hz 260 00000192 B704 mov bh, 4 ; start to play 261 sys _audio 261 <1> 261 <1> 261 <1> 261 <1> 261 <1> %if %0 >= 2 261 <1> mov ebx, %2 261 <1> %if %0 >= 3 261 <1> mov ecx, %3 261 <1> %if %0 = 4 261 <1> mov edx, %4 261 <1> %endif 261 <1> %endif 261 <1> %endif 261 00000194 B820000000 <1> mov eax, %1 261 <1> 261 00000199 CD40 <1> int 40h 262 263 ;; SETUP SIGNAL RESPONSE BYTE 264 ;; 06/03/2017 265 ;mov bl, [ac97_int_ln_reg] ; IRQ number 266 ;mov bh, 1 ; Link IRQ to user for Signal Response Byte 267 ;mov edx, srb ; Signal Response/Return Byte address 268 ;mov ecx, 0FFh ; Signal Response/Return Byte value 269 ;sys _calbac 270 ;jc short error_exit 271 272 ; DIRECT VGA MEMORY ACCESS 273 ; bl = 0, bh = 5 274 ; Direct access/map to VGA memory (0A0000h) 275 276 sys _video, 0500h 276 <1> 276 <1> 276 <1> 276 <1> 276 <1> %if %0 >= 2 276 0000019B BB00050000 <1> mov ebx, %2 276 <1> %if %0 >= 3 276 <1> mov ecx, %3 276 <1> %if %0 = 4 276 <1> mov edx, %4 276 <1> %endif 276 <1> %endif 276 <1> %endif 276 000001A0 B81F000000 <1> mov eax, %1 276 <1> 276 000001A5 CD40 <1> int 40h 277 000001A7 3D00000A00 cmp eax, 0A0000h 278 000001AC 7418 je short _a3 279 error_exit: 280 sys _msg, trdos386_err_msg, 255, 0Eh 280 <1> 280 <1> 280 <1> 280 <1> 280 <1> %if %0 >= 2 280 000001AE BB[310E0000] <1> mov ebx, %2 280 <1> %if %0 >= 3 280 000001B3 B9FF000000 <1> mov ecx, %3 280 <1> %if %0 = 4 280 000001B8 BA0E000000 <1> mov edx, %4 280 <1> %endif 280 <1> %endif 280 <1> %endif 280 000001BD B823000000 <1> mov eax, %1 280 <1> 280 000001C2 CD40 <1> int 40h 281 000001C4 EB16 jmp short Exit 282 283 ; Note: Normally IRQ 0 calls the ModPlay Polling at 18.2Hz thru 284 ; the software interrupt 1Ch. If the IRQ 0 is disabled, then 285 ; the INT 1Ch MUST BE CALLED at least MixSpeed/1024 times per 286 ; second, or the module will sound "looped". 287 ; Because we need better sync with the ModPlayer to draw the scope, 288 ; the polling is called from my routine, and then the irq 0 must be 289 ; disabled. The [DmaBuffer] points to the current buffer of 8-bit 290 ; samples played by the Sound Blaster. Note that some samples are 291 ; discarded in the next code, just for fun! 292 293 _a3: 294 000001C6 66B81300 mov ax, 0013h ; Set Mode 320x200x256 295 000001CA CD31 int 31h 296 297 000001CC E870000000 call ModPlay ; 13/02/2017 298 299 _s_exit: 300 000001D1 E8A6080000 call StopPlaying ; STOP! 301 302 000001D6 66B80300 mov ax, 0003h ; Set Text Mode 80x25x16 303 000001DA CD31 int 31h 304 Exit: 305 ;call FreeModule ; Free MODule core. 306 307 sys _exit ; Bye ! 307 <1> 307 <1> 307 <1> 307 <1> 307 <1> %if %0 >= 2 307 <1> mov ebx, %2 307 <1> %if %0 >= 3 307 <1> mov ecx, %3 307 <1> %if %0 = 4 307 <1> mov edx, %4 307 <1> %endif 307 <1> %endif 307 <1> %endif 307 000001DC B801000000 <1> mov eax, %1 307 <1> 307 000001E1 CD40 <1> int 40h 308 here: 309 000001E3 EBFE jmp short here 310 311 pmsg_usage: 312 sys _msg, msg_usage, 255, 0Fh 312 <1> 312 <1> 312 <1> 312 <1> 312 <1> %if %0 >= 2 312 000001E5 BB[780D0000] <1> mov ebx, %2 312 <1> %if %0 >= 3 312 000001EA B9FF000000 <1> mov ecx, %3 312 <1> %if %0 = 4 312 000001EF BA0F000000 <1> mov edx, %4 312 <1> %endif 312 <1> %endif 312 <1> %endif 312 000001F4 B823000000 <1> mov eax, %1 312 <1> 312 000001F9 CD40 <1> int 40h 313 000001FB EBDF jmp short Exit 314 315 DetectVT8233: 316 ; Detect (BH=1) VT8233 (BL=3) Audio Controller 317 sys _audio, 0103h 317 <1> 317 <1> 317 <1> 317 <1> 317 <1> %if %0 >= 2 317 000001FD BB03010000 <1> mov ebx, %2 317 <1> %if %0 >= 3 317 <1> mov ecx, %3 317 <1> %if %0 = 4 317 <1> mov edx, %4 317 <1> %endif 317 <1> %endif 317 <1> %endif 317 00000202 B820000000 <1> mov eax, %1 317 <1> 317 00000207 CD40 <1> int 40h 318 00000209 C3 retn 319 320 noDevMsg: 321 0000020A 4572726F723A20556E- db "Error: Unable to find VIA VT8233 based audio device!",13,10,0 321 00000213 61626C6520746F2066- 321 0000021C 696E64205649412056- 321 00000225 543832333320626173- 321 0000022E 656420617564696F20- 321 00000237 646576696365210D0A- 321 00000240 00 322 323 ;ac97_int_handler: 324 ; ; 19/06/2017 325 ; mov byte [srb], 1 ; interrupt (or signal response byte) 326 ; 327 ; sys _rele ; return from callback service 328 ; ; we must not come here ! 329 ; sys _exit 330 331 ;============================================================================= 332 ; 333 ;============================================================================= 334 335 ModPlay: 336 ; 23/06/2017 337 ; 21/06/2017 338 ; 19/06/2017 339 340 ; 05/03/2017 (TRDOS 386) 341 ; 14/02/2017 342 ; 13/02/2017 343 ; 08/12/2016 344 ; 28/11/2016 345 346 00000241 EB10 jmp short modp_gs ; 23/06/2017 347 p_loop: 348 00000243 803D[070F0000]00 cmp byte [srb], 0 349 0000024A 7616 jna short q_loop 350 0000024C C605[070F0000]00 mov byte [srb], 0 351 modp_gs: 352 00000253 BF[00900000] mov edi, Audio_Buffer 353 00000258 BB00000100 mov ebx, BUFFERSIZE ; 65536 bytes ; 25/06/2017 354 0000025D E8EB060000 call GetSamples 355 q_loop: 356 00000262 B401 mov ah, 1 ; any key pressed? 357 00000264 CD32 int 32h ; no, Loop. 358 00000266 7405 jz short r_loop 359 360 00000268 B400 mov ah, 0 ; flush key buffer... 361 0000026A CD32 int 32h 362 q_return: 363 0000026C C3 retn 364 r_loop: 365 ; Get Current DMA buffer Pointer 366 ; 23/06/2017 367 ; bh = 15, get current pointer (DMA buffer offset) 368 ; bl = 0, for PCM OUT 369 ; ecx = 0 370 ; 371 sys _audio, 0F00h, 0 371 <1> 371 <1> 371 <1> 371 <1> 371 <1> %if %0 >= 2 371 0000026D BB000F0000 <1> mov ebx, %2 371 <1> %if %0 >= 3 371 00000272 B900000000 <1> mov ecx, %3 371 <1> %if %0 = 4 371 <1> mov edx, %4 371 <1> %endif 371 <1> %endif 371 <1> %endif 371 00000277 B820000000 <1> mov eax, %1 371 <1> 371 0000027C CD40 <1> int 40h 372 ScopeLoop: 373 0000027E BF00000A00 mov edi, 0A0000h ; VGA display memory address 374 ; 23/06/2017 375 00000283 BE[00000200] mov esi, DMA_Buffer 376 00000288 01C6 add esi, eax ; add offset value 377 ; 378 ; 25/06/2017 379 ; 24/06/2017 380 0000028A B9[C0FE0300] mov ecx, DMA_Buffer + (131072 - 320) 381 0000028F 39CE cmp esi, ecx 382 00000291 7602 jna short _4 383 00000293 89CE mov esi, ecx 384 _4: 385 00000295 31C9 xor ecx, ecx ; to be drawed ... 386 00000297 31D2 xor edx, edx 387 DrawLoop: 388 00000299 89D3 mov ebx, edx ; (save Index) 389 0000029B 668BBB[50820000] mov di, [Scope+ebx] ; get old SCOPE pixel address 390 000002A2 C60700 mov byte [edi], 0 ; erase it! 391 ;lodsb 392 ;mov bl, al 393 000002A5 8A1E mov bl, [esi] ; get a sample (8-bit) 394 000002A7 46 inc esi ; calc new pixel address... 395 000002A8 30FF xor bh, bh 396 000002AA 66D1E3 shl bx, 1 397 000002AD 668BBB[D0840000] mov di, [RowOfs+ebx] 398 000002B4 6601CF add di, cx 399 000002B7 6689D3 mov bx, dx ; (restore Index) 400 000002BA 6689BB[50820000] mov [Scope+ebx], di ; save new address... 401 000002C1 C6070A mov byte [edi], 10 ; and DRAW. 402 000002C4 6683C202 add dx, 2 ; the next pixel... 403 000002C8 41 inc ecx 404 000002C9 6681F94001 cmp cx, 320 ; 320 pixels drawed? 405 000002CE 72C9 jb short DrawLoop 406 000002D0 E96EFFFFFF jmp p_loop 407 408 409 ;============================================================================= 410 ; MODLOAD.ASM 411 ;============================================================================= 412 413 ; Amiga Module Loader v0.1b by Carlos Hasan. 414 ; July 10th, 1993. 415 416 ; STRUCTURES 417 418 ; STRUCTURES 419 420 struc ModSample 421 00000000 .msName: resb 22 422 00000016 .msLength: resw 1 423 00000018 .msFinetune: resb 1 424 00000019 .msVolume: resb 1 425 0000001A .msRepeat: resw 1 426 0000001C .msRepLen: resw 1 427 .size: ; 30 bytes 428 endstruc 429 430 struc ModHeader 431 00000000 .mhName: resb 20 432 00000014 .mhSamples: resb ModSample.size*31 433 000003B6 .mhOrderLen: resb 1 434 000003B7 .mhReStart: resb 1 435 000003B8 .mhOrder: resb 128 436 00000438 .mhSign: resw 2 437 .size: ; 1084 bytes 438 endstruc 439 440 struc ModInfoRec 441 00000000 .OrderLen: resb 1 442 00000001 .ReStart: resb 1 443 00000002 .Order: resb 128 444 00000082 .Patterns: resd 1 445 00000086 .SampOfs: resw 31 446 000000C4 .SampSeg: resw 31 447 00000102 .SampLen: resw 31 448 00000140 .SampRep: resw 31 449 0000017E .SampRepLen: resw 31 450 000001BC .SampVol: resw 31 451 .size: ; 506 bytes 452 endstruc 453 454 ; CODE 455 456 ; playmod4.s 457 ; 07/10/2017 458 ; tinyply3.s 459 ; 06/10/2017 460 ; 04/10/2017 461 ; /* MOD FileFormat */ 462 463 ID_MK equ 2E4B2E4Dh ; "M.K." 464 ID_FLT4 equ 34544C46h ; "FLT4" 465 ID_8CHN equ 4E484338h ; "8CHN" 466 ID_FLT8 equ 34544C46h ; "FLT8" 467 468 ; CODE 469 470 LoadModule: 471 ; edi = file name address 472 473 000002D5 60 pushad 474 475 ;call ClearModInfo 476 OpenFile: 477 ; ebx = ASCIIZ file name address 478 ; ecx = open mode (0 = open for read) 479 sys _open, edi, 0 ; open for reading 479 <1> 479 <1> 479 <1> 479 <1> 479 <1> %if %0 >= 2 479 000002D6 89FB <1> mov ebx, %2 479 <1> %if %0 >= 3 479 000002D8 B900000000 <1> mov ecx, %3 479 <1> %if %0 = 4 479 <1> mov edx, %4 479 <1> %endif 479 <1> %endif 479 <1> %endif 479 000002DD B805000000 <1> mov eax, %1 479 <1> 479 000002E2 CD40 <1> int 40h 480 000002E4 0F8262010000 jc Failed 481 000002EA A3[080F0000] mov [FileHandle], eax 482 ReadHeader: 483 ; ebx = File handle 484 ; ecx = Buffer address 485 ; edx = Byte count 486 sys _read, [FileHandle], Header, ModHeader.size 486 <1> 486 <1> 486 <1> 486 <1> 486 <1> %if %0 >= 2 486 000002EF 8B1D[080F0000] <1> mov ebx, %2 486 <1> %if %0 >= 3 486 000002F5 B9[0C0F0000] <1> mov ecx, %3 486 <1> %if %0 = 4 486 000002FA BA3C040000 <1> mov edx, %4 486 <1> %endif 486 <1> %endif 486 <1> %endif 486 000002FF B803000000 <1> mov eax, %1 486 <1> 486 00000304 CD40 <1> int 40h 487 00000306 0F8231010000 jc CloseFile 488 CheckMK: 489 ; 04/10/2017 490 0000030C A1[44130000] mov eax, [Header+ModHeader.mhSign] 491 492 00000311 3D4D2E4B2E cmp eax, ID_MK ; cmp eax, '.K.M' 493 ;je short Is4chnMod 494 00000316 742B je short IsModFile 495 CheckFLT4: 496 00000318 3D464C5434 cmp eax, ID_FLT4 ; cmp eax, '4TLF' 497 ;je short Is4chnMod 498 0000031D 7424 je short IsModFile 499 Check8CHN: 500 0000031F 3D3843484E cmp eax, ID_8CHN ; cmp eax, 'NHC8' 501 00000324 740D je short Is8chnMod 502 CheckFLT8: 503 00000326 3D464C5434 cmp eax, ID_FLT8 ; cmp eax, '8TLF' 504 ; 06/10/2017 505 0000032B 7406 je short Is8chnMod 506 0000032D F9 stc 507 0000032E E90A010000 jmp CloseFile 508 Is8chnMod: 509 00000333 C605[520E0000]08 mov byte [numtracks], 8 ; 8-CHANNEL-MOD 510 0000033A C605[510E0000]0B mov byte [pattern_shift], 11 ; Pattern Size = 2048 bytes 511 00000341 EB00 jmp short IsModFile 512 ;Is4chnMod: 513 ; mov byte [numtracks], 4 ; 4-CHANNEL-MOD 514 ; mov byte [pattern_shift], 11 ; Pattern Size = 1024 bytes 515 516 IsModFile: 517 00000343 A0[C2120000] mov al, [Header+ModHeader.mhOrderLen] 518 00000348 A2[48130000] mov [ModInfo.OrderLen], al 519 520 0000034D A0[C3120000] mov al, [Header+ModHeader.mhReStart] 521 00000352 3A05[C2120000] cmp al, [Header+ModHeader.mhOrderLen] 522 00000358 7202 jb short SetReStart 523 0000035A B07F mov al, 7Fh 524 SetReStart: 525 0000035C A2[49130000] mov [ModInfo.ReStart], al 526 527 ;mov ecx, 128 528 00000361 66B98000 mov cx, 128 529 00000365 31D2 xor edx, edx 530 00000367 31DB xor ebx, ebx 531 CopyOrder: 532 00000369 8AB3[C4120000] mov dh, [Header+ModHeader.mhOrder+ebx] 533 0000036F 88B3[4A130000] mov [ModInfo.Order+ebx], dh 534 00000375 38D6 cmp dh, dl 535 00000377 7202 jb short NextOrder 536 00000379 88F2 mov dl, dh ; Max. pattern number ; 04/10/2017 537 NextOrder: 538 0000037B 43 inc ebx 539 0000037C E2EB loop CopyOrder 540 AllocPatterns: 541 0000037E 81E2FF000000 and edx, 0FFh 542 ; 04/10/2017 543 ;inx dx ; 12/03/2017 544 00000384 FEC2 inc dl 545 ; dl = number of patterns (04/07/2017) 546 00000386 8A0D[510E0000] mov cl, [pattern_shift] ; 10 for 4 channels, 11 for 8 channels 547 0000038C D3E2 shl edx, cl ; 10 ; *1024 ; (byte count of patterns *64*4*4) 548 ; *2048 ; (byte count of patterns *64*8*4) 549 ; 550 0000038E 89D5 mov ebp, edx ; offset of samples (04/07/2017) 551 ;mov ecx, 10000h ; next 64K (4096*16) 552 00000390 B9[00000400] mov ecx, file_buffer ; 12/03/2017 553 ; 554 00000395 890D[CA130000] mov [ModInfo.Patterns], ecx 555 ; 556 0000039B 01CD add ebp, ecx ; next offset for samples 557 ReadPatterns: 558 ;mov ebx, [FileHandle] 559 ; ebx = File handle 560 ; ecx = Buffer address 561 ; edx = Byte count 562 sys _read, [FileHandle] 562 <1> 562 <1> 562 <1> 562 <1> 562 <1> %if %0 >= 2 562 0000039D 8B1D[080F0000] <1> mov ebx, %2 562 <1> %if %0 >= 3 562 <1> mov ecx, %3 562 <1> %if %0 = 4 562 <1> mov edx, %4 562 <1> %endif 562 <1> %endif 562 <1> %endif 562 000003A3 B803000000 <1> mov eax, %1 562 <1> 562 000003A8 CD40 <1> int 40h 563 000003AA 0F828D000000 jc CloseFile 564 565 ; patterns have been loaded here... (04/07/2017) 566 567 000003B0 BE[200F0000] mov esi, Header+ModHeader.mhSamples 568 000003B5 31FF xor edi, edi 569 CopySamples: 570 000003B7 668B4616 mov ax, [esi+ModSample.msLength] 571 000003BB 86C4 xchg al, ah 572 000003BD 66D1E0 shl ax, 1 573 000003C0 668987[4A140000] mov [ModInfo.SampLen+edi], ax 574 000003C7 8A4619 mov al, [esi+ModSample.msVolume] 575 000003CA 30E4 xor ah, ah 576 000003CC 668987[04150000] mov [ModInfo.SampVol+edi], ax 577 000003D3 668B461A mov ax, [esi+ModSample.msRepeat] 578 000003D7 86C4 xchg al, ah 579 000003D9 66D1E0 shl ax, 1 580 000003DC 668987[88140000] mov [ModInfo.SampRep+edi], ax 581 000003E3 668B461C mov ax, [esi+ModSample.msRepLen] 582 000003E7 86C4 xchg al, ah 583 000003E9 66D1E0 shl ax, 1 584 000003EC 668987[C6140000] mov [ModInfo.SampRepLen+edi], ax 585 000003F3 83C61E add esi, ModSample.size 586 000003F6 6683C702 add di, 2 587 000003FA 6683FF3E cmp di, 2*31 588 000003FE 72B7 jb short CopySamples 589 590 00000400 31F6 xor esi, esi 591 AllocSamples: 592 00000402 0FB796[4A140000] movzx edx, word [ModInfo.SampLen+esi] 593 ; 07/10/2017 594 ;shr dx, 4 ; *** 595 00000409 21D2 and edx, edx 596 0000040B 7426 jz short NextSample 597 ;inc dx ; number of paragraphs ; *** 598 ;shl dx, 4 ; *** 599 0000040D 89E8 mov eax, ebp 600 0000040F 668986[CE130000] mov [ModInfo.SampOfs+esi], ax 601 00000416 C1E810 shr eax, 16 602 00000419 668986[0C140000] mov [ModInfo.SampSeg+esi], ax 603 00000420 89E9 mov ecx, ebp 604 00000422 01D5 add ebp, edx ; next offset for sample 605 ReadSample: 606 ;mov ebx, [FileHandle] 607 ;movzx edx, [ModInfo.SampLen+esi] 608 ;mov ecx, [ModInfo.SampOfs+esi] 609 610 ; ebx = File handle 611 ; ecx = Buffer address 612 ; edx = Byte count 613 sys _read, [FileHandle] 613 <1> 613 <1> 613 <1> 613 <1> 613 <1> %if %0 >= 2 613 00000424 8B1D[080F0000] <1> mov ebx, %2 613 <1> %if %0 >= 3 613 <1> mov ecx, %3 613 <1> %if %0 = 4 613 <1> mov edx, %4 613 <1> %endif 613 <1> %endif 613 <1> %endif 613 0000042A B803000000 <1> mov eax, %1 613 <1> 613 0000042F CD40 <1> int 40h 614 00000431 720A jc short CloseFile 615 616 NextSample: 617 00000433 6683C602 add si, 2 618 00000437 6683FE3E cmp si, 2*31 619 0000043B 72C5 jb short AllocSamples 620 CloseFile: 621 0000043D 9C pushf 622 sys _close, [FileHandle] 622 <1> 622 <1> 622 <1> 622 <1> 622 <1> %if %0 >= 2 622 0000043E 8B1D[080F0000] <1> mov ebx, %2 622 <1> %if %0 >= 3 622 <1> mov ecx, %3 622 <1> %if %0 = 4 622 <1> mov edx, %4 622 <1> %endif 622 <1> %endif 622 <1> %endif 622 00000444 B806000000 <1> mov eax, %1 622 <1> 622 00000449 CD40 <1> int 40h 623 0000044B 9D popf 624 Failed: 625 0000044C 61 popad 626 0000044D C3 retn 627 628 FreeModule: 629 ; Erdogan Tan (13/02/2017) 630 ; nothing to do here for memory de-allocation 631 ClearModInfo: 632 0000044E 57 push edi 633 0000044F BF[48130000] mov edi, ModInfo 634 00000454 B9FA010000 mov ecx, ModInfoRec.size 635 ;cld 636 00000459 30C0 xor al, al 637 0000045B F3AA rep stosb 638 0000045D 5F pop edi 639 0000045E C3 retn 640 641 ;============================================================================= 642 ; MODPLAY.ASM 643 ;============================================================================= 644 645 ; Amiga Module Loader v0.3b by Carlos Hasan. 646 ; July 23th, 1993. 647 648 ; EQUATES 649 650 ;NumTracks equ 4 ; 07/10/2017 ([numtracks]) 651 DefTempo equ 6 652 DefBpm equ 125 653 MidCRate equ 8448 654 MixBufSize equ 4096 655 656 ; STRUCTURES 657 658 struc TrackInfo ; 01/10/2017 (TMODPLAY.ASM) modif. by Erdogan Tan 659 00000000 .Samples: resd 1 660 ;.Position: resw 1 661 00000004 .Position: resd 1 ; 01/10/2017 - TRDOS 386 modification ! 662 00000008 .Len: resw 1 663 0000000A .Repeat: resw 1 664 0000000C .RepLen: resw 1 665 0000000E .Volume: resb 1 ; Volume 666 0000000F .VolDiff: resb 1 ; 01/10/2017 ; Volume difference (Tremolo) 667 ;.Error: resb 1 668 ;.Reserved: resb 1 ; 01/10/2017 669 00000010 .Period: resw 1 ; Period 670 00000012 .Pitch: resw 1 671 00000014 .Effect: resw 1 ; Effect 672 00000016 .PortTo: resw 1 ; Toneporta wanted period 673 00000018 .PortParm: resb 1 ; Toneporta speed 674 00000019 .VibPos: resb 1 ; Vibrato wave position 675 0000001A .VibParm: resb 1 ; Vibrato depth/rate 676 0000001B .TremPos: resb 1 ; 01/10/2017 ; Tremolo wave position 677 0000001C .TremParm: resb 1 ; 01/10/2017 ; Tremolo depth/rate 678 ;.OldSampOfs: resb 1 ; ******* ; 01/10/2017 679 0000001D .Error: resb 1 ; 01/10/2017 680 0000001E .Arp: resw 3 681 00000024 .ArpIndex: resw 1 682 .size: ; 38 bytes ; 01/10/2017 - TRDOS 386 683 endstruc 684 685 ; CODE 686 687 ;-------------------------------------------------------------------------- 688 ; updatechannel - update the track using the current effect 689 ;-------------------------------------------------------------------------- 690 ; 691 ;-------------------------------------------------------------------------- 692 ; Track: Process the next in one track. 693 ; In: 694 ; ds:di - Track info Address. 695 ;-------------------------------------------------------------------------- 696 697 ; edi = Track info address 698 699 updatechannel: 700 BeatTrack: ; updatechannel ; 01/10/2017 (TMODPLAY.ASM) 701 702 0000045F 668B5714 mov dx, [edi+TrackInfo.Effect] 703 704 ;test dx, dx 705 ;je short None 706 ;cmp dh, 00h 707 ;je short Arpeggio 708 ;cmp dh, 01h 709 ;je short PortUp 710 ;cmp dh, 02h 711 ;je short PortDown 712 ;cmp dh, 03h 713 ;je TonePort 714 ;cmp dh, 04h 715 ;je Vibrato 716 ;cmp dh, 05h 717 ;je PortSlide 718 ;cmp dh, 06h 719 ;je VibSlide 720 ;cmp dh, 0Ah 721 ;je VolSlide 722 ;retn 723 724 00000463 0FB6C6 movzx eax, dh 725 00000466 240F and al, 0Fh 726 00000468 FF2485[700C0000] jmp dword [4*eax+efxtable2] ; TRDOS 386 ! (32 bits) 727 efxnull: 728 None: 729 0000046F C3 retn 730 efxarpeggio2: 731 ; 01/10/2017 732 00000470 84D2 test dl, dl 733 00000472 74FB jz short efxnull 734 Arpeggio: 735 00000474 0FB75F24 movzx ebx, word [edi+TrackInfo.ArpIndex] 736 00000478 668B441F1E mov ax, [edi+TrackInfo.Arp+ebx] 737 0000047D 66894712 mov [edi+TrackInfo.Pitch], ax 738 00000481 6683C302 add bx, 2 739 00000485 6683FB06 cmp bx, 6 740 00000489 7202 jb short SetArpIndex 741 0000048B 31DB xor ebx, ebx 742 SetArpIndex: 743 0000048D 66895F24 mov [edi+TrackInfo.ArpIndex], bx 744 00000491 C3 retn 745 efxportaup: 746 PortUp: 747 00000492 30F6 xor dh, dh 748 ;mov bx, [edi+TrackInfo.Period] 749 00000494 0FB75F10 movzx ebx, word [edi+TrackInfo.Period] ; 02/10/2017 750 00000498 6629D3 sub bx, dx 751 ;cmp bx, 113 752 0000049B 6683FB1C cmp bx, 28 ; 01/10/2017 753 0000049F 7D04 jge short NotSmall 754 ;mov bx, 113 755 000004A1 66BB1C00 mov bx, 28 ; 01/10/2017 756 NotSmall: 757 000004A5 66895F10 mov [edi+TrackInfo.Period], bx 758 000004A9 6601DB add bx, bx 759 ;mov ax, [PitchTable+bx] 760 000004AC 668B83[42150000] mov ax, [PitchTable+ebx] ; 02/10/2017 761 000004B3 66894712 mov [edi+TrackInfo.Pitch], ax 762 000004B7 C3 retn 763 efxportadown: 764 PortDown: 765 000004B8 30F6 xor dh, dh 766 ;mov bx, [edi+TrackInfo.Period] 767 000004BA 0FB75F10 movzx ebx, word [edi+TrackInfo.Period] ; 02/10/2017 768 000004BE 6601D3 add bx, dx 769 000004C1 6681FB600D cmp bx, 3424 ; 01/10/2017 770 ;cmp bx, 856 771 000004C6 7E04 jle short NotBig 772 ;mov bx, 856 773 000004C8 66BB600D mov bx, 3424 ; 01/10/2017 774 NotBig: 775 000004CC 66895F10 mov [edi+TrackInfo.Period], bx 776 000004D0 6601DB add bx, bx 777 ;mov ax, [PitchTable+bx] 778 000004D3 668B83[42150000] mov ax, [PitchTable+ebx] ; 02/10/2017 779 000004DA 66894712 mov [edi+TrackInfo.Pitch], ax 780 000004DE C3 retn 781 efxtoneporta2: 782 TonePort: 783 000004DF 30F6 xor dh, dh 784 000004E1 668B4716 mov ax, [edi+TrackInfo.PortTo] 785 ;mov bx, [edi+TrackInfo.Period] 786 000004E5 0FB75F10 movzx ebx, word [edi+TrackInfo.Period] ; 02/10/2017 787 000004E9 6639C3 cmp bx, ax 788 000004EC 7429 je short NoPort 789 000004EE 7F0D jg short PortToUp 790 PortToDown: 791 000004F0 6601D3 add bx, dx 792 000004F3 6639C3 cmp bx, ax 793 000004F6 7E0D jle short SetPort 794 FixPort: 795 000004F8 6689C3 mov bx, ax 796 000004FB EB08 jmp short SetPort 797 PortToUp: 798 000004FD 6629D3 sub bx, dx 799 00000500 6639C3 cmp bx, ax 800 00000503 7CF3 jl short FixPort 801 SetPort: 802 00000505 66895F10 mov [edi+TrackInfo.Period], bx 803 00000509 6601DB add bx, bx 804 ;mov ax, [PitchTable+bx] 805 0000050C 668B83[42150000] mov ax, [PitchTable+ebx] ; 02/10/2017 806 00000513 66894712 mov [edi+TrackInfo.Pitch], ax 807 NoPort: 808 00000517 C3 retn 809 efxvibrato2: 810 ; 01/10/2017 811 Vibrato: 812 00000518 88D6 mov dh, dl 813 ;and dl, 0Fh 814 ;shr dh, 4 815 ;shl dh, 2 816 0000051A 6681E20FF0 and dx, 0F00Fh 817 0000051F C0EE02 shr dh, 2 818 ;add [edi+TrackInfo.VibPos], dh 819 ;mov dh, [edi+TrackInfo.VibPos] 820 ;mov bl, dh 821 00000522 8A5F19 mov bl, [edi+TrackInfo.VibPos] ; 01/10/2017 822 00000525 007719 add [edi+TrackInfo.VibPos], dh 823 00000528 88DE mov dh, bl ; 01/10/2017 824 0000052A C0EB02 shr bl, 2 825 ;and bx, 1Fh 826 ;mov al, [SinTable+bx] 827 0000052D 83E31F and ebx, 1Fh 828 00000530 8A83[580D0000] mov al, [SinTable+ebx] 829 00000536 F6E2 mul dl 830 ;rol ax, 1 831 ;xchg al, ah 832 ;and ah, 1 833 00000538 66C1E807 shr ax, 7 834 0000053C 84F6 test dh, dh 835 0000053E 7903 jns short VibUp 836 00000540 66F7D8 neg ax 837 VibUp: 838 00000543 66034710 add ax, [edi+TrackInfo.Period] 839 00000547 6689C3 mov bx, ax 840 ;movzx ebx, ax 841 0000054A 6683FB71 cmp bx, 113 842 ;cmp bx, 113 843 0000054E 6683FB1C cmp bx, 28 ; 01/10/2017 844 00000552 7D06 jge short NoLoVib 845 ;mov bx, 113 846 00000554 66BB1C00 mov bx, 28 ; 01/10/2017 847 00000558 EB0B jmp short NoHiVib ; 01/10/2017 848 NoLoVib: 849 0000055A 6681FB600D cmp bx, 3424 ; 01/10/2017 850 ;cmp bx, 856 851 0000055F 7E04 jle short NoHiVib 852 ;mov bx, 856 853 00000561 66BB600D mov bx, 3424 ; 01/10/2017 854 NoHiVib: 855 00000565 6601DB add bx, bx 856 ;mov ax, [PitchTable+bx] 857 00000568 668B83[42150000] mov ax, [PitchTable+ebx] ; 01/10/2017 858 0000056F 66894712 mov [edi+TrackInfo.Pitch], ax 859 00000573 C3 retn 860 efxtoneslide: 861 PortSlide: 862 00000574 E812000000 call VolSlide 863 00000579 8A5718 mov dl, [edi+TrackInfo.PortParm] ; .tonespeed 864 0000057C E95EFFFFFF jmp TonePort ; efxtoneporta2 865 efxvibslide: 866 VibSlide: 867 00000581 E805000000 call VolSlide 868 00000586 8A571A mov dl, [edi+TrackInfo.VibParm] 869 00000589 EB8D jmp short Vibrato ; efxvibrato2 870 efxvolslide: 871 VolSlide: 872 0000058B 88D6 mov dh, dl 873 0000058D 80E20F and dl, 0Fh 874 00000590 C0EE04 shr dh, 4 875 00000593 8A470E mov al, [edi+TrackInfo.Volume] 876 00000596 28D0 sub al, dl 877 00000598 7D02 jge short NoLoVol 878 0000059A 30C0 xor al, al 879 NoLoVol: 880 0000059C 00F0 add al, dh 881 0000059E 3C40 cmp al, 64 882 000005A0 7602 jbe short NoHiVol 883 000005A2 B040 mov al, 64 884 NoHiVol: 885 000005A4 88470E mov [edi+TrackInfo.Volume], al 886 000005A7 C3 retn 887 888 efxtremolo2: 889 ; 01/10/2017 (TMODPLAY.ASM) 890 Tremolo: 891 000005A8 88D6 mov dh, dl 892 000005AA 6681E20FF0 and dx, 0F00Fh 893 000005AF C0EE02 shr dh, 2 894 000005B2 8A5F1B mov bl, [edi+TrackInfo.TremPos] 895 000005B5 00771B add [edi+TrackInfo.TremPos], dh 896 000005B8 88DE mov dh, bl 897 000005BA C0EB02 shr bl, 2 898 ; 01/10/2017 - TRDOS 386 899 ;and bx, 1Fh 900 000005BD 83E31F and ebx, 1Fh 901 ;mov al, [SinTable+bx] 902 000005C0 8A83[580D0000] mov al, [SinTable+ebx] 903 000005C6 F6E2 mul dl 904 000005C8 66C1E806 shr ax, 6 905 000005CC 84F6 test dh, dh 906 000005CE 7D03 jge short Tremolo_1 ; efxtremolof2 907 000005D0 66F7D8 neg ax 908 efxtremolof2: 909 Tremolo_1: 910 000005D3 8A670E mov ah, [edi+TrackInfo.Volume] 911 000005D6 00E0 add al, ah 912 000005D8 7D02 jge short Tremolo_2 ; efxtremolof3 913 000005DA 30C0 xor al, al 914 efxtremolof3: 915 Tremolo_2: 916 000005DC 3C40 cmp al, 64 ; 40h 917 000005DE 7E02 jle short Tremolo_3 ; efxtremolof4 918 000005E0 B040 mov al, 64 ; 40h 919 efxtremolof4: 920 Tremolo_3: 921 000005E2 28E0 sub al, ah ; ****** 922 000005E4 88470F mov [edi+TrackInfo.VolDiff], al 923 000005E7 C3 retn 924 925 ;-------------------------------------------------------------------------- 926 ; readchannel - read the next note event from the pattern sheet 927 ;-------------------------------------------------------------------------- 928 ; 929 ;-------------------------------------------------------------------------- 930 ; GetTrack: Get the next Note from a pattern. 931 ; In: 932 ; ds:di - Track info Address. 933 ; es:si - Pattern Note Address. 934 ; Out: 935 ; es:si - The Next Pattern Note address. 936 ;-------------------------------------------------------------------------- 937 938 ; esi = Pattern note address 939 ; edi = Track info address 940 941 readchannel: 942 GetTrack: ; readchannel ; 01/10/2017 (TMODPLAY.ASM) 943 000005E8 66AD lodsw 944 000005EA 86C4 xchg al, ah 945 000005EC 88E3 mov bl, ah 946 000005EE 80E40F and ah, 0Fh 947 000005F1 6689C1 mov cx, ax 948 000005F4 66AD lodsw 949 000005F6 86C4 xchg al, ah 950 000005F8 88E7 mov bh, ah 951 000005FA 80E40F and ah, 0Fh 952 000005FD 6689C2 mov dx, ax 953 00000600 66895714 mov [edi+TrackInfo.Effect], dx 954 ; 01/10/2017 - TRDOS 386 955 ;and bl, 0F0h 956 00000604 81E3F0FF0000 and ebx, 0FFF0h 957 0000060A C0EF04 shr bh, 4 958 0000060D 08FB or bl, bh 959 0000060F 7446 jz short SetPeriod 960 SetSample: 961 00000611 30FF xor bh, bh 962 ;and ebx, 0FFh 963 00000613 FECB dec bl 964 00000615 01DB add ebx, ebx 965 00000617 668B83[04150000] mov ax, [ModInfo.SampVol+ebx] 966 0000061E 88470E mov [edi+TrackInfo.Volume], al 967 00000621 668B83[CE130000] mov ax, [ModInfo.SampOfs+ebx] 968 00000628 668907 mov [edi+TrackInfo.Samples], ax 969 0000062B 668B83[0C140000] mov ax, [ModInfo.SampSeg+ebx] 970 00000632 66894702 mov [edi+TrackInfo.Samples+2], ax 971 00000636 668B83[4A140000] mov ax, [ModInfo.SampLen+ebx] 972 0000063D 66894708 mov [edi+TrackInfo.Len], ax 973 00000641 668B83[88140000] mov ax, [ModInfo.SampRep+ebx] 974 00000648 6689470A mov [edi+TrackInfo.Repeat], ax 975 0000064C 668B83[C6140000] mov ax, [ModInfo.SampRepLen+ebx] 976 00000653 6689470C mov [edi+TrackInfo.RepLen], ax 977 SetPeriod: 978 00000657 6685C9 test cx, cx 979 0000065A 7425 jz short SetEffect 980 981 0000065C 66894F16 mov [edi+TrackInfo.PortTo], cx ; * 982 983 00000660 80FE03 cmp dh, 03h 984 ;je short SetEffect 985 00000663 7428 je short efxtoneporta ; 01/10/2017 986 987 00000665 66894F10 mov [edi+TrackInfo.Period], cx 988 ;movzx ebx, cx 989 00000669 6689CB mov bx, cx 990 0000066C 6601DB add bx, bx 991 ;mov ax, [PitchTable+bx] 992 0000066F 668B83[42150000] mov ax, [PitchTable+ebx] ; 01/10/2017 993 00000676 66894712 mov [edi+TrackInfo.Pitch], ax 994 0000067A C7470400000000 mov dword [edi+TrackInfo.Position], 0 995 SetEffect: 996 ;test dx, dx 997 ;je short InitNone 998 ;cmp dh, 00h 999 ;je InitArpeggio 1000 ;cmp dh, 03h 1001 ;je short InitTonePort 1002 ;cmp dh, 04h 1003 ;je short InitVibrato 1004 ;cmp dh, 09h 1005 ;je short SampleOfs 1006 ;cmp dh, 0Bh 1007 ;je short PosJump 1008 ;cmp dh, 0Ch 1009 ;je short SetVolume 1010 ;cmp dh, 0Dh 1011 ;je short Break 1012 ;cmp dh, 0Fh 1013 ;je SetSpeed 1014 ;retn 1015 1016 ; 01/10/2017 (TMODPLAY.ASM) 1017 1018 ; dx = [di+TrackInfo.Effect] 1019 1020 00000681 0FB6C6 movzx eax, dh 1021 00000684 240F and al, 0Fh 1022 00000686 FF2485[300C0000] jmp dword [4*eax+efxtable] ; TRDOS 386 ! (32 bits) 1023 ;efxnull: 1024 ;InitNone: 1025 ; retn 1026 efxtoneporta: 1027 ; 01/10/2017 1028 ; cx = period 1029 ;mov [edi+TrackInfo.PortTo], cx ; * 1030 InitTonePort: 1031 0000068D 84D2 test dl, dl 1032 0000068F 7503 jnz short SetPortParm 1033 00000691 8A5718 mov dl, [edi+TrackInfo.PortParm] ; .tonespeed 1034 SetPortParm: 1035 00000694 885718 mov [edi+TrackInfo.PortParm], dl 1036 00000697 66895714 mov [edi+TrackInfo.Effect], dx 1037 0000069B C3 retn 1038 efxvibrato: 1039 InitVibrato: 1040 0000069C 8A471A mov al, [edi+TrackInfo.VibParm] 1041 0000069F 88C4 mov ah, al 1042 ;and al, 0Fh 1043 ;and ah, 0F0h 1044 000006A1 66250FF0 and ax, 0F00Fh 1045 000006A5 F6C20F test dl, 0Fh 1046 000006A8 7502 jne short OkDepth 1047 000006AA 08C2 or dl, al 1048 OkDepth: 1049 000006AC F6C2F0 test dl, 0F0h 1050 000006AF 7502 jnz short OkRate 1051 000006B1 08E2 or dl, ah 1052 OkRate: 1053 000006B3 88571A mov [edi+TrackInfo.VibParm], dl 1054 000006B6 66895714 mov [edi+TrackInfo.Effect], dx 1055 000006BA 6685C9 test cx, cx 1056 000006BD 7404 jz short OkPos 1057 000006BF C6471900 mov byte [edi+TrackInfo.VibPos], 0 1058 OkPos: 1059 000006C3 C3 retn 1060 efxsampoffset: 1061 ; 01/10/2017 ; ******* 1062 SampleOfs: 1063 ; test dl, dl 1064 ; jnz short SetSampleOfs 1065 ; mov dl, [edi+TrackInfo.OldSampOfs] 1066 ;SetSampleOfs: 1067 ; mov [edi+TrackInfo.OldSampOfs], dl 1068 000006C4 88D6 mov dh, dl 1069 000006C6 81E200FF0000 and edx, 0FF00h ; 05/03/2017 1070 000006CC 895704 mov [edi+TrackInfo.Position], edx 1071 000006CF C3 retn 1072 efxpattjump: 1073 PosJump: 1074 000006D0 8815[04810000] mov [OrderPos], dl 1075 000006D6 C605[08810000]40 mov byte [Row], 64 1076 000006DD C3 retn 1077 efxsetvolume: 1078 SetVolume: 1079 000006DE 80FA40 cmp dl, 64 1080 000006E1 7602 jbe short OkVol 1081 000006E3 B240 mov dl, 64 1082 OkVol: 1083 ; 01/10/2017 (TrackInfo.VolDiff, tremolo effect) 1084 000006E5 30F6 xor dh, dh ; reset TrackInfo.VolDiff ; Not necessary !? 1085 ;mov [edi+TrackInfo.Volume], dl 1086 000006E7 6689570E mov [edi+TrackInfo.Volume], dx 1087 000006EB C3 retn 1088 efxbreak: 1089 Break: 1090 000006EC 88D6 mov dh, dl 1091 000006EE 80E20F and dl, 0Fh 1092 000006F1 C0EE04 shr dh, 4 1093 000006F4 00F6 add dh, dh 1094 000006F6 00F2 add dl, dh 1095 000006F8 C0E602 shl dh, 2 1096 000006FB 00F2 add dl, dh 1097 000006FD 8815[09810000] mov [BreakRow], dl 1098 00000703 C605[08810000]40 mov byte [Row], 64 1099 0000070A C3 retn 1100 efxsetspeed: 1101 SetSpeed: 1102 0000070B 84D2 test dl,dl 1103 0000070D 7432 je Skip 1104 0000070F 80FA1F cmp dl,31 1105 00000712 770D ja short SetBpm 1106 SetTempo: 1107 00000714 8815[05810000] mov [Tempo], dl 1108 0000071A 8815[06810000] mov [TempoWait], dl 1109 00000720 C3 retn 1110 SetBpm: 1111 00000721 8815[07810000] mov [Bpm], dl 1112 00000727 B067 mov al, 103 1113 00000729 F6E2 mul dl 1114 0000072B 88E3 mov bl, ah 1115 0000072D 30FF xor bh, bh 1116 0000072F 66A1[560E0000] mov ax, [MixSpeed] 1117 00000735 6631D2 xor dx, dx 1118 00000738 66F7F3 div bx 1119 0000073B 66A3[0A810000] mov [BpmSamples], ax 1120 Skip: 1121 00000741 C3 retn 1122 efxarpeggio: 1123 ; 01/10/2017 1124 00000742 84D2 test dl, dl 1125 ;je efxnull 1126 00000744 74FB je short Skip 1127 InitArpeggio: 1128 00000746 88D6 mov dh, dl 1129 00000748 80E20F and dl, 0Fh 1130 0000074B C0EE04 shr dh, 4 1131 ; 01/10/2017 1132 ;mov cx, 36 1133 0000074E 66B95400 mov cx, 84 ; 84 notes/periods 1134 00000752 31DB xor ebx, ebx 1135 00000754 668B4710 mov ax, [edi+TrackInfo.Period] 1136 gt_ScanPeriod: 1137 ;cmp ax, [PeriodTable+bx] 1138 00000758 663B83[B00C0000] cmp ax, [PeriodTable+ebx] 1139 0000075F 7306 jae short SetArp 1140 00000761 6683C302 add bx, 2 1141 00000765 E2F1 loop gt_ScanPeriod 1142 SetArp: 1143 00000767 6601D2 add dx, dx 1144 0000076A 00DE add dh, bl 1145 0000076C 00DA add dl, bl 1146 ; 01/10/2017 1147 ;mov bx, [PeriodTable+bx] 1148 0000076E 668B9B[B00C0000] mov bx, [PeriodTable+ebx] 1149 ;add bx, bx 1150 00000775 01DB add ebx, ebx 1151 ;mov ax, [PitchTable+bx] 1152 00000777 668B83[42150000] mov ax, [PitchTable+ebx] 1153 0000077E 6689471E mov [edi+TrackInfo.Arp], ax 1154 00000782 88F3 mov bl, dh 1155 00000784 30FF xor bh, bh 1156 00000786 668B9B[B00C0000] mov bx, [PeriodTable+ebx] 1157 ;add bx, bx 1158 0000078D 01DB add ebx, ebx 1159 ;mov ax, [PitchTable+bx] 1160 0000078F 668B83[42150000] mov ax, [PitchTable+ebx] 1161 00000796 66894720 mov [edi+TrackInfo.Arp+2], ax 1162 0000079A 88D3 mov bl, dl 1163 0000079C 30FF xor bh, bh 1164 0000079E 668B9B[B00C0000] mov bx, [PeriodTable+ebx] 1165 ;add bx, bx 1166 000007A5 01DB add ebx, ebx 1167 ;mov ax, [PitchTable+bx] 1168 000007A7 668B83[42150000] mov ax, [PitchTable+ebx] 1169 000007AE 66894722 mov [edi+TrackInfo.Arp+4], ax 1170 000007B2 66C747240000 mov word [edi+TrackInfo.ArpIndex], 0 1171 000007B8 C3 retn 1172 1173 efxtremolo: 1174 ; 01/10/2017 (TMODPLAY.ASM) 1175 InitTremolo: 1176 000007B9 8A471C mov al, [edi+TrackInfo.TremParm] 1177 000007BC 88C4 mov ah, al 1178 000007BE 66250FF0 and ax, 0F00Fh 1179 000007C2 F6C20F test dl, 0Fh 1180 000007C5 7502 jnz short InitTremolo_1 ; efxtremolof0 1181 000007C7 08C2 or dl, al 1182 efxtremolof0: 1183 InitTremolo_1: 1184 000007C9 F6C2F0 test dl, 0F0h 1185 000007CC 7502 jnz short InitTremolo_2 ; efxtremolof1 1186 000007CE 08E2 or dl, ah 1187 efxtremolof1: 1188 InitTremolo_2: 1189 000007D0 88571C mov [edi+TrackInfo.TremParm], dl 1190 000007D3 66895714 mov [edi+TrackInfo.Effect], dx 1191 000007D7 C3 retn 1192 1193 ;-------------------------------------------------------------------------- 1194 ; pollmodule - polls the module player 1195 ;-------------------------------------------------------------------------- 1196 ;-------------------------------------------------------------------------- 1197 ; UpdateTracks: Main code to process the next tick to be played. 1198 ;-------------------------------------------------------------------------- 1199 1200 pollmodule: 1201 UpdateTracks: ; polmodule ; 01/10/2017 (TMODPLAY.ASM) 1202 000007D8 FE0D[06810000] dec byte [TempoWait] 1203 000007DE 7417 jz short GetTracks 1204 1205 ;mov ecx, NumTracks 1206 000007E0 0FB70D[520E0000] movzx ecx, word [numtracks] ; 06/10/2017 1207 000007E7 BF[1A810000] mov edi, Tracks 1208 BeatTracks: 1209 000007EC E86EFCFFFF call BeatTrack 1210 000007F1 83C726 add edi, TrackInfo.size 1211 000007F4 E2F6 loop BeatTracks 1212 000007F6 C3 retn 1213 GetTracks: 1214 000007F7 A0[05810000] mov al, [Tempo] 1215 000007FC A2[06810000] mov [TempoWait], al 1216 1217 00000801 8B35[16810000] mov esi, [Note] 1218 00000807 803D[08810000]40 cmp byte [Row], 64 1219 0000080E 7268 jb short NoPattWrap 1220 1221 00000810 8B35[CA130000] mov esi, [ModInfo.Patterns] 1222 00000816 8A1D[04810000] mov bl, [OrderPos] 1223 0000081C 3A1D[48130000] cmp bl, [ModInfo.OrderLen] 1224 00000822 7214 jb short NoOrderWrap 1225 00000824 8A1D[49130000] mov bl, [ModInfo.ReStart] 1226 0000082A 881D[04810000] mov [OrderPos], bl 1227 00000830 3A1D[48130000] cmp bl, [ModInfo.OrderLen] 1228 00000836 7364 jae short NoUpdate 1229 NoOrderWrap: 1230 ;xor bh, bh 1231 00000838 81E3FF000000 and ebx, 0FFh 1232 0000083E 8A9B[4A130000] mov bl, [ModInfo.Order+ebx] 1233 ; 05/10/2017 1234 ;shl ebx, 10 ; *1024 1235 00000844 8A0D[510E0000] mov cl, [pattern_shift] ; 10 or 11 1236 0000084A D3E3 shl ebx, cl ; *1024 or *2048 1237 ; 1238 0000084C 01DE add esi, ebx 1239 0000084E 8A1D[09810000] mov bl, [BreakRow] 1240 00000854 881D[08810000] mov [Row], bl 1241 ;xor bh, bh 1242 0000085A 81E3FF000000 and ebx, 0FFh 1243 00000860 883D[09810000] mov [BreakRow], bh ; 0 1244 00000866 66C1E304 shl bx, 4 1245 0000086A 01DE add esi, ebx 1246 0000086C 8935[16810000] mov [Note], esi 1247 00000872 FE05[04810000] inc byte [OrderPos] 1248 NoPattWrap: 1249 00000878 FE05[08810000] inc byte [Row] 1250 1251 ;cld 1252 ;mov ecx, NumTracks 1253 0000087E 0FB70D[520E0000] movzx ecx, word [numtracks] ; 06/10/2017 1254 00000885 BF[1A810000] mov edi, Tracks 1255 GetTracks_next: 1256 0000088A 51 push ecx 1257 0000088B E858FDFFFF call GetTrack ; readchannel 1258 00000890 59 pop ecx 1259 00000891 83C726 add edi, TrackInfo.size 1260 00000894 E2F4 loop GetTracks_next 1261 1262 00000896 8935[16810000] mov [Note], esi 1263 NoUpdate: 1264 0000089C C3 retn 1265 1266 ;-------------------------------------------------------------------------- 1267 ; MixTrack: Mixes one track into a CLEAN buffer. 1268 ; In: 1269 ; ds:si - Track Info Address. 1270 ; ds:di - Buffer Address. 1271 ; cx - Buffer Size. 1272 ;-------------------------------------------------------------------------- 1273 1274 ; esi = Track info address 1275 ; edi = Buffer address 1276 ; ecx = Buffer size 1277 1278 MixTrack: 1279 0000089D 66837E0C02 cmp word [esi+TrackInfo.RepLen], 2 1280 000008A2 7752 ja short MixLooped 1281 MixNonLooped: 1282 000008A4 8B16 mov edx, [esi+TrackInfo.Samples] 1283 000008A6 8B5E04 mov ebx, [esi+TrackInfo.Position] 1284 000008A9 0FB76E08 movzx ebp, word [esi+TrackInfo.Len] 1285 000008AD 52 push edx 1286 000008AE 56 push esi 1287 000008AF 01D3 add ebx, edx 1288 000008B1 01D5 add ebp, edx 1289 000008B3 668B5612 mov dx, [esi+TrackInfo.Pitch] 1290 ; 01/10/2017 1291 ;mov al, [esi+TrackInfo.Volume] 1292 000008B7 668B460E mov ax, [esi+TrackInfo.Volume] 1293 ; ah = [esi+TrackInfo.VolDiff] 1294 000008BB 00E0 add al, ah ; ****** 1295 000008BD C6460F00 mov byte [esi+TrackInfo.VolDiff], 0 1296 000008C1 8A661D mov ah, [esi+TrackInfo.Error] 1297 000008C4 89DE mov esi, ebx 1298 000008C6 31DB xor ebx, ebx ; 01/10/2017 ; * 1299 000008C8 88C7 mov bh, al 1300 000008CA 88D0 mov al, dl 1301 000008CC 88F2 mov dl, dh 1302 ;xor dh, dh 1303 000008CE 81E2FF000000 and edx, 0FFh 1304 nlMixSamp: 1305 000008D4 39EE cmp esi, ebp 1306 000008D6 7311 jae short nlMixBye 1307 000008D8 8A1E mov bl, [esi] 1308 ;mov bl, [VolTable+bx] 1309 000008DA 8A9B[04300000] mov bl, [VolTable+ebx] ; 01/10/2017 ; * 1310 000008E0 001F add [edi], bl 1311 000008E2 47 inc edi 1312 000008E3 00C4 add ah, al 1313 000008E5 11D6 adc esi, edx 1314 000008E7 E2EB loop nlMixSamp 1315 nlMixBye: 1316 000008E9 89F3 mov ebx, esi 1317 000008EB 5E pop esi 1318 000008EC 5A pop edx 1319 000008ED 29D3 sub ebx, edx 1320 000008EF 895E04 mov [esi+TrackInfo.Position], ebx 1321 000008F2 88661D mov [esi+TrackInfo.Error], ah 1322 000008F5 C3 retn 1323 MixLooped: 1324 000008F6 8B16 mov edx, [esi+TrackInfo.Samples] 1325 000008F8 8B5E04 mov ebx, [esi+TrackInfo.Position] 1326 000008FB 0FB76E0C movzx ebp, word [esi+TrackInfo.RepLen] 1327 000008FF 892D[12810000] mov [BufRep], ebp 1328 ;add ebp, [esi+TrackInfo.Repeat] ; BUG ! 1329 00000905 66036E0A add bp, [esi+TrackInfo.Repeat] ; 07/10/2017 (BUGfix!) 1330 00000909 52 push edx 1331 0000090A 56 push esi 1332 0000090B 01D3 add ebx, edx 1333 0000090D 01D5 add ebp, edx 1334 0000090F 668B5612 mov dx, [esi+TrackInfo.Pitch] 1335 ; 01/10/2017 1336 ;mov al, [esi+TrackInfo.Volume] 1337 00000913 668B460E mov ax, [esi+TrackInfo.Volume] 1338 ; ah = [esi+TrackInfo.VolDiff] 1339 00000917 00E0 add al, ah ; ****** 1340 00000919 C6460F00 mov byte [esi+TrackInfo.VolDiff], 0 1341 0000091D 8A661D mov ah, [esi+TrackInfo.Error] 1342 ;mov si, bx 1343 00000920 89DE mov esi, ebx ; 04/09/2017 1344 00000922 31DB xor ebx, ebx ; 01/10/2017 ; * 1345 00000924 88C7 mov bh, al 1346 00000926 88D0 mov al, dl 1347 00000928 88F2 mov dl, dh 1348 ;xor dh, dh 1349 0000092A 81E2FF000000 and edx, 0FFh 1350 lpMixSamp: 1351 00000930 39EE cmp esi, ebp 1352 00000932 7206 jb short lpMixNow 1353 00000934 2B35[12810000] sub esi, [BufRep] 1354 lpMixNow: 1355 0000093A 8A1E mov bl, [esi] 1356 ;mov bl, [VolTable+bx] 1357 0000093C 8A9B[04300000] mov bl, [VolTable+ebx] ; 01/10/2017 ; * 1358 00000942 001F add [edi], bl 1359 00000944 47 inc edi 1360 00000945 00C4 add ah, al 1361 00000947 11D6 adc esi, edx 1362 00000949 E2E5 loop lpMixSamp 1363 lpMixBye: 1364 ; mov ebx, esi 1365 ; pop esi 1366 ; pop edx 1367 ; sub ebx, edx 1368 ; mov [esi+TrackInfo.Position], ebx 1369 ; mov [esi+TrackInfo.Error], ah 1370 ; retn 1371 0000094B EB9C jmp short nlMixBye 1372 1373 ;-------------------------------------------------------------------------- 1374 ; mixpoll - updates the output buffer 1375 ;-------------------------------------------------------------------------- 1376 ; 1377 ;-------------------------------------------------------------------------- 1378 ; GetSamples: Returns the next chunk of samples to be played. 1379 ; In: 1380 ; Buffer - Buffer Address. 1381 ; Count - Buffer Size. 1382 ;-------------------------------------------------------------------------- 1383 1384 mixpoll: 1385 GetSamples: ; mixpoll ; 01/10/2017 (TMODPLAY.ASM) 1386 ; edi = buffer address 1387 ; ebx = count 1388 1389 0000094D 60 pushad 1390 1391 ;cld 1392 NextChunk: 1393 0000094E 66833D[10810000]00 cmp word [BufLen], 0 1394 00000956 754A jne short CopyChunk 1395 1396 00000958 53 push ebx 1397 00000959 57 push edi 1398 MixChunk: 1399 0000095A BF[04710000] mov edi, MixBuffer 1400 0000095F 0FB70D[0A810000] movzx ecx, word [BpmSamples] 1401 ;mov cx, [BpmSamples] 1402 00000966 893D[0C810000] mov [BufPtr], edi 1403 0000096C 66890D[10810000] mov [BufLen], cx 1404 1405 00000973 B080 mov al, 80h 1406 00000975 F3AA rep stosb 1407 1408 ;mov cx, NumTracks 1409 ;mov cl, NumTracks ; 01/10/2017 1410 00000977 8A0D[520E0000] mov cl, [numtracks] ; 06/10/2017 1411 0000097D BE[F4800000] mov esi, Tracks - TrackInfo.size 1412 GetSamples_next: 1413 00000982 51 push ecx 1414 00000983 83C626 add esi, TrackInfo.size 1415 00000986 668B0D[10810000] mov cx, [BufLen] 1416 0000098D 8B3D[0C810000] mov edi, [BufPtr] 1417 00000993 E805FFFFFF call MixTrack 1418 00000998 59 pop ecx 1419 00000999 E2E7 loop GetSamples_next 1420 1421 0000099B E838FEFFFF call UpdateTracks 1422 1423 000009A0 5F pop edi 1424 000009A1 5B pop ebx 1425 CopyChunk: 1426 ;mov cx, [BufLen] 1427 000009A2 0FB70D[10810000] movzx ecx, word [BufLen] 1428 000009A9 39D9 cmp ecx, ebx 1429 ;cmp cx, bx 1430 000009AB 7602 jbe short MoveChunk 1431 ;mov cx, bx 1432 000009AD 89D9 mov ecx, ebx 1433 MoveChunk: 1434 000009AF 8B35[0C810000] mov esi, [BufPtr] 1435 000009B5 010D[0C810000] add [BufPtr], ecx 1436 000009BB 66290D[10810000] sub [BufLen], cx 1437 000009C2 29CB sub ebx, ecx 1438 000009C4 F3A4 rep movsb 1439 000009C6 85DB test ebx, ebx 1440 000009C8 7584 jnz short NextChunk 1441 1442 000009CA 61 popad 1443 000009CB C3 retn 1444 1445 ;-------------------------------------------------------------------------- 1446 ; StartPlaying: Initializes the Sound System. 1447 ; In: 1448 ; Module Information Resources. 1449 ;-------------------------------------------------------------------------- 1450 1451 StartPlaying: 1452 000009CC 60 pushad 1453 SetModParms: 1454 000009CD C605[04810000]00 mov byte [OrderPos], 0 1455 000009D4 C605[05810000]06 mov byte [Tempo], DefTempo 1456 000009DB C605[06810000]06 mov byte [TempoWait], DefTempo 1457 000009E2 C605[07810000]7D mov byte [Bpm], DefBpm 1458 000009E9 C605[08810000]40 mov byte [Row], 64 1459 000009F0 C605[09810000]00 mov byte [BreakRow], 0 1460 000009F7 66A1[560E0000] mov ax, [MixSpeed] 1461 000009FD 31D2 xor edx, edx 1462 000009FF 66BB3200 mov bx, 24*DefBpm/60 1463 00000A03 66F7F3 div bx 1464 00000A06 66A3[0A810000] mov [BpmSamples], ax 1465 ClearTracks: 1466 00000A0C BF[1A810000] mov edi, Tracks 1467 ; 07/10/2017 1468 ;mov ecx, NumTracks*TrackInfo.size 1469 00000A11 B826000000 mov eax, TrackInfo.size 1470 00000A16 0FB70D[520E0000] movzx ecx, word [numtracks] 1471 00000A1D F7E1 mul ecx 1472 00000A1F 89C1 mov ecx, eax 1473 00000A21 31C0 xor eax, eax 1474 ;cld 1475 00000A23 F3AA rep stosb 1476 1477 00000A25 A3[0C810000] mov [BufPtr], eax 1478 00000A2A 66A3[10810000] mov [BufLen], ax 1479 MakePitch: 1480 00000A30 66B80021 mov ax, MidCRate 1481 00000A34 66BBAC01 mov bx, 428 1482 00000A38 66F7E3 mul bx 1483 00000A3B 66F735[560E0000] div word [MixSpeed] 1484 00000A42 30F6 xor dh, dh 1485 00000A44 88E2 mov dl, ah 1486 00000A46 88C4 mov ah, al 1487 00000A48 30C0 xor al, al 1488 ;mov cx, 857 1489 00000A4A 66B9610D mov cx, 3425 ; 01/10/2017 (TMODPLAY.ASM) 1490 00000A4E 31DB xor ebx, ebx 1491 00000A50 BF[42150000] mov edi, PitchTable 1492 PitchLoop: 1493 00000A55 50 push eax 1494 00000A56 52 push edx 1495 00000A57 6639DA cmp dx, bx 1496 00000A5A 7303 jae short NoDiv 1497 00000A5C 66F7F3 div bx 1498 NoDiv: 1499 00000A5F 66AB stosw 1500 00000A61 5A pop edx 1501 00000A62 58 pop eax 1502 ;inc bx 1503 00000A63 43 inc ebx 1504 00000A64 E2EF loop PitchLoop 1505 MakeVolume: 1506 00000A66 66B90041 mov cx, 16640 1507 00000A6A 89CB mov ebx, ecx 1508 VolLoop: 1509 00000A6C 664B dec bx 1510 00000A6E 88D8 mov al, bl 1511 00000A70 F6EF imul bh 1512 ;mov [VolTable+bx], ah 1513 00000A72 88A3[04300000] mov [VolTable+ebx], ah 1514 00000A78 E2F2 loop VolLoop 1515 1516 00000A7A 61 popad 1517 00000A7B C3 retn 1518 1519 ;-------------------------------------------------------------------------- 1520 ; StopPlaying: ShutDown the Sound System. 1521 ;-------------------------------------------------------------------------- 1522 1523 StopPlaying: 1524 ; 19/06/2017 1525 ; Stop Playing 1526 sys _audio, 0700h 1526 <1> 1526 <1> 1526 <1> 1526 <1> 1526 <1> %if %0 >= 2 1526 00000A7C BB00070000 <1> mov ebx, %2 1526 <1> %if %0 >= 3 1526 <1> mov ecx, %3 1526 <1> %if %0 = 4 1526 <1> mov edx, %4 1526 <1> %endif 1526 <1> %endif 1526 <1> %endif 1526 00000A81 B820000000 <1> mov eax, %1 1526 <1> 1526 00000A86 CD40 <1> int 40h 1527 ; Cancel callback service (for user) 1528 sys _audio, 0900h 1528 <1> 1528 <1> 1528 <1> 1528 <1> 1528 <1> %if %0 >= 2 1528 00000A88 BB00090000 <1> mov ebx, %2 1528 <1> %if %0 >= 3 1528 <1> mov ecx, %3 1528 <1> %if %0 = 4 1528 <1> mov edx, %4 1528 <1> %endif 1528 <1> %endif 1528 <1> %endif 1528 00000A8D B820000000 <1> mov eax, %1 1528 <1> 1528 00000A92 CD40 <1> int 40h 1529 ; Deallocate Audio Buffer (for user) 1530 sys _audio, 0A00h 1530 <1> 1530 <1> 1530 <1> 1530 <1> 1530 <1> %if %0 >= 2 1530 00000A94 BB000A0000 <1> mov ebx, %2 1530 <1> %if %0 >= 3 1530 <1> mov ecx, %3 1530 <1> %if %0 = 4 1530 <1> mov edx, %4 1530 <1> %endif 1530 <1> %endif 1530 <1> %endif 1530 00000A99 B820000000 <1> mov eax, %1 1530 <1> 1530 00000A9E CD40 <1> int 40h 1531 ; Disable Audio Device 1532 sys _audio, 0C00h 1532 <1> 1532 <1> 1532 <1> 1532 <1> 1532 <1> %if %0 >= 2 1532 00000AA0 BB000C0000 <1> mov ebx, %2 1532 <1> %if %0 >= 3 1532 <1> mov ecx, %3 1532 <1> %if %0 = 4 1532 <1> mov edx, %4 1532 <1> %endif 1532 <1> %endif 1532 <1> %endif 1532 00000AA5 B820000000 <1> mov eax, %1 1532 <1> 1532 00000AAA CD40 <1> int 40h 1533 1534 00000AAC C3 retn 1535 1536 ;============================================================================= 1537 ; 1538 ;============================================================================= 1539 1540 ;dword2str: 1541 ; ; 13/11/2016 - Erdogan Tan 1542 ; ; eax = dword value 1543 ; ; 1544 ; call dwordtohex 1545 ; mov [dword_str], edx 1546 ; mov [dword_str+4], eax 1547 ; mov si, dword_str 1548 ; retn 1549 1550 ; 05/03/2017 (TRDOS 386) 1551 ; trdos386.s (unix386.s) - 10/05/2015 1552 ; Convert binary number to hexadecimal string 1553 1554 ;bytetohex: 1555 ; ; INPUT -> 1556 ; ; AL = byte (binary number) 1557 ; ; OUTPUT -> 1558 ; ; AX = hexadecimal string 1559 ; ; 1560 ; push ebx 1561 ; movzx ebx, al 1562 ; shr bl, 4 1563 ; mov bl, [ebx+hex_chars] 1564 ; xchg bl, al 1565 ; and bl, 0Fh 1566 ; mov ah, [ebx+hex_chars] 1567 ; pop ebx 1568 ; retn 1569 1570 ;wordtohex: 1571 ; ; INPUT -> 1572 ; ; AX = word (binary number) 1573 ; ; OUTPUT -> 1574 ; ; EAX = hexadecimal string 1575 ; ; 1576 ; push ebx 1577 ; xor ebx, ebx 1578 ; xchg ah, al 1579 ; push eax 1580 ; mov bl, ah 1581 ; shr bl, 4 1582 ; mov al, [ebx+hex_chars] 1583 ; mov bl, ah 1584 ; and bl, 0Fh 1585 ; mov ah, [ebx+hex_chars] 1586 ; shl eax, 16 1587 ; pop eax 1588 ; pop ebx 1589 ; jmp short bytetohex 1590 1591 ;dwordtohex: 1592 ; ; INPUT -> 1593 ; ; EAX = dword (binary number) 1594 ; ; OUTPUT -> 1595 ; ; EDX:EAX = hexadecimal string 1596 ; ; 1597 ; push eax 1598 ; shr eax, 16 1599 ; call wordtohex 1600 ; mov edx, eax 1601 ; pop eax 1602 ; call wordtohex 1603 ; retn 1604 1605 ; 19/06/2017 1606 ; 05/03/2017 (TRDOS 386) 1607 ; 13/11/2016 - Erdogan Tan 1608 write_audio_dev_info: 1609 ; BUS/DEV/FN 1610 ; 00000000BBBBBBBBDDDDDFFF00000000 1611 ; DEV/VENDOR 1612 ; DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV 1613 1614 00000AAD 8B35[F80E0000] mov esi, [dev_vendor] 1615 00000AB3 6689F0 mov ax, si 1616 00000AB6 0FB6D8 movzx ebx, al 1617 00000AB9 88DA mov dl, bl 1618 00000ABB 80E30F and bl, 0Fh 1619 00000ABE 8A83[580E0000] mov al, [ebx+hex_chars] 1620 00000AC4 A2[9D0E0000] mov [msgVendorId+3], al 1621 00000AC9 88D3 mov bl, dl 1622 00000ACB C0EB04 shr bl, 4 1623 00000ACE 8A83[580E0000] mov al, [ebx+hex_chars] 1624 00000AD4 A2[9C0E0000] mov [msgVendorId+2], al 1625 00000AD9 88E3 mov bl, ah 1626 00000ADB 88DA mov dl, bl 1627 00000ADD 80E30F and bl, 0Fh 1628 00000AE0 8A83[580E0000] mov al, [ebx+hex_chars] 1629 00000AE6 A2[9B0E0000] mov [msgVendorId+1], al 1630 00000AEB 88D3 mov bl, dl 1631 00000AED C0EB04 shr bl, 4 1632 00000AF0 8A83[580E0000] mov al, [ebx+hex_chars] 1633 00000AF6 A2[9A0E0000] mov [msgVendorId], al 1634 00000AFB C1EE10 shr esi, 16 1635 00000AFE 6689F0 mov ax, si 1636 00000B01 88C3 mov bl, al 1637 00000B03 88DA mov dl, bl 1638 00000B05 80E30F and bl, 0Fh 1639 00000B08 8A83[580E0000] mov al, [ebx+hex_chars] 1640 00000B0E A2[AE0E0000] mov [msgDevId+3], al 1641 00000B13 88D3 mov bl, dl 1642 00000B15 C0EB04 shr bl, 4 1643 00000B18 8A83[580E0000] mov al, [ebx+hex_chars] 1644 00000B1E A2[AD0E0000] mov [msgDevId+2], al 1645 00000B23 88E3 mov bl, ah 1646 00000B25 88DA mov dl, bl 1647 00000B27 80E30F and bl, 0Fh 1648 00000B2A 8A83[580E0000] mov al, [ebx+hex_chars] 1649 00000B30 A2[AC0E0000] mov [msgDevId+1], al 1650 00000B35 88D3 mov bl, dl 1651 00000B37 C0EB04 shr bl, 4 1652 00000B3A 8A83[580E0000] mov al, [ebx+hex_chars] 1653 00000B40 A2[AB0E0000] mov [msgDevId], al 1654 1655 00000B45 8B35[FC0E0000] mov esi, [bus_dev_fn] 1656 00000B4B C1EE08 shr esi, 8 1657 00000B4E 6689F0 mov ax, si 1658 00000B51 88C3 mov bl, al 1659 00000B53 88DA mov dl, bl 1660 00000B55 80E307 and bl, 7 ; bit 0,1,2 1661 00000B58 8A83[580E0000] mov al, [ebx+hex_chars] 1662 00000B5E A2[D20E0000] mov [msgFncNo+1], al 1663 00000B63 88D3 mov bl, dl 1664 00000B65 C0EB03 shr bl, 3 1665 00000B68 88DA mov dl, bl 1666 00000B6A 80E30F and bl, 0Fh 1667 00000B6D 8A83[580E0000] mov al, [ebx+hex_chars] 1668 00000B73 A2[C40E0000] mov [msgDevNo+1], al 1669 00000B78 88D3 mov bl, dl 1670 00000B7A C0EB04 shr bl, 4 1671 00000B7D 8A83[580E0000] mov al, [ebx+hex_chars] 1672 00000B83 A2[C30E0000] mov [msgDevNo], al 1673 00000B88 88E3 mov bl, ah 1674 00000B8A 88DA mov dl, bl 1675 00000B8C 80E30F and bl, 0Fh 1676 00000B8F 8A83[580E0000] mov al, [ebx+hex_chars] 1677 00000B95 A2[B80E0000] mov [msgBusNo+1], al 1678 00000B9A 88D3 mov bl, dl 1679 00000B9C C0EB04 shr bl, 4 1680 00000B9F 8A83[580E0000] mov al, [ebx+hex_chars] 1681 00000BA5 A2[B70E0000] mov [msgBusNo], al 1682 1683 00000BAA 66A1[040F0000] mov ax, [ac97_io_base] 1684 00000BB0 88C3 mov bl, al 1685 00000BB2 88DA mov dl, bl 1686 00000BB4 80E30F and bl, 0Fh 1687 00000BB7 8A83[580E0000] mov al, [ebx+hex_chars] 1688 00000BBD A2[EB0E0000] mov [msgIOBaseAddr+3], al 1689 00000BC2 88D3 mov bl, dl 1690 00000BC4 C0EB04 shr bl, 4 1691 00000BC7 8A83[580E0000] mov al, [ebx+hex_chars] 1692 00000BCD A2[EA0E0000] mov [msgIOBaseAddr+2], al 1693 00000BD2 88E3 mov bl, ah 1694 00000BD4 88DA mov dl, bl 1695 00000BD6 80E30F and bl, 0Fh 1696 00000BD9 8A83[580E0000] mov al, [ebx+hex_chars] 1697 00000BDF A2[E90E0000] mov [msgIOBaseAddr+1], al 1698 00000BE4 88D3 mov bl, dl 1699 00000BE6 C0EB04 shr bl, 4 1700 00000BE9 8A83[580E0000] mov al, [ebx+hex_chars] 1701 00000BEF A2[E80E0000] mov [msgIOBaseAddr], al 1702 1703 ; 24/11/2016 1704 00000BF4 30E4 xor ah, ah 1705 00000BF6 A0[060F0000] mov al, [ac97_int_ln_reg] 1706 00000BFB B10A mov cl, 10 1707 00000BFD F6F1 div cl 1708 00000BFF 660105[F30E0000] add [msgIRQ], ax 1709 00000C06 20C0 and al, al 1710 00000C08 750D jnz short _w_ac97imsg_ ; 19/06/2017 1711 00000C0A A0[F40E0000] mov al, [msgIRQ+1] 1712 00000C0F B420 mov ah, ' ' 1713 00000C11 66A3[F30E0000] mov [msgIRQ], ax 1714 _w_ac97imsg_: 1715 ; EBX = Message address 1716 ; ECX = Max. message length (or stop on ZERO character) 1717 ; (1 to 255) 1718 ; DL = Message color (07h = light gray, 0Fh = white) 1719 sys _msg, msgAC97Info, 255, 07h 1719 <1> 1719 <1> 1719 <1> 1719 <1> 1719 <1> %if %0 >= 2 1719 00000C17 BB[690E0000] <1> mov ebx, %2 1719 <1> %if %0 >= 3 1719 00000C1C B9FF000000 <1> mov ecx, %3 1719 <1> %if %0 = 4 1719 00000C21 BA07000000 <1> mov edx, %4 1719 <1> %endif 1719 <1> %endif 1719 <1> %endif 1719 00000C26 B823000000 <1> mov eax, %1 1719 <1> 1719 00000C2B CD40 <1> int 40h 1720 00000C2D C3 retn 1721 1722 ;============================================================================= 1723 ; preinitialized data 1724 ;============================================================================= 1725 1726 ;============================================================================= 1727 ; Protracker effects stuff 1728 ;============================================================================= 1729 1730 ;----------------------------------------------------------------------------- 1731 ; Effect jump tables 1732 ;----------------------------------------------------------------------------- 1733 1734 00000C2E 90 align 4 1735 1736 efxtable: 1737 00000C30 [42070000] dd efxarpeggio ; 0 - arpeggio 1738 00000C34 [6F040000] dd efxnull ; 1 - porta up 1739 00000C38 [6F040000] dd efxnull ; 2 - porta down 1740 00000C3C [8D060000] dd efxtoneporta ; 3 - tone porta 1741 00000C40 [9C060000] dd efxvibrato ; 4 - vibrato 1742 00000C44 [6F040000] dd efxnull ; 5 - tone+slide 1743 00000C48 [6F040000] dd efxnull ; 6 - vibrato+slide 1744 00000C4C [B9070000] dd efxtremolo ; 7 - tremolo 1745 00000C50 [6F040000] dd efxnull ; 8 - unused 1746 00000C54 [C4060000] dd efxsampoffset ; 9 - sample offset 1747 00000C58 [6F040000] dd efxnull ; A - volume slide 1748 00000C5C [D0060000] dd efxpattjump ; B - pattern jump 1749 00000C60 [DE060000] dd efxsetvolume ; C - set volume 1750 00000C64 [EC060000] dd efxbreak ; D - break pattern 1751 00000C68 [6F040000] dd efxnull ; E - extra effects 1752 00000C6C [0B070000] dd efxsetspeed ; F - set speed 1753 1754 efxtable2: 1755 00000C70 [70040000] dd efxarpeggio2 ; 0 - arpeggio 1756 00000C74 [92040000] dd efxportaup ; 1 - porta up 1757 00000C78 [B8040000] dd efxportadown ; 2 - porta down 1758 00000C7C [DF040000] dd efxtoneporta2 ; 3 - tone porta 1759 00000C80 [18050000] dd efxvibrato2 ; 4 - vibrato 1760 00000C84 [74050000] dd efxtoneslide ; 5 - tone+slide 1761 00000C88 [81050000] dd efxvibslide ; 6 - vibrato+slide 1762 00000C8C [A8050000] dd efxtremolo2 ; 7 - tremolo 1763 00000C90 [6F040000] dd efxnull ; 8 - unused 1764 00000C94 [6F040000] dd efxnull ; 9 - sample offset 1765 00000C98 [8B050000] dd efxvolslide ; A - volume slide 1766 00000C9C [6F040000] dd efxnull ; B - pattern jump 1767 00000CA0 [6F040000] dd efxnull ; C - set volume 1768 00000CA4 [6F040000] dd efxnull ; D - break pattern 1769 00000CA8 [6F040000] dd efxnull ; E - extra effects 1770 00000CAC [6F040000] dd efxnull ; F - set speed 1771 1772 ;----------------------------------------------------------------------------- 1773 ; Amiga period table 1774 ;----------------------------------------------------------------------------- 1775 1776 ;PeriodTable0: 1777 ; dw 0 1778 PeriodTable: 1779 00000CB0 600DA00CE80B400B98- dw 3424,3232,3048,2880,2712,2560,2416,2280,2152,2032,1920,1812 1779 00000CB9 0A000A7009E8086808- 1779 00000CC2 F00780071407 1780 00000CC8 B0065006F405A0054C- dw 1712,1616,1524,1440,1356,1280,1208,1140,1076,1016,960,906 1780 00000CD1 050005B80474043404- 1780 00000CDA F803C0038A03 1781 00000CE0 58032803FA02D002A6- dw 856,808,762,720,678,640,604,570,538,508,480,453 1781 00000CE9 0280025C023A021A02- 1781 00000CF2 FC01E001C501 1782 00000CF8 AC0194017D01680153- dw 428,404,381,360,339,320,302,285,269,254,240,226 1782 00000D01 0140012E011D010D01- 1782 00000D0A FE00F000E200 1783 00000D10 D600CA00BE00B400AA- dw 214,202,190,180,170,160,151,143,135,127,120,113 1783 00000D19 00A00097008F008700- 1783 00000D22 7F0078007100 1784 00000D28 6B0065005F005A0055- dw 107,101,95,90,85,80,75,71,67,63,60,56 1784 00000D31 0050004B0047004300- 1784 00000D3A 3F003C003800 1785 00000D40 350032002F002D002A- dw 53,50,47,45,42,40,37,35,33,31,30,28 1785 00000D49 002800250023002100- 1785 00000D52 1F001E001C00 1786 1787 ;----------------------------------------------------------------------------- 1788 ; Sinus wave table 1789 ;----------------------------------------------------------------------------- 1790 1791 SinTable: 1792 00000D58 0019324A62788EA2B4- db 0,25,50,74,98,120,142,162,180,197,212,225 1792 00000D61 C5D4E1 1793 00000D64 ECF4FAFEFFFEFAF4EC- db 236,244,250,254,255,254,250,244,236,225 1793 00000D6D E1 1794 00000D6E D4C5B4A28E78624A32- db 212,197,180,162,142,120,98,74,50,25 1794 00000D77 19 1795 1796 ;============================================================================= 1797 ; PLAY.ASM - DATA 1798 ;============================================================================= 1799 1800 msg_usage: 1801 00000D78 54696E79204D4F4420- db 'Tiny MOD Player for TRDOS 386 by Erdogan Tan. ' 1801 00000D81 506C6179657220666F- 1801 00000D8A 72205452444F532033- 1801 00000D93 383620627920457264- 1801 00000D9C 6F67616E2054616E2E- 1801 00000DA5 20 1802 00000DA6 4F63746F6265722032- db 'October 2017.',10,13 1802 00000DAF 3031372E0A0D 1803 00000DB5 75736167653A20706C- db 'usage: playmod filename.mod', 10,13,0 1803 00000DBE 61796D6F642066696C- 1803 00000DC7 656E616D652E6D6F64- 1803 00000DD0 0A0D00 1804 00000DD3 30382F31302F323031- db '08/10/2017',10,13,0 1804 00000DDC 370A0D00 1805 1806 00000DE0 54696E79204D4F4420- Credits: db 'Tiny MOD Player v0.1b by Carlos Hasan. July 1993.' 1806 00000DE9 506C61796572207630- 1806 00000DF2 2E3162206279204361- 1806 00000DFB 726C6F732048617361- 1806 00000E04 6E2E204A756C792031- 1806 00000E0D 3939332E 1807 00000E11 0A0D00 db 10,13,0 1808 00000E14 4572726F72206C6F61- ErrorMesg: db 'Error loading Module file.',10,13,0 1808 00000E1D 64696E67204D6F6475- 1808 00000E26 6C652066696C652E0A- 1808 00000E2F 0D00 1809 ;MsgNotFound: db 'Sound Blaster not found or IRQ error.',10,13,0 1810 ;MsgFound: db 'Sound Blaster found at Address 2' 1811 ;PortText: db 'x0h, IRQ ' 1812 ;IrqText: db 'x.',10,13,0 1813 1814 trdos386_err_msg: 1815 00000E31 5452444F5320333836- db 'TRDOS 386 System call error !', 10, 13,0 1815 00000E3A 2053797374656D2063- 1815 00000E43 616C6C206572726F72- 1815 00000E4C 20210A0D00 1816 1817 ; 07/10/2017 1818 00000E51 0A pattern_shift: db 10 1819 00000E52 0400 numtracks: dw 4 1820 1821 ;============================================================================= 1822 ; PLAYER.ASM - DATA 1823 ;============================================================================= 1824 1825 00000E54 01 stmo: db 1 ; stereo (2) or mono (1) 1826 00000E55 08 bps: db 8 ; bits per sample (8 or 16) 1827 Sample_Rate: 1828 00000E56 2256 MixSpeed: dw 22050 ; Hz 1829 1830 ; 13/11/2016 1831 00000E58 303132333435363738- hex_chars: db "0123456789ABCDEF", 0 1831 00000E61 3941424344454600 1832 msgAC97Info: 1833 00000E69 0D0A db 0Dh, 0Ah 1834 00000E6B 414339372041756469- db "AC97 Audio Controller & Codec Info", 0Dh, 0Ah 1834 00000E74 6F20436F6E74726F6C- 1834 00000E7D 6C6572202620436F64- 1834 00000E86 656320496E666F0D0A 1835 00000E8F 56656E646F72204944- db "Vendor ID: " 1835 00000E98 3A20 1836 00000E9A 303030306820446576- msgVendorId: db "0000h Device ID: " 1836 00000EA3 6963652049443A20 1837 00000EAB 30303030680D0A msgDevId: db "0000h", 0Dh, 0Ah 1838 00000EB2 4275733A20 db "Bus: " 1839 00000EB7 303068204465766963- msgBusNo: db "00h Device: " 1839 00000EC0 653A20 1840 00000EC3 3030682046756E6374- msgDevNo: db "00h Function: " 1840 00000ECC 696F6E3A20 1841 00000ED1 303068 msgFncNo: db "00h" 1842 00000ED4 0D0A db 0Dh, 0Ah 1843 00000ED6 492F4F204261736520- db "I/O Base Address: " 1843 00000EDF 416464726573733A20 1844 00000EE8 303030306820495251- msgIOBaseAddr: db "0000h IRQ: " 1844 00000EF1 3A20 1845 00000EF3 3030 msgIRQ: dw 3030h 1846 00000EF5 0D0A00 db 0Dh, 0Ah, 0 1847 ;msgSampleRate: db "Sample Rate: " 1848 ;msgHertz: db "00000 Hz ", 0 1849 ;msg8Bits: db "8 bits ", 0 1850 ;msgMono: db "Mono", 0Dh, 0Ah, 0Dh, 0Ah, 0 1851 ;msg16Bits: db "16 bits ", 0 1852 ;msgStereo: db "Stereo", 0Dh, 0Ah, 0Dh, 0Ah, 0 1853 1854 ;; 13/11/2016 - Erdogan Tan (Ref: KolibriOS, codec.inc) 1855 ;codec_id: dd 0 1856 ;codec_chip_id: dd 0 1857 ;codec_vendor_ids: dw 0 1858 ;codec_chip_ids: dw 0 1859 1860 ;dword_str: dd 30303030h, 30303030h 1861 ; db 'h', 0Dh, 0Ah, 0 1862 1863 ;============================================================================= 1864 ; uninitialized data 1865 ;============================================================================= 1866 1867 bss_start: 1868 1869 ABSOLUTE bss_start 1870 1871 alignb 4 1872 1873 00000EF8 dev_vendor: resd 1 1874 00000EFC bus_dev_fn: resd 1 1875 00000F00 stats_cmd: resd 1 1876 00000F04 ac97_io_base: resw 1 1877 00000F06 ac97_int_ln_reg: resb 1 1878 00000F07 srb: resb 1 1879 1880 ; MODLOAD.ASM 1881 00000F08 FileHandle: resd 1 1882 00000F0C Header: resb ModHeader.size 1883 1884 ; MODPLAY.ASM 1885 ;MixSpeed: resw 1 1886 1887 ModInfo: 1888 00001348 ModInfo.OrderLen: resb 1 1889 00001349 ModInfo.ReStart: resb 1 1890 0000134A ModInfo.Order: resb 128 1891 000013CA ModInfo.Patterns: resd 1 1892 1893 000013CE ModInfo.SampOfs: resw 31 1894 0000140C ModInfo.SampSeg: resw 31 1895 0000144A ModInfo.SampLen: resw 31 1896 00001488 ModInfo.SampRep: resw 31 1897 000014C6 ModInfo.SampRepLen: resw 31 1898 00001504 ModInfo.SampVol: resw 31 1899 1900 ; MODPLAY.ASM 1901 PitchTable: ;resw 857 1902 00001542 resw 3425 ; 01/10/2017 (TMODPLAY.ASM) 1903 00003004 VolTable: resb 16640 1904 00007104 MixBuffer resb MixBufSize 1905 1906 ; MODPLAY.ASM 1907 00008104 OrderPos: resb 1 1908 00008105 Tempo: resb 1 1909 00008106 TempoWait: resb 1 1910 00008107 Bpm: resb 1 1911 00008108 Row: resb 1 1912 00008109 BreakRow: resb 1 1913 0000810A BpmSamples: resw 1 1914 0000810C BufPtr: resd 1 1915 00008110 BufLen: resw 1 1916 00008112 BufRep: resd 1 1917 00008116 Note: resd 1 1918 ;Tracks: resb TrackInfo.size*NumTracks 1919 ; 07/10/2017 1920 0000811A Tracks: resb TrackInfo.size*8 1921 1922 0000824A alignb 16 1923 1924 ; PLAY.ASM 1925 00008250 Scope: resw 320 1926 000084D0 RowOfs: resw 256 1927 1928 mod_file_name: 1929 000086D0 resb 80 1930 1931 00008720 alignb 4096 1932 1933 Audio_Buffer: 1934 00009000 resb 2*32768 1935 00019000 alignb 65536 1936 1937 00020000 DMA_Buffer: resb 2*65536 1938 1939 file_buffer: 1940 00040000 resb 65536*5 1941 EOF: