Funny to happen across this conversation. You got lucky with the BBC Micro. 640×256 with 8 different colours? Sounds like Heaven to me! See, I started with the Atari 800: multiple resolutions with the highest being 320x192 in monochrome -- that is, black and white. A later model added a register that turned that mode into 16-level grayscale -- but with the pixels four times as wide as they were high, for a resultion of 80x192! And yeah, sound was "bleeps and bloops" -- four channels producing mono square waves at even divisions of the 1.79 MHz (!) system clock so it couldn't even hit most musical notes accurately. Still, the very same thing happened that you describe: guys figured out all kinds of ways to push the capabilities of the machine until they could display GIFs and play sampled sounds and synthesized voices, display text in 80 columns (the hardware alone could only do 40), and on and on and on. I loved the Atari 800 and its descendants, and still play with it today in emulation on Windows. And guess what I've been playing with just recently? Writing my own ray tracer! I've got the standard checkerboard floor working, and am now trying to ripple it; then I'll work on proper illumination and reflections and such. Maybe tile the floor with some 16-level-grayscale photos (there are many). It doesn't push the hardware, but it's an interesting challenge in software. BASIC doesn't support structured datatypes, so to operate on 3D vectors you have to use three separate numeric variables per vector. It doesn't support callable functions with arguments and local variables, so you have to have a bunch of additional variables to pass arguments into, and return values back from, subroutines. BASIC is also an interpreted language, so it's slow. So when I happened across a Pascal compiler I'd been meaning to play with, I ported the project to that language, which does have structured datatypes, local variables, callable functions with arguments, etc. And now I've got the floor working there, too, and I'll keep adding features until I run out of memory! Then it'll be off to Windows and either C++ or Perl... I also did a "semi"-raytracing thing back in the late 80s or early 90s: a short BASIC program that used some of my college vector calculus to generate a 3D-shaded image of a circular ripple defined by a mathematical equation The user can specify the direction of the light source and thereby get different images. At one point I generated nine of these with appropriate lighting directions, and created a simple program that lets the user "steer the light source around" with the 8-position Atari joystick. I've always wanted to change the specific equations in that program to generate images of other equations, but the trick now is to try to recall college calculus!