Atari2600: the pong machine

Overview

L'Atari2600 è stata la prima console giochi casalinga, ed è stata commercializzata nel 1977. Ha resistito al collasso del mercato dei videogiochi del 83-84 ed è rimasta in produzione fino al 1992.

Atari 2600:right
Do dove viene il suo successo, che come vedremo è intimamente legato al c64?

Atari2600 chip overview

La 2600 era composta da tre chip, descritti di seguito

Il microprocessore si chiamava 6507, ed era una versione modificata del 6502 inventato da Chuck Peddle nel 1975. Chuck aveva lavorato in General Electric ed in Motorola, durante la fase finale della produzione del 6800. Pensò quindi di produrre un micro-controllore più economico con un nome simile (6500). Inizialmente il suo target non erano i computer.

Il 6507 era una versione ridotta del 6502 con meno pin che poteva indirizzare solo 8Kb di RAM e senza la possibilità di gestire interrupt. Leggiamo da wikipedia:

Smaller packaging was, and still is, an important factor in overall system cost, and since memory was very expensive at the time, the 6507's small 8 kB of maximum external memory space was not going to be used up anyway.

Il gruppo di Peddle aveva anche realizzato un chip aggiuntivo con 128byte di RAM e un timer, il MOS Technology 6532.

Completava il terzetto un chip che gestiva la grafica ed il sonoro chiamato Television Interface Adaptor (TIA). Il TIA aveva una risoluzione di circa 160x192 pixel, e poteva gestire anche degli "sprite".

Le cartucce gioco contenevano i giochi in ROM, ma il connettore aveva un bus di 12 bit e quindi consentiva di rendere visibili al chip solo 4kb alla volta.

Programmazione

Come avrete notato non ci sono interrupt. E neppure tanta RAM. Non pensavo neppure potessero esistere computer basati sul 6502  con meno di 512 byte, che sono le prime due pagine di memoria "speciale"del 6502: la prima contiene la zero page e la seconda pagina lo stack del processore. In effetti i 128 byte erano mappati un paio di volta in entrambe le pagine di memoria:

Address rangeSizeDescription
$0000-$007F$80TIA Registers (128 bytes)
$0080-$00FF$80PIA RAM (128 bytes of scratch space)
$0100-$01FF$FFStack space. Reamps PIA RAM at $180-$1FF
$0280-$0297$18I/O Like Joystick, Console switches and timers
$0298-$EFFFUnaddressable space
$F000-$FFFF$10004Kb Cartridge address space

In pratica avevate solo 128 byte da usare SIA come stack space CHE come memoria di lavoro...

Il TIA andava programmato in modo "sincrono", picchiettando nei suoi registri la grafica che doveva disegnare (sprite e sfondo di gioco).

La rilevazione degli input del joystick, le collisioni e la game logic andava fatto nei buchi di tempo tra un ridisegno e l'altro dello schermo. Per fortuna era possibile sincronizzarsi con l'inizio di una riga scrivendo in un registro chiamato WSYNC; la CPU veniva bloccata fino al ciclo successivo:

Simply writing to the WSYNC causes the microprocessor to halt until the electron beam reaches the right edge of the screen, then the microprocessor resumes operation at the beginning of the 68 color clocks for horizontal blanking. Since the TIA latches all instructions until altered by another write operation, it could be updated every 2 or 3 lines. The advantage is the programmer gains more time to execute software, but at a price paid with lower vertical resolution in the graphics da http://atarihq.com/danb/files/stella.pdf

Il codice del gioco non poteva durare piu' del tempo necessario per riportare il pennello elettronico in cima allo schermo: in caso contrario avreste iniziato a disegnare il frame successivo più in basso, e l'immagine avrebbe iniziato a sfarfallallare.

Atari2600: punti di forza e debolezza

Ho visionato il codice sorgente (assembly) di alcuni giochi, e programmare l'Atari non era semplicissimo, soprattutto perché con appena 4/8Kb di ROM per la grafica e meno di 200 byte di RAM, non si poteva fare molto.

Anche la versione di PacMan per Atari2600 era a bassa risoluzione, con appena due fantasmi multiplexati, e molto al di sotto delle aspettative del pubblico (con buona pace dei giochi 3D odierni!).

L'Atari2600 però era molto economico:

In 1977, an Apple II cost $1,298, while Atari sold the VCS for $199.

http://www.slate.com/articles/technology/the_browser/2009/03/speak_atari.html

Non fu un caso che all'inizio degli anni ottanta qualcuno pensò di produrre una macchina da gioco più potente, basata su un video chip che mappasse lo schermo su qualche kb di RAM: fu così che nacque l'idea del Video Interface Chip I (VIC-I), e intorno ad esso del Vic20. Il Vic20 (e poi il C/64) erano ENORMEMENTE piú semplici da programmare perchè "bastava" scrivere nelle locazioni di memoria che erano direttamente mappate sul chip grafico ("memory mapped I/O" in gergo).

Il VIC-I inoltre consentiva di (ri)programmare il character set di 8x8 bit, creando facilmente grafica a "tasselli" (tile).

T800 speaks 6502

Il 6502 fu la lingua franca degli anni '80. Il 6502 era usato dall'AppleII e dal C64. Era la "Java Virtual Machine" degli anni '80. Inoltre il concetto di copyright era ancora molto confuso per i videogame, per cui le terze parti potevano fare dei cloni dei giochi cambiando la grafica e venderli, schivando le cause di Atari (che comunque reagì legalmente in alcuni casi).

Addirittura, in alcune scene del film "Terminator" (1984), si vede in sovraimpressione il codice di un driver in linguaggio macchina del 6502 (e probabilmente era un gioco su cartuccia)!

da Terminator:left::img-shadow

Per cui era facile trovare team che potessero sviluppare conversioni di giochi e l'Atari2600 resse nonostante la crisi dell'83 e alcune pessime conversioni (come quella sopra citata di PacMan o il disastro di E.T.).

Quando nel 1985 la Nintendo presentò il NES ed il mercato si riprese, l'Atari2600 era ancora vivo, nonostante le sue versioni più evolute fosserò già fuori produzione da tempo! E avrebbe continuato ad essere prodotto fino al 1992.

Per approfondire: