« Architektura Game Boya (index)

Architektura Game Boya

Chapter 4: Grafika


Spis Treści

  1. Organizowanie treści
  2. Konstruowanie klatki
    1. Kafelki
    2. Warstwa Tła
    3. Okno
    4. Sprite'y
    5. Sprite'y
  3. Sekrety i Ograniczenia
    1. Efekt chybotania

Wszystkie obliczenia graficzne są wykonywane przez procesor, a następnie renderowane są przez Picture Processing Unit lub 'PPU'. Jest to kolejny komponent znajdujący się wewnątrz DMG-CPU i faktycznie jest oparty na PPU poprzednika.

Obraz jest wyświetlany na zintegrowanym ekranie LCD, który ma rozdzielczość 160×144 pikseli i może wyświetlać 4 odcienie szarości (biały, jasnoszary, ciemnoszary i czarny). Ale ponieważ oryginalny Gameboy ma zielony wyświetlacz LCD, grafika będzie wyglądać zielonawo.

Jeśli czytałeś wcześniej artykuł NES, być może pamiętasz, że PPU został zaprojektowany do podążania za wiązką CRT. Jednak (z oczywistych względów) w Gameboyu dostaliśmy ekran LCD. Nowy PPU nie zmienia tej części, ponieważ wyświetlacze LCD również wymagają odświeżenia. W rzeczywistości niektóre efekty specjalne uzyskane dzięki temu zachowaniu będą również obsługiwane na Gameboyu.

Organizowanie treści

Image
Architektura pamięci PPU.

PPU ma 8 KB VRAM lub 'RAM-u Wyświetlacza', do której zarówno PPU, jak i procesor mogą uzyskać bezpośredni dostęp, ale nie w tym samym czasie. Te 8 KB będą zawierać większość danych potrzebnych PPU do renderowania grafiki. Pozostałe części będą przechowywane wewnątrz PPU, ponieważ będą wymagały szybszego dostępu.

Gra jest odpowiedzialna za wypełnianie różnych obszarów właściwymi typami danych. Co więcej, PPU ujawnia rejestry, dzięki czemu gra może poinstruować PPU, jak te dane są zorganizowane (jest jednak wiele reguł).

Konstruowanie klatki

Zobaczmy, jak PPU radzi sobie z rysowaniem rzeczy na ekranie. W celach demonstracyjnych jako przykład posłuży Super Mario Land 2:

Kafelki

Image
Wiele kafelków.

Image
Wiele kafelków oddzielonych siatką.

Image
Pojedynczy kafelek.

Kafelki znalezione w Tabeli Wzorów.

PPU używa kafelków jako podstawowego składnika renderowania grafiki, w szczególności spriteów i tła .

Kafelki to po prostu bitmapy 8x8 przechowywane w VRAM w regionie o nazwie Zestaw kafelków lub 'Tabela wzorców kafelków', i każdy piksel odpowiada jednemu z czterech dostępnych odcieni szarości. Na koniec kafelki są grupowane w dwie tabele wzorów.

Aby zbudować obraz, do kafelków odwołuje się inny typ tabeli zwany Mapa kafelków. Ta informacja powie PPU, gdzie renderować kafelki. Przechowywane są dwie mapy, aby skonstruować różne warstwy klatki.

W następnych sekcjach wyjaśniono, w jaki sposób mapy kafelków są używane do tworzenia warstw.

Warstwa Tła

Image
Przydzielona mapa tła w VRAM.

Image
Wybrany obszar mapy tła. Zauważ, że wybrana część zawiera kawałek górnej części, która będzie nałożona na warstwę okna.

Image
Wyświetlana mapa tła.

Proces renderowania mapy tła.

Warstwa tła to mapa 256x256 pikseli (32x32 kafelki) zawierająca statyczne kafelki. Pamiętaj jednak, że na ekranie widać tylko 160x144, więc gra decyduje, która część zostanie wybrana do wyświetlenia. Gry mogą również przesuwać widoczny obszar podczas rozgrywki, w ten sposób realizowany jest Efekt Przewijania.

Do zbudowania warstwy tła można użyć jednej z dwóch map kafelków.

Okno

Image
Przydzielona mapa okna.

Image
Wyświetlana mapa okna. Gra aktywuje ją podczas ostatnich linii skanowania. W związku z tym na dole ekranu renderowane są tylko pierwsze wiersze.

Proces renderowania mapy okna.

Okno to warstwa 160x144 pikseli zawierająca kafelki wyświetlane na górze tła i spriteów. Nie przewija się.

Pozostałą mapę kafelkową można przypisać do warstwy okna.

Na początku może to brzmieć jak głupia funkcja. W końcu warstwa okna nakłada się na wszystko inne, więc do czego jest przydatna? Cóż, zarówno Tło, jak i Okno mogą być używane jednocześnie w różnych częściach ekranu. Jest to realizowane przez zmianę rejestru LCDCONT podczas określonych linii skanowania.

Dlatego gry zwykle używają go do wyświetlania statystyk gracza, wyników i innych 'zawsze włączonych' informacji.

Sprite'y

Image
Renderowana warstwa Sprite.

Sprite'y to kafelki, które mogą poruszać się niezależnie po ekranie. Mogą również nakładać się na siebie i pojawiać się za tłem, widoczna grafika zostanie określona na podstawie atrybutu priorytetu.

Mają też dostępny dodatkowy kolor: Przezroczysty. Tak więc mogą wyświetlać tylko trzy różne odcienie szarości zamiast czterech. Na szczęście ta warstwa pozwala zdefiniować dwie palety kolorów, aby wykorzystać każdy kolor.

Object Attribute Memory lub 'OAM' to mapa przechowywana w PPU, która określa kafelki, które będą używane jako sprite'y. Gry wypełniają ten region, wywołując jednostkę DMA znajdującą się w chipie, DMA pobiera dane z głównej pamięci RAM lub ROM gry do OAM.

Każdy wpis oprócz indeksu kafelka zawiera następujące atrybuty: pozycja X-Y, paleta kolorów, priorytet i flagi odwracania (umożliwiające obracanie kafelka w pionie i poziomie).

PPU jest ograniczone do renderowania do 10 sprite'ów na linię skanowania i do 40 na klatkę, przepełnienie spowoduje to, że sprite'y nie zostaną narysowane.

Sprite'y

Image
Renderowana warstwa Sprite.

Gdy klatka jest gotowa, czas przejść do następnej! Jednak procesor nie może modyfikować tabel, gdy PPU czyta z VRAM, więc system zapewnia zestaw przerwań wyzwalanych, gdy PPU jest bezczynny. Możesz pamiętać to zachowanie z czasów NES.

Po zakończeniu pojedynczej linii skanowania wywoływane jest przerwanie H-Blank. Pozwala to pobawić się częścią klatki, która nie została jeszcze narysowana.

Gdy wszystkie linie skanowania zostaną zakończone, wywoływane jest przerwanie V-Blank. Gra może teraz zaktualizować grafikę do następnej klatki.

Istnieje dodatkowy stan zwany wyszukiwanie OAM, który jest wyzwalany na początku linii skanowania, w tym momencie PPU przetwarza, które sprite'y będą wyświetlane w tej linii skanowania, dzięki czemu gra może aktualizować dowolny region z wyjątkiem OAM.

Sekrety i Ograniczenia

Włączenie warstwy okna i dodatkowych przerwań pozwoliło na wprowadzenie nowych rodzajów treści i efektów.

Efekt chybotania

Video
Video - The Legend of Zelda: Link's Awakening (1993). Spoilery!

Poziome przerwania pozwoliły zmienić klatkę przed zakończeniem. Oznacza to, że w każdym wierszu można zastosować inną wartość przewijania, co spowoduje, że każdy wiersz ramki zostanie przesunięty w inny sposób.

Osiągnęło to efekt chybotania (nie jestem pewien, czy to oficjalna nazwa).


Previous: 3. CPU

Next: 5. Dźwięk


Rodrigo Copetti © 2026 RSS Feed

Przełącz na wersję nowoczesną

Strona Główna · Artykuły · Wsparcie · O autorze · O stronie