The Atari 2600 is the ultimate software squeezing-ground. Programmers have to squeeze their game pieces into just six graphics hardware elements: a playfield, a ball, two player objects, and two missiles.
Games must squeeze precious bits from RAM. The system has only 128 bytes (yes, that is BYTES) of RAM that has to be shared with the program stack. Many cartridges contain extra RAM hardware, but even that is a challenge. The CPU “write” signal is not delivered to the cartridge connector.
The 6507 processor in the Atari 2600 does not provide the top three address lines (A13, A14, and A15). The console hardware uses A12=0 for chip selects leaving the cartridge with 4K of address space. Many cartridges contain extra ROM hardware, and use bank switching to swap extended ROM pages in and out of the memory map.
This biggest squeeze, though, is in performance. An Atari 2600 game is literally “racing the beam” trying to prepare the graphics for the TV’s electron beam as it sweeps across the screen. (See MIT Press book Racing the Beam https://mitpress.mit.edu/books/racing-beam).
In this project I relived the Atari 2600 squeezing process by creating a simple game with graphics and sound/music.
You can play the BIN file in the Stella emulator, or you can burn it into a ROM and play it on the original hardware.
You can compile the ASM file with your own 6502 tool chain.
The LST listing file shows the assembled code fitting into the 1K limit.