home *** CD-ROM | disk | FTP | other *** search
-
- Tandy Gryphon Audio drivers 19.10.92
-
- (c) 1992 Tony Williams / Sound Images
-
-
- LEMMINGS
- --------
-
-
- David ,
- I have tried to make the drivers for the Gryphon version identical to
- the ordinary PC ones , but there are some major differences - CD audio for
- instance . This means that I have allowed for any audio CD to be inserted ,
- and tracks played from it . The problem with this is that the CD-rom device
- driver ( I wish I could do it at low level , but I can't ) takes a pretty
- hefty amount of processor time to read the Table of Contents from the disk .
- This is where the start of each track is stored , and I read them into a
- table and calculate the lengths . It is obvuiously nice for the punter to
- be able to put his favourite CD in to accompany the game , but there are some
- drawbacks - The Lemmings tunes all loop after about one or two minutes , so
- when the track ends , I have to start it again . This will also happen on any
- other audio CD . Also , there are two versions of the Lemmings title tune on
- the disc , and I only use one of them , making it necessary to use a lookup
- table ( especially as the title tune wasn't used on the Adlib+Tandy versions .)
-
- I decided to add a function whereby you could pass the driver a lookup table if
- necessary , so Motorhead or The Carpenters could be played if the punter desired .
- The will mean a small menu program , asking the player which track should
- accompany each level , and whether it should loop .
-
-
- before calling the functions ( blindingly obvious ) , load the driver -
- gryphsnd.dat at offset 0 within a segment . The entry point is at 0 and
- Russell preferred to use a software interrupt , so all routines end with an
- IRET instruction . The sample file - lemsamp.bin also needs to be loaded at
- offset zero within a segment , and that segment address is passed to the driver .
-
-
- There now follows a list of the driver functions . You will notice ( I hope )
- that the first six functions correspond to those in the Adlib/Tandy drivers
- and the rest are added just for the CD audio .
-
-
- WARNINGS :-
-
- Do not try and start a sound effect before 1) initialising the driver or
- 2) loading the sample file , which is a separate file . The sample file needs
- to be loaded at offset 0 within any segment , the address of which is passed
- to the driver on initialisation .
-
-
- In all cases , expect ax to be corrupt , except where values are returned .
-
- Function 0 - Refresh
- --------------------
- entry : ah = 0
-
- exit : nothing much of importance
-
-
- On most drivers , this function needs to be called by a vbl or timer , but due
- to the CD audio and samples , an irregular call at any reasonable rate should
- suffice ( 50-60 hz maybe ) The refresh handles looping of tunes and a perculiar
- twist to the sample playback which is needed where a sample crosses a 64k page .
- Most processing is done within this routine , and in the case of the Gryphon ,
- it can take a hell of a long time , because it has to be done via the device
- drivers .
-
-
- Function 1 - Initialise
- -----------------------
-
- entry : ah = 1
- dx = segment address at which samples file is loaded(offset 0)
-
- exit : al = 1 if CD audio present , else 0
- ah = 1 if sample playback available , else 0
-
-
- Function 2 - Kill all sound
- ---------------------------
-
- entry : ah = 2
-
- exit : none
-
-
- Function 3 - Start a tune
- -------------------------
-
- entry : ah = 3
- al = tune number 1-22 ( corresponding to keys a-v on demo )
-
- exit : none
-
- This function only 'cues up' a tune to start , the processing is done during
- the next refresh .
-
-
- Function 4 - Start an effect
- ----------------------------
-
- entry : ah = 4
- al = effect number 1-21 ( corresponding to keys A-U on demo )
-
- exit : none
-
- This function only 'cues up' an effect to start , the processing is done during
- the next refresh .
-
- Function 5 - Get tune
- ---------------------
-
- entry : ah = 5
-
- exit : al = number of current tune
-
-
- Function 6 - Get effect
- -----------------------
-
- entry : ah = 6
-
- exit : al = number of current effect
-
-
- Function 7 - Set track table
- ----------------------------
-
- entry : ah = 7
- ds:si = segment:offset of track table
-
- format of track table is simple :
- db CD track number for each tune number
- as used by the driver ( e.g. tune 1 - awesome )
- bit 7 is set if tune needs to be looped
-
- N.B. entry zero is NEVER USED
-
-
- exit : not a lot
-
-
- Function 8 - Play next track
- ----------------------------
-
- entry : ah = 8
-
- exit : nothing
-
-
-
- This function has been added after today's conversation ( Mon 19th ) and all
- track play lengths have been extended , so basically they will play until the
- end or until you stop them . The device driver function which is supposed to
- read the current track number and CD play position randomly gives back crap
- and if the track number is greater than the number of tracks , I go back to
- the beginning . As usual this isn't desirable , but it's getting late and I've
- arrange for the machine to be picked up in the morning ............
-
-
-
-