Elektroda.pl
Elektroda.pl
X
CControls
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Nagrywanie własnych gier do PEGASUSa

phanick 03 Sty 2014 16:37 39321 56
  • Nagrywanie własnych gier do PEGASUSa
    Wiele osób zastanawia się, czy można i jak nagrać gry na popularne `dyskietki` od Pegasusa. Raz nawet spotkałem się z użytkownikiem, który pytał innych, jak podłączyć stację dyskietek z PC do Pegasusa ;-) Teraz dowiemy się, że jednak jest to możliwe bardzo małym kosztem!

    Informacje techniczne
    W Pegasusie mamy procesor CPU 6502 (układ UA6527P) który ma swoją szynę adresową oraz danych PRG (program), do której podłączona jest pamięć RAM oraz układ graficzny PPU (UA6538) z oddzielną szyną adresową oraz danych CHR (character - grafika) ze swoją pamięcią RAM. Układy te działają niezaleznie od siebie, aczkolwiek CPU może się komunikować z PPU.
    Na złącze kartrydża wyprowadzona jest większość sygnałów obu procesorów (szyny adresowe, szyny danych).

    Code:

                               -------
             (# 1)  GND     - |01   31| - +5V    (#60)
                    PRG A11 - |02   32| - M2
                    PRG A10 - |03   33| - PRG A12
                    PRG A9  - |04   34| - PRG A13
                    PRG A8  - |05   35| - PRG A14
                    PRG A7  - |06   36| - PRG D7
                    PRG A6  - |07   37| - PRG D6
                    PRG A5  - |08   38| - PRG D5
                    PRG A4  - |09   39| - PRG D4
                    PRG A3  - |10   40| - PRG D3
                    PRG A2  - |11   41| - PRG D2
                    PRG A1  - |12   42| - PRG D1
                    PRG A0  - |13   43| - PRG D0
                    PRG R/W - |14   44| - PRG /CE ( /15 or /M2 )
                    /IRQ    - |15   45| - SND IN
                    GND     - |16   46| - SND OUT
                    CHR /RD - |17   47| - CHR /WR
                    CHR A10 - |18   48| - CIRAM /CE
                    CHR A6  - |19   49| - CHR /A13
                    CHR A5  - |20   50| - CHR A7
                    CHR A4  - |21   51| - CHR A8
                    CHR A3  - |22   52| - CHR A9
                    CHR A2  - |23   53| - CHR A10
                    CHR A1  - |24   54| - CHR A11
                    CHR A0  - |25   55| - CHR A12
                    CHR D0  - |26   56| - CHR A13
                    CHR D1  - |27   57| - CHR D7
                    CHR D2  - |28   58| - CHR D6
                    CHR D3  - |29   59| - CHR D5
             (#30)  +5V     - |30   60| - CHR D4  (#31)
                               -------


    W kartrydżu mamy zwykle dwie pamięci ROM - jedną dla CPU oraz drugą dla PPU. Niestety taka architektura bardzo ogranicza możliwości sprzętowe - CPU był w stanie zaadresować tylko 32 kB pamięci, a PPU - 8 kB. Tylko bardzo proste gry (np. Super Mario Bros) były w stanie podołać tym wymaganiom. Producenci szybko zorientowali się, że potrzeba jakoś rozszerzyć możliwości sprzętowe. Zwiększenie ilości pamięci możliwej do zaadresowania stało dostępne poprzez mechanizm przełączania banków (ang. bankswitching). Wymusiło to zastosowanie w kartrydżach dodatkowych układów scalonych. Wiele producentów wprowadziło swoje rozwiązania (tzw. mappery), które między sobą nie były zgodne. Gry pisane były na konkretne rozwiązanie, wobec czego dana gra może współpracować tylko z mapperem, na który została stworzona.

    Rodzajów maperów jest kilkadziesiąt, na szczęście najpopularniejszych jest tylko kilka, które pokrywają ok 80-90% wszystkich wydanych tytułów gier.

    Mój projekt
    Wiele maniaków romhackingu tworzy tzw. devcarty, czyli wylutowywuje z oryginalnej PCB z grą układy pamięci, na ich miejsce wkłądając podstawki, w które nastepnie można włożyć układy pamięci. Niestety wymaga to zniszczenia danej gry, a ponadto często producenci stosowali mask-romy (pamięci ROM jednokrotnego programowania) z niestandardowym pinoutem, wobec czego współpraca z ogólnodostępnymi pamięciami Flash wymagała wykonania dodatkowych krosów i przecięć ścieżek.

    Ja zająłem się stworzeniem od zera PCB do popularnego mapera UNROM, aby nie niszczyć żadnej działającej gry. Wymaga on tylko dwóch dodatkowych układów scalonych z rodziny 74 - 4 bitowego rejestru z pamięcią (74HC161) oraz bramki OR (74HC32). Gry na ten maper mają rozmiar 128 kB. Ja dysponując pamięcią 512 kB postanowiłem zastosowac przełącznik ze zworek, dzięki czemu możemy na taką pamięć nagrać 4 gry i zworkami wybrać, w którą aktualnie chcemy grać.

    Nagrywanie własnych gier do PEGASUSa Nagrywanie własnych gier do PEGASUSa

    Wyzwania
    Pierwszym wyzwaniem było wykonanie dwuwastwowej PCB. Do tej pory nie robiłem takich z braku konieczności. Niestety złącze kartrydża w konsoli jest dwustronne, co wymusiło taką konieczność. Płytka pod tym względem wyszła wzorowo - wystarczy wydrukować dwie warstwy, zgrać je między sobą pod lampą, zszyć zszywaczem, do środka wsuną laminat i zaprasować laminarką.

    Kolejny kłopot to grubość PCB. PCB ze złączem krawędziowym ma grubość 1,2mm (wynika to z szerokości złącza). Niestety laminaty są dostępne w grubościach 1 mm lub 1.5 mm. Ten drugi za bardzo rozpychałby styki, a pierwszy jest zbyt cienki i mógłby się nie utrzymać. Wybrałem jednak laminat 1 mm. Po pocynowaniu styków miedzią (dość grubą warstwą) styki mają grubość ok. 1.15mm czyli nie było kłopotu.

    Po wytrawieniu płytka miała kilka podtrawień (w miejscach, gdzie po laminowaniu poprawiłem ściezki mazakiem). Miał także na to wplyw długi czas siedzenia w kąpieli b327 (ok. 4 godzin z uwagi na dość stary roztwór). Ponadtwo już po wykonaniu płytka nie działała, co było spodowowane dwoma mini-zwarciami - jednym na poziomie lutowania, a drugim niecałkowitym wytrawieniem przerw między ścieżkami.

    Nagrywanie własnych gier do PEGASUSa Nagrywanie własnych gier do PEGASUSa Nagrywanie własnych gier do PEGASUSa

    Nagrywanie gier
    Wystarczy wyjąć z podstawki pamięć 29f040, włożyć do programatora, zaprogramować, włożyć spowrotem do kartrydża i możemy grać.
    Może to być rozwiązanie trochę uciążliwe. Niebawem stworzę urządzenie, do którego będzie się taki kartrydż wsuwało (jak do Pegasusa) i będzie można programować bez wyjmowania z pamięci. Urządzenie będzie też pozwalało zgrywac na PC istniejące gry (jest już podobny projekt - Kazzo).


    Link

    Załączniki:

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • CControls
  • #2 03 Sty 2014 19:28
    phoszek
    Poziom 15  

    phanick napisał:
    Wystarczy wyjąć z podstawki pamięć 29f040, włożyć do programatora, zaprogramować, włożyć spowrotem do kartrydża i możemy grać.


    Jakiego programatora używasz do programowania tych pamięci? Z chęcią bym taki kartridż zbudował, ale nie mam programatora :cry:.

  • #4 03 Sty 2014 19:58
    Jarolo
    Poziom 15  

    @konrad123456 rozszerzenia pochodzą z Eagle i w nim się też otwierają, dla takich projektów jestem pełen podziwu, kręci mnie 8-bit i też mam zamiar się zabrać za jakiś cart-hacking ;) Mało jest takich projektów w naszym rodzimym języku, z jakiej gry jest wyciągnięty Mapper?

  • #5 03 Sty 2014 20:34
    Mamut
    Poziom 17  

    Pegazus to NES, tu jest aktualna lista romów/mapperów: Link

  • #6 03 Sty 2014 20:37
    grala1
    Specjalista grupy V.A.G.
  • CControls
  • #7 03 Sty 2014 21:10
    phanick
    Poziom 28  

    Nic nie stoi na przeszkodzie, żeby napisać własną grę albo demo. Nagrywanie niewłasnych gier jest trochę niezgodne z prawem :]

  • #8 03 Sty 2014 21:36
    arturavs
    Poziom 39  

    phanick napisał:
    W kartrydżu mamy zwykle dwie pamięci ROM - jedną dla CPU oraz drugą dla PPU


    Nieprawda. Druga pamięć to SRAM, najczęściej spotykane były 6264. Bywały i większe.
    Była wykorzystywana jako bufor obrazu. Dlatego między innymi pierwszymi objawami niełączącego złącza krawędziowego były ciapki na ekranie mimo normalnie działającej gry.

    Szkoda że z podstawką i programatorem trzeba się bujać. Można by pomyśleć nad jakimś multiplekserem do magistrali danych i adresu oraz kontroli, i zrobić jakiś szeregowy ISP coby wgrać inny wsad bez wyciągania pamięci flash.

  • #9 03 Sty 2014 21:51
    1996arek
    Poziom 20  

    arturavs napisał:
    Szkoda że z podstawką i programatorem trzeba się bujać. Można by pomyśleć nad jakimś multiplekserem do magistrali danych i adresu oraz kontroli, i zrobić jakiś szeregowy ISP coby wgrać inny wsad bez wyciągania pamięci flash.

    Jakby Kolega przeczytał do końca to by znalazł.
    phanick napisał:
    Niebawem stworzę urządzenie, do którego będzie się taki kartrydż wsuwało (jak do Pegasusa) i będzie można programować bez wyjmowania z pamięci.

    Fajne urządzenie. Szkoda że nie miałem Pegasusa w dzieciństwie.

    Czy zrobiłeś już jakąś swoją grę?

  • #10 03 Sty 2014 21:54
    ja.czekanski
    Poziom 12  

    Ciekawy projekt, fajnie że zaprojektowałeś swoje PCB i nie zniszczyłeś sprawnych gier.
    Z tego co zauważyłem na filmie to gry są spowolnione, co sugeruje że nagrałeś gry w wersji NTSC, gdzie Pegasus jest konsolą PALową. Próbowałeś modyfikować konsolę, aby działała z częstotliwością 60Hz? (mowa o odświeżaniu pionowym oczywiście)
    Telewizory są przystosowane do przyjmowania obrazu PAL 60Hz, proste wymuszenie PALu w konsoli Playstation umożliwiało uruchamianie gier NTSC na zwykłych telewizorach.

    [edycja]
    Znalazłem schematy (dla wersji jedno oraz wielochipowej):
    http://www.forum.emunes.pl/index.php?topic=3027.0

  • #11 03 Sty 2014 21:55
    arturavs
    Poziom 39  

    1996arek napisał:
    Jakby Kolega przeczytał do końca to by znalazł.


    A czy Kolega wie co to jest ISP?

  • #12 03 Sty 2014 22:18
    phanick
    Poziom 28  

    arturavs napisał:
    Nieprawda. Druga pamięć to SRAM, najczęściej spotykane były 6264. Bywały i większe.

    W zasadzie gry można podzielić na dwa rodzaje ze względu na posiadaną pamięć dla układy grafiki - te, które w kartrydżu miały pamięć ROM oraz te, które miały pamięć RAM. Będę się jednak z kolega kłócił, bo pamięć RAM posiada właściwie tylko UNROM (czyli maper z tego projektu) oraz kilka mniejszych. Większość gier posiada jednak pamięć ROM i mechanizm przełączania banków jest wykorzystywany zarówno przez CPU jak i PPU.
    Jakiekolwiek niestykanie na stykach CHR spowoduje właśnie błędy w grafice, natomiast umożliwi uruchomienie i działanie gry.

    Większych pamięci niż 6264 [8 kB] na pewno nie było (a jeśli nawet były, to wykorzystywane było w nich tylko właśnie 8kB) bo nie miało to sensu ekonomicznego => zastosowanie pamięci RAM zamiast ROM służy właśnie niestosowaniu przełączania banków po stronie PPU - wtedy PPU sam wgrywa do owej pamięci RAM to, co chce.

    Jedyną grą, jaką znam, która posiada RAM i przełączanie banków jest Videomotion - wynika to jednak ze szczególnego typu gry - pozwala ona na rysowanie na ekranie i bez RAMu i przełączania banków nie dałoby się zrealizować takiej funkcjonalności (zbyt mało grafiki).


    1996arek napisał:
    Czy zrobiłeś już jakąś swoją grę?

    Całej gry nie robiłem, ale jeden ze wcześniejszych moich projektów to programowalny kartrydż, w którym wybór gry następywał z listy na ekranie telewizora (gry były wczytywane z karty SD)
    Musiałem w asemblerze pegasusa zakodować menu z grami.

    Link


    ja.czekanski napisał:
    Z tego co zauważyłem na filmie to gry są spowolnione, co sugeruje że nagrałeś gry w wersji NTSC, gdzie Pegasus jest konsolą PALową. Próbowałeś modyfikować konsolę, aby działała z częstotliwością 60Hz? (mowa o odświeżaniu pionowym oczywiście)

    Chyba kilka innych osób probowało dokonać takiej przeróbki, jednak bez efektu, na pewno wymiana samego kwarcu na inny nie pomoże. Natomiast da się na moim filmie zauważyć dziwny (zbyt wysoki) ton muzyki w grze. Jest to spowodowane zastosowaniem układu ua6527 zamiast układu ua6527p (czyli prawdopodobnie wersja ntsc).

  • #13 03 Sty 2014 22:31
    mgiro
    Poziom 22  

    phanick bardzo fajny projekt. W moim PEGASUSie mam uszkodzone gniazdo, do którego wkładało się dyskietki. Kiedyś szukałem, ale nie znalazłem. Można takie gniazdo dokupić?

  • #14 03 Sty 2014 22:37
    phanick
    Poziom 28  

    mgiro napisał:
    phanick bardzo fajny projekt. W moim PEGASUSie mam uszkodzone gniazdo, do którego wkładało się dyskietki. Kiedyś szukałem, ale nie znalazłem. Można takie gniazdo dokupić?

    Szukaj pod hasłem edge connector / złącze krawędziowe (60 pin).
    Na ebay-u kiedyś widziałem. Można tez wylutować gniazdo isa z uszkodzonej płyty głównej (albo kupić coś takiego) i wyciąć nadmiarowy pin Nagrywanie własnych gier do PEGASUSa.

  • #15 03 Sty 2014 22:51
    2291468
    Użytkownik usunął konto  
  • #16 03 Sty 2014 23:11
    phanick
    Poziom 28  

    Z menu się sprawa komplikuje, bo obecnie jedna z czterech gier jest wybierana poprzez jedną z czterech kombinacji na wejściach adresowych pamięci A17,A18 (00, 01, 10, 11). Dodanie menu wymagało by:

    1) Wgrania gdzieś tego menu, a to wiązałoby się z dołożeniem dodatkowej kości pamięci rom, w której wgrane byłoby owe menu (obecna kość jest wypełniona w 100%).

    2) Po wybraniu gry z menu jakiś układ musiałby zapamiętać wybraną grę i ustawić ową kombinacje na wejściach A17,A18 (najprawdopodobniej drugi rejestr 161). Ponadto należałoby dołożyć jakiś mechanizm, który stwierdzałby odwołanie do tego rejestru w taki sposób, aby żadna gra nie mogła w trakcie swojego działania mieć na to wpływu.

    Dodano po 31 [sekundy]:

    Wybór gry jest po prostu dodatkowym `featurem`, który jest niejako skutkiem ubocznym zastosowania tak dużej pamięci.

  • #17 03 Sty 2014 23:18
    satanistik
    Poziom 27  

    Jest gdzieś opis tego projektu z drugiego filmu? W sumie bardzo ciekawy projekt. Do przełączania gier można użyć jakiegoś małego up i np wyświetlacza 7 segmentowego. Można by też pokusić się o zastosowanie jakiegoś CPLD aby odtworzyć kilka sposobów przełączania pamięci.

  • #18 03 Sty 2014 23:42
    phanick
    Poziom 28  

    Nigdzie na razie tego nie opisywałem szerzej. Podstawowy błąd jaki tam zrobiłem to próba zmieszczenia wszystkich maperów `na raz` do układu (to było o parte o fpga xilinxa)

    Niebawem będę robił ulepszoną wersje tego, na fpga altery. Teraz układ będzie programowany kodem mapera tylko tej gry, która została wybrana z listy. Wspomagać go będzie cpld.

  • #19 04 Sty 2014 00:00
    satanistik
    Poziom 27  

    Widzę że Kolega naprawdę daleko zaszedł w tych pracach. Faktycznie pomysł programowania struktury kodem przypisanym do gry wdaje się najbardziej sensowny. Projekt nawet z błędami, warto by opisać aby pokazać że nie tylko za granicą ludzie takie cudeńka projektują.

  • #20 04 Sty 2014 08:25
    mgiro
    Poziom 22  

    [b]phanick [b] JOYPADy też jakoś ulepszałeś? Czy może też swoje zrobiłeś?

  • #21 04 Sty 2014 13:59
    2291468
    Użytkownik usunął konto  
  • #23 04 Sty 2014 17:20
    2291468
    Użytkownik usunął konto  
  • #24 04 Sty 2014 19:06
    satanistik
    Poziom 27  

    Patrząc po ilości układów i płytce to koszt wykonania ze 400zł. W Polsce może być to zaporą dla nie jednego maniaka. Konstrukcję kolegi jest do wykonania więc to jej wielka zaleta. Ciekawe czy nie dało by się stworzyć jednego mapera i zmodyfikować rom-y gier tak aby z niego korzystały.

    Patrząc na listę rom - maper widać że do UNROM są wsady 128kB PRG - 0kB CHR oraz 128 CHR. Czy oznacza to że wymagają one w miejsce RAM-u drugiej kości ROM czy po prostu nie korzystają z niej?

  • #25 04 Sty 2014 20:07
    2291468
    Użytkownik usunął konto  
  • #26 04 Sty 2014 23:40
    Quazzami
    Poziom 17  

    Do tej pory gram w gry na NESa, z tym, że na emulatorze, a to już nie to samo. Taka kostka to świetny pomysł, ze slotem kart pamięci to już naprawdę sprytne i wygodne rozwiązanie, a gdyby zaimplementować obsługę USB lub - idąc dalej - jakiegoś standardu bezprzewodowego? Wi-Fi albo Bluetooth? Wtedy już do życia (bądź przynajmniej do grania na NES-ie) więcej nie byłoby potrzeba :)

  • #27 05 Sty 2014 02:00
    andrzejlisek
    Poziom 28  

    phanick napisał:
    Rodzajów maperów jest kilkadziesiąt, na szczęście najpopularniejszych jest tylko kilka, które pokrywają ok 80-90% wszystkich wydanych tytułów gier.


    Czy to prawda, że te kilka najpopularniejszych mapperów to NROM, MMC1, CNROM, UNROM i MMC3?

    Kiedyś miałem konsolę Pegasus i jeszcze kilka lat temu interesował mnie temat nagrywania gier.

    Wtedy myślałem, ze najprościej wykonać kilka dev-cartów właśnie z tymi piecioma mapperami.

    Jeżeli robić od podstaw, to wtedy myślałem nad takim rozwiązaniem, w którym rolę mappera będzie pełnić kontroler pracujący z dużą prędkością (minimum 16MHz), najlepiej taki, który może uruchomić program z zewnętrznej pamięci ROM. W takim przypadku PCB miałby 4 gniazda:
    - Pamięć PRG-ROM
    - Pamięć CHR-ROM lub CHR-RAM
    - Pamięć WRAM (używana przez niektóre gry, np. Super Mario Bros 3)
    - Pamięć programu kontrolera lub podstawka do kontrolera

    W takim przypadku do uruchomienia jednej gry byłby potrzebny zaprogramowany ROM z grą i mikrokontroler z odpowiednim mapperem. Czasami jeden mapper byłby w róznych wersjach, bo w niektórych przypadkach jest mirroring H lub V w grafice i w jednych grach jest H, a w innych jest V. Ta sprawa dotyczy chyba UNROM i CNROM. Generalnie, żeby ten problem wypalił, musi być pełniony fundamentalny warunek: Czas odpowiedzi mikrokontrolera na sygnał sterujący jest krótszy niż czas oczekiwania konsoli na odpowiedź, a to zależy od szybkości mikrokontrolera i napisanego programu. W ten sposób teoretycznie mozna zaimplementować dowolny mapper, jedynym ograniczeniem jest spełnienie powyższego warunku.

  • #28 05 Sty 2014 04:23
    miszczo997
    Poziom 27  

    Ale panowie, jak widzę ten kartridż i jego skomplikowanie to w sumie zrobił by na tym drugiego nesa. Sam może nie wiele wiedzy mam, ale myślałem nad zaprzęgnięciem samej megi 2560 i zewnętrznego ramu, gdzie za pomocą switcha wybieralo by się grę, dalej atmega za pomocą bootloadera ładowała by do flasha całą grę z karty sd i dopiero później symulowała kartridż.
    // a jak by mega w taktach nie wyrobiła to można użyć cokolwiek, aby nadążało z zadawanie stanów na piny.

  • #29 05 Sty 2014 09:58
    spazz4
    Poziom 16  

    Witam uprzejmie, widzę że kilka osób znajomych się wypowiada w temacie to i ja dołożę coś od siebie, temat nagrywania romów i romhackingu wałkujemy już od lat na dedykowanym forum - zachęcam do lektury, analizowane są tam i rozpisane spore ilości konstrukcji gier NES/Famicom (Pegasus również).

    LINK Link

    Tutaj mała prezentacja czego może dokonać grupa zapaleńców właśnie z powyższego forum:


    Link


    oraz


    Link




    Zapraszam również do zapoznania się z zawartością całego forum - osoby zainteresowane znajdą tam wiele ciekawych informacji.

    kolego @phanick piszesz o Videomation i jej wykorzystaniu ramu, a co powiesz na konstrukcje gier Gauntlet, Pin-Bot czy też fenomenalnie odwzorowany High Speed właśnie dzięki zastosowanie jednocześnie rom i ram dla grafiki ?

    Widzę też że zastosowałeś opis wyprowadzeń naszego forumowego kolegi, podawaj proszę źródła ;) .

    Dla większych maniaków mogę jeszcze polecić forum NESDEV - tam dopiero cuda wyprawiają (głównie programowanie), oraz ich wiki która jest ogromną kopalnią wiedzy.

    Link

    Pomocnym przy próbie odtwarzania mapperów może być również Nes Cart Database gdzie znajdziemy szczegółowe dane każdej wpisanej tam gry ( pełny opis hardware, zdjęcia pcb i samego carta z grą, dane wydawcy), strona posiada bardzo rozbudowaną wyszukiwarkę dzięki czemu można znaleźć wszystko co potrzebne.

    Link

  • #30 05 Sty 2014 21:47
    widmot
    Poziom 13  

    Witam
    ostatnio sam chciałem pograć w gry z Pegasusa niestety dobry tego typu sprzęt kosztuje więcej niż oryginalny NES. Udało mi się nabyć wspomnianego Nesa na allegro i tu zaczęły się schody :D cenny niektórych kartridży z grami są dość wysokie a z drugiej strony na allegro jest mało takich gier idąc dalej udało mi się znaleźć dwa alternatywne sposoby jeden to projekt everdrive n8 a drugi to PowerPak niestety ich cenny jeszcze bardziej odstraszają. Swoją drogą same kartridże jak NES mają już ponad 30 lat wiec nie wiadomo ile to jeszcze pociągnie. Dla osób które nie mają takich zdolności manualnych jak phanick polecam poszukać na aliexpress kartridża 245 in 1 osobiście go nie posiadam ale jeden z polskich vlogerów go testował i chyba nic się nie powtórzyło