| STRONA GŁÓWNA | MAPA SERWISU | FORUM ELPORTALU | ElCafe |
element.14
Telewizja przemysłowa
03 Wrz 2010 - 04:27
N0003c4
Last Updated : 2010-08-24 23:52:15 (6486 read)
Generator testowego sygnału
video dla monitorów VGA
Jest to urządzenie zbudowane na bazie płyty głównej komputera PC, które do pracy potrzebuje jedynie karty grafiki zgodnej ze standardem VGA. Do budowy została użyta płyta główna od komputerów PC z procesorem Intel 80286 (czytaj: dwa łosie cześć). Być może wielu Czytelników nie widziała czegoś takiego, więc wygląda to następująco:


Fot.1: Płyta główna komputera PC z procesorem i80286

Zastosowany tu procesor i80286 pracujący z zawrotną prędkością, bo był taktowany z generatora dającego impulsy zegarowe o częstotliwości maksymalnie kilkunastu MHz (procesor w płycie głównej na fotografii 1 jest taktowany częstotliwością 16MHz), raczej należy uznać na mało udany.


Fot.2: Procesor i80286 (właściwie jego klon w wykonaniu firmy SIEMENS)

Był to pierwszy model w rodzinie dziadka 8086, który posiadał “ogromną” przestrzeń adresową – mógł zaadresować aż 16 megabajtów pamięci fizycznej oraz posiadał mechanizmy ochronny pamięci (czyli wykonywany aktualnie program/proces nie mógł “zajechać” w zasoby innego programu/procesu). Znane przysłowie “pierwsze śliwki robaczywki” w pełni sprawdziło się w tym przypadku. Ten model raczej należy uznać na nieudany. Jednak nie ma tego złego .... więc i80286 stanowił bazę rozwojową dla procesorów i80386 (czytaj: trzy łosie), który już okazał się rozwiązaniem bardziej przemyślanym.
I80286 jest procesorem w pełni 16-bitowym (inaczej jak jego trochę kulawy dziadek i8088) i dysponuje 16-bitową szyną danych do pamięci. Pobierając kod rozkazu do wykonania, procesor odczytywał pamięć w trybie 16-bitowym. Oznacza to, że program zawarty w pamięci BIOS musi znajdować się pamięci 16-bitowej. Najczęściej stosowanym rozwiązaniem jest użycie dwóch układów 8-bitowych pamięci tylko do odczytu umieszczonej na wspólnej szynie adresowej i szyną danych przyłączonej do części młodszej oraz starszej szyny danych procesora.


Fot.3: 16-bitowy BIOS

Aby nie pomylić “połówek programu BIOS” jedna stanowi część młodszą (LOW) oraz starszą (HIGH). Na płytach głównych jest oznaczenie jaką część należy włożyć w daną podstawkę. Innym oznaczeniem występującym jest EVEN (parzysty: odpowiadający części młodszej) oraz, ODD (nieparzysty: odpowiadający części starszej).
Wracając jednak do tematu, to potrzebna jest jedynie karta kontrolera grafiki zgodna z VGA.


Fot.4: Karta grafiki VGA

Włączając “komputer” do pracy, procesor wykonuje program zawarty w pamięci BIOS (nasz BIOS), a jego zadaniem jest wygenerowanie obrazu zawierającego kolorowe linie pionowe, poziome (krata) oraz okrągłe dla monitora VGA. Pozwalało to na naprawę, diagnostykę i strojenie tych monitorów. Generator obrazu nie musiał ładować żadnego programu z dysku lub dyskietki. Realizował swoją funkcję natychmiast po włączeniu.


Fot.5: Wygenerowany obraz kontrolny (jeden z wielu możliwych)

Jeżeli ktoś jest przekonany, że program do umieszczenia w pamięci BIOS można pisać wyłącznie w języku asemblera, to muszę zaznaczyć, że jest w błędzie. Zaprezentowany program jest napisany w języku MODULA 2. Jestem przekonany, że ten język popularnością nie przebija przykładowo języka C. Porównując go do innych, to należy stwierdzić, że łączy pewne cechy języka PASCAL i języka C. Z PASCALA dziedziczy syntaktykę, jest ona podobna (a właściwie należy uznać, że jest uproszczeniem). Podobnie jak w języku C, nie ma wbudowanych w język obsługi wejścia/wyjścia, odpowiednie procedury są dołączane jako biblioteki użytkowe.
Pisząc taki program należy mieć na uwadze, że program będzie pracował bez systemu operacyjnego. Właściwie sam sobie jest systemem operacyjnym, czyli możliwe jest przejęcie jakiegoś przerwania na siebie i użycia go: zamiast wywołania instrukcją call, będzie wywołanie instrukcją int – dziwaczne, ale możliwe. Na programie spoczywa obowiązek odpowiedniego zainicjowania i obsługi sprzętowej istotnych zespołów z płyty głównej (kontroler przerwań, kontroler DMA, układów czasowych itp). Oznacza to również, że nie można używać interrupt'ów do DOS'a (bo go nie ma – wyłączone są przykładowo funkcje przydziału pamięci, obsługi plików), interrupt'ów do BIOS'a (bo go nie ma – wyłączone są funkcje obsługi technicznej dysków, dyskietek, klawiatury, video..) ... a nie, nie. Video będzie działać, ponieważ BIOS od kontrolera video jest.  Otóż, na kartach kontrolerów video jest BIOS zawierający obsługę właśnie tej karty. Należy ją jedynie aktywować, w wyniku której BIOS obsługi video przejmie na siebie przerwanie od “smarowania po ekranie”. Do włączenia przykładowo trybu graficznego (karta startuje w trybie alfanumerycznym) można użyć przerwania (int 10hex).
Program był tworzony i testowany pod kontrolą DOS'a jako typowa aplikacja (z ograniczeniem do minimum powiązania z systemem operacyjnym – jak najmniej przerwań do systemu). Pewne funkcje są używane, bo o ile załadowanie programu do pamięci operacyjnej realizowane przez system nie ma odbicia w kodzie, to zakończenie programu (i usunięcie z pamięci) już występuje. Dodatkowo, program jest sterowalny z klawiatury (chociażby by przekazać mu polecenie zakończenia pracy).
Po “wychuchaniu” programu, należy go “odwiązać” od systemu operacyjnego i jakoś zaaplikować do EPROM'a, ale to już temat na całkiem inne rozważania.

Wsad EPROM (low): HEX.
Wsad EPROM (high): HEX.
Program źródłowo: MOD.
Inne PC-towe zabawki: tutaj.

/Gaweł, 19-04-2008/

[Wersja do wydruku | Poleć tę stronę przyjacielowi]
 PostNuke  | Wsparcie PostNuke  | Programiści  

Web site powered by PostNuke ADODB database libraryPHP Language

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest (c) 2003 by me
This web site was made with PostNuke, a web portal system written in PHP. PostNuke jest Darmowym Oprogramowaniem na licencji GNU/GPL.
Możesz publikować u siebie nasze newsy za pomocą pliku backend.php