*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* * RaveScope 1.1 Copyright © by Erik Spåre 980315 * * (Parsec/Phuture 303) * *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* INTRODUCTION This program implements a new kind of scope, a "wrapped monoscope". Most modules look much better with a wrapped monoscope than they do with the traditional one (the double mode in Delitracker's monoscope, or the Spacescope in Eagleplayer). The Ravescope also has this "traditonal" mode, as well as a new "alternative" mode. REQUIREMENTS OS 3.x 68020 or better 2MB fastmem Reqtools.library Hippoplayer © by K-P Koljonen or Delitracker © by Peter Kunath and Frank Riffel NOTE This program is now Freeware. It used to be EMailware, because I wanted to know how big the interest was for a program like this. Now I know! Thanks to the people who mailed me! (Only four.) USING THE RAVESCOPE WITH HIPPOPLAYER To start it, run it right after you have launched Hippoplayer. Preferably from a shell, though it do seem to work from icon as well. If everything could be allocated/found you should see a window opening and (if you have the right type of module running) a very cool scope in it. You'll notice that your mouse pointer suddenly looks awful... sorry but at the moment the accuracy/mode settings can only be displayed via the mouse pointer... USING THE RAVESCOPE WITH DELITRACKER First configure the genie DeliRave (included in this archive). Select 'config' in the Genie window and click on 'select executable'. A filerequester will pop up. Select the RaveScope executable, close the config menu and press 'show' in the genie window. If everything went ok the RaveScope window show pop up. (Note that you must eject/start the next module before the RaveScope can use it.) Select 'config' again and 'save settings' in the menu. You can only save the settings while the RaveScope is present. Other menu options: POPUP When checked the RaveScope will be started as soon as DeliRave has been loaded from Delitracker. ACTIVATE The RaveScope window will be activated when started. POPUP = STEAL If the RaveScope is busy with another player when DeliTracker starts it, DeliRave will 'steal' the RaveScope from it. QUIT = KILL When DeliRave is removed from DeliTracker, (either when you select 'Remove' in the genie window, or when you're quitting Delitracker) the RaveScope will be 'killed' as well, unless it is busy with another player. RESET TO DEFAULTS All settings will be reset to their default values. Pressing 'hide' in the genie window will quit the RaveScope. Pressing 'show' will start it again. TEMPLATE After the programname you may specify one or more options: SCREEN/S,DISPLAYID/K,INVERT/S,WINLEFT/N/K,WINTOP/N/K,WINWIDTH/N/K, WINHEIGHT/N/K,SCRWIDTH/N/K,SCRHEIGHT/N/K,WRAPACCURACY/N/K, TRADACCURACY/N/K,ALTACCURACY/N/K,WRAPMODE/K,TRADMODE/K,ALTMODE/K, DELICONFIG/S,STROBO/S,VERSION/S SCREEN To have the display on a private screen. DISPLAYID Supply a hexadecimal DisplayID, for instance $21000 (the dollar sign is required) for a low-res screen. If you leave out this you will get a screenmode requester instead. INVERT To have a dark scope on a light background. (Depending on your workbench palette, it may be the other way round when using a window as the display.) WINLEFT Where you want the window positioned (x-pos), default = 400. WINTOP Where you want the window positioned (y-pos), default = 11. WINWIDTH Width of window (minus borders). Defaults to 304. WINHEIGHT Height of window (minus borders). Defaults to 160. SCRWIDTH Width of screen. Defaults to text-overscan width of selected displaymode. SCRHEIGHT Height of screen. Defaults to text-overscan height of selected displaymode. WRAPACCURACY Accuracy of the wrapped mode. Can be 25, 50, 100, 200 300, 400, 500, 600, 700, 800 or 900 %. Defaults to 100%. Number of dots per display will be the circumference (in pixels) * percent * number of channels. (Do not write the percent sign when you specify this accuracy.) TRADACCURACY Accuracy of the traditional mode. Cannot exceed 9999. Defaults to 500 (but this mode is off by default). Number of dots per display will be this value times number of channels. ALTACCURACY Accuracy of the alternative mode. Cannot exceed 9999. Defaults to 500 (but this mode is off by default). Number of dots per display will be this value times number of channels. WRAPMODE Wrapped mode on or off. Defaults to on. (Write either on or off after this keyword.) TRADMODE Traditional mode on or off. Defaults to off. (Write either on or off after this keyword.) ALTMODE Alternative mode on or off. Defaults to off. (Write either on or off after this keyword.) DELICONFIG Read the settings from DeliRave's configuration file. This is what DeliRave calls the RaveScope with. This option is executed before all the others, so any other specified option will override DeliRave's settings. STROBO Turn on the strobo mode. VERSION Displays the version string. I just included it to stop GCC from optimising it away. (Anyone know of a better way?) KEYBOARD CONTROL The only way to control the scope while it's running is through the keyboard. W - Wrapped mode on/off. T - Traditional mode on/off. A - Alternative mode on/off. S - Strobo mode on/off. Q - (or Escape) - Quit F - Switch between screen and window mode. Holding down a shift-key when you press F will call the screenmode requester and open a screen with the screenmode you select. F stands for Full-screen which is what this is intended for, but any size is possible. To change the various scope-mode's accuracies, use the numerical keypad. The keys 7, 8 and 9 will increase the wrapped, traditional and alternative accuracy. The corresponding key below, 4, 5 or 6 will decrease it. To increase/decrease the dark part (unless you have invert switched on) in the strobo mode, press shift + 7/4. Use 8/5 to control the bright part. LIMITATIONS If you select a non-native screen-mode, this program will (I hope) refuse to run it, maybe it will even exit. This will be taken care of in the next release, or when I get a gfx-card. If you have a gfx-card, then please tell me what happens... (It should work fine in a window though.) MEMORY USAGE I first made this scope on an A500, and using large look-up tables was the only way to make it fast enough. Now, as I have an 060, I'm not so sure anymore if this can still be justified. The memory needed for the main table are circumference * (higest of width/height) * 2 bytes. The default display of 280 * 160 thus requires (280*2 + 160*2) * 280 * 2 = 0.5MB. A super-hires interlaced display of 1400x560 pixels needs almost 11MB. I will make a realtime version and see how it goes... SPEED The init/display routines are made in asm, the rest in C. Half a frame (average) is lost in syncing with the VBL (WaitTOF(); BltBitMap();). I may improve this in the next version. The clearing and display are not optimised at all yet. There's a frame-counter in the top of the mousepointer. The number of dots indicate how many frames it took to draw the last display. The inner-loop, for those who are interested, looks like this: Loop: move.b (a0)+,d0 move.w (a1,d0.w*2),d1 move.l (a2,d1.w*4),d1 bfset (a4){d1:1} adda.w a3,a2 dbra d6,Loop The bfset instruction take (if I remember correctly) at least 20 cycles, even on a 060. When I used a display with less than 64k pixels I was able to halve the precalc data thanks to this instruction, without losing (or gaining) any speed on the 020 I used at the time. So this is why it has stuck with me... HINTS/WARNINGS * The Prodigy mp3's at 200% fullscreen (lores) with an 060 => kapow! * 100% usually looks the best for protracker modules. PS3M's or mp3's may look better with 200% because they only output 2 channels. Do not set the wrapped accuracy higher than this, it won't look good because (I think) often the sample frequency isn't high enough. * PS3M's look much better with a high volume-boost and the main-volume set to maximum in Hippoplayer. * DeliTracker gives the same data regardless of the sample-boost, but the volume must be set to maximum. * Resizing is very slow because each time the size change, all the look-up tables must be recalculated. ! Do not waste your life looking at this scope, as I have done! BACKGROUND 4-5 years ago I saw a monoscope for the first time. (It was the Quadraplayer's I think.) When, some months later, I tried to make my own (not having any idea of how it was done) I accidently invented this "wrapped" scopemode, and to my delight it looked even better. I released a first version of it in a music disk-mag I was coding at the time, Subculture. (The editor has now turned over to the dark side, so there will probably not be a new issue.) There I explained how to do it, hoping the scope would spread to my favourite module players. But it didn't, either because no one saw it, or because it's a bit complicated to implement. (It's not just a question of modifying the inner loop, like when converting a plain scope to a monoscope.) HISTORY v1.0 (980209) ** The first release. BUGS: I seem to have removed all bugs. Since I tracked down the last one, two weeks ago, I've had NO strange crashes or things like that. Possibly the error-handling contains flaws, I haven't tried everything. v1.1 (980315) ** Added support for DeliTracker through the DeliRave genie. (I contacted Peter Kunath, author of Delitracker, asking him for more information about how to make a genie. He immediately sent me the source to his monoscope (which was just what I needed) and has been very helpful ever since). ** Added the keyword 'DELICONFIG' so that you can use DeliRave's config settings with HippoPlayer as well. ** The wrapped mode has been prepared for use with 16 bit samples. Neither Hippoplayer nor Delitracker gives their userprograms more than 8 bits though, so this is quite pointless at the moment. ** Added a simple strobo-mode. This looks quite awful, but I seem to remember that this can be fun when the room is dark and you're drunk. ** Remembered to turn on compiler optimizations this time. BUGS: It is still very stable, much to my surprise. MPEGA player did occasionally give enforcer hits, and I felt a bit guilty for this because it has only happened when DeliRave has been active. (But on the other hand, I only run enforcer when running DeliRave...) Sometimes when a new module is loaded, it won't load until the ravewindow is activated. I haven't looked into this yet. THE PHUTURE I'd like to add support for more players, in particular Symphonie (because my favourite modules are symphonie modules, and I believe they would look great in a wrapped scope) and Eagleplayer. When (at last!) seeing my favourite OctaMED modules in a wrapped scope, it was somewhat disappointing. They are made by Orpheus (into persona, emerald dreams, your underworld etc... anyone know where to get his latest modules?) and all modules seem to contain a special sample that when displayed just looks like crap. So I am going to add masking, which will split the screen into one display for each channel so that those channels that don't look good can be disabled. The following features has been requested, and will probably be implemented sooner or later (but I don't know in what order) : ** One colour for each channel, or as many as the current screenmode allows. This would make it much slower of course, but perhaps it would be worth it. ** Connect the dots with lines. Same thing here. ** Wrap the scope around a circle instead of a rectangle. Would not take more time, but the display size would be limited. SPECIAL THANKS K-P Koljonen for revealing the Hippoplayer port! Peter Kunath for helping me implement the DeliRave genie. Patrick Meng for showing interest (and for making some pretty amazing music!) DISCLAIMER If you are interested in the disclaimer or things like that, then contact me. CONTACT ME... If you want an update made, have bug-reports, suggestions, anything.. New EMail! c9713363@alinga.newcastle.edu.au This address is at least valid to the end of april 1998. After that, use: blodskam@hotmail.com I have, btw, used the handle Parsec since the summer of 1991. I know many people think handles are silly (albeit /nicks are "kewl"), but... It's a silly life! Take it seriousley, and *you* are the fool! THE END And I Rave And I Rape And I Rip And I Rend Everlasting, World without End Maiden Maeniken Man In the Might of Pan Io Pan! Io Pan! Io Pan! Pan! Io Pan! (Aleister Crowley)