home *** CD-ROM | disk | FTP | other *** search
- Jumps
- .286
-
- _Stack Segment Para Stack 'Stack'
-
- db 100h dup (0)
-
- _Stack ends
-
- Extrn MainVolume:Word,ChanOn:Word,PatternRow:Word,PlayingPattern:Word
- Extrn LoadMod:Far,ClearMem:Far,StartPlaying:Far,StopPlaying:Far,Init:Far,InitDevice:Far
-
- _Code Segment Para 'Code'
-
- assume cs:_Code
-
- ModToRead db 70 dup (0)
- CommandLine db 127 dup (0)
- KeySeg dw 0
- KeyOfs dw 0
- Key db 0
- Error db ' Internal Error. Restart the computer and try again.$'
- OutOfMem db ' Not enough mem!$'
- WrongName db ' File or path not found!$'
- Docs db ' Module Player v0.15b (C) Robert Adolfsson (Cascada) 1993.',13,10
- db 13,10
- db ' For Advanced Gravis UltraSound',13,10
- db 13,10
- db ' Syntax: GUS <[Path]Filename.ext>.',13,10
- db 13,10
- db '$'
-
- Even
-
- Begin:
- call GetFileName
- mov ax,cs
- mov ds,ax
- mov ax,4A00h
- mov bx,4096
- int 21h
- jnc NoStop
- mov ah,9
- push cs
- pop ds
- mov dx,offset cs:[Error]
- int 21h
- jmp Stop
- NoStop:
- call InitDevice
- call Init
- mov dx,cs
- mov ds,dx
- mov dx,offset cs:[ModToRead]
- call LoadMod
- call StartPlaying
- mov ax,3509h
- int 21h
- mov cs:[KeySeg],es
- mov cs:[KeyOfs],bx
- mov ax,2509h
- mov dx,cs
- mov ds,dx
- mov dx,offset cs:[KeyInt]
- int 21h
-
- DoLoop:
- cmp cs:[Key],1
- jne DoLoop
-
- mov ax,2509h
- mov ds,cs:[KeySeg]
- mov dx,cs:[KeyOfs]
- int 21h
- call StopPlaying
- call ClearMem
- Stop:
- mov ax,4C00h
- int 21h
-
- KeyInt Proc Near
-
- push ax
- push ds
- mov ax,Seg MainVolume
- mov ds,ax
- in al,60h
- cmp al,127
- ja NoKey
- mov cs:[Key],al
- NoKey:
- cmp al,74
- jne NoVolDown
- sub [MainVolume],4
- jns NoVolDown
- mov [MainVolume],0
- NoVolDown:
- cmp al,78
- jne NoVolUp
- add [MainVolume],4
- cmp [MainVolume],64
- jbe NoVolUp
- mov [MainVolume],64
- NoVolUp:
- cmp al,81
- jne NoChangePatt1
- mov [PatternRow],64
- NoChangePatt1:
- cmp al,73
- jne NoChangePatt2
- mov [PatternRow],64
- sub [PlayingPattern],2
- jns NoChangePatt2
- mov [PlayingPattern],0
- NoChangePatt2:
- cmp al,2
- jne NoChan1OnOff
- xor [ChanOn],00000001b
- NoChan1OnOff:
- cmp al,3
- jne NoChan2OnOff
- xor [ChanOn],00000010b
- NoChan2OnOff:
- cmp al,4
- jne NoChan3OnOff
- xor [ChanOn],00000100b
- NoChan3OnOff:
- cmp al,5
- jne NoChan4OnOff
- xor [ChanOn],00001000b
- NoChan4OnOff:
- cmp al,6
- jne NoChan5OnOff
- xor [ChanOn],00010000b
- NoChan5OnOff:
- cmp al,7
- jne NoChan6OnOff
- xor [ChanOn],00100000b
- NoChan6OnOff:
- cmp al,8
- jne NoChan7OnOff
- xor [ChanOn],01000000b
- NoChan7OnOff:
- cmp al,9
- jne NoChan8OnOff
- xor [ChanOn],10000000b
- NoChan8OnOff:
- in al,61h
- or al,80h
- out 61h,al
- and al,7Fh
- out 61h,al
- mov al,20h
- out 20h,al
- pop ds
- pop ax
- iret
-
- KeyInt EndP
-
- GetFileName Proc Near
-
- push bx
- push di
- mov di,offset cs:[CommandLine]
- mov bx,82h
- mov al,es:[bx-2]
- cmp al,0
- jne TestNext
- jmp NoCmdLine
- TestNext:
- mov al,es:[bx]
- cmp al,0
- jne GetIt
- jmp NoCmdLine
-
- GetIt:
- mov al,es:[bx]
- inc bx
- mov cs:[di],al
- inc di
- cmp al,0Dh
- je GotIt
- jmp GetIt
- GotIt:
- mov di,offset cs:[CommandLine]
- mov bx,offset cs:[ModToRead]
- MoveName:
- mov al,cs:[di]
- inc di
- cmp al,0Dh
- jne NotYetCommand
- jmp EndMoveName
- NotYetCommand:
- cmp al,32
- je EndMoveName
- mov cs:[bx],al
- inc bx
- jmp MoveName
- EndMoveName:
- pop di
- pop bx
- ret
-
- GetFileName Endp
-
- NoCmdLine:
-
- mov ah,9
- push cs
- pop ds
- mov dx,offset cs:[Docs]
- int 21h
- mov ax,4C00h
- int 21h
-
- _Code ends
-
- end Begin