Visualizzazione post con etichetta Retrohardware. Mostra tutti i post
Visualizzazione post con etichetta Retrohardware. Mostra tutti i post

mercoledì 2 maggio 2012

Print
Nell'estate del 1988 esce nelle sale cinematografiche "Chi ha incastrato Roger Rabbit", film a tecnica mista (persone in carne ed ossa recitano accanto a cartoni animati) diretto da Robert "Back to the future" Zemeckis e prodotto dal duo Disney / Amblim Entertainment (Steven Spilberg c'è sempre, se c'è un successo lui lo zampino ce lo deve aver messo per forza!!!!).
Il film ruota intorno al buffo coniglio Roger Rabbit ed al presunto tradimento di sua moglie, l'affascinante e formosa Jessica Rabbit. Roger è un attore presso gli studios della R.K. Maroon dove, insieme al suo partner Baby Herman (un cinquantenne dall'aspetto di un neonato), si esibisce in esilaranti sit-com che lo vedono impegnato, come baby-sitter, a salvare il pestifero poppante dalle situazione spinose in cui si va continuamente a cacciare.
Jessica è alta, seducente, tutta curve e sempre vestita con abiti attillati che ne mettono in risalto le forme. Il suadente cartone animato, incarnazione dello stereotipo della femme fatale, si esibisce come cantante presso l'esclusivo club "Inchiostro e tempera" dove, con i suoi pezzi, manda in solluchero il pubblico maschile, sia esso umano o cartone animato.
La carriere di Roger è minacciata dal suo rendimento, sempre più basso da quando il leporide ha il sospetto che la moglie abbia una relazione. Preoccupato per la sua star, Maroon assolda il detective privato Eddie Valiant (Bob Hoskins) per indagare sul presunto tradimento. L'indagine giunge ben presto ad una svolta che culmina con lo scatto di una fotografia in cui, Jessica e Marvin Acme (presidente della ACME Corporation e proprietario dei terreni su cui sorge Cartoonia, la città dei cartoni animati) sono intenti a fare il gioco della farfallina (gioco da bambini in cui si battono le mani l'un con l'altro). Roger, di fronte alla foto che ritrae al moglie nell'evidente gesto di tradimento, fugge disperato. Il mattino seguente Eddie viene svegliato dal tenente di polizia Santino che lo informa che Mr. Acme è stato trovato morto (schiacciato da una cassaforte) e che ci sono prove evidenti sulla colpevolezza di Roger Rabbit.
Roger è ovviamente stato incastrato (da cui il titolo della pellicola) e spetterà a lui, alla bella moglie, al detective Valiant e a tutta una serie di strampalati personaggi, dimostrare la sua innocenza, trovare il vero colpevole e sventare il piano del giudice Morton (Christopher Lloyd, altro pallino di Zemeckis) che vuole mettere le mani su Cartoonia e sui suoi abitanti.
Non vado oltre nella trama perché non voglio togliere nulla a chiunque di voi si sia perso questo vero e proprio capolavoro (quattro Oscar tra qui, ovviamente, quello per gli effetti speciali) .. un film assolutamente valido nonostante i vent'anni e più che si porta sul groppone :o)

Come spesso accade, dal film venne tratto un tie-in e, come altrettanto spesso accade, si trattò di un titolo mediocre, pubblicato lo stesso anno dell'uscita cinematografica dalla Buena Vista Software per Amiga, Apple II, Atari ST, Commodore 64 e PC/MS-DOS. Molto meglio (a mio parere) seppero fare, nel 1991, Disney e BlueSky Software, su Amiga e PC, con il loro Hare Raising Havoc, gioco che fin dal titolo prometteva sfaceli (in italiano suonerebbe più o meno "Lepre aumenta la distruzione").

A differenza del primo gioco, ispirato alla trama del film, Hare Raising Havoc trae spunto dal personaggio interpretato da Roger Rabbit nella sua "vita professionale" (e dai numerosi corti che seguirono l'uscita del lungometraggio): la mamma, affida a Roger il piccolo Baby Herman prima di recarsi al lavoro, raccomandando al coniglione di prestare attenzione all'incolumità del pargolo, pena una gita senza ritorno al laboratorio di scienze (dove notoriamente si eseguono esperimenti sugli animali).  Ovviamente, appena la signora lascia la casa, il terribile poppante fugge, lasciando in suo tutore in preda al panico per il suo futuro quanto mai incerto. Manca un'ora al rientro della mamma e a Roger non resta altro da fare che lanciarsi alla ricerca del marmocchio che, nonostante la sua andatura a carponi, è già riuscito a distanziare lo sconfortato leprotto. L'impresa appare ardua fin dal principio, visto che l'impacciato baby-sitter si trova chiuso, apparentemente senza via d'uscita, nel soggiorno di casa da cui dovrà uscire al più presto per evitare di diventare una cavia da laboratorio ... e questo è solo l'inizio :o)

 
Neanche il tempo di dire "Tranquilla signora ci penso io ad accudire il pargolo" che ci si ritrova, come degli idioti, a fissare il vuoto nel tentativo di scoprire come uscire dal soggiorno

Il gioco, che si presenta come un puzzle-adventure a scorrimento, vede il nostro Roger Rabbit muoversi all'interno di ambientazioni,  a prima vista prive d'uscita, con l'unico intento di abbandonarle per avvicinarsi al piccolo Herman. Le varie locazioni, pur non essendo mai troppo ampie, pullulano di oggetti con cui Roger deve interagire per conquistare l'uscita. Scopo di  ogni livello, è infatti quello di disporre ed utilizzare e i vari elementi dello scenario per dare origine, in ultima battuta, ad una reazione a catena che porta il goffo protagonista ad uscire dalla stanza in cui si trova "imprigionato". Per farsi un'idea, è sufficiente pensare che per superare il primo livello, è necessario farsi "sparare" dal ventilatore a soffitto, per rimbalzare sull'asse da stiro, su di un poggia piedi per essere infine scagliato, attraverso l'apertura sopra la porta, nella stanza successiva ... se all'insieme di queste azioni sconclusionate aggiungiamo della animazioni da Oscar ... beh, il divertimento è assicurato. Le gag messe in scena da Roger Rabbit sono assolutamente esilaranti, soprattutto quelle che seguono ad un'azione sbagliata, tanto da spingermi a dire che assistere ad una partita  è quasi come gustarsi un buon cartone animato.

 
A voi un paio delle animazioni esilaranti di cui vi parlo nell'articolo

Graficamente il titolo è decisamente valido. Lo stile cartoonesco è reso alla perfezione dall'abile tratto dei disegnatori. Le animazioni, come ho già detto, sono fantastiche e contribuiscono da sole a metà del divertimento (anche se dopo un po' tendono a ripetersi ... ma questo penso sia inevitabile). I minor numero di colori richiesto da questo tipo di grafica, fa si che le versioni Amiga e PC siano, da questo punto di vista, del tutto equivalenti (i muscoli della VGA, per questa volta, sono lasciati a riposo).
Il sonoro è composto completamente da effetti campionati ... SBANG, BING, SQUEEK, BONK che ben si sposano con la demenza del titolo. Da questo punto di vista, l'Amiga esce ancora una volta vincitore soprattutto per la qualità dei campioni decisamente più nitidi rispetto alla controparte PC (su questo argomento ho una mia teoria che vi spiegherò in un apposito box).
Per controllare Roger, joystick e tastiera sono assolutamente equivalenti, visto che sono sufficienti le quattro direzione ed il tasto azione per arrivare alla fine del gioco.
La giocabilità si attesta su ottimi livelli, grazie ad uno schema di gioco assolutamente accattivante ... gli avventurieri puri potrebbero storcere un po' il naso sia per via della tendenza del gioco a virare, in alcuni frangenti, verso il platform, sia per gli enigmi che a volte sono veramente demenziali ... ma in fondo, il terreno di battaglia è quello dei cartoni animati e in tale ambientazione la sobrietà, il rigore e la pacatezza sono da escludere :o)
A mostrare il fianco è purtroppo uno degli aspetti più importanti ... la longevità. Il gioco è decisamente semplice e come se non bastasse è pure corto (i livelli sono solo 7) ... il risultato è un gioco che finisce in fretta e giocato di filato non cuba più di quindici minuti ... decisamente troppo poco! Diciamo che quello che Roger Rabbit può darci ce lo da con il cuore ma purtroppo non è molto. Un po' aiuta il fattore tempo, entro cui il gioco deve essere completato, ma in ogni caso, con un po' di impegno, riuscirete a recuperare il pestifero Herman abbastanza agevolmente. In ogni caso, un gioco da provare assolutamente perché diverte, perché fa ridere e perché oggi giorno non sarete costretti a sborsare un "prezzo pieno" per un titolo che si conclude in un pomeriggio uggioso.

A voi il filmato in cui vi do un assaggio del titolo completando i primi tre livelli. Se vi aggrada, sotto il video trovate un paragrafetto dedicato al retro-hardware (argomento a cui spero di poter tornare a dedicarmi al più presto!!!).



Disney Sound Source

Hare Raising Havoc, come molti altri titoli Disney dell'epoca, è in grado di riprodurre audio digitale tramite la "Disney Sound Source", accrocchio da collegare alla porta parallela che potete ammirare nell'immagine qui a fianco. Lo strano apparecchio altro non è che una versione leggermente migliorata del Covox Speech Thing, device audio realizzato dalla Covox Inc nel 1986.
In pratica si tratta di un semplice DAC (Digital-to-Analog Converter), realizzato con una rete a scala di resistenze. Il circuito riceve campioni a otto bit dalla porta parallela, esegue la conversione e "consegna" il risultato all'uscita, a cui è connesso un altoparlante (ed eventualmente un amplificatore). Quanto si ottiene è lungi dall'essere perfetto e cristallino, ma segna comunque un netto passo in avanti rispetto al vituperato pc-speaker. Negli anni '90 le schede audio iniziavano già a prendere piede ma, richiedevano un esborso non indifferente. La Disney decide quindi di riprendere in mano il device Covox, apportarci alcune modifiche per migliorarne in parte la qualità (dimensiona meglio le resistenze, aggiunge un condensatore in serie, ecc), aggiungere un speaker amplificato (con controllo del volume, controllo on/off e alimentazione a pile o esterna) ... et voilà ... per soli 14$ ci si poteva portare a casa un periferica audio dalle capacità non indifferenti.
I limiti maggiori della periferica sono il supporto unicamente per i campioni a 8-bit di ampiezza, in suono monofonico e la necessita di dover gestire tramite codice la temporizzazione per l'invio dei dati ... per utilizzare una frequenza di 44KHz era necessario gestire un interrupt 44mila volte e rotte al secondo ... decisamente non alla portata di tutti i processori.
Da qui, penso derivi la minor pulizia del suono della versione PC di Hare Raising Havoc rispetto a quella Amiga. Il supporto al Disney Sound Source, "obbligava" a dimensionare verso il basso i parametri di qualità dell'audio.

Alla prossima ...

sabato 25 dicembre 2010

Print
Dopo un po' di articoli leggeri dedicati ai videogiochi, è giunto il momento di tornare a parlare un po' di hardware andando ad analizzare la seconda generazione di processori della famiglia x86. Quindi bando alle ciance e proseguiamo la nostra cavalcata in sella al cuore pulsante dei nostri amati PC ...

80186

All'inizio del 1982 la famiglia x86 di Intel si arricchisce di un nuovo microprocessore, il misconosciuto 80186 che, nonostante alcune interessanti innovazioni, fu relegato ben presto al solo mercato dei microcontrollori (processori single-chip generalmente utilizzati all'interno di sistemi embedded per applicazioni specifiche di controllo digitale).

L'80186 comodamente ospitato suo case PLCC a 68-pin


La nuova CPU Intel deriva direttamente dall'8086 da cui eredita il bus dati a 16 bit ed il bus indirizzi a 20 che gli permettono di accedere ad 1MB di memoria con lo stesso arzigogolato meccanismo già descritto per il capostipite dell'architettura x86. Le prime versioni dell'80186 commercializzate, in grado di operare alla frequenza di 6MHz, risultavano decisamente più performanti delle CPU di generazione precedente di pari frequenza, grazie alle numerose istruzioni codificate in hardware (calcolo degli indirizzi, operazioni di moltiplicazione e divisione, ecc).
Per ridurre il numero di chip esterni al processore, l'80186 integra al suo interno parte della logica necessaria al funzionamento, come illustrato nel seguente diagramma.



Il diagramma blocchi dell'architettura 80186 (click per ingrandire)

Come potete notare alcuni componenti come il generatore di clock, il controllore DMA ed il controllore delle interruzioni sono presenti direttamente all'interno del chip. Questa scelta favorì l'utilizzo dell'80186 come microcontrollore (essendo pratica in grado di funzionare con pochi elementi esterni) ma ne penalizzò l'uso all'interno dei personal computer, vista la sostanziale incompatibilità con l'architettura IBM PC costruita intorno all'8086. Nonostante questo "difetto" il nuovo processore Intel trovò spazio all'interno di alcuni sistemi entrati a loro modo nella storia; uno fra tutti il Tandy 2000, elaboratore commercializzato dalla catena di elettronica americana Radio Shack all'inizio del 1983, che grazie alla sua innovativa scheda grafica era in grado di fornire prestazioni di tutto rispetto per quei giorni.


Un giovanissimo Bill Gates posa accanto al Tandy 2000 con la primissima versione di Windows

Prima di passare oltre segnalo per dovere di cronaca l'80188, versione economica dell'80816 con bus dati a 8-bit.

80286

Il primo febbraio 1982 arriva sul mercato il nuovo processore di mamma Intel destinato a soppiantare l'ormai vetusto 8086 (datato 1978) nel sempre più effervescente mercato IBM PC. L'80286 condivide le stesse innovazioni architetturali del fratello minore che gli permettano di esibire prestazioni anche venti volte maggiori di un 8086 operante alla stessa frequenza di clock. Non vengono però riproposte le caratteristiche che resero l'80186 più simile ad un microcontrollore che ad un processore vero e proprio permettendo così ad IBM di definire la seconda generazione della sua architettura personal computer, denominata PC AT (Advance Technology) che venne commercializzata dal 1984 al 1987.



L'80286 in tutto il suo splendore

Tra le novità più interessanti abbiamo l'ampliamento del bus indirizzi che passa da 20 a 24 bit che permette al processore di indirizzare ben 16MB di memoria, una quantità decisamente considerevole per l'inizio degli anni '80. Lo spazio completo di indirizzamento non è però disponibile nella modalità reale, modalità ereditata direttamente dall'8086 che prevede indirizzi su 20 bit (accessibile tramite la tecnica della segmentazione di cui vi ho già parlato) ed conseguente tetto di 1MB, ma solamente nella nuova modalità protetta di cui vi parlerò tra poco. La modalità protetta, oltre a permettere l'accesso ad un maggior quantitativo di memoria, fornisce, a livello hardware, il supporto al multithreading caratteristica che favorì il diffondersi dei sistemi operativi unix like (come Venix, SCO Xenix) anche sulle piattaforme del duo IBM/Intel. A questo punto, il buon vecchio MS-DOS inizia a mostrare il fianco essendo in grado di operare unicamente in modalità reale e rigorosamente monothread. Nulla vieta ai programma MS-DOS di operare in modalità protetta a patto che sia installato un opportuno Dos Extender che colma le lacune di base del sistema operativo. Uno dei maggiori difetti dell'80286 fu l'impossibilità di "rientrare" dalla modalità protetta senza il riavvio, caratteristica che rese di fatto questa modalità poco sfruttata, almeno in ambito MS-DOS (discorso differente per i sistemi operativi che agivano completamente in modalità protetta, come unix, in cui questa limitazione di fatto sparisce) ... decisamente un smacco per gli amanti dei videogame che da questo avrebbero tratto molteplici vantaggi!

L'indirizzamento delle memoria nella modalità protetta

Come vi ho già accennato la modalità protetta permette alla CPU di accedere completamente ai 16 MB indirizzabili dal 286. Non si tratta però di una modalità di indirizzamento lineare (come quella adottata da alcuni concorrenti, leggi Motorola 68000) ma si passa dalla gestione a segmenti dell'8086 a quella a selettori. Andiamo a vedere di cosa si tratta evitando di scendere troppo nei tecnicismi pur cercando di essere il più esaurienti possibile ..

La prima cosa che balza all'occhio, come già era successo per l'8086, è che l'ampiezza del bus degli indirizzi è superiore a quella dei registri (che sono ovviamente a 16-bit), questo implica che anche in questo caso l'indirizzo "finale" sarà determinato dalla combinazione di due valori che definiscono uno la posizione base e l'altro il suo scostamento (offset) rispetto a quest'ultimo. Mentre nell'8086 l'operazione era decisamente semplice, si sommava il valore di uno dei registri di base moltiplicato per 16 (shift di 4 posizione verso sinistra) con il contenuto del corrispondente registro indice (con "l'imbarazzante" risultato che coppie di valori differenti generavano lo stesso indirizzo fisico), in questo le cose si complicano un pò soprattutto per via della possibilità di eseguire più thread contemporaneamente (beh ... non proprio contemporaneamente ma dedicando un po' di tempo all'esecuzione di ognuno dando la "sensazione" di concorrenza) che devono vivere "pensando" di avere tutte le risorse a loro disposizione.

    Nella modalità protetta i registri di segmento diventano dei selettori la cui struttura è rappresentata nella figura seguente:

    Il selettore

    I primi due bit (RPL, Requested Privilege Level) definiscono il livello di privilegio (tra i quattro disponibili) del selettore permettendo in questo modo di "proteggere" le porzioni di codice più importanti, come ad esempio il sistema operativo, da malevole "interferenze" (ad esempio dei programmi utente). Il terzo bit (TI, Table Indicator) indica a quale insieme appartiene il selettore: locale all'applicazione (LDT, Local Descriptor Table) o globale al sistema (GDT, Global Descriptor Table). I restanti 13 bit definiscono l'indice dell'elemento nella tabella dei descrittori (avremo quindi 8192 descrittori locali e altrettanti globali).
    A questo punto avrete capito che il nome selettore deriva dal fatto che tale valore viene utilizzato per selezionare un elemento all'interno delle tabelle dei descrittori, che sono il vero punto di partenza per il calcolo dell'indirizzo.

    I descrittori sono speciali strutture di memoria (grandi 8 byte, 64 bit) che descrivono un segmento. La loro struttura è la seguente (su ogni "linea" sono rappresentati 2 byte)

    Struttura di un descrittore di segmento
    • 2 byte (16 bit) quantità di byte a disposizione del segmento (LIMIT)
    • 3 byte (24 bit) di indirizzo di base del segmento (BASE)
    • 1 byte contente gli indicatori (flag) di controllo
    • 2 byte riservati per future estensione (già si pensava al 32 bit della futura generazione di processori)


     I flag di controllo del descrittore di segmento


    I flag di controllo sono i seguenti:
    •  A: Accessed, vale 1 se è stato effettuato accesso al segmento
    • TYPE: definisce il tipo di segmento (codice, dati, stack, ecc)
    • 1: Questo bit vale sempre uno per i descrittori di segmento (esistono altri tipi di descrittori ma li tralascio per non "sovraccaricarvi" troppo)
    • DPL: Descriptor Privilege Level, livello di privilegio richiesto per accedere al segmento
    • P: Present, vale 1 se il segmento è presente nella memoria fisica

    Per chiudere il cerchio ed effettuare la "procedura" di indirizzamento è necessario introdurre due nuovi registri GDTR (GDT Register) e LDTR (LDT Register) che contengono rispettivamente l'indirizzo della locazione di memoria in cui inizia la Global Descriptor Table e la Local Descriptor Table. La GDT è una ed è controllata, in genere, dal sistema operativo. Di LDT ne esistono più d'una in quanto sono, in genere, associate ad ogni singola applicazione in esecuzione (i puntatori alle varie LDT sono memorizzati nella GDT in speciali descrittori su cui non indugerò oltre, vi basti sapere che il valore viene caricato alla necessità all'interno del registro LDTR).
     Alla luce di quanto detto, il meccanismo per il passaggio dall'indirizzo logico (selettore:offset, registro selettore:registro indice) è illustrato dal seguente diagramma

    Passaggio da indirizzo logico a indirizzo fisico

    • Tramite il bit TI del selettore si seleziona su quale tabella dei descrittori andare a operare
    • Tramite i registri GDTR e LDTR viene selezionato l'inizio della tabella dei descrittori da utilizzare; il valore in esso contenuto viene sommato alla componente Index del selettore moltiplicata per 8 (dimensione in byte del descrittore)
    • L'indirizzo così ottenuto viene utilizzato per accedere al descrittore del segmento
    • Si controlla se l'applicazione dispone dei privilegi necessari ad accedere al segmento di memoria (confronto tra RPL e DPL). In caso contrario viene scatenata un'eccezione che blocca l'esecuzione del programma
    • Si controlla l'offset contenuto nel registro indice con il valore LIMIT del descrittore; se l'offset supera la dimensione del segmento viene generata un'eccezione che blocca l'esecuzione del programma
    • Si somma il valore BASE del descrittore con l'offset ottenendo così l'accesso alla memoria fisica
     La procedura può sembrare un po' complessa, ma l'eccellente implementazione in hardware di tale algoritmo, da parte dei progettisti Intel, fa si che possa essere eseguita in modo efficiente.

    Call-Gate

    Le "meraviglie" della modalità protetta non finiscono qui, vengono infatti introdotti i famigerati gate (letteralmente, cancello) che permettono di accedere a funzioni aventi un livello di privilegio maggiore. L'esempio più classico sono le call-gate che permettono alle applicazioni, che generalmente operano al livello di privilegio più basso, di fare chiamate a routine del sistema operativo (che operano a livello più di privilegio maggiore).


    Tramite il meccanismo dei gate tutto questo viene reso possibile. Oltre alle chiamate alla funzioni del sistema operativo (quelle che in seguito si chiameranno API), vengono introdotte le interruput-gate, per l'esecuzione delle routine di interruzione, e le task-gate che si occupano di eseguire il task-switching ossia il passaggio da un thread ad un altro per dare l'impressione di concorrenza tra più processi.

    Conclusioni

    Bene siamo quindi giunti al termine di questa articolo che, nonostante la sua inevitabile complessità, ci ha permesso di conoscere un po' meglio la seconda generazione dei processori Intel. Prima di chiudere vi invito a ragionare con me sulle seguenti considerazioni.

    L'80286 permette di accedere a 2^14 = 16382 (suddivisi equamente tra globali e locali) diversi segmenti tramite i campi Index e TI del selettore. Ogni descrittore permette l'accesso ad un segmento di 64KB (2^16). Facendo due conti si ottiene che il 286 è in grado di indirizzare virtualmente 2^14 (# segmenti) * 2^16 (ampiezza segmento) = 1GB di memoria (suddivisi equamente tra applicazioni e sistema operativo). Com'è possibile "mappare" 1GB di memoria su solo 16MB? Niente di più semplice, i segmenti non utilizzati vengono memorizzati sul disco e ricaricati quanto necessari all'elaborazione. I bit P (Presence) e A (Accessed) servono proprio a questo scopo: P dice al processore se il segmento è presente in memoria deve essere caricato sul disco, A dice al processore se il segmento è stato modificato e quindi se, in caso di necessità, deve essere scritto sul disco (se non è modificato ed è già sul disco tale operazione è inutile). Questi meccanismi, e altri che ho volutamente trascurato per non tediarvi troppo, fanno si che ogni thread abbia l'impressione di avere tutta la macchina a sua disposizione benché così non sia.

    Con il 286 inizia anche ad apparire la cache (ancora molto limita), che nel caso specifico viene utilizzata per mantenere gli indirizzi dei descrittori attivi per far si che il processore possa accedervi direttamente senza eseguire tutte le operazioni che vi ho descritto precedentemente.

    Insomma, comunque la si pensi l'80286 è stato un netto passo in avanti rispetto al suo diretto predecessore. Alcuni difetti strutturali (il "non ritorno" dalla modalità protetta, la lentezza dei gate) ne minarono il successo ma è indispensabile conoscerlo perché aprì la strada al 80386 che pochi anni dopo avrebbe contribuito a sancire il dominio dei processori Intel sulla concorrenza.

    Tutto ciò che vi ho raccontato non ha nessuna rilevanza per i giocatori o i programmatori (almeno di non lavorare a livello di kernel) ma trovo che sia interessante conoscere un po' meglio, senza scendere eccessivamente nel dettaglio, il funzionamento di quell'ammasso di silicio che permette a tutti noi di usare un personal computer. Alla prossima ....

    L'Olivetti M28, il primo personal computer della casa eporediese basato sull'80286 (1986)

    martedì 12 ottobre 2010

    Print
    Dopo la cinquina di giochi rigorosamente CGA che ho trattato negli ultimi post, mi è venuta la voglia di parlarvi un altro po' dello standard video introdotto da mamma IBM nel preistorico 1981. Nei due articoli (1, 2) che vi ho proposto alcuni mesi addietro avevo volutamente evitato di parlarvi del Composite Video Mode, modalità a colori fruibile unicamente su TV o monitor con ingresso video composito compatibili con lo standard NTSC (in grado, quindi, di operare alla frequenza di 60Hz). La ragione che mi spinse a tale omissione fu il non aver mai toccato con mano tale primizia tecnologica e quindi la mia totale inadeguatezza a descriverla oltre che dal punto di vista tecnico da quello "emozionale". Trascorrevo le mie giornate crogiolandomi nella mia ignoranza quand'ecco, come un fulmine a ciel sereno, arrivare sul mio blog l'amico Carlo Santagostino, conosciuto pochi giorni prima al VGH 2010 (manca la foto ma sarà per la prossima volta!!!), che mi invita a colmare la lacuna e mi informa che, il mitico DosBox (si lo so, vi ho promesso uno speciale ... lo faccio al più presto!!!) da un po' di versioni è in grado di emulare tale modalità. Cerco un po' per la rete, scopro come abilitarla e ... signori e signori mi si è palesato un universo multicolore che credevo irraggiungibile per i PC dei primi anni '80!!!

    Come avrete scoperto leggendo i miei articoli precedenti lo standard CGA prevedere 2 modalità grafiche; una in bassa risoluzione 320x200 a 4 colori (di cui uno selezionabile dalla tavolozza completa di 16 colori e tre fissati dal sistema) ed una monocromatica in alta risoluzione 640x200 (un colore di sfondo fisso, nero, e uno di primo piano selezionabile tra i 16 a disposizione) ... insomma, prestazioni accettabili per l'utilizzo di software da ufficio, che magari doveva tracciare qualche grafico, ma decisamente "povere" per lo scintillante mondo dei videogame.
    Come avrete letto tra le varie retro review che vi ho proposto, ci si divertiva ugualmente ma il senso di inferiorità, anche nei confronti di un misero C64, era decisamente opprimente. A tal proposito, vi ripropongo uno screenshot di Alley Cat (1984) a mio parere, uno dei migliori giochi della prima era videoludica del PC (maledetto magenta!!!!).


    Bene ... bando alla ciance a lanciamoci alla scoperta del fantasmagorico CGA Composite Video Mode che permetteva di utilizzare ben 16 colori contemporanei su schermo ... avete letto bene, 16 colori!!

    Tweaked Composite Video Mode

    La prima modalità a 16 colori della CGA è in realtà un hack della modalità 320x200x4 che si basa su di un difetto hardware della scheda. Dovete sapere che IBM, per mantenere bassi i costi di produzione della scheda, invece di utilizzare un convertitore RGB-YIQ per la conversione del segnale da RGB a video composito (YIQ è la codifica con cui vengono rappresentati i colori dallo standard NTSC) decise di utilizzare della circuiteria a componenti discreti più a buon mercato.
    Il risultato di tale scelta fu una non perfetta separazione tra i segnali di luminanza e cromoninaza che faceva si che pixel adiacenti (in orizzontale) interferissero uno con l’altro dando origine a “sbavature” di colore che, in molti, casi precludevano l’utilizzo di alcune modalità video. Un esempio è la modalità testuale ad 80 colonne, in ci il testo risulta di difficile (se non impossibile) lettura. Nell’immagine seguente un testo in modalità 80 colonne visualizzato a sinistra su un monitor RGB e a destra su di un TV.

    (click per ingrandire)

    Ma, come spesso succede, i programmatori geniali sono in grado di sfruttare a loro favore i bug hardware per ottenere risultati impensabili; ed ecco che, avvicinando due pixel di colori differenti si ottiene un nuovo pixel, grosso il doppio, il cui colore è combinazione dei colori di partenza. Alternando pixel di due dei quattro colori messi a disposizione della palette CGA si ottiene un nuova palette di 16 utilizzabili contemporaneamente, come illustrato nella figura seguente (basata sulla palette utilizzata da Alley Cat).

    (click per ingrandire)

    In conclusione, a patto di accettare un dimezzamento della risoluzione orizzontale (visto che da due pixel ne ottengo uno, la risoluzione effettiva è di 160x200) ed un leggero sfocamento dell’immagine è possibile utilizzare 16 colori contemporaneamente donando ai giochi un aspetto decisamente più accattivante. Per dovere di cronaca, cito che tale tecnica basata su artefatti legati alla codifica del segnale video era già utilizzata da altri homecomputer di prima generazione come Apple II e Amstrad CPC.

    Composite Video Mode

    Accanto a questa modalità artificiosa, i progettisti di IBM implementarono una modalità reale (e documentata) per poter utilizzare 16 colori contemporanei su dispositivi NTSC con ingresso video composito.
    Tale modalità si abilita selezionando la modalità 640x200 monocromatica ed in seguito impostanto a 0 il bit due del registro di controllo della CGA (03D8h). Con tale configurazione, un'immagine monocromatica visibile su di un monitor RGB, come per magia si mostra ricca di colori se visualizzata sul televisore. Nello specifico, gruppi di 4 pixel in bianco/nero vanno a selezionare uno dei 16 colori della palette (nella figura successiva). Anche in questo caso la risoluzione effettiva risulta essere 160x200 (640/4=160).

    (click per ingrandire)

    Conclusioni

    La diminuzione della risoluzione (in entrambe le modalità 160x200) e la leggera sfocature dell'immagine rendevano queste modalità non adatte all'utilizzo in applicazioni professionali ma molto appetibili in ambito videoludico. Putroppo le due modalità non ebbero la diffusione che si sarebbero meritata. Era infatti necessario disegnare due grafiche differenti (una per la modalità RGB e una per quella video composita) con il conseguente raddoppio dello spazio necessario a memorizzarla (e allora i floppy costavano!!). In alternativa era possibile adattare la grafica realizzata per la modalità RGB a quella composita eseguendo elaborazioni aggiuntive. Purtroppo, i primi PC,  che erano tutt'altro che dei mostri in termini di potenza di calcolo facevano un po' di fatica a digerire tale carico di lavoro extra (tenete in considerazione che non essendo previsto hardware ad-hoc per gestione di effetti grafici, come ad esempio la gestione degli sprite, tutta l'elaborazione era a carico della CPU).

    Nonostante questo i risultati sono eccezionali (un elenco completo dei giochi che supportano la modalità composita lo trovate sull'ottimo Moby Games):

    • La primissima versione di King Quest I - Sierra On-Line (1983)


    • Burger Time - Mattel & Data East (1982)


    • Ms. Pac-Man - Midway Games & Atarisoft (1983)




    Ahhh ... dimenticavo, per poter godere delle modalità video composite della CGA, è sufficiente editare il file dosbox.conf ed impostare machine=cga (sostituendo il valore di default, solitamente machine=svga_s3). Dopo aver lanciato in gioco se i colori non vi soddisfano (probabilmente il gioco si avvia in modalità RGB) , fatevi un giro in cerca della opzioni di configurazione e impostate composite come modalità video!!!

    Buon divertimento!!!!

    sabato 4 settembre 2010

    Print
    Dopo una serie di articoli dedicati a periferiche strettamente collegate all'ambito videoludico (schede grafiche ed audio), a partire da questo post, vorrei affrontare con voi l'evoluzione dei processori, o CPU (Central Processing Unit) per utilizzare un acronimo che fa tanto ingegnere, cuori pulsanti dei nostri amati PC.
    La nostra storia  non può che partire dal mitico Intel 8086, capostipite dalla famigerata architettura x86 che ancor oggi, sebbene evoluta e adeguatamente aggiornata, è alla base dei PC che utilizziamo quotidianamente con la stessa familiarità con cui adoperiamo una caffettiera per preparare un buon caffè.

    Il chip Intel 8086 in tutto suo splendore (fa quasi tenerezza!!)

    Un po' di storia

    Nel 1972, Intel lancia l'8008 il primo microprocessore 8-bit della storia. Progettato per la realizzazione di video terminali, non ebbe un grande successo vista la scarsa adattabilità a contesti diversi da quelli per cui era stato pensato. Oltre a questo, visti i soli 18 piedini (pin) dispononibili per collegarlo al resto dell'hardware dell'elaboratore, necessitava di parecchia logica esterna per espletare le proprie funzioni (era di fatto un microprocessore "monco"). A due anni di distanza arriva l'8080, che grazie all'utilizzo di un più spazioso case
    a 40 pin permette di inglobare tutta la logica necessaria al funzionamento diventando di fatto il primo microprocessore single-chip ad 8-bit. L'8080 fu alla base di storici computer quali l'Altair 8800 e l'IMSAI 8080, sistemi che a guardarli oggi sembrano tutto fuorché parenti degli "elettrodomestici" che sovrastano le nostre scrivanie.


     
    Senza parole :o)


    Il successo dell'8080 fu però incrinato dall'uscita nel 1986 dello Zilog Z80 (ad opera di un gruppo di transfughi di Intel), che divenne in breve il più popolare microprocessore ad 8-bit di tutti i tempi. Compatibile con l'8080 ma più performate vista la migliore realizzazione, lo Z80 è il microprocessore alla base di molti dei sistemi amati dei retrogramers quali lo ZX Spectrum, l'MSX-1, l'Amstrad CPC e il TSR-80. Tale fu il successo dello Z80 e del CP/M (sistema operativo ad esso legato) che il Commodore 128 integrava al suo interno tale processore. Nello stesso periodo escono anche lo sfortunato Motorola 6800 (1974) ed il mitico MOS 6502 (1975) processore scelto da Steve Wozniak per i suoi Apple I e Apple II entrambi superiori in prestazioni all'8080.
    Nel 1977, Intel lancia l'8085 più economico e prestante del modello precedente ma non in grado di reggere il passo con la concorrenza. L'era degli 8-bit si chiude quindi con una sonora sconfitta per la casa Santa Clara (California).

    L'8086 (anche noto come iAPX86) è il primo processore a 16-bit realizzato da Intel; il suo studio iniziò nel 1976 per concludersi con il lancio sul mercato nel 1978. Per dovere di cronaca cito il TMS-900, il primo microprocessore single-chip a 16-bit della storia, introdotto da Texas Instruments nel 1976 in seguito utilizzato nel celebre home computer TI-990/4A (celebre non tanto per le sue prestazioni o la sua diffusione ma quanto, per essere stato pubblicizzato dal grandissimo Bill "Signor Robinson" Cosby!!!).

    Non c'entra nulla ma non potevo esimermi ... MITICO!!!!!!

    Scusate la divagazione ma anche questa è cultura!!! Bene torniamo a nostro 8086 ... il processore fu progettato per essere compatibile a livello di codice sorgente con i sui predecessori (8085, 8080 e 8008), scelta che consentì di poter riutilizzare il software già scritto "semplicemente" ricompilandolo i programmi. Il modello di programmazione ed il set di istruzioni del processore è quindi quello dei modelli precedenti, arricchito delle funzionalità necessarie a sfruttare la nuova architettura a 16-bit. Per facilitare l'utilizzo di lunguaggi di programmazione di alto livello, come il Pascal ed il PL/M che si stavano rapidamente diffondendo, vennero inserite della apposite istruzioni che ne rendevano più efficiente l'esecuzione. Ulteriori innovazioni furono l'introduzione di microcodice, implemetazione in hardware di operazioni di alto livello, per le moltiplicazione e le divisioni ed una progettazione dei segnali di controllo della CPU pensati per gestire eventuali coprocessori e sistemi multiprocessore.
    Nonostante queste interessanti caratteristiche, l'8086 fu un processore molto criticato per alcune discutibili scelte architetturali (non preoccupatevi, ne parleremo in seguito); con ogni probabilità non era neppure il migliore processore presente sul mercato. La sua fortuna fu quella di essere scelto da IBM come cuore della nascente architettura PC, scelta che portò l'architettura x86 ad imporsi a livello planeratario nonostante i sui iniziali difetti (discorso analogo si può fare per il sistema operativo l'MS-DOS). Come spesso accade, ad imporsi non è il prodotto migliore ma quello che viene venduto meglio.

    Dettagli architetturali

    Bus di indirizzamento e dati

    L'8086 adotta un bus di 20 bit per l'indirizzamento che gli permette di accedere ad 1MB di memoria (2^20 = 1.048.576), un discreto passo in avanti rispetto ai soli 64KB utilizzabili dalle precedenti versioni dei processori Intel. Ad onor del vero di questi, solamente i primi 640KB (la memoria convenzionale, con cui si lottava quotidianamente per far partire i giochi) erano utilizzabili dalle applicazioni a causa della scelta degli ingegneri IBM di dedicare i restanti 384KB al BIOS ed al mapping delle periferiche (in seguito venne trovato il modo di sfruttare alcuni di questi 384KB tramite i famigerati gestori di memoria estesa).
    Per contenere i costi del pressore, i tecnici Intel decisero di utilizzare per il packaging lo stesso case a 40 pin già utilizzati per l'8080 e l'8085. Questa scelta rendeva di fatto impossibile utilizzare altri 16 pin per il bus dati, in quanto sarebbero restati solamente 4 contatti per gestire i segnali di controllo (decisamente troppo pochi). Fu quindi necessario utilizzare il multiplexing per poter trasferire dati diversi sugli stessi pin (in un caso gli indirizzi e nell'altro i dati veri e propri). In pratica, i primi 16 pin del bus di indirizzamento sono utilizzanti per trasferire (in momenti diversi) anche dati. Benché lo scopo fosse nobile, tale scelta influì pesantemente sulle prestazioni del processore in quanto, per poter effettuare un operazioni di scrittura/lettura della memoria erano necessari due cicli di bus, uno per selezionare la locazione ed uno per far viaggiare i dati.  Usa scelta non drammatica ma comunque discutibile!

    Pin layout dell'8086
    Registri

    I registri sono locazioni di memoria interne alla CPU accessibili con estrema velocità. La maggior parte computer si basa sull'architettura load-store (carica e memorizza) che prevede di: copiare i dati dalla memoria ai registri, eseguire le necessarie elaborazioni per poi copiare il risultato nuovamente in memoria.

    L'8086 dispone di 14 registri a 16-bit, suddivisi in quattro gruppi funzionali:
    • registri d'uso generale utilizzati per compiere le elaborazioni vere e proprie (possono essere utilizzati anche come 8 registri a 8-bit)
      • AX: registro accumulatore utilizzato per le operazioni artimetico/logiche, per operazioni di input-output e per memorizzare parte dei risultati delle operazioni di moltiplicazioni e divisione
      • BX: registro base utilizzato come accumulatore o come puntatore alla memoria
      • CX: registro contatore utilizzato per i cicli
      • DX: registro dati utilizzato in combinazione con AX per memorizzare valori lunghi 2 word (32 bit) come ad esempio il risultato di una moltiplicazione tra due valori a 16 bit.
    • registri indice e segmento utilizzati per accedere alla memoria (maggiori dettagli nel paragrafo successivo)
    • registro di stato i cui diversi bit indicano il verificarsi di una data condizione
      • C: l'operazione ha generato un riporto
      • Z: il risultato dell'operazione è zero
      • S: il risultato è negativo
      • ...
    A questi va aggiunto il registro che contiene l'indirizzo della prossima istruzione (Istruction Pointer o Program Counter). Il valore di tale registro viene incrementato automaticamente durante il normale ciclo di esecuzione di un programma in linguaggio macchina. Il suo valore può essere "manipolato" tramite le istruzioni di salto che permettono di controllare il flusso del programma (ad esempio per eseguire o meno un determinato blocco di codice al verificarsi di una condizione oppure richiamare una procedura)

    Registri d'uso generale
    AH AL AX (accumulatore)
    BH BL BX (base)
    CH CL CX (contatore)
    DH DL DX (dati)
    Registri indice
    SI Source Index
    DI Destination Index
    BP Base Pointer
    SP Stack Pointer
    Registro di stato
    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (bit position)
    - - - - O D I T S Z - A - P - C Flags
    Registri di segmento
    CS Code Segment
    DS Data Segment
    ES ExtraSegment
    SS Stack Segment
    Puntatore istruzione
    IP Instruction Pointer

    I registri dell'8086

    Segmentazione

    Andiamo adesso ad analizzare una della caratteristiche più bizzarre dell'8086: l'accesso alla memoria. Leggendo i paragrafi precedenti vi sarete accorti che tutti i registri dell'8086 sono in grado di memorizzare 16-bit mentre il bus di indirizzamento ha un'ampiezza di 20-bit. Anche senza essere dei guru dell'informatica, penso che a tutti sarà sorta la domanda: "dove saltano fuori i 4 bit che mancano?".
    La scelta fu quella di introdurre i registri di segmento (CS, DS, ES, SS) da cui prelevare i 4 bit necessari a generare l'indirizzo fisico su 20 bit. Ad esempio, il registro CS (Code Segment) contiene l'indirizzo del segmento di codice utilizzato in combinazione con l'instruction pointer per determinare l'indirizzo della prossima istruzione mentre, il registro DS (Data Segment) permette di accedere al segmento dei dati in combinazione con il registro indice SI (ma anche DI e BX). In pratica, la memoria è suddivisa in blocchi, detti appunto segmenti, da 64KB (quelli che posso indicizzare direttamente con i 16 bit del registri di indice) con i registri di segmento definisco dove questo ha inizio.
    Fin qui nulla di strano, essendo questa una tecnica già utilizzata dai processori che avevano un'ampiezza del bus di indirizzamento più ampia rispetto alla dimensione dei registri. La logica avrebbe voluto che l'indirizzo fisico (lineare) fosse calcolato come concatenazione tra il valore del registro segmento con quello di indice, ottenendo un valore su 32 bit di cui, i 12 bit più significativi venivano bellamente ignorati. La bizzarra scelta dei progettisti IBM (che procurò non pochi mal di testa agli sventurati programmatori) fu invece la seguente: il registro di segemento viene moltiplicato per 16 (in algebra binaria corrisponde a shiftare di 4 posizioni verso sinistra il valore, quindi buttare via i 4 bit più significativi e aggiungere quattro zeri sulla sinistra) e quindi sommare al risultato il valore del registro indice. Questo arzigogolo mentale fa si che la memoria invece di essere suddivisa in 16 segmenti da 64KB (risultato che si sarebbe ottenuto concatenando i due registri, ignorando i bit più significativi del risultato), è suddivisa in realtà in 4096 segmenti (sempre da 64KB!!!) tra loro ovviamente sovrapposti. Ogni segmento è separato dal successivo da 16 byte, blocco a cui viene dato il nome di paragrafo (delirio!!!!).

    Facciamo un esempio per capire meglio. Supponiamo di avere in DS il valore B800h (valore espresso in notazione esadecimale) e in SI di avere il valore 0000h. Applicando la formula precedete, otteniamo l'indirizzo fisico su 20 bit:

    B800h * 16 + 0000h = B8000h + 0000h = B8000h

    Se non vi fidate dei conti, armatevi di calcolatrice e verificate da voi :o)

    Quello che però voglio farvi notare è che, la coppia di valori B800:0000 (segmento:indice) non è l'unica che da origine a quell'indirizzo finale poichè, ad esempio, B000:8000 da esattemente lo stesso risultato:

    B000h * 16 + 8000h = B0000h + 8000h = B8000h

    Facendo due conti vi renderete facilmente conto che sono esattemente 4096 le diverse combinazioni segmento:indice che producono lo stesso risultato.

    A questo punto non voglio scendere troppo nel dettaglio ma, penso che risulti abbastanza chiaro come avere valori diversi che generano gli stessi risultati possa generare non poca confusione. Tra l'altro, l'utilizzo di questa tecnica "ingurgitava" diversi cicli macchina per il calcolo dell'indirizzo fisico che, sommati all'utilizzo del multiplexing dati/indirizzi, rendeva le operazioni di accesso alla memoria tutt'altro che efficienti.

    Schema del processore

    Vista la relativa semplicità dell'8086, mi permetto di porporvi lo schema logico del processore così come fu concepito dagli ingegneri IMB più di trent'anni fa.


    Dallo schema si notano:

    • i bus di cumunicazione interni, per i dati (8) e per gli indirizzi (4), ed i bus per i segnali verso la memoria e le periferiche (10, 11, 12)
    • i registri di uso generale e di indice (1), ed i registri di segmento e l'instruction pointer (2)
    • la logica per il calcolo dell'indirizzo fisico (3)
    • l'unita aritmetico logica per eseguire le elaborazioni (9)
    • la coda di fetch delle istruzioni (5) e l'unità di controllo del flusso di esecuzione (6)
    • la logica di controllo per l'accesso al bus esterno (7), che si occupa, ad esempio, della multiplexing dei segnali
    • il registro di stato (F)
    Per fare un esempio, l'istruzione

        MOV AX, [BX]

    copia il valore di AX nell'indirizzo di memoria DS:BX. Seguendo il flusso dell'istruzione sullo schema precedente, per prima cosa il valore del registro BX viene combinato con il valore in DS dalla logica di calcolo dell'indirizzo lineare (5). Il valore così calcolato viene passato alla circuiteria per il controllo del bus (7) che va poi ad indirizzare la memoria utilizzando l'address bus (10 e 11). A questo punto il valore in AX viene passato, tramite il data bus, interno al componente 7, per andare a salvare in memoria il valore (bus 11).

    In fondo non è così complicato :o)

    Miscellanea

    In questo paragrafo, alcune notizie in ordine sparso:

    • il primo 8086 aveva una frequenza operativa massima di 5MHz, mentre le successive versioni erano in grado di operare a 10MHz
    • nel 1979, Intel lancia l'8088, versione economica (e abbastanza "sfigata") del suo processore, con data bus a 8-bit
    • nel 1980 viene rilasciato l'8087 coprocessore che estendeva le capacità dell'8086 permettendogli di effettuare operazioni in virgola mobile (floating point) su valori di 80 bit
    • il primo personal computer basato sull'8086 fu Mycron 2000 (1980). Per quanto riguarda il panorama italiano e la mia esperienza personale non posso dimenticare il mitico Olivetti M24, prodotto dalla casa eporediese a partire dal 1983
    • fino al 2002, la NASA utilizzava l'8086 come processore per le operazioni di manutenzione delle Space Shuttle Discovery
     
    Il Mycron 2000 ed il mitico Olivetti M24


    Conclusioni

    Bene, siamo giunti alla fine di questa lunga cavalcata che ci ha permesso di conoscere un po' meglio il capostipite dell'architettura x86 che, nonostante alcuni demeriti, è riuscita nel tempo a "sotterrare" tutti i suoi concorreti. Penso che oggi non esista un personal computer non basato sull'architettura partorita da Intel nel lontano 1976 ... fino ad un po' di anni fa resistevano i Mac, ma dal 2006 anche la casa di Cupertino si è convertita, abbandonando i PowerPC.

    Comunque la si pensi, è un pezzo di storia che merita di essere ricordato.

    Alla prossima ...

    giovedì 15 luglio 2010

    Print
    Questa storia inizia nella piccola repubblica di Singapore dove, nel 1981, viene fondata la Creative Technology Limited. Inizialmente dedita alla vendita e alla riparazione di computer, nella prima metà degli anni '80 inizia ad assemblare PC adattandoli alle esigenze del mercato cinese. Tale progetto comprendeva la realizzazione di componenti audio per la riproduzione di audio sintetizzato. Forte del notevole successo riscosso in patria, Creative decide di realizzare la sua prima scheda audio per sistemi IBM PC.

    Arriva così nel 1987 la Creative Music System o CMS. La scheda basta su due chip Philips SA 1099, è in grado di gestire 12 voci in stereofonia (6 per ogni canale) ognuna delle quali pilotata da un generatore di onde quadre. Benché a prima vista superiore alla contemporanea AdLib,  in grado di gestire "solo" 9 voci monofoniche, la scheda di rivelò un insuccesso soprattutto a causa dei limiti del chip Philips che rendeva l'audio generato di poco superiore a quello da 12 PC Speaker utilizzati all'unisono (un delirio solo a pensarci!). A nulla servì l'uscita l'anno successivo della  Game Blaster, la stessa CMS sponsorizzata da RadioShack, catena di elettronica americana che, tra l'altro, quest'anno ha portato al Tour de France Lance Armstrong ... bisogna dire che sanno come spendere i loro soldi (cattiva questa!!).


    La Creative Music System

    Ma, si sa, i singaporiani sono gente tosta che non si arrende alla prima difficoltà ed ecco che nel 1989 viene rilasciata la prima Sound Blaster scheda dotata di una serie di caratteristiche, per l'epoca, molto interessanti:

    • ai due chip Philips, ereditati dalla precendente CMS, viene affiancato un chip Yamaha YM3812 (OPL2) rendendo di fatto la scheda compatibile al 100% con la concorrente AdLib (anch'essa basata sullo stesso integrato)
    • tra i suoi componenti la scheda annovera il DSP MCS-51, prodotto da Intel, in grado di gestire la compressione ADPCM e quindi di riprodurre audio digitale monofinico a 8 bit con frequenza fino a 23 KHz e di registrare con una frequenza di campionamento fino a 12 KHz. Purtroppo la Sound Blaster manca di un filtro antialiasing che rende il suono tendente al metallico; questa aspetto non la penalizzò in modo particolare vista la totale assenza di queste funzionalità su altri prodotti dedicati al mercato cusumer
    • la scheda integra una game port a cui è possibile collegare un joystick o un gamepad
    Quest'ultima caratteristica, assieme al prezzo competitivo e alla compatibilità totale con la AdLib (fortemente supportata dagli sviluppatori) garantì alla scheda Creative il meritato successo segnado, nel contempo, l'inizio della fine diAd Lib Inc che non seppe rispondere con prodotti altrettanto innovativi.

    Nell'anno successivo vengono rilasciati due revisioni della Sound Blaster: la Sound Blaster 1.5 e la Sound Blaster 2.0. La prima non era altro che una versione economica della scheda originale privata dei due sintetizzatori Philips (che potevano essere acquistati separatamente ... chissà quandi ne avranno venduti). La seconda, invece, introdusse una versione migliorata del DSP che permise l'aumento della frequenza di campionamento, portandola a 44 KHz in riproduzione e a 22 KHz in registrazione.

    La mitica Sound Blaster 2.0 in tutto il suo splendore

    Nel 1991 la Creative immette sul mercato la prima scheda audio PC, per il mercato consumer, in grado di riprodurre audio digitale stereofonico: la Sound Blaster Pro. Notevoli furono le innovazioni che contribuirono al successo di questo prodotto:

    • un nuovo DSP consente l'utilizzo della frequenza di campionamento di 44.1 KHz in mono e 22.050 KHz in stereo, sia in registrazione che in riproduzione
    • per la prima volta, in una scheda dedicata al mass market, viene introdotto un mixer che consente di regolare separatamente il volume dei vari canali di input/output e di agire sulle regolazioni dei toni alti e bassi
    • sul fronte dell'audio sintetizzato, la Sound Blaster Pro integra due chip OPL2 uno per ogni canale. Nella successiva revisione l'ormai obsoleto integrato Yamaha viene sostituito dal più performante Yamaha YMF262, anche noto come OPL3, in grado di gestire 18 voci
    • anche questa volta la Creative riesce ad individuare, come per la game port della prima Sound Blaster, l'add-in da integrare sulla propria scheda: un'interfaccia CD-ROM di tipo Panasonic/Matsushita. Nei primi anni '90 i lettori CD iniziano a diffondersi sui personal computer e uno degli standard più diffusi era il Matsushita MKE proposto da Panasonic. Ancora una volta la casa di Singapore permise agli utenti di acquistare, ad un prezzo competitivo, due prodotti in uno consentendo, tra l'altro, di risparmiare uno dei preziosi slot di espansione. Io stesso acquistai come mio primo lettore un fiammante CD-ROM Blaster da collegare alla mia Sound Blaster Pro.

      La Sound Blaster Pro (notate l'interfaccia per il CD sulla sinistra)

      Concludiamo questa retrospettiva con l'ultimo prodotto della prima generazione Sound Blaster: la Sound Blaster 16, la prima scheda PC consumer in grado di riprodurre audio digitale di qualità CD. La frequenza di campionamento viene portata a 44.1 KHz in stereo e la lungezza del singolo campione passa da 8 a 16 bit ... un'altra barriera era stata abbattuta.


      La Sound Blaster 16

      Benché questa articolo sia arrivato alla fine la storia, lastricata di successi, delle schede audio Creative procede fin quasi ai giorni nostri quando, con l'arrivo dei chip audio integrati sulla scheda madre, questo particolare mercato va lentamente a morire.

      Magari quando i tempi saranno maturi dedicherò un nuovo articolo alle successive evoluzioni della Sound Blaster ... per ora non mi resta che sperare di essere riuscito a catturare la vostra attenzione con questo articolo dedicato ad una delle innovazioni di maggior portata nell'hardware PC.

      Per chiudere ascoltativi sto video con una performance dell'OPL3 ... ma quanto è bella la synth music :o)

      venerdì 2 luglio 2010

      VGA

      Print
      Nel 1987 IBM definisce le specifiche dello standard VGA (Video Graphics Array) che di fatto va a livellare le capacità grafiche degli home computer degli anni '90. I sistemi più votati al gaming (Atari ST ed Amiga) restano leggermente superiori grazie all'hardware dedicato che, gli permette di gestire in modo più agevole sprite e scrolling; a tali limitazioni si sopperirà grazie all'incremento della potenza di calcolo dei PC (i 486 stanno per arrivare!!!).


      Prima di buttarci a capofitto nell'analisi delle specifiche tecniche voglio farvi notare la particolarità dell'acronimo VGA, in cui l'ultima lettera "perde" il significato di Adapter (adattatore, come era stato per CGA ed EGA) a favore di Array (vettore). La nuova definizione deriva dall'adozione, da parte di IBM, del modello single-chip, abbandonando il precedente che prevedeva la presenza diversi componenti aggiuntivi. Questo approccio facilita il processo costruttivo della scheda in quanto al chip VGA dovranno essere affiancati unicamente la memoria video, l'oscillatore al quarzo (il mitico clock!) ed il RAMDAC (per la conversione analogica-digitale del contenuto delle memoria).
      Tutt'oggi la VGA è il "comune denominatore" che tutte le schede video (si anche la tua ATI Radeon HD 5970 con 2GB DDR5!!!!) devono essere in grado di gestire prima che il sistema operativo carichi il driver specifico. Quando il sistema operativo non "trova" il driver specifico della scheda si avvia in modalità VGA (te ne accorgerai subito dopo avere installato la tua Radeon nuova fiammante!!!).

      Specifiche tecniche

      Le specifiche della VGA sono le seguenti:
      • 256 KB di RAM
      • modalità a 16 e 256 colori
      • tavolozza di 262,144 colori
      • clock principale tra 25,175 MHz o 28,322 MHz
      • frequenza di aggiornamento fino 70 Hz
      • Vertical Blank Interrupt (come il buon vecchio C64)
      • modalità planare fino a 16 colori (4 piani di bit)
      • modalità packed-pixel a 256 colori
      • font ridefinibili
      • Barrel Shifter per  velocizzare alcune operazioni in aritmentica a virgola mobile
      • gestione hardware dello scrolling
      Modalità grafiche

      Le modalità grafiche standard sono le seguenti:
      • 640x480x16 colori
      • 640x350x16 colori
      • 320x200x16 colori
      • 320x200x256 colori
      Oltre a questa modalità la VGA può essere configurata per emulare le modalità delle schede che ha sostituito (EGA e CGA).

      Il termine VGA è diventato di uso comune per definire la risoluzione 640x480 indipendentemente dall'hardware utilizzato per visualizzarla.

      Modalità testuali

      Le modalità alfanumeriche standard della VGA utilizzano 40x25 o 80x25 caselle di testo. Ogni cella può utilizzare uno dei 16 colori disponibili per il carattere (l'intera palette della vecchia CGA) e 8 per lo sfondo (i soli colori a bassa intensità).Ogni carattere può essere fatto lampeggiare e tutti i caratteri che lampeggia lo fanno all'unisono. Se si "rinuncia" alla possibilità di far lampeggiare le caselle di testo, si possono utilizzare i 16 colori anche per lo sfondo.

      Nelle modalità testuali ogni carattere è rappresentato da due byte. Il byte basso (o byte carattere) rappresenta il codice del carattere che verrà visualizzato, il byte alto (o byte attributi) descrive le proprietà ad esso associate quali colore di sfondo, colore del carattere, font-set e blinking.

      La tabella seguente riassume quanto descritto:

      Attributi Carattere
      7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
      blink**   colore di sfondo colore carattere* codice carattere

      *: il bit 3 del byte alto seleziona il font-set da utilizzare, tra i due disponibili se diversi, o completa il colore (se i font-set sono uguali)
      **: il bit 7 del byte alto imposta la condizione di blinking, o il quarto bit del colore di sfondo in base alla modalità selezionata

      Come accennato la VGA mette a disposizione due font-set liberamente ridefinibili. Ogni carattere è definito da una matrice di 8x8 pixel. In alcune modalità, come ad esempio la 80x25, ogni carattere è descritto da una matrice 9x16 pixel; in queste configurazioni il nono bit può valere 0 per ogni linea, oppure nella modalità Line Graphics Enable, il bit ha lo stesso valore di quello più a destra (il bit 0). Questa modalità viene utilizzata per realizzare pseudo grafica in modalità testuale.

      Segue la tabella riassuntiva delle modalità grafiche e testuali della VGA

      ModoTipo Risoluzione Caratteri Colori
      0h,1h Testo 360x400 40x25 16
      2h,3h Testo 720x400 80x25 16
      4h,5h Grafica 320x200 40x25 4
      6h Grafica 640x200 80x25 2
      7h Testo 720x400 80x25 Mono
      Dh Grafica 320x200 40x25 16
      Eh Grafica 640x200 80x25 16
      Fh Grafica 640x350 80x25 Mono
      10h Grafica 640x350 80x25 16
      11h Grafica 640x480 80x30 2
      12h Grafica 640x480 80x30 16
      13h Grafica 320x200 40x25 256


      La palette

      La VGA estende ulteriormente la tavolozza dei colori portandola alla bellezza di 262,144. Il numero dei colori visualizzabili contemporanemente sale a 256 anche se ufficialmente nella sola modalità 320x200 (il famigerato Mode 13h).

      Per ogni componente cromatica (rosso, verde e blu) sono disponibili 6 bit, per una profondità di colore totale di 18 bit (2^18 = 262,144 combinazioni differenti). Ovviamente come già per la EGA, ognuno dei 256 colori della palette di default (nella figura seguente) può essere ridefinito pescando a piene mani dalla tavolozza completa (in Xenon 2, recensito nel post precedente, la palette è molto più orientata ai colori metallici come da tradizione dei Bitmap Brothers).



      L'utilizzo del RAMDAC permette di realizzare interessanti effetti (come ad esempio il fading, dissolvenza dei colori verso il nero). In pratica tramite l'utilizzo di un DAC fa si che ridefinendo "al volo" un colore della palette utilizzata, questo si rifletta automaticamente a video. Giocando un po' con i gradienti di colori, il gioco è fatto :o)

      Tweaked mode

      Nel tentativo di portare la VGA ai suoi limiti nel corso degli anni furono scoperte diverse modalità truccate che permisero di utilizzare risoluzioni e tecniche non standard. La più famosa di queste è senza dubbio il Mode X (come fu battezzata da Michael Abrash, suo scopritore) modalità tweacked del Mode 13h.

      Nelle modalità grafiche standard della VGA (quindi anche nel Mode 13h), la memoria è vista come un insieme di locazioni di memoria consecutive che "mappano" uno ad uno i pixel del video; per la modalità 320x200x256 colori si ha l'impressione di accedere ad un'area di memoria sequenziale di 64KB. In realtà tutte le modalità grafiche della VGA hanno una rappresentazione planare, su 4 piani di bit, della memoria video: il colore del pixel non è specificato in aree sequanziali della memoria ma suddivisa tra più blocchi (i bit-plane). Il primo pixel è mappato sul primo byte del primo piano, il secondo è il primo byte del secondo piano e così via. Rispetto alla EGA in cui il calcolo del bit-plane, dato il pixel, era a carico del programmatore, nelle modalità VGA standard tale complessità è demandata del processo grafico, che si incarica di calcolare in quale piano è mappato il pixel che si vuole andare a "colorare". Suppongo che la domanda che si pose Michael Abrash fu: "Possibile che non si riescano a sfruttare in modo più efficente tutti i 256KB di memoria video previsti per la VGA?".
      Agendo sui registri di configurazione della VGA, Abrash, riuscì ad avere l'accesso diretto ai bit-plane in barba alla logica interna della scheda che mascherava questa possibilità. La modalità standard di utilizzo della VGA viene da qui in poi denominata chained (incatenata), la nuova unchained (senza catene). Gli americani sono troppo i migliori nell'affibbiare un nome alle cose!!!
      L'accesso diretto alla memoria benché complicasse, non di poco, la programmazione e diminuisse l'efficienza dell'esecuzione (i conti prima fatti in hardware, ora erano affidati al programma) si rivelò decisiva grazie ad alcune sue caratteristiche:

      • risoluzione fino a 360x480x256 colori
      • possibilità di utilizzare le tecniche di double e triple buffering ossia sfruttare la maggior memoria video per preparare la videata successiva (back buffer) nel ciclo raster in cui l'immagine corrente (front buffer) viene visualizzata e quindi eseguire un page flipping (scambio di pagina) prima dell'inizio del ciclo di rinfresco successivo (durante il quale, ovviamente, si preparava la nuova immagine!). Se consideriamo la modalita 320x200x256 colori abbiamo a disposizione ben 4 "pagine" sui cui poter operare (320x200x256 = 64KB per ogni videata, da cui 256KB/64KB = 4 pagine)
      • possibilità di valorizzare 4 pixel sulla stessa linea raster in una singola istruzione, sfruttando a proprio vantaggio la logica che nelle modalità standard permette di mascherare la gestione dei bit-plane. Questa tecnica permette di ottimizzare lo riempimento di poligoni e linee e sarà fondamentale per la realizzazione di primi giochi 3D.
      In letteratura Mode X è diventato sinonimo della modalità 320x240x256 colori. In tale configurazione, essendo il rapporto tra la risoluzione verticale e quella orizzontale uguale a quelle del monitor (4:3) si può godere del beneficio del pixel quadrato (square pixel) che migliora sensibilmente la qualità dell'immagine.

      Tra le modalità più utilizzate voglio ancora ricordare il Mode Y, 320x200x256 colori (come il Mode 13h ma in versione unchained) e il Mode Cube 256x256x256 colori (in questa configurazione a scapito della calo di dettaglio, si ha una maggiore velocità di accesso alla memoria video in quando, non sono necessarie operazioni addizionali per il calcolo del bit-plane).

      Indirizzamento

      La memoria video della VGA è mappata sulla memoria reale del PC tra i segmenti 0xA0000 e 0xBFFFF (memory mapping), nello specifico gli indirizzi di "partenza" sono i seguenti:

      • 0xA0000 per le modalità grafiche EGA e VGA (64KB)
      • 0xB0000 per le modalità testuali monocromatiche (32 KB)
      • 0xB8000 per le modalità testuali a colori e per quelle grafiche compatibili CGA (32 KB)
      Questa separazione tra gli indirizzi permise di realizzare i primi sistemi dual monitor. In buona sostanza installate due schede VGA impostandone una in modalità grafica ed una in modalita testuale monocromatica si può, ad esempio, visualizzare un foglio di calcolo su di un monitor ed il grafico corrispondente sul secondo (in quando le due schede leggono i dati da locazioni differenti delle memoria). Oppure, avere da un parte il programma in esecuzione e dall'altra in debugger in modalità testuale. Fichissimo!!!! :o)

      Conclusioni

      Bene siamo giunti alla conclusione di questa cavalcata in groppa allo standard VGA. Chiedo scusa fin da ora a tutti gli esperti che noteranno imprecisioni ed omissioni di questo post. Ho volutamente cercato di semplificare i concetti e le tecniche più complesse per rendere la trattazione accessibile a tutti. Questo vuol essere un blog divulgativo che permetta a tutti di farsi un'idea su quelle che erano le caratteristiche dei videogiochi e dell'hardware che hanno fatto il periodo d'oro (a mio avviso) di questo media sui personal computer. Lascio ad altri i tecnicismi esasperati :o)

      Vi lascio con sei screenshot di famosissimi giochi PC VGA ... sapete riconoscerli? Attendo le vostre risposte nei commenti ... al vincitore, forse, ricchi premi e cotillons :o)

      Alla prossima ...

       

       

       

      sabato 19 giugno 2010

      Print
      Dopo tanto parlar di giochi è giunto il momento di fare il punto della situazione sull'hardware che velocemente si evolve ampliando le capacità dei nostri amati PC. Oggi parleremo dello standard grafico EGA e dalla AdLib.

      EGA

      Nel 1984, IBM rilascia le specifiche dello standard EGA (Enhanced Graphics Adapter) che segna la fine della grafica a quattro colori che per anni ha consumato le diottrie degli utenti PC.



      Il nuovo standard consente la visualizzazione simultanea di 16 colori selezionabili da una palette di 64, ed una risoluzione massima di 640x350 pixel. La scheda mantiene la compatibilità con la CGA, ed estende le sue modalità grafiche 320x200 e 640x200 permettendo l'utilizzo a tali risoluzione di una tavolozza di 16 colori. In questa ultime due modalità è possibile utilizzare la sola palette di default (in pratica i 16 differenti colori della palette CGA).

      La EGA utilizza una rappresentazione planare dell'immagine su 2 piani di bit. Questa tecnica affiancata all'utilizzo di logica ad-hoc per la lettura e la scrittura dei dati, consentì di  incrementare sensibilmente l'esecuzione delle operazioni grafiche e può essere considerata la prima forma di accellerazione nella storia delle schede grafiche PC.

      La palette

      Come detto in precedenza, la EGA è in grado di visualizzare contemporaneamente 16 colori. Ognuno di questi colori può essere ridefinito utilizzando uno dei 64 colori che compongono la tavolozza completa.
      Un'estensione di 64 colori necessita di 6 bit (2^6=64) per essere descritta. Per ogni componente cromatica sono quindi disponibili 2 bit che permettono ad ogni canale di assumere 4 diverse varianti del colore base (che "mescolandosi" con le altre danno origine ai 64 colori disponibili).

      I colori sono rappresentati con la codifica rgbRGB, in cui le lettere minuscole minuscole sono i bit meno significativi delle tre componenti cromatiche e le lettere maiuscole i bit più significativi.

      Ad esempio il colore magenta, i bit più significativi delle componenti rossa e blu sono a 1, mentre tutti gli altri valori sono a 0. La rappresentazione del colore magenta è quindi data dalla seguente configurazione di bit: 000101.

      Questa codifica un po' astrusa deriva dall'adozione rappresentazione planare dell'immagine.

      La tabella seguente riporta la palette di default delle modalità grafiche EGA, formata dall'intera palette della CGA. Sulla destra i 64 colori della palette completa.

      Palette default EGA
      Colore rgbRGB Decimale
      0 – nero (#000000) 000000 0
      1 – blue (#0000AA) 000001 1
      2 – verde (#00AA00) 000010 2
      3 – ciano (#00AAAA) 000011 3
      4 – rosso (#AA0000) 000100 4
      5 – magenta (#AA00AA) 000101 5
      6 – marrone (#AA5500) 010100 20
      7 – grigio chiaro (#AAAAAA) 000111 7
      8 – grigio scuro (#555555) 111000 56
      9 – blu chiaro (#5555FF) 111001 57
      10 – verde chiaro (#55FF55) 111010 58
      11 – ciano chiaro (#55FFFF) 111011 59
      12 – rosso chiaro (#FF5555) 111100 60
      13 – magenta chiaro (#FF55FF) 111101 61
      14 – giallo chiaro (#FFFF55) 111110 62
      15 – bianco (#FFFFFF) 111111 63

      E' vero 16 colori non sono poi così tanti ma in mani sapienti i risultati sono decisamente apprezzabili, come si può notare delle immagini seguenti.

       


      AdLib

      Nel 1987 Martin Prevel professore e vice preside della facoltà di musica dell'università canadese di Laval fonda la Ad Lib Inc. L'anno successivo viene rilasciata la AdLib Music Synthesizer Card, o più semplicemente AdLib, la prima scheda musicale mass-market per PC. E' l'inizio di una nuova epoca che vede la fine del PC Speaker, con buona pace di tutti gli utenti frustrati delle limitate capacità sonore del proprio sistema. Il primo gioco a supportare la nuova periferiche fu King Quest IV - The persil of Rosella, rilasciato dalla Sierra On-Line nel 1988. Ancora una volta la software house californiana si dimostra baluardo nello sfruttare le nuove tecnologie.


      La AdLib si basa sul chip Yahama YM3812, attorno a cui viene montata la circuiteria necessaria ad interfacciarsi con il bus ISA, a qui tempi standard per l'espansione dei sistemi PC.

      Il chip YM3812, anche noto come OPL2 (FM OPerator type-L), permette di gestire 9 canali ognuno dei quali pilotati da 2 oscillatori. Ogni oscillatore può generare un'onda sinusoidale pura e tre sue varianti: con parte negativa invertita, con parte negativa soppressa e a pseudo dente di sega (solo la parte cresente della semionda positiva). Come nel più classico dei sintetizzatori, la prima onda (la fondamentale) viene modulata, in fase ed ampiezza mediante la seconda (la modulante). Il segnale modulato modifica la propria fase in funzione del segnale modulante, perdendo così la caratteristica di segnale puro e arricchendosi di nuove armoniche; il risultato è estremamente variabile in funzione del rapporto aritmetico fra le frequenze e l'ampiezza del segnale modulante: maggiore è l'ampiezza del segnale modulante, maggiore sarà la distribuzione di armoniche nel segnale fondamentale. Volendo fare un esempio reale è come quando la corda della chitarra viene pizzicata. La fondamentale della corda è l'oscillatore modulato, mentre l'andamento nel tempo della componente del pizzico rappresenta l'oscillatore modulante. Il suono risultante sarà pertanto diversamente colorato in funzione dell'intensità e della modalità (dita o plettro) del pizzico.

      Insomma l'AdLib fa più o meno il lavoro del buon vecchio SID, fornendo, dal  punto di vista puramente musicale,  risultati più che aprezzabili. Non è previsto il supporto dall'udio digitale (PCM) quindi per ora scordiamoci gli scoppiettanti effetti sonori dell'Amiga.

      Vi invito ad "ascoltare" il seguente video per apprezzare ciò che l'AdLib era in grado di fare. Paura, per chi è cresciuto a pane e beep beep :o)



      Conclusioni

      Spero che questo secondo appuntamento con la rubrica del retrohardware sia stata di vostro gradimento. Oggi abbiamo ripercorso la prima tappa dell'evoluzione del PC che piano piano inizia a colmare le distanze che lo separano degli altri homecomputer. Nonostante le indubbie qualità delle due periferiche che abbiamo analizzato esse ebbero vita relativamente breve. La EGA fu presto sostituita da IBM con la VGA, più adatta a soddisfare gli utenti (giocatori e professionisti) sempre più esigenti. La AdLib fu invece spazzata via dall'arrivo sul mercato dello tsunami Sound Blaster. Di tutto questo e molto altro parleremo nelle prossime puntate ... stay tuned :o)