Samouczki poświęcone programowaniu systemu operacyjnego pozwalają precyzyjnie dotrzeć do danych na ekranie, pisząc bezpośrednio na VGA lub EGA lub Super VGA, ale nie dostaję, jaka jest prawdziwa różnica między pisaniem na stały adres w celu wyświetlenia, a zapisywaniem bezpośrednio na karcie graficznej, na pokładzie czy wymienny? Chcę tylko podstawowe wyjaśnienie mojego zamieszania w tej kwestii w mojej sprawie
A ponieważ nie jest to tak prosty przypadek ze zmiennymi w kartach, interfejsami łączeniowymi, magistralami, architekturami, systemem na chipie, systemami osadzonymi itp., Trudno mi znaleźć sposób na zrozumienie idei tego 100% . Czy stałe adresy różniłyby się od wysokiej klasy GPU do niskiej klasy na pokładzie? Dlaczego i dlaczego nie?
Jest to jeden z moich celów w programowaniu hosta jądra i stworzenia systemu operacyjnego, a także marzenie. Niezrozumienie terminologii nie tylko przeszkadza mi w niektórych obszarach, ale sprawia, że wydaje mi się głupi w kwestii sprzętu.
DODATKOWE: Niektóre z tych aktualnych odpowiedzi mówią o wykorzystaniu maksymalnej pamięci adresowalnej procesorów w specyfikacjach 16-bitowych. Problemem są niektóre z innych pojawiających się problemów:
1. Co z pamięcią karty? Nie wymagałoby to systemowej pamięci RAM na dane z ekranu.
2.Co w trybach wyższych bitów? I czy nie możesz nie zaniedbać systemu BIOS w trybie rzeczywistym (x86) i nadal adresować pamięć przez AL?
3.Jak koncepcja zapisu na stały adres pozostanie niezmieniona na GPU z mnóstwem rejestrów i wydajnością na lub powyżej rzeczywistego mikroprocesora?
Odpowiedzi:
Technicznie VGA oznacza Video Graphics Array , standard wideo 640x480 wprowadzony w 1987 roku. W tamtym czasie była to względnie wysoka rozdzielczość, szczególnie w przypadku kolorowego wyświetlacza.
Przed wprowadzeniem VGA mieliśmy kilka innych standardów graficznych, takich jak herkules, który wyświetlał tekst (80 linii po 25 znaków) lub względną grafikę monochromatyczną o wysokiej rozdzielczości (720x348 pikseli).
Inne standardy w tym czasie to CGA ( kolorowy adapter graficzny ), który również pozwalał na 16 kolorów w rozdzielczości do 640 x 200 pikseli. Rezultat wyglądałby tak:
Wreszcie godnym uwagi standardem na PC był ulepszony adapter graficzny (EGA), który pozwalał na rozdzielczości do 640 × 350 przy 64 kolorach.
(Ignoruję standardy inne niż PC, aby utrzymać ten stosunkowo krótki czas. Jeśli zacznę dodawać standardy Atari lub Amiga - do 4096 kolorów w tym czasie! - wtedy będzie to dość długo).
Następnie w 1987 r. IBM wprowadził komputer PS2. Miał kilka znaczących różnic w porównaniu do swoich poprzedników, w tym nowe porty dla myszy i klawiatur (wcześniej myszy używały 25-pinowych portów szeregowych lub 9-pinowych portów szeregowych, jeśli w ogóle masz mysz); standardowe dyski 3½ cala i nowy adapter graficzny o wysokiej rozdzielczości i wielu kolorach.
Ten standard graficzny nazywał się Video Graphics Array . Do przesyłania sygnałów analogowych do monitora zastosowano 3-rzędowe 15-stykowe złącze. Złącze to przetrwało kilka lat temu, kiedy zostało zastąpione lepszymi standardami cyfrowymi, takimi jak DVI i port wyświetlacza.
Po VGA
Postęp nie zatrzymał się na standardach VGA. Wkrótce po wprowadzeniu VGA powstały nowe standardy, takie jak UpGA VGA 800x600 S (SVGA), w którym zastosowano to samo złącze. (Hercules, CGA, EGA itp. Wszystkie miały własne złącza. Nie można podłączyć monitora CGA do karty VGA, nawet jeśli próbujesz wyświetlić wystarczająco niską rozdzielczość).
Od tego czasu przeszliśmy na wyświetlacze o znacznie wyższej rozdzielczości, ale najczęściej używaną nazwą pozostaje VGA. Mimo że prawidłowe nazwy to SVGA, XVGA, UXGA itp.
(Grafika dzięki uprzejmości Wikipedia)
Inną rzeczą, która nazywa się „VGA”, jest złącze DE15 używane z oryginalną kartą VGA. To zwykle niebieskie złącze nie jest jedynym sposobem przesyłania analogowych „sygnałów VGA” na monitor, ale jest najbardziej powszechne.
Po lewej: DB5HD Po prawej: Alternatywne złącza VGA, zwykle używane w celu uzyskania lepszej jakości)
Trzecim sposobem użycia „VGA” jest opis karty graficznej, nawet jeśli karta ta może wytwarzać zupełnie inne rozdzielczości niż VGA. Użycie jest technicznie niepoprawne lub powinno być przynajmniej „kompatybilne z VGA”, ale zwykła mowa nie robi tej różnicy.
To pozostawia pisanie do VGA
Wynika to ze sposobu podzielenia pamięci w IBM XT. Procesor może uzyskać dostęp do 1 MB pamięci (1024 kB). Dolne 512 kB zostało zarezerwowane dla pamięci RAM, górne 512 kB dla kart dodatkowych, pamięci ROM itp.
W tym górnym obszarze mapowano pamięć kart VGA. Możesz bezpośrednio do niego napisać, a wynik pojawi się na wyświetlaczu.
Było to wykorzystywane nie tylko w przypadku VGA, ale także w przypadku alternatywnych generacji tej samej generacji.
( Źródło mapy ASCII).
źródło
Dx-nn
rodzinie złączyx
jest rozmiar osłony,nn
jest liczba pinów. Shell B ma ten sam rozmiar co port równoległy (lub stary, 25-stykowy port szeregowy pełnej implementacji). Shell E ma taki sam rozmiar jak port szeregowy. Tak więc technicznie , 15-pinowe złącze VGA byłoby DE-15, ale nigdy nie było to częścią oryginalnej linii złączy. AFAIK nigdy nie istniał przed użyciem IBM na PS / 2 MCGA, VGA i 8514 / a. Wikipedia ma dobre wytłumaczenie: en.wikipedia.org/wiki/D-subminiatureZapisywanie na „stały adres” polegało zasadniczo na zapisywaniu bezpośrednio na karcie graficznej. Wszystkie te karty wideo ISA (CGA, EGA, VGA) miały w zasadzie trochę pamięci RAM (i rejestrów) zmapowane bezpośrednio w pamięci procesorów i przestrzeni we / wy.
Kiedy więc zapisałeś bajt do określonej lokalizacji w pamięci, ten znak (w trybie tekstowym) natychmiast pojawił się na ekranie, ponieważ tak naprawdę zapisałeś w pamięci na karcie graficznej, a karta wideo właśnie z niej korzystała.
Wszystko to wygląda dziś bardzo myląco, zwłaszcza biorąc pod uwagę, że dzisiejsze karty graficzne są czasami nazywane VGA (i przypominają „prawdziwe” karty VGA z lat 90.). Jednak nawet współczesne karty emulują niektóre funkcje tych starszych projektów (możesz uruchomić DOS na większości nowoczesnych komputerów i używać programów DOS, które zapisują bezpośrednio w pamięci wideo). Oczywiście w dzisiejszych czasach wszystko jest emulowane w oprogramowaniu karty graficznej.
źródło
Tak naprawdę nie ma różnicy: jeśli piszesz na adres pamięci wideo, sprzęt przekieruje ją na kartę wideo.
Jeśli piszesz własny system operacyjny, prawdopodobnie będziesz musiał wykonać sporo pracy, aby karta graficzna zmapowała pamięć tak, jak chcesz, zaczynając od skanowania magistrali PCI w celu znalezienia karty.
źródło
Dotychczasowe odpowiedzi wyjaśniły, że stare karty graficzne działały, ponieważ pamięć wideo została zmapowana do przestrzeni adresowej procesora. To była własna pamięć kart. Mostek północny wie, jak przekierowywać żądania tej zmapowanej pamięci do urządzenia VGA.
Oprócz tego pojawiły się liczne rozszerzenia i nowe tryby dla kart kompatybilnych z VGA. Doprowadziło to do stworzenia rozszerzeń VESA BIOS (VBE), które działają poprzez
int 10h
. Obsługuje podstawowe przyspieszenie 2D (BitBlt), kursory sprzętowe, buforowanie podwójne / potrójne itp. Jest to podstawowa metoda wyświetlania pełnokolorowego w dowolnej obsługiwanej rozdzielczości (w tym wysokich). Zwykle używana jest również pamięć wewnętrzna karty, przy czym mostek północny wykonuje przekierowanie jak w klasycznym VGA. Jest to najprostszy sposób na wykorzystanie grafiki w pełnym kolorze / rozdzielczości.Następnie mamy bezpośrednią metodę dostępu do GPU bez korzystania z bios, co zapewnia dostęp do tych samych funkcji co VBE i ewentualnie dodatkowych. Moje rozumienie jest tutaj dość rozmyte. Myślę, że ten interfejs jest specyficzny dla urządzenia, ale wcale nie jestem tego pewien.
Następnie jest interfejs GPU, który może obsługiwać acelerację 3D / obliczenia GP-GPU itp. To zdecydowanie wymaga dostarczonych przez producenta sterowników lub specyfikacji do pełnego wykorzystania, a często występują znaczne różnice nawet między urządzeniami tego samego producenta.
źródło