Sega Master System vs Nintendo NES

ODPOWIEDZ
siudym
'czasem cos napisze'
'czasem cos napisze'
Posty: 335
Rejestracja: 2006-05-05, 23:20

Sega Master System vs Nintendo NES

Post autor: siudym » 2024-02-25, 19:55

Kilka razy zasłyszałem w sieci komentarze porównujące wielkość pamięci video w Sega Master System oraz Nintendo NES w mocno ogólny sposób czyli po samej ich wielkości. Zainspirowało mnie to do stworzenia artykułu, który rozjaśni temat w jakiś sensowny sposób.

Porównywana jest często "na szybko" pamięć VRAM w SMS wielkości 16KB do 2KB VRAM w NES, która to wypada blado przy jej 8-krotnie większej ilości w SMS. Jednak sprawa nie jest tak prosta i w rzeczywistości porównywanie wielkości VRAM zainstalowanej w konsolach nie przekłada się na przewagę jednego systemu nad drugim.

Cały haczyk jest w zasadzie działania grafiki w obu systemach, bo nawet jak NES ma tylko 2KB VRAM w konsoli, to kolejne przynajmniej 8KB zawsze siedzi w kartridżu, natomiast w przypadku SMS jest ona w całości w konsoli. Więc już ten fakt pokazuje, że porównywane musi być 16KB do 10KB a nie do 2KB w przypadku NES.

Co do rodzaju tych 8KB w kartridżu z grą na NES, to może być to zarówno 8KB VRAM jak i VROM - gdy jest ROM to grafika zostaje już "fabrycznie" wgrana w kość, natomiast gdy RAM to podobnie jak w SMS najpierw na początku kodu musimy skopiować z Program ROM'u te 8KB do pamięci VRAM.

To nie koniec, bo nawet jak SMS w tym przypadku ma dalej o 6KB VRAM więcej, to nie znaczy, że przekłada się to na np. większą ilość wyświetlanej grafiki itd. Kolejny haczyk jest w organizacji tej pamięci. Obie konsole mają wszystko zaprojektowane podobnie, a nawet jest przewaga NES względem SMS pod pewnym kątem :)

Zarówno SMS jak i NES mają pamięć VRAM podzieloną na trzy najważniejsze części: Pamięć znaków tła, znaków sprites oraz pamięć ekranu.
Obie konsole mają 256 znaków tła oraz 256 znaków sprites, a największa różnica to ich wielkość bo znak (TILE) w SMS zajmuje 32 bajty i ma 4-Bitowy kolor (4bpp), natomiast w NES znak zajmuje 16 bajtów bo ma 2-bitowy kolor (2bpp) i to powoduje podwójnie większe zapotrzebowanie na pamięć:

SMS 256 znaków x 32 bajty to 8KB x dwie takie tablice to już 16KB, natomiast NES to 256x 16 bajtów to 4KB x dwie tablice to mamy 8KB.
Teraz może coś się nie zgadzać bo skoro w SMS dwie tablice znaków zajmują 16KB czyli całość VRAM to gdzie reszta?
No właśnie tu jest coś, co w NES jest na plus, bo jedna z tablic zostaje obcięta o 2KB, które zostały na pamięć ekranu, natomiast w NES te 2KB siedzi w konsoli osobno dzięki czemu nie zmniejsza ilości grafik możliwych do wyświetlenia.

Więc w przypadku SMS mamy organizację taką: 8KB (8192 bajtów) dla jednej tablicy znaków (256 grafik), kolejna tablica (192 grafiki) ma 6KB (6144 bajtów) oraz 2KB (2048 bajtów) dla pamięci ekranu. I to jest całość 16KB (tzn to co zostaje pod koniec pamięci ekranu to 256 bajtów dla atrybutów sprites). Co ważne można ustawić sobie dowolnie który bank będzie dla tła i dla sprites, dzięki czemu jak potrzeba więcej znaków dla tła to ustawiamy sobie większy bank z 256 znakami, a dla sprites ten z 192 (i odwrotnie). NES jak wyżej napisałem to 4KB (256 znaków) + 4KB (256 znaków) i 2KB dla ekranu.

Obrazek

Tu wychodzi także kolejna, mała przewaga NES, bo o ile w SMS mamy w tych 2KB pamięci tylko na jeden ekran, to w NES te 2KB starcza na dwa :) Dlaczego? Ponieważ w NES jeden znak zajmuje jeden bajt pamięci ekranu, natomiast SMS znak jest 2-bajtowy. Pierwszy bajt w pamięci ekranu w oby systemach to zwyczajnie numer 0-255 znaku, jaki ma być pobrany z tablicy znaków. W SMS kolejny bajt rozszerza właściwości ekranu np. zamiast 256 znaków można wybrać jeden z 0-511 (9 bitów), a raczej 0-447. Dodatkowe bity sterują wyborem palety (można użyć palety sprites dla tła), obracaniem znaku na osi X/Y oraz priorytet znaku względem sprite - to sporo na plus względem NES.

Wszystko zależy od wielkości ekranu, która w przypadku NES jest stała i zawsze ma rozdzielczość 256x240 czyli 32 znaki w poziomie na 30 znaków w pionie. Daje to 32 x 30 więc 960 bajtów + 64 bajty atrybutów = 1KB (1024 bajtów) na ekran, więc mamy pamięci na dwa niezależne ekrany.
SMS ekran zajmuje w podstawowym trybie 32 x 24 znaki (256x192) czyli 768 bajtów x 2 (dwa bajty na znak) = 1536 bajtów + 256 bajtów niewidocznych znaków + pod koniec 256 bajtów dla sprites.

SMS ma jeszcze dwa tryby 32x28 (256x224) oraz 32x30 (256x240 jak NES) i one zajmują nieco więcej pamięci ekranu czyli 1792 oraz 1920 bajtów.
Ostatni tryb jest możliwy wyłącznie na konsoli SMS wersja II i tylko PAL oraz powoduje, że z tych 2KB pamięci zostaje na końcu tylko 128 bajtów dla sprites więc trzeba wtedy zarezerwować inne miejsce w VRAM do tego celu (kosztem ilości znaków).

Wiemy już dlaczego SMS ma większą ilość VRAM względem NES - zwyczajnie podobna zawartość zajmuje w każdym przypadku dwa razy więcej miejsca.

Czy są jakieś plusy takiego rozwiązania skoro same liczby wyglądają podobnie (znaczy się ilości znaków/tilesów oraz ich ilość na ekranie) ?
Wszystkiemu "winna" jest większa ilość bitów koloru w SMS - 4 bits-per-pixel (16 kolorów) versus 2 bits-per-pixel (4 kolory) w NES.
Teraz ktoś pomyśli... zaraz, ale zarówno SMS jak i NES mają dwie palety po 16 kolorów (16 kolorów dla tła, oraz 16 kolorów dla sprites) więc skąd ta różnica? Każda z tych konsol inaczej "zarządza" paletą kolorów, więc nawet jak wydaje się, że są podobne pod tym wzlędem, to działają totalnie inaczej...

SMS używając dla grafiki znaków w 4bpp ma możliwość użycia wszystkich 16 kolorów w jednym znaku 8x8 pixeli - natomiast NES już tylko 4 kolory i to jeszcze z ograniczeniem....

Palety tła oraz sprites w NES zostały podzielone na 4 sub-palety, które dodatkowo "tracą" jeden z kolorów - kolor 0, czyli przezroczysty (kolor tła).
Mamy więc np. dla tła 16 kolorów, podzielone na 4 sub-palety (2bpp), każda ma kolor 0 wspólny (przezroczysty) więc realnie z 16 kolorów robi nam się 12 + kolor 0 (to samo dla sprites). Oczywiście nie użyjemy na raz tych 12 kolorów... Bo jeden znak może przybrać jedną z tych 4 sub-palet. SMS natomiast nie dzieli palety na sub-palety, ale używa jednej, dużej 16 kolorowej a dokładnie 15 różnych kolorów + kolor 0. Zarówno paleta tła jak i sprites.

Paleta NES - tło+sprites
Obrazek
Paleta NES - tło+sprites (sub-palety)
Obrazek
Paleta SMS - tło+sprites
Obrazek
Paleta SMS - tło+sprites (jedna paleta, brak sub-palet)
Obrazek

Pod tym względem SMS przewyższa potwornie NES i możliwość użycia aż 15 kolorów dla jednego znaku 8x8 pix robi znaczącą robotę (dodatkowo istnieje możliwość ustawienia w atrybutach każdego znaku używanie palety dla sprites co dodatkowo umożliwia zwiększenie zakresu kolorów znaków tła). Co do dodatkowego ograniczenia w przypadku NES o którym wyżej wspominałem, to użycie jednej z 4 sub-palet odnosi się nie do jednego znaku 8x8 pix, ale do meta-znaku 16x16 (4 znaki) - spowodowane jest to bardzo ograniczoną, pozostałą na końcu pamięci ekranu przestrzenią do tego celu (1024 bajty na ekran to 960 bajtów na znaki + 64 na ich atrybuty, czyli zbyt mało aby mieć możliwość ustawienia numeru sub-palety osobno dla każdego znaku). To spory minus NES'a, a możliwość jego obejścia jest tylko możliwa używając najmocarniejszego mappera/kontrolera MMC5).

Podzielenie głównej palety na 4 sub-palety w NES ma swoje plusy w oszczędnościach związanych z ilością danych grafik znaków. Przykładem niech będzie biała chmurka i zielony krzaczek w super mario bros - używają one tej samej grafiki znaków, ale każda ma przypisany inny numer sub-palety. W przypadku SMS musimy narysować dwie osobne grafiki znaków co zwiększy użycie pamięci VRAM (jest wprawdzie myk, że ustawimy numer palety dla sprites, ale znowu trzeba to przemyślnie uwzględnić w projekcie aby numer koloru w obu paletach był ten sam, tylko miał inną wartość czyli dla chmurki był biały w palecie tła, a dla krzaczka zielony w palecie sprites).

Nie wiem czy przejrzyście to opisałem, bo słaby ze mnie pisarz... Więc sorki za błędy w pisowni :)

Dodatkowo wspomnieć trzeba o największym plusie obecności banku 8KB VRAM w kartridżu z grą na NES - a mianowicie możliwość używania i przełączania banków w praktycznie dowolnej ilości. Przykładowo używanie różnych kontrolerów umożliwia zwiększenie tej pamięci do np. 128,256,512 lub więcej KB i przełączanie "w locie" banków z grafikami (co masa gier robi). To samo w SMS jest niemożliwe sprzętowo, a jak chcemy zmienić grafikę w VRAM konsoli, to musimy ją ponownie skopiować z Program ROM, co zjada sporo cykli procesora i odbija się na wydajnośći.

Przy okazji wspomnę także o pamięci WRAM w obu konsolach. SMS ma 8KB a NES 2KB co jest sporą róznicą, ale to także jest w bardzo prosty sposób do obejścia - dodatkowe 8KB WRAM można bez większych problemów zainstalować w kartridżu i mamy do niego bezpośredni dostęp na mapie pamięci co daje łącznie 10KB WRAM (co także wiele gier robi). :)

Awatar użytkownika
Axi0maT
Sponsor
Sponsor
Posty: 8536
Rejestracja: 2006-01-12, 12:40
Lokalizacja: Koszalin
Kontakt:

Re: Sega Master System vs Nintendo NES

Post autor: Axi0maT » 2024-02-25, 21:32

Swietny material. Bardzo obrazowe porownanie a zarazem wyjasnienie dlaczego pozornie slabszy NES dawal rade odskoczyc SMS nawet w pozniejszym czasie.

Awatar użytkownika
cissic
'jeszcze jeden stopien i...'
'jeszcze jeden stopien i...'
Posty: 923
Rejestracja: 2016-03-16, 09:58

Re: Sega Master System vs Nintendo NES

Post autor: cissic » 2024-02-25, 22:44

Dałem radę przeczytać, więc nie ma dramatu ;) Dzięki za materiał dydaktyczny :)

Awatar użytkownika
philipo
Sponsor
Sponsor
Posty: 258
Rejestracja: 2006-12-26, 11:32
Lokalizacja: Lipnica k/ Kolbuszowej
Kontakt:

Re: Sega Master System vs Nintendo NES

Post autor: philipo » 2024-02-26, 08:44

Super porównanie. W przystępny sposób wyjaśnia zalety i wady obu konsol.

siudym
'czasem cos napisze'
'czasem cos napisze'
Posty: 335
Rejestracja: 2006-05-05, 23:20

Re: Sega Master System vs Nintendo NES

Post autor: siudym » 2024-02-26, 10:52

Skupiłem się bardziej na wielkości VRAM, ale można dodać jeszcze róznicę dotyczącą sprites:
O ile SMS ma rozbudowane atrybuty każdego ze znaków np. możliwość obracania go na osi y/x i przykładowo w grafice znaków mamy strzałkę, którą nie musimy mieć osobno skierowaną w lewo/prawo ale można jednym atrybutem odwrócić ją w inną stronę). Kolejny użyteczny atrybut to priorytet względem sprite, np. mamy grafikę pnia drzewa i można zrobić zależnie od potrzeby tak aby sprite chował się za tym pniem albo był przed (w NES trzeba tu nieco więcej się namęczyć).

Teraz coś co znowu ma NES, a nie ma SMS: Sprites w NES mają swoje atrybuty, a SMS nie. Czyli taka odwrotność w przypadku atrybutów znaku. NES może obracać sprites sprzętowo na osi x/y, ma możliwość ustawiania priorytetu względem tła (tu są plusy i minusy obu rozwiązań - czasem lepiej jak sprite ma taki atrybut, a czasem jak znak). W przypadku SMS aby zrobić grafikę postaci skierowana w innym kierunku trzeba ją posiadać osobno w tablicy grafik sprites, albo bawić się w dynamiczne podmienianie grafiki w VRAM.

Kiriki-kun
'wieszcz narodowy'
'wieszcz narodowy'
Posty: 1050
Rejestracja: 2014-11-21, 01:48

Re: Sega Master System vs Nintendo NES

Post autor: Kiriki-kun » 2024-02-28, 15:59

Kawał artykułu, miło w końcu trafić na coś co można przeczytać, a nie tylko obejrzeć na YouTube :)

siudym
'czasem cos napisze'
'czasem cos napisze'
Posty: 335
Rejestracja: 2006-05-05, 23:20

Re: Sega Master System vs Nintendo NES

Post autor: siudym » 2024-02-29, 20:04

Więcej nie zawsze znaczy lepiej, przykładem niech będzie Sega SG-1000 - posiada 1KB WRAM i podobnie jak SMS aż 16KB VRAM.

ODPOWIEDZ