Texas Instruments TMS9918

Da Wikipedia, l'enciclopedia libera.
Il Texas Instruments TMS9918A

Il TMS9918 è chip video (o VDC da Video Display Controller) fabbricato da Texas Instruments. Fu usato in sistemi quali il ColecoVision, il CreatiVision, il Memotech MTX, i computer MSX1, il Sega SG-1000, lo Spectravideo, il Sord M5, il Tatung Einstein, il TI-99/4 ed i suoi cloni. Il Sega Master System, il Sega Game Gear ed il Mega Drive usavano delle versioni modificate del TMS9918 contenenti dei registri aggiuntivi e delle nuove modalità grafiche (il VDC del Mega Drive non supportava le modalità grafiche del TMS9918).

Il TMS9918 fu sostituito dallo Yamaha V9938, che supportava nuove modalità grafiche, sprite con più colori, un registro per lo scorrimento verticale ed una tavolozza personalizzabile.

Versioni[modifica | modifica wikitesto]

Il chip fu fabbricato in diverse varianti chiamate TMS9918A, TMS9928A e TMS9929A, dove la lettera "A" indica una seconda versione del chip con aggiunte nuove caratteristiche, principalmente una nuova modalità con grafica bitmap (Graphic 2). La prima versione, quella senza la "A", fu usata solo nel computer TI-99/A; il suo successore, il TI-99/4A, e gli altri computer avevano la versione TMS9918A. Il TMS9918A ed il TMS9928A avevano la frequenza del segnale video d'uscita a 60 Hertz mentre il TMS9929A a 50 Hz. Il TMS9918A differiva dagli altri due per il segnale video: il primo forniva un'uscita composita in standard NTSC mentre il TMS9928A ed il TMS9929A uscivano in YPbPr, un sistema usato nei Paesi con standard PAL/SECAM. A livello di costi era più conveniente generare un segnale video YPbPr e poi convertirlo in PAL/SECOM nel modulatore RF piuttosto che progettare e costruire un nuovo sistema per ogni standard video.

Tutti i chip di questa famiglia sono generalmente indicati con il nome TMS9918, alle volte con l'aggiunta della "A".

A metà degli anni ottanta furono rilasciate delle nuove versioni del TMS9918 chiamate TMS9118, TMS9128 e TMS9129: i chip differivano dai precedenti modelli per la funzione di un piedino cambiata e per una differente mappatura della memoria video.

Interfaccia[modifica | modifica wikitesto]

Il TMS9918 gestiva un blocco di memoria video personale di 16 kB esterno al chip ma non visibile all'interno dello spazio di indirizzi gestibili dalla CPU: il bus di memoria del VDC era infatti separato da quello del processore. Un bus indirizzi separato permetteva al VDC di accedere ai dati della memoria centrale del sistema senza rallentare la CPU; inoltre la memoria video esterna consentiva di risparmiare RAM nella memoria centrale. La CPU comunicava con il VDC attraverso una porta ad 8 bit ed i dati erano trasferiti tra questi chip tramite scritture su tale porta.

Modalità video[modifica | modifica wikitesto]

Il TMS9918A supportava 4 differenti modalità video (il TMS9918 non aveva la modalità Graphic 2):

  • Modalità 0 (testuale): 40×24 caratteri, monocromatica (dato che il video è largo 256 pixel, i caratteri sono larghi solo 6 pixel). Questa modalità non supporta gli sprite.
  • Modalità 1 (Graphic 1): 32×24 caratteri. Ogni 8 caratteri del set di caratteri si hanno un colore di sfondo ed uno principale diverso. Ciò significa che i caratteri da "0" a "7" hanno gli stessi attributi di colore. Sprite.
  • Modalità 2 (Graphic 2): 32×24 caratteri oppure grafica bitmap a 256×192 pixel con la limitazione dell'uso di 2 colori per ogni linea di 8 pixel all'interno di un carattere. Sprite.
  • Modalità 3 (Multicolor): modo 64×48 con blocchi grafici di 4×4 pixel. Ogni blocco può avere il suo colore. Sprite.

Il TMS9918 aveva una tavolozza fissa di 16 colori (15 tonalità più la trasparenza).

Sprite[modifica | modifica wikitesto]

Nelle modalità 1, 2 e 3 il VDC poteve renderizzare 32 sprite monocromatici di 8×8 o 16×16 pixel, ognuno colorato diversamente. L'unica limitazione era il numero per riga orizzontale: non più di 4 contemporaneamente, quelli eccedenti venivano scartati. Gli sprite avevano un attributo per impostare la priorità: quelli con priorità più alta venivano disegnati prima. Il VDC aveva un registro in cui veniva memorizzato lo sprite scartato: la CPU poteva quindi aggirare la limitazione dei 4 sprite per riga modificando la priorità degli sprite così da far apparire ad ogni fotogramma un gruppo di sprite differenti. In questo modo gli sprite non scomparivano completamente ma lampeggiavano sullo schermo. Questa tecnica è nota come "multiplazione degli sprite" ( sprite multiplexing).

Il VDC non supportava il movimento automatico degli sprite per cui il posizionamento degli sprite doveva essere gestito via software.

Quando 2 pixel non trasparenti di 2 sprite coincidevano veniva impostato il relativo flag della collisione fra sprite: ciò era utile per poter gestire da programma l'esatta dinamica dell'evento dato che, a differenze del TIA dell'Atari 2600 e del MOS VIC-II del Commodore 64, il TMS9918 non indicava quali sprite erano entrati in collisione ma solo che si era verificata una collisione.

Dettagli sulla Modalità 2[modifica | modifica wikitesto]

Il "color spill", un difetto video ben noto ai possessori di MSX. Quando la riga diagonale incrocia i cerchi, il giallo "sporca" i pixel presenti nell'area di 8×8 pixel che essa attraversa.

Tecnicamente la Modalità 2 è una modalità testuale con un insieme di caratteri colorati. Lo schermo è diviso verticalmente in 3 aree di 256×64 pixel ciascuna, ognuna delle quali può avere il proprio insieme di caratteri. Modificando i caratteri e disegnandoli sullo schermo il programma può simulare una modalità grafica in cui ogni pixel può essere impostato individualmente. Ciò nonostante il framebuffer risultante non è lineare.

Il programma può anche usare 3 insiemi di caratteri diversi e poi gestire lo schermo come una modalità testuale con un insieme di caratteri colorati. I motivi dello sfondo e gli sprite consistono allora di caratteri colorati. Questo metodo fu usato comunemente nei giochi dato che il riempimento/scorrimento dell'intero schermo si limitava al riempimento/scorrimento di soli 32×24 byte. Le parti grafiche potevano essere disegnate in modo tale che i bordi dei blocchi di 8×8 pixel non fossero così marcati: questa fu un'arte in cui Konami eccelse particolarmente.

Il TMS9918 gestiva i colori in Modalità 2 permettendo di usare per ogni riga di 8×1 pixel solo 2 tonalità diverse, lo sfondo ed il colore di riempimento, scelti liberamente da una tavolozza di 16. Ma per ogni area di 8×1 pixel potevano esistere solo 2 colori. E quando si manipolava lo schermo via BASIC con istruzioni grafiche era facile superare tale limite, ad esempio attraversando una sezione con i 2 già impostati con il tracciamento di una linea di un terzo colore. L'effetto che ne derivava era noto con il termine di "color spill" (visibile nell'immagine a lato). Questo difetto era comune anche al Sinclair ZX Spectrum.

Il VIC-II del C64 era strutturato diversamente e non aveva questo limite: il chip, infatti, permetteva di avere massimo 4 colori (da una tavolozza di 16) ogni area di 4×8 pixel, con 3 colori che potevano essere scelti per ogni area mentre il quarto, generalmente il colore di sfondo, che doveva rimanere uguale per tutto lo schermo. Utilizzando delle tecniche avanzate (ricorrendo a programmi in linguaggio macchina) si poteva comunque modificare tale colore di sfondo variandolo ad ogni linea di scansione dell'immagine.

Il TMS9918 non aveva nessun registro di scorrimento, che doveva essere eseguito quindi via software.

Accorgimenti usati nei giochi[modifica | modifica wikitesto]

Alcuni giochi cercarono di aggirare l'assenza dei registri di scorrimento eseguendo lo scorrimento dei pixel degli stessi caratteri, come il gioco Parsec per il TI-99/4A.

La conversione per MSX di Circus Charlie aveva lo scorrimento orizzontale e aggirava il limite dei 2 colori per ogni area di 8×1 pixel ricorrendo ad una grafica monocromatica con la sovrapposizione di alcuni sprite colorati.

Pippols scorreva verticalmente. Dato che lo scorrimento verticale non era afflitto dal limite dell'area 8×1, il personaggio controllato dal giocatore poteva camminare tra delle siepi di fiori colorati che scorrevano dolcemente. Gli altri personaggi ed oggetti del gioco erano monocromatici e non erano dettagliati con la stessa cura.

Road Fighter era un gioco di guida a scorrimento verticale: quando l'auto del giocatore viaggiava a tutta velocità lo schermo era spostato verso il basso di 8 pixel per fotogramma, rendendo lo scorrimento degli sprite dolce nonostante i salti di 8 pixel.

Knightmare aveva uno scorrimento verticale così lento che i salti di 8 pixel non disturbavano più di tanto. Zanac scorreva verticalmente molto più velocemente ma grazie agli sfondi con cui il giocatore non entrava mai in collisione il problema non dava particolarmente noia.

In Nemesis (un gioco in stile R-Type), invece, lo scorrimento orizzontale era il lato negativo del gioco, con i salti di 8 pixel distintamente visibili. Il suo seguito, Nemesis 2, sopperiva in parte agli scatti di 8 pixel offrendo una grafica altamente colorata e dettagliata.

Caratteristiche tecniche[modifica | modifica wikitesto]

  • RAM video: 16 kB
  • Modalità testuali: 40×24 e 32×24 caratteri
  • Risoluzione: 256×192 pixel, 16 colori (15 colori + trasparenza)
  • Sprite: 32, 1 colore, solo 4 ogni riga orizzontale

Strumenti grafici[modifica | modifica wikitesto]

Il TMS9918 ha visto nascere nel corso degli anni alcuni strumenti per la gestione delle immagini, il disegno degli sprite e, recentemente, anche alcuni strumenti di conversione delle immagini in formati compatibili con la risoluzione ed il numero di colori supportati in Modalità 2, alcuni basati su algoritmi di dithering quali quello di Floyd-Steinberg. Alcuni di questi strumenti di conversione sono disponibili liberamente, come l'MSX Screen Conversor, che converte direttamente online, e lo Screen 2 Converter, versione in linguaggio C del precedente (offline).

Collegamenti esterni[modifica | modifica wikitesto]

Voci correlate[modifica | modifica wikitesto]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica