Autor Wątek: Proszę o dokładne informacje o jednostce video i audio pegasusa  (Przeczytany 3653 razy)

Darkhog

  • Władca MyCrossSoftu i MTDW
  • Użytkownik
  • *
  • Wiadomości: 62
    • Zobacz profil
Tworzę grę (flashówkę) na podstawie Adventure Island (mam nadzieję, że się spodoba) i umyśliłem sobie, że mimo, że większość grafiki jest mojego autorstwa, a ripy z AI zastosuję dopiero w ostateczności chcę aby to wyglądało tak jakby mogło spokojnie na pegasusie pójść (nawet ściągnąłem paletę NES-a dla GIMPa i tylko tych kolorków się trzymam + oczywiste rzeczy typu 3 kolorki na sprite) i w związku z tym potrzebuję informacji na temat jednostki graficznej i jednostki Audio naszej ukochanej konsolki. W szczególności zaś chodzi o odpowiedzi na następujące pytania (wiem, że są google, a ja znam angielski, ale nie rozumiem tego elektronicznego żargonu):

-ile kolorów może być w jednym momencie na ekranie (tak, mam zamiar liczyć)
-ile spritów może NES wyświetlać na raz?
-jakie są limity rozmiaru spritów (po za oczywistym - rozdzielczością)

Co do audio zaś to chodzi mi o to ile kanałów może NES obsłużyć (coś mi świta, że tylko 4, ale nie wiem czy z właściwego okna i czy jest przewidziany dodatkowy kanał na dźwięki typu strzał, itp. czy to idzie w tych 4 kanałach)

kemustek

  • Użytkownik
  • *
  • Wiadomości: 68
    • Zobacz profil
Odp: Proszę o dokładne informacje o jednostce video i audio pegasusa
« Odpowiedź #1 dnia: 03.03.2011, 19:20:49 »
Dźwięk  5-kanałowy mono – 1 kanał szumów, 1 PCM i 3 dźwiękowe.
Co do kolorów to maksymalnie 25 wyświetlanych równocześnie.

Mcin

  • Twój Moderator
  • Moderator Globalny
  • Stały bywalec PG
  • *****
  • Wiadomości: 2922
    • Zobacz profil
Odp: Proszę o dokładne informacje o jednostce video i audio pegasusa
« Odpowiedź #2 dnia: 03.03.2011, 19:22:43 »
Hmm, nie chcę być złośliwy, ale to JA ie znam się na elepstronice i potrafiłem do tego dojść ;) angielska Wikipedia ew. jak nie będzie specyfikacja NES'a na NESDOC (początek artykułu jest "ludzki"). Z tego, co pamiętam, to kolorów mogło być 24 z dostępnej palety, a spritów koło 64 8x8 albo 8x16, ale lepiej sprawdź, ja bym sam sobie nie ufał :)
EDIT ubiegł mię ;) i do tego wychodzi, ze się jednak pomyliłem ;)

Vash

  • Stały bywalec PG
  • *****
  • Wiadomości: 774
    • Zobacz profil
Odp: Proszę o dokładne informacje o jednostce video i audio pegasusa
« Odpowiedź #3 dnia: 03.03.2011, 19:30:05 »
Z ilością zadawania pyta koleś przesadzasz :D Troszkę inwencji i poszukiwać w necie nie zaszkodzi ;)

Darkhog

  • Władca MyCrossSoftu i MTDW
  • Użytkownik
  • *
  • Wiadomości: 62
    • Zobacz profil
Odp: Proszę o dokładne informacje o jednostce video i audio pegasusa
« Odpowiedź #4 dnia: 03.03.2011, 20:26:24 »
Dźwięk  5-kanałowy mono – 1 kanał szumów, 1 PCM i 3 dźwiękowe.
Co do kolorów to maksymalnie 25 wyświetlanych równocześnie.
1 PCM? To NES mógł odtwarzać wav-y? Ciekawe...

Aha - dziękuję za informacje wszystkim wypowiadającym się tutaj. Szkoda, że nie ma tu punktów reputacji, bo bym dodał.

@Mcin, uwierz mi, próbowałem korzystać z angielskich materiałów, ale bardzo szybko się pojawiły trudne słowa typu VRAM, PPU, SPU, DIP, etc. które wszystko zaciemniły. Co innego, jakby to były jakieś terminy programistyczne - to z racji profesji bym już zrozumiał, ale za dużo w tym terminów elektroniczno-sprzętowych.

Jeszcze potrzebne mi info nt. limitu spritów jednocześnie na ekranie i ich rozmiarów (żebym mógł spreparować grafiki gdyby się ktoś tak szalony genialny znalazł, że chciałby babrać się w asm/tym dziwnym kompilatorem C dla nesa (jest taki) i z tego roma robić).

machbed

  • Moderator Globalny
  • Stały bywalec PG
  • *****
  • Wiadomości: 2124
  • Jeżeli jest sprawa, kontakt na PW.
    • Zobacz profil
Odp: Proszę o dokładne informacje o jednostce video i audio pegasusa
« Odpowiedź #5 dnia: 03.03.2011, 20:47:28 »
Hmm, bez zrozumienia działania VRAMu, PPU itd i ogólnie bez zrozumienia zasady działania tego sprzętu chciałbyś zrozumieć działanie programu gry NESowej i wyświetlania grafiki? To raczej niewykonalne. Niestety jedno z drugim się wiąże.

Mcin

  • Twój Moderator
  • Moderator Globalny
  • Stały bywalec PG
  • *****
  • Wiadomości: 2922
    • Zobacz profil
Odp: Proszę o dokładne informacje o jednostce video i audio pegasusa
« Odpowiedź #6 dnia: 03.03.2011, 21:11:59 »
PPU - "karta graficzna" tamtych czasów, VRAM - ram graficzny, SPU - dodatkowy procek, DIP - rodzaj "scalaczka". Tak chyba prościej :P Zgnębcie mnie jak się pomyliłem :)

Darkhog

  • Władca MyCrossSoftu i MTDW
  • Użytkownik
  • *
  • Wiadomości: 62
    • Zobacz profil
Odp: Proszę o dokładne informacje o jednostce video i audio pegasusa
« Odpowiedź #7 dnia: 03.03.2011, 21:16:52 »
Ja tylko muszę znać limity NES-a jeśli chodzi o grafikę, etc. Ja już powiedziałem, że robię flashówkę na podstawie AI. I chcę żeby to wyglądało wiarygodnie dla osób obeznanych. I żeby móc powiedzieć: Dołożyłem wszelkich starań, aby gra była tak zrobiona, aby mogła być przerobiona na nesowy rom. Nie mam wystarczających umiejętności, aby to zrobić, ale jeśli ty masz, to ok - mogę dostarczyć grafiki, dźwięki i design poziomów, ale dalej radź sobie sam. Jak masz umiejętności, to gra powinna wyglądać tak samo na emulatorze czy nawet konsoli bo przestrzegałem wszelkich ograniczeń sprzętowych.

Czyli nie muszę znać budowy NES-a, wystarczy mi znajomość jego ograniczeń.

Darkhog

  • Władca MyCrossSoftu i MTDW
  • Użytkownik
  • *
  • Wiadomości: 62
    • Zobacz profil
Odp: Proszę o dokładne informacje o jednostce video i audio pegasusa
« Odpowiedź #8 dnia: 04.03.2011, 10:28:48 »
Sorry za dubla, ale muszę podbić.
Cytat: inne forum
Małe info dotyczące grafiki NES'a, przydatne jak ktoś nie jest w stanie załapac o co biega w tym wszystkim i dopiero zaczyna cos dlubac w asemblerku na NES. Napisałem bardzo łopatologicznie, wiele się powtarzając, wszystko dla dobra sprawy. Mam nadzieję, ze komuś sie przyda...

Name Table to ogólnie widoczny cały ekran w pełnej rozdzielczości NES'a - 256x240 pixeli, który składa się z tablicy 32x30 Tiles'ów (każdy 8x8 pikseli). Name Table dokładnie ma rozmiar 1024 bajtów, a każdy bajt odpowiada jednemu Tiles'owi ( zawiera numer Tilesa znajdującego się w Pattern Table/CHR ROM). Kto potrafi liczyć, zapewne doszedł do pewnej niezgodności, bo skoro Name Table składające się z grupy 32x30 ma ich 960, to dlaczego ma rozmiar 1024 bajtów? Sprawa jest prosta - ostatnie 64 bajty to Attribute Table - tablica zawierająca dane kolorów z palety NES'a. Każdy bajt w Attribute Table odpowiada za grupę 4x4 Tilesów na ekranie - czyli kolejne podzielenie całego ekranu na tablice 32x32 pixele. Na tym nie koniec, taka tablica 32x32 pixele (4x4 Tiles'y) dzieli sie ponownie na cztery części - każda zwie się Square (0,1,2,3). Square składa się z 2x2 Tiles'ów (cztery Tiles'y). Każde Square może posiadać zdefiniowany w Attribute Table adres banku kolorów w palecie tła (16 wcześniej zdefiniowanych kolorów przez użytkownika w palecie tła). Cała paleta posiada zdefiniowane 32 kolory - 16 dla tła oraz drugie 16 dla sprite'ów. Nas interesuje paleta tła, podzielona na cztery banki, każdy po 4 kolory. Jedno Square czyli kwadrat 2x2 Tilesy może mieć maksymalnie 4 kolory - tyle ile jeden bank w palecie. Właśnie po to jest Attribute Table. Innym słowem - nie można zrobic obiektu 16x16 pixeli np. drzewa używajac więcej niż 4 kolory. Takie ograniczenie ma NES (pomijam wieksze możliwosci dodane przez sprzętowe kontrolery pamięci).
Aha.. Attribute Table można sobie w kodzie zrobic, a Name Table np. jako plik 960 bajtowy. Jednak przydatniej miec wszystko w jednym pliku.

Tablice atrybutów posiada także Sprite. Jest ona nieco inna, posiada wiecej możliwości. Pamięc przeznaczona na Sprite'y to 256 bajtów - jedna ze "stron" pamięci WRAM (2KB). Nie jest ona na stałe nigdzie, trzeba ja zaadresowac używając jeden z rejestrów za to odpowiedzialny ($2003, ale nie będę zagłębiał się, bo to nie tutorial ASM  )


Teraz przedstawie to obrazkowo, sporo się powtarzając dla dobra sprawy ;P

Name Table. Różnica między PAL a NTSC nie jest niczym specjalnie trudnym do zrozumienia. NT jest taka sama dla PAL jak i NTSC, jedyną ważniejszą różnicą jest brak wyświetlanych górnych i dolnych 8 pikseli obrazu. Więc projektując coś pod NTSC należy pamiętac, aby nie "malowac" tam nic ważnego, ponieważ w NTSC na ekranie nię będzie to widoczne. Rozmiar jest ten sam dla PAL/NTSC czyli 1024 bajty, z czego 960 to 32x30 Tiles'ów i na końcu 64 bajty atrybutów kolorów.
 


Każdy bajt w Name Table to 8-bitowy (czyli 1bajt) numer Tiles'a znajdującego się w CHR ROM (Pattern Table inaczej - bo CHR ROM to właśnie PATTERN TABLE).
Ilośc Tiles'ów w Pattern Table dla tła (tak, tła, bo te 8KB CHR jest podzielone na połowę - jedna dla Sprajtów a druga dla Tła) to 256. Oczywiście 'numerki' zapisane w hex'ach, czyli pierwszy Tiles to 00 a ostatni FF.
Polecam Windows'owski kalkulator przestawiony na "Widok Naukowy" - ma świetne opcje przeliczania różnych wartości na binarne, Hex, dec. itd. W obie strony.

 

Każdy jeden bajt w Attribute Table odpowiada za przypisanie odpowiedniego banku kolorów z Palety tła do grupy 4x4 Tiles'ów. Tych bajtów atrybutów jest 64 sztuki, tyle co na ekranie jest grup 4x4 (32x32 pix). Taka grupa 4x4 dzieli się ponownie na cztery części, czyli cztery grupki 2x2 tilesów zwane SQUARE. Na cztery części dzieli się także bajt, dając nam możliwośc zmiany kolorów każdej grupce 2x2 osobno (każdej Square).

 
 


Tutaj mamy przedstawione wszystko najprościej. Na ekranie (w Name Table) wstawiliśmy cztery takie same grzybki, jednak dzięki Attribute Table zmienione zostały banki kolorów na cztery różne dla każdej Square (Grzybek to akurat jedne Square 2x2 Tiles). Teraz każdy grzybek (każde Square) ma inne kolory (mimo, ze fizycznie sa identyczne).

 


Pattern Table. To nic innego jak CHR ROM. NROM może zaadresowac tylko 8KB danych CHR, które są podzielone na dwie części. Jedna (pierwsze 4KB) to cała grafika (256 Tiles'ów) przeznaczonych na Sprajty. Drugie 4KB to cała grafa przeznaczona na tła (także 256 sztuk Tiles'ów). Podział nie jest na stałe i można go zmienic np. grafika tła będzie piewszymi 4KB, a sprajty drugie. Wszystko zmieniamy w rejestrze kontrolującym PPU. Jednak przyjeło się, ze pierwsze to SPR, a drugie BGR (BKG). Jak juz pisałem wcześniej, każdy z 256 Tilesów ma swój adres/numer od 00 do FF (1-256) i dzięki temu można bardzo szybko przypisac cos w kodzie do danego Tiles'a. Przypomina to układanie porozwalanych puzli (Pattern Table) w całośc (Name Table).

 
 



Sprites. Zabawa ze sprajtami przypomina nieco to, co robimy z grafiką tła.
Nie ma tylko czegoś takiego jak Name Table dla sprajtów, wszystkie sprajciki definiujemy nieco inaczej. Wszystkich sprites może byc max. 64 sztuki, każdy ma swoje 4 bajty atrybutów, a wszystko mieści się w 256 bajtach pamieci WRAM.

Ok, dowiedziałem się tu kilku rzeczy, a mianowicie:
- w całej grze może być 64 spritów i 256 tilesów 8x8
- Jeden square składa się z 2x2 tilesów i może mieć 3 kolory + przezroczystość.

W związku z tym mam kilka dodatkowych pytań:
- czy były gry które miały więcej tilesów/spritów niż 256/64 (sztuczki typu grafiki w PRG zapisane w tablicach rysowane piksel po pikselu)?
- Jaki jest limit spritów wyświetlanych jednocześnie NA EKRANIE, a nie w całej grze (64)?

Mcin

  • Twój Moderator
  • Moderator Globalny
  • Stały bywalec PG
  • *****
  • Wiadomości: 2922
    • Zobacz profil
Odp: Proszę o dokładne informacje o jednostce video i audio pegasusa
« Odpowiedź #9 dnia: 04.03.2011, 21:51:15 »
To jest przecież ograniczenie ilości spritów na ekranie, tyle może wyświetlić PPU na raz.

Darkhog

  • Władca MyCrossSoftu i MTDW
  • Użytkownik
  • *
  • Wiadomości: 62
    • Zobacz profil
Odp: Proszę o dokładne informacje o jednostce video i audio pegasusa
« Odpowiedź #10 dnia: 05.03.2011, 06:11:46 »
"Wszystkich sprites może byc max. 64 sztuki,"

Ja to zrozumiałem, tak że tyle może być max w romie.

Mcin

  • Twój Moderator
  • Moderator Globalny
  • Stały bywalec PG
  • *****
  • Wiadomości: 2922
    • Zobacz profil
Odp: Proszę o dokładne informacje o jednostce video i audio pegasusa
« Odpowiedź #11 dnia: 05.03.2011, 16:13:22 »
Wątpiłbym, przejdź Ninja Gaidena i zobacz, ile różnych sprite'ów było potrzebnych do zrobienia chociażby jednego filmiku ;)