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

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

phanick 30 Wrz 2015 01:22 13905 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:

    Link


    Fajne!
  • #2 01 Paź 2015 15:23
    Jarolo
    Poziom 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 01 Paź 2015 22:30
    phanick
    Poziom 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 03 Paź 2015 10:26
    bodzio667
    Poziom 18  

    Przydałby się jakiś sofcik pod pc "User frendly" , bo nie każdy jest programistą a np chciałby taki kartridż mieć.

  • #5 03 Paź 2015 12:41
    RomanWorkshop
    Poziom 9  

    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 04 Paź 2015 03:12
    phanick
    Poziom 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 04 Paź 2015 04:10
    jackfinch
    Poziom 14  

    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 16 Paź 2015 14:58
    phanick
    Poziom 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 napisał:
    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 napisał:
    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 29 Paź 2015 13:20
    mario1978
    Poziom 9  

    toto80 napisał:
    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 29 Paź 2015 13:51
    Freddy
    Poziom 43  

    mario1978 napisał:
    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 02 Sty 2016 00:37
    Atreyu Makiavel
    Poziom 34  

    Nikt nie wpadł na pomysł aby kartridż był pomostem z komputerem na którym to wybierałoby się plik do załadowania?