new base address. The code goes through the whole code, and whenever it finds an absolute, or indexed absolute reference to the old SID address area, it replaces the address by the appropriate equivalent in the new area.) When moving a C64 tune to Plus ibution in ASCII source format, and you should also find a compiled version. You can fiddle with both, I hope the routine is obvious. You can relocate the routine to anywhere in the memory (since it consists of no absolute jumps and references), just setsin a PC SID emulator, after you packed it - all in all, check your tune before releasing it, to avoid surprises).  You can anyway use my SID base relocator routine to also redirect your favourite music converter routine to a new base address, instead of going through the code in monitor and replace every occurences by hand. And finally: how to redirect a p is wrong, go and correct the appropriate ADSR value in the sound editor. When moving a tune created on Plus/4 to C64 platform... ------------------------------------------------------- You should do simply the opposite of the previous section. Yoing mode, either x or y is used (in SIDwinder, it is x). - As speaking of the phantom SID base address, it doesn't have to be $d400, it may certainly be anything you want - just make sure, the music and the music converter routine assumes the same problems in the slide/vibrato table. The solution is the same: if you experience problems, just multiple all absolute values by 10/9. - Since the SID is slower, also all ADSR speeds are slower. This causes further problems in your instruc converter routines. Mostly, the ADSR - and especially, the KEY bit of the SID control register(s) in particular - causes problems. So, I used to replace _every $d404 reference in the player by a call to a short routine: sta $d404,x slower, one needs higher values to achieve the same output frequency (~ the same note). This is not a problem - the frq table is the right one to address this one. But there is still a problem. The SIDwinder player uses absolute frequency val/4... ----------------------------------- If you have a tune composed in the C64 version of the editor, and you want it to be used in a Plus/4 program (with SID card), you should do a few final steps before assuming everything to be O.K. (Regardless to the appropriate constants and call it if it is neccessary. (In short: you must set the start and end addresses of the code to be redirected, ie. the start and end address of the player code. You must also set the old (present) SID base address and the layer to a new base address? ------------------------------------------------------------ This is simpler than you'd expect. I've written a small routine back in 1992 to do the task. I revised the code a bit, to make it simpler. You find it in the distru can simply assume that all speeds are faster by a factor of 10/9 and modify your song - however nothing makes it sure that everything will sound correct, so it's best to take the C64 editor and make the needed corrections if any (or listen to the tune e base address. Sometimes, using $d400 is inappropriate - it is well in the anyway useable memory area, well inside everything. I've seen in many converted games that $0400, $ff40 and similar addresses were used (so does my Leonardo game ;-) ). ments. Unfortunately, you have almost no chance to make everything sound perfect, because of the raw resolution of the SID ADR time settings (Sustain is not involved, of course). Just check the instruments by ear; if you notice that something ;store the value, as expected and #$01 bne end sta $0204,x ;Internal variable of my music converter end rts (One thing to note: most players address the SID registers with indexed addressues for the glide/slide instructions. If your tune uses glide/slide, the speeds can be slow occassionally. (Theoretically, you can fix the problem if you multiple all glide speeds in the glide table by 10/9). The difference can also causou should be right - if this is true, then _all music converter routines should suffer from the same problem. This is true. I used to step over this problem with a little modification in the player. But this needs the presence of one of _my musi say, this final precaution is not caused by the programs, but rather the little-bit-incompatible SID card hardware). There are two points your tunes can go mad when playing on a Plus/4, and both come from the different SID clock. - Since the SID is  00 as SID base-address and C64 frequency table. You should also decide with this latter option if you want your song to be distributed in a collection together with native C64 musics (the HVSID collection is a good example). But at this point, I'd sugge utilities, the packer and the ASCII viewer, they needed even less efforts to behave the same on both machines. When you finished composing a song... ------------------------------------- Well, you should decide what you want to do with the song. - I usic play. The phantom SID address used to be $d400 by default (since all C64 musics write to this address, and most music converter routines read SID data from this address). You can also do the opposite (have a music with $d400 SID base address, note difference seem to cause the music to sound _awful, especially if filters were used). The frq table type is not serious in the subject of the music converter routines - they tend to f*** up the exact frq values anyway, and also don't pr parameters (base=$fd40 and Plus/4 frq table) and link this file into your program. If the determined playing is 'SID card', you don't touch anything in your programs init, you simply call the player each frame and it plays as it's expected. ost probably find a similar frq table in the original C64 player as you can find in the SIDwinder player from $1040 to $10ff. So, it should be easy to replace the original frq value tables by one you simply picked out from a SIDwinder player thaheory is quite simple: there is the packed SID music linked into your program (at this point, this is no matter if it was composed in SIDwinder or not). Somehow, either by auto detecting the SID card or asking the user, you should determine the used soun original C64 music player is called, then the resulting values are simply copied to $fd40 with a loop. This causes all bad things to happen together - since the original music player can write - and you can be sure, does write! - the SID registf the packer hanged with no understandable reason :-\ ). BTW, I'm sure, a lot of Plus/4 coders want their product to be 'configurable' in the subject of the sounds. This is a clever thought, since even if the SID card was spread quite 'widely' and can s), you found the answer here, right now :-). Not to mention that this is the _only correct solution, redirecting the player runs also much faster than running a copying loop each frame, after each call of the player... - You could ask, and yst to read the appropriate section later in this document before submitting the entry ;-). Important note for the packing process. The default zeropage word assigned to the SIDwinder player is $fb-$fc. On the Plus/4, $fb stores the actual ROM configuratf you want the song to be included to your product as native SID-card music, in the packer select $fd40 as SID-baseaddress and Plus/4 frequency table. - If you rather want it to be like a native C64 music, pack the song like the above but select $d4 don't touch it if the TED was selected, and redirect it to $fd40 if SID was requested). Some short notes ---------------- - If you play a music through the SID card, you're strongly suggested to use a native 885Khz based frequency table (that one player routine, of course with the above differences: the player in the editor assumes the SID at $fd40, and includes a note-to-frequency-value-table generated for the nominal clock of the Plus/4 SID card. Well... that's all. As speaking of the other  If the user selected 'TED', or your auto-detect routine detected no SID cards, the player must be redirected to a 'phantom' SID address and you also have to use a music converter routine (using the same 'phantom' SID base address) to make the movide SID filter emulation. So you can also play the native Plus/4 frq table music through a music converter routine with no problems. If you use a music _not created in SIDwinder, but also want to correct its note frequency values, you'll md output (TED or SID card). And when it's done, something has to be done in order to redirect the music to one or another sound source. This 'something' could be the following - By default, you generate the packed music file with the above mentioned t was generated with the Plus/4 frq table ;-). - If, and _only if TED was assumed, you must also call the music converter routine. - NEVER NEVER NEVER NEVER do such lame work I've seen in many early SID-card 'compatible' demos and games: thestill be ordered from Solder, the majority of Plus/4 people doesn't have this pretty sound device - some even never heard of it :-(. So, no doubt - if it's possible, your program should also play music and/or sound fx through the TED sound output. The t ers more than once in a run, the copying loop, and finally the SID will miss all except the very last register changes. If you did such try, and you heard the music to sound suspicious (missing notes, chaotic ADSR of the sounds and such thingion. If your product has to co-operate with the Kernal ROM and the Kernal IRQ, you should rather select for example, $fc in the packing process, to avoid unexpected crashes (it also made me spend a few hours in hunting for bugs, when the Plus/4 version o est differences in the used parts can result in different sound. The SID filters use two external capacitors, that mostly determine their response. Now, the SID-card has exactly the same capacitor value as the C64 SID has. ...But the manufacturi after turning the trimmer down, you'll still experience fall-out and distorted waves if a strong sound comes in. I know no correct solution for the problem, the card's audio amplifier part should be modified but I didn't want to modify Solder's  use (resonant) filtered bass. Once I asked Solder about the reason and the solution, and he answered that it is due to the needed high level on the Plus/4 analog input. Unfortunately, there is just one way to step this problem over: connect  ive equivalents - as you'll see, I decided to map the F-keys to the ones at the same _place, not name. Also, the <- key was mapped to the ESC key (...but you can also use the left arrow pressing Shift + '=' :-) ). The editors include the very same musicall. Something must be around the audio in circuit. I haven't checked it, but one thing is for sure - the digis work O.K. Now, some disadvantages (or rather disappointing things): - The most serious one is, the output analog signal amplifier stage kill the SID (haven't done that so far BTW). SIDwinder for Plus/4 -------------------- Now a few words about the way SIDwinder operates on Plus/4. First of all, there is no significant difference between the C64 and the Plus/4 code. The editors are ing the SID voices to the TED sounds (can be selected by a switch). - The audio output level can be adjusted by a trimmer on the card. - There is a full featured joystick port on the card, including the SID paddle (A/D) inputs. - All SID registe the strange sound is rather caused by the wrong (not corrected) original C64 music replay and the card DC distortion together. - After few minutes of operation, the SID on the card gets very hot. I won't mention this one, since I know Commodois frequency to the SID (thus making it possible to run your programs with twiee clock enabled. Not an obvious feature as you'd expect - the card has a dedicated chip (the 4520) for the task). - The card has both an audio input and an audio ouower' SID. This results in playing all notes at about one note lower frequency than the original, but with the same filter settings - the filter cutoff remains the same, since this analog part is not affected by the oscillator frequency in any wng is different: Solder used new small 'micro' ceramic capacitors, whereas Commodore used 'standard', round-type capacitors. I replaced the capacitors by two originals I picked out from an old C64 board and now it sounds the same :-) Anotdesign. - The card's filters sound a bit different than the original, even the C64-II that BTW has the same SID. The reason: the SID is mostly an analog design; at least its filters are. Because of the nature of these circuits, even the slight ᗝ|m6xxnN 3u3πfpzgZ@1Z] ǠW#Է[rC??,krx~r|sfWdzq the SID card directly to your hi-fi equipment and turn the trimmer on the card lower (middle position will do). You'll hear much less distortion from the card, however, this is still not enough to get rid of the strange effect completely. Even  has strong DC distortion. The higher output level you set on the trimmer, the stronger clipping distortion you get. Obviously, you hear the effect more if the output level is higher, e.g. all channels are on, the volume is set to $0f and youvery same to each other, to the point of all possibly equal code parts. Some constant values and some I/O register references are replaced by their equivalents on the Plus/4 (color values, TED registermap and so on). The keys are mapped to their respectrs are accessible, even the read-only registers of voice 3 and the paddle registers. - Somehow, the SID on the card plays digis back correctly. This issue is also not obvious, since C64s equipped with 8580 SIDs tend not to play digi sounds at re's chips and I know that a lot of them get hot while in operation, but I certainly haven't experienced this in the subject of the 8580 SID. Should this be because of wrong analog interfacing or bad syncing, I don't know, but I hope it won't tput 3.5 jack connector. The input is fed to the audio input of the SID, the same way it is seen in the C64. The output can go directly to your stereo amplifier system :-). The SID output can be also fed to the computers audio input, thus mixays. This can cause different sound - but not because of the filter in particular, rather the 'wrong' oscillator settings. IMO the sound caused by the different filter caps is not so much serious that you should, like me, also replace them - her reason is: people used to play C64 tunes with simply redirecting the original C64 tune to the new baseaddress (sometimes with a copying loop that is even worse, but it's an other issue), without correcting the SID frequency values to the 'sl e) ;Base address high sta ($d0),y notf inc $d0 ;check next... bne j1 inc $d1 j1 lda $d0 cmp #LO(end) bne loop lda $d1 cmp #HI(end)  Information for Plus/4 users ---------------------------- (I think I should have written this doc a bit earlier - I mean 'several years ago', to give it real practical use :-(. I seriously doubt that even despite the advantages of this editor, it could  01.2x musics (composed on C64) be played on this platform. Also a quick note for Plus/4 users: because of this whole lot of ASCII junk, there was no space on the disk for including the GNU General Public License. Please also obtain either the C64 or the 64 tune to Plus/4... - When moving a tune created on Plus/4 to C64 platform... The platform ------------- Before going deep into the editor and the player related things, we should take the _reason of all differences, the hardware itselves. If you're generators (included by the 8360 TED) are rather cripple, and are rather similar to the soundgenerators of the old VIC-20. To play SID-originate musics on the black dustbin, you must either emulate the properties of the SID chip by software (--> music cr is the Plus/4. (Emulating the SID correctly by software is a very hard task indeed, just see _any SID music players on the PC). Here I'll rather deal with the SID card, since I considered implementing a music converter routine to the editor both hard This latter is just annoying if you try to get a demopart to work, but it becomes something more serious if you're using your computer for composing music - a music that may thus fail to play correctly on a real SID). As speaking of SID cards, I know of The another thing you should be aware of, that the processor clock of the C64 and the Plus/4 are different. This should not be significant in such a subject, but it turns out to be so if the subject is the SID chip and this card. Unfortunately, the couruns at 9/10 times the C64 clock, resulting in everything you should suspect: lower frq of the voices (about one note) and longer Attack / Decay / Release times (ADSR). I think these were the two main reasons of all problems you may experience when you'f view). The SID card ------------ Since this is the 'base' of all music composing in this editor, I thought I should write some words regarding this device. In short, the card is a clear, compact design; for example, the address decoding is based on bne loop rts codes .byte $8e,$8c,$8d,$9e,$9d ;stx, sty, sta absolute and ;sta absolute,x/y .end count on more than a few users. But after all, it is here. It is here, it is powerful, and it is free. Be it late or not... ) Here you can find infos on the use of the editor on Plus/4. You'll also find this 'chapter' useful if you want your SIDwinder V source distribution. Table of contents ------------------ - The platform - The SID card - SIDwinder for Plus/4 - When you finished composing a song... - Some short notes - And finally: how to redirect a player to a new base address? - When moving a Ca Plus/4 programmer, you should know these properties I'll speak about - but it's still neccessary to talk these out, to know the reasons of all. First of all, a stock Plus/4 doesn't have such a good synthesizer chip that the SID is. The built-in sound onverter routines) or you should have a real SID chip interfaced to the Plus/4 (--> SID cards). Both methods are possible - but the real hardware is definitely better than any software based solutions, if the subject is the SID, and the emulating computeand inappropriate. (Implementing one would have costed me a lot of work, since it implied to reorganize the IRQ routines and some of the memory map - and it would have caused a lot of trouble, since no music converter routines emulate the SID correctly.  three attempts, of which two were really useable and just one that was spread 'widely'. The editor code assumes this latter, the Synergy SID card (by Solder) to be present (at $fd40). O.K. now we have a SID chip interfaced to the computer, what's next?nters inside the SID are based on the same processor clock the one the chip is synced to the processor bus. The C64 runs at 17.734472Mhz / 18, whereas the Plus/4 single clock is 17.734472Mhz / 20 (PAL machines). A SID, running at the Plus/4 single clock  re composing something. There are some less important differences between the computers, at least, in the scope of this program. I could mention the keyboard, the memory mapping and so on, but they're not significant (at least not from the users point oa GAL. - The card contains a 8580 SID (Solder told me, the 5v to 9v DC-DC transverter is not able to supply the 12v Vdd to the 6581 SID. I know this chip, since I also used it for my design (thanks Christian!), and it can for sure generate 12 volts from a single 5v supply, but maybe not that current the 6581 SID would need at its Vdd input). - The clock of the SID, as I mentioned, is the single clock of the Plus/4. Regardless of the actual processor clock, the card always supplies th th high byte or jump position PL addition to pulse width low byte Similarly to the filter effect, whenever the pulse effect is reinitialized, the pulse width registers will be set to zero. The first line of the pulse program usually adds an initial p r program. You must set the filtertype, too, otherwise it will remain zero (which means, the filter won't pass anything at all). The player will update $D418 with the result of a logical OR between the current volume and the filtertype you specify, theQ0ЩѢI00 ) @ȩѥƥ` resonance $FE -- select filtertype specified by FH $FF -- jump to the position specified by FH FH addition to cutoff frequency high byte or filtertype (bits 6 to 4) or jump position RL addition to resonance (bits 7 to 4) and addition t #define LO(x) (x&$ff) #define HI(x) (x>>8) ;If you're using the compiled binary version on the Plus/4 and you want to ;include it to your program, you must replace _all occurences of 'oldbase', ;'newbase', 'start' and 'end' in the code, respective switched off, whereas entering $ff results in not touching the effect machine parameters at all (an active effect, if any, will keep on running). 03.04 Wave/Arpeggio table ------------------------- WF $00...$8F -- current waveform = WF, arpeggio ofstart $1100 ;Player code start in memory #define end $1605 ;End in memory *= $2ffe ;Let's quickly generate a load .word *+2 ;address is: - Attack, Decay - Sustain, Release - Gateoff counter - Wave/arpeggio table position - Filter table position - Pulse width table position - Slide table position Attack and decay are the respective volume envelope settings for the SID. The gative, but keeps in sync. 04 Miscellaneous ---------------- - Please fill the sectors up sequentially. If not, when saving, all sectors after the first empty one will simply be lost. In the editor save routine, a sector is considered used if ther beq found1 ;Yes! dex bpl loo2 bmi notf found1 ldy #2 ;Check the address high byte lda ($d0),y cmp #HI(oldbase) ;old SID base high bne noulse width (a larger value), which the next few lines increase or decrease. 03.07 Slide/Vibrato table ------------------------- RP $00...$FD -- repeated addition to actual frequency $FE -- set absolute frequency FH/FL (drum mode) $FF --refore you should always set the lowest four bits of the filtertype to zero. 03.06 Pulse width table ----------------------- RP $00...$FE -- repeated addition to pulse width $FF -- jump to the position specified by PH PH addition to pulse wid ;Above, get out... and #$1f ;Found, strip unneeded bits ora #LO(newbase) ;and add new base address low bits sta ($d0),y ;Store! iny lda #HI(newbaso frequency low byte (bits 2 to 0) When a filtered instrument is initialized, all the filter parameters, including the filtertype, are set to zero. That means, the initial cutoff frequency and resonance must be 'added' to these zero values by the filteely. ;(Or take this file, modify to your particular datas and re-compile it with ;Table Driven Assembler on PC). #define oldbase $d400 ;Old SID base address #define newbase $fd40 ;New SID base address #define fset = AR $90...$FE -- repeat last waveform with a new arpeggio offset $FF -- jump to the position specified by AR AR arpeggio offset or jump position 03.05 Filter table ------------------ RP $00...$FD -- repeated addition to frequency and  lda #LO(start) sta $d0 lda #HI(start) sta $d1 loop ldx #4 ;5 checked instructions ldy #0 lda ($d0),y loo2 cmp codes,x ;Is it an appropriate code? eoff counter decreases with every frame, and toggles the channel key bit off when reached 0. The remaining position pointers are pointers to the appropriate effect program tables. A $00 in the Filter, Pulse or Slide position means that the effect will be is at least one Finish command in it. - If a track contains no JmpXX instruction (preferably, at the end of the sector list of the track), then it's considered to be unused and thus will not be saved.  tf ;...didn't win. dey lda ($d0),y cmp #LO(oldbase) ;low byte bcc notf ;below, not found cmp #LO((oldbase+$20)) bcs notf  jump to the position specified by FH FH addition to frequency high byte or absolute frequency high byte or jump position FL addition to frequency low byte or absolute frequency low byte While a glide/slide command is executed, the vibrato is inact This is the summary of features file of SIDwinder V01.23 01 Brief list of features ------------------------- - up to 32 subtunes in one music file - up to 96 sectors (256 instructions per sector) - up to 64 different instruments - up to 16 times mu fect table (selected by the cursor) INS insert command at current position DEL delete command at current position The Ins and Del keys are present in all effect columns; they both update all affected jumps and other references. 03 Commands ------ $5F RETURN copy the whole actual sector to a buffer up arrow paste the buffer into the actual sector DEL Delete command at cursor position INS Insert --- at cursor position 02.05 Sound editor screen ------------------------- +/- select next/p lume slide at speed $01...$07 IncXX incremental volume slide at speed $01...$07 HltVS halt volume slide, keep the current volume JmpXX jump to position $XX in the track table All commands occupy a single byte, except for Jmpxx. A sector replayS SHIFT J JmpXX (Pound) Set subsong start pointer to cursor position DEL Delete command at cursor position INS Insert ...00 at cursor position SHIFT RETURN Enter sector editor (sector selected by the cursor) INS and DEL updates all affected Startletely new packer for his versions of SIDwinder. - V01.23 (TLC/Coroners 2000.03.12) - First release of this line - Packs songs created in editors V01.2x - Runs both on C64 and Plus/4 - Loads song data files - Module parsing and el---- SHIFT+1,2,3 track editor SHIFT+4 sector editor SHIFT+5 glide/slide table edit SHIFT+6 disk menu SHIFT+7 music options In the sound editor: SHIFT+1 sound editor (main parameters) SHIFT+2 wave/arpeggio table SHIFT+3 filter table SHIFT+4 putrkoff in the editor player - A bit modified initialization routine, to avoid clicks in SFX mode - No start(1,2,3) pointer support for the "production" player - Now 'relocatable' code (all addresses and locations are calculated rela toggle on/off SID channels 1/2/3 In the Plus/4 version, the keys are mapped to their respective equivalents. F1 play/restart actual music F2 stop any kind of playing F3 continue stopped playing HELP fast forward (while held down) F4 play a se duration to $01...$40 frames C-1 - A#8 play note (selected instrument, for selected duration) Gld.XX glide ($01...$0F) or slide ($11...$1F) ------ a delay unit, plus release actual note +++ hold actual note, stay in sustain stage Finish End osic speed (supported by the editor) - volume register ($1673) and volume control register ($165D) for independent external volume control 02 Keys ------- 02.01 General ------------- F1 play/restart actual music F3 stop any kind of playing F5----- 03.01 Track commands -------------------- ...XX play sector number $00...$5F Tr+XX transpose up by $00...$3F semitones Tr-XX transpose down by $00...$3F semitones VolXX set a constant global volume of $00...$0F DecXX decremental vorevious instrument of $00...$3F SHIFT +/- increment/decrement pitch of test note SPACE test actual instrument (in liveplay mode) RETURN copy the actual instrument into a buffer up arrow paste buffer into the actual instrument SHIFT RETURN enter ef may be preceded only by the following ordered list of instructions: one JmpXX, one of IncXX, DecXX, HltVS or VolXX, one of Tr-XX or Tr+XX 03.02 Sector commands --------------------- Snd.XX select a sound/instrument of $00...$3F Dur.XX set not pointers and Jmpxx commands. 02.04 Sector editor ------------------- SHIFT S Snd.XX SHIFT D Dur.XX SHIFT V Gld.XX - ------ SHIFT H +++ SHIFT F Finish SHIFT + or ; select next sector of $00...$5F SHIFT - or : select previous sector of $00...iminating all unused data - Relocates player code to selected start address - Selectable SID base address - Selectable SID frq table version - Selectable used zeropage pointer address lse width table SHIFT+5 glide/slide table SHIFT+6 slide/vibrato table SHIFT+7 track start positions 02.03 Track editor ------------------ + Tr+XX - Tr-XX SHIFT S ...XX (sector number) SHIFT V VolXX SHIFT D DecXX SHIFT I IncXX SHIFT H HltVtive to the player start address) Packer ------- - V01.14 to V01.22 (Taki/NB) Since the old packers are rather user unfriendly and most of the sources have been unfortunately lost, TLC decided not to continue this line but create a compingle sector F5 enter liveplay (sfx) mode F6 select next subtune of $01...$1F F7 select previous subtune of $01...$1F ESC toggle track+sector screen / sound screen , . / toggle on/off SID channels 1/2/3 02.02 Editor subparts -----------------f sector Like the track commands, the sector commands also must follow a predefined order. one Snd.XX, one Dur.XX, one of glide, slide, ---, +++ or a single note, one Finish 03.03 Sound editor ------------------ The 7 digits are denoted like th continue stopped playing F7 fast forward (while held down) F2 play a single sector F4 enter liveplay (sfx) mode F6 select next subtune of $01...$1F F8 select previous subtune of $01...$1F <- toggle track+sector screen / sound screen , . /  Editor ------- - V01.14 (Taki/NB) Not meant to be a professional tool, basically a quick-and-dirty hack put together in a few weeks. Lots of minor bugs. Never released. - V01.20 (Taki/NB) An improved version based on the V01.14 edi t's homepage: http://www.sch.bme.hu/~takinb - The c64.rulez.org ftp site: ftp://c64.rulez.org/pub/c64/Tools/Music/Editor/ ftp://c64.rulez.org/pub/plus4/Tools/Music/ - The Funet ftp site: ftp://ftp.funet.fi/pub/cbm/c64/audio/editors/ ftp://ftp.fu struction set for more instruments and faster operation. Optimized sound effect routines, bug fixes. Much shorter rastertime than that of V01.14, still maintaining advanced sound quality. Disadvantage: absolute frequency parameters for glid u found the appearance of this pack promising. 06 Contact ---------- - Balzs Takcs (Taki/Natural beat) E-mail: takinb@sch.bme.hu (presumably available until 2001) S-mail: Balzs Takcs, Thokoly str. 26, 9300 Csorna, Hungary - Levente Hrsfalvi working routines but with dozens of bugs. Took too much rastertime. No tool suite created for these players. Never released. - V01.14 (Taki/NB) First player actually used for creating tunes :-) Modest rastertime, nice features (all efI routine, in order to make those sounds play... - Reorganized code for subsongs (because I hate 'start pointers') - A lot of things in the editor code, to make it more user friendly. New editor features, colors... - Play native Plus/4 sounds thnel 2/3) - Up to 16x player speed (16 calls per frame), supported by the editor - The 'trace values' display is updated even in 16x speed mode. - Recoded raster irq routine (player calls are spread equally over the frame) - 'Ins at ------------------------ Well, there are so much I can't even count :-(. - First of all, the player should not use absolute frequency data for the effects at all. - Digi channel(s). ...Would imply a lot of things to do, like: - The above one (fr - First release under GPL - Reanimated source code from the V01.20 source and the V01.22 executable - The code now also compiles to Plus/4 (with SID-card) - Removed load/save memory image support - SFX mode was recoded (no clicks, skips Nobody ever used this one. - V01.22 (Taki/NB) A further optimized version of V01.20. Provides the same features as the old player, while taking 10..15% less rastertime. Has the same negative points as V01.20 concerning the absolute fretor. Most bugs fixed, numerous changes to accomodate the V01.2x player structure. Never released. - V01.21 (Taki/NB) Nothing really new; it's just a V01.20 with minor patches to fit the new player's parameters. Never released. - V01#net.fi/pub/cbm/plus4/Tools/Music/  e and vibrato. Never released. - V01.21 (Taki/NB) Slightly modified V01.20 player. The original slide routine required too much rastertime for the first frame of the notes. This modified version saves on rastertime but sounds glitchy.  (sometimes, but not really often, known as TLC / Coroners) E-mail: levente@terrasoft.hu S-mail: Levente Hrsfalvi, Gorkij 33, 7200 Dombvr, Hungary Hopefully this pack, the sources and possible later versions will be available at: - Natural Beafects step-programmable). Special hard restart using test bit. Two serious bugs (jump loops hang the player, filter effect skipped in certain cases). First player with a tool suite. Never released. - V01.20 (Taki/NB) Reduced sector inrough the TED (maybe simultaneously with the SID channels). ...And so on. Please don't seriously count on me to do these improvements. I like this editor, but I think I should find some better use of my time... But you can do all improvements, if yopos 0 (in track editing)' bug fixed - Changed key for Finish command in the sector editor (now SHIFT+F) Player ------- - V00.xx (Taki/NB) Development versions, ain't worth to mention. None really worked :-) - V01.0x (Taki/NB) Firstq value independent effects) - Reorganized editor (at least, track editor - to edit more than 3 channels, and new sound editor) - Dynamic memory allocation in the editor (since it won't fit into the memory anyway) - A completely new NM playing channel 2/3) - SFX/liveplay mode no longer uses sector $5f - Track on/off was integrated into the editor player (no clicks, no reserved bytes in the arpeggio table) - New code for sector play mode (now simply skips playing chanquency (see above). Finished in 1994, first public release in 1999 (source included). - V01.23 (TLC/Coroners 2000.03.12) - Just a few minor modifications. - Frq tables are available for both platforms - Key-bit masking for trkon/.22 (Taki/NB) Slightly improved version still based on V01.20. Some bugs fixed (sorry, don't remember which). Done in 1994, first public release in 1999. Lost all source files for this version :-( - V01.23 (TLC/Coroners 2000.03.12) ng, you may find bugs when you use it. If you experience such behaviour, please contact me. The user interface of the packer is rather spartian; the same feeling as it was coded in the good old BASIC ;-). From the other hand, it should do all tasks you only one subsong, be sure to set all of them to 0. - Take care of 'closing' your tables correctly - always place a JMPxx to the end of your song data in the track tables, FINISH to the end of the sector datas (these are BTW also needed by the e want your packed file to be saved to. That's all. 04.03 The ASCII viewer ---------------------- I haven't wasted much words regarding this piece of code, although I think it has its valuable features. - Standard ASCII compatibility. Nonstandard ASC etting your track tables overlap each other. Overlapping can occur in every 8th subsongs, by mis-aligning the appropriate start pointers of the subsongs (check Taki's SIDwinder document on the purpose of Start pointers). If you do this, the p eld edit. You have 32 chars to describe your handle, the title of the song or whatever you find important to note in the music data :-). The packer copies this text in screencode to the player start address + $20 ($1020 by default). You find algorithm can be found in the programmers info file). This packer is a bit more forgiving to the composer regarding loose data, instruments and so on than the predecessor packer routine was. You don't have to edit all unnecessary data out from your musi (...I suggest to read the other file ('Plus/4 users'...)). - Freqtable. This has also something to do with the platform you want your song to be played on. Regardless to what platform you used when you created the song, you should select the a  to keep the whole mechanism under control - I could start with the loader, the memory map and so on. I could also implement all features I wanted instead of tinkering with the original - separate - relocator code. Packer V01.23 loads the compact data f $fb-$fc pair in the original SIDwinder player. Usually, you don't have to do much with this setting - just enter 'fb'. Sometimes, if your program, e.g. a demopart uses certain areas in the zeropage, you can select another for the player to ma ay. 4x8 charset. - End of line is determined by linefeeds ($0a). CR's ($0d) are skipped. - TAB capability (TABs are converted to spaces) - Standard file I/O, not well buffered (except for printing; a 256 byte buffer is used). - Runs on a C64, need in such a subject. - Filename. Should be obvious. You have to enter the filename of your song (the data file you saved from SIDwinder), or you can ask for directory (of the current disk) by '$'. - Number of subsongs (mostly, '1' :-) ). ditor I/O routines) and jump commands to the end of the last effects of the effect tables. If you follow these suggestions, you'll most probably have no problems with the packer. Since it is a new routine and still hasn't been under intensive testi II chars are either converted to space or their respective equivalents in the standard charset (e.g. Hungarian accented letters). - Can both view and print texts (printing on standard PETSCII printers, not well tested). - 80 columns displ acker will fail to determine the length of the track tables of the subsongs, and this will lead it to crash. So, before saving your song that you'll pack, always check the start pointers in the sound editor screen - if your song contains a 'ruler' above the input line. ...Well, really minimal user interface, but it works. Then hopefully, your song gets packed (if the packing doesn't finish in _few seconds, that's bad luck since it crashed. Please contact me). Enter the filename you c by hand before packing - the packer will do that. From the other hand, the packer needs a bit of precaution from you, because of these tricks. - First and most important, if you compose soundtracks containing more subsongs, take care of NEVER l ppropriate table for the _target platform. (The C64 SID and the SID in the Plus/4 SID card runs at a slightly different clock - that's why they need different frq table. For more info see the 'chapter' I mentioned above). - Identity fi ormat the editor handles. You can also load and pack songs created in the previous editors of the V01.2x series. The packing starts with some passes of parsing the data. In the packer code, this is implemented with 'full' data examination (infos on the ke them not to hurt each other. (Thanks to Taki for suggesting me this feature). - SID baseaddress. This doesn't seem to be much useful for a C64 musician - just enter 'd400'. For the Plus/4 users, you should select it to $fd40 by default  or a Plus/4 (even with 16K of RAM, so C-16 owners can also use it). In the viewer screen the Return, Space, Home and <- (on Plus/4: ESC) keys work (page down, line down, go top and back to load text, respectively). 05 Possible improvements... ---  - Start address in memory. The address you want the packed song to start at. The value must be given in hexadecimal, without prefix (e.g. '1000'). - Reserved zeropage word. The player uses just one pointer on the zeropage, and this is the ar Commander - RIT Research Labs - DosNavigator V1.42 - Peter Schepers - 64Copy - Borland Inc. - Borland Pascal and C Special HiYa! goes to Coyote / Coroners. 03 How to start... ------------------ In general, the editor is almost the same as yo e editor code - this way, may implement valuable features -, can definitely do this. 02 Thanks... ------------ - Balzs Takcs (Taki / Natural Beat) - for making this all possible - Luca Carrafiello (Luca / Fire) - beta testing and demosongs - J h gate bit masking in the player instead. You can now use all rows in the arpeggio table, plus you'll hear no awful clicking when you switch off a channel. Similarly, the last sector, $5f is no longer reserved for the liveplay function - you're free to with the slightly modified code; the SIDwinder V01.22 I had became _not V01.22 inside anymore. Then what? I asked Taki if I should release the editor also for the C64 platform; he kindly agreed, and after some talks about the version name/numbering/mark ll, probably V01.22 because the others were not public). The song data format was not touched in any ways, except for the identity field (V01.22 --> V01.23). When you're composing multispeed music, especially 4x and above, you'll notice that the player ts, the player, the editor and so on...). I then coded a new packer, because of the reasons mentioned above. It is still also much likely an experimental work, so please excuse its sometimes strange behaviour - rather, you're encouraged to report bugs i irst, there is no support for saving / loading bare memory images, as it was present in all previous versions. The reason is simple: they became not neccessary anymore. Until V01.22, the bare memory image was used for the packer (it could load only this t... thanks to Jouko Valta and Andr Fachat) and some simpler (self-coded quick-and-dirty Pascal diff) routines. Then I slightly edited the source - partially to make it compile to Plus/4, and partially to eliminate a few features that I considered annoy and keep them by hand. (You can do this either on a PC (or rather _any ASCII compatible printer/computer/operating system) or your funky MPS series PETSCII Commodore printer ;-). In this latter case, use the viewer routine's print function.) 04 Detaile equency value tables are for the PAL clock(s), and so are the IRQ handler routines. The editor is not intended to run in NTSC machines for the moment, though, it may start and run on them. Porting the editor to NTSC won't be a hard work - just a matter o u may know as SIDwinder V01.22. I only changed really a few things - you'll only notice that I fixed a few of those bugs / drawbacks Taki mentions in his well written document of the original editor. For this reason, please read Taki's document that I d ouko Valta, Andr Fachat - Recomment reassembler - Pasi Ojala - PUcrunch - Speech Technology, Inc. - Table Driven Assembler - Ettore Perazzoli, Daniel Sladic, ...the VICE team - VICE - Mike Dailly - Minus4 1.6.2 - Balzs Kovcs (Joe / STA) - St use it for your own purposes. When talking about this function, I must mention that it was also recoded a bit - you'll hear no clicks when you test your instruments. Just one more thing to note: the editor was designed for PAL machines only. The SID fr ing of the 'new' series, this became the SIDwinder V01.23 pack you just hold in your hands ;-). Finally, in agreement with Taki's opinion, I decided to make _all sources available to the public, since this makes sure that whoever wants to fiddle with th calls are spread around the frame (approximately equal time intervals between the calls). Some other issues. The first few lines in the arpeggio table are not reserved for the channel off function of the editor anymore. This function was implemented wit f you find some ;-). While coding, I kept my eyes on _not doing anything that causes the code not to compile to C64 anymore. This raised a question - I asked Taki because I wanted to do a Plus/4 conversion, but then I had _both a C64 and a Plus/4 editor form). The V01.23 loads the same short fileformat you used to save your musics. (BTW, implementing them would have been hard anyway, because of the new (different) memory map of the editor.) You can load and edit songs created in the editors V01.2x (we ing; why not to do it, if I was right in the business ;-). (As a short remark to Taki's kind words regarding the work I did: it was all some kind of a second or third division league game compared to his work of creating this series, doing his experimen d info ---------------- 04.01 The editor ---------------- Well, really not much to tell about this part, since Taki documented it well already (have I told you to go and read it? ;-) ). There are just a few things you should know to avoid surprises. F f some coding. 04.02 The packer ---------------- This is an entirely new part of the package. When I was at the point of reconstructing the old program code, I rather decided to rewrite everything from scratch instead. This way, it was possible for me ecided to include to the pack in original, with no modifications at all :-). Another document that will probably help you in the first steps is the summary of features file. After thinking it over again, I'd _strongly suggest to print out both documents ws that something was wrong, still in the reverse engineering process... (some indirect memory references should have been missed in the original code). One year later, Taki announced releasing his SIDwinder V01.22 pack. I downloaded and checked it - an urce files which I failed to provide with the package. I agreed, but as soon as I tried to actually collect the sources, I painfully noticed that those old files simply vanished into the thin air. As it turned out, somehow I lost a whole disk of source f the additional small tasks this method involves. In the meantime, a lot of C64 programs became accessible for me, because they got uploaded to various FTP sites (the spirit has changed a lot, after all...). In the summer of 1998, I started converting Vo To make a long story short, I released the binaries with the player source only, which is the most valuable part after all -- in my opinion. Although I planned first to release the package under the protection of the GNU GPL (General Public License), I d source files or not. I decided not to do so, because I wasn't particularly proud of the editor and the rest of the tools. Unlike my player, which is highly optimized, the tools were coded rather in a quick-and-dirty fashion. They weren't intended to be r y were certainly different enough to take TLC a month of hard work (not to mention the bonus of having to mess around with memory layouts, keyboard mappings and various obscurities I left in there without a single comment). It must have been a tough nut ackground of the development and a bit of history. So here we go... The original SIDwinder V01.22 is about six years old now, I coded the player and the tools back in 1994. For various reasons lying in the strange nature of the old C64 scene, the packag s always been some sort of an experimental work; it was rather spartan, regarding both its functionality and user interface. As my source files were gone, TLC decided to develop his own packer instead of trying to reassemble the old binary code -- which or and the player were good, had good documentation - and after all, I could contact with the author himself and ask him for the sources, and some help. I simply couldn't resist myself to do so :-)... 01.02 Taki's point of view... ---------------------  lots of built-in functions which you would normally find in separate tools only: just look at the various relocation options. All in all, TLC has done a great job; I'm sure that both sides of the 8-bit scene will value his efforts highly. Now I'm handi d found it very nice! This was the very first music composer pack for me that came with full - and _very well written - documentation, tips and so on coming right from the author. The pack also included all needed utils and a lot of example songs (compos iles, including all sources for this version -- except for the V01.22 player itself, thank goodness. All I could send TLC instead were the source files of an earlier SIDwinder (to be precise, V01.20). Although those versions are indeed very similar, the icetracker, but I soon gave it up. I reverse engineered the code, but after doing all modifications to make the stuff compile and made it _start running on the Plus/4, _everytime I made just the _slightest modification, it crashed :-(. This behaviour sho ropped the idea, since it would have required the complete source to be included, of course. A few months later I received an email from TLC. He was planning to create a Plus/4 conversion of my SIDwinder V01.22, and asked whether I could send him the so eleased ever: back then the only goal I had in mind was to put those tools together as fast as possible, so that I can finally do something useful with my player. Besides, I could hardly imagine anyone willing to tinker with such old and useless stuff. to crack, but he succeeded in it; I must say, I was indeed amazed as I saw the first results! TLC didn't only manage to fully accomplish the Plus/4 conversion, but also improved my editor in many ways and fixed a few bugs that I overlooked. My packer ha e remained unreleased over the years. Then, just about a year ago, a friend of mine asked for the editor -- so I decided to finally release the SIDwinder V01.22 package to the public. For a while, I was considering whether I should enclose the assembly was utterly useless anyway. For a second time, he surprised me and the Plus/4 scene with a fabulous tool: his packer thoroughly optimizes the memory usage and removes every unnecessary component while compacting the music data. Furthermore, it comes with -------- (Written by Balzs Takcs (Taki / Natural Beat), creator of SIDwinder series himself) Some of you might be curious to know how the different versions of SIDwinder relate to each other. TLC kindly allowed me to waste a few words here about the b ng the microphone back to the author himself. Thanks for your attention. 01.03 Finally... ---------------- As Taki said, I had to re-generate the sources from the previous editor code and the disassembled V01.22 editor code, using some smart (Recommen ed by Taki) in loadable source format. ...I still haven't mentioned that Taki's player was really well optimized and had good effects to play with ;-). I think the opportunity of converting SIDwinder had some real points I couldn't have missed: the edit (C) 1994-1999 Balzs Takcs (C) 1999-2000 Levente Hrsfalvi Welcome to the documentation of SIDwinder, the ultimate SID music composer package... This text holds information about the story and the rather general things around this editor. Table of this, also few people were interested in the tools one could use for creating tunes on/for the Plus/4. After the early 90's, most Plus/4 sceners rather used 'converted' musics that were originally composed on the C64. Not much later, in around 1992, few ...I don't really know of such an attempt, maybe, only an old Future Composer version that was slightly modified to play through the SID card. ...Lack of interest? ...Maybe. Another reason could be that C64 music editors were really proprietary back then ers, lack of readable / even correct documents and so on. From the other hand, years have passed. Still nobody introduced a _really useable music editor for the Plus/4. The reasons, if we look for some, may be behind some facts. The main problem, the goȟop?oA#ɇ0<0075350<0375350<0375350<07<:75LJ0000LJ00 ʏ?C___?_>_C_i587____#ˈ2_>EJJEJ2_>EJJEJ2_>E_JEJ2_JE>>9>*Ɉ_0__0_0_/_//_/_1__1_1_0__0_0+Lj__ _______""_____ pV01.22 @` @`fk888gkk)))789')g 1'$$$_#Lj__$_$___)____#_#_____&0__0__0_0__0__0_/__/__/_0__0_ ! $.-8sAA Aa aa &AAA/!2!7!A_9>_A9_>A_9>_A__9__>݄;_>A_;>_A;_>A_;>_A__;__>݄:_>A_:>_A:_>A_:>_A__:__>݄7_<@_7<_@7_<@_7<_@__@___Ȅ_________ pV01.23@` @` f"ڿ *Ɉ_/__/_/_0_00_0_0__0_0_//_/_/,Lj____________ _*Έ0_7__578_8__7_5_8___;_87__>EJJ_J*Έ0_7_7578_8_32_0_2___5_67__>E_JEJ*Έ<_7_7578_8_8:_<_>___>_<;__JE_JEJ*Έ3___23_2_7_7;_7_5_:__8_5__> )HHHHHH8  #(16;B@BGG JOU[agmE &  _0_#Lj__ _ ___)____&_&_____'0__0__0_0__0__0_0__0__0_0__0__/_ ______&Lj__ _ ___)____&_&____+Lj__$$_______##_____*Ɉ_0__0_0_0_00_0_/__/_/_0_00_0,Lj__ _______&&___ H! Ka  Pa Va  \a ba ha n*PrP P@P PPP$@(C$1BB1 >$ GAJNA!SA#XP50P[@ &2& %% +4 44#g x iZK<-  %%$$1 PP__#„_ <_____8_<_____<__8__8<__Ʉ<__<__8_<___<__<_8__8<__Ʉ<_<___8_<__<8_<__<___<__Ʉ<_<__<8_<<_<8_<__<8_8<_<#„ _______________&Ą_<2_<8_2__<_<<_2__82_<&Ą_<2_<8_2__<_<<_2__82_<&Ą_<0_<8_0__<_<<_0__ ф-__+_-oooo__0_0___#„_______________Ą__<_<8__<_<_<<_8__8<_<Ʉ<_<5__5__5__5ooo__4ooo_ ؄4oo_2____4__4oo2__2__2oo_؄2ooo__2__4_5oooo_7oo_5__ۄE> pV01.22 @` @`ii )+++MMM++FJ pV01.22-Bc)JkLLLLLLLLLkhkkkZZ:=  gaa aa aa aaaa !aa (aa /aa 6aa =ADA ++_ _______'.__._.._0__00_0_.__._.._.__.._._'Ŋ.__._.._o5_e35o37o:h375oo__-Њ7oo378:c8:o878oo_58oo_f35o37ooc575oo__-_3oe15o35ooo_0_/.oo5_c35o37o:__5o7o+Њf:o>ң=_ӷ>ԣ=_շ>ѣ>_ַ>ң=_ѷ>ң=_ӷ>ԣ=_շ>ѣ>_ҟ>ї<>_ȉ&&+&++&+&&+&++&+ ű7oo77o7_ Ʊ7oo77o7_ DZ7oo77o7_ʉ2oooo_+ooo_/0_/0ʉ2oooo_7ooo_4554_ʉ2oooo_+ooo_/0/-_ˉ0oooo_)ooo_-0_/0ˉ0oooo_)ooo______‰&&Ɖ7oooo_7_77_7_77_!‰4_42_22_9_X͇2__>_679_9_9c46_42/_2_46_9_9_9d9;_962__24_69_9_6_79_j8;___;_>=_=_9_79_[͇2__>_679_9_9c46_42/_2_46_9_9_d79_2o-/_;_/-+-_9_m26_6_25___4u202___9_;9_Cχ6_9_9764_24_-__/2_6_6421_6_46__12_27;_;9_96_2_124_p0 yH'HF'HH'   9) ܬܬ$ v2  --??1A $(-27:=    &-4;BBFKBPUUZ`d IANASAA!XAA!^AAQ e[`cP- 444 "!"R!""!  >>  ,__,,_,_,__,,_,_,,_,__,_.ʊoo'_'ooo_`%oooo"_ooo_o,ʊoo_oooo)_ooo#_ooo"_o6Ίoo''ooo`%oooo"oo'o4Ίoooooo)ooo#oo"o/Њl8<:_f57o5_30578_0o/.Doo#oo"#Ԋ0__1_23_4__56_7_8__8_76_5__43_2_pV01.22 @` @`;;;;;;\ J&;;::  &;?EIL-4PU  _!‰_!‰$_ !‰&_$ʼn7_7_77__77_7_77_̉7_7_77__77_7_77_Ɖ7_7_77__99_9_99_Ή++++Ή+++7SVOΉ+++,_,,щ5747_;_=_=;_9__4Hχ6_9_9764_24_-_/12_6_6421_6_46_9_;_;79;_9_96_2_/25__4_2_____iˇO__L_M_SQO_Q_T__M_L_OMHM_NO_CЇ6_9_9764_24_-__/2_6_6421_6_46__12_27;_;9_96_2_124_47_;_=_1A1A_‰ ū7ooo_ ƫ7ooo_ ǫ7ooo____‰  BAA a AAA a AAA a AAA#A "A&AA+a AAA .a AAA3 8#A:A!@ 70~MwjDh{5:iaa jR 44(qj2U[򤱃:(SElJA4>dK# dQJ9 Qsmg=>Ad~K =<~x{~4vpsv[=U>?QPRUg„Cg$Dd%Ee&Ff'Gg ,Ll -Mm.Nn/Kk'ABCDEFGHIJKLMNOPQR pV01.22 @` @`kkLLLLHhhHlll STUVWXYZ}ڀ @k?@ACDEFSzݙ<]C6b#7~vxl|LqE8<'wÎ-X1w^Ή08d&z3Dfw鿬gևTd^}Dqe7Oy1ֿyJg!Wn6U ۦn3fLJgtzd` ~  tow,=(<<;һ@̋_*6_/129;ӯ@ԋ>>_-249979Ӌ@__0>_/>_=__/">>9>99!>>9>ы0__1_0_+01__ы0__1_0_+01!ы0]]1X0]+01XXң@_Ջ9/pV01.22!Bc)JkJJJJJJ\\99K9KKKKKK  ! ! ! ! ! ! "A). 4A@$ %?B-j~&/g79A*#+K)s{C2:m+<$C-<98…|\ .sϏ{hn>_%.h0  FQ  RQ  ^$ n!000pP P1Pb0i1/17t X*h>r __________ ů4ƣ4Ż4Ư4______ ǯ4ȣ2Ż2ǯ1____&__!_____&&________ __&44/2/4/4229;>ʋ44244/2494984;9;ʋ44244/4121/--Nj4__42_22_2_21_1_ʋ2472477/21244979ʋ44724779>7;99972ʋ77724774999;;Nj4__42_21_1_13_3_ _һ@̋444_4_44_!ы0]]1X0]+010ң@_Ջ/244_4_4_/">>9>99!>>9>!ы1]]0X1]+10ү<Ӌ;_79_9999_9_ү<Ӌ;_7999999_9/K8K  !''++00(6(>BP^lz  QQQ QQQBQQQQ QQQQQ QQQPQQQ Q QQQQQ Q QQ^QQQQ QQQQQ QQQlQQQ Q QQQQQ Q QQzQQQQ Q QQQ Q QQQApapaPq P0P`N _)Ÿ66ç44Ɵ66ħ6677§66ş7799)Ÿ66ç44Ɵ66ħ6677§665—42_9CLJ___&___!_!____#___________&_&_____!_!_!__DLJ___&___!_!____#___________&_&__"_$__________Rˇ_______________________Z‡6__66_4_4_4_4_6__6_66_66_667__77_6_6_6_6_7_7_79_99_9_\‡6__66_4_4_4_4_6__6_66_66_667__77_6_6_6_6_5_ }gmsyj ;m,t }P5XE>R! >+Ptie Ys?c(-3.bcGAZ* kn|V/ 6g|ww~?Duh T^k^gVA4FԽzR,u:_oL[隗~M;zaׁ^K:;/v= M&nR<~%g.rC _PA`!Bj!j!)j6mDG $8$L ?EA.=si+m@!}mE@ئ*'aj(`(.Ngx7;gBBxC|3h*7~S}]"Aazpڛ ܘoq($ "*   4109xH `,?4GϽzʽ 85LH*h`   *`` / /  / -J? %JG %J -ɀ  &-    &- # /. PA[v,Mjyx%5v{|ce,f;o‚} 7sw O>$ODuP5QtId>c`-6>H'Y}022}&{x[5C!^|G_*"0F!|ݱIvla4<͝yaR_:q(ًsr.#a#"? ``!> .f̞Sp*"bf1;2(xQ6 *=*qq/=*衞fj'it6AtP?0>UybHG8NZ̪lK#j Oj jp!,(,5̂~XWhw t}4.G V+ܫa( <2 > c݊ëXdUF1G}2շbm3][LLMڝ7VM]Uݨuj6Xm7X}6RM ;k09WۡvM~׭OD}Drøn9 oD؎ ih~*fgY/.p@ 9CYp@?{p?pӕ{iv3K/s+os:=@ħb\[/z?gzz_g8ޗ\'NWjAdnvȴ\6m qss^)7:|ܮo*c+0ȱ x'*AQ ڋ.iAx -Be1Il_tl)G8 =QmuxЁ" %bw x{˜pqO/}ְ3>x`8z\c¬[(e+q ڭ(~Y)8 rF'Edqp\ak$7G&39j@m< $Ȁ ֣Xr!:0C )]$TQ^qЙ&ƨR@1 E&`hb5лQdb-ҡ]=N>r^ky=KBL8Iup^U dFfh6n.`okⴜ@UmɁY"z$)9#At0bLYOE!8"1t6*D|IDMg9KE N,ӗ N$O[׵k{ lj^8w`|0}kd7p|-F\1*u#|qɫׅ 0=9'\394r+աKف`zɀ0S6#3C x\v2G%"sr'sr%ܰg/>NpٙBa٤ 1w[N(wuٟbA$)eޝ_gwo<pB#A0zN4C l8Svv'`Hb8`e)2]u0e2lh. (ⱁqna dC$!zgInv޼ǛwϹs0!1AQa"Bb3cDev7(): #e--..- ԥ-.h,>XLU" D .fsЩ?R:}F4>È4#`xMXΌD -- HRBt@A1:5k|5#B@ >BNgV CވC"dU.MHZ$ p Raإ 2ygx*|R84X܂&r?!b[%Z3rT<44=hNB1Td#񔊈_WnL16#P2]>A~FqjCO+JcNh;QI֤4pRFJ6@.c<V>E 0= =6Ve WWauA 0hA.s&.3,: ˆ| {@+ d+CRD!@#ׁBfZP##73_w2q8д|pk`XPE~*,2܋N~x| |]tOx'zYcÃ4($cpz@|x 8u xxԕFۇy5@ dz<3!kLAS$1l6F=x йL|H*B[ɫ@]]o/b7'o\t@o$ʐ>+PJA4Klf?pOh=gljE&S'@؇ϊZ)ZIZiѡNOOSuk/Z ":L|>CÎ|]w(.E,.m)bǕ6d*,X<[y_>8\WzH}U(N8_/?|ṹp}9n/'cnV]x˔ >y_sc{ͪ{+>uKuIJjKISHSL CZ 9m?@S{OppqrswGOW_gow}|xxyz{wà `!a"b#c$d%e&f'g(h)i*j+k,l-m.n/o0p1q2r3sA o=΅{ 6A3GFF!tŨ&%ZмcfQ)T&F#.''#."* X x5q.G*gNqA& mHmUM..lꦉH T PHDze1J% ͦr[h)Thȝ6m#~ز|ZlljpFgi}ƛSC߹}+3_w>>ȈV|pQǗ ZkGyk GzDΡxx>/04 I?d bίHCVḤԞ*uzPOt  4109xH `,?4GϽz$ʽ3 85LHZ*h`   *`` / /  / -J? %JG %J -ɀ  &-    &- # /. _ pppɍcs t` T :#BÒ!>grD9[=q!! gYy(՞:jYE}p133ΖzP> f:L09Yb!e'P}`CW_xxf,elj,al Ydb|C}Ι:g_~` cv8= h^BgcXYT{-vvp_x lggė=7ˤj@{vX,f;6v[Nَ˛6*hYOxxÿ$6#$At9HV"Q[C"UQX ab86Ӏk~G~G5o.ѐѬa*8@:P>0VXc@4'`3alz4?P#%r+&4Ƙ/TIz=RPFRp[fH3V?NGZ{>hI@)%r󐁆py`wE@n}s,|zvvNyżFj2K=}ޓQ} ܓƮyW.V?g\u F'^#®{h$@w|Z@i:DpCq V.㸂C_>eNz{3^HeJ1_T2_35_35_35_35|tg ut1?zLF@>0<! fFF#m>xޖLa;xD*FXj8[93t ZEF^v:Ui^eDqQ7Qrg7@Hˤ!aa<[b=-fd[Γ4z1!NRpE*a`H4 RR~Et A./eS SC)*.0]*3L%I ِdfBap@e_'Ղ@4ˣ H  U-OܧklzЖD  2)Kk0|D>c@o ,dY:|ph d'FZǦ= LRycj@=+gx1[Z 췏]NN==,kX{ @Kc7„Ng>~gHAG%+i;i˿ @@2/v#}Z|Dhك՗c4ֻOz^8D#o_x" 3x"g30< $8믍=iQij&.p@]Ϙלo>]wuSV$7S$GC$O3$S#$w&J> @ɔE\OLo ̜^9^:~:(x)$19*L, eaHf4R'}D Bm!&'R% “$ u%;reK)xԷ]tq,g,ٞ3V tJh*Ղv.꽷Ώh_.j-` ^Acdc3e8^nSI|+̀8{޹J|a Ռ #Sj>jq` #e--..- ԥ-.h,>XL  @0f` -_ .ABJ\^LhH .iHhO6쒐#BBv=S@VB BbāY& m]X60k Y'ɖ ]ZᗮD!ZMJaxV 帶\=fXF܀9ƉƻsN7.rYHu 1 Z-Mvc~*wJp9$h'/ίks;>!cc.Z柅jjr/!cŎQr{5 /hKx:r"8MGlrcr?ptOfD\ {r{>[~FD/kϦ'#-Ⓔ;Ͳ:SL,S":Hȧȅ8%d{,'PjȜqZ ec>4:9v#cGr,t"$tI>04;g'_~aٶWdxwGtcdQq; UQ/bzʑ=Dd 6t}S/'o$$霞~?|LgvSݬOgyzgg흜WYwevwvSVwdLNʞvG*w(UwȍX(,|ܬՋ"QjǽȡRȜ۲C((^p ;گӺm\(H8̺\(Ʃz\#z\6,98𯋓듦Nr{5v9_t{tw}{q~Bdr4&}_{.qwkp#}żVW#*0\_<հ^ RTVL$%xGj~xsT}(?!y"*0 c91o>#T@*9z@́ { gգ=X3գY~3|@IjskA *T!'&Utr[S]p+ 8.5;θ:ς>>5)Zx4Ǎ^>^TT{h(< Xޝ(7k7\ gaA>iQIXsg~V$WZ@ɆŔ#vRbNvRLU7ʨkn:y6k`&.B}qET3u;)>Q 'ko"=F%k|N*L.ex`JE2D5)`mlqox-xzjwD\ h vg?f2"MvX2S>82pzZ8C zsQ^@_ 8dx'鍎G VyNN&{0!98S耸_&;}ct:!srغӀ_,}tqkk} f_ٯMr |/,3@KHOмfػ ȩ }39+@Bъ vJTu ,)H/G!͗0x  +w߸_Yf@eYhglŖYe.[ ?-_v[=6[==leݖnlUh eye4,3`C`$/d;ߧd _{Z1SfbshƌV/P_qAjѴ\upm{FjѴX~ FuqAFyEF$cx-@^[G{\mz[qnǵGմq; lq`\0T::j@O:< CpqOR2:zrcH1'N x1@ 2/@)ivaY%u!u ۞:aP.X<>nh<>3?8+[(1C" AeU^ƿ^gf&L#`!tĦ}Op: T 2bBDJL/RVҙL!SQg+P]J3O+=[@:ő,Z %g9`ߊ~:O19,N}y&r(ڱu|y.V][kY'=H30d~z&Y2èz> g%N-xEA'%Mj>trU(1> rVh!H'@g%V>rR*GHevD >JF%2@6Av* sШ"(Î-Q԰ՠNBt̄cꎾ:<,<n5@]y\Fkn80 aq*u'R'D[|HqqsT:(p?D rX4=vERǽkVMlu֦VS}oXFK9낵R.('ԻWSU"3௯<.> &σ sP>}υnb>S3ⱅ|!5] 22ASIDWINDER V01.23PLUS4SIDWINDER V01.23&SIDPACKER V01.23ASCII TXT VIEWERSID BASE RELOC. } DEMOSONGS }} BY TAKI / NB }SPEED UP .DAT PRECISELY .DATSOUTHERN .DAT GLORIOUS .DAT LOST LOVE .DAT  DRUMMER .DATRADIATION .DATMEMORIES .DAT UNCERTAIN .DAT REALBEAT .DATCLASSICAL .DAT DRAXISH .DAT } DEMOSONGS }} BY LUCA/FIRE } STATUS QUO SWEET LULLABY } THE DOCUMENT }} SUITE }} USE THE ASCII}}VIEWER TO READ}} THE TEXTS } READ ME FIRST GENERAL INFOYFOR PLUS/4 USERSOSIDWINDER V01.22HISTORYSUMMARY OF FEAT.SID BASE REL.ASM SID BASE REL.ASM  RELEASE DATE  2000.03.15   4109xH `,?4GϽzʽ% <85LH'*h`   *`` / /  / -J? %JG %J -ɀ  &-    &- # /. vFW"6>U KwA3{R@eȁ1ٕє!͙٧]Q1 ,[۲/[X\Y]8ɼ ӦmJCKx+; iL' %*:x[b KcffxNf7Y/k#{o .8閹\2svLqQ!!IrT ֲib>04TI3]!ͥZ$n s/4q&SvVUę(z.@0GX!a#/GK% .4̭hPfd@JRB q 1234567890`ji0ԐLD}8 ,=`HV(1Ra`JUKpTT6ټM? F4 = OuB@$3%CG$r)wЍnuI.j˩tQ.kK5(7 ttpyh9i 3dZ[@uFg(C~H@ʷn- UPK-+VbNhb4C~:Tr=oCXeٶMp4F#~MкPoO8]Z*]D(N]U4'@z_v&o|5^ǎiD@c0]i+E2df&k1SK֛fPeoKZD5U\uA*ƵLJ>=X'2BOLm ȡ!b |wKD65bm|k ıb&-ڰc@+L KlZ[i+p;`?mp-n/G,ǻ{t@+C֤ >NT]~UuփQpuU։ȱquRJaAގ DʒQH9FPO;:3".: 1@u2,]I.$iǨoJlƳ=JDRB))]lm fbJڽfv6S7|ΡbLij EtJlMzMĆEDSq#0ͳK}X'LJu΀)] )tXB=e,EI#0<e** RA%L3ңN=.hS0=Qrs r9SD˜4uS@k%LK`%k@>H! , n1eLUMzSz|4=gG|3wy aY1Ki,T.8%\SC?@H+7H,!#IoEH,h9;4l#3^Y&G :FJ= `&HʏOMSDj|&gGb[hd2kɧ\%rw'r{>h&Ğr}V'r*@h.. T`p:sOX^WLގN]sarM !0$ƸZ~ԃB1M ` =l %Opm0g*zPl'rR)H&.6I -%$6+, 0Kx׃πkςDM15&Tx&kabcGAZ+o k!n|V 6|Ϫ R_9:(t'4@L/B35įAs+K?Ӡשـ 3"kr]N'Ʀa3D'Bx}>/XmƼM~ٌ!>j\j.Z1d)3'@[wvHGvAVM;Ngn&' #e--..- ԥ-.h,>XL   -0 *.1h OџTR8-JcN8I_=O?O`g~~g6~ηg^~gnm)\wtuL @ @vs!Dt 77O/J!#AL|1S @:|49?.pNz/th-2Ep4GטPϹDx3&\wWe~ŷ\b:]\8ElIayp҆n1]㊽]7Ɩԁ{gCIF1]m`Cx1eM((P)lu9pnZNZ^ӖÔtp tU,£ Aʨ9m9B9X,9sU֛ ie, z:-7B8ۺ33hNn3ӔÕ*+W9X=%>NS_NSoIC+ӕ/S!RA,0ϋ|:7s|,5kB<;sth?u5}~K""N$77 M"hrTUxdphzGADTodjJL"r$/eޅХ$`2.}$NQHtnGՉ6bJ>mMm] rғI+ UVHBz&;_l]h{a 8ת6OFι,dOаcL0Nm0T`oLoMhToۅ;~ KjLԚЛY:lŎgm5Kqʟ{:T>:$oU&}~kE3)g?^Vu`&J+"_ YeJFQ$xSevJ4enOq#=D+Jx2)7w\Cւ}* (b ^H. i &zIaٓ#0hbhس:lxb*Hi:$$p;$p<I$^$9$&bl˱ !c >> h H'#H -!ю=$$+d( exp$$b%B-[v$$"B$}",}#G4$Am$o$  "B%B-B,rԑ>?ʽ/c3%JJIY10_rN>(uTĔ)FHoDY#(c)#|@UFuZǑqi }!}!]VF%5-ѥkF9*<H6DWZަypowh~IRn$p8ց;\f~{D\uss : ȭܑNfq"q*g 0@X6R${n4@p@3+!b7UQ]K飀 C=[ 6K<\9<\SoɮW-^fK  -Vs*t6"=)GC> Тmgp(Dvݎd k;Imگ4!@$6-s G%fH]!_Q02!\Rq,)-D[ EaEb3cDev7():}gmsyj ;m,t }P5XE>R! >+P rn#9_>:r[:,uh_Wx}pvoƺ&C' . Xg!WDk%,L}̚0c6@Ϧ3Ӓuo9+sO):hmZ):jm ڰ]И>-3b3;>k/dz2Cc>KE+ "u"]}3Im<ԡӥxf!~g[Z']h܍\kZ|sƷG7~g둶 k)u7FY՟7}^k3t'˷|LW.Iڍۚ8 gܔnՍِZÆpU zp?2 EߐG|ky^ծ9 U 5=Eu"B2B+UcCM_>M_>M_M_>M_>M_>M>>>/ʉ_________5M_>M_>M_>>96M64׉7_:EE57:_57c:<_><:7_:/7776_642_IIII2׉757:-:73_20.2_32i07_2_03532_46_904׉7_>@;6<>A_><_:752_7:>_<:9_9>_IIII1׉7~>>&-_7:i:>_<:97_2577:9_976o_KKDʼn5-_(O0ń#0։LJHC<7(:73D.375962>967962-269L:9pV01.22 @` @`;;;;;;kyIJ*  %*18EA A  A A  A A  A A  A A  !AA(A/3A8=?Cq{7L pRXWtJ@K%~ 8' !3qfs](Zmx^q ɟ V|pQǗ kJyC Z\Nz> $xzMa'L,꒍zdD &,2JOVZ   ELAATXAAcp@Zc 0^ - 99 f D "  00p!!w@*())))"A"A"AM_M_>M_>M_>M>>>3ʉ________FMMMÉ<>M40M>>É<>M0_0M>>É<>M9+7MMÉ<>M>>‰AA*҉7__77__77__75_5_7__72__29__96_Blj7>77>77M75>57M72M29EE(0AUUĉR&$RRE#ډ7>:>7>:>7?:?5<9<7>:>2:7:2969>9693ʉ_ _ __ ____Blj5>55>53M37>32M29M96>69M93܉5-0354523!37:7732-26;269469>7923܉5<95I}0laR  33## S ' ?޼  veTC2 qq*\P&ͫ"*\,'\j~~V .  &-15- .::?11B..   pV01.22#Eg3Uw  L<< :KK;YIIII    !!/ADA! ! ! ! ! ! $A,a/a3S 5A=A @A $[.. ..! --y$=$Q   c  d g###11BB+# ._-_ß5>555>555>554=_¿9999997_"59>_595_59>_595_59>_595_47=_Ŀ210/._-_)̏2_527522_252752_2____221_-+-___1)̏2_527522_252752_5_.02_59_479_+-_#Ώ_&%_$#__"_"___! Ͽ@BDFHJLNPRTVXZ\ZXVTRPNLJHFDB@>$ي<>@BDFHJLNPRTVXZ\ZXVTRPNLJHFD_9_6ˊ_!_"___"_!6ˊ_!_"4_5_5_55_5_4_4_44_4_4_44_4_'݊4_4_44_5_5_55_5_7_7_77_5_5_55_4_6ˊ_$___!_""_6ˊ_$___!_!!_6ˊ_$____!!_*ۊ<___@>___+HOL;_;_MHQM;_;_QHQL;_;_MJRM;_;_J+HOL;_;_JHQM;_;_OJRO;_;_MJQM;__5  <,,,____Nj____-__--_-Nj____ȋ00__//_/͋_-_c+-___+(&(_(+/͋_-_c+-___0_-e-/_/-+͋_-_c+-__02-02_)_+͋_-_c+-__/02_d-/_/-+ҋ0_0__0___ҋ0_00_0ҋ0_00_pV01.22 @` @` FG''GXXXXX;;IIIIJIIJLX   $*.1*5::?EKQW]ci:lpvl|  FA LA RA XA ^A djAAnA qA w A&0ePE PEp}`n pySP#11BBBB?BӼ- o R5NA A A _ 210/_""_!!@ˏ_&_$#_""_!ѵ_Ί!rĿ210/._-___/̏2_527522_252752_5_.02_59_479_+-_يELT*ˊ_&__"____"_!,ˊ_&__"__!_!_!!_(Ҋ__!_!_*ۊ>___<>_A_A_><_9_>_@__>_A_A__A_@_)ފ>___<>_A_A_CF_F_E____CA@______9_*ۊ>__9<>_A_A_><_9_>_@__>_>_A_A>_9=,ފ>__9<>_>_>_<>_>_@_@__A@E_____NLJ'ӊ4_4_44_5_5_55_5_4_4_44_5_5_55_5_&݊4_4_4_<9_E___C_@A_A____<_*ۊC___C_@A_<_>_>?_@_@__9;=______9_+JQM;_;_MJRM;_;_OJRJ;_;_MJPJ;_;_Q,JQM;_;_MJRM;_;_QJQL;_;_JIQL;_;;S3ي<9D;_;]WS[Q;_;ZDG?>;_;XZT^M;_;;S2ي;>J;_;UZ\RE;_;\CGAG;_;OKUPM; ##(/29>CHM%%R  -__-____-__-__+_Nj____-__-____-__-_+Nj____ȋ____________Nj_____-__-____---___+_ȋ_________ȋ--__--_+Nj__ __ȋ-0_ȋ--__---___+_ċ-__-____-__-__-_ŋ0__0____/__/__/_̋l04-oo_(+-d02o_202+̋-ooo___+-o_79o_̋l04-oo_(+-2o02g1420̋4oooo__79oo__̋0oo_-o02_2o5o42_̋0oo_0o-/_+o/o02_ pV01.22@` @`p\W'7IJ6(W(  "0AA !!!!!!!!! AA"!!! $ +.0as@!P pA DD_ ____ ȯ_ć_LJ __LJ_8_85_5::___LJ_8_85_555χ0_.0oe.2_2_2._)_χ0_.0oe.2_2_.235_χ0_.0oe.2_2_257~35LJ______ЇH<__҇H<__pV01.22 @` @`    ;99999yIIIIwWWWWWW   $(+aQAa a aaaa$AA,0A 2A 7A 9@<;<9A@<9>7 <9A@<9>7 <9A@<9>7 EECEECǏ9<@9@9<@9<>;7.‡_<__<_<_;__;_<__<_<_;_;;6‡_<_<_<<_;__<_< oqɉ-----+----+_щ00/-o-+-o-+-oo/o"ɉ---+---+ɉ________ɉ_______ɉ-----+---+щ00/-o-02o2--oo+oщ0oo-_-02o20-o-/oщ0oo-_-02o2+-/o/o22"ɉ55557777"ɉ9999;;;;ԉ-oo)_+)+o+_/2o/oԉ-oo)_+-+o+_+/-+oՉ0oo-_-02o2_//o/o"ɉ050050272272 pV01.23 @` @`   ,Rh)|||(( +$( ++++$GAqQ   A# %(!!! !+!!! !0!!! !5a;! !!=E 7<<<>:ƿ<_______25{7~3{7~3{7u53o5__5u7~355355{7~3{7~3{7u5_;ćŗ^ćŏ^ćŏ^Çŗ^ćΏ Ώχ Ώ˟ Ώ Ώχ Ώ˟ Ώ Ώχ Ώχ ǿ3_0_)+'_0_+_)'._%5{7~3{7~3{7u53o5__5u7~35և535<͗..ҟ0v7̗7͇7̏:͇:202..5̇22͇25+.520.=̇..`.0ҟ0v7̗7͇7̏:͇:202..5̇2͏205̟+͇.55202._<<<>:ƫ<___<<<>:97?>oo_&<<<>:ƫ<___<<<>:97?><ƿ:_X_׏57355735___5725~0~3~.~2___57355735___5725~0~3~.w2o_ӟ0շ.___2ؗ""$v+++..&$&"_")&&&)")&$"_2؇""`"$$v+++..&$&"_")&&$)#35Ώ·ɇȏȇ SIDwinder V01.23 - an ultimate piece of SID music editors (C) 1994-1999 Balzs Takcs (C) 1999-2000 Levente Hrsfalvi The songs - "Speed up" - "Precisely" - "Southern" - "Glorious" - "Lost love" - "Drummer" - "Radiation" - "Memories" _<<_;;+‡oo_ooo_ooo_ooo_o.ɇ__<__<_<_<_;___<__<_<_<_;;2ɇ_<<_<_<<;_;__<<_<_<<;_;_oo__________ʏ:97?>oǯ0o23o.0o2ʿ+o*5{7~3{7~3{7u53o5__5u7~355355{7~3VΏ Ώχ Ώ˟ Ώ Ώχ Ώ˟ Ώ Ώχ Ώ˟ Ώ Ώχ Ώχ VΏ Ώχ Ώ˟ ӿ3_0_)+'_0_+_)'._<͇..`.0ҟ0v7̗7͇7̏:͇:202..5̇2͏205̟+͇.55202.5{7~3{7~3{7u5-Ώ·ɇȏȇΏ·ɇȏ-Ώ·ɇȏȇΏ·ɇȏΏ·ɇȏΏȇΏ·ɇȏȇ'"))&$&"_2ٗ""$v+++..&$&"_")&&&)")&$"_4ه""`"$$v+++..&$&"_")&&$)"))&$&"___9؇""`"$$v+++..&$&"_")&&$)"))&$&"ۿ._____3ه""`"$$v+++..&$&"_")&&$)"))&$&"__ 5{7~3{7~3ڏAC>A The following text files are included (at least, in the source edition): - README, this file - COPYING, the GNU General Public License, under which this package is distributed. - GENERAL, general informations on / behind this package (story, ed er version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more  INSTRUCTIONS FOR TAKI'S SIDWINDER V01.22 (FIRST PUBLIC RELEASE) Version 1.1 (minor patches to V1.0), 30 Jun 1999 Copyright 1994-1999 Natural beat Chapter 0 Disclaimer This program is distributed in the hope that it will be useful, but WITHOUT  SIDwinder V01.22 package in the following two paragraphs. BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THIS PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,  E, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL NATURAL BEAT, THE COPYRIGHT HOLDER BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMASUCH DAMAGES. Chapter 1 General misinformation 1.1. A word of warning Well, now you're probably happy to have one of the best musicplayers available on the C64 scene. I guess you'll be quite disappointed very soon. Of course, this package is fully  use only, so I didn't care much about its look and feel. I coded what I required, but nothing more -- you should be pretty good at basic hex and binary calculations, for example. In addition, if you wish to utilize the most advanced features of this p player may seem to be completely useless: if you don't make use of its advantages, you can create a tune of the same quality in other editors with much less trouble. So please remember, my player is only as good as the musician who uses it. Oh, before h the editor (in that order). You have been warned. 1.2. Brief list of features * up to 32 subtunes in one music file * up to 96 sectors (256 instructions per sector) * up to 64 different instruments * up to 10 times music speed (supported by theitor/packer /ASCII viewer info, infos for Plus/4 users and developers etc.) - HISTORY, history of changes (including info on the pre-V01.22 SIDwinder versions, thanks to Taki). - PROGRAMM, some hints for programmers. - PLUS4, informations foe pack. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any latdetails. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ANY WARRANTY; without even the implied warranty of merchantability or fitness for a particular purpose. In case you didn't get the idea or you're a lawyer, please read the rest of this chapter. For the curious ones, let 'THIS PROGRAM' denote the whole EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THIS PROGRAM IS WITH YOU. SHOULD THIS PROGRAM PROVE DEFECTIVGES ARISING OUT OF THE USE OF THIS PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR A FAILURE OF THIS PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF functional, I didn't hide any 'nice surprises' which you first encounter right before trying to save your opus magnum. However, please notice that this is definitely not a user friendly music editor. Originally I designed the whole package for internallayer, you must learn a few tiny but important details of its inner operation. Using my player, a good musician can beat most -- if not all -- of the popular routines, both in sound quality, rastertime and memory usage. In improper hands, however, thisI forget it, please also remember to follow these steps before you sue me for creating the worst music editor package ever: - read all of these instructions - read all of these instructions - read all of these instructions - start playing around wit editor) * four step-programmable effects (arpeggio, filter, pulse, vibrato) * volume register ($168E) for independent external volume control * automatical hard restart (with first frame skip) * multiple player entry points ($1003 for the first call r Plus/4 users. - SIDW0122, the original documentation of Taki's SIDwinder V01.22. - SUMMARY, summary of features, keys and commands (was mostly edited from Taki's document). Initial version. Should always be actualized with every release of th 003 routine and $10 lines for the $1006 routine) * highest warp speed in the Federation Starfleet (up to warp factor 9.95 in emergencies) :-) 1.3. General functions Okay, get down to the business. First, let me cover a few general keys: F1 p $1F left arrow track+sector screen / sound screen , . / toggle on/off SID channels 1/2/3 The first few ones are fairly common in many music editors. Pressing F2 will start playing the selected sector (on the first channel), useful while testing your nt will be selected, in other words, all the following notes will be played on that instrument. You can use the liveplay mode on the sound editor screen as well: select the desired test note and instrument (see section 3.1. below), then press the SPACE  one single music file. These tunes share the same set of sectors and instruments, but each of them has its own track arrangement, thereby providing a convenient way to compose soundtracks for games. The three keys between M and the right SHIFT are assiugly noise on the supposedly silent channels, a couple of reserved values in the arpeggio table, and a bunch of musicians taking me for an idiot :-) Chapter 2 The track+sector screen This screen is made up of three track editors, a sector editor, a sp2/3) This is quite similar to the track editors you have seen in a number of other music editors already. The following instructions are available this time: + Tr+XX (transpose up by $00...$3F semitones) - Tr-XX (transpose down by $00...$3F semitVS (halt volume slide, keep the current volume) SHIFT J JmpXX (jump to position $XX in the track table) Except for JmpXX, all these are one-byte instructions, occupying as little room as possible. If you start a volume slide, it will automatically(you should not) issue them for more than one track a time. For technical reasons, there is a predefined order for these instructions that you must follow. The general idea behind this hack is that you would never put a transpose instruction right behi every frame, $1006 for any subsequent calls within a frame) * maximum effect resolution (every single $1003 or $1006 call updates all of the active effects, including glide/slide) * low rastertime (a practical maximum of $14 scanlines for the $1 instructions: one JmpXX, one of IncXX, DecXX, HltVS or VolXX, one of Tr-XX or Tr+XX This is not necessarily a sequential order, but the order of execution (unless a JmpXX is executed, the two orders are the same). Either one or more of these itemslay/restart actual music F3 stop any kind of playing F5 continue stopped playing F7 fast forward (while held down) F2 play a single sector F4 enter liveplay (sfx) mode F6 select next subtune of $00...$1F F8 select previous subtune of $00... chords, for example. The F4 function must sound familiar to some of you DMC V4.0 users out there -- it allows you to play the notes you type into the sector editor immediately. Whenever the cursor crosses a Snd.XX instruction, the appropriate instrumebar. Warning: as both the liveplay mode and the sector-player operate on the first SID channel, please make sure that this channel is switched on before you use these functions. Using the F6/F8 keys, you can select one of the $20 subtunes contained in gned to the SID channels, respectively; pressing one of them will switch the corresponding channel on or off. Since this function is not implemented in the player itself, I was forced to use a quick and dirty hack to mute the channels. The results: an ecial table for the glide/slide instructions, a disk menu and a few further displays. Each of these may be accessed by pressing SHIFT together with a number key. In the next few sections we'll discuss them in closer detail. 2.1. Track editor (SHIFT 1/tones) SHIFT S ...XX (play sector number $00...$5F) SHIFT V VolXX (set a constant global volume of $00...$0F) SHIFT D DecXX (decremental volume slide at speed $01...$07) SHIFT I IncXX (incremental volume slide at speed $01...$07) SHIFT H Hl continue until it reaches either silence or the maximum volume, unless you issue a VolXX or a HltVS instruction (in which case the volume remains constant, of course). All the volume instructions produce obviously a global effect, so you don't need to  nd another one. The same goes for the volume slides and the jumps, too -- you never require more than one of each in a row, except for the sector replay, of course. So, in my player, a sector replay may be preceded only by the following ordered list of (jump, volume control or transpose) may be missing; if they are present, however, they must appear in the order defined above. It also implies that you may not jump to another JmpXX instruction, but I think that wouldn't make much sense anyway. Please ter all -- just believe me that you won't like the results. 2.2. Sector editor (SHIFT 4) You may access the sector editor from the tracks by pressing SHIFT RETURN, too, by which combination you may as well return to the track editor where you came from lect a sound/instrument of $00...$3F) SHIFT D Dur.XX (set note duration to $01...$40 frames) SHIFT V Gld.XX (glide ($00...$0F) or slide ($10...$1F)) - ------ (a delay unit, plus release actual note) SHIFT H +++ (hold actual note, stay in s actual sector Nice, but where are Vol.XX, Rel.XX and the rest of your favourite instructions? They were sacrificed on the altar of simplicity. Yes, I removed them, in order to reduce the rastertime -- in return, you are granted as much as $40 differentmany other way than just emulating those instructions. Like in DMC V4.0, the Gld.XX instruction may perform two different tasks: let's call them glide (Gld.0X) and slide (Gld.1X) to avoid confusion. Gld.0X must be followed by two notes; the instructiondoes not directly contain a glide/slide speed. Instead, it points to the corresponding line of the glide table, containing 16-bit absolute glide speed values. The moral of the story: now you can glide/slide as slow as you wish, even in a multi-speed mue it. By the way, please don't use note duration values below $04, as this may confuse the hard restart routine -- nope, unlike you may expect, it won't switch off automatically. If you wish to play sounds shorter than 4 frames, do it with the arpeggioad of the hard restart routine to the current sector, saving lots of rastertime in certain cases. You can circumvent the problem by aligning your sectors to note strikes (if you require a delay before the first note, please make the previous sector appr ou may use this sector just like any other one in your music (the player itself won't mind it), but then don't expect the liveplay mode to work in the way described above. If you positively need to use even that last sector of the memory, take my advice and don't press F4 while sector $5F contains valuable data, since it would cause a few bytes (normally required by liveplay mode) to be overwritten. There's a similar rule for sector $5E: as a default, it's empty. You may write whatever you wish into i notice that the editor won't warn you if you violate the rules -- it isn't user friendly, remember? Assembly programmers don't need to be forced behind rules, they know what they're doing :-) And please don't ask me what happens if you violate them af. If you press SHIFT RETURN on a track instruction that specifies a sector replay, the editor will display that particular sector: it seems to be a little bit user friendly after all :-) Let's see the keyfunctions available here: SHIFT S Snd.XX (seustain stage) SHIFT E Finish (also known as -END- of current sector) SHIFT + or ; select next sector of $00...$5F SHIFT - or : select previous sector of $00...$5F RETURN copy the whole actual sector to a buffer up arrow paste the buffer into the  instruments. However, if you just can't live without Vol.XX and Rel.XX, simply duplicate a sound setting and change the appropriate ADSR values. Although it may seem to be complicated, if you are creative, you can make use of the extra instruments in  starts a new note (the first one), then glides towards the second one. Gld.1X requires a single note; this instruction keeps the actual note and slides towards the note you specified. Unlike in DMC V4.0, however, the second digit of Gld.XX's argument sic, but you're stuck with absolute (non-adaptive) glide/slide speeds. Probably it's needless to say, but my player features a hardwired hard restart, which means, you can't switch it off -- on the other hand, I can't imagine why you wouldn't want to us table instead. For technical reasons, my player issues a hard restart automatically at the end of each sector; that will cut any active notes, of course. I guess some of you won't like this feature, but this way it was possible to restrict the lookaheopriately longer instead). See, I told you it won't be easy to use this player in a proper way :-) Sector $5F is reserved for the purposes of the liveplay function. Please don't modify its contents unless you really know what you're doing. Actually y t, but please remember that this sector is responsible for the silence of the 2nd and 3rd track while a single sector is being played or the liveplay function is active. Much like in the case of track instructions, sector instructions must be issued in  you know the rules, but why this order restriction at all? Well, if you may code the order of the instructions into the player, you'll get a lot less cases to examine in the track/sector routine, which makes the whole player a couple of rasterlines shor king? Why not let the packer take care of the dirty details? Well, I've seen editors that make it this way, and believe me, they're a pain in the ass. Once you think all your instruments sound perfect, then you pack your tune and... damn it, the hard  requires a bit of extra care while composing. 2.3. Trace values If the speed of the current tune is 6 times or less, a couple of parameters for each of the three tracks will be displayed here continuously. Here's what the mystical abbreviations stand ntil release (gate off counter) The Sector Length value is another useful piece of information, displayed right beside the parameters listed above. It shows the full duration of the actually edited sector in frames -- hopefully a handy tool for eliminaf the actual note into account), the glide/slide speed depends on the note being played, too. Yes, I know it's a bad idea, I'll make it better next time :-) 2.5. Disk menu (SHIFT 6) Use the cursor keys to choose your favourite one of the following iteorter, of course. This packed data file does not contain the player code yet, it's only a bunch of sectors and instruments. It's convenient to use as long as you edit the tune; it's loaded and saved pretty quickly. For technical reasons, however, the cker. (A little hint to all you volunteers out there: before trying to hack a new packer together, please think of supporting all the features of the current one... If you seriously consider coding a new packer for my SIDwinder package, I'd like you to etc. As you expected, however, my great packer won't let you edit this field, so it must be patched manually -- well, a good musician should be able to handle a disk editor :-) Feel free to change my signature after you packed and saved the final version of the tune, but please leave the player ID alone (change only the $20 bytes from $1020 to $103F). Thank you. The disk command option should be fairly obvious; you can issue here almost any standard DOS command, plus you may enter $ to display the a predefined order. Please always follow this structure: one Snd.XX, one Dur.XX, one of glide, slide, ---, +++ or a single note, one Finish Of course, only the third line is mandatory, one or more of the remaining items may be missing. Nowter. But why does the musician have to know about all these details? Why not create an editor-player with no restrictions, making the life of musicians easier, and an optimized production-player, which would replace the general editor-player during pacrestart on the bass fails again. Sometimes even the slightest differences between the timing of the editor/production players can ruin your favourite instrument. Therefore I decided to keep the very same player after packing the tune, even though this for: TRK actual position in the track table SCT actual position within the played sector SND actually played sound/instrument number DUR current note duration (measured in frames) ACT frames left until the next sector instruction OFF frames left uting the infamous 'shit, that sector must be too short' effect :-) 2.4. Glide table (SHIFT 5) You may specify 16-bit values in this table, the glide/slide speeds. Since the glide/slide routine uses these values directly (without taking the frequency oms: Load file load music or data file Save data save compressed data file Save tune save damn long unpacked music file D.command issue a disk command You can save the music either as a bare memory image or in a packed form, which is usually much shSIDwinder V01.22 packer doesn't understand this file format. So you must save the tune as a memory image first, if you wish to pack and use it as a standalone music. I'm sorry for this inconvenience, but I really don't have the time to code a decent pa contact me first in order to discuss a few non-obvious technical details.) Speaking of the packer, probably you know that most players feature an ID field at $1020. Here you can sign the music, leave a nice message to the ones trying to rip your tune, directory. You might even want to do tricks like $:*=U (guess what it does!). Please always remember to fill your sectors and instruments sequentially; when packing a music file, all sectors and instruments following the first empty one will be lost.  om the editor, only the ones used by the new tune. If there were any further sectors afterwards in the memory, they will remain intact. You might consider this either a bug or a feature; if you now save your tune, these old sectors will be saved togeth that red reset button and reload the editor -- instead of trying to clear everything by hand. This is the safest and easiest way, not to mention that it saves you from the temptation of ripping some instruments :-) 2.6. Music options (SHIFT 7) Press  n one track table you should store track arrangements that belong to four subtunes. For example, the track table you use for subtune $00 can contain arrangements for subtune $08, $10 and $18 as well. To separate the arrangements found in a track table,rack of subtune $09 (as they share the same track table). Likewise, if track 2 of subtune $05 occupies the area between $00 and $16, you would use $17 as the start position value in the case of subtune $0d, track 2. I hope you got the picture. (Of coure misaligned, the memory inbetween will be simply wasted (even after packing), which unfortunately does matter if you have only 64 kbytes of it. If you don't believe me, ask a C64 demo coder -- he will convince you that the most serious bottleneck of tay: simply load the appropriate number ($00...$1F) into the accumulator and call the init routine at $1000. If AR contains a valid subtune number, this call will figure out the correct track start positions and fill the internal pointers with them. By tsubtune. The value you enter is actually the number of $1006 calls per frame; for example, set the speed value to $07 if you wish to compose an eight times music. As these speed values are saved together with the tune, even the packed tunes contain the such a music driver doesn't exist yet; not even my Cubic Player knows the trick (for good reasons, though). Chapter 3 The sound editor screen This screen contains everything you need for creating high quality instruments: a sound editor with room for $40 presets, four tables for the step-programmable effects (arpeggio, filter, pulse and vibrato), plus a glide speed table and an overview of the track start positions. As usual, you can enter each of them by pressing SHIFT and the corresponding number Warning: if an instrument contains a zero ADSR envelope setting, it is considered to be unused and will be discarded when packing. There's another quirk in the way the loader operates. Loading a new file won't erase all the previously filled sectors frer with the new ones (which is probably not what you want), but this bug may be useful for importing sectors from another tune. You decide. On the other hand, if you're about to start composing a completely new tune, I'd strongly recommend you to pressRETURN to toggle between editing the the actual track start positions and the music speed. Track start positions make it possible to place more than one subtune's track arrangement in one table. There are eight track tables for $20 total subtunes, so i we use track start positions; each subtune has a set of pointers that show the actual start positions for its track table. If you, for example, used the area from $00 to $35 in track 1 for subtune $01, you would set a start position of $36 for the 1st trse, in case you don't use more than 8 subtunes, you may just stick to the $00 default start positions and forget the rest of the story.) As you can see in the example above, you should align the arrangements tight to each other. If your arrangements ahis computer is not its lack of CPU power or graphic resolution, but the limited size of memory. So please be kind to demo coders and spare as much of the track tables as you can :-) After packing, you can choose the subtune to be played in the usual whe way, while you're in a track editor, you may press the pound key to set the track start position to the location of the cursor. This function operates separately for each track, or course. You can press RETURN to set the music speed for the current m -- that means, a clever music driver could be able to determine the speed required for each subtune. This speed table is located at $1692 after packing, plus you can find its length (the total number of subtunes) at $1594. As far as I know, however,  key from 1 to 7. 3.1. Sound editor (SHIFT 1) The upper few lines of this screen belong to the sound editor. Apart from the bytes of the current instrument, you can see here a help display. It will give a brief description of the actual value selected t next/previous instrument of $00...$3F SHIFT +/- increment/decrement pitch of test note SPACE test actual instrument (in liveplay mode) RETURN copy the actual instrument into a buffer up arrow paste buffer into the actual instrument SHIFT RETURN  filter, pulse and vibrato). The first two are the usual envelope settings, of course. The gate off counter specifies how many frames the player should wait before starting to release the given instrument. If you set this value to zero, the instrument  hat the note will be released, it merely lets the counter run. If the no gate effect is active, the release phase won't begin until a hard restart (caused by either the next note or the end of the actual sector), despite any other sector instructions. (it may only do an AND #$FE on the waveforms you specify). On the other hand, this usually requires a longer arpeggio program, especially in the case of chords. I'm sure all you DMC V5.0 users know what I mean, it's just one of the nice misfeatures of  for the selected instrument begin. If a pointer is set to zero, the appropriate effect will be inactive, except for the arpeggio (which is always running, of course). If you set the pointer to $FF, the effect won't be initialized, in other words, the pin to return to the sound editor. From time to time you may wish to hear your new instrument in action. You can use the liveplay mode here, too: press F4 to start the player, select the pitch of the test note by the SHIFT +/- keys and press SPACE to he WF $00...$8F -- current waveform = WF, arpeggio offset = AR $90...$FE -- repeat last waveform with a new arpeggio offset $FF -- jump to the position specified by AR AR arpeggio offset or jump position As you expected, the meaning of AR dep note of the instrument and the note actually played). WF values from $00 to $8F specify a waveform, just like in DMC V4.0 and similar editors. The remaining values would be useless as waveforms, so I assigned a repeat function to them. These bytes cause the last valid waveform to be repeated WF-$8F times, with a new arpeggio offset. Using the repeat commands, you can spare a great deal of space in the arpeggio table, especially in multi-speed tunes. For example, let's see how I would program a nice by the cursor, thereby making it hopefully a bit easier for the poor musician to navigate in such a jungle of hex numbers. (Who said this editor wasn't user friendly anyway?) Well, let's take a look the keys available in the sound editor: +/- selecenter effect table (selected by the cursor) An instrument consists of a sound preset (which is seven bytes long) and a few programs in the effect tables discussed later. These seven bytes are: AD, SR, gate off counter and the effect pointers (arpeggio,will remain in the sustain stage until the next note appears (no gate effect). Please notice that a +++ sector instruction always delays the gate off event (it temporarily freezes the value of the counter), while a --- instruction alone doesn't ensure tThat means, the gate off counter has a kind of priority over the --- sector instruction. By the way, you may turn the gate bit off directly in the arpeggio table as well: this is the top priority, as the player will never turn the gate bit on by itself Brian's routine :-) In general, the preferred method is to leave the gate bit on in the whole arpeggio program, and let the gate off counter turn it off for you whenever necessary. The four effect pointers define the positions where the effect programsreviously active effect program will continue to run. Again, this doesn't apply for arpeggio. You may enter the effect tables via a shortcut: choose the corresponding effect pointer by the cursor keys and press SHIFT RETURN. Press this combination agaar the result. 3.2. Arpeggio table (SHIFT 2) Accessible from the sound editor alternatively by pressing SHIFT RETURN on the arpeggio pointer. This table consists of three columns (## WF AR), which serve the following functions: ## index of position ends on the WF byte; if it equals to $FF, AR will be interpreted as a jump position (the ## number of the line where the arpeggio should continue), otherwise as an arpeggio offset (a signed value that specifies the distance in semitones between the base  major chord for a quattro speed music: ## WF AR -------- 1E 41 00 waveform = $41, arpeggio = $00 1F 94 00 repeat it five times 20 95 04 repeat six times, arpeggio = $04 21 95 07 repeat six times, arpeggio = $07 22 FF 1E let's return to $1E That the $FF byte after the first one, saving a few cycles where you need it most). Even if I wouldn't mention this at the rest of the effects, jumping to a further $FF (jump) command is illegal in the other tables as well. This means no practical limitation are initialized to $03. Did you? I told you to read this first before you load the editor and start playing around with it! :-) Well, the first three lines of the arpeggio table are reserved for the channel on/off function: ## WF AR -------- 00 08 king lame solution, I know. However, maybe there's a bit of a good idea in it after all: just take a look at that repeat! Of course, you could as well remove the second line, it would produce the same silence. But, as repeat commands are 'cheaper' in example, let's see a typical bass: ## WF AR -------- 0A 81 00 let's call it cymbal fx :-) 0B 41 00 0C FE 00 this way we repeat 111 times 0D FF 0C before the first jump occurs! In a relatively low speed music (and with a short note duration), it'sed parameters the SID offers: filtertype, resonance and all 11 bits of the cutoff frequency. Let's take a detailed look at it: ## index of position RP $00...$FD -- repeated addition to frequency and resonance $FE -- select filtertype specifietered instrument is initialized, all the filter parameters, including the filtertype, are set to zero. That means, the initial cutoff frequency and resonance must be 'added' to these zero values by the filter program. You must set the filtertype, too, its of the filtertype to zero. You can select the filter passband by the bits 6 to 4 (for example, $40 for a highpass filter or $50 for a notch filter). If you wish, you may optionally switch the third SID channel off by setting the highest bit to 1.  a jump is not allowed here, but I'm quite sure you have guessed these rules. Of course, jumping to an $FE command is legal and lawful. The repeat cycles are done one time more than specified (RP = $01 means repeat twice). In each cycle, three additions will take place: the highest four bits of RL will be added to the current resonance, the lowest three bits of RL will be added to the $D415 value, and finally FH plus a possible carry will be added to the $D416 value. Yes, the filter code provides a c's no more than five lines; such an arpeggio would cost you nineteen lines in a DMC-like player! Of course, you may jump to a repeat command as well, but please don't jump to another $FF command (the player is optimized in a way that it won't check for , of course (a jump like that would be a pure waste of memory anyway). As usual, please remember that the editor won't warn you if you enter illegal jumps, they just plain old won't work. Maybe you noticed that, as a default, all the arpeggio pointers  00 waveform = $08 (silence) 01 FE 00 a long repeat 02 FF 01 in an endless loop This loop cuts the actual waveform and stays here forever. Whenever you mute a channel, its arpeggio pointer will be redirected to the arpeggio program above. It's a stinrastertime than jumps, in cases like this (where the jump acts more like a 'stop' command), you should insert a long repeat in front of the jump command. This trick can spare you a few lines of rastertime if you use it in the other tables as well. For  possible that the jump won't be executed at all! This hack is so ultimately simple and efficient, you can't afford not to use it. 3.3. Filter table (SHIFT 3) This table consists of four columns (## RP FH RL), and lets you control all the filter relatd by FH $FF -- jump to the position specified by FH FH addition to cutoff frequency high byte or filtertype (bits 6 to 4) or jump position RL addition to resonance (bits 7 to 4) and addition to frequency low byte (bits 2 to 0) When a filotherwise it will remain zero (which means, the filter won't pass anything at all). The player will update $D418 with the result of a logical OR between the current volume and the filtertype you specify, therefore you should always set the lowest four bBy the way, the $FE (set filtertype) command is a bit similar to the Snd.XX or Dur.XX instructions: it's processed virtually in the same time as the next line of the filter program. This next line must contain a repeat command; a further $FE command or  RP FH RL ----------- 09 FE 10 00 select lowpass filtertype and... 0A 00 C8 37 ...set cutoff frequency to $C8 $07 and resonance to $03 0B 03 D0 20 subtract $30 from freq and add $02 to resonance 4 times 0C 08 FF 06 subtract $02 from cutoff frequency orrect overflow handling from the three valid bits of $D415 to the $D416 register, unlike in most other players. Whenever $D415 increases over $07 or decreases under $00, $D416 will be modified accordingly. This allows you to control the cutoff frequen such instruments on any other channels, they will be filtered with the same effect that runs on the first channel. In other words, the filter parameters won't be affected by those instruments, only the channel selection bits in $D417. So it's possible  et's see the bad ones. There is no separate command for subtraction: if you wish to decrease any of the registers, treat them as signed values (in two's complement code), and add the appropriate negative value. This is a little bit tricky (or annoying, ## index of position RP $00...$FE -- repeated addition to pulse width $FF -- jump to the position specified by PH PH addition to pulse width high byte or jump position PL addition to pulse width low byte Similarly to the filter effect, whIt is very important that the third ($08) bit of RL must be zero in every case, otherwise the overflow routine will fail to work properly. It's a consequence of my strange but effective idea to calculate the resonance and the low byte of the cutoff freq a value from the pulse width by adding its two's complement. I'm sorry for you DMC V5.0 users, but the star key doesn't work here, get yourselves a hex calculator instead... Although I hope it's obvious, here's a simple pulse program for example: ##and 7. Please notice that the filter editor will let you enter illegal values as well, and if you do, both the resonance and the cutoff frequency calculation will be incorrect. Let's create a filter program for the above mentioned bass instrument: ## peat the inner cycle) Just like in the filter table, repeats are one cycle longer than the RP values. Of course, the SID will use only the lowest 12 bits of the result, so it would make no difference if you wrote $0FF4 instead of $FFF4. It's up to you whether you keep the complement value or fill these nybbles with your phone number :-) 3.5. Glide table (SHIFT 5) The same glide/slide speed table we have discussed at the track+sector screen (see section 2.4. above). 3.6. Slide/vibrato table (SHIFT 6 low byte 9 times 0D FD 00 00 stay here for $FE (254) frames (saves rastertime) 0E FF 0D 00 jump to $0D again It's also important that the SID's filter registers are controlled only by the filtered instruments played on the first channel. If you use cy with an eight times finer resolution than in most of the common players. And don't you tell me it's too complicated: the whole carry calculation takes exactly 4 (four) machine cycles! Try to beat that :-) Well, that's about the good news, but now lto use filter on more channels, as long as channel 1 is one of them. 3.4. Pulse width table (SHIFT 4) This is another table with four columns (## RP PH PL), but wait, it's much less complicated than the filter table... Hey, anybody still reading? :-)  for that matter) in the case of the cutoff frequency, since you must handle all the 11 bits as one integer number. For example, -1 would look like $FF $07 and -2 like $FF $06 in our case; entering them as FH and RL would decrease $D415 by one or two. enever the pulse effect is reinitialized, the pulse width registers will be set to zero. The first line of the pulse program usually adds an initial pulse width (a larger value), which the next few lines increase or decrease. As usual, you can subtractuency with the same ADC instruction. To separate the results, a zero bit is required in both operands. Since the filter routine itself doesn't mask that bit, you'll have to do it: please make sure that the second digit of RL contains a value between 0  RP PH PL ----------- 27 00 02 80 set the initial pulse width to $0280 28 07 00 40 add $40 to pulse width value 8 times 29 17 00 0C add $0C to pulse width value 24 times 2A 17 FF F4 subtract $0C from pulse width 24 times 2B FF 29 00 jump to $29 (re uency command, it's easy to create various drum instruments. But a creative musician can achieve a lot more complex effects with this table; if you mix this effect with your waveform programs, you can almost do wonders. As long as a glide/slide sector ) Okay, I admit the name is confusing. This slide has nothing to do with the one I mentioned as I explained the Gld.XX instruction. The rather unfortunate idea of calling this a slide table originates from the early days of SIDwinder. As it might be zed the vibrato with any other effects, the glide/slide instruction won't bring your vibrato out of sync). Let's create a nice expanding vibrato: ## RP FH FL ----------- 13 FE FA CE $FACE directly to the SID 14 07 00 00 delay for 8 frames 15 02 00 FH/FL (drum mode) $FF -- jump to the position specified by FH FH addition to frequency high byte or absolute frequency high byte or jump position FL addition to frequency low byte or absolute frequency low byte This effect allows you to mod C to the frequency 3 times 1B 02 00 19 add $19 to the frequency 3 times 1C 05 FF E7 subtract $19 from the frequency 6 times 1D 02 00 19 add $19 to the frequency 3 times 1E FF 1B 00 repeat the last cycle Please notice that the vibrato is built up sym ctual note). You can specify such an absolute frequency by the $FE command; FH and FL will be written directly to the appropriate SID registers. Unlike the $FE (set filtertype) command in the filter table, this $FE command is executed alone, in its own nest, even I don't like to type such a huge program to create a simple vibrato, it's quite annoying indeed. But this routine is much faster than most other vibrato solutions, and it's ultimately flexible. However, the problem I explained at the glide t l. The offset value this effect produces will be added to a base frequency, which is determined by the actual note and the arpeggio effect. If you periodically increase and decrease the offset, you can produce a vibrato effect. Using the absolute freq 's just an overview of the track start positions you defined for each of your subtunes. See section 2.6. for details. Chapter 4 Tips'n'tricks 4.1. Fading like a pro Volume control has always been a problem since musicplayers exist, some people still! don't seem to understand why it's so important that you leave $D418 alone while the music is running. However, usually it isn't easy to find the correct register of the player where you may change the volume without causing further trouble. As soon as instruction is being executed, the vibrato will become temporarily ineffective. In other words, it won't affect the frequency of the voice (except for the $FE commands), but the vibrato program will still run in the background (that is, if you synchroni misleading, let me refer to this table as vibrato table (reflecting its primary function as well). It consists of four columns (## RP FH FL): ## index of position RP $00...$FD -- repeated addition to actual frequency $FE -- set absolute frequency  05 add $05 to the frequency 3 times 16 05 FF FA subtract $05 from the frequency 6 times 17 02 00 05 add $05 to the frequency 3 times 18 02 00 0C add $0C to the frequency 3 times 19 05 FF F4 subtract $0C from the frequency 6 times 1A 02 00 0C add $0 ify the frequency of an instrument with a relative offset value. This 16-bit offset is step-programmable, similarly to the pulse width, plus you have the option to use absolute frequency values (instead of a relative adjustment to the frequency of the a metrically; you should first add some values to the frequency, then return to the original pitch, then subtract preferably the same values and return again, so that the DC average (well, how should I call it?) of the frequency remains constant. To be ho  time share, so you are allowed to use more than one of them in a row. Actually sometimes you have to do so, since you can't put a repeat on these commands -- it's a considerable disadvantage. As usual, you may jump to a repeat or an $FE command as wel able applies here as well: since the effect is based on absolute values, the vibrato won't be adapted automatically to the actual note, so it will sound wider or narrower, depending on the notes. 3.7. Track start positions (SHIFT 7) Nothing special, it! By the way, it is absolutely not necessary to start each sector with a Snd.XX and a Dur.XX, you can simply omit them and use the previous instrument and note duration. In the latter case, you should try to avoid the bad coincidences when multiple counte! the first players with internal volume slide capabilities appeared, the situation turned even worse: if you'd like to fade off the tune, first you'll have to deactivate the internal volume control routine. Although you can find the source code of my pl! ross each other's path sooner or later. Prime numbers are a fine choice, if you're into maths :-) And please, please never use the same instrument in more than one track a time, it would cause all the bad events to coincide. Duplicate the instrument i! disturb the operation. 4.2. How to beat the crowd Finally, let me give you a few little hints how to keep the rastertime of your tunes at a tolerable level. Okay, the player itself is optimized, but much of my efforts are useless without the active co!irst non-blank line. That means, it's strongly recommended to remove the trash (if any) after the real end of your sectors and tables, plus to eliminate all the unused effect programs. Please make sure as well that you enter the correct number when the!trouble. The first rule: please try to avoid the glide/slide instructions. Despite the long hours I spent on optimizing the glide routine, it's still the worst piece of the whole player code. Especially the slide init tends to gulp a couple of scanlin! time. Some of them try to solve the problem by using a single (and rather short) duration for the whole tune. Although this does help while composing, this technique is known to produce huge sectors, almost completely filled with delays. If you're sm!the former case, you can help by rearranging your instructions: for example, if a Snd.XX Dur.XX Gld.XX sequence seems to cause a peak, try to place the Snd.XX or the Dur.XX before the previous note. You may as well remove them completely, if possible. ! r instruction arrangement I explained above. However, please remember: the choice is yours, and if you're patient enough, you can make your tunes both rastertime and memory efficient. 4.3. Closing words Well, that's all I think you should know if you "wish to use my SIDwinder to its full potential. If you're interested in further technical details, please take a look at the source code, it's worth it -- although it's a rather old piece of code, I think I couldn't make it much better even today. (Wel!rs expire at the same time. Please try to construct your effect programs from the coder's point of view: for example, jumps shouldn't occur and repeats shouldn't finish in more than one effect a time. Don't use round numbers, they are quite likely to c!ayer on the disk image, here's the correct method to fade off a tune made in SIDwinder V01.22: during the fade, write the desired volume ($00...$0F) to $168E and a $00 byte to $1678 every frame. This zero byte ensures that no internal volume slide will !nstead, and change at least the length of the repeat commands. If you're optimizing your music for memory usage, please keep in mind that the packer determines the length of your sectors and effect tables by scanning them backwards and stopping at the f!operation of the musician. Please take the time and make your tunes perfect in this relation, too: with a little extra care, you can reduce the rastertime by usually at least one or two lines, or spare a hundred bytes of memory. I think it's worth the ! packer asks you for the maximal init value; setting it too high will result in an excessive memory usage. Many people (especially JCH editor experts) don't like the concept of variable note durations that much; they say it makes your notes difficult to!es over the average, and I think I can't help it. So please only glide or slide when necessary, and never do it in more than one track a time. Most of the rastertime peaks occur when many instructions are executed together or when counters expire. In !art, you can 'compress' most of these delays by Dur.XX instructions, saving a considerable amount of memory. You may have to search for a compromise between rastertime and memory usage, since this 'duration packing' might conflict with the optimal secto" l, I did discover a few unnecessary CLC's in that damned glide routine, but it's too late... and who cares anyway, I'll kick the glide routine next time.) You'll find a couple of demotunes on the disk image: as long as you are only experimenting with th" hat the rest of the world can do with this package :-) Have fun with SIDwinder V01.22 and never forget the good old Sixtyfour. Signed, Balazs Takacs Taki/Natural beat E-mail: takinb@sch.bme.hu (presumably available until 2001) S-mail: Balazs Takacs, "e player, you're welcome and encouraged to analyze them. If you like this editor and decide to use it regularly, I'd really like you to send me some of your own tunes. Of course, I won't spread them if you don't want me to. You see, I'm just curious w_Thokoly str. 26, 9300 Csorna, Hungary Natural beat's homepage: http://www.sch.bme.hu/~takinb