Motorola MC6845 este o componentă electronică, un cip de control video , dezvoltat de Motorola la sfârșitul anilor 1970 ( anul 1977 este indicat în documentație ). Abrevierea CRTC (Cathode Ray Tube Controller, controler de tub catodic ) este, de asemenea, folosită pentru a desemna cipul . Cipul face parte din chipset-ul de suport pentru procesor Motorola 6800 , dar a fost adesea folosit în sisteme cu alte procesoare.
Folosit în computerele Amstrad CPC și BBC Micro și plăcile grafice MDA și CGA pentru computerele IBM . Ulterior, pentru compatibilitate inversă, funcționalitatea cipului a fost integrată în cipuri specializate pentru plăcile grafice VGA .
Datorită popularității computerelor compatibile cu PC-ul IBM, în unele țări au fost produse analoge complete ale microcircuitului. Deci, în Japonia, Hitachi a produs cipul 46505 , în Bulgaria a fost produs cipul CM607 . La începutul anilor 1990 (aproximativ în 1991 ), industria electronică rusă de la fabrica Svetlana a început producția de cip KM1809VG6 .
MOS Technology și Rockwell au produs cipul 6545 utilizat în computerele Commodore PET și seria B ale computerelor Commodore CBM-II . Această versiune este aproape un analog complet al cipului 6845 cu diferențe minore.
Cipul este proiectat pentru a implementa moduri video text, pseudografice și grafice. Oferă generarea de semnale de sincronizare orizontale și verticale pentru generarea video , precum și atribute de cursor și pâlpâire, dar nu generează datele video în sine. În schimb, microcircuitul generează o adresă în memoria video de unde ar trebui citită valoarea pentru următorul caracter, pixel sau grup de pixeli. Citirea acestei valori din memorie, conversia acesteia în date de pixeli individuali și generarea semnalului video compozit trebuie făcută de un circuit extern.
Acceptă scanarea progresivă și întrețesă . Deoarece toți parametrii de scanare sunt configurați prin software, este posibil să generați semnale NTSC și PAL și să comutați între ei software fără a schimba circuitul de comutare. De asemenea, este posibil să se genereze semnale de ceas non-standard pentru orice alte tipuri de afișaje raster. O limitare serioasă este numărul maxim de linii, care este 128. În modurile alfanumerice, acest număr este redundant, iar în modurile grafice nu este suficient. De aceea, pentru a obține imagini grafice de înaltă rezoluție, contorul numărului de linie din simbol a fost folosit ca contoare suplimentare și, ca urmare, organizarea „bancară” a memoriei video a apărut în CGA (2 bănci) și HGC. (4 bănci în modul normal și 3 în modul de emulare CGA).
Adresa generată curent poate fi stocată într-un latch intern și citită de procesor. Această caracteristică poate fi utilizată pentru a determina poziția exactă a fasciculului de baleiaj atunci când implementați un stilou sau un pistol ușor .
Microcircuitul este realizat folosind tehnologia MOS n-Channel, TTL , necesită o singură tensiune de alimentare de +5 volți. Produs in carcase DIP40 (ceramica si plastic).
Microcircuitul are 18 registre de opt biți care controlează toți parametrii de baleiaj. Pentru un dispozitiv extern, microcircuitul este disponibil prin două porturi, dintre care unul servește la selectarea registrului curent, iar celălalt pentru a citi sau scrie o valoare în registrul curent.
Adresa generată este formată din două părți - o adresă de caractere de 14 biți (CA0..CA13) și o adresă de șir de 5 biți (RA0..RA4), care permite adresarea a până la 512 KB de memorie video. Adresa caracterului este incrementată secvenţial. Adresa liniei este incrementată la începutul unei noi linii raster atunci când se generează un semnal de sincronizare orizontală. Dacă adresa de linie nu a atins valoarea specificată, adresa caracterului este setată la valoarea care era la începutul liniei precedente, în caz contrar, este resetată la zero.
Pentru a implementa modul text, adresa caracterului poate fi utilizată ca adresă în memoria video, adresa de linie poate fi utilizată ca număr de linie de pixeli în ROM -ul generatorului de caractere și valoarea citită de circuitul extern din memoria video. poate fi folosit ca număr de caractere în ROM-ul generatorului de caractere.
Modurile grafice cu organizare liniară a memoriei video pot fi implementate prin setarea numărului de linii la 1, dar cantitatea de memorie adresabilă va fi limitată la 16 KB. Această limitare poate fi depășită prin utilizarea unei organizări neliniare a memoriei video - adresa de linie poate fi setată la biții superiori ai magistralei de adrese a memoriei video. În acest caz, toate primele rânduri de pixeli din numărul specificat de rânduri dintr-un caracter vor fi localizate secvenţial în memoria video, apoi toate al doilea, etc. Adică, dacă sunt specificate două rânduri dintr-un caracter, toate chiar , atunci toate liniile impare ale imaginii vor fi localizate mai întâi . Această abordare este utilizată în computerul Amstrad CPC , adaptoarele video CGA și HGC pentru computerele IBM și computerele compatibile.
Principala diferență a cipului 6545 este posibilitatea de acces exclusiv la magistrala de adrese. Microcircuitul are două registre suplimentare pentru setarea adresei care trebuie accesată de procesor, iar în funcție de situația de pe magistrala de adrese se va seta adresa dorită.
Alte diferențe minore includ lipsa suportului de întrețesere, capacitatea de a întârzia rezoluția imaginii cu un ciclu de generare a liniilor de caractere (această caracteristică a fost inclusă mai târziu în omologii 6845 ulterioare) și setarea modului de generare a unui buffer video liniar prin setarea unui bit. în registrul de stare în loc să modifice înălțimea caracterului.
Cipul citește adresa de început o dată la începutul cadrului generat. Cu toate acestea, dacă parametrii de baleiaj sunt modificați la un moment dat, afișarea unui nou cadru poate fi începută fără a finaliza afișarea celui curent. Acest lucru vă permite să creați un gol în adresele generate în timpul afișării unui cadru și să implementați mai multe „ferestre” (la tot ecranul) în care sunt afișate diferite zone de memorie. Această metodă a fost adesea folosită în jocuri pentru a combina zone cu derulare (de obicei pentru o fereastră cu o situație de joc) și fără (pentru afișarea statisticilor jocului).
Deoarece este posibil să setați doar adresa de început a caracterului, iar adresa de linie este întotdeauna setată la 0 la începutul cadrului, defilarea verticală este limitată. Cu toate acestea, prin modificarea programatică a parametrilor de scanare, este posibilă modificarea poziției rasterului afișat pe ecran. Datorită combinației de defilare caracter cu caracter, deplasare bitmap și afișare a liniilor goale la marginile ecranului, este posibil să se implementeze o defilare verticală lină.