///////\ //////\ /////\ //////\ //\ /////\ //\ //\ 64 //\ \ \//\ \ //\ //\ \// \ \\ //\ //\ /// // ///////\ // /////// // //\ // // /////// \ // // //\ // // // // // // /// /////// // // // // // ///// \ // // \ \ \\ \\ \\ \\ \\ \ \ \\ \\ v 2.0 Welcome to STATION64, the live player (via midi) solution. Many people loves SID original sound. Many people have some midi stuff. I've been in search of any appz to use C64 as external synth. MSSIAH you say? Yeah, i have one. Great piece of hardware, but i wanna to control all SID activity, use all oscillators, play with commodore computer keyboard too, see midi activity and so on. And of course, do a some self challenge to code it. Now - challenge is over. >20000 code lines in pure 6510 assembler. Almost 4 month of hard coding. And voila!!! It was tested with PASSPORT/SEQUENTAL/KERBEROS midi interfaces. Theoretically you can use any MIDI interface, coz you can change MIDI registers and commands via setup. No MIDI? Use a computer keys as keyboard in! You can play single notes (with 3 voices max poly) or play preprogrammed pieces of SID commands blocks as ARPs. And, very important - you can combine them! Main features: - 3 voice polyphony or unison for fat sounds - full 3 osc control via midi - use midi channel -> sid osc mapping for flexible control - fine tune for each osc - 2 lfo/env (4 stage) with apply to pitch/pulsewidth/filter cut - total monitoring all midi activity - advanced glide and pitchwheel control - fast on-screen help - zero latency (on real Commodore) - tested on C64 / C128(in c64 mode) - works with 8580/6581 on PAL/NTSC (auto detection) machines - screen-off for more clean sound from SID - configurable with any MIDI cartridge (if you have a problem - write to me) - works with any disk drive (+some additional features for SD2IEC users) to load/save created programs banks - 16 programs (can change from external midi too) - 100% original code, without any KERNAL use - software reset to machines without reset button - nice intro with cute gradients :-) -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Terms osc - SID oscillator (or voice) program - preset (all settings of synth) channel - midi channel raster - time unit (1/50 sec on pal version, 1/60 sec on ntsc) All digits use hex format. Hope to make some decimal in further versions. There are 3 mode to play synth with POLY - get from all midi_channels (or commodore keyboard) and play poly (3 voice max) 3CHN - mapping 3 midi channels to 3 sid osc (see SETUP/MIDI) UNI - from any midi channel play all sid osc simultaneously After any changes received form external midi device, the settings immidiately store to sid and program in memory. ..................................................................................................... GLOBAL KEYS [+] [-] change program (0-F) [pound] change play mode [F1] SYNTH (synth edit) [F2] something like help (show keys to use) [F4] SETUP [F5] KEYS (live performance mode) [F6] LOAD prg/arp/setup [F7] screen OFF (kill a magic hum :) [F8] SAVE prg/arp/setup [DEL] panic, kill all sid activity [C=] + [RESTORE] commodore soft reset [<-] esc (like "back" in your browser) ..................................................................................................... SYNTH mode KEYS program management [SH] + [-] copy program [SH] + [+] paste program [SH] + [pound] ini prg [SH] + [clr/home] copy osc1 -> osc2,osc3 [C=] + [0]..[9][a]..[f] fast program select [SPACE] test tone (use SETUP for select tone pitch) [RETURN] rename preset osc selection [1][2][3] change osc to edit osc (works on selected oscillator) [4][5][6][7] change wave [T] tune (half-tone) [F] fine (sid freq registers step) [R] ring mod [S] sync [P] pulse wave width (PW) [E] envelope (adsr) [V] use velocity to control SUSTAIN in env (*) [N] no restart env on legato notes [X] constant pitch for osc (see SETUP/PRESETS) [@] pwm mode (---,+E1,+E2,-E1,-E2) [*] fm mod (---,+E1,+E2,-E1,-E2) (*) works with some errata (sid bug) on maximum vel (sus=F), try to hardreset on it filter [L][B][H] set type of filter (low pass/band pass/high pass) [8][9][0] set sid osc to filter processing [C] cut off [Z] rezo [^] filter freq mod (---,+E1,+E2,-E1,-E2) other settings [G] glide steps per raster (step=sid freq units) [W] pitch wheel. 1 pitchwheel unit = XXX sid freq units [M] master volume ELFO [:] edit elfo1 [;] edit elfo2 ELFO editor [:][;] select ELFO to edit [+][-] how many steps in ELFO [clr home] LOOPED [ins del] RESTART [RETURN] VALUE PREV (use last value for step start with),RAND (use S/H value within a step), VAL [RETURN] DIRECTION +/- [<-] escape to main synth window [SPACE] test tone [crsr] move around FREQ MOD VAL XXXX STEP XXXX PW MOD VAL 0XXX STEP 0XXX FCUT MOD VAL 0XXX STEP 00XX -> 0XX0 ..................................................................................................... PERFORMANCE mode KEYS [,][.] change octave to play with C= keyboard [C=]+[1..7] change octave to play with C= keyboard [=] change osc to play in 3chan mode ..................................................................................................... SETUP mode KEYS [ctrl] or [crsr hor] select page [crsr ver] select parameter [RETURN]/[SPACE] change parameter [<-] escape to synth/perf window ..................................................................................................... LOAD/SAVE mode KEYS common disk operation keys [R] re-read file list [crsr ver] select file in list [8][9][0][1] select device 8/9/10/11 [SH]+[inst del] delete file [inst del] parent (SD2IEC) [RETURN] into dir (SD2IEC) [<-] escape to previous window save keys [P][S] select items for save Programms/Settings [SPACE] enter new name and save [RETURN] get selected file name, edit and save load keys [RETURN] load selected file ..................................................................................................... DATA INPUT KEYS [crsr horiz] move around line [crsr vertic] change value [clr home] to begin of line [inst del] del under cursor [+][-] change sign (for signed values) [<-] escape (and restore unchanged value) [RETURN] get value [SPACE] select something (e.g. midi mapping, midi filter) /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ INCOMING MIDI MAPPING \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ PROG change PWHEEL NOTE ON/OFF (with velocity/aftertouch) CC MAPPED TO 00 01 flt cut (mod wheel) 02 03 04 05 06 glide 07 master volume 08 A osc1 09 D osc1 10 S osc1 11 R osc1 12 A osc2 13 D osc2 14 S osc2 15 R osc2 16 A osc3 17 D osc3 18 S osc3 19 R osc3 20 flt rez 21 pw0 22 pw1 23 pw2 24 tune1 25 tune2 26 tune3 27 fine1 28 fine2 29 fine3 30 wave1 NOI 31 wave1 PUL 32 wave1 SAW 33 wave1 TRI 34 wave2 NOI 35 wave2 PUL 36 wave2 SAW 37 wave2 TRI 38 wave3 NOI 39 wave3 PUL 40 wave3 SAW 41 wave3 TRI 42 ring1 43 ring2 44 ring3 45 sync1 46 sync2 47 sync3 48 vel1 49 vel2 50 vel3 51 leg1 52 leg2 53 leg3 54 const1 55 const2 56 const3 57 flt lp 58 flp bp 59 flt hp 60 flt out1 61 flt out2 62 flt out3 /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ SYNTH hints \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ fine tune - values just add (or sub) to sid freq const pitch - get base note from setup page and add/sub tune and fine values legato - not restart env, just change pitch (works only for legated notes :) glide - works only for legated notes (you set the speed of change pitch in raster units) - when glide roll on, ELFO not working velo->sus - if velo=0, only pitch changes occur pwheel - add/sub to freq 0...$3f * (2^pwheel_param) arp - it's not SYNTH'S arpeggiator, its parallela synth - elfo/pwheel/fine-tune/glide not working with arp-ed sounds elfo - run every raster unit - change pitch with +-XXXX - change pwidth with +-XXXX - change filter XX0 with ELFO +-00XX --==[[ ELFO ]]==-- How it's works You have 2 ELFO. Why ELFO? Coz it can be like lfo (if looped), and also can be like env (single shot mode). Each ELFO has up to 4 stage. Just looking on one step. You have a LENgth of step (backward counter in raster units). You have Direction (add or substract) of VALue within time of this step. In other words wa have start VALue (e.g. note frequency in sid units) and add (or substract) some STEP on each raster step. The VALue filed may contains vvvv (use current freq value), XXXX (digits) - "start with" or RAND for S/H like behaviour. /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ SETUP \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ PRESET ** change mode GLOBAL/PRESET ** you can change play mode via [pound] key or store mode into preset ** default note for CONST pitch ** default note as say. Also used as test tone for [SPACE] key in synth section ** program names ** here you can edit program names ARP/KEYS ** default comp velocity ** play on computer keyboard with this vel value MIDI midi interface setup (registers and commands) interfaces settings SEQUENTIAL/NAMESOFT DE00 DE02 DE01 DE03 03 15 95 PASSPORT/SENTECH DE08 DE08 DE09 DE09 03 15 95 DATEL/SIEL/JMS/C-LAB DE04 DE06 DE05 DE07 03 16 96 mapping incoming midi channel to sid osc ("3CHN" mode) midi monitor filter SID/CTRL ** hardrestart ** fix some sid errata with envelope restart, here you can change delay (in raster units) before new env start ** master volume ** store with preset or use global value (and not change volume at all). It may be good idea about use global volume if you wanna to avoid clicks within program change ** sid model/raster timing ** information only :) /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ What 2DO? \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ I'll be glad to receive any feedback/opinions about this product. This product is beta stage now. Please feedback with any bugs via i@mak-sa.net Support it with any sum of donate via PayPal nlk1@mail.ru for further research and developing. p.s. If you have any questions about c64 programming - feel free to ask. I feel like a guru after coding all this stuff :)