home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
551-575
/
apd560
/
amoner5
/
med_player.amos
/
med_player.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1993-11-29
|
5KB
|
226 lines
'****************************************************************************'
'* AMOS MED Module Player *
'* Copyright (c) 1992 by Michael David Cox *
'* March 22, 1992 11:47am CST *
'****************************************************************************
Break Off
Screen Open 0,640,400,2,Hires
Curs Off : Flash Off
Led On
_SMALL_COPYRIGHT[225]
Fade 1 : Wait 16
Auto View Off : Unpack 6 To 0 : Screen Clone 1 : Screen To Front 0
For C=0 To 31
Colour C,0
Next
View : Auto View On
Curs Off : Flash Off
Fade 3 To 1 : Screen Close 1
Wait 250 : ERASBANK
'***************************************************
MED_PLAYER_OFFSETS:
FRE_PLAYER=-$24
GT_PLAYER=-$1E
PLY_MODULE=-$2A
CONT_MODULE=-$30
ST0P_PLAYER=-$36
DM_OFF_PLAYER=-$3C
SET_TEMPO=-$42
L0AD_MODULE=-$48
UNL0AD_MODULE=-$4E
GT_CURRENT_MODULE=-$54
RESET_MIDI=-$5A
'****************************************************
EXEC_LIB_OFFSETS:
OPEN_LIBRARY=-$228
CL0SE_LIBRARY=-$19E
'****************************************************
OPENLIBRARY
BEGINNING:
M0DULE$=Fsel$("*.MED","","Load a 4-channel","MED Module")
If M0DULE$=""
CL0SELIBRARY
For HEYBER=9 To 15
Erase HEYBER
Next HEYBER
Run "autoexec.amos"
End If
If Not Exist(M0DULE$)
Locate 0,24
Centre "Song does not exist. Press any key to retry."
Wait Key
Locate 0,24 : Cline
Goto BEGINNING
End If
M0DULE$=M0DULE$+Chr$(0)
Open Random 1,M0DULE$
M0DULE_LENGTH=Lof(1)
Close 1
If Chip Free<M0DULE_LENGTH
Cls
Centre "Not enough CHIP RAM. Press any key to exit."
Wait Key
CL0SELIBRARY
For HEYBER=9 To 15
Erase HEYBER
Next HEYBER
Run "autoexec.amos"
End If
M0DULE_POINTER=Varptr(M0DULE$)
'
' First, we get the MEDPlayer routine
_GET_PLAYER[MED_LIB_POINTER]
'
' Second, we load the module. We use the MED routine as the module has to
' be relocated in order to work properly.
_LOAD_MODULE[MED_LIB_POINTER,M0DULE_POINTER]
'
'_LOAD_MODULE returns the address of where the module is loaded.
'
M0DULE_ADDRESS=Param
'
'Now, we play the module!
'
_PLAY_MODULE[MED_LIB_POINTER,M0DULE_ADDRESS]
'
' When the user presses a key to stop the song, we fade (dim_off) out.
'
_DIM_OFF_PLAYER[MED_LIB_POINTER]
'
'We now turn the Player off completely.
'
_STOP_PLAYER[MED_LIB_POINTER]
'
' Clear the module out of memory.
'
_UNLOAD_MODULE[MED_LIB_POINTER,M0DULE_ADDRESS]
'
' Clear the player from memory
'
_FREE_PLAYER[MED_LIB_POINTER]
'
' That's all there is to it....Now, go back to the module selector...
'
Goto BEGINNING
'**************************************************************
'* Procedures *
'**************************************************************
Procedure CL0SELIBRARY
Shared MED_LIB_POINTER,CL0SE_LIBRARY
Areg(1)=MED_LIB_POINTER
R=Execall(CL0SE_LIBRARY)
Fade 3 : Wait 45
ERASBANK
End Proc
Procedure ERASBANK
Erase 6 : Erase 1
End Proc
Procedure OPENLIBRARY
Shared OPEN_LIBRARY,MED_LIB_POINTER
LIB_NAME$="medplayer.library"+Chr$(0)
Areg(1)=Varptr(LIB_NAME$)
Dreg(0)=0
R=Execall(OPEN_LIBRARY)
If R=0
Cls
Centre "Library opening failed. Press any key to exit"
Wait Key : ERASBANK
For HEYBER=9 To 15
Erase HEYBER
Next HEYBER
Run "autoexec.amos"
Else
MED_LIB_POINTER=R
End If
End Proc
Procedure _SMALL_COPYRIGHT[YDISPLAY]
'
Auto View Off
'
Screen Open 7,320,24,16,0 : Curs Off : Flash Off : Cls 0
Screen Display 7,,-100,,
Paste Bob 260,3,1
Paper 0 : Pen 7 : Print At(1,1);"This program was written using"
Get Sprite Palette
View : Wait Vbl
'
For Y=1 To Screen Height/2
Screen Display 7,,YDISPLAY+Screen Height/2-Y,,Y*2
Screen Offset 7,,Screen Height/2-Y
View : Wait Vbl
Next
'
Wait 100
'
For Y=Screen Height/2 To 0 Step -1
Screen Display 7,,YDISPLAY+Screen Height/2-Y,,Y*2
Screen Offset 7,,Screen Height/2-Y
View : Wait Vbl
Next
'
Screen Close 7
Auto View On
'
End Proc
Procedure _GET_PLAYER[LIB_POINTER]
Dreg(0)=0
Areg(2)=LIB_POINTER
Call 9
R=Dreg(0)
If R<>0
Cls
Centre "GetPlayer Failed. Press any key to exit"
Wait Key
CL0SELIBRARY
For HEYBER=9 To 15
Erase HEYBER
Next HEYBER
Run "autoexec.amos"
End If
End Proc
Procedure _LOAD_MODULE[LIB_POINTER,M0D_POINTER]
Areg(0)=M0D_POINTER
Areg(1)=M0D_POINTER
Areg(2)=LIB_POINTER
Call 13
M0D_ADDRESS=Dreg(0)
If M0D_ADDRESS=0
Cls
Centre "Failed to load module. Press any key to try again."
Wait Key
_FREE_PLAYER[MED_LIB_POINTER]
End If
End Proc[M0D_ADDRESS]
Procedure _DIM_OFF_PLAYER[LIB_POINTER]
Areg(2)=LIB_POINTER
Dreg(1)=60
Dreg(0)=60
Call 15
Timer=0
Repeat
Until Timer>582
End Proc
Procedure _PLAY_MODULE[LIB_POINTER,M0D_ADDRESS]
Areg(2)=LIB_POINTER
Areg(1)=M0D_ADDRESS
Areg(0)=M0D_ADDRESS
Call 10
Locate 0,24
Centre "Press key to stop song"
Wait Key
End Proc
Procedure _STOP_PLAYER[LIB_POINTER]
Areg(2)=LIB_POINTER
Call 11
End Proc
Procedure _UNLOAD_MODULE[LIB_POINTER,M0D_ADDRESS]
Areg(0)=M0D_ADDRESS
Areg(1)=M0D_ADDRESS
Areg(2)=LIB_POINTER
Call 14
End Proc
Procedure _FREE_PLAYER[LIB_POINTER]
Areg(2)=LIB_POINTER
Call 12
Led On : Cline
End Proc