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,RealRow:Word,OrderLen:Byte
- Extrn PlayingPattern:Word,RealPPattern:Word,Time:DWord,SampChans:Byte
- Extrn Bar:Byte,NumChans:Word,BasePort:Word,ErrorCode:Word
- Extrn LoadMod:Far,ClearMem:Far,StartPlaying:Far,StopPlaying:Far,Init:Far
- Extrn 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
- CommandLineC db 0,'',0Dh
- Error db ' Internal Error. Restart the computer and try again.$'
- OutOfMem db ' Not enough memory!$'
- WrongName db ' File or path not found!$'
- Docs db 13,10
- db ' Module Player v1.5 (C) Robert Adolfsson (Cascada) 1993.',13,10
- db 13,10
- db ' For Advanced Gravis UltraSound',13,10
- db ' Supports Noisetracker/Soundtracker/StarTrecker (AmigaTrackers)',13,10
- db ' FastTracker 4,6 or 8 channels/OctaComposer (PCTrackers)',13,10
- db 13,10
- db ' Syntax: GUSPLAY <[Path]Filename.ext> /baseport.',13,10
- db ' Where baseport is a three digit hexadecimal number (Def=220).',13,10
- db '$'
-
- Palette db 63,00,00
- db 56,00,08
- db 48,00,16
- db 40,00,24
- db 32,00,32
- db 24,00,40
- db 16,00,48
- db 08,00,56
- db 00,00,63
- db 63,63,00
- db 63,26,00
- db 48,63,00
- db 00,63,00
- db 00,00,00
- db 00,00,00
- db 63,63,63
-
- Pic db ' Modplay v1.5 for Gravis Ultrasound (C) Robert Adolfsson CASCADA '
- db ' '
- db ' '
- db ' Position / Row /64 Time : MainVolume /64 '
- db ' '
- db ' PgUp/PgDn : Change position. 1-8 : Turn channels on/off. +/- : MainVolume '
- db ' D : Dosshell '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
- db ' '
-
- db 80 dup (0Fh)
- db 80 dup (19h)
- db 80 dup (29h)
- db 80 dup (39h)
- db 80 dup (49h)
- db 80 dup (59h)
- db 80 dup (69h)
- db 80 dup (79h)
- db 80 dup (80h)
- db 80 dup (7Ah)
- db 80 dup (69h)
- db 80 dup (5Bh)
- db 80 dup (4Ch)
- db 80 dup (5Ch)
- db 80 dup (6Ch)
- db 80 dup (7Ch)
- db 80 dup (89h)
- db 80 dup (70h)
- db 80 dup (6Ah)
- db 80 dup (59h)
- db 80 dup (4Bh)
- db 80 dup (3Ch)
- db 80 dup (2Ch)
- db 80 dup (1Ch)
- db 80 dup (0Ch)
-
- EvenData
- PrintTable db 0,0,0,0
- Rept 127
- db 0,0,0,0
- EndM
- BarTable dw 8 dup (0)
- ComSpec db 128 dup (0)
- PSPAdress dw 0
- OldSS dw 0
- OldSP dw 0
- Environment dw 0 ; Environment segment.
- dw 0,0 ; Commandline segment and offset.
- dw 0,0 ; First FCB segment and offset.
- dw 0,0 ; Second FCB segment and offset.
-
- SetPalReg Macro P,R,G,B
-
- mov dx,3C8h
- mov al,P
- out dx,al
- inc dx
- mov al,R
- out dx,al
- mov al,G
- out dx,al
- mov al,B
- out dx,al
-
- EndM
-
- Even
-
- Begin:
- mov cs:[PSPAdress],es
- push es
- call GetFileName
- pop ds
- call GetComSpec
- mov ax,cs
- mov ds,ax
- mov ax,4A00h
- mov bx,18129/16+1
- 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
- jnc NoErrorLoad
- mov ax,seg MainVolume
- mov ds,ax
- cmp ds:[ErrorCode],1
- jne NoFile
- mov dx,offset cs:[WrongName]
- NoFile:
- cmp ds:[ErrorCode],3
- jne NoMem
- mov dx,offset cs:[OutOfMem]
- NoMem:
- push cs
- pop ds
- mov ah,9
- int 21h
- jmp Stop
- NoErrorLoad:
-
- mov di,cs
- mov es,di
- mov di,offset cs:[PrintTable]
- mov cx,128
- mov al,30h
- mov ah,30h
- mov bl,30h
- mov bh,30h
- FillPTable:
- mov es:[di],al
- mov es:[di+1],ah
- mov es:[di+2],bl
- mov es:[di+3],bh
- add di,4
- inc al
- cmp al,3Ah
- jb NoWrapCount
- mov al,30h
- inc ah
- cmp ah,3Ah
- jb NoWrapCount
- mov ah,30h
- inc bl
- cmp bl,3Ah
- jb NoWrapCount
- mov bl,30h
- inc bh
- NoWrapCount:
- loop FillPTable
-
- call StartPlaying
-
- FromDosShell:
- 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
-
- mov bl,0
- mov ax,1003h
- int 10h
-
- MOV AH,0
- SETPAL:
- MOV DX,3DAH
- IN AL,DX
- MOV DX,3C0H
- MOV AL,AH
- OUT DX,AL
- JMP $+2
- OUT DX,AL
- INC AH
- CMP AH,16
- JB SETPAL
-
- MOV DX,3DAH
- IN AL,DX
- MOV DX,3C0h
- MOV AL,20H
- OUT DX,AL
-
- mov si,cs
- mov ds,si
- mov si,offset cs:[Palette]
- mov dx,3C8h
- mov al,0
- out dx,al
- inc dx
- mov cx,16*3
- rep outsb
-
- cld
- mov di,0B800h
- mov es,di
- mov di,0
- mov cx,2000
- mov si,cs
- mov ds,si
- mov si,offset cs:[Pic]
- LoadPic:
- movsb
- mov al,ds:[si+2000-1]
- stosb
- loop LoadPic
-
- call ProgramChars
-
- mov di,0A000h
- mov es,di
-
- cld
- mov cx,9
- FillCharLoop:
- push cx
- mov di,256
- sub di,cx
- shl di,5
- neg cx
- add cx,9
- shl cx,1
- mov bx,16
- sub bx,cx
- mov al,0h
- rep stosb
- mov al,3Eh
- mov cx,bx
- rep stosb
- sub di,32+16
- pop cx
- loop FillCharLoop
-
- mov di,0B800h
- mov es,di
-
- call NoProgramChars
-
- mov ax,seg MainVolume
- mov ds,ax
-
- mov cx,ds:[NumChans]
- cmp cx,6
- je SixChans
- cmp cx,8
- je EigthChans
- mov cs:[BarTable],17*80*2+01*2
- mov cs:[BarTable+2],17*80*2+21*2
- mov cs:[BarTable+4],17*80*2+41*2
- mov cs:[BarTable+6],17*80*2+61*2
- jmp FourChans
- SixChans:
- mov cs:[BarTable],8*80*2+21*2
- mov cs:[BarTable+2],8*80*2+41*2
- mov cs:[BarTable+4],17*80*2+01*2
- mov cs:[BarTable+6],17*80*2+21*2
- mov cs:[BarTable+8],17*80*2+41*2
- mov cs:[BarTable+10],17*80*2+61*2
- jmp FourChans
- EigthChans:
- mov cs:[BarTable],8*80*2+01*2
- mov cs:[BarTable+2],8*80*2+21*2
- mov cs:[BarTable+4],8*80*2+41*2
- mov cs:[BarTable+6],8*80*2+61*2
- mov cs:[BarTable+8],17*80*2+01*2
- mov cs:[BarTable+10],17*80*2+21*2
- mov cs:[BarTable+12],17*80*2+41*2
- mov cs:[BarTable+14],17*80*2+61*2
- FourChans:
-
- mov di,19
- mov dx,3
- mov bh,0
- mov bl,ds:[OrderLen]
- call PrintVal
-
- mov ah,2
- mov bh,0
- mov dh,25
- mov dl,0
- int 10h
-
- mov ax,Seg MainVolume
- mov ds,ax
- mov ax,0B800h
- mov es,ax
-
- DoLoop:
- mov dx,3DAh
- Test1:
- in al,dx
- test al,8
- jnz Test1
- Test2:
- in al,dx
- test al,8
- jz Test2
- mov ax,Seg MainVolume
- mov ds,ax
- mov di,0B800h
- mov es,di
- mov di,69
- mov dx,3
- mov bx,ds:[MainVolume]
- call PrintSec
- mov di,15
- mov dx,3
- mov bx,ds:[RealPPattern]
- call PrintVal
- mov di,32
- mov dx,3
- mov bx,ds:[RealRow]
- inc bx
- call PrintSec
- mov ax,Word Ptr cs:[Time]
- mov dx,Word Ptr cs:[Time+2]
- mov bx,1000
- div bx
- mov dx,0
- mov bx,60
- div bx
- mov bx,ax
- mov si,dx
- mov dx,3
- mov di,49
- call PrintSec
- mov bx,si
- mov dx,3
- mov di,52
- call PrintSec
-
- cld
- mov si,offset ds:[SampChans]
- mov cx,ds:[NumChans]
-
- BarLoop:
- push cx
- mov di,ds:[NumChans]
- sub di,cx
- shl di,1
- mov di,cs:[BarTable+di]
-
- mov bx,Word Ptr ds:[si.Bar]
- mov cx,63
- sub cx,bx
- shr cx,3
- cmp cx,0
- je NoSuddBar
- cmp bx,0
- SuddIt:
- mov al,32
- Rept 18
- stosb
- inc di
- EndM
- add di,160-2*18
- loop SuddIt
- NoSuddBar:
- mov cx,bx
- and bx,7
- neg bl
- dec bl
- mov al,bl
- Rept 18
- stosb
- inc di
- EndM
- add di,160-2*18
- shr cx,3
- cmp cx,0
- je NoFillBar
- mov al,255-8
- FillSecond:
- Rept 18
- stosb
- inc di
- EndM
- add di,160-2*18
- loop FillSecond
- NoFillBar:
-
- sub ds:[si.Bar],1
- jnc NoWBar
- mov ds:[si.Bar],0
- NoWBar:
-
- pop cx
- add si,52
- dec cx
- jnz BarLoop
-
- EndPrintVals:
- cmp cs:[Key],20h
- jne NoDosShell
- mov cs:[Key],0
- pusha
- push ds
- push es
- cli
- mov cs:[OldSS],ss
- mov cs:[OldSP],sp
- sti
- mov ax,2509h
- mov ds,cs:[KeySeg]
- mov dx,cs:[KeyOfs]
- int 21h
- mov ax,3
- int 10h
- mov cs:[Environment],0
- mov cs:[Environment+2],Offset cs:[CommandLineC]
- mov Word Ptr cs:[Environment+4],cs
- mov cs:[Environment+6],5Ch
- mov ax,cs:[PSPAdress]
- mov Word Ptr cs:[Environment+8],ax
- mov cs:[Environment+10],6Ch
- mov Word Ptr cs:[Environment+12],ax
- mov bx,cs
- mov ds,bx
- mov es,bx
- mov bx,offset cs:[Environment]
- mov dx,offset cs:[ComSpec]
- mov ax,4B00h
- int 21h
- cli
- mov ss,cs:[OldSS]
- mov sp,cs:[OldSP]
- sti
- pop es
- pop ds
- popa
- jmp FromDosShell
- NoDosShell:
- cmp cs:[Key],1
- jne DoLoop
-
- mov ax,2509h
- mov ds,cs:[KeySeg]
- mov dx,cs:[KeyOfs]
- int 21h
- call StopPlaying
- call ClearMem
- mov ax,3
- int 10h
- Stop:
- mov ax,4C00h
- int 21h
-
- GetComSpec Proc Near
-
- mov ds,ds:[2Ch]
- mov si,0
- FindComSpec:
- lodsb
- cmp al,0
- jne NoTestEnd
- lodsb
- cmp al,0
- je EndSearchEnv
- NoTestEnd:
- cmp al,'C'
- jne FindComSpec
- lodsb
- cmp al,'O'
- jne FindComSpec
- lodsb
- cmp al,'M'
- jne FindComSpec
- lodsb
- cmp al,'S'
- jne FindComSpec
- lodsb
- cmp al,'P'
- jne FindComSpec
- lodsb
- cmp al,'E'
- jne FindComSpec
- lodsb
- cmp al,'C'
- jne FindComSpec
- mov di,offset cs:[ComSpec]
- inc si
- LetsMoveIt:
- lodsb
- cmp al,0
- je EndSearchEnv
- mov cs:[di],al
- inc di
- jmp LetsMoveIt
- EndSearchEnv:
- ret
-
- GetComSpec EndP
-
- ProgramChars Proc Near
-
- mov dx,3C4h
- mov ax,0100h
- out dx,ax
- mov ax,0402h
- out dx,ax
- mov ax,0704h
- out dx,ax
- mov ax,0300h
- out dx,ax
-
- mov dx,3CEh
- mov ax,0204h
- out dx,ax
- mov ax,0005h
- out dx,ax
- mov ax,0006h
- out dx,ax
- ret
-
- ProgramChars EndP
-
- NoProgramChars Proc Near
-
- mov dx,3C4h
- mov ax,0100h
- out dx,ax
- mov ax,0302h
- out dx,ax
- mov ax,0304h
- out dx,ax
- mov ax,0300h
- out dx,ax
-
- mov dx,3CEh
- mov ax,0004h
- out dx,ax
- mov ax,1005h
- out dx,ax
- mov ax,0E06h
- out dx,ax
- ret
-
- NoProgramChars EndP
-
- PrintChar Proc Near
-
- shl di,1
- shl dx,5
- add di,dx
- shl dx,2
- add di,dx
- stosb
- ret
-
- PrintChar EndP
-
- PrintVal Proc Near
-
- cld
- shl di,1
- shl dx,5
- add di,dx
- shl dx,2
- add di,dx
- shl bx,2
- mov al,cs:[PrintTable+bx+2]
- stosb
- inc di
- mov al,cs:[PrintTable+bx+1]
- stosb
- inc di
- mov al,cs:[PrintTable+bx]
- stosb
- ret
-
- PrintVal EndP
-
- PrintSec Proc Near
-
- cld
- shl di,1
- shl dx,5
- add di,dx
- shl dx,2
- add di,dx
- shl bx,2
- mov al,cs:[PrintTable+bx+1]
- stosb
- inc di
- mov al,cs:[PrintTable+bx]
- stosb
- ret
-
- PrintSec EndP
-
- 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],1
- jns NoVolDown
- mov [MainVolume],0
- NoVolDown:
- cmp al,78
- jne NoVolUp
- add [MainVolume],1
- 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 CheckCommands
- mov cs:[bx],al
- inc bx
- jmp MoveName
- CheckCommands:
- mov al,cs:[di]
- inc di
- cmp al,0Dh
- je EndMoveName
- cmp al,'/'
- jne NoNewBase
- mov bh,0
- mov bl,cs:[di]
- cmp bl,'A'
- jb UsSub1
- sub bl,'A'
- add bl,10
- jmp NoUsSub1
- UsSub1:
- sub bl,30h
- NoUsSub1:
- mov ah,bl
- mov bl,cs:[di+1]
- cmp bl,'A'
- jb UsSub2
- sub bl,'A'
- add bl,10
- jmp NoUsSub2
- UsSub2:
- sub bl,30h
- NoUsSub2:
- shl bl,4
- mov al,bl
- mov bl,cs:[di+2]
- cmp bl,'A'
- jb UsSub3
- sub bl,'A'
- add bl,10
- jmp NoUsSub3
- UsSub3:
- sub bl,30h
- NoUsSub3:
- add ax,bx
- mov bx,Seg MainVolume
- mov ds,bx
- mov ds:[BasePort],ax
- add di,3
- NoNewBase:
- jmp CheckCommands
- 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