As I’ve mentioned before the main influence on the design of GoatUp was an excellent Atari homebrew game called Man Goes Down (and not, despite what some people have thought, “Doodle Jump” on iOS, which I have never in fact played nor even seen anything more than a static screenshot of).
Playing that game a lot inspired me to take a look at doing a bit of 2600 coding myself. The Atari 2600 VCS has always interested me from a coding standpoint simply because it is simultaneously clever and brutally minimal (it has 128 *bytes* of RAM. Not 128K, 128 individual bytes). You basically have to build every scanline yourself using two sprites and three dots and 20 bits of background.
David Crane explains it rather well here, in his excellent talk about the creation of “Pitfall”, one of the most successful 2600 games.
If everything Mr. Crane says during that video does not make perfect sense then I’d also recommend the same book that he recommends, “Racing the Beam”. It goes into a lot of delicious technical detail about how the VCS works.
Having read the book myself and gathered together the various bits and pieces needed to attempt VCS hackery (basically the STELLA emulator and DASM assembler) I decided to have a go myself.
On the VCS you can’t just put a sprite on the screen. Basically you have to write code that is synchronised to the scanning of the TV beam in order to place slices of the various things that happen to cross the current scanline into the line buffer. There’s some hardware to help you do that, to an extent, but basically you can’t do a lot because there simply aren’t enough CPU cycles to do much on one scanline. Your scanline drawing code – called the “kernel” in VCS parlance – has to be precisely timed down to the last cycle. You have to be aware not only how long each instruction takes to execute but also where your code and data are in memory, since crossing page boundaries can cause timing alterations that show up as a glitch on the screen.
It’s crazy mad coding of the sort that nobody really has to do any more, but out of curiosity and as an exercise for fun it’s actually rather satisfying to do. I never really finished off my kernel but if you look at it you can see that even back then a couple of years ago goats and platforms were on my mind.
Here I was actually experimenting with generating the platforms just by switching the background colour off and on rather than using the playfield hardware. It worked but the resolution at which I was doing it was sufficiently coarse that the method was unlikely to be useful and to go further I’d've had to use playfield. It was shaping up into a nice 1-line kernel though.
I would say that it’s quite possible to do at least a simplified version of Goat Goes Up on the VCS, given time to finish the kernel and write the actual rest of the game. Alas I can’t see that happening for a while. These days I don’t get much free time for hobbies.
If you have the Stella emulator you can even run my kernel and see some things move around. The binary can be downloaded here. Be warned though, it’s a massive 4k download .