Zadanie 4: Karta graficzna

Data ogłoszenia: 05.12.2018

Termin oddania: 23.01.2019

Napisać kartę graficzną z akceleracją sprzętową.

Karta powinna wyświetlać obraz na monitorze VGA w rozdzielczości 320×200 i 2 dwóch kolorach (należy wziąć parametry obrazu dla rozdzielczości 640×400 i wyświetlać każdy piksel dwa razy w poziomie i pionie). Obraz powinien być przechowywany w pamięci karty.

Karta powinna być sterowana z komputera przez protokół EPP. Powinna udostępniać następujące rejestry:

  • 00: pierwsza współrzędna X, dolny bajt

  • 01: pierwsza współrzędna X, górny bajt

  • 02: pierwsza współrzędna Y, dolny bajt

  • 03: pierwsza współrzędna Y, górny bajt

  • 04: druga współrzędna X, dolny bajt

  • 05: druga współrzędna X, górny bajt

  • 06: druga współrzędna Y, dolny bajt

  • 07: druga współrzędna Y, górny bajt

  • 08: szerokość operacji, dolny bajt

  • 09: szerokość operacji, górny bajt

  • 0a: wysokość operacji, dolny bajt

  • 0b: wysokość operacji, górny bajt

  • 0c: rejestr uruchomienia operacji blit

  • 0d: rejestr uruchomienia operacji fill

  • 0e: rejestr dostępu do bufora ramki

  • 0f: rejestr statusu

Rejestry 00..0b przechowują parametry do właściwych operacji i powinny być dostępne do odczytu i zapisu.

Rejestr 0e służy do bezpośredniego dostępu do bufora ramki. Odczyt bądź zapis tego rejestru powinien odczytać bądź zapisać 8 kolejnych pikseli w poziomie – najniższy bit przesłanego bajtu to lewy piksel. Miejsce w buforze ramki wybiera się przez rejestry pierwszej współrzędnej (można obsługiwać tylko współrzędne X podzielne przez 8). Zakładamy, że 1 oznacza kolor biały, a 0 kolor czarny. Odczyt bądź zapis bajtu musi zwiększyć rejestr współrzędnej X o 8 po wykonaniu operacji.

Rejestr 0c służy do uruchomienia operacji blit: dowolny zapis do tego rejestru powinien rozpocząć procedurę kopiowania prostokąta pikseli z danego miejsca ekranu w inne miejsce. Pierwsza współrzędna określa lewy górny róg prostokąta docelowego, a druga współrzędna – prostokąta źródłowego. Karta powinna poprawnie obsługiwać częściowo pokrywające się prostokąty docelowy i źródłowy.

Rejestr 0d służy do uruchomienia operacji fill: dowolny zapis powinien wypełnić prostokąt kolorem danym przez bit 0 zapisanej wartości. Pierwsza współrzędna określa lewy górny róg prostokąta.

Rejestr 0f jest rejestrem statusu, dostępnym tylko do odczytu: odczytana wartość powinna wynosić 00, jeśli karta graficzna aktualnie nie wykonuje żadnej operacji, lub dowolną niezerową wartość, jeśli karta jest w trakcie wykonywania operacji fill bądź blit.

Karta może ignorować zapisy do rejestrów uruchamiania operacji, jeśli jest obecnie zajęta wykonywaniem innej operacji. Może też założyć, że rejestry parametrów nie będą modyfikowane w trakcie operacji.