____ ___________________\ |____ _____________________________________________ _\__ ________ | | /___\ ____ ___\___/ ___/____ / / | | | | |_ / _| | | \ / | |____ | / | | | |: | | |: | |: \ |: | |: | | |: |: / |: /____|: |___\ /___|___|___/_______/___| |____ |___|___|___/___/_______\_______/___|gwEm ========================|___\ltk/___|======================================== maxYMiser v1.00 (c) Gareth Morris 2005 User Manual maxYMiser requires an Atari (Mega)ST(e), Falcon or TT with 1Mb+ of ST-RAM. I also recommend competent emulations such as STEem. Monochrome screens NOT supported, however TT-RAM will be used if present. ________________________________________________________________________________ (0) Contents ============ 0.......Contents 1.......E-Mail 2.......Credits 3.......Licence 4.......Introduction 5.......Basic Principals 5.1 Patterns and songs 5.2 Sequences and instruments 5.3 Ways to make sound 5.4 The 'N' key 6.......Tracker Display 6.1 Note 6.2 Instrument 6.3 Volume 6.4 Effects 1 & 2 7.......Instrument Editor 7.1 Instrument Selector 7.2 Instrument Parameters 7.3 Sequence Editor 7.4 DigiDrums 8.......Sub-Menus 8.1 Escape 8.2 About 8.3 Help 8.4 Normal 8.5 Configuration 8.6 Zap/Pack 8.7 Transpose 8.8 Advanced edit 8.9 Play song 8.10 Play pattern 8.11 Stop 8.12 Record song 8.13 Record pattern 8.14 Disk operations 8.15 Sequence editor extension 9.......Tracker Effects 10......Replaying maxYMiser music 10.1 Technical 11......Finally ________________________________________________________________________________ (1) E-Mail ========== For all information, help, or questions: gwem@preromanbritain.com ________________________________________________________________________________ (2) Credits =========== Code, design and manual.......................................Gareth Morris:gwEm Design........................................Mathieu Stempell:Dma-Sc/Sector One Graphics.............................................Sebastien Larnac:STSurvivor Falcon DSP clock detection.......................Denis Huget:ST Ghost/Sector One ICE pack algorithm.....ripped by Phil Graham:Grazey/PHF, original by Axe/Delight ASCII logo...........................................Stefan Benz:Lotekstyle/tSCc Its true that most of the grind work on maxYMiser was done by me (Gareth Morris) but we should not forget the work of these other guys, especially Dma-Sc, who all made maxYMiser what it is today, so thanks again this crew. Special greets also to EarX/Lineout (moral support plus CT60 and TT testing), Pink/RG (stuck key bizness) and Evil/DHS (various bits of helpful advice). ________________________________________________________________________________ (3) Licence =========== I'm bored of releasing freeware software that gets a huge number of downloads but receives little or no feedback, except from people who I usually know personally. So: maxYMiser is FREE, but if you make music or sounds with this software which are released either in any kind of commercial or non-commercial way, you should mention somehow that you used maxYMiser in its production. In case you wonder - this is serious. maxYMiser maybe distributed freely, but only with this text document and other associated files. None of the files may be modified in any way. maxYMiser comes with no warranty of any kind: It may very well trash your machine/files/music etc etc ________________________________________________________________________________ (4) Introduction ================ The Atari ST has many good music editors for the built-in YM2149 sound chip. The problem is though that, in someway, every one of them sucks. When I first discussed the project with Dma-Sc, he said I should make 'the music editor of our dreams'. Later I decided to change this goal and just tried to make the best sound chip editor on any platform. With such high aims this was a long project, however I am happy with the end result - even if in many ways I regret starting it. You'll notice the interface and keyboard layout borrows (steals ;) ) much from the PC sample tracker 'FastTracker 2'.... of course, because this is my absolute favourite tracker. I made changes to the things I disliked about this editor, and also made changes to make the interface fit to YM2149 sound chip editing. The many fans of FastTracker 2 should have no problems to adapt to maxYMiser though I think. maxYMiser is not a program for a beginner - it needs a decent knowledge of the YM2149 sound chip. You can read the YM2149 datasheet to give yourself a crash course, or use a different editor. I heartily recommend MusicMon2.1, which is easy to learn and has an advanced sound system. maxYMiser has no guards over CPU utilisation, with certain combinations of effect you can easily use more than 100% CPU, which has easy to imagine results. The composer has no restriction over combinations of effect types and channels and there are also no lame 'are you sure about this' type screens - so watch out. ________________________________________________________________________________ (5) Basic Principals ==================== Here I discuss some of the basic ideas, terms and concepts used in maxYMiser. Some basic tracker knowledge could help here - I suggest newbies consult the famous 'Trackers Handbook'. (5.1) Patterns and songs ------------------------ On first appearances maxYMiser looks like it takes the song and pattern structure from FastTracker 2 or ProTracker. This was my intention, but actually its not the case. In FastTracker, 2 dimensional patterns are linked together into a one dimensional song list. In maxYMiser songs are 2 dimensional and the patterns are 1 dimensional. This makes for a saving in file size, and offers some ease of use to the composer. (5.2) Sequences and instruments ------------------------------- When I was designing maxYMiser I wanted to give the composer the maximum possibilities of the YM sound chip. This meant a low-level instrument editor, and so I devised sequences. A sequence is a list of binary words that you can use to vary some parameter of the sound over time. To give, for instance, a classic arpeggiated chord, or a wobbly vibrato effect. A sequence is also used to produce a volume envelope, or to define a SID waveform. For more details, read the instrument editor part of this manual. (5.3) Ways to make sound ------------------------ I already suggested to read the YM2149 data sheet, so please do. Anyhow, the YM2149 can produce sounds formed from combining square wave, buzzer and noise. On Atari ST we have a fourth possibility - the MFP or timer. Timers can interrupt the CPU at regular intervals for manipulating the YM into producing various effects. This distributed version of maxYMiser has 3 specific types of timer effects. Each channel uses its own separate timer, if its enabled that is. The effects include: * 'DigiDrums' which play a 4bit sample, typically a drum sound or special effect * 'SID' produces a software generated waveform. In the past this has always been a fixed waveform (usually square), maxYMiser allows you the possibility to program this yourself, eg for sine or fake-buzzer waveforms. * 'SyncBuzzer' retriggers the buzzer waveform at audio frequency intervals to create synchronisation effects in the same way as the 'sync' function works on an analogue synthesiser. (5.4) The 'N' key ----------------- In many of the editors and screens pressing 'N' or 'control+N' will select the next unused pattern or sequence. Remembering this will save you time and effort - thanks 505 ;) ________________________________________________________________________________ (6) Tracker Display =================== As you can see the tracker display consists of three large vertical columns of codes. Each vertical column corresponds to one of the three YM2149 sound channels. The number at the top of each channel shows the current pattern being displayed there. Pressing 'Play Pattern' plays the current patterns without reloading the current patterns from the song list. This allows you to demo combinations of patterns without changes to the song. These patterns can be changed with keyboard shortcuts, or by modifying these fields. Like many trackers the patterns are 64 steps long, which nicely corresponds to 4 musical bars, with each step equal to one 1/16th note. Pattern break tracker commands allow you to shorten this length. For each step in each column of tracker data there are seven pieces of data. Lets illustrate them below: | | | | . | . | | Note-Octave | Instrument | Volume | FX 1 : Type . Value | FX 2: Type . Value | | | | | . | . | (6.1) Note ---------- This column holds the note data for that step. If this is blank the currently playing note is unaffected. CapsLock can be used to enter a universal note off here. Notes can be entered either in real or step time, and using an external MIDI keyboard, or the Atari keyboard (here we show mapping on a UK system): (Upper octave) 2 3 5 6 7 9 0 = => C# D# F# G# A# C# D# F# Q W E R T Y U I O P [ ] => C D E F G A B C D E F G (Lower octave) S D G H J L : => C# D# F# G# A# C# D# Z X C V B N M , . / => C D E F G A B C D E Octaves can be changed with the function keys. maxYMiser supports all notes in the YM frequency range, even if the very high notes are not useful musically. (6.2) Instrument ---------------- If an instrument number is present here then the sound is triggered from the start so, to avoid retriggering, simply omit this column. The instrument number to be entered in this column can be selected with the numeric keypad, the instrument editor, or via a 'MIDI patch change'. (6.3) Volume ------------ The volume number in this column is an attenuation level. A dash means no change to the current attenuation level. A $0 gives the loudest volume, and $F the quietest. Usually a dash is entered in this column, but you can change this with the 'vol' field in the 'normal' menu. (6.4) Effects 1 & 2 ------------------- Effects type is an alphanumeric value, in other words 0-9 and A-Z. The full details of these effects are provided later on in this manual, and are summarised in the online help system. The effects value which corresponds to this type is shown by the adjoining two nibbles, which form a hexadecimal value in the range $00-$FF. The meaning of this value depends on the effects type. The single effect columns previously available on existing YM trackers were thought not to be sufficient for the complex compositions with adjustment in instrument parameters that maxYMiser was designed for. Therefore two effect columns are provided, which offer exactly the same features. ________________________________________________________________________________ (7) Instrument Editor ===================== The right half of the screen allows selection and editing of the instruments used in your composition. Almost every instrument parameter can be adjusted with tracker commands. (7.1) Instrument Selector ------------------------- maxYMiser has four banks of eight instruments, giving 32 instruments in total. Instrument banks maybe selected with the buttons to the top right of the screen, or with keyboard shortcuts on the numeric keypad. Within each bank you can select instruments with a left mouse click. Highlights appear over the instrument name and the instrument number. These can be selected independently for copy and remapping operations. Right clicking on an instrument name allows editing. (7.2) Instrument Parameters --------------------------- From the top down: The 'de-tune matrix' allows you to enable different instrument effects (portamento, vibrato etc) on different parts of your sound (the square wave, buzzer or timer generated effect). Fixing the frequency of the sound using a fixed frequency sequence (fix freq) disallows all other effects except for vibrato, it is also no longer possible to play notes with this part of the sound. Selecting 'fixed frequency' and 'fixed de-tune' bypasses the need for specifying fixed frequencies with a sequence, instead the fine and coarse instrument parameters allow you to fix the frequency, this allows the fixed frequency to be adjust via tracker commands if required. The transpose effect is controlled by the transpose tracker command. As you can recognise, the 'de-tune matrix' gives many possibilities for de-tuning sounds, for ravey stabs, fake resonant effects etc. Below the matrix you can select sequences to change the sound over time. Sequences can be shared between sounds. 'Vol' sequence changes the note volume over time $F=maximum level $0=minimum. Volume sequences do not affect digi and buzzer sounds for technical reasons. 'Arp' sequence allows complex arpeggios to be performed. The sequence provides the number of semi-tones the note is to be adjusted by over time. The number is interpreted as signed 2's compliment, so $FFFF is a -1 semitone adjustment for example. 'Vib', or vibrato, works similarly to the arpeggio except the adjustment is not tuned by semitones, rather YM frequency register value. This allows fine adjustments - however they are not in tune over a wide frequency range. 'Mix' allows for changing the state of the YM mixer over time. The details of the YM mixer appear in the online help. The first nibble enables and disables the noise generator, the second nibble enables and disables the square wave generator. The third nibble enables the buzzer. The final nibble allows you to select which timer-based effect (for example SID or digidrums) will be used. 'Noi', short for noise, allows you to adjust the frequency of the YM noise generator over time. As the YM sound chip just has one noise generator, higher number YM channels have the priority over setting this frequency. Adjust between $00 to $1F. 'Fix', for fixed frequency, is a rarely used but powerful sequence. You can specify actual YM frequency register values changing over time. The online help provides all the formulae you need to calculate these values. If a particular frequency step is set to $FFFF then fixed frequency is ignored and the normal note is played - useful for combining instruments. 'Tim' provides never before seen possibilities in a YM tracker, and is arguably the most powerful feature of maxYMiser. In short it allows you fine control over many of the timer effects. In the case of SID, this sequence configures the software waveform that is generated by the SID timer interrupt. For example a sequence $F,$0 gives a square wave. $F,$F,$F,$0 gives a pulse waveform. $F,$A,$5,$0 a rough saw waveform and so on (sine wave is also possible for example). Up to 16 steps maybe used in a SID waveform, and fewer steps mean less CPU utilisation. In the case of syncbuzzer each step in the 'Tim' sequence represents a buzzer waveform, allowing you to form complex alternating waveform syncbuzzer effects. Up to 8 steps maybe used in a syncbuzzer effect, and number of steps does not effect CPU utilisation. Below the sequence selection fields are instrument parameters that do not change over time: 'Seq Speed' allows the user to set the speed with which all the sequences are processed. A higher number means slower sequence effects. 'Buzz Wave' sets the buzzer waveform associated with this sound. The online help section has a list of the different possibilities. As with the noise generator YM2149 just has one buzzer to share with all voices. Higher number YM channels take priority over the buzzer effect. 'Start Syn' allows effects only previously possible with the MusicMon2 editor. Other YM editors passed this little gem by, but here again it appears. Enabling this field forces the instrument to synchronise all its tuned components (square wave, buzzer and timer) when the note is triggered, for repeatable phasing. It is not possible to guarantee synchronisation of the YM2149 square wave with precision of greater than 180degrees - this leads to 2 possible phasing effects in this case. 'Fix Det'. If fixed de-tune is enabled by the de-tune matrix then these two fields affect the sound. The coarse de-tune allows de-tuning in semitone intervals. The fine de-tune allows de-tuning in YM frequency register intervals. 'Digi Sample' allows you to pick a digidrum sample from the 8 that maxYMiser supports. For more information see the DigiDrum section. A value of zero in this field means no digidrum sample is selected. 'Rate' allows you to set the replay frequency of the digi sample. You are altering timer register values, however these are also converted to Hz to make things easier. So called 'tempered' digi sounds are not easily possible (so it is not convenient to play tuned notes with them). However this is not the purpose of digidrums (a hint there in the name ;) ) - and in the case of percussive samples I believe that fine control over replay frequency is better. maxYMiser gives you the finest control possible with the hardware. 'Instrument volume' specifies the amount of attenuation applied to this instrument. This means a value of zero gives the loudest sound, and a value of $F, the smallest. Make sure you have a defined volume sequence or a buzzer based sound.... otherwise you hear nothing ;) (7.3) Sequence Editor --------------------- This word editor allows you to define the sequences used by the instruments. I believe usage of this editor to be self-explaining, however: 'Cpy' copies the current sequence to the 'Dest' sequence. 'Clr' clears the current sequence. 'Length' holds the length of the current sequence, and 'Repeat' holds its repeat point (if appropriate). (7.4) DigiDrums --------------- This small menu allows you to load new digi samples into your music. 8 samples are allowed, each of which can be applied to many instruments. Select which sample you want to load and then choose the 'Load' button. Select an 8bit signed headerless sample (eg RAW PCM type formats). If loading is successful the sample length will be displayed and it is automatically converted for 4bit YM sample resolution using a highly accurate lookup table. Each digidrum can be up to 16Kb in length. If you want to clear an unused sample simply pick the 'Clear' button. ________________________________________________________________________________ (8) Sub-Menus ============= Here I describe the individual functions of each program sub-menu: (8.1) Escape ------------ You reach this menu by clicking on the top left corner of the screen, or pressing the escape key. 'Quit' exits the program back to the GEM desktop. 'Background' partially restores your Atari to enable it to run desk accessories (eg calculators, sound setup accessories etc) or, in a multi-tasking OS such as Mint, other programs. Select 'Foreground' to return to maxYMiser. (8.2) About ----------- Displays the main program credits. Right clicking on the 'Title' and 'Artist' fields allows the composer to edit the data for these SNDH format tags. (8.3) Help ---------- This help section provides the user with a quick reference to all tracker effect commands, keyboard shortcuts and some YM2149 low level details. Clicking the buttons on the left selects which help you want to view. Then click on the help pane, and use the mouse to navigate through each screen. (8.4) Normal ------------ The mini-tracker display to the top right is the song editor. Here you can set how your patterns will be sequenced to form a finished song. This mini-editor supports many cut and paste features of the main editor, so experiment. The arrows allow you to move up and down the song editor - right clicking moves to the song start and end. 'Len' holds the length of the song, and 'Rep' the repeat point for the song. 'Speed' holds the song speed in number of replay routine calls per 1/16th note. 'BPM' cannot be edited and is a rough calculation based on the replay speed and interrupt frequency. 'TC' allows you to set the frequency that the maxYMiser replay routine is called by. This frequency is synthesised from the 200Hz system tick. In this way you can select tempos with fine resolution. 'MIDI' disables the maxYMiser replay routine from the system clock. Instead it is called by incoming MIDI clock signals. In this mode song speed may not be adjusted. 'Xpand' and 'Shrnk' allows to double and half speed the current pattern. Any part of the pattern 'cut off' by the expand operation is stored in the pattern edit buffer. 'Time' is self explaining ;) 'Zync' shows the current demo zynchronisation code for easy editing. 'Vol' holds the current note volume put in to the editor. 'Add' holds the number of 1/16 steps skipped each time you enter a new note. Left clicking on the 'Chan' buttons mutes and unmutes that YM channel. A right click solos and unsolos that channel. (8.5) Configuration ------------------- Here you select different options for the appearance and operation of maxYMiser. 'Scroll' activates and deactivates pattern scrolling. The controls just below 'scroll' allow you to setup different colour schemes for the editor. 'Mouse' selects between 8 classic mouse pointer shapes ;) The 'Timers' check boxes activate and deactivate MFP timer based effects on each YM channel. This can also be changed dynamically whilst the song is playing with tracker commands. This allows easy swapping of timer utilisation between the YM chip music and any other demo effect you might be running. The timer activation and deactivation is system friendly and fully restores the original settings. 'Show CPU' enables display of the amount of CPU used by the maxYMiser replay routine. Interpret this with caution and knowledge! Timer effects will slow down the CPU at all times, not just when the replay routine is active. 'VB Freq' - you can set this to high or low screen refresh setting on ST(e) and Falcon platforms. This may improve your display quality and is totally independent of the sound replay frequency. On Falcon 030, maxYMiser supports external DSP clocks, and extra outputs. If your sound system is not locked when maxYMiser is run, then external DSP clocks will be detected. You can see the frequency of this clock here. If you have dual DSP clocks (represented by an asterisk) then you can toggle which one is used. If you have an external DSP clock then an external output, such a SP-DIF, Analog-8 etc is automatically enabled. 44.1kHz is by default chosen if this is available. 'Speaker' enables and disables TT/Falcon030 internal speaker (assuming you didn't rip it out already ;) ) 'Save CNF' writes a file 'MYM.CNF' to the maxYMiser directory. This stores your configuration settings and will be reloaded each time maxYMiser is run. The 'Year' field allows you to enter the year of composition for your music. This information is used in work saved as an SNDH file. If 'Re-load' is enabled then your configuration will be reloaded after loading a SNDH or song file. In this way settings stored in these files can be ignored if you wish. The MIDI settings on the screen allow access to maxYMiser's MIDI functions. YM tracks 1,2 and 3 can be assigned to a specific MIDI channel ($0-$F corresponding to channels 1-16), each with a different instrument. This instrument can also be changed with a 'MIDI patch change' separate of this sub-menu. (8.6) Zap/Pack -------------- The 'devastate' options allow you to trash your song, instruments, or both ;) The 'squish' options give you some memory management functions. Duplicated patterns and sequences are removed and the remainder are stored in a way so as to reduce file size. (8.7) Transpose --------------- Here you get an enhanced version of FastTracker2's menu. In addition to the usual 32 transposition possibilities you can perform 16 different volume adjustments with this menu. (8.8) Advanced edit ------------------- This menu gives powerful editing possibilities. 'Copy' copies an instrument between positions in the instrument editor. The small 'instrument number' highlight specifies the destination, and the larger 'instrument name' highlight gives the source. 'Track', 'Pattern', 'Song' and 'Block' allows you to re-map instruments within your song. You can select 'Overwrite', 'Overlay' and 'Underlay' paste modes. The seven button toggle below the paste mode selection allow masking of each column of tracker data for the cut and paste operations. (8.9) Play song --------------- Selecting with the left mouse button plays the song from the start of the current pattern onwards. A right click plays the song all the way through from the top. (8.10) Play pattern ------------------- Left clicking plays the current pattern from the start without re-initialising them from the song list. This allows you to try out patterns together without changing the song. Right clicking has the same effect, but starts from the current cursor position. (8.11) Stop ----------- Stops play and record modes. (8.12) Record song ------------------ Only left click has an effect. Operates the same as play song, but enables record mode. (8.13) Record pattern --------------------- Only left click has an effect. Operates the same as play pattern, but enables record mode. (8.14) Disk operations ---------------------- maxYMiser gives you an array of loading and saving possibilities. You can work with files in the popular Atari ST music format 'SNDH' (of course only SNDH files created with maxYMiser can be loaded into the editor). You can also save and load voice sets and song data separately for use with maxYMiser's binary replay routine. In addition you can save your favourite instruments and trade with your friends ;) The software saves and loads files packed with the famous ICE algorithm. To enable saving with this packer, select the check box. The next file to be saved will then be ice packed for a significant file size reduction, however the packing operation can take some time, especially on a standard ST... Therefore I recommend ICE packing only for distributing your finished music. All fully SNDH standard compliant players support playback of ICE packed files. Another option for distributing your finished music is the 'time' check box. Normally saved files loop continuously at the repeat point. However, by checking this box the next saved SNDH file will have its track duration set by the current track timer. Just play your track to its end point, and press stop to set the timer appropriately. Now in supporting players your music will end correctly. The bottom field on this panel gives the result of the last disk operation, so it is also displayed after loading digi samples. (8.15) Sequence editor extension -------------------------------- This menu allows fast generation of sequence data. Sweeps and oscillations can be easily programmed here. 'Minimum', 'Maximum' and 'Oscillations' are self explaining. You can 'Gen'erate a new sequence or 'Mod'ify an existing one. The 'Morph' button generates sequences that fit in between the current and destination sequences. For this to work these sequences should have the same length. Combining this feature with tracker commands allows versatile morphing of sounds, eg SID-morph. ________________________________________________________________________________ (9) Tracker Effects =================== I did not follow the scheme of any previous tracker for this, rather my own idea of what's logical. You can look these up with the on-line help system. 0 1 set portamento enable flag mask 2 set arpeggio enable flag mask 3 set vibrato enable flag mask 4 set transpose enable flag mask 5 set fixed frequency enable flag mask 6 set fixed de-tune enable flag mask 7 8 9 A Arpeggio sequence + number B pattern Break C start synChronisation + value (on/off) D Detune coarse + value E dEtune fine + value F Fixed frequency sequence + number G diGi sample + number H I tImer sequence + number J K L voLume sequence + number M Mixer sequence + number N Noise sequence + number O nOise transpose + amount P Portamento + rate Q seQuence speed + value R digi Rate + value S song Speed + value T Transpose + number of semitones U V Vibrato sequence + number W buzzer Waveform value X eXtra 2/3 step arpeggio (High and low nibbles give the number of semitone variations - eg X47 gives major arpeggiated chord. If the second step is set to $F then a 2 step arpeggio is produced eg XFC gives a 2 step octave arpeggio) Y dYnamic timer allocation mask eg 7=all timers, 2=timer B only etc Z set demo Zynchronisation code ________________________________________________________________________________ (10) Replaying maxYMiser music ============================== Files saved in the SNDH format can be played with any SNDH replayer. There are a number of these for a variety of platforms. SNDH is a standard format for Atari ST chip music, rather like the famous SID format on C64. For more information visit http://sndplayer.atari.org/ Apart from the SNDH format maxYMiser voice and song files can be combined together in various ways and replayed in your productions by using the supplied binary replayer. For guidance on how do this please look at the example source code, which is for a multi sub-tune SNDH file. This example covers most possible replay situations, and even novice level assembly programmers will be able to make use of maxYMiser music. (10.1) Technical ---------------- Here are details for the header offsets of the maxYMiser replayer, run each routine in supervisor mode: MUSIC +$0 = music initialise routine MUSIC +$4 = music de-initialise routine MUSIC +$8 = music interrupt routine MUSIC +$C (binary replayer) = demo zynchronisation byte +$B8 (unmodified SNDH) +$?? (modified SNDH - byte is present directly after HDNS tag) The replay routine stored within the SNDH file, and the one in the binary replayer are virtually identical. There is little advantage either way performance wise. The replay routine is fully PC relative, and performs partial relocation on part of its code in the initialisation routine. You will probably notice that replaying maxYMiser music outside of the editor is a little faster than inside it, this is due to the RLE algorithm used to pack the pattern data. The replay routine automatically detects processors without cache, and then uses self-modifying code routines for performance. This includes MegaSTe - although this system has second level cache, through extensive testing I have noticed no strange effect with using these self-modifying code routines... except for a decent performance increase. The routine is generic, customised space-saving versions of the binary replayer can be made available depending on your specific application. Email me for details. ________________________________________________________________________________ (11) Finally ============ Have fun and stay Atari ;) Gareth Morris/gwEm Mar 2005