That was a false start, to say the least. There isn't a whole lot you can do with 64 bytes. After that, I begged for a Timex Sinclair 1000. 16KB of RAM isn't a whole lot, either, but it was enough to actually experiment and learn.
At 12 years old in 1980, I bought Atari BASIC Programming (it wasn't yet called the 2600). Minutes after plugging it in, the idea of a computer clicked for me. That quickly led to getting bored with that game system and convincing my parents to buy me a "real" computer. Eventually that led to a long career as a software developer. Thanks for opening that door for me Atari BASIC Programming!
That said, I am perpetually amazed at what some people have been able to pull off on such a weak device. 120 bytes is nothing for memory compared to anything I have written on a modern computer; I worked very hard to optimize the shit out of my custom Swaybar, and that still took about 500kb.
The fact that games on the 2600 could even be playable is sort of an achievement in its own right, and when you see games that are actually legitimately decent (like the cassette tape version of Frogger, for example), I feel a bit of envy that I will never be that good at software.
BASIC Programming on the 2600 is similarly impressive to me. It’s not “fun” in any kind of objective sense, you can’t really do a lot with it, but the fact that there exists a programming environment in any capacity running directly on there is an impressive bit of engineering.
APL: challenge accepted
https://aplwiki.com/wiki/Conway's_Game_of_Life
A quick search has not found any implementations of an APL-family language on the 2600, so let this comment be an inspiration for one of you madlads out there to actually do it. The 2600 has only 128B of RAM, but a lot of consoles around this era had additional bankswitched RAM on the cartridges.
https://en.wikipedia.org/wiki/Shannon_number and https://en.wikipedia.org/wiki/Video_Chess provide some interesting background reading.
Someone really should DIY a real Atari "VCS," as in adequate bank switched RAM and something not unlike TRS-80 BASIC achieved without outlandish hardware for the time...
OMG! Someone pulled it off back in the day! I had no idea. So much for my retirement project idea:
https://en.wikipedia.org/wiki/CompuMate
That's ok, I have a lot of years to go before I need one LOL
Also, the "Decker" Hypercard-alike has a K-inspired language that is pretty nice. (Yes, much more modern, but still feels a bit like something "of that era".)
I don’t think it works on real hardware but I’m quite partial to Bad Apple : https://youtu.be/Ko9ZA50X71s?si=Ds7WuMgPHeubBNNz
It's quite a feat.
"You need a more mentally challenging job"
This was a friend's reaction when I told him about this article idea. Like most people he wasn't intimately familiar with Atari 2600 BASIC so this response followed my explanation of the limitations:
-Your entire program can not exceed 64 symbols - a symbol being a number, variable, or reserved word (i.e. Goto, If, Then)
-There's a maximum of 9 lines, not really an issue considering the first item
-You only get integers from 0-99
-Only five math functions are available (+,-,*,÷,mod)
-In terms of graphics, you have two dots you can move by setting their coordinates
-You can play a range of beeps but I'm not musically inclined so I can't map them to notes
-Instead of a keyboard you have two 12 button pads to work with
If this sounds horribly limited and lame it's because you haven't yet thought about the hardware it's running on...
Atari 2600 BASIC was programmed by Warren Robinett who is 100x smarter than me and anyone reading this. Well, unless you are him in which case "Hi! Adventure is the greatest Atari 2600 game ever made!". Anyway, since you're probably not him it'll hurt your brain to think about how difficult it was to write a BASIC interpreter for the Atari 2600 that consumed just 64 bytes of memory. Not gigabytes, not megabytes, not even kilobytes - 64 bytes. The Atari 2600 had 128 bytes of RAM and half of that was used for the 64 symbol program you entered so the IDE and interpreter had to be extremely lean.
You should now be in awe of this program.
Not quite as challenging is writing a useful program in just 64 symbols but that's exactly what I'm going to attempt. Think of all those times you tried to cram your thoughts into a 140 character tweet. Now take away 76 characters and try writing a functional program instead of a description of the burrito you just ate.
Before I get to that though, here's a little more back-story which you're free to skip...
I own all the pieces required to run this on the original hardware - Atari 2600, BASIC Programming cartridge, and keypad controllers. Setting all this up and using the original controllers is an exercise in frustration. The 24 keys you get on the two keypads aren't enough so there's a toggle system to shuffle between key sets. If that description sounds confusing it's because, well, it's really confusing.
Even using an emulator like Stella is painful, arguably more painful than the old-school approach. What works amazingly well though is the version that was included on Atari's Greatest Hits Volume 2 for the Nintendo DS. Some madman actually took the time to emulate the dual keypads on the DS touchscreen:

It had to be a lot of work to accomplish this and it's sad to think that I'm probably the only person on earth who used it for more than 30 seconds. If you ever feel insane enough to try Atari 2600 BASIC Programming this is definitely the way to go.
The downside to doing this on the DS is that the screenshots look terrible. See how they compare to taking a snapshot in Stella:

So you're not going to get a lot of pictures. It's just text and dots anyway, you're not missing much.
Alright, on to the programs. I'm not going to include a tutorial or the sample programs from the manual, those are perfectly findable on the Google.
Let's start with something simple, moving one of the dots around with the keypad:
1 If Key=2 Then Ver1←Ver1-5
2 If Key=4 Then Hor1←Hor1-5
3 If Key=6 Then Hor1←Hor1+5
4 If Key=8 Then Ver1←Ver1+5
5 Goto 1
Although that only uses five lines it exhausts nearly all available symbols which obviously limits the gaming possibilities.
If my previous comment about Twitter and burritos wasn't transparent enough I'll cut directly to the chase - I have a very difficult time imagining a practical use for Twitter. As far as I can tell the main purpose is to feed people's sense of self-importance. It's the modern equivalent of covering your car with bumper stickers.
However, this experiment has led me to an almost worthwhile application - sharing Atari 2600 BASIC programs. In any programming language it's an interesting challenge to fit an entire functional program into under 140 characters. The challenge is increased further by preserving space to support # and @ tags. Since Atari 2600 BASIC programs are limited to 64 symbols they will almost always fit into a tweet. The only tricky part is that many of the Atari 2600 BASIC symbols are comprised of multiple characters, i.e. "Goto" is one symbol but four characters. That's OK, we can abbreviate these without changing the functionality of the program.
For example, here's the dot moving program in tweet form:
#Atari2600BASIC [1]IfKey=2ThenVer1?Ver1-5 [2]If Key=4ThenHor1?Hor1-5 [3]IfKey=6ThenHor1?Hor1+5 [4]IfKey=8ThenVer1?Ver1+5 [5]Goto1
With controller options highly limited I could only come up with one complete game. I call it "The World's Worst Football Simulator". Specifically, it's simulating the experience of Devin Hester trying to get past the punter on a kick return:
1 S←0
2 Hor2←90, Ver2←0
3 Hor1←0, Ver1←50
4 Ver2←Ver2+1
5 If (Key>0) Then Hor1←Hor1+1
6 If Hit Then Goto 3
7 If Hor1<95 Then Goto 4
8 S←S+1, Note←90
9 Goto 3
#Atari2600BASIC [1]S=0[2]H2=90,V2=0[3]H1=0,V1=50[4]V2=V2+1[5]If(Key>0)ThenH1=H1+1[6]IfHitThenGoto3[7]IfH1<95ThenGoto4[8]S=S+1,Note=9[9]Goto3
Let's move over to some common math programs that you'd probably have to tackle in your first week of CS 101.
First up is an implementation of Euclid's Algorithm for computing greatest common divisor complete with animations and sound:
1 Ver1←0, Ver2←9
2 Hor1←50, Hor2←30
3 If (Hor2=0) Then Goto 8
4 T←Hor2
5 Hor2←Hor1 Mod Hor2
6 Hor1←T
7 Goto 3
8 Print Hor1, Note←Hor1
This also fits into a tweet with a bit-o-crunching:
#Atari2600BASIC [1]Ver1=0,Ver2=9[2]Hor1=50,Hor2=30[3]If(Hor2=0)ThenGoto8[4]T=Hor2[5]Hor2=Hor1ModHor2[6]Hor1=T[7]Goto3[8]PrintHor1,Note=Hor1
Finding the midpoint and slope of a line is totally doable with room to spare:
1 Hor1←5, Hor2←10
2 Ver1<20, Ver2←60
3 X←(Hor1+Hor2)÷2
4 Y←(Ver1+Ver2)÷2
5 Print X, Print Y
6 S←(Ver2-Ver1)÷(Hor2-Hor1)
7 Print S
And the tweet version goes a little something like this:
#Atari2600BASIC [1]H1=5,H2=10[2]V1<20,V2=60[3]X=(H1+H2)/2[4]Y=(V1+V2)/2[5]PrintX,PrintY[6]S=(V2-V1)/(H2-H1)[7]PrintS
And for all you software architect types, here's the smallest working implementation of the Model-View-Controller (MVC) design pattern ever produced (that I'm aware of):
1 M←Key
2 If (M=0) Then Goto 1
3 Hor1←Hor1+M
4 Goto 1
It's even smaller as a tweet:
#Atari2600BASIC [1]M=Key [2]If(M=0)ThenGoto1 [3]Hor1=Hor1+M [4]Goto1
To wrap things up, here are a few ideas I thought of that aren't possible to implement, or maybe are by someone smarter than me:
-Decimal to hex conversion - I tried about four different approaches and none were close to fitting.
-Computing Pi to any digits - there are several methods and all require operations that aren't available, even the ol' 22/7 solution is no good because that will just return 3
-Determining whether a number is prime - similar issues to computing Pi, probably doable for numbers under 10 though.
-Any of the Beagle Bros "two-liners", Apple II fans will know what I'm talking about.
Related