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 bajt01
: pierwsza współrzędna X, górny bajt02
: pierwsza współrzędna Y, dolny bajt03
: pierwsza współrzędna Y, górny bajt04
: druga współrzędna X, dolny bajt05
: druga współrzędna X, górny bajt06
: druga współrzędna Y, dolny bajt07
: druga współrzędna Y, górny bajt08
: szerokość operacji, dolny bajt09
: szerokość operacji, górny bajt0a
: wysokość operacji, dolny bajt0b
: wysokość operacji, górny bajt0c
: rejestr uruchomienia operacji blit0d
: rejestr uruchomienia operacji fill0e
: rejestr dostępu do bufora ramki0f
: 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.