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 SNES (Super Nintendo) - dla laików

phanick 10 Lut 2018 19:27 5115 6
  • Nagrywanie gier na SNES (Super Nintendo) - dla laików

    W tym artykule opiszę moją próbę zmagań w temacie nagrywania gier na konsolę SNES jako osoby, która z tą konsolą nie miała wcześniej nic wspólnego. W efekcie powstał programowalny kartridż i urządzenie do nagrywania gier.

    Motywcja
    Wszystko zaczęło się od tego, że ktoś poprosił mnie o przerobienie japońskiej wersji gry Chrono Trigger na polską. Chociaż moja znajomość konsoli SNES kończy się na umiejętności jej włączenia i wyłączenia, to zadanie wydało się banalne - wymiana pamięci MASK-ROM z japońską wersją gry i wlutowanie flasha z polską wersją gry. Niestety, pamięć zastosowana w tej grze ma pojemność 32 Mbit (8bit * 4 MB) i nietypową obudowę (DIL36):

    Code:

    A20 01 36 Vcc
    A21 02 35 A22
    A17 03 34 Vcc
    A18 04 33 /OE
    A15 05 32 A19
    A12 06 31 A14
    A7 07 30 A13
    A6 08 29 A8
    A5 09 28 A9
    A4 10 27 A11
    A3 11 26 A16
    A2 12 25 A10
    A1 13 24 /CS
    A0 14 23 D7
    D0 15 22 D6
    D1 16 21 D5
    D2 17 20 D4
    Vss 18 19 D3


    A cały kartridż prezentuje się jak poniżej:
    Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików

    Na rynku brak jest niestety EPROM/Flash będących jej odpowiednikiem. Rozwiązania były w zasadzie trzy:
    * zakupić pamięć 27C322 DIL40 (16 bit * 2MB) i dodać do tego dwa multipleksery:




    Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików

    * zakupić pamięć 29F033 i wlutować ją na specjalny adapter stworzony na potrzeby kartridża:
    Nagrywanie gier na SNES (Super Nintendo) - dla laików

    * wykorzystać posiadane przeze mnie pamięci 29LV640 64 Mbit, w obudowie TSOP48 o dość odmiennych rozkładzie wyprowadzeń, które są przeznaczone pod napięcie 3.3V. Wiązało się to z koniecznością dodania 3 buforów konwertujących 74LVC245 i stabilizatora 3.3V. Kolejnym problemem była generacja sygnału aktywującego bufory ('0' gdy !CE='0' && (!WE='0' || '!OE' = '0'), co można było zrealizować za pomocą 3 bramek NAND.

    Byłem na tyle zdesperowany, że wykonałem prawie do końca projekt takiej płytki z pamięcią i buforami, który można wykonać termotransferem (bez przelotek pod scalakami!). Cała PCB jest tylko nieznacznie większa od DIP36 i wystaje w miejscach, gdzie akurat w kartridżu jest wolne miejsce:
    Nagrywanie gier na SNES (Super Nintendo) - dla laików

    Jednak tuż przed finiszem się poddałem - byłby to projekt dość jednorazowy (być może pasowałby tylko do tego jednego kartridża), a konieczność zaprogramowania takiej pamięci wymagałaby wykonanie odpowiedniej przystawki do programatora. Postanowiłem zmienić koncepcję i... wykonać od zera całą płytkę drukowaną kartridża w oparciu o posiadane pamięci 29LV640.


    Budowa kartridża
    Przed rozpoczęciem prac postanowiłem wykonać inżynierie wsteczną posiadanego kartridża w celu zrozumienia jego budowy:
    Nagrywanie gier na SNES (Super Nintendo) - dla laików

    Kartridż oprócz pamięci Flash posiada 8 kB pamięci RAM (podtrzymywanej bateryjnie), układ CIC (zabezpieczenie regionalne) oraz układ MAD-1 (sterujący pamięcią). W celu pokonania przeciwnika metodą przez rozpoznanie terenu, zacząłem analizować sygnały dostępne na złączu kartridża - jest tu pełna 24-bitowa szyna adresowa konsoli, 8-bitowa szyna danych, sygnały sterujące (rodzaj cyklu procesora: odczyt/zapis, odwołanie do pamięci RAM/ROM). Gniazdo kartridża składa się z trzech części - dużej środkowej i dwóch małych bocznych, które nie zawsze występują w kartridżu).

    Jedną z różnic w porównaniu do kartridży Pegasus jest to, że tu do pamięci podpięta jest cała szyna adresowa, natomiast układ MAD-1 aktywuje pamięć ROM/RAM w odpowiednich oknach adresowych. Podobno jest to prosty układ kombinacyjny (jeszcze go nie analizowałem). W innym posiadanym przeze mnie kartridżu (Super Mario Bros All Stars) w ogóle nie ma układu MAD-1, jest tylko dekoder 74*139).

    Wykonałem więc projekt swojego kartridża. Oprócz układu CIC dałem tez możliwość wlutowania układu PIC12F629, który może udawać układ CIC!

    Płytka wyszła nienagannie i pasuje do obudowy po istniejącym kartridżu bez zarzutu:
    Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików

    Budowa programatora
    Mając już kartridż, należało teraz zaprogramować odpowiednim wsadem występującą w nim pamięć. W tym celu zaprojektowałem i zbudowałem odpowiedni programator na USB, do którego wkładamy kartridż i jednym kliknięciem z aplikacji obsługującej programujemy kartridż. Urządzenie oparte jest o mikrokontroler Atmega8 i 4 zatrzaski 74*574, które zapamiętują adres pamięci. Początkowo obawiałem się, że taki sposób może trochę wydłużyć czas programowania (w przeciwieństwie do sytuacji, gdyby zamiast zatrzasków, zastosować mikrokontroler z większą ilością wyprowadzeń). Jednak ustawienie nowego adresu wymaga w 99% jedynie zaktualizowania odpowiednich 8 bitów, które uległy zmianie (w skrajnej sytuacji $0x00ffff -> 0x01ffff będą to oczywiście wszystkie 24 bity, ale taka sytuacja zdarza się rzadko).
    Programowanie kartridża 4 MB trwa ~ 830 sekund (~5kB/s) i ograniczeniem szybkości jest głównie programowa implementacja transferu przez USB. Oprogramowanie do obsługi po stronie PC napisałem w C#.

    Przy budowie jedynym problemem było znalezienie odpowiedniego gniazda - rozstaw pinów w gnieździe SNES to 2.50 mm, w przeciwieństwie do "standardowego" 2.54 mm jak w Pegasusach czy kartach rozszerzeń ISA. Ja skupiłem się jedynie na środkowej części gniazda - do tego celu wystarczy w zupełności zwykłe gniazdo 2.54 mm od Pegasusa z przyklejonymi ogranicznikami po obu stronach.
    Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików

    Efekt końcowy
    W efekcie udało się osiągnąć zamierzony cel i wykonać spolszczoną wersję gry:
    Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików Nagrywanie gier na SNES (Super Nintendo) - dla laików

    Plany na przyszłość
    Muszę jeszcze mocniej zgłębić temat konsoli SNES, bo chciałbym zrobić uniwersalny kartridż obsługujący 99% gier, a być może nawet uruchamianych bezpośrednio z karty micro SD.


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • #3 12 Lut 2018 08:00
    Fixxxer1
    Poziom 15  

    Krzysiu, jak zwykle chylę czoła!
    Skoro Pegasus ma już Krzysiocarta to teraz czas na SNESa, później może SMD, GameBoy itp :D

  • #4 14 Lut 2018 12:13
    m.biruta
    Poziom 16  

    Dla mnie jest to poziom nie do pojęcia. Chylę czoła!

  • #5 15 Lut 2018 14:01
    mdziewie
    Poziom 18  

    "Płytka wyszła nienagannie" - to jakby nic nie powiedzieć...
    Profesjonalizm w każdym calu!
    Gratulacje i podziw! Nie tylko zresztą ze względu na wykonanie.

    A ja niecierpliwie czekam na wersję z kartą SD! Albo chociaż programatorem USB wbudowanym w kartridż - bo w sumie po co osobna płytka?

    Sam mam takie urządzenie w planach, ale zakolejkowane gdzieśtam wśród dziesięciu równie istotnych projektów (komputer na TTL-ach, procesor na tranzystorach, uruchomienie mojego PDP-11, uruchomienie mojego drugiego PDP-11, robot sterowany Pegasusem - a czemu nie!), więc pewnie cierpliwie musi poczekać, aż osiągnę wiek emerytalney. Ech...

  • #7 20 Lut 2018 23:06
    Szymon Tarnowski
    Poziom 27  

    Dla mnie bomba, nie przypuszczałem że w takim module jest aż tyle pamięci i że jest taki problem ze znalezieniem dobrego zamiennika kości.

    Czy tylko mnie się wydaje że wg pinoutu tego oryginalnego chipu ROM, ma on 8MB pojemności? Ma 23 linie adresowe (od A0 do A22) 2^23 = 8388608 = 8MB. Czy połowa jest niewykorzystywana?

    Taka drobna sugestia, być może ją zastosowałeś nawet. Skoro budujesz dedykowany programator i program sterujący, możesz na płytce zamieniać dowolnie linie adresowe i danych w celu uproszczenia projektu ścieżek.

  Szukaj w 5mln produktów