Hello everybody ! Today, children, we are going to study to use the SID Sound Designer player in your programs. If by misfortune you don't have sources and programs going with the article, please unravel you to find them and use the old versions of the player that were distributed with Sid Sound Designer especially, they are bugged (they turn without problems on ST, but that begins to mess up while going up in the range). The routine that I propose you is the one that should be on the site of DHS, it has was fixed a first time by Defjam in order to make turn it on (nearly) all possible machines (ST /.. /TT/Falcon/FalcCT2) and I brought a last modification there finally so that the internal IDE of certain Falcon doesn't reset themselves once one has stop the player (in short, one can change what doesn't precede by some hard IDE maybe reset themselves on a Falcon, I have a few of them to discuss with Evl, one doesn't know too much where that comes : that makes it on my Falcon, not on his). Good, stop craptalking, here we go...
I - The different functions of the player.
I first go to describe you the different functions that offer the player. The accustomed of Mad-max crispses are not going to be disorientated because it is the same system that is used.
First of all, one recovers the init (offset 0). It is necessary to call him inevitably before making replay the least chip. She/it takes care to initialize some variables interns to the player and makes also some safeguards. This function requires 2 arguments : the address of data of the module chip, and the address of instrument data used by the chip; what corresponds to the files SORTING and TVS respectively. One places the address of the data SORTING in a1 and the address of data TVS in a0. One calls him therefore like this :
lea tvs,a0 lea tri,a1 jsr playerThen, it is necessary to stop the player. It takes place with the help of the function which is to the offset 8 of the player, therefore we call him like this :
jsr player+8This function doesn't require any arguments.
To replay the soundchip, one call to a regular time interval the function being to the offset 4, therefore like this :
jsr player+4To call him to a regular time interval, there are 2 solutions on the whole : the VBL-queue (or VBL simply) or to place the routine in B timer (the printout of example uses the B timer). Attention, because the player uses all the other available timerses, only the B remains active (and cannot serve to make the low overscan because of some problems of synchro).
Well, if you are hurried, you can spend directly to the printout of example, the described functions should be enough for you. But, he/it exists even some functions serving to control a few more again the player.
First of all, a very interesting function that permits to synchronize the player on (nearly) doesn't import what frequency (50 Hz, 60 Hz, 71 Hz for example if it told you something). It is very useful if you use the player in VBL interruption, you can use the frequency of cooling that you want therefore, besides this system permits the change of frequency to the flight, that is to say when the player is already replaying a chip. But I advise you against using the player in VBL-tail (or VBL simply, hello the synchro), but rather in B timer as in the printout of example, it will have at least the merit to turn on all machines (except the Milan that doesn't possess a YM :(. Whatever he/it is some, I indicate how you can call this function :
moveq #50,d0 * 50 Hz, on met 60 pour 60 Hz, ... jsr player+28 * Set_Screen_FreqOne can also cut the whistle to the player when one wants while using function set_music_off, as this :
jsr player+16 * Set_music_offOne can of course to make replay like that him the zik :
jsr player+12 * Set_music_onLast thing again, the player uses timers A, C and D what only lets the B of free (and again, if one doesn't use him to call the routine of replay), therefore for screens making the overscan (low and more), it is worth to avoid to use this player better.
II - The assembly listing
I thank Evl / DHS of me to have permitted to use his/her/its source in my article. I have bring any modifications there.
; anders eriksson (evil) / dhs ; december 5, 1998 ; email@example.com / dhs.atari.org ; easy to use sidsound designer replay shell. ; tested on st, ste, mste, pak030, tt030, ; falcon030, centurbo2, ; sidsound desinger original routines by ; synergy and animal mine. patched and updated ; by defjam/checkpoint. ; Patch Falcon by FroST (cf. explanations) ; Timers A, C and D are used for the emulation of the SID. ; On the whole, you can use this emulation on the three ; voices. ; The B timer is used to call the player 50 times by ; second, therefore to a frequency of 50 Hz. section text begin: clr.l -(sp) ; into super move.w #32,-(sp) trap #1 addq.l #6,sp move.l d0,save_stack ;save old stack lea.l voice,a0 ;address to sounddata (TRI) lea.l song,a1 ;address to songdata (TVS) jsr player+0 ;init player move.w sr,d0 ;save sr move.w #$2700,sr ;all ints off lea.l save_mfp,a0 ;save needed mfp regs move.b $fffffa07,(a0)+ move.b $fffffa13,(a0)+ move.b $fffffa1b,(a0)+ move.b $fffffa21,(a0)+ bset #0,$fffffa07 ;timer-b inits bset #0,$fffffa13 move.b #246,$fffffa21 ;2457600/200/246 approx 50 Hz or.b #%111,$fffffa1b ;%111 = divide by 200 bclr #3,$fffffa1b ;tos 2.05 fix move.l $120,save_timer_b ;save old timer_b move.l #timer_b,$120 ;install new timer_b move.w d0,sr ;restore sr .loop: cmpi.b #$39,$fffffc02.w ;wait for space bne.s .loop exit: move.w sr,d0 ;save sr move.w #$2700,sr ;all ints off lea.l save_mfp,a0 ;restore mfp regs move.b (a0)+,$fffffa07 move.b (a0)+,$fffffa13 move.b (a0)+,$fffffa1b move.b (a0)+,$fffffa21 move.l save_timer_b,$120.w ;restore timer_b move.w d0,sr ;restore sr jsr player+8 ;stop player move.l save_stack,-(sp) ;exit super move.w #32,-(sp) trap #1 addq.l #6,sp clr.w -(sp) ;pterm() trap #1 timer_b: jsr player+4 ;call player bclr #0,$fffffa0f ;clear timer_b busyflag rte section data even player: incbin 'amsid.dat' ;replay routines even song: incbin 'song.tri' ;songdata even voice: incbin 'song.tvs' ;sounddata even section bss even save_stack: ds.l 1 ;save stack save_mfp: ds.l 1 ;save mfp (timer_b) save_timer_b: ds.l 1 ;save timer_b
III - Note to amateurs of GFA
I am distressed not to have spoken of the manner to use the player with this fabulous language, I had promised The Beast to make it, but I don't simply have the time. But to intend on me to come back over as soon as possible. At most, you can still to send me an email to recall it to me like that I would send you directly the player for the GFA and the printout of example who goes with.
IV - This is the end, beautiful friend, the end.
Normally you will find on the disk the listing of Evl, as well as the player modified by my cares.
OK, you should be able to unravel you with this player, of as much more that the sound is excellent quality and musicians using Sid Sound Designer make marvels, to give you account of it, in general be going to listen to chips of 505 and Dma SC in the last Undercover mag (14).
Contact : firstname.lastname@example.org (nooo ! no tomatoes !).
You can let me a message on RTEL in FroSTmailbox too.
I am not able to impeach myself to add that :
Greetings goes to : ST Survivor, Thyrex, Exyl, Moondog, MC Laser, 505, Evl, Razaac, The Beast, EdO, ST Ghost, Hello, DMA SC, QueST, CKJ, Creature XL and all those that I forget...