giovedì 4 settembre 2008

Scheda tecnica di Intellivision

Oltre alle componenti qui trattate in modo esteso e completo, Intellivision comprendeva alcune funzionalità non direttamente accessibili dal programma di gioco. Le principali finalità di queste componenti erano: a) generare il system clock a 3.579545 Mhz, b) convertire il suono digitale e il segnale video in un uscita RF e c) fornire l'alimentazione elettrica al sistema. Tali componenti non verranno qui analizzate.

Le informazioni seguenti, inoltre, sono applicabili anche alle apparecchiature Radio Shack Tandyvision One, Sears Super Video Arcade e INTV Master Component (noto anche come INTV System III e INTV Super Pro System), che in realtà erano semplici cloni dell'Intellivision Master Component con piccole modifiche estetiche.

CPU General Instruments CP1610. La CPU di Intellivision era la General Instruments CP1610. Era un microprocessore general purpose a 16-bit, con 1024 op-codes separati che poteva essere usato sia a 8, che 10, 14 o 16-bit RAM o ROM. La CP1610 montata nell'Intellivision girava al clock di 894.886 Khz; ogni operazione richiedeva tra i 4 e i 12 microcicli (NOTA: con la sigla CP1600 viene indicato il prototipo del medesimo processore CP1610 montato nel Master Component, identico in tutto esclusa la velocità di clock).

Dal momento che la maggior parte delle istruzioni erano a 10 bit, i programmi stessi dei giochi venivano conservati in ROM a 10 bit: questa unità di misura a 10 bit è conosciuta come decle. Alcune istruzioni richiedevano 16 bits: queste venivano quindi immagazzinate in due partizioni successive a 10 bit, altrimenti note come bidecle (per i prototipi vennero usate due EPROMs a 8 bit, con i primi 8 bit di ogni decle immagazzinati in una EPROM, mentre i successivi 2 nell'altra).

STIC. Lo Standard Television Interface Chip (STIC), un General Instruments AY-3-8900-1, controllava la visualizzazione a video di Intellivision. Dialogando internamente, la CPU comunicava allo STIC come creare le immagini desiderate: lo STIC agiva di conseguenza senza sovraccaricare di ulteriore lavoro la CPU.

Lo STIC poteva visualizzare un fondale di 240 cards (ogni card era 8*8 pixels, il fondale arrivava quindi a 20*12 cards al massimo), fornendo così una risoluzione di 160*96 pixels (ogni pixel è alto 2 linee televisive, con proporzione 5/4). NOTA: lo STIC non visualizzava l'estrema colonna di pixels a destra, fornendo quindi una risoluzione effettiva di 159*96 pixels.
Ogni pixel poteva presentarsi in uno dei 16 colori (otto "primari" e otto "pastello").

Inoltre, lo STIC controllava sino ad 8 "oggetti in movimento", ognuno dei quali poteva essere 8*8 pixels o, a risoluzione doppia, 8*16 (ogni oggetto semovente poteva anche essere raddoppiato - nelle dimensioni - in altezza e/o in larghezza). Il vantaggio di questo sistema era che nel momento in cui la CPU avesse deciso il fondale e la sagoma dell'oggetto in movimento, poteva deciderne la posizione semplicemente segnalando un cambio di indirizzo allo STIC.
NOTA: l'oggetto semovente poteva essere localizzato in una griglia più alta e più larga rispetto al background, permettendone un'uscita dai margini dello schermo più controllata e fluida.

Commento dei Blue Sky Rangers: erano stati sviluppati due metodi per aggirare il limite degli otto oggetti in movimento contemporaneo sullo schermo: 1) multiplexing - ridefinendo e riposizionando un oggetto frame dopo frame dando l'illusione di due oggetti distinti; 2) GRAM sequenziale - scrivere direttamente nelle locations RAM grafiche, generalmente accessibili solo dall'EXEC, per animare le cards di fondale. A causa dello sfarfallìo che il multiplexing provocava negli oggetti, il primo sistema venne usato molto raramente (a differenza dei giochi Atari 2600 e Colecovision), mentre la GRAM sequenziale fu una tecnica utilizzata, ad esempio, in Space Armada, Star Strike e Tron Solar Sailer per creare l'illusione di schermi colmi di movimento.

Lo STIC aveva quindi il compito di cambiare posizione ad un oggetto, al fondale, ai livelli, etc. Lo STIC tracciava anche le interazioni tra gli oggetti in movimento e il fondale stesso, segnalando alla CPU qualsiasi contatto fra essi; ad esempio, la CPU definiva un campo di gioco e la palla sul quale essa andava a muoversi. La CPU, quindi, muoveva la palla sul campo semplicemente segalando continuamente allo STIC nuove coordinate X e Y. Lo STIC doveva assicurarsi che il fondale fosse ridisegnato in modo corretto a seguito dei movimenti della palla, e (se richiesto) segnalare alla CPU se la palla fuoriusciva dai bordi del campo di gioco o se interferiva con altro oggetti in movimento (come un giocatore avversario).

Lo STIC poteva anche permettere che l'intero fondale si muovesse in modo armonico, un pixel alla volta, sia sull'asse X che sull'asse Y. Gli oggetti in movimento si muovevano con il background. (Subroutine speciali erano disponibili per quei programmatori che volessero creare fondali a scorrimento continuo).

Ovviamente lo STIC decongestionava la CPU da una grande mole di lavoro, permettendo all'Intellivision di presentare un livello grafico maggiore rispetto a qualsiasi altro sistema per videogiochi o home computer.

Nello stesso tempo, lo STIC opponeva diversi limiti ai programmatori, in particolare sulla gamma cromatica.
- Gli oggetti in movimento potevano presentare un solo colore; per ottenere un soggetto multicolore, si dovevano utilizzare più oggetti (quindi sottraendoli dagli 8 totali visualizzabili contemporaneamente).
- Ogni card da 8*8 pixels poteva utilizzare al massimo due colori; esistevano due metodi per definire tali colori: il sistema primo piano/sfondo permetteva di definire singolarmente il colore di ogni card, ma uno dei due colori di ogni card era limitato agli otto primari. Due colori pastello non potevano essere assegnati alla medesima card; il sistema Color Stack limitava uno dei due colori di ogni card ad essere selezionato in modo sequenziale (e circolare) da un loop di quattro colori predefinito dal programmatore (circular stack). Comunque, nel momento in cui tutti i 16 colori sono stati disponibili per il color stack, sulla stessa card potevano essere visualizzati due colori pastello.
I due metodi non potevano essere utilizzati contemporaneamente sullo schermo; generalmente una schermata complessa era di semplice realizzazione con il metodo primo piano/sfondo, ma un progetto graficamente più semplice, realizzato con il metodo Color Stack, era maggiormente accattivante a causa della maggiore colorazione disponibile.
NOTA: esisteva un terzo sistema, denominato Quadrati Colorati, che permetteva la definizione di quattro colori primari per card ma era letteralmente limitato a quadrati colorati (blocchi di quattro lati per card). L'intero sfondo poteva essere comunque essere composto da quadrati di 4 pixels di lato: un metodo utilizzato solo tre volte, per Snafu e i titoli inediti Empire e Brickout!.

La RAM di Sistema. La CPU e lo STIC erano collegate assieme e servite dalla RAM di Sistema, una RA-3-9600 General Instruments. La RAM di Sistema non era solo un chip di memoria tampone, ma conteneva 240 locations di informazioni sulle 240 cards di background (BACKTAB), 110 locations di semplice RAM a 16 bit utilizzate dalla CPU e dallo STIC e un controller bus per controllare l'accesso alla ROM Grafica (GROM) e alla RAM Grafica (GRAM), entrambe gestite dalla CPU o dalla STIC (non nello stesso momento). La RAM di Sistema era un punto di vista cruciale dal punto di vista hardware, gestito in modo completo e trasparente dal programmatore.

Il Chip audio. Il chip audio era un AY-3-8914 General Instruments. Questo chip conteneva tre canali audio separati, ognuno dei quali poteva essere controllato singolarmente nella frequenza e nel volume. Nel chip c'era anche un generatore di rumore, che poteva essere aggiunto ad uno dei tre canali. Tutti i tre canali venivano poi missati per essere inviati all'uscita audio del televisore.

GROM e GRAM. La ROM Grafica e la RAM Grafica (GROM e GRAM) erano, a tutti gli effetti, chips dedicati agli elementi grafici che immagazzinavano i profili e le immagini utilizzate sullo schermo. La GRAM era programmabile, la GROM no.

La GRAM poteva contenere 64 immagini 8*8 bit decise dal programmatore. Qui venivano immagazzinati anche i fondali e gli oggetti in movimento; dal momento che nella GRAM potevano esserci sino a 8 oggetti semoventi a doppia risoluzione, c'erano sempre almeno 64-(8*2)=48 locations di fondale a disposizione del programmatore.

La GROM conteneva 213 locations predefinite per immagini 8*8 bit. In origine doveva contenere 256 immagini, ma venne sottratto lo spazio per un overflow di sistema dalla EXEC ROM che includeva numeri, caratteri maiuscoli/minuscoli, punteggiatura e caratteri grafici.

Per esempio, la location num. 37 della GROM conteneva il carattere E e veniva immagazzinato come:

01111110
01000000
01000000
01111110
01000000
01000000
01111110
00000000

Le 240 locations BACKTAB puntavano ad ogni punto nella GRAM o GROM. Per esempio, se la location BACKTAB numero 1 puntava alla GROM numero 37, una E sarebbe apparsa nell'angolo in alto a sinistra dello schermo.

BACKTAB conteneva le altre informazioni sullo schermo, come i colori di fondale o di primo piano e dove reperire il carattere nella GRAM o nella GROM. Comunque un'immagine prelevata dalla GRAM o dalla GROM poteva essere utilizzata per produrre immagini colorate differenti in differenti parti della stessa schermata (ad esempio, per ottenere una E bianca su fondo nero in una parte dello schermo e una E rossa su fondo blu su un'altra parte; entrambe utilizzavano lo stesso motivo grafico immagazzinato nella location GROM numero 37).

La GROM era una 2K ROM RO-3-9503 General Instruments.
La GRAM era composta da due banchi da 256 byte GTE 3539.

L'EXEC. L'intero sistema era controllato da un programma a 4K denominato l'Executive (EXEC), che risiedeva nell'Intellivision Executive ROM chip (con un'aggiunta di 344 bytes oltre al chip GROM). In un certo senso l'EXEC era il programma di gioco principale, mentre le cartucce erano semplicemente dei contenitori di subroutines e informazioni utilizzate dall'EXEC. Normalmente solo le routine dell'EXEC accedevano alla GROM, alla GRAM e ai registri di controllo dello STIC. L'EXEC conteneva le routine per far muovere gli oggetti sullo schermo, per caricare la GRAM, per creare suoni e musica, per creare le interazioni fra gli oggetti in movimento, etc. L'EXEC venne scritta da David Rolfe (Major League Baseball) di APh Technology Consultants per la Mattel Electronics.
NOTA: nell'Intellivision, l'Executive ROM era formata fisicamente da due banchi da 2K: un General Instruments RO-3-9502 e un RO-3-9504; nell'Intellivision II era un singolo banco da 4K RO-3-9506.

BUG: una certa subroutine dell'EXEC avrebbe causato un blocco di sistema nel caso avesse avuto un valore negativo. Diverse routines dell'EXEC utilizzavano questa subroutine per calcolare posizione e velocità degli oggetti in movimento; un gioco poteva bloccarsi quando la subroutine veniva richiamata nel momento in cui un oggetto fuoriusciva dal margine superiore o sinistro dello schermo e assumeva coordinate negative. In molti giochi il problema si verificò nelle fasi di sviluppo, così da permettere l'aggiunta di codici extra per evitare il blocco; in diversi titoli, però, il malfunzionamento si manifestò troppo tardi: la versione commercializzata di B-17 Bomber, ad esempio, in alcune situazioni si bloccava quando una bomba andava al di fuori del margine sinistro dello schermo.
Quando venne progettato l'Intellivision II, si cercò di correggere il bug; considerando però il fatto che si doveva garantire la piena compatibilità dei giochi sviluppati e testati su Intellivision II con Intellivision originale, si ritenne di lasciare il bug invariato.

Aneddoto: la domanda meno posta ai Blue Sky Rangers è stata rivolta da un ragazzo che ha aperto il proprio Intellivision e ha notato che non esiste connessione tra la CPU e la GROM. Come è possibile - ha chiesto - che il processore esegua le istruzioni dell'EXEC che sono localizzate nel chip GROM? La risposta è che quelle informazioni, quando richieste, sono caricate dalla GROM nelle locazioni BACKTAB della Ram di Sistema. Il processore, quindi, le esegue dalla RAM. Nel momento che BACKTAB normalmente definisce ciò che è presente sullo schermo, lo STIC è programmato per interrompere il segnale video mentre le istruzioni vengono eseguite; tali istruzoni sono generalmente utilizzate per caricare delle specifiche sulle immagini dalla cartuccia nella GRAM, che normalmente accade solo al RESET di Sistema. Questo è il motivo per il quale, quando si preme il tasto RESET, lo schermo diventa nero per alcuni secondi e occasionalmente vengono visualizzati strani caratteri.

RAM SCRATCHPAD. La RAM scratchpad è un chip 256*8 bit (GTE 3539), utilizzato dall'EXEC e dal chip sonoro per un immagazzinamento temporaneo delle informazioni. 147 bytes sono destinati al programma di gioco per tracciare il punteggio, il livello, le vite rimaste e altre variabili.

I CONTROLLER A DISCO. Ogni Intellivision possedeva un controller destro e sinistro. Ogni controller aveva un disco direzionale, una tastiera a 12 tasti e 4 bottoni "azione" (2 sul lato destro e 2 sul sinistro). Il disco direzionale poteva registrare 16 differenti locazioni quando veniva premuto, esattamente come un joystick.

I dischi direzionali presentavano due caratteristiche peculiari:

1) i bottoni azione superiori erano collegati tra loro, così che ci fossero solo tre bottoni azione separati: quello basso a sinistra, quello basso a destra e i superiori destro e sinistro;

2) i bottoni del tastierino numerico, duplicavano il disco direzionale e i tasti azione, così che si potessero utilizzare il disco direzionale e i bottoni azione oppure il tastierino (ma non tutti contemporaneamente).

Ogni controller era collegato alla console attraverso una porta a 8 bit (queste erano fisicamente le porte di input per la scheda video, ma non era rilevante per i programmatori). Il disco direzionale trasmetteva un codice a 5 bit, il bottone azione a 3. Il tastierino numerico trasmetteva un codice a 8 bit. L'EXEC conteneva routines che convertivano il codice a 5 bit del disco in numeri (da 0 a 15), che indicavano la direzione di pressione. Il programma di gioco poteva accedere direttamente alle porte di inputs, ma le routines dell'EXEC erano comunque sempre utilizzate.

Nessun commento: