MOS VDC
MOS VDC (acronim pentru Video Display Controller , de asemenea MOS 8563 ) este un procesor produs de MOS Technology și utilizat ca cip video în computerul Commodore 128 .
Era capabil să gestioneze un mod de 80 coloane (640x200 pixeli ) în format RGB I (RGB plus Intensity), al cărui semnal este compatibil cu standardul CGA . Modelele D / DCR ale modelului C128 folosesc în schimb VDC 8568 [D] mai avansat. A fost cel mai dificil cip de produs în comparație cu toate celelalte cipuri MOS, a avut și probleme tehnice legate de defecte de sincronizare care au dus la funcționarea defectuoasă a acestuia [1] .
Istorie
Destinat inițial pentru a fi utilizat într-un computer de birou bazat pe Unix care nu a fost niciodată construit, Commodore a regândit VDC pentru a fi utilizat pe mai multe produse: dintre acestea, numai C128 a văzut producția.
La scurt timp după lansarea C128, modul bitmap al VDC a fost descris în detaliu într-o carte publicată inițial de editura germană Data Becker , unde o listare în limbajul asamblării propusă de autori a permis activarea sau dezactivarea oricărui pixel video sau, folosind BASIC pentru a efectua calculele necesare, generați figuri geometrice în bitmap pe ecranul de 80 de coloane. În februarie 1986, revista americană de computer RUN a publicat Ultra Hi-Res Graphics , un articol în care descria modul bitmap al VDC și includea o listă în Assembly care extindea BASIC 7.0 pentru a suporta modul grafic 640x200 oferit de 8563 [2] ] . Autorii Lou Wallace și David Darus au transformat programul Ultra Hi-Res într-un pachet comercial numit BASIC 8.0 , care a devenit unul dintre cele mai populare utilități pentru C128. Mai târziu, Commodore a oferit documentația completă a VDC în Ghidul de referință al programatorului Commodore 128, iar modurile bitmap ale cipului au fost puternic utilizate în versiunea C128 a sistemului de operare GEOS .
Caracteristici și descriere
Oficial, VDC a fost un cip născut pentru modurile numai text, deși o lectură atentă a documentelor tehnice pe care inginerii MOS le-au furnizat împreună cu cipul, a permis dezvoltatorilor C128 să înțeleagă că ar fi posibil să se utilizeze cipul într-un mod modul grafic.rezoluția bitmap (640x200 pixeli), deși Commodore 128 BASIC 7.0 acceptă doar modurile grafice în modurile 40 coloane (320x200 pixeli) prin intermediul vechiului cip VIC-II. Spre deosebire de cipurile video MOS anterioare, cum ar fi VIC-II , VDC avea o memorie RAM dedicată de 16 KB (extensibilă la 64) în originalul C128 și 64 KB în Commododore 128D (versiunea cu o tastatură separată de computer). Această memorie RAM nu a putut fi utilizată direct de microprocesor.
VDC, de asemenea, nu a acceptat sprite, care a limitat utilizarea sa în jocuri. Cu toate acestea, era capabil să susțină bliturile , adică putea face copii ale blocurilor din memoria sa video: această funcționalitate a fost utilizată de editorul video din ROM pentru a curăța sau derula rapid secțiunile video.
Specificatii tehnice
- Ieșire RGBI (RGB plus Intensity) compatibilă cu standardul video CGA al IBM.
- 16 sau 64 kilobyte de memorie dedicată (separată de memoria de sistem).
- Rezoluție de 640x200 pixeli (640 × 400 în modul întrețesut).
- Rezoluție de 720x700 pixeli (rezoluție maximă cu 64 KB de memorie video) [1]
- Moduri text cu caractere 80x25, 80x50 și 40x25.
- 8 culori cu 2 intensități.
Programare
Adresarea registrelor interne și a memoriei video dedicate a VDC trebuie făcută indirect. În primul rând, VDC trebuie să-i spună care dintre cele 37 de registre interne care urmează să fie utilizate, apoi programul trebuie să aștepte până când VDC este gata de acces și în cele din urmă poate fi accesat pentru citire sau scriere. Următorul cod de asamblare este pentru o operație de citire:
ldx #regnum; VDC se înregistrează pentru a accesa stx $ d600; scrieți în registrul de control bucla bit $ d600; verificați bitul 7 al registrului de stare bucla bpl; VDC nu este gata lda $ d601; citiți din registrul VDC ...
În timp ce următorul cod este pentru o operație tipică de scriere:
ldx #regnum; VDC se înregistrează la care să scrie stx $ d600; scrieți în registrul de control bucla bit $ d600; verificați bitul 7 al registrului de stare bucla bpl; VDC nu este gata sta $ d601; scrieți în registrul VDC ...
Datorită acestui mod curios de a controla VDC, rata maximă a cadrelor în modul bitmap este, în general, prea mică pentru orice joc de tip „arcade” în care manipularea intensivă în biți este o caracteristică cheie.
Lista registrelor
Această listă a fost preluată din Ghidul de referință al programatorului Commodore 128 [3]
Inregistreaza-te | $ Hex | Bit 7 | Bit 6 | Bitul 5 | Bitul 4 | Bit 3 | Bit 2 | Bitul 1 | Bit 0 | Descriere |
---|---|---|---|---|---|---|---|---|---|---|
0 | 00 $ | HT7 | HT6 | HT5 | HT4 | HT3 | HT2 | HT1 | HT0 | Total orizontal |
1 | 01 $ | HD7 | HD6 | HD5 | HD4 | HD3 | HD2 | HD1 | HD0 | Afișat pe orizontală |
2 | 02 USD | HP7 | HP6 | HP5 | HP4 | HP3 | HP2 | HP1 | HP0 | Poziție de sincronizare orizontală |
3 | 03 USD | VW3 | VW2 | VW1 | VW0 | HW3 | HW2 | HW1 | HW0 | Lățime de sincronizare verticală / orizontală |
4 | 04 USD | VT7 | VT6 | VT5 | VT4 | VT3 | VT2 | VT1 | VT0 | Vertical total |
5 | 05 USD | - | - | - | VA4 | VA3 | VA2 | VA1 | VA0 | Ajustare verticală |
6 | 06 USD | VD7 | VD6 | VD5 | VD4 | VD3 | VD2 | VD1 | VD0 | Afișat pe verticală |
7 | 07 USD | VP7 | VP6 | VP5 | VP4 | VP3 | VP2 | VP1 | VP0 | Poziție de sincronizare verticală |
8 | 08 USD | - | - | - | - | - | - | IM1 | IM0 | Modul de intercalare |
9 | 09 USD | - | - | - | - | CTV4 | CTV3 | CTV2 | CTV1 | Caracter vertical total |
10 | $ 0A | - | CM1 | CM0 | CS4 | CS3 | CS2 | CS1 | CS0 | Modul cursor, Start Scan |
11 | 0 miliarde USD | - | - | - | CE4 | CE3 | CE2 | CE1 | CE0 | Linia de scanare a sfârșitului cursorului |
12 | 0C $ | DS15 | DS14 | DS13 | DS12 | DS11 | DS10 | DS9 | DS8 | Afișați adresa de început High Byte |
13 | $ 0D | DS7 | DS6 | DS5 | DS4 | DS3 | DS2 | DS1 | DS0 | Afișați adresa de pornire Low Byte |
14 | $ 0E | CP15 | CP14 | CP13 | CP12 | CP11 | CP10 | CP9 | CP8 | Poziția cursorului Octet mare |
15 | $ 0F | CP7 | CP6 | CP5 | CP4 | CP3 | CP2 | CP1 | CP0 | Poziția cursorului Octet scăzut |
16 | 10 USD | LPV7 | LPV6 | LPV5 | LPV4 | LPV3 | LPV2 | LPV1 | LPV0 | Poziție verticală a stiloului luminos |
17 | 11 USD | LPH7 | LPH6 | LPH5 | LPH4 | LPH3 | LPH2 | LPH1 | LPH0 | Poziție orizontală stilou luminos |
18 | 12 USD | UA15 | UA14 | UA13 | UA12 | UA11 | UA10 | UA9 | UA8 | Actualizați adresa High Byte |
19 | 13 USD | UA7 | UA6 | UA5 | UA4 | UA3 | UA2 | UA1 | UA0 | Actualizați adresa Low Byte |
20 | 14 USD | AA15 | AA14 | AA13 | AA12 | AA11 | AA10 | AA9 | AA8 | Atribut Start Start High Byte |
21 | 15 USD | AA7 | AA6 | AA5 | AA4 | AA3 | AA2 | AA1 | AA0 | Atribut Start Start Low Byte |
22 | 16 USD | CTH3 | CTH2 | CTH1 | CTH0 | CDH3 | CDH2 | CDH1 | CDH0 | Caracter orizontal total, afișare caractere orizontal |
23 | 17 USD | - | - | - | CDV4 | CDV3 | CDV2 | CDV1 | CDV0 | Afișare caractere pe verticală |
24 | 18 USD | COPIE | RVS | CBRATE | VSS4 | VSS3 | VSS2 | VSS1 | VSS0 | Derulare verticală netedă |
25 | 19 USD | TEXT | ATR | SEMINTE | DBL | HSS3 | HSS2 | HSS1 | HSS0 | Derulare orizontală netedă |
26 | $ 1A | FG3 | FG2 | FG1 | FG0 | BG3 | BG2 | BG1 | BG0 | Culoare fundal / fundal |
27 | 1 miliard USD | AI7 | AI6 | AI5 | AI4 | AI3 | AI2 | AI1 | AI0 | Incrementarea adresei pe rând |
28 | 1 C $ | CB15 | CB14 | CB13 | RAM | - | - | - | - | Adresa bazei de caractere |
29 | $ 1D | - | - | - | UL4 | UL3 | UL2 | UL1 | UL0 | Subliniați linia de scanare |
30 | $ 1E | WC7 | WC6 | WC5 | WC4 | WC3 | WC2 | WC1 | WC0 | Număr de cuvinte |
31 | $ 1F | DA7 | DA6 | DA5 | DA4 | DA3 | DA2 | DA1 | DA0 | Registrul de date |
32 | 20 USD | BA15 | BA14 | BA13 | BA12 | BA11 | BA10 | BA9 | BA8 | Blocați adresa de pornire High Byte |
33 | 21 USD | BA7 | BA6 | BA5 | BA4 | BA3 | BA2 | BA1 | BA0 | Blochează adresa de pornire octet scăzut |
34 | 22 USD | DEB7 | DEB6 | DEB5 | DEB4 | DEB3 | DEB2 | DEB1 | DEB0 | Afișare Activare Început |
35 | 23 USD | DEE7 | DEE6 | DEE5 | DEE4 | DEE3 | DEE2 | DEE1 | DEE0 | Afișare Activare sfârșit |
36 | 24 USD | - | - | - | - | DRR3 | DRR2 | DRR1 | DRR0 | Rata de reîmprospătare DRAM |
Notă
- ^ (RO) Commodore 128 - Cele mai versatile computere pe 8 biți realizate vreodată pe commodore.ca.
- ^ (RO) Grafică ultra-înaltă - O descoperire pe C-128 (JPG), în RUN , n. 26, Peterborough (SUA), CW Communications, februarie 1986, p. 34, ISSN 0741-4285 . Transcrierea textului , pe cbmfiles.com .
- ^ Commodore Capital, Inc., (1986). Ghid de referință al programatorului Commodore 128. New York, NY: Bantam Books, Inc.
linkuri externe
- Arhivă autoextractabilă Ultra Hi-Res - Volumul I , pe cbmfiles.com .
- Arhivă autoextractabilă Ultra Hi-Res - Volumul II , pe cbmfiles.com .
- C = Volumul de piratare 2 - Înregistrarea listei și descrierea ( TXT ), pe ffd2.com .