EMU-NES #PL FORUM © 2004-2015

Nes/Pegasus/Famicom => Hacki i Romhacking/Programowanie => Wątek zaczęty przez: siudym Czerwca 29, 2007, 23:32:15



Tytuł: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: siudym Czerwca 29, 2007, 23:32:15
Moze juz ktos z Was zastanawial sie jak NES wyswietla grafike.
Postaram sie chyba najbardziej lopatologicznie to wytlumaczyc...
Uwierzcie na slowo - to co napisze na dole jest napisane BARDZO prosto...
;)

Ok. Jadziem.

Grajac w gry widzimy mase roznych obiektow -  jedne skacza, inne stoja
w miejscu i nic nie robia, a jeszcze inne powoduja u nas atak nerwicy
i automatyczny odruch rzucenia padem o glebe... ;) Te wszystkie obiekty
sa poskladane z mniejszych, cos na podobe klockow lego. Tyle, ze tutaj,
kazdy klocek jest tej samej wielkosci, jedynie kolory inne.

Grafika w grach na NES jest podzielona na tzw. TILES'y - takie male obrazki,
co maja maksymalnie 4 kolory i 8x8 pixeli. Wszelka grafika zapisana jest
na karcie w ukladzie ROM nazwanym CHR ROM'em (CHaRacter),
czasami wgrana jest w PRG ROM, z ktorego potem wczytywana jest do pamieci
CHR RAM (VRAM), ktora powiedzmy zastepuje pamiec CHR ROM.

NES zostal tak ciekawie zrobiony, ze dane PRoGramu (PRG) sa w pewnym sensie
niezalezne od danych CHaRakterow (CHR). NES ma dwa procesory w sobie,
czyli CPU (procesor) oraz PPU (chip graficzny) i kazdy z nich ma swoje,
tylko dla siebie kosci pamieci RAM - CPU ma 2KB PRG RAMU a PPU ma swoje 2KB VRAMU.
Jak ktos chce zrobic maly eksperyment, niech wywali ze swojej konsoli NES
lub Pegasus chip graficzny i odpali jakies gry - beda one dzialac,
jednak grafika bedzie tzw. "kaszaniasta". Cos takiego jest takze w kartridzach
z grami - jest PRG ROM i CHR ROM, jak wywalimy z karta CHROM, to bedzie ten
sam efekt co w przypadku wylutowania z konsoli chipa graficznego (lub jego pamieci).
Pewnie juz nie raz ktos z Was posiadal gre na pegasusa, ktora wyswietlala
ta slynna "kaszaniasta" grafike, natomiast sama gra, muzyka itd dzialala
- to wlasnie wina uszkodzonego CHR ROMU...

Oki...
Gdyby odczytac dane CHR z karta gry, to zobaczymy cos takiego:
(jako obiekt prezentacji uzyje gry "Super Mario Bros")
(http://siudym.webd.pl/nesasm/tutorial/nesppu1.png)

Czyl maaasa roznych TILES'ow, ktore maja dziwne kolory i sa strasznie
balaganiarsko poukladane. Jeden wielki syf... :heh:
Wlasnie przypomina to worek z klockami, z ktorego bedziemy brac interesujace
nas klocki i budowac co tam sie podoba..
Kolory sa dziwne, bo i tak ukladamy sobie oddzielne palety kolorow,
ktore sa przypisywane potem do odpowiednich TILE'sow.


Oto bohater!:
(http://siudym.webd.pl/nesasm/tutorial/nesppu2.png)

To wlasnie TILE'S - z nich trzeba poskladac cala grafike w NES'owych grach...
Ma on dokladnie 8x8 pixeli, posiada 4 kolory - TYLKO cztery! Nie moze byc
mniej i wiecej. Ino cztyry. Jednak aby nie bylo zbyt kolorowo, widoczne sa
tylko trzy... Bo kolor 0 (zero) jest kolorem PRZEZROCZYSTYM, tzn. niewazne
jaki kolor tam wstawimy, to on i tak zostanie "przykryty" tłem. Chodzi o to,
ze jak narysujemy w literke A to dzieki temu sama literka A bedzie
widoczna, a wypelnienie tilesa (reszta z 8x8pixeli) bedzie przezroczyste... Chyba wiadomo
o co biega.... Oczywiscie moga istniec jakies programowe triki, co zmieniaja
te wlasciwosci i tiles caly wyswietli sie w 4kolorach. Ale nie o to tu chodzi.

(http://siudym.webd.pl/nesasm/tutorial/nesppu3.png)
Paleta TILES'a. Pewnie ktos sie zdziwil czytajac tylko o 4 kolorach, skoro NES
potrafi wyswietlic jednoczesnie 16 kolorow na ekranie (czepiajac sie to bedzie w sumie 12 tylko...)
Sprawa jest taka, ze do kazdego tilesa mozna przypisac jego WLASNA palete
kolorow. (Ogolnie powiedzmy, bo pomijam cos, co sie nazywa SQUARE w Attribute
Table. To ma byc ogolny opis, wiec pomijam). :)
TILES sam nie posiada kolorow, ma on tylko DANE informujace o roznicy
w zawartych pixelach. Potem kolory z wszelkich palet sa przypisywane
do danych w tilesie (hehe - kolorowane sa).

(http://siudym.webd.pl/nesasm/tutorial/nesppu2.png)
Jak widac pobralem z danych CHR jeden TILES, ktory przedstawia "ognik" wystrzeliwany
przez duzego maria (ktory zebral kwiatek). W grze ten "ognik" jest animowany
i ma az dwie klatki animacji, dzieki ktorym obiekt sie "kreci"
w powietrzu (widac je w PIC nr1) i dwie klatki animacji gdy w cos uderza.
Czyli piszemy kod w assemlberze, pobieramy adresy odpowadajace za umiejscowienie
TILES'ow tego obiektu, pobieramy kolorki z palety i robimy "animacje"
lub tworzymy jeden obiekt w grze np. Grzybka:
(http://siudym.webd.pl/nesasm/tutorial/nesppu4.png)

Jeszcze jedna sprawa: Wszystko to dzieli sie na dane "duszkow" (SPRITE)
i dane tla (BACKGROUND). Poza pewnymi innymi sprawami, ktore je dziela podczas
kodowania gry, "zasada TILES'a" jest identyczna w obu przypadkach.
No... Jeszcze czesto sam uklad w danych CHR jest podzielony (nie zawsze, ale mowa
o NROM'ie bez dodatkowych mapperow) np. pierwsze 4KB danych w CHR ROM to sprire'y,
a kolejne 4KB to tla. NROM posiada lacznie MAX 8KB danych CHR... Czyli....
Na grafike mamy TYLKO 8KB! :heh: Dzielac to na ilosc TILES'ow, ktory to ma
zawsze 16bajtow wielkosci wychodzi nam maksymalnie 512 sztuk TILES'ow w jednej grze
NROM... Wydaje sie malo, jednak mozna cuda robic uzywajac takiej ilosci. ;)

Jak juz napisalem - jeden 8x8 pixeli i 4-kolorowy TILES zawsze zajmuje 16 bajtow
w pliku CHR. Czyli w 8KB mamy 512 sztuk, bo 8KB to 8192 bajty, ktore dzielimy na 16
i mamy 512 (Caly czas mowa o NROM'ie).
Gdyby plik CHR otworzyc HEX edytorem to zobaczymy cos takiego:
(http://siudym.webd.pl/nesasm/tutorial/nesppu5.png)

16 bajtow to akurat jedna pozioma "linijka" hex'ow:
(http://siudym.webd.pl/nesasm/tutorial/nesppu6.png)

Ok... Wszystko jak widac wyliczone co do bajta i... bita. :)
Kiedys tak bylo, kazdy bajt czy bit byl na wage zlota, nie to co dzisiaj, gdzie gry
zaczynaja wychodzic na plytach BLU-RAY 50GB....

Postaram sie wyjasnic graficznie jak wyglada TILES' z innej strony...
Kazdy bajt TILES'a to 8 bitow - czyli osiem ZER lub JEDYNEK,
ktore potem sa przeliczane na bajty..
Przyklad - Jak "narysowac" literke X w roznych kolorach:
(http://siudym.webd.pl/nesasm/tutorial/nesppu7.png)
WAZNE!! Napisalem wyzej "Jak "narysowac" literke X w roznych kolorach"
- niech nikt nie odbiera tego tak, ze ten schemat pokazuje jak
ustawiac kolory np. czerwony, zielony czy niebieski.
Jesli bedziemy mieli np. po lewej BIT1 i po prawej BIT1, to nie oznacza
to wcale koloru CZERWONEGO... Obsolutnie NIE!. Kolory definiujemy w paletach,
tutaj pojecia "KOLOR 0, 1, 2 i 3" to tylko informacjami potrzebnymi do przypisywania pixelom kolorow z palety.


Kazdy jego bajt, czyli te 8-bitow to jedna linia pozioma o rozmiarze 8pixeli.
Jest ich 8 - czyli akurat 8x8pixeli. Ale zaraz! Przeciez to razem wychodzi
8bajtow, wiec TILES' ma rozmiar 8-mio, a nie 16 bajtowy?! Hehe Mozna by tak to odebrac,
lecz jest zupelnie inaczej. Przeciez bity sa dwa - ZERO i JEDEN,wiec
gdyby TILES mial wielkosc 8bajtow, to mozna by w nim tylko uzywac
dwoch kolorow - koloru 0 i koloru 1, a przeciez ma 4 kolory.
W tych 16bajtach zawarte sa jakby dwa te same obrazki, kazdy wypelniony
tylko zerami albo jedynkami. Dzieki temu, ze sa dwa takie "klony" TILES'a
mozna mieszac wartosci. Np. Jesli w jednym "Klonie" mamy w lewym gornym
pixelu 0, a w tym samym miejscu ale w drugim "klonie" tez bedzie zero,
to wychodzi lacznie, ze tutaj pixel ma kolor ZERO - czyli ten co pisalem,
ktory jest "przezroczysty". A jesli np. w pierwszym klonie bedzie pixel oznaczony
jedynka, a w drugim tez bedzie jedynka, to w ich polaczeniu wychodzi nam kolor 3...
Dzieki temu mozna wyodrebnic 4 kolorki, wiecej sie nie da.
Wszystkie cztery kombinacje widzimy na obrazku wyzej.

(http://siudym.webd.pl/nesasm/tutorial/nesppu9a.png)

(http://siudym.webd.pl/nesasm/tutorial/nesppu9b.png)

Ekran NES'a ma 256x240 pixeli w trybie PAL i 256x224 w trybie NTSC.
Na ekranie w trybie PAL wlezie dokladnie 32x30 TILES'ow czyli 960 sztuk,
natomiast w trybie NTSC 32x28 czyli 896 sztuk. Zwyczajnie w NTSC
obcinana jest gorne 8pixeli oraz dolne 8pixeli. Piszac cokolwiek w asemblerze
NES'a czesto uzywa sie Tablic Nazw (Name Tables), czyli taka mapa ekranu,
z zaznaczonymi gdzie maja byc wyswietlone TILESy, ktore beda skladac
sie na tlo.
(http://siudym.webd.pl/nesasm/tutorial/nesppu8.png)


Koniec. Ktos zalapal o co biega? :D:D

WSZYSTKO OPISANE BARDZO OGOLNIE, BO TEMAT DOSYC ROZBUDOWANY.
Jednak zalezalo mi na w miare jak najprostszym jego przedstawieniu,
jak ktos chce cos wiecej sie dowiedziec, niech pisze na dole tematu  ;)


Tytuł: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: Oldschoolowy dziad Czerwca 30, 2007, 00:45:18
Dałeœ rade siudym, i chociaż pewnie z Twojej lekcji wiele nie wyniose (jeno dwa telewizory tylko), to temat fascynujšcy. Sie tak przymierzam powoli do pożyczenia ksišżki o assemblerze od kumpla, może coœ po lekturze więcej zrozumiem. Ale fakt - objaœniłeœ łopatologicznie, zaciekawiłeœ tematem który zdawał się być cholernie zagmatwany. I za to należš Ci się oklaski, ucz nas pan dalej, panie siudym!  
:heh:


Tytuł: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: siudym Czerwca 30, 2007, 01:32:53
Jak bedziesz szukal czegos o asemblerze 6502 po polsku, to koniecznie ksiazki/tutoriale dla Commodore 64 - wszystko jest praktycznie identycznie jak w asemblerach NES'a. Mam ksiazke 6502 ATARI, tez pomocna, jednak zdecydowanie bardziej polecam C64. ;)
Natomiast wszelkie info dotyczace grafiki NES'a, to juz tylko:
http://nesdev.parodius.com (http://nesdev.parodius.com)


Tytuł: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: dafczynsky Czerwca 30, 2007, 11:30:48
Œwietny artykuł, dawać go na stronę... ;)


Tytuł: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: Pierun Czerwca 30, 2007, 15:03:14
Dobra robota siudym, wreszcie jakiœ konkretny artykuł do działu Romhacking, dzień - dwa i trafi na stronę.


Tytuł: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: sobek Czerwca 30, 2007, 17:03:16
Œwietny tekst! Niech leci na głównš, bo takich artów niestety brakuje.


Tytuł: Odp: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: ThomsonQQ Stycznia 07, 2009, 19:08:34
Siudym, z jakiej planety spadłeś? Na każdy temat jesteś obczajony. :)
Jest jakiś prosty program do tworzenia gier na pegasusa i nagranie potem na karta?

Respekt


Tytuł: Odp: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: andrzejlisek Stycznia 23, 2009, 22:39:19
Trzeba zacząć od tego, że nie da się nagrać dowolnej gry na dowolny kart. Przyczyną jest różnorodność mapperów.

Aby nagrać grę na kart, potrzebny jest programator pamięci EEPROM taki, jak Willem. Każd programator posiada własne oprogramowanie do nagrywania pamięci z pliku odwzorowania (obrazu).

Inna sprawa, to rozdzielenie pliku NES na dwa pliki, na poszczególne pamięci. Zwróć uwagę na to, że każdy kart posiada dwie osobne pamięci (bywają w postaci zalanej bezpośrednio na PCB).


Tytuł: Odp: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: siudym Stycznia 26, 2009, 00:39:39
Jest jakiś prosty program do tworzenia gier na pegasusa i nagranie potem na karta?

Tu Cie zaskocze - JEST!!  :crazy:
Uzywam go praktycznie do wszystkiego, mam go zawsze pod reka w systemie - zwie sie NOTATNIK.  ;)
Robie nim strony www, pisze programy w asemblerku oraz wiele innych zastosowan. :)

hehe


Tytuł: Odp: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: SebaSan1981 Marca 08, 2009, 01:08:30
Siudym genialny opis wyświetlania grafiki!!! Jesteś niczym profesor wykladający na uniwesytecie - oczywiście profesor konsolowy :biggrin:  Wielu z graczy nawet nie zastanawia się jak to działa, na jakiej zasadzie i czemu akurat tak a nie inaczej. Świetnie że tak ładnie to wszystko wyjaśnileś... wiem wiem, post ma już prawie dwa lata ale ja dziś przeczytałem go poraz pierwszy. Jestem pod wielkim wrażeniem Twojej wiedzy.


Tytuł: Odp: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: pawgal Lipca 22, 2009, 21:37:50
Heh, no ładnie opisane :D łatwiej mi teraz to zrozumieć jest po nauce asemblera w szkole :P


Tytuł: Odp: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: dr00id88 Lipca 22, 2009, 22:40:21
Heh, no ładnie opisane :D łatwiej mi teraz to zrozumieć jest po nauce asemblera w szkole :P

miales asm w szkol:| gdzie ty sie uczyles? w guantanamo?


Tytuł: Odp: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: pawgal Lipca 23, 2009, 17:36:53
nie, ale blisko heh :)


Tytuł: Odp: Jak Działa Grafika W Grach Na Nes'a
Wiadomość wysłana przez: siudym Października 24, 2013, 10:29:45
Znalazlem jeszcze cos na dysku i uploadowalem - bylem pewny, ze to ten sam opis co tutaj. Ale widze inny, nawet nie wiem czy gdzies wstawialem, albo nie pamietam.

http://siudym.webd.pl/nesasm/tutor.html