Gry na pegasusa - w jakim języku programowania były tworzone?

0

Tak mnie przyszedł ten temat na myśl, bo miałem okazję dziś grać w "Contra" na tym archaicznym sprzęcie i mnie to zastanowiło. A druga kwestia, która mnie zastanawiała jakim cudem producentom tych gier się to opłacało skoro jeden cartridge nie był zbyt drogi, a było na nim mnóstwo gier?

0

Ja stawiam, że niskopoziomowe operacje(opkody pegasusa) opakowali w funkcje wysokopoziomowe i pewnie c/c++ do tego zastosowali, ze względu na czas to może sam c.

3

Prawdopodobnie najczęściej w czystym asemblerze: https://www.gamedev.net/forums/topic/343677-what-were-snes-games-programmed-in/
Jest wiki książka o programowaniu w asemblerze na SNESa: https://en.wikibooks.org/wiki/Super_NES_Programming

Aktualizacja:
W sumie się pomyliłem. Pegasus był klonem NESa, a nie SNESa. NES miał tylko 2 kiB pamięci RAM, więc tutaj każdy bajt jest ważny i na 100% kodzono w czystym asemblerze.

5

skoro jeden cartridge nie był zbyt drogi, a było na nim mnóstwo gier?

Boo.. na oryginalnych kartridżach była jedna gra?

0
Yako Tako napisał(a):

Tak mnie przyszedł ten temat na myśl, bo miałem okazję dziś grać w "Contra" na tym archaicznym sprzęcie i mnie to zastanowiło.

Kod pisano w asemblerze, w późniejszym czasie zapewne także w C.

Nie jest też powiedziane, że tworzenie oprogramowania w tamtych czasach było potworną katorgą. Istniały różne narzędzia wspomagające pracę, np. edytor do projektowania poziomów w grach, działający na systemie DOS.

A druga kwestia, która mnie zastanawiała jakim cudem producentom tych gier się to opłacało skoro jeden cartridge nie był zbyt drogi, a było na nim mnóstwo gier?

Cena za kasetę była dobierana w taki sposób, aby koszt produkcji zwrócił się z nawiązką – nic inaczej niż z każdym innym towarem. Cena uzależniona była mocno od tego, co kaseta w sobie posiadała (np. dodatkowe kości pamięci).

Pamiętaj też, że gra grze nierówna. Pierwsza sprawa to sam fakt objętości gry i tu było różnie – Bomberman zajmował 24KB, a np. taki Moon Crystal512KB. Druga sprawa to oszukiwanie klientów – kaseta z miliardem gier faktycznie zawierała tylko kilka, reszta to były same duplikaty.

1
Wibowit napisał(a):

W sumie się pomyliłem. Pegasus był klonem NESa, a nie SNESa. NES miał tylko 2 kiB pamięci RAM, więc tutaj każdy bajt jest ważny i na 100% kodzono w czystym asemblerze.

Nie koniecznie, w c i c++ można pisać bardzo chude pliki, sam @kq napisał snake w c++17 16-bit wykorzystująć 512 bajtów, 0,5kB.

0

Ty piszesz o rozmiarze gry – czyli o ROM – a tu chodzi o śladową ilość RAM.

0

Eh, on zawarł w tej grze całą obsługę sprzętu, grafiki, logiki no i wyszło 512 bajtów to całą kość do ramu wczytasz i tak jest wymagane w przypadku cpu.

A w pegasusie masz jeszcze układ graficzny co ma też 2kB pamięci, więc wszystko pasuje idealnie i do tego może resztę wczytywać z kaset.

On i tak generował tam czysty kod assemblera praktycznie, inline napisane funkcje wysokopoziomowe.

0

No dobrze, cięszę się, że jesteś wielbicielem @kq i jego twórczości, jednak co ma wspólnego wymieniony projekt snake'a z tworzeniem gier na NESa?

No i też zwróć uwagę na to, że gry na ową platformę były bogatsze, bardziej skomplikowane i grywalne. Chyba że mowa o stolcu, jakim była kompilacja Action 52 i temu podobne produkcje.

5

Gry na NES/Pegasus piszemy w asemblerku 6502 oraz ostatnio modnym C++. Co do samego sprzetu to oczywiscie skoro to 6502 to jest w stanie zaadresowac 64k pamieci. Mapa pamieci CPU: https://wiki.nesdev.com/w/index.php/CPU_memory_map oraz mapa PPU: https://wiki.nesdev.com/w/index.php/PPU_memory_map
Jak widac PPU ma osobna mape pamieci, ktora nie jest powiazana z mapa 6502. Dostep do pamieci PPU mamy jedynie przez rejestry, wiec nie sa bezposrednio, jest to nieco upierdliwe, ale jakos specjalnie nie gryzie jak juz poznamy architekture. Co do pamieci NES to mamy 2KB WRAM dla CPU oraz 2KB dla PPU czyli grafiki. Jesli chodzi o WRAM to Nintendo wydaje mi sie bralo pod uwage, ze ceny pamieci sa wysokie i trzeba stworzyc jakas furtke na jej zwiekszenie i to dosyc pomyslowo. Jest powiedzmy zarezerwowana czesc mapy pamieci zaczynajacej sie pod adresem $6000-7FFF o wielkosci 8KB i taka pamieci wsadzona w kartridz dziala identycznie jak WRAM w konsoli zwiekszajac pamiec do 10KB. Komercyjne gry roznie uzywaja dodatkowego ram w karcie - jedne maja podlaczone do niej baterie litowe dzieki czemu dane nie uciekaja po wyjeciu kartidza, a inne uzywaja jej jako dodatkowa pamiec ram. Czysty NES w mapie pamieci ma przypisane max 32KB dla ROM'u w karcie z danymi dla gry (oraz 8KB dla grafiki), dlatego pierwsze gry na nes jak zauwazymi maja 40KB wielkosci jako pliki. Oczywiscie z czasem w kartach uzywane beda rozne uklady przelaczajace banki (dedykowane uklady ASIC) lub zwykle bramki logiczne, dzieki czemu gry beda miec praktycznie dowolna wielkosc.

Sam programuje w asemblerku. Uzywam NESASM3, ale oczywiscie sa inne kompilatory/asemblery. Kod, grafike, muzyke robie sam, do grafiki sa aplikacje dedykowane, a muzyka takze pod windows FamiTracker 2 (bardzo wygodny). http://www.famitracker.com/

Nieco moich wynalazkow na NES mozna zobaczyc tu (w opisach filmow zawsze sa pliki ROM do odpalenia na EMU). Glownie powiedzmy takie koncepty gier, czesto zaczete (gotowe silniki napisane) ale juz dalej tylko probne poziomy itd. Niestety to wszystko jest mega czaso-chlonne wiec ukonczenie gry zwyczajnie mi sie nie chce.

(to jest playlista wiec z prawej mamy do wybrania filmy z niej)

Jak kogos interesuje temat z checia podpowiem co i jak. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1