home *** CD-ROM | disk | FTP | other *** search
- ideal
- P286
- model Huge
- jumps
-
- stack 1024
-
- segment MyCode
-
- include "gusmod.inc"
-
- NumNotes = 36
- NoteX1 = 4
- NoteY1 = 7
- NoteX2 = 73
- NoteY2 = 7
- StartLine = 7
- StartX = 8
- EfxX = 8
- EfxY = 2
- Spacing = 5
- freek_Line = 24
- freek_Col = 69
-
- struc SampleRec
- sname db 16h dup (?)
- length dw ?
- volume dw ?
- repeat dw ?
- replen dw ?
- ends SampleRec
-
- struc HS
- songname db 20 dup (?)
- samples db 31*size SampleRec dup (?)
- songlen db ?
- restart db ?
- sequences db 128 dup (?)
- mk dd ?
- ends HS
-
-
-
- assume cs:MyCode,ds:MyData
-
- MMus SMus <>
- Music dw 0,BlankMusicSeg
- P PM <>
-
- PspAddress dw 0
- SizeOfProg dw 0
-
- Num db '00',13,10,'$'
-
- include "display.asm"
- include "modload2.asm"
- include "files.asm"
- include "sd.asm"
- include "env.asm"
-
- proc Terminate near
- mov bx,5
- call [dword ptr cs:Music]
- mov bx,6 ; Kill music.
- call [dword ptr cs:Music]
- call MUS_KillModule
- mov bx,1 ; Close down player.
- call [dword ptr cs:Music]
- mov ax,MyData
- mov ds,ax
- mov ah,0Eh
- mov dl,[OldDrive]
- int 21h
- mov ah,3Bh
- mov dx,offset HomeDirectory - 1
- int 21h
- mov es,[Word FileSeg+2]
- mov ah,49h
- int 21h
- mov es,[Word cs:ScreenFix]
- mov ah,49h
- int 21h
- call FreeSoundDriver
- call RestoreMode
- mov ax,4C00h
- int 21h
- endp Terminate
-
- proc Error near
- mov ax,MyData
- mov ds,ax
- mov ah,9
- int 21h
- mov ah,0
- int 16h
- call Terminate
- endp Error
-
- ; si - Filename offset
- proc PutName
- push ds es
- mov ax,MyData
- mov es,ax
- mov di,[es:PutFilename]
- mov ax,cs
- mov ds,ax
- mov cx,12
- rep movsb
- mov al,0
- stosb
- pop es ds
- ret
- endp PutName
-
- assume ds:MyData
-
- proc DrawDots
- mov ax,[cs:ScreenFix]
- mov es,ax
- mov di,StartLine*160+StartX*2
- mov bx,36
- mov si,0
- @@LineLoop: push di
- cmp si,Spacing
- jnz @@DrawIt
- mov ax,07F9h
- mov cx,64
- rep stosw
- mov si,0
- jmp @@Bottom
- @@DrawIt: mov cx,64
- mov dx,0
- @@PutLoop: mov ax,03FAh
- cmp dx,Spacing
- jnz @@JustPut
- mov ax,07F9h
- mov dx,0
- @@JustPut: stosw
- inc dx
- loop @@PutLoop
- @@Bottom: inc si
- pop di
- add di,160
- dec bx
- jnz @@LineLoop
- ret
- endp DrawDots
-
- proc DrawNotes near
- push ds
- mov ax,MyData
- mov ds,ax
- mov ax,[cs:ScreenFix]
- mov es,ax
- mov si,offset Notes
- mov di,NoteY1*160+NoteX1*2
- mov bx,offset KeyName
- mov bp,-4
- call DrawNotes1
- mov si,offset Notes
- mov di,NoteY2*160+NoteX2*2
- mov bx,offset KeyName
- mov bp,8
- call DrawNotes1
- pop ds
- ret
- DrawNotes1: mov cx,36
- mov dx,0
- @@DrawThem: mov ah,0Bh
- cmp dx,Spacing
- jnz @@DLoop
- mov dx,0
- mov ah,0Fh
- @@DLoop: push cx di
- mov cx,3
- @@DrawLoop: lodsb
- stosw
- loop @@DrawLoop
- pop di cx
- mov al,[cs:bx]
- mov [es:di+bp],ax
- inc bx
- add di,160
- inc dx
- loop @@DrawThem
- ret
- endp DrawNotes
-
- Matcher dw 113,120,127,135,143,151,160,170,180,190,202,214
- dw 226,240,254,269,285,302,320,339,360,381,404,428
- dw 453,480,508,538,570,604,640,678,720,762,808,856
- proc NoteMatch
- mov ax,[si]
- xchg ah,al
- and ax,0FFFh
- or ax,ax
- jz @@Done
- mov bx,offset Matcher
- mov cx,0
- @@NoteMatcher: inc cx
- add bx,2
- cmp ax,[cs:bx]
- jge @@NoteMatcher
- mov ax,cx
- @@Done: ret
- endp NoteMatch
-
- ; AX - Attribute
- ; DX - Attribute New Note
- ; BX - Pattern
- ; CX - Channel to draw (0-15)
- Line dw 0
- OldOne dw 0
- Attr dw 0
- AttrNew dw 0
- proc DrawPattern
- push ds es bx
- mov [cs:Attr],ax
- mov [cs:AttrNew],dx
- xor bh,bh
- mov bl,[cs:bx+sequences]
- shl bx,1
- mov ax,[cs:bx+PatternLoc]
- mov ds,ax
- mov si,0
- shl cx,2
- add si,cx
- mov ax,[cs:ScreenFix]
- mov es,ax
- mov di,StartLine*160+StartX*2
- mov [Word cs:Line],0
- mov [Word cs:OldOne],0
- @@DrawNotes: call NoteMatch
- or ax,ax
- jz @@DrawNext
- mov [cs:OldOne],ax
- dec ax
- mov bx,160
- mul bx
- add ax,[cs:Line]
- add ax,[cs:Line]
- mov di,StartLine*160+StartX*2
- add di,ax
- mov ax,[cs:AttrNew]
- stosw
- jmp @@Skip
- @@DrawNext: cmp [Word cs:OldOne],0
- jz @@Skip
- mov ax,[cs:Attr]
- stosw
- @@Skip: add si,16
- inc [Word cs:Line]
- cmp [Word cs:Line],64
- jnz @@DrawNotes
- pop bx es ds
- ret
- endp DrawPattern
-
- InsDisp db ' 0123456789ABCDEFGHIJKLMNOPQRSTU'
- EfxDisp db ' 0123456789ABCDEF'
- proc DrawEfx
- push ds es bx
- xor bh,bh
- mov bl,[cs:bx+sequences]
- shl bx,1
- mov ax,[cs:bx+PatternLoc]
- mov ds,ax
- mov si,0
- shl cx,2
- add si,cx
- mov ax,[cs:ScreenFix]
- mov es,ax
- mov di,EfxY*160+EfxX*2
- mov [Word cs:Line],0
- @@DrawIns: push di
- mov bl,[si+2]
- and bl,0F0h
- shr bl,4
- mov bh,[si]
- and bh,0F0h
- or bl,bh
- xor bh,bh
- mov al,[cs:bx+InsDisp]
- mov ah,0Fh
- mov [es:di],ax
- add di,160
- xor bh,bh
- mov bl,[si+2]
- and bx,0Fh
- mov cl,[si+3]
- or bl,bl
- jnz @@OKEfx
- or cx,cx
- jz @@ClrEfx
- @@OKEfx: mov al,[cs:bx+EfxDisp+1]
- mov [es:di],ax
- add di,160
- mov bl,cl
- shr bl,4
- mov al,[cs:bx+EfxDisp+1]
- mov [es:di],ax
- add di,160
- mov bl,cl
- and bl,0Fh
- mov al,[cs:bx+EfxDisp+1]
- mov [es:di],ax
- add di,160
- jmp @@EndLoop
- @@ClrEfx: mov cx,3
- mov al,' '
- @@ClrEfxLoop: mov [es:di],ax
- add di,160
- loop @@ClrEfxLoop
- @@EndLoop: add si,16
- pop di
- add di,2
- inc [Word cs:Line]
- cmp [Word cs:Line],64
- jnz @@DrawIns
- pop bx es ds
- ret
- endp DrawEfx
-
- proc DrawAllTop
- call DrawAll
- mov cx,1
- call PlotXYTop
- ret
- endp DrawAllTop
-
- proc DrawAllBot
- call DrawAll
- mov cx,1
- call PlotXYBot
- ret
- endp DrawAllBot
-
- proc DrawAll
- call DrawDots
- mov bx,[cs:CurPat]
- mov cx,[cs:CurChannel]
- call DrawEfx
- mov cx,0
- @@ChannelWrite: cmp cx,[cs:CurChannel]
- jz @@BottomLoop
- mov ax,07DCh
- mov dx,07DCh
- push cx
- call DrawPattern
- pop cx
- @@BottomLoop: inc cx
- cmp cx,4
- jnz @@ChannelWrite
- mov dx,4F20h
- mov ax,0FDBh
- mov bx,[cs:CurPat]
- mov cx,[cs:CurChannel]
- call DrawPattern
- push ds es
- mov ds,[cs:ScreenFix]
- mov es,[cs:Screen]
- mov si,0
- mov di,0
- mov cx,4000
- rep movsw
- pop es ds
- ret
- endp DrawAll
-
- OldAttr dw 0
- OldCoord dw 8002
- OldCoordBot2 dw 8002
- OffBot db 0
- proc PlotXYBot
- mov ax,[cs:CurY]
- mov bx,160
- mul bx
- add ax,[cs:CurX]
- add ax,[cs:CurX]
- mov bx,[cs:Screen]
- mov es,bx
- mov di,StartLine*160+StartX*2
- add di,ax
- or cx,cx
- jnz @@Skip
- mov bx,[cs:OldCoordBot2]
- add bx,2*160+8*2+1
- mov cx,4
- @@RowLoop: xor [Byte es:bx],00010000b
- add bx,160
- loop @@RowLoop
- mov bx,[cs:OldCoord]
- mov ax,[cs:OldAttr]
- mov [es:bx],ax
- @@Skip: mov ax,[es:di]
- mov [cs:OldAttr],ax
- mov [cs:OldCoord],di
- mov ax,[cs:CurX]
- add ax,[cs:CurX]
- mov [cs:OldCoordBot2],ax
- cmp [Byte cs:OffBot],1
- jz @@Below
- mov bx,ax
- add bx,2*160+8*2+1
- mov cx,4
- @@RowLoop2: xor [Byte es:bx],00010000b
- add bx,160
- loop @@RowLoop2
- mov [Word es:di],9ADBh
- @@Below: ret
- endp PlotXYBot
-
- OldAttrTop dw 0
- OldCoordTop dw 8002
- OldCoordTop2 dw 8002
- OffTop db 0
- proc PlotXYTop
- mov ax,[cs:CurYTop]
- mov bx,160
- mul bx
- add ax,[cs:CurX]
- add ax,[cs:CurX]
- mov bx,[cs:Screen]
- mov es,bx
- mov di,EfxY*160+EfxX*2
- add di,ax
- or cx,cx
- jnz @@Skip
- mov bx,[cs:OldCoordTop2]
- add bx,7*160+8*2+1
- mov cx,36
- @@RowLoop: xor [Byte es:bx],00010000b
- add bx,160
- loop @@RowLoop
- mov bx,[cs:OldCoordTop]
- mov ax,[cs:OldAttrTop]
- mov [es:bx],ax
- @@Skip: mov ax,[es:di]
- mov [cs:OldAttrTop],ax
- mov [cs:OldCoordTop],di
- mov ax,[cs:CurX]
- add ax,[cs:CurX]
- mov [cs:OldCoordTop2],ax
- cmp [Byte cs:OffTop],1
- jz @@Below
- mov bx,ax
- add bx,7*160+8*2+1
- mov cx,36
- @@RowLoop2: xor [Byte es:bx],00010000b
- add bx,160
- loop @@RowLoop2
- mov [Word es:di],9ADBh
- @@Below: ret
- endp PlotXYTop
-
- proc SetNote
- push ds
- mov bx,[cs:CurPat]
- xor bh,bh
- mov bl,[cs:bx+sequences]
- shl bx,1
- mov ax,[cs:bx+PatternLoc]
- mov ds,ax
- mov si,0
- mov cx,[cs:CurChannel]
- shl cx,2
- add si,cx
- mov cx,[cs:CurX]
- shl cx,4
- add si,cx
- mov bx,[cs:CurY]
- shl bx,1
- mov ax,[cs:bx+Matcher]
- xchg ah,al
- and [Word si],00F0h
- or [Word si],ax
- pop ds
- ret
- endp SetNote
-
- proc DelNote
- push ds
- mov bx,[cs:CurPat]
- xor bh,bh
- mov bl,[cs:bx+sequences]
- shl bx,1
- mov ax,[cs:bx+PatternLoc]
- mov ds,ax
- mov si,[cs:CurChannel]
- shl si,2
- mov cx,[cs:CurX]
- shl cx,4
- add si,cx
- and [Word si],00F0h
- pop ds
- ret
- endp DelNote
-
- proc InsertCol
- push ds es
- std
- mov bx,[cs:CurPat]
- xor bh,bh
- mov bl,[cs:bx+sequences]
- shl bx,1
- mov ax,[cs:bx+PatternLoc]
- mov ds,ax
- mov es,ax
- mov cx,[cs:CurChannel]
- shl cx,2
- mov di,1024-16
- add di,cx
- mov si,1024-32
- add si,cx
- mov cx,63
- sub cx,[cs:CurX]
- @@CopyLoop: mov ax,[si]
- mov [di],ax
- mov ax,[si+2]
- mov [di+2],ax
- sub di,16
- sub si,16
- loop @@CopyLoop
- mov si,[cs:CurChannel]
- shl si,2
- mov cx,[cs:CurX]
- shl cx,4
- add si,cx
- mov [Word si],0
- mov [Word si+2],0
- cld
- pop es ds
- ret
- endp InsertCol
-
- proc DeleteCol
- push ds es
- cld
- mov bx,[cs:CurPat]
- xor bh,bh
- mov bl,[cs:bx+sequences]
- shl bx,1
- mov ax,[cs:bx+PatternLoc]
- mov ds,ax
- mov es,ax
- mov di,[cs:CurChannel]
- shl di,2
- mov cx,[cs:CurX]
- shl cx,4
- add di,cx
- mov si,di
- add si,16
- mov cx,63
- sub cx,[cs:CurX]
- @@CopyLoop: mov ax,[si]
- mov [di],ax
- mov ax,[si+2]
- mov [di+2],ax
- add di,16
- add si,16
- loop @@CopyLoop
- mov [Word di],0
- mov [Word di+2],0
- pop es ds
- ret
- endp DeleteCol
-
- proc UpcaseKey
- cmp al,'a'
- jb @@NoKey
- cmp al,'z'
- ja @@NoKey
- and al,01011111b
- @@NoKey: ret
- endp UpcaseKey
-
- proc GetAddr
- mov bx,[cs:CurPat]
- xor bh,bh
- mov bl,[cs:bx+sequences]
- shl bx,1
- mov ax,[cs:bx+PatternLoc]
- mov ds,ax
- mov si,[cs:CurChannel]
- shl si,2
- mov cx,[cs:CurX]
- shl cx,4
- add si,cx
- ret
- endp GetAddr
-
- proc CheckOtherKeys near
- push ds
- call UpcaseKey
- cmp [Word cs:CurYTop],0
- jnz @@Row2
- mov bx,0
- @@ScanKey1: cmp al,[cs:bx+InsDisp]
- jz @@FoundKey1
- inc bx
- cmp bx,32
- jnz @@ScanKey1
- jmp @@NoFind
- @@FoundKey1: mov dx,bx
- call GetAddr
- and [Word si],0FF0Fh
- and [Byte si+2],0Fh
- mov ax,dx
- shr al,4
- or [Byte si],al
- shl dl,4
- or [Byte si+2],dl
- jmp @@Find
- ;──────────────────────────────────────────────────
- @@Row2: cmp [Word cs:CurYTop],1
- jnz @@Row3
- call ScanKeys
- or bx,bx
- jz @@Clear
- dec bx
- @@JustNormal: mov dx,bx
- call GetAddr
- and [Byte si+2],0F0h
- or [Byte si+2],dl
- jmp @@Find
- @@Clear: call GetAddr
- and [Byte si+2],0F0h
- mov [Byte si+3],0
- jmp @@Find
- ;──────────────────────────────────────────────────
- @@Row3: cmp [Word cs:CurYTop],2
- jnz @@Row4
- call ScanKeys
- or bx,bx
- jz @@JustNormal2
- dec bx
- @@JustNormal2: mov dx,bx
- call GetAddr
- and [Byte si+3],0Fh
- shl dl,4
- or [Byte si+3],dl
- jmp @@Find
- ;──────────────────────────────────────────────────
- @@Row4: call ScanKeys
- or bx,bx
- jz @@JustNormal3
- dec bx
- @@JustNormal3: mov dx,bx
- call GetAddr
- and [Byte si+3],0F0h
- or [Byte si+3],dl
- jmp @@Find
- @@Find: cmp [Byte cs:CurX],63
- jz @@JustDraw
- inc [Byte cs:CurX]
- @@JustDraw: call DrawAllTop
- @@NoFind: pop ds
- ret
- ScanKeys: mov bx,0
- ScanKeyLoop: cmp al,[cs:bx+EfxDisp]
- jz FoundKey
- inc bx
- cmp bx,17
- jnz ScanKeyLoop
- pop ax
- jmp @@NoFind
- FoundKey: ret
- endp CheckOtherKeys
-
- proc PlayMusic
- mov ax,-1
- mov [Word cs:offset P+(offset (PM).mt_speed)],ax
- mov ax,-1
- mov [Word cs:offset P+(offset (PM).mt_counter)],ax
- mov ax,[cs:CurX]
- shl ax,4
- mov [Word cs:offset P+(offset (PM).mt_PatternPos)],ax
- mov ax,[cs:CurPat]
- mov [Word cs:offset P+(offset (PM).mt_SongPos)],ax
- mov cx,cs
- mov si,offset P
- mov bx,4
- call [dword ptr cs:Music]
- mov [cs:OldPos],0FFFFh
- ret
- endp PlayMusic
-
-
- CurYTop dw 0
- proc DoItTop
- TopPart: mov cx,0
- call PlotXYTop
- TopLooper: mov ah,0
- int 16h
- ;──────────────────────────────────────────────────────────
- @@Key_AltL: cmp ax,2600h
- jne @@Key_Tab
- call LoadFile
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Tab: cmp al,9
- jne @@Key_Up
- mov [Byte cs:OffTop],1
- call DrawAllBot
- mov [Byte cs:OffTop],0
- jmp BottomPart
- ;──────────────────────────────────────────────────────────
- @@Key_Up: cmp ah,72
- jne @@Key_Down
- cmp [Word cs:CurYTop],0
- je @@Key_Up_1
- dec [Word cs:CurYTop]
- mov cx,0
- call PlotXYTop
- @@Key_Up_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Down: cmp ah,80
- jne @@Key_Left
- cmp [Word cs:CurYTop],3
- je @@Key_Down_1
- inc [Word cs:CurYTop]
- mov cx,0
- call PlotXYTop
- @@Key_Down_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Left: cmp ah,75
- jne @@Key_Right
- cmp [Word cs:CurX],0
- je @@Key_Left_1
- dec [Word cs:CurX]
- mov cx,0
- call PlotXYTop
- @@Key_Left_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Right: cmp ah,77
- jne @@Key_Del
- cmp [Word cs:CurX],63
- je @@Key_Right_1
- inc [Word cs:CurX]
- mov cx,0
- call PlotXYTop
- @@Key_Right_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Del: cmp ah,83
- jnz @@Key_PgUp
- mov al,32
- jmp @@CheckOther
- ;──────────────────────────────────────────────────────────
- @@Key_PgUp: cmp ah,73
- jnz @@Key_PgDn
- cmp [Word cs:CurYTop],0
- je @@Key_PgUp_1
- mov [Word cs:CurYTop],0
- mov cx,0
- call PlotXYTop
- @@Key_PgUp_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_PgDn: cmp ah,81
- jnz @@Key_Home
- cmp [Word cs:CurYTop],3
- je @@Key_PgDn_1
- mov [Word cs:CurYTop],3
- mov cx,0
- call PlotXYTop
- @@Key_PgDn_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Home: cmp ah,71
- jnz @@Key_End
- cmp [Word cs:CurX],0
- je @@Key_Home_1
- mov [Word cs:CurX],0
- mov cx,0
- call PlotXYTop
- @@Key_Home_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_End: cmp ah,79
- jnz @@Key_CLeft
- cmp [Word cs:CurX],63
- je @@Key_End_1
- mov [Word cs:CurX],63
- mov cx,0
- call PlotXYTop
- @@Key_End_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_CLeft: cmp ah,115
- jnz @@Key_CRight
- call DeleteCol
- call DrawAllTop
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_CRight: cmp ah,116
- jnz @@Key_F9
- call InsertCol
- call DrawAllTop
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_F9: cmp ah,67
- jnz @@Key_F10
- cmp [Word cs:CurPat],0
- jz @@Key_F9_1
- dec [Word cs:CurPat]
- call DrawAllTop
- @@Key_F9_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_F10: cmp ah,68
- jnz @@Key_1
- xor ah,ah
- mov al,[cs:songlen]
- dec ax
- cmp [cs:CurPat],ax
- jz @@Key_F10_1
- inc [Word cs:CurPat]
- call DrawAllTop
- @@Key_F10_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_1: cmp ah,3Bh
- jnz @@Key_2
- mov [Word cs:CurChannel],0
- call DrawAllTop
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_2: cmp ah,3Ch
- jnz @@Key_3
- mov [Word cs:CurChannel],1
- call DrawAllTop
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_3: cmp ah,3Dh
- jnz @@Key_4
- mov [Word cs:CurChannel],2
- call DrawAllTop
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_4: cmp ah,3Eh
- jnz @@Key_Enter
- mov [Word cs:CurChannel],3
- call DrawAllTop
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Enter: cmp al,13
- jnz @@Key_Esc
- call PlayMusic
- call DoItTrack
- call DrawAllTop
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Esc: cmp ah,1
- jnz @@CheckOther
- ret
- ;──────────────────────────────────────────────────────────
- @@CheckOther: call CheckOtherKeys
- @@End: jmp TopLooper
- endp DoItTop
-
- OldPos dw 0FFFFh
- ; CX - 1 Erase and Draw
- ; CX - 0 Erase
- proc PlotTrack
- @@AAA: mov ax,[cs:offset MMus+(offset (SMus).EditOfs)]
- cmp [cs:OldPos],ax
- jne @@OKTrack
- ret
- @@OKTrack: mov [cs:OldPos],ax
- mov ax,[cs:offset MMus+(offset (SMus).EditOfs)]
- shr ax,4
- mov [cs:CurX],ax
- mov [cs:CurX],ax
- mov ax,[cs:offset MMus+(offset (SMus).EditPat)]
- mov [cs:CurPat],ax
- call DrawAll
- @@NoRedraw: mov ax,[cs:offset MMus+(offset (SMus).EditOfs)]
- shr ax,4
- add ax,ax
- mov bx,[cs:Screen]
- mov es,bx
- mov di,EfxY*160+EfxX*2+1
- add di,ax
- mov cx,41
- @@RowLoop: xor [Byte es:di],00010000b
- add di,160
- loop @@RowLoop
- @@Below: ret
- endp PlotTrack
-
- proc GetInfo
- mov bx,9
- mov cx,1
- mov si,seg MMus
- mov di,offset MMus
- call [dword cs:Music]
- ret
- endp GetInfo
-
- proc SetInfo
- mov bx,0Ah
- mov si,seg MMus
- mov di,offset MMus
- call [dword cs:Music]
- ret
- endp SetInfo
-
- proc DoItTrack
- call GetInfo
- mov cx,00000010b
- call SetInfo
- TrackLooper: call GetInfo
- call PlotTrack
- mov ah,1
- int 16h
- jnz @@KeyHit
- jmp TrackLooper
- @@KeyHit: mov ah,0
- int 16h
- ;──────────────────────────────────────────────────────────
- @@Key_AltL: cmp ax,2600h
- jne @@Key_Home
- call LoadFile
- call PlayMusic
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Home: cmp ah,71
- jnz @@Key_End
- mov [Word cs:offset MMus+(offset (SMus).mt_PatternPos)],0
- mov cx,00000010b
- call SetInfo
- call PlotTrack
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_End: cmp ah,79
- jnz @@Key_F9
- mov [Word cs:offset MMus+(offset (SMus).mt_PatternPos)],3F0h
- mov cx,00000010b
- call SetInfo
- call PlotTrack
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_F9: cmp ah,67
- jnz @@Key_F10
- cmp [Byte cs:MMus+(offset (SMus).mt_SongPos)],0
- je @@Key_F9_1
- dec [Byte cs:offset MMus+(offset (SMus).mt_SongPos)]
- @@Key_F9_1: mov [Word cs:offset MMus+(offset (SMus).mt_PatternPos)],0
- mov cx,00000010b
- call SetInfo
- call PlotTrack
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_F10: cmp ah,68
- jnz @@Key_1
- mov al,[cs:songlen]
- dec al
- cmp [cs:offset MMus+(offset (SMus).mt_SongPos)],al
- je @@Key_F10_1
- inc [Byte cs:offset MMus+(offset (SMus).mt_SongPos)]
- @@Key_F10_1: mov [Word cs:offset MMus+(offset (SMus).mt_PatternPos)],0
- mov cx,00000010b
- call SetInfo
- call PlotTrack
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_1: cmp ah,3Bh
- jnz @@Key_2
- mov [Word cs:CurChannel],0
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_2: cmp ah,3Ch
- jnz @@Key_3
- mov [Word cs:CurChannel],1
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_3: cmp ah,3Dh
- jnz @@Key_4
- mov [Word cs:CurChannel],2
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_4: cmp ah,3Eh
- jnz @@Key_Enter
- mov [Word cs:CurChannel],3
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Enter: cmp al,13
- jnz @@Key_Esc
- @@Key_Quit: mov cx,cs
- mov si,offset P
- mov bx,5
- call [dword ptr cs:Music]
- ret
- ;──────────────────────────────────────────────────────────
- @@Key_Esc: cmp ah,1
- jnz @@End
- jmp @@Key_Quit
- ;──────────────────────────────────────────────────────────
- @@End: jmp TrackLooper
- endp DoItTrack
-
-
-
- ;2 1111111 111
- ;0 9876543 21098 7654321
- ;E F#G#A#B C#D#E F#G#A#B
- ; 3 4 5 7 8 0 - =
- ;Q W E R T Y U I O P [ ]
- ;33333 3322222 2222
- ;65432 1098765 4321
- ;C#D#E F#G#A#B C#D#
- ; S D G H J L ;
- ;Z X C V B N M , .
- KeyName db ']=[-P0OI8U7YT5R4E3WQ;.L,MJNHBGVCDXSZ'
- ;ES 1 2 3 4 5 6 7 8 9 0 - = BSTB
- Keys db 0, 0, 0, 0,18,16,14, 0,11, 9, 0, 6, 4, 2, 0, 0
- ; Q W E R T Y U I O P [ ] EN CT
- db 20,19,17,15,13,12,10, 8, 7, 5, 3, 1, 0, 0
- ; A S D F G H J K L ; ' ` LS
- db 0,35,33, 0,30,28,26, 0,23,21, 0, 0, 0
- ; \ Z X C V B N M , . /
- db 0,36,34,32,31,29,27,25,24,22, 0
- db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-
- proc CheckKeys
- xor bh,bh
- mov bl,ah
- mov al,[cs:bx+Keys]
- or al,al
- jz @@Exit
- xor ah,ah
- dec ax
- mov [cs:CurY],ax
- call SetNote
- call DrawAllBot
- @@Exit: ret
- endp CheckKeys
-
- CurPat dw 0
- CurChannel dw 0
- CurX dw 0
- CurY dw 0
- DefaultIns db 0
- proc DoIt
- call DrawAllBot
- BottomPart: mov cx,0
- call PlotXYBot
- BottomLooper: mov ah,0
- int 16h
- ;──────────────────────────────────────────────────────────
- @@Key_AltL: cmp ax,2600h
- jne @@Key_Tab
- call LoadFile
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Tab: cmp al,9
- jne @@Key_Up
- mov [Byte cs:OffBot],1
- call DrawAllTop
- mov [Byte cs:OffBot],0
- jmp TopPart
- ;──────────────────────────────────────────────────────────
- @@Key_Up: cmp ah,72
- jne @@Key_Down
- cmp [Word cs:CurY],0
- je @@Key_Up_1
- dec [Word cs:CurY]
- mov cx,0
- call PlotXYBot
- @@Key_Up_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Down: cmp ah,80
- jne @@Key_Left
- cmp [Word cs:CurY],35
- je @@Key_Down_1
- inc [Word cs:CurY]
- mov cx,0
- call PlotXYBot
- @@Key_Down_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Left: cmp ah,75
- jne @@Key_Right
- cmp [Word cs:CurX],0
- je @@Key_Left_1
- dec [Word cs:CurX]
- mov cx,0
- call PlotXYBot
- @@Key_Left_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Right: cmp ah,77
- jne @@Key_Space
- cmp [Word cs:CurX],63
- je @@Key_Right_1
- inc [Word cs:CurX]
- mov cx,0
- call PlotXYBot
- @@Key_Right_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Space: cmp al,' '
- jnz @@Key_Del
- call SetNote
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Del: cmp ah,83
- jnz @@Key_PgUp
- call DelNote
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_PgUp: cmp ah,73
- jnz @@Key_PgDn
- cmp [Word cs:CurY],0
- je @@Key_PgUp_1
- mov [Word cs:CurY],0
- mov cx,0
- call PlotXYBot
- @@Key_PgUp_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_PgDn: cmp ah,81
- jnz @@Key_Home
- cmp [Word cs:CurY],35
- je @@Key_PgDn_1
- mov [Word cs:CurY],35
- mov cx,0
- call PlotXYBot
- @@Key_PgDn_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Home: cmp ah,71
- jnz @@Key_End
- cmp [Word cs:CurX],0
- je @@Key_Home_1
- mov [Word cs:CurX],0
- mov cx,0
- call PlotXYBot
- @@Key_Home_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_End: cmp ah,79
- jnz @@Key_CLeft
- cmp [Word cs:CurX],63
- je @@Key_End_1
- mov [Word cs:CurX],63
- mov cx,0
- call PlotXYBot
- @@Key_End_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_CLeft: cmp ah,115
- jnz @@Key_CRight
- call DeleteCol
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_CRight: cmp ah,116
- jnz @@Key_F9
- call InsertCol
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_F9: cmp ah,67
- jnz @@Key_F10
- cmp [Word cs:CurPat],0
- jz @@Key_F9_1
- dec [Word cs:CurPat]
- call DrawAllBot
- @@Key_F9_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_F10: cmp ah,68
- jnz @@Key_1
- xor ah,ah
- mov al,[cs:songlen]
- dec ax
- cmp [cs:CurPat],ax
- jz @@Key_F10_1
- inc [Word cs:CurPat]
- call DrawAllBot
- @@Key_F10_1: jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_1: cmp ah,3Bh
- jnz @@Key_2
- mov [Word cs:CurChannel],0
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_2: cmp ah,3Ch
- jnz @@Key_3
- mov [Word cs:CurChannel],1
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_3: cmp ah,3Dh
- jnz @@Key_4
- mov [Word cs:CurChannel],2
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_4: cmp ah,3Eh
- jnz @@Key_Enter
- mov [Word cs:CurChannel],3
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Enter: cmp al,13
- jnz @@Key_Esc
- call PlayMusic
- call DoItTrack
- call DrawAllBot
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@Key_Esc: cmp ah,1
- jnz @@CheckKeys
- ret
- ;──────────────────────────────────────────────────────────
- @@CheckKeys: call CheckKeys
- @@End: jmp BottomLooper
- endp DoIt
-
-
- proc LoadFile
- call FileSelect
- jb @@EndError
- mov cx,cs
- mov si,offset P
- mov bx,5
- call [dword ptr cs:Music]
- push es dx
- call MUS_KillModule
- pop dx cx
- call MUS_LoadModule
- call GetInfo
- mov [Byte cs:offset MMus+(offset (SMus).mt_speed)],6
- mov [Byte cs:offset MMus+(offset (SMus).mt_counter)],5
- mov cx,0
- call SetInfo
- mov [Word cs:CurPat],0
- mov [Word cs:CurX],0
- mov [Word cs:CurY],0
- mov [Word cs:CurYTop],0
- mov [Word cs:CurChannel],0
- @@End: clc
- ret
- @@EndError: stc
- ret
- endp LoadFile
-
- proc FileSelect
- mov di,55
- mov bx,0
- mov ah,1Fh
- mov al,1
- mov cx,24
- mov dx,50
- call DrawBox
- call DisplayAll
- mov ax,MyData
- mov ds,ax
- @@TopLoop: mov ah,0
- int 16h
- ;──────────────────────────────────────────────────────────
- @@Key_AltL: cmp ax,2600h
- jne @@Key_Up
- call FileSelect
-
- ;──────────────────────────────────────────────────────────
- @@Key_Up: cmp ah,72
- jne @@Key_Down
- cmp [Word CurFile],0
- jz @@Beep
- dec [Word CurFile]
- mov bx,[CurFile]
- sub bx,[TopFile]
- jns @@PrintIt
- dec [Word TopFile]
- jmp @@PrintIt
- ;──────────────────────────────────────────────────────────
- @@Key_Down: cmp ah,80
- jne @@Key_Home
- mov bx,[NumFiles]
- dec bx
- cmp [CurFile],bx
- jz @@Beep
- inc [Word CurFile]
- mov bx,[CurFile]
- sub bx,[TopFile]
- cmp bx,47
- jl @@PrintIt
- inc [Word TopFile]
- jmp @@PrintIt
- ;──────────────────────────────────────────────────────────
- @@Key_Home: cmp ah,71
- jne @@Key_End
- cmp [Word CurFile],0
- jnz @@SetTop
- cmp [Word TopFile],0
- jz @@Beep
- @@SetTop: mov [Word CurFile],0
- mov [Word TopFile],0
- jmp @@PrintIt
- ;──────────────────────────────────────────────────────────
- @@Key_End: cmp ah,79
- jne @@Key_PgUp
- mov bx,[NumFiles]
- dec bx
- cmp [CurFile],bx
- jnz @@SetBottom
- sub bx,[TopFile]
- cmp bx,47
- jl @@Beep
- @@SetBottom: mov bx,[NumFiles]
- dec bx
- mov [CurFile],bx
- sub bx,46
- js @@FixBottom
- mov [TopFile],bx
- jmp @@PrintIt
- @@FixBottom: mov [Word TopFile],0
- jmp @@PrintIt
- ;──────────────────────────────────────────────────────────
- @@Key_PgUp: cmp ah,73
- jne @@Key_PgDn
- cmp [Word CurFile],0
- jz @@Beep
- sub [Word CurFile],47
- js @@FixPgUp
- sub [Word TopFile],47
- js @@FixPgUp2
- jmp @@PrintIt
- @@FixPgUp: mov [Word CurFile],0
- @@FixPgUp2: mov [Word TopFile],0
- jmp @@PrintIt
- ;──────────────────────────────────────────────────────────
- @@Key_PgDn: cmp ah,81
- jne @@Key_Enter
- mov dx,[NumFiles]
- dec dx
- cmp [CurFile],dx
- jz @@Beep
- add [Word CurFile],47
- cmp [CurFile],dx
- jg @@FixPgDn
- add [Word TopFile],47
- cmp [Word TopFile],dx
- jg @@FixPgDn2
- jmp @@PrintIt
- @@FixPgDn: mov [Word CurFile],dx
- @@FixPgDn2: sub dx,46
- js @@FixPgDn3
- mov [TopFile],dx
- jmp @@PrintIt
- @@FixPgDn3: mov [Word TopFile],0
- jmp @@PrintIt
- ;──────────────────────────────────────────────────────────
- @@Key_Enter: cmp al,13
- jnz @@Key_Esc
- call SelectFile
- jnb @@End
- clc
- ret
- ;──────────────────────────────────────────────────────────
- @@Key_Esc: cmp ah,1
- jnz @@End
- stc
- ret
- ;──────────────────────────────────────────────────────────
- @@Beep: clc
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@PrintIt: call DisplayAll
- clc
- jmp @@End
- ;──────────────────────────────────────────────────────────
- @@End: jmp @@TopLoop
- endp FileSelect
-
- proc SelectFile
- push ds
- mov ax,size FStruc
- mul [CurFile]
- lds di,[FileSeg]
- add di,ax
- mov dx,di
- cmp [di+FStruc.TypeOfFile],F_Directory
- jnz @@MustBeAModule
- mov AH,3Bh
- int 21h ;2-Change_Directory
- call ReadFiles
- call DisplayAll
- pop ds
- clc
- ret
- @@MustBeAModule:
- mov ax,ds
- mov es,ax
- pop ds
- stc
- ret
- endp SelectFile
-
- ; Mode = 0 --> Outline
- ; 1 --> Fill
- ; cx - SizeX
- ; dx - SizeY
- ; ah - Color
- ; al - Mode
- ; di - X
- ; bx - Y
- mov di,55
- mov bx,0
- mov ah,1Fh
- mov al,1
- mov cx,24
- mov dx,50
- proc DrawBox
- push es ax dx
- mov ax,[cs:Screen]
- mov es,ax
- add di,di
- mov ax,160
- mul bx
- add di,ax
-
- mov bx,160
- sub bx,cx
- sub bx,cx
-
- cld
- pop dx ax
- cmp al,1
- jne @@OutlineTop
- mov al,' '
- @@FillLoop: push cx
- rep stosw
- add di,bx
- pop cx
- dec dx
- jnz @@FillLoop
- jmp @@Done
-
- @@OutlineTop: push cx
- rep stosb
- add di,bx
- pop cx
- @@OutlineSides: stosb
- add di,cx
- sub di,2
- stosb
- add di,bx
- dec dx
- cmp dx,2
- jne @@OutlineSides
-
- @@OutlineBottom:pop cx
- rep stosb
-
- @@Done: pop es
- ret
- endp DrawBox
-
-
- proc Main
- Start: mov [cs:PspAddress],es
- mov ax,es
- mov bx,zzzzzseg
- sub bx,ax
- add bx,2
- mov [cs:SizeOfProg],bx
- mov ah, 4ah
- int 21h
-
- call HowMuchMemory
- call DetermineDisplay
- mov ax,MyData
- mov ds,ax
- mov ah,47h
- mov dl,0
- mov si,offset HomeDirectory
- int 21h
- mov ah,19h
- int 21h
- mov [OldDrive],al
-
- call SetEnv
- @@LoadDriver: mov si,offset SoundFile
- call PutName
- mov dx,offset GDirectory
- mov cx,seg GDirectory
- call LoadSoundDriver
- jnb @@DriverLoaded
- mov dx,offset NoDriverFound
- call Error
- @@DriverLoaded: mov ax,[cs:GUSIRQ]
- mov bx,0
- mov cx,[cs:GUSMIDI]
- mov dx,[cs:GUSPort]
- mov si,[cs:DMAIn]
- mov di,[cs:DMAOut]
- call [dword ptr cs:Music]
- jnb @@FoundCard
- mov ah,9
- mov dx,offset NoGUS
- int 21h
- jmp @@Quit
- @@FoundCard: mov [cs:GUSIRQ],si
- mov [cs:GUSPort],di
-
- call SetMode
- mov ax,1112h
- mov bl,0
- int 10h
-
- mov [Word cs:offset P+(offset (PM).Header)],offset Header
- mov [Word cs:offset P+(offset (PM).Header)+2],cs
- mov [Word cs:offset P+(offset (PM).PatternLoc)],offset PatternLoc
- mov [Word cs:offset P+(offset (PM).PatternLoc)+2],cs
- mov [Word cs:offset P+(offset (PM).InsLoc)],offset InsLoc
- mov [Word cs:offset P+(offset (PM).InsLoc)+2],cs
-
- mov ax,MyData
- mov ds,ax
- xor dx,dx
- mov ax,size FStruc
- mov bx,[MaxFiles]
- mul bx
- mov bx,ax
- shr bx,4
- add bx,1
- mov ah,48h
- int 21h
- mov [Word FileSeg+2],ax
- mov [Word FileSeg],0
- call ReadFiles
-
- mov ah,48h
- mov bx,8000/16+1
- int 21h
- mov [cs:ScreenFix],ax
- mov ax,MyData
- mov ds,ax
- mov dx,offset ScreenFilename
- mov ax,3D00h
- int 21h
- mov bx,ax
- mov ax,[cs:ScreenFix]
- mov ds,ax
- mov dx,0
- mov cx,8000
- mov ax,3F00h
- int 21h
- mov ax,3E00h
- int 21h
- call DrawNotes
- call LoadFile
- jb @@Quit
- call DoIt
- call MUS_KillModule
-
- @@Quit: call Terminate
- endp Main
-
- ends MyCode
-
- segment BlankMusicSeg
- stc
- retf
- ends BlankMusicSeg
-
- segment MyData
-
- ScreenFilename db 'SCREEN.BIN',0
- Notes db 'B-3A#3A-3G#3G-3F#3F-3E-3D#3D-3C#3C-3'
- db 'B-2A#2A-2G#2G-2F#2F-2E-2D#2D-2C#2C-2'
- db 'B-1A#1A-1G#1G-1F#1F-1E-1D#1D-1C#1C-1'
-
- NoGUS db 'Could not detect a Gravis Ultrasound card.',13,10,'$'
- NoFileName db 'Usage: GUSMOD filename<.mod>',13,10,'$'
- NoFileFound db 'File not found.',13,10,'$'
- NoDriverFound db 'Sound driver not found.',13,10,'$'
- NoEnvFound db 'The environment variable GUSMOD was not found. Please add it to your',13,10
- db 'AUTOEXEC.BAT file. Please read GUSMOD.DOC for more information.',13,10,'$'
- IllegalEnv db 'Illegal environment variable.',13,10,'$'
-
- GDirectory db 120 dup (0)
- GEnv db 6,"GUSMOD"
- PutFilename dw 0
-
- db '\'
- HomeDirectory db 80 dup (0)
- OldDrive db 0
-
- NewDTA DTA <>
-
- MaxFiles dw 500
- NumFiles dw 0
- FileSeg dd 0
-
- WildDir db "*.*",0
- WildMod db "*.MOD",0
- DriveLetter db "-:\"
- CurPath db 65 dup (0)
-
- DriveStr db "-:",0
- DriveList db 26 dup (0)
-
- MKLine db 9 dup (0)
- Ext db 4 dup (0)
- ExtBlank db "~ ",0
- DesBlank db "~ ",0
-
- FileDigits db "0000",0
-
- CurFile dw 0
- TopFile dw 0
-
- ends MyData
-
- segment zzzzzseg
- db 16 dup (?)
- ends zzzzzseg
-
- end Start
-
-
-