MOS VDCIl MOS VDC (acronimo di Video Display Controller, anche MOS 8563) è un processore prodotto da MOS Technology ed utilizzato come chip video nel computer Commodore 128. Era capace di gestire una modalità ad 80 colonne (640x200 pixel) in formato RGBI (RGB plus Intensity), il cui segnale è compatibile con lo standard CGA. I modelli D/DCR del C128 usano invece il più avanzato 8568 [D]VDC. È stato il chip più difficile da produrre rispetto a tutti gli altri chip di MOS, ha avuto anche problemi tecnici legati a difetti di timing che portavano al suo malfunzionamento[1]. StoriaOriginariamente previsto per l'uso in un computer da ufficio basato su Unix che non fu mai realmente costruito, la Commodore ripensò il VDC per l'uso su diversi prodotti: di questi solo il C128 vide la produzione. Poco dopo il rilascio del C128, la modalità bitmap del VDC fu descritta in dettaglio in un libro pubblicato inizialmente dalla casa editrice tedesca Data Becker, dove un listato in linguaggio Assembly proposto dagli autori permetteva di accendere o spegnere qualunque pixel video o, utilizzando il BASIC per effettuare i necessari calcoli, generare figure geometriche in bitmap sullo schermo ad 80 colonne. Nel febbraio del 1986 la rivista informatica americana RUN pubblicava Ultra Hi-Res Graphics, un articolo in cui descriveva la modalità bitmap del VDC ed includeva un listato in Assembly che estendeva il BASIC 7.0 per supportare la modalità grafica a 640x200 offerta dall'8563[2]. Gli autori Lou Wallace e David Darus convertirono il programma Ultra Hi-Res in un pacchetto commerciale denominato BASIC 8.0, che divenne uno dei più popolari programmi di utilità per il C128. Successivamente Commodore offrì la documentazione completa del VDC nel Commodore 128 Programmer's Reference Guide e le modalità bitmap del chip furono intensamente utilizzate nella versione per C128 del sistema operativo GEOS. Caratteristiche e descrizioneUfficialmente il VDC era un chip nato per sole modalità testuali, anche se un'attenta lettura dei documenti tecnici che gli ingegneri MOS fornirono con il chip, permise di capire agli sviluppatori del C128 che sarebbe stato possibile utilizzare il chip in una modalità grafica ad alta risoluzione (640x200 pixel) di tipo bitmap, anche se il BASIC 7.0 del Commodore 128 supportava modalità grafiche solo nei modi a 40 colonne (320x200 pixel) attraverso il vecchio chip VIC-II. A differenza dei precedenti chip video MOS quali il VIC-II, il VDC aveva una RAM video dedicata di 16 KB (espandibili a 64) nel C128 originale e di 64 KB nel Commododore 128D (la versione con tastiera separata dal computer). Questa RAM non era direttamente utilizzabile dal microprocessore. Il VDC non supportava inoltre gli sprite e ciò limitava il suo uso nei giochi. Era però capace di supportare il blitting, vale a dire poteva effettuare copie di blocchi della sua memoria video: questa funzionalità fu usata dall'editor video in ROM per pulire o scorrere rapidamente sezioni video. Specifiche tecniche
ProgrammazioneL'indirizzamento dei registri interni e della memoria video dedicata del VDC deve essere fatto in maniera indiretta. Prima di tutto bisogna dire al VDC quale dei suoi 37 registri interni deve essere usato, poi il programma deve attendere finché il VDC non è pronto all'accesso ed infine si può accedere in lettura o scrittura. Il seguente codice Assembly è per un'operazione di lettura: ldx #regnum ;VDC register to access stx $d600 ;write to control register loop bit $d600 ;check bit 7 of status register bpl loop ;VDC not ready lda $d601 ;read from VDC register ... Mentre il seguente codice è per una tipica operazione di scrittura: ldx #regnum ;VDC register to write to stx $d600 ;write to control register loop bit $d600 ;check bit 7 of status register bpl loop ;VDC not ready sta $d601 ;write to VDC register ... L'accesso ai registri del VDC è possibile anche attraverso il BASIC, chiamando alcune routine del KERNAL : Il codice seguente permette la lettura di uno dei registri del VDC, dove register è un numero tra 0 e 36 (vedi tabella): BANK15
...
SYS DEC("CDDA"),, register : RREG VDC
REM $ccda aka 52698 in decimal
PRINT VDC
...
Il codice seguente invece implementa la scrittura di uno dei registri del VDC, dove register è un numero tra 0 e 36 (vedi tabella), e value è un numero tra 0 to 255 BANK15
...
SYS DEC("CDCC"), value, register
REM $ccdc aka 52684 in decimal
...
A causa di questo curioso modo di controllo del VDC il frame rate massimo in modalità bitmap è in genere troppo basso per un qualunque gioco in stile "arcade" dove invece la manipolazione intensiva dei bit è una caratteristica fondamentale. Elenco dei registriQuesto elenco è stato estrapolato dalla guida Commodore 128 Programmer's Reference Guide[3]
Note
Collegamenti esterni
|