Struktura systemu mikroprocesorowego Z80 z interfejsem monitora graficznego

1 Struktura systemu mikroprocesorowego Z80 z interfejsem monitora graficznego. Strukturę systemu mikroprocesorowego Z80 współpracującego z interfejs...
15 downloads 0 Views 296KB Size
1

Struktura systemu mikroprocesorowego Z80 z interfejsem monitora graficznego. Strukturę systemu mikroprocesorowego Z80 współpracującego z interfejsem monitora graficznego zbudowanego w oparciu o układ M6845 pokazuje rysunek 1.1. Na rysunku zaznaczono kolorem czerwonym przyciski uŜywane w trakcie realizacji ćwiczenia.

Rys.1.1 Struktura stanowiska laboratoryjnego

Opis interfejsu monitora graficznego. Interfejs monitora graficznego jest zbudowany w oparciu o kontroler CRT M6845 firmy Motorola. M6845 jest układem przeznaczonym do budowy interfejsów monitora znakowego. Niemniej jednak, był szeroko stosowany w kartach graficznych komputerów klasy PC serii XT i AT budowanych w oparciu o procesory Intel 8088 i 8086 aŜ do 80286. Wyjścia sterujące kontrolera umoŜliwiają: - Adresowanie pamięci RAM, która jest teŜ dostępna od strony mikroprocesora. W pamięci tej przechowywane są kody ASCII wyświetlanych znaków. - Adresację pamięci stałej zawierającej informacje o kształcie wyświetlanych znaków. - Generację sygnałów odchylania pionowego. - Generację sygnałów odchylania poziomego. Dla adaptacji kontrolera M6845 do potrzeb wyświetlania graficznego nieodzowne jest uporządkowanie sterujących linii adresowych, co realizuje układ podmiany adresu. Aby 2

zapewnić bezkonfliktowy dostęp do pamięci VRAM od strony procesora, kontroler generuje sygnał DISPEN. Dostęp do pamięci ze strony procesora jest moŜliwy w trakcie powrotów poziomych i pionowych co zapewnia dodatkowo zrealizowany na układach TTL układ arbitraŜu, wykorzystujący ten sygnał. W chwili obecnej kontroler M6845 jest wykorzystywany do sterowania monochromatycznymi wyświetlaczami LCD w specjalistycznej aparaturze pomiarowej. Interfejs zajmuje 7 lokacji w przestrzeni adresowej mikroprocesora. Kontroler CRT 6845 dostępny jest po dwiema lokacjami adresowymi: FF44h – adres rejestru adresowego FF45h – adres rejestru danych Układ 8255, którego funkcje opisano poniŜej, pod czterema lokacjami: FF40h – adres portu A (młodsza część adresu VRAM) FF41h – adres portu B (starsza część adresu VRAM) FF42h – adres portu C FF43h – adres rejestru sterującego Dodatkową lokacją jest bufor danych pamięci VRAM pod adresem: FF46h

Adresacja VRAM Pamięć VRAM ma organizację 8- bitową. KaŜdemu bitowi odpowiada jeden punkt na ekranie monitora. Dostęp do pamięci jest pośredni, zapewnia go m.in. układ portu równoległego 8255. Aby wpisać daną dla komórki VRAM naleŜy najpierw na port PA (adres FF40h) układu 8255 wpisać młodszą część adresu komórki, na port PB (czyli pod adres FF41h) starzą część adresu komórki.Daną dla tak zaadresowanej komórki VRAM (Video Ram) naleŜy przesłać pod adres bufora danych czyli FF46h. Dostęp do pamięci VRAM pokazuje rysunek 1.2

3

Rys.1.2. Organizacja pamięci VRAM Aby zaczernić punkt na białym (zielonym) tle naleŜy wpisać do komórki na odpowiednim bicie „0” log. (gdy ekran jest rozświetlony). Aby go „zapalić” naleŜy wpisać „1” logiczną. zmiany negatyw-pozytyw całego obrazu dokonuje się zamieniając bit PC6 portu PC układu 8255.

Model programowy układu 6845 Kontroler CRT zawiera 18 rejestrów wewnętrznych umoŜliwiających realizację róŜnych kart video. Zestawienie funkcji poszczególnych rejestrów zawiera poniŜsza tabela: Organizacja obrazu Poziomy format obrazu

rej.

funkcja

R0 R1

Liczba znaków w linii zapisywane Liczba wyświetlanych znaków w przez mikroprocesor linii Pozycja HSYNC Długość HSYNC

R2 R3

charakter

4

Pionowy format R4 obrazu R5 R6 R7 R8 R9 Rejestry R10 operacyjne R11 R12 R13 R14 R15 R16 R17

Liczba linii w ramce Liczba linii wyrównawczych Liczba wyświetlanych linii w ramce pozycja VSYNC tryb wyświetlania liczba linii na rząd znaków Wielkość kursora

zapisywane przez mikroprocesor

Adres startowy VRAM Pozycja kursora Pozycja pióra świetlnego

zapisywane i czytane przez mikroprocesor

Aby wpisać daną do rejestru lub odczytać rejestr naleŜy pod adres rejestru adresowego (FF44h) zapisać numer rejestru z którym chcemy się skomunikować. daną do rejestru zapisujemy pod adres rejestru danych (FF45h), podobnie daną odczytujemy spod adresu rejestru danych. Przykładowo aby do rejestru R4 wpisać liczbę 0Fh naleŜy wykonać program złoŜony z następujących instrukcji: LD LD INC LD

HL,#FF44 (HL),#04 HL (HL),#0F

;załadowanie do HL adresu rejestru adresowego ;wysłanie do rejestru adresowego, adresu rejestru R4 :zmiana zawartości HL na adres rejestru danych ;wysłanie danej do rejestru danych

Właściwe wartości wpisywane do rejestru, zapewniające prawidłową współpracę z monitorem typu telewizyjnego (uŜywanym w trakcie ćwiczenia) pokazano w tabeli 1.1. NaleŜy je wpisać do pamięci od adresu 0100h. Wpisu danych z tabeli do pamięci, dokonujemy na poziomie oprogramowania MONITORA, po wciśnięciu klawisza „M”MEMORY, a następni wpisaniu adresu początkowego- 0100. Po wpisaniu kaŜdej danej, przejście do następnej linii, następuje przy pomocy klawisza NEXT- „N”. Koniec edycji pamięci następuje po naciśnięciu klawisza „ENTER”. Tabela 1.1. Dane programujące rejestry układu M6845

adres 0100h 0101h 0102h 0103h 0104h 0105h 0106h 0107h 0108h

dana 3Fh 34h 35h 05h 09h 16h 09h 09h 00h 5

0109h 010Ah 010Bh 010Ch 010Dh 010Eh 010Fh

1Fh 7Fh 1Fh 00h 00h 00h 00h

Odpowiednio zawartość komórki 0100 odpowiada danej dla rejestru R0, 0101 danej dla R1 itd. NaleŜy zaprogramować układ portu równoległego 8255 (wszystkie porty w modzie 0 jako wyjścia, słowo ssterujące-80h), a do rejestrów sterujących układu M6845 wpisać dane programujące z tabeli umieszczonej w pamięci od adresu 0100h. Dla ułatwienia podano poniŜej algorytm przykładowego programu, który naleŜy zamienić na mnemoniki procesora Z80- rysunek 1.3. Program w postaci symbolicznej zapisać do tabeli załączonej do sprawozdania oraz wpisać w edytorze do pamięci systemu mikroprocesorowego. Wejście do programu EDYTOR/ASSEMBLER- klawiszem „E”. Wpisywanie programu- AUTONUMERING- klawisz „I” oraz „ENTER” Kolejne linie programu są automatycznie numerowane. Miejsca docelowe skoku naleŜy zaznaczyć przy pomocy etykiety do 7 znaków alfanumerycznych, które nie mogą być nazwami rejestrów ani mnemoników. W tej samej linii co etykieta moŜe znajdować się rozkaz oddzielony spacją lub tabulacją. Po wpisaniu programu nacisnąć klawisz „ENTER” oraz „ESC”. Edycja linii, w celu korekcji błędów jest moŜliwa klawiszem „E”- EDIT oraz numer linii. Listing programu po naciśnięciu klawisza „L”. Kasowanie linii jest moŜliwe przy pomocy klawisza „D”- DELETE oraz numer linii. MoŜliwe jjest teŜ wstawianie między linii np. linia pomiędzy 20 a 30- 21 treść linii (mnemonik lub etykieta mnemonik) i „ENTER. Po zapisaniu i korekcji błędów naleŜy program zasemblować, czyli zamienić na kody HEXnacisnąć klawisz „A”- Assembler, wybrać opcję 0 oraz klawisz „ENTER”. Po udanej asemblacji przejść do programu monitor- klawisz „M” oraz „ENTER” i uruchomić program klawiszem „G”- GO i adres zgodny z dyrektywą ORG #0000., czyli 0000. W przypadku, gdy program ulegnie zawieszeniu nacisnąć przycisk pułapki sprzętowej pokazany na rysunku 1.1.

6

Rys.1.3. Algorytm programu wysyłającego dane do rejestrów kontrolera 6845

7

Po uruchomieniu prawidłowo zapisanego programu ekran monitora powinien być jednolicie rozświetlony.

Rysowanie kreski pionowej Napisać program realizujący wyświetlanie na ekranie monitora graficznego kreskę pionową. Program ten zapisz w sprawozdaniu postaci mnemoników Z80, a następnie wpisz do pamięci systemu (EDYTOR/ASSEMBLER) poprzedzony dyrektywą ORG #0050 Rysowanie dogodnie jest rozpocząć od dołu czyli komórki VRAM o adresie np. 18343. Aby to zadanie zrealizować moŜna wykorzystać przykładowy algorytm pokazany na rysunku 1.4., wykorzystujący adresację indeksową. Po asemblacji programu i jego uruchomieniu (jak powyŜej) na ekranie powinna pojawić się kreska pionowa. W przypadku gdy kreska nie wypada na środku ekranu naleŜy przeprowadzić czyszczenie ekranu:

!!! Czyszczenie ekranu (wpisanie samych jedynek po RESET- rozświetlenie) -

Nacisnąć przycisk „PROT”- protekcja na module pamięci RAM. Zresetować system przyciskiem RST na klawiaturze (prawa górna strona miedzy klawiaturą alfanumeryczną a numeryczną. Poczekać na wyświetlenie pełnej informacji na ekranie (test EEPROM i RAM). Wycisnąć przycisk „PROT” na RAM. Zmodyfikować adres startowy wyświetlania (zmniejszenie zawartości HL o 1 to przesunięcie kreski w lewo o 8 punktów. Zasemblować program i postępować dalej jak w poprzednich punktach ćwiczenia.

Rysowanie linii poziomej Rysowanie linii poziomej w środku ekranu jest o wiele prostsze. MoŜna tu wykorzystać jako rejestr liczący wysyłane bajty, których jest tylko 64 (40h), zerowe rejestr B dla którego istnieje instrukcja skoku: DJNZ etykieta dekrementuj i skocz jeśli nie zero Oczywiście zawartość rejestru B powinna być ładowana poza pętlą rysującą. Program do rysowania kreski poziomej zapisz z dyrektywą ORG #00A0 i od takiego adresu po asemblacji uruchamiaj. Całość programu naleŜy zakończyć jak poprzednio procedurą powrotu do programu MONITOR CALL #E54A. Zapisz program w postaci mnemoników procesora Z80 w sprawozdaniu.

8

Rys.1.3. Algorytm rysowania kreski pionowej.

9

Kolejność rysowania linii Czy kolejność rysowania linii ma wpływ na obraz uzyskany na ekranie, ze względu na organizację bajtową pamięci VRAM? (zapisz odpowiedź w sprawozdaniu). Sprawdź to czyszcząc ekran (!!! czyszczenie ekranu), przez zerowanie systemu. Następnie uruchom rysowanie kreski poziomej (ORG #00A0) i pionowej (#0050).

Zadania dodatkowe ZADANIE1: Napisać program realizujący czyszczenie monitora graficznego- wpisanie samych jedynek (rozświetlenie) lub zer (wygaszenie) (zapisz program w postaci symbolicznejmnemoniki w sprawozdaniu).

ZADANIE2: Napisać program realizujący wyświetlanie na ekranie monitora graficznego prostokąt (zapisz program w postaci symbolicznej- mnemoniki w sprawozdaniu).

ZADANIE3: Napisać program realizujący wyświetlanie na ekranie monitora graficznego linię ukośną (zapisz program w postaci symbolicznej- mnemoniki w sprawozdaniu).

10