Disassembly of the Asteroids arcade game firmware
github.com
github.com
Wiki has a few notes on the game hardware and implementation at [1]. The Quadrascan graphics processor, which presumably ran the code in 'asteroids_vector_rom.asm', doesn't seem to be well described on the net (as far as I can tell) but there's a hardware service manual for the colour version at [2]. It seems to me from reading it that the vector processor was tightly integrated with the CRT tube, and the manual has lots of scary/exciting warnings about high voltages and potential tube implosion.
[1] https://en.wikipedia.org/wiki/Asteroids_(video_game)#Hardwar...
[2] https://www.manualslib.com/manual/689160/Atari-Quadrascan-92...
I always assumed this was what I would be doing for a living when I grew up - I was honestly a little disappointed that high-level languages had progressed so far by the time I joined the workforce.
I very much agree. I've never written any assembly-level code as part of my work, but having an appreciation of the concepts at that level helped me as newbie C/C++ developer in the mid nineties.
Nowadays I work slmost entirely in the .net stack, but even there having even a shallow knowledge of the "next level down" helps - the concept of a jitted language only really makes sense if you grok what the jitter is emitting. And the idea of compiler optimisations is easier to understand if you get that language constructs can be realised in different ways, with different costs, as machine code.
Abstraction layers are certainly easier to think about if you see them (even shallowly) from both sides.
Speaking as one grizzled veteran of 1980s coin-op, I've seen with my own eyes a teenager a couple of years older than me "roll the machine".
"Rolling the machine" meant scoring 100,000. At that point, the machine score went from 99,999 back to 0.
The way I saw it done, the player left 1 asteroid on the screen so as not to advance to the next wave.
The player then parked his ship near one of the corners.
After some time, a saucer would appear and the player would directly fire on it using the shortest route possible which, sometimes, was not in the obvious direction of the ship because of screen wraparound.
Wraparound meant, for example, that the shortest distance between the upper right corner and the lower left and right corners was northeast, not southwest.
Saucers always shot at the spaceship on-screen, and so would almost always lose.
We younger observers stood in awe when the machine score rolled over. [0]
We dubbed this "playing the corners".
[0] Wikipedia calls this the "lurking exploit": https://en.wikipedia.org/wiki/Asteroids_(video_game)#Lurking...
I was just referencing the line from the movie Pixels, staying in the middle probably doesn't work that well.
Didn't know it was a quote. Added to my queue!
Unfortunately, after this strategy became popular, Atari released updated ROMs, with much better targeting from the small saucers, and the strategy stopped working. I suspect this also invalidated the corner strategy.
That said, I never managed to last very long on that cabinet.
Due to needing the extra shots for defense, a 1-2-pause or 1-2-3-pause cadence can be advantageous.
(inflation adjusted)