Atari2600: the pong machine

L’Atari2atari2600600 è 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.

Do dove viene il suo successo, intimamente legato come vedremo al c64?

La 2600 era composta da tre chip

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.

L’Atari2600 era composto da un 6507, un 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 160×192 pixel, e poteva gestire anche degli “sprite”.

La ROM era di 4Kb (per una limitazione del connettore della cartige) e quindi per avere più memoria si doveva usare il bank switching.

Programmazione

Come avrete notato non ci sono interrupt. E neppure tanta RAM. Non pensavo neppure potessero esistere computer basati sul 6502  con meno di 256 byte.
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

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

Ora successe che l’Atari2600 divenne veramente 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

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).

Per cui era facile trovare team che lo potessero sviluppare conversioni di giochi e l’Atari2600 resse nonostante la crisi dell’83 e alcune pessime conversioni (come quella di PacMan).

Quando la nintendo presentò il NES ed il mercato si riprese, l’Atari2600 era ancora vivo, nonostante le console atari successive non lo fossero.
E’ come se la PS2 vendesse più della PS3 o della PS4… mettendole fuori produzione…

Per approfondire:

 

ORA-01461: can bind a LONG value only for insert into a LONG column

Disapprove with me!
Disapprove with me!

Okey, you know Oracle. A very good database, a very old database, a very solid rock. Not famous for its error messages. I have already stumbled upon a misleading error on the old rock.

This error anyway is incredible. If you try to push a very long text in a varchar2, you can end up with a

ORA-01461: can bind a LONG value only for insert into a LONG column

error.

Stack overflow promptly reported this years ago, so you can check it with your eyes.

 

 

Spring Testing Survival guide

If you have an application with thousand of beans, you must do unit testing but…Spring testing is boring, belive me.
A very complex Spring application usually have a lot of dependency: I had to manage over 3000 beans definitions in a production project right now.
Sometimes you want only to test a bit of it, and setting up a complete Spring Context will drive you crazy.
To avoid losing mind, my suggestion is to …cheat. Let’see how.
Continue reading “Spring Testing Survival guide”