Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry)

phanick 30 Sep 2015 01:22 16809 11
  • Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry)
    Temat nagrywania "dyskietek" do Pegasusa wraca co jakiś czas na forum jak bumerang i cieszy się ogromnym zainteresowaniem. Postanowiłem znów przybliżyć forumowiczom kolejny mój projekt z tej serii, a jest to już drugie podejście do tego tematu. Poprzednie, zaprezentowane w poniższym wątku:
    https://www.elektroda.pl/rtvforum/topic2724225.html
    miało kilka wad:
    - obsługa jedynie mappera UNROM (co ograniczało ilość obsługiwanych gier)
    - pojemność jedynie 512 KB, co pozwalało na nagranie 4 gier
    - wybieranie gry za pomocą zworek
    - nagranie nowych gier wymaga wyjęcia kości pamięci, wsadzenia do programatora i nagrania.

    Postanowiłem więc podejść do tematu raz jeszcze. Założenia były następujące:
    - wykorzystanie układu CPLD zamiast 74XX - większa swoboda w typach obsługiwanych układów. Lubię układ CPLD Xilinx XC9572, mam tego pół szuflady, gdy chcemy współpracować z napięciami TTL to wymaga jedynie pojedynczego zasilania +5V, posiada wbrew pozorom sporo makroceli (72), obudowa łatwa w lutowaniu (PLCC32), stosunkowa duża ilośc koncówek (ok. 40).
    - większa pamięc -> wykorzystałem kupioną kiedyś za grosze 4 megabajtową kość Am29LV320D. Wadą jest jej współpraca jedynie z poziomami napięć 3.3V co wymusiło wykorzystanie konwertera 74LVC245.
    - nagrywanie gier w prostszy sposób.

    W efekcie wymyśliłem coś takiego:
    Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry) Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry)

    Realizacja nie była trudna, najbardziej bałem się o lutowanie układu pamięci Am29LV320D z uwagi na gęsty raster wyprowadzeń.
    Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry) Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry)

    Poszło jak z płatka:
    Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry) Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry)

    Programowanie układu
    Programowanie kardridża odbywa się po włożeniu go do programatora mojego autostwa - MyKazzo (komunikacja z PC po USB).
    Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry)

    Więcej szczegółów tu:
    https://www.elektroda.pl/rtvforum/topic2761660.html

    Nagranie 4 MB flasha zajmuje ok 700 sekund.



    Co do obudowy to kiedyś kupiłem z 10 sztuk jakiegoś badziewia w rodzaju 999999-in-1 po 1zł/szt, właśnie po to aby mieć obudowy do kardridzy.

    Układ CPLD w którym zapisane są mappery tuż po włączeniu zasilania umożliwia zaprogramowanie pamięci flash, a następnie `czeka na sygnał` określający, jaki mapper ma emulować (chwilowo dostepne są:
    015 - mapper kadridża 168 in 1
    071 - mapper camerica
    232 - mapper quatro camerica
    002 - mapper UNROM

    Musiałem naskrobać trochę kodu w asemblerze 6502 aby wyświetlić tuż po włączeniu menu z listą gier do wyboru (obsługa PPU, joysticka).

    Trudności
    W zasadzie trudności nie było zbyt wiele. Chronologicznie:
    - Problem z komunikacją z pamięcią Am29LV320D.
    W początkowo zaprojektowanej PCB podpiąłem nogę pamięci !OE do GND a !WE do R/!W od konsoli. Niestety pamięć nie przyjmowała rozkazów zapisu. Jak się potem okazało, gdy oba wejścia (!OE i !WE) są aktywne, pamięć nie przyjmuje rozkazów zapisu. Zmyliło mnie to, bo pamięci SRAM przy obu aktywnych wejściach pozwalają na zapis:
    Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry) Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry)
    Stąd konieczność modyfikacji PCB za pomocą kabelka.

    - Napisanie w VHDLu mappera do obsługi programowania pamięci
    Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry)

    - Napisanie w asm 6502 menu wyboru gier (po 3 latach przerwy w pisaniu pod ten procek prawie wszystko zapomniałem)
    Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry)

    Efekt końcowy
    W jednym kardridżu udało się zmieścić najbardziej popularne gry (168 in 1, złota czwórka, złota 5, kilka inych gier codemasters i kilka innych gier unrom). Pełna lista gier:
    168-in-1
    Big Nose Freaks Out
    Big Nose the Caveman
    Fantastic Adv. of Dizzy BLUE
    Micro Machines
    Ultimate Stunman
    Quattro Adventure
    Quattro Arcade
    Quattro Sports
    Fantastic Adv. of Dizzy RED
    Dizzy Adventurer
    Duck Tales 1
    Duck Tales 2
    Prince of Persia
    Rock Man 1

    Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry)

    Uwaga: Osoby zainteresowane posiadaniem takiego kardrydża mogą zgłosić się do mnie za pomocą wiadomości prywatnej.

    Na koniec mały filmik podsumowujący działanie:



    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    phanick
    Level 28  
    Offline 
    Has specialization in: energetyk najwyższych napięć
    phanick wrote 2490 posts with rating 2566, helped 57 times. Live in city Warszawa. Been with us since 2007 year.
  • #2
    Jarolo
    Level 15  
    Czekałem na kolejny Twój projekt dotyczący Famicoma ;)
    I jak zwykle dobra robota w rozpracowywaniu 6502.
    Z tego co zrozumiałem, to CPLD czeka na wybranie gry z menu, po czym zaczyna emulować mapper?
    I widzę również że MyKazoo doczekało się obsługi nagrywania gier.
  • #3
    phanick
    Level 28  
    MyKazzo w zasadzie od początku potrafiłoby nagrywać gry (pozwala on wykonać cztery podstawowe operacje:
    symulacje odczytu przez procesor CPU w konsoli dowolnego adresu w pamięci
    symulację zapisu przez procesor CPU w konsoli dowolnego adresu w pamięci dowolną wartością liczbową
    symulacje odczytu przez procesor graficzny PPU w konsoli dowolnego adresu w pamięci
    symulację zapisu przez procesor graficzny PPU w konsoli dowolnego adresu w pamięci dowolną wartością liczbową

    MyKazzo jest tylko pośrednikiem, to PC zleca (przez USB) każdą z tych operacji, dlatego nawet gdyby pojawił się nowy mapper, nie będzie potrzeba zmiany w MyKazzo a jedynie zmiany w sofcie po stronie PC.


    Kłopot polegał po prostu w tym, że o ile zapis do pamięci RAM jest operacją prostą, jednocyklową, to zapis do pamięci Flash jest trochę bardziej złożony i składa się z kilku cykli:

    Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry) Nagrywanie gier na PEGASUSa - odsłona 2 (168-in-1 + złota 5, 4 i inne gry)

    Ponadto, po ostatnim, czwartym cyklu należy wykonać mechanizm odpytywania (Data Polling) aby wiedzieć, kiedy bajt do pamięci się zapisał. Gdyby PC miał wysyłać do MyKazzo po kolei każdy z tych rozkazów trwałoby to niesamowicie długo. Dlatego w momencie gdy PC wyśle do MyKazzo specjalny rozkaz, tzw. zaprogramuj pamięć 29LV320 pod adresem X tablicą poniższych danych, MyKazzo sam macha już pinami w odpowiedni sposób i sam odpytuje pamięc, a gdy operacja zapisu wszystkich danych się zakończy i PC zapyta o gotowość do wysłania kolejnej porcji danych do zaprogramowania, MyKazzo zgłosi że jest na to gotowy.

    CPLD czeka na cykl zapisu pod odpowiedni adres ($c000-$ffff) odpowiednich danych (XX). Na podstawie bitów adresu i danych, CPLD ustawia się w trym emulacji odpowiedniego mappera oraz ustawia odpowiedni bank pamięci.
  • #4
    bodzio667
    Level 18  
    Przydałby się jakiś sofcik pod pc "User frendly" , bo nie każdy jest programistą a np chciałby taki kartridż mieć.
  • #5
    RomanWorkshop
    Level 12  
    Bardzo fajne i rozbudowane urządzenie. Mi udało się kiedyś zrobić najprostszy kartridż NROM-256 (link).
    Pamiętam, że satysfakcja z własnoręcznie zrobionego i działającego kartridża była ogromna.

    Pod tym adresem umieściłem spis najlepszych moim zdaniem gier na konsolę NES/Famicom.
  • #6
    phanick
    Level 28  
    Dziękuje Panie Romanie za mile słowa. Kiedyś przypadkiem znalazłem Pana stronę w zakamarkach internetu i poczułem rozpierającą dumę, że Polak stworzył tak rozbudowaną stronę ze szczegółami technicznymi na temat starych konsol i komputerów. Niektóre z Pana spolszczeń (np. vertical mirroring - powielanie pionowe) strasznie mi się spodobały.
  • #7
    jackfinch
    Level 17  
    Witam

    Czy jest możliwość zastosowania zamiast pamięci flash (Am29LV320D) pamięci sd card? I druga sprawa jak programujesz CPLD Xilinx XC9572?

    Pozdrawiam
  • #9
    phanick
    Level 28  
    W kardridżu wprowadziłem kilka zmian, zarówno hardware-owych jak i software-owych, tj:
    - dodanie obsługi mappera 1 (MMC1) (tylko gry z CHR-RAM i bez SRAMu) - dzięki temu można grać choćby w takie tytuły, jak MegaMan II czy Robi Hood: Prince of Thieves
    - dodanie obsługi mappera 7 (ANROM) oraz 0 (NROM). W przypadku NROM gry wymagają CHR-ROMu a nie CHR-RAMu (który to jest zainstalowany w kardridżu), dlatego tuz po wybraniu gry, procesor kopiuje zapisany w pamięci 29LV320 obraz grafiki do CHR-RAMu
    - w kardridżu zainstalowane jest 32 kB pamięci SRAM, z której tylko 8kB wykorzystywane jest jako CHR-RAM. Podpinając 2 najwyższe linie adresowe (A13, A14) tej pamięci do układu CPLD dajemy możliwość na bankowanie tej pamięci. Daję to możliwość obsługi mappera 3 (CNROM) a więc takie gry jak: City Connection, Flipull, Hello Kitty no Ohanabatake (J), Dr Mario, Track & Field. Tutaj także jak w przypadku NROM gry wymagają CHR-ROMu, więc procesor musi skopiować do CHR-RAMU całą grafikę gry przed uruchomienie.

    W sumie zostały mi tylko 3 wolne wyprowadzenia od CPLD, zastanawiałem się co jeszcze można uzyskać. Wpadł mi pomysł aby faktycznie podłączyć gniazdo do kart pamięci SD, zwłaszcza że na kardridżu mam już zasilanie 3.3V a cały układ CPLD ma poziomy napięć wyjściowych 3.3V. Teraz trzeba to tylko oprogramować, ale będzie dobrze.

    W planach jest jeszcze (następne rewizje):
    * dodanie pamięci WRAM (pod $6000-$7FFF), aby gry MMC1 które z tego korzystają także dały się uruchomić (np. BomberMan II a'ka Dyna Blaster)
    * dodanie chociaż szczątkowej obsługi mappera MMC3 (też tylko gry z CHR-RAM)

    toto80 wrote:
    mam pytanko do autora czy kopiowanie gier na kartridż jest legalne,bo chciałbym wykorzystać PEGASUSA i wrzucić w odbudowę jak w temacie https://www.elektroda.pl/rtvforum/topic3097359.html jako gadżet do sklepu,oczywiście bez opłat

    Większość gier na PEGASUSa to tzw. abandonware, czyli oprogramowanie którego nikt nie rozwija, nie sprzedaje. Wiele firm które je stworzyło już dawno nie istnieje. Oczywiście oprogramowanie nadal chronione jest prawem autorskim więc zgodnie z prawem o własności intelektualnej, nie można kopiować. Na drugim końcu natomiast niektóre z firm (np. CodeMasters) pozwala na umieszczenie na swojej stronie gier ich autorstwa za odpowiednim pozwoleniem (np. www.dizzy.pl). A pozatym jeden z popularniejszych kardridży, 168-in-1, który do dziś sprzedawany jest i którego cena osiąga krocie, zawiera 34 gry, z których zostały wycięte z ekranów tytułowych informacje o prawach autorskich, a kardridż można było legalnie nabyć w sklepie.

    Dodano po 4 [godziny] 3 [minuty]:

    jackfinch wrote:
    I druga sprawa jak programujesz CPLD Xilinx XC9572?

    Wcześniej - poprzez własnoręcznie zbudowany programator na LPT (koszt budowy - ok 5zł). Wada - wymaga LPT. Kupiłem więc Xilinx USB Cable i problem zniknął, a czas programowania skrócił się 10 razy.
  • #10
    mario1978
    Level 12  
    toto80 wrote:
    mam pytanko do autora czy kopiowanie gier na kartridż jest legalne,bo chciałbym wykorzystać PEGASUSA i wrzucić w odbudowę jak w temacie https://www.elektroda.pl/rtvforum/topic3097359.html jako gadżet do sklepu,oczywiście bez opłat

    Nie jest legalne. Jeżeli nie bedziesz pobierał opłat to może nikt nie będzie ścigał za to (Nintendo nie ma obecnie przedstawicielstwa w Polsce, zaś gry na Pegasusa są już tak stare, że nie opłacałoby się im iść z tym do sądu).
  • #11
    Freddy
    Level 43  
    mario1978 wrote:
    Nie jest legalne. Jeżeli nie bedziesz pobierał opłat to może nikt nie będzie ścigał za to
    Dokładniej, jeśli masz oryginał, to też nikt się do Ciebie o to nie przyczepi :).
  • #12
    Atreyu Makiavel
    Level 34  
    Nikt nie wpadł na pomysł aby kartridż był pomostem z komputerem na którym to wybierałoby się plik do załadowania?