Płytka XS40 wyposażona jest w bardzo prosty przetwornik c/a służący do sterowania sygnałami RGB monitora:
Dla każdego sygnału można określić 4 poziomy napięć analogowych od 0 (brak koloru) do 0.7V (maksymalne nasycenie koloru) za pomocą 2 bitów, więc na ekranie można uzyskać pixele o 26=64 kolorach. Dodatkowo należy wygenerować sygnały synchronizacji poziomej i pionowej w standardzie VGA:
W celu odczytania danych z pamięci RAM należy uaktywnić układ (/CE=0), uaktywnić wyjście danych (/OE=0) i przełączyć w tryb odczytu (/WE=1). Należy pamiętać, że dla zastosowanej pamięci RAM firmy Winbond W24257AK-15 dane (D7-D0) pojawiają się na jej wyjściu po ok. 15ns od momentu podania adresu (A14-A0).
Plik bitmapy umieszczony w pamięci RAM posiada nagłówek, który należy ominąć (nie sprawdzamy go - zakładamy, że bitmapa ma założone parametry). Po nagłówku znajdują się dane określające kolor poszczególnych pixeli. Pojedynczy bajt (8 bitów) zawiera dane o 2 pixelach, 4 starsze bity określają dane o kolorze pixela z lewej strony, 4 młodsze z prawej. Kolor określany jest jako adres 4-bitowy adres w palecie kolorów (umieszczonej w nagłówku pliku BMP). Zakładamy, że jest to standardowa tablica kolorów Windows:
pixel (hex) |
wysterowanie wyjść płytki XS40 |
kolor |
||
red1,red0 |
green1,green0 |
blue1,blue0 | ||
0 | 00 | 00 | 00 | czarny |
1 | 01 | 00 | 00 | |
2 | 00 | 01 | 00 | |
3 | 01 | 01 | 00 | |
4 | 00 | 00 | 01 | |
5 | 01 | 00 | 01 | |
6 | 00 | 01 | 01 | |
7 | 10 | 10 | 10 | |
8 | 01 | 01 | 01 | |
9 | 11 | 00 | 00 | czerwony |
A | 00 | 11 | 00 | zielony |
B | 11 | 11 | 00 | |
C | 00 | 00 | 11 | niebieski |
D | 11 | 00 | 11 | |
E | 00 | 11 | 11 | |
F | 11 | 11 | 11 | biały |
Kolejność rozmieszczenia pixeli w pliku BMP: od lewej do prawej, od dołu do góry (pierwszy pixel w pliku pochodzi z lewego dolnego rogu obrazu). Dla ułatwienia zadania (obraz generowany na monitorze VGA zaczyna się od lewego górnego rogu) w pierwszym podejściu, można wyświetlić obraz odwrócony "do góry nogami". Każda linia uzupełniana jest zerami, tak aby cała linia była opisana wielokrotnością 32 bitów w naszym przypadku nie ma to znaczenia, bo każda linia zawiera 256 pixeli, tj. dokładnie trzydzieści dwie 32-bitowe grupy.
W celu wysłania bitmapy do płytki należy ją zapisać w formacie Intel hex. Do tego celu służy program format83.com:
copy bitmap.bmp bitmap.bin