domenica 11 gennaio 2009

Atari Breakout : circuito punteggi - bozza

In Breakout sono presenti 8 file di mattoni per 14 colonne. Partendo dal basso verso l'alto:

  • fila 1 e 2 = 1 punto ogni mattone
  • fila 3 e 4 = 3 punti ogni mattone
  • fila 5 e 6 = 5 punti ogni mattone
  • fila 7 e 8 = 7 punti ogni mattone
Per completare il gioco è richiesto di abbattere due muri; abbattuto completamente il primo (448 punti), si ottiene il secondo muro, per un punteggio complessivo di 896 punti. Non sono previsti altri muri dopo il secondo (?!?).



Schema 1a

Guardando lo Schema 1a, troviamo sei contatori BCD 9310 (location N6, M6, L6, H6, J6, K6), i primi tre utilizzati per memorizzare il punteggio del Player 2 , ed i secondi tre per memorizzare il punteggio del Player 1. Sullo schema ho suddiviso le sezioni di ciascun Player.
Ciascuna tripletta di contatori collegati in cascata sono utilizzati per memorizzare i valori delle unità, decine e centinaia dei rispettivi punteggi; è quindi da escludere la possibilità di veder memorizzato e visualizzato un punteggio superiore a 999. I contatori sono azzerati (punteggio=000) all'inizio della partita, ovvero alla pressione del pulsante Start Player il segnale /Start Game va basso azzerando i contatori.

L'incremento dei contatori avviene tramite il segnale Count1 per il giocatore 1 e Count2 per il giocatore 2. Count1-2 è un treno di impulsi generato dal contatore 74192 (location N9) ogni volta che la palla colpisce i mattoni posti nella :

  • prima e seconda fila genera 1 singolo impulso
  • terza e quarta fila genera 3 impulsi
  • quinta e sesta fila genera 5 impulsi
  • settima e ottava fila genera 7 impulsi



Schema 1b

Guardando lo schema 1b , il segnale che indica che è avvenuto l'abbattimento di un mattone è il Brick Hit. L'assegnazione dei diversi punti per le diverse file di mattoni avviene caricando sul contatore N9 i valori presettati agli ingressi pin# 15, pin# 1, pin 10# e pin# 9.

Con riferimento allo schema 1a, quando il giocatore 1 raggiunge il punteggio di 448 punti, il contatore delle unità segnerà 8 alzando il segnale D1, il contatore delle decine segnerà 4 alzando il segnale G1, ed il contatore delle centinaia segnerà 4 alzando il segnale K1.

D1,G1 eK1 vanno alla porta NAND (location M4), la cui uscita è posta alta quando il punteggio è diverso da 448, per poi andare bassa al raggiungimento dei 448;questa uscita va all'ingresso di una porta OR (location E4) e con il segnale /BP HIT (segnale che va basso quando viene colpito dalla palla il bordo superiore dello schermo o la racchetta) attiva o meno l'uscita della porta OR che funge da clock/trigger del flip-flop F4 ; in dettaglio quando il punteggio è diverso da 448 l'uscita OR è sempre alta, e va bassa solo quando il punteggio è uguale a 448 e contemporaneamente avviene un rimbalzo della palla (segnale /BP HIT).

Ho detto che l'uscita della porta OR (location E4) va al clock del flip-flop F4; questo flip-flop ha il compito di ricostituire (o ricostruire) interamente il muro quando questo è stato completamente abbattuto. Va precisato che l'abbattimento del muro è detectato dalla logica della scheda unicamente andando a testare il punteggio : se questo è uguale a 448 , allora significa che non vi è rimasto più nessun mattone.

Ad ogni modo, il flip-flop è resettato all'inizio del gioco dal segnale /Start Game che andando basso pone le uscite Q=bassa e /Q=alta; abbiamo detto che quando il punteggio è uguale a 448 (quindi nessun mattone presente) ed avviene un rimbalzo della palla, la porta OR E4 va bassa, tenendo quindi basso il segnale di clock del flip-flop; la porta OR torna alta quando è terminata la fase di rimbalzo (segnale /BP HIT nuovamante alto) : il passaggio da basso ad alto dell'uscita della porta OR e quindi del segnale di clock del flip-flop, fa sì che la sua l'uscita /Q sia bassa.

Il passaggio dallo stato alto a quello basso dell'uscita /Q del flip-flip collegata all'ingresso di trigger del multivibratore 9602 (location F3) fa sì che l'uscita FPD1 del multivibratore vada allo stato alto per poi tornare basso; l'inverso dicasi per l'uscita negata /FPD1.


Schema 1c

Il passaggio di stato dei segnali FPD1 e /FPD1 determinano secondo lo schema 1C il ripristino della memoria L3 e di conseguenza il ripristino dell'intero muro.

Lo stesso concetto fin qui espresso per il Player 1 vale per il Player 2

Due muri o tre ?

Considerando che il rispistino del secondo muro avviene solo quando il punteggio è uguale a 448 , il quale alla fine di tutta la catena setta il flip-flop F4, considerando che nussun altro segnale resetta il flip-flop (se non il segnale di inizio nuovo gioco), considerando che al secondo muro il punteggio non può che essere superiore a 448 punti, si direbbe che sia impossibile per il flip-flop F4 resettarsi per poi settarsi nuovamente, e quindi impossibile un ripristino del terzo muro.

E' piuttosto ipotizzabile che durante il gioco in modalità due giocatori si venga a creare una condizione non prevista, tale per cui l'indicazione a schermo del turno di gioco del Player 1 venga erroneamente attribuita al Player 2, e quindi il punteggio del Player 1 venga visualizzato come punteggio del Player 2 : il secondo muro del primo giocatore diverrebbe il famigerato terzo muro ma del secondo giocatore.

Il tutto però potrebbe essere un bug nella gestione della rappresentazione a video dei punteggi e turno dei giocatori; rimane comunque impossibile lo scambio "fisico" dei punteggi tra i giocatori.

Una cosa è sicura : per quanti muri ci siano, il punteggio visualizzato non potrà mai superare i 999 punti.

3 commenti:

Anonimo ha detto...

Ci sei quasi... fuochino... :-)

Anonimo ha detto...

Ciao,
come e' possibile contattarti per avere alcuni dettagli sull'eprom burner per atari vc2600?

Mirko ha detto...
Questo commento è stato eliminato dall'autore.