Posted November 2, 2023
For the last few months, I've been toying with the idea of possibly writing a demo for the Rainbow 100. I've known that Demosplash is approaching since early summer, and I thought a Rainbow entry would be rather cool.
My original plan was to reimplement some graphical functions in C directly from the Rainbow technical manuals. Digging out the actual, paper manuals, I started examining the simple concept of enabling graphics mode, and was almost instantly horrified. The sheer number of assmebly calls just to enter graphics mode was outrageous ! As analternative, I decided I would instead use an existing Rainbowgraphics library to enable graphics; I could just rewrite thegraphics routines.
That task turned out to be absurdly complicated as well. I started with the concept of trying to set a single pixel on the screen. I believe in IBM PC land, you just need to write a bit/byte/whatever into a certain memory location. On the Rainbow with its highly modularized graphics, the task was overly complicated. Digital itself provided a routine, about three quarters of a page of assembly, to set a pixel (and nothing more).
Why is setting a pixel so difficult? Well, you can't write directly to video memory. You can copy information to video memory, but that's also complicated. Digital suggests:
- Place the graphics device into vector mode
- Load the command to draw a line that is one pixel long
- Tell the graphics device to draw the 1-pixel line
There are probably 30 or so assembly commands to make this happen. Copying data into video memory is equally as verbose, but it has additional timing restrictions. I'm starting to see why there is almost no graphical software for this machine.
Regardless, Demosplash is this weekend, and I never got anywhere in this task. I think I'll need well over a year to come up with anything remotely interesting.