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

KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa

phanick 02 Wrz 2016 00:57 12972 24
  • KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa

    A było tak
    Jakiś czas temu jeden z forumowiczów poprosił mnie o naprawę kilku swoich uszkodzonych kardridży do Pegasusa. Jednym z nich była dyskietka o nieznanej zawartości, zbudowana na scalakach (na zdjęciu już po wylutowaniu jednego).
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa

    Najbardziej wzrok przyciągał dużych rozmiarów układ AX5202P - piracka wersja MMC3. Oprócz niego było jeszcze kilka układów 74XX.
    Wszystkie scalaki wylutowałem. Najpierw zgrałem zawartość ROMów (PRG ROM, CHR ROM) KrzysioProgramtorem i poddałem analizie.
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa

    Okazało się, ze na dyskietce były gry:
    Code:

        TITLE                                     | MAPPER |  PRG  |  CHR
    Teenage Mutant Ninja Turtles 3                | MMC3   | 256 K | 256 K 
    Darkwing Duck                                 | MMC3   | 128 K | 128 K 
    Transformers - More Than Meets the Eye (Hack) | CNROM  |  32 K |  32 K 
    ASO - Armored Scrum Object (J) / Alpha Mission| CNROM  |  32 K |  32 K 
    Tiger-Heli (U).nes                            | CNROM  |  32 K |  32 K 
    Karate Kid, The (U) [b1].nes                  | CNROM  |  32 K |  32 K 

    Układy 74XX były więc odpowiedzialne za przełączanie gier oraz wybór mappera. Przetestowałem je KrzysioTesterem i okazały się zupełnie sprawne.
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa

    Przy okazji wylutowania układów i zrobienia dokładnych zdjęc obu stron PCB bez scalaków, odtworzyłem schemat połączeń układów za pomocą KrzysioPCB, czyli programu do inżynierii wstecznej płytek, który niedawno popełniłem.
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa
    Teraz już dobrze widać, że obecne w kardridżu multipleksery włączają lub wyłączają sterowanie pamiecią poprzez MMC3.
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa

    Miałem zagwostkę, jak przetestować AX5202P. Pomyślałem, że może zbuduję na płytce stykowej jakiś prowizoryczny kardridż, dodam pamięć PRG + CHR z nagraną jakąś grą i sprawdzę, czy coś się uruchomi.

    Ale wtedy mnie olśniło. Może by tak zrobić devcarta do MMC3, ale takiego wypasionego - z PRG ROM + WRAM + CHR ROM + CHR RAM + bateryjka i możliwością nagrywania gier?

    Motywacja
    Mój obecny KrzysioCartMini
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa
    obsługuje jedynie takie mappery jak (w nawiasach podano jaki to procent wszystkich gier jakie powstały na NESa ~9412): NROM (24.7%), MMC1 tylko CHR-RAM (6.2%), UNROM (10%), CNROM (5.6%), ANROM (1.7%), MAPPER71 camerica (0.4%), MAPPER232 camerica quattro (0.1%), MAPPER15 (168/100-in-1).
    Suma: 48.7%.

    MMC3 to najpopularniejszy mapper, wydano na niego najwięcej gier (23.3%), z czego główną większość stanowią oczywiście tytuły wykorzystujące jedynie CHR-ROM, ale są też takie, które wymagają CHR-RAM (np. MegaMan 4/6) oraz WRAM. Jego implementacja w KrzysioCarcieMini jest niemożliwa z uwagi na potrzebną dużą ilość zasobów.

    Poszedłem na całość i zaprojektowałem elegancką PCB.
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa
    Płytki dwuwarstwowe, projektowałem w ten sposób, aby minimalizować ilość przelotek i jednocześnie nie robić ich w nogach scalaków. Założenie było takie, że jedynie RAMy będą wlutowane bez podstawek (kosztują grosze), wiec można je przylutować obustronnie. Pozostałe scalaki będą lutowane w podstawkach, więc jedynie dolną warstwą można doprowadzać do nich ścieżki. Kolejność lutowania: najpierw przelotki, potem diody/kondensatory (lutujemy obustronnie), potem RAMy (lutujemy obustronnie), potem podstawki na MMC3 i ROMy (lutujemy tylko od dołu). Cały wymiar PCB jest taki, aby pasował do popularnych obudów z zaokrąglonymi rogami (jak te od BICa ze złotą 5 i 4). Oczywiście jeśli lutujemy podstawki, to PCB do obudowy nie wejdzie (będzie za wysokie).

    Co do schematu to w zasadzie nie ma nic nadzwyczajnego - MMC3 kontroluje bankowanie PRG ROMU i CHR ROMU. Zworkami wybieramy, czy aktywny ma być CHR ROM czy CHR-RAM. Na szczególną uwagę zasługuje sposób aktywacji pamięci PRG-ROM, ale o tym za chwilę.

    Same PCB przed odwiertami wyglądały jak poniżej. Odkąd kupiłem papier kredowy 90g/m^2 to płytki wychodzą idealnie jak z fabryki:
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa

    I po odwiertach. Zgranie warstw nienaganne. No i ma się tą wprawną rękę do odwiertów ;-)
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa

    Po przylutowaniu:
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa

    Po nagraniu jakiś przykładowych ROMów (jeden z CHR-RAM, drugi z CHR-ROM), od razu gry ruszyły. Rzadko mi się zdarza, aby polutowane urządzenie zadziałało od pierwszego uruchomienia. Teraz widzę, jak ważna jest staranność wykonania PCB i staranność lutowania (brak zwarć/przetrawień/niedotrawień).

    Programowanie gier
    W zwykłych dev-cartach proces podmiany gier polega na wyjęciu pamięci, wsadzeniu do programatora, zaprogramowaniu, wsadzeniu z powrotem do dev-carta. Jest to czasochłonne, podstawki się zużywają, a jak gra ma i PRG-ROM i CHR-ROM (większość), to trzeba 2x tyle pracy. Jest to niedopuszczalne, dlatego już na etapie projektowania założyłem, aby nagrywanie odbywało się w inny sposób - za pomocą KrzysioKazzo (to taki emulator szyny komunikacyjnej NESa - potrafi symulować zapis/odczyt przez CPU/PPU danych z kardridża, głównie używany do zgrywania gier z istniejących kardridży).
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa

    Aby kardridż mógł być w ten sposób zaprogramowany, należy zadbać o to, aby pamięć potrafiła rozpoznać zarówno cykl zapisu, jak i odczytu, wystawiany przez procesor. W przypadku PPU nie ma większej trudności, gdyż ma on dwie linię - PPU_!RD i PPU_!WR, każda aktywna jedynie przy odpowiednim rodzaju cyklu. W przypadku CPU jest tylko jedna linia CPU_R/!W. Nie można wykonać nastepującego połączenia (CPU->PAMIĘĆ):
    !CPU_ROMSEL -> !CE
    GND -> !OE
    CPU_R/!W -> !WE
    gdyż jeśli !OE i !WE są naraz aktywne, pamięć ROM nie będzie tego interpretować jako żądanie zapisu (RAM tak by zrobiła).
    Na szczęście MMC3 ma dodatkowa linię ROM_!EN, służącą do podłączenia do pamięci, która jest aktywna jedynie, gdy !CPU_ROMSEL = 0 i CPU_R_/!W = 1, czyli gdy CPU coś chcę odczytać z pamięci. Linia ta służy do eliminacji konfliktów na magistrali (bus contention) w sytuacji, gdy CPU zapisuję coś pod $8000-$FFFF (są to instrukcje sterujące mapperem).

    Dlatego też idealne jest połączenie:
    CPU_ROMSEL -> !CE
    ROM_!EN -> !OE
    CPU_R/!W -> !WE
    Drobnym problemem może być fakt, że wysyłając rozkazy sterujące mapperem (zapisy pod $8000-$FFFF) pamięć ROM jest wtedy aktywna, ale jest bardzo mała szansa, że spowoduje to nadpisanie jakiejś z jej komórek, gdyż do zaprogramowania jednego bajtu potrzeba 4 cykli zapisu, w którym jako adres na przemian pojawia się sekwencja $555 i $2AA, podobnie jako dane.

    Kolejnym kłopotem do poskromienia jest fakt, że MMC3 dzieli przestrzeń $8000-$FFFF na 4 banki po 8 kb:
    $8000-$9FFF
    $A000-$BFFF
    $C000-$DFFF
    $E000-$FFFF

    Będziemy się musieli uporać z problemem zapisu całej pamięci ROM (512 kB) poprzez tak małe okienko (8 kB). Którego z okienek używać do zapisu? Sprawa jest prosta.
    $C000-$DFFF i $E000-$FFFF są na sztywno zmapowane na przedostatni i ostatni bank, wiec są bezużyteczne. Z kolei $8000-$9FFF jest bezużyteczne z innego powodu - zapisując coś pod ten adres, wpisujemy dane do rejestru sterującego mapperem (zmieniając rodzaj bankowania i nr banku), a więc podczas programowania wyższe linie adresowe by nam latały jak szalone. :)
    Jedynym rozsądnym bankiem jest $A000-$BFFF. Co prawda wykonując do niego zapis, także wysyłamy rozkazy do mappera, ale w MMC3 znaczenie tych rejestrów jest następujące:
    $A000-$BFFE, parzyste adresy - służy do zmiany mirriringu,
    $A001-$BFFF, nieparzyste adresy - służy do włączania i wyłączania zabezpieczenia WRAMu przed zapisem.
    Także z punktu programowania pamięci ROM, zmiana tych ustawień kompletnie nie przeszkadza.

    Natomiast programowanie pamięci CHR-ROM jest prostsze, bo MMC3 w ogóle olewa to, co się dzieje na szynie PPU (no może używa tego do wykrywania scanlinii). Jedyny kłopot to podział przestrzeni PPU $0000-$1FFF na 2 banki po 2kB i 4 po 1 kB. Zatem tutaj zapisujemy pamięć CHR-ROM przez jeszcze mniejsze okienko, bo 2 kilobajtowe.

    Po lekkiej modyfikacji w oprogramowaniu KrzysioKazzo, aby obsługiwało taki mechanizm zapisu, wszystko działa bez problemu. Programowanie odbywa się z szybkością ~5kB/s - ograniczeniem jest transfer po USB, zrealizowany programowo w bibliotece V-USB na Atmedze.
    Zaprogramowanie gry polega na włożeniu KrzysioKartaMMC3 do KrzysioKazzo, włączeniu programu nim zarządzającego, wybraniu ROM i odczekaniu kilkudziesięciu sekund.
    Pojemność PRG-ROM to 512 KB, CHR-ROM 256 kB. Pewnym kłopotem może być fakt, że w MMC3 tuż po włączeniu niektóre banki są mapowane na ostatni i przedostatni bank w pamięci. Wymagałoby to zapisu całej pamięci, a jeśli mamy mniejszą grę (np. 256 kB czy 128 kB) - zdublowaniu jej w pamięci 2 (lub odpowiednio 4 razy). Można to objeść, nagrywając oprócz początkowych X kilobajtów, dodatkowoa na końcu 16 kB (2 banki po 8kB) zawierające przedostatni i ostatni bank z ROMu.

    KrzysioKartMMC3 w KrzysioKazzo:
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa

    KrzysioKartMMC3 w KrzysioKonsoli:
    KrzysioKartMMC3 - programowalny kardridż (devcart) do Pegasusa (mapper MMC3) opa

    Efekt końcowy
    Kardridż działa dobrze, jedynie co zauważyłem, to w niektórych grach (które prawdopodobnie wykorzystują licznik scanlinii), scrollbar zajmuje większą część ekranu. Problem występuje jedynie gdy w konsoli jest procesor PAL. Na NTSC nie ma tego kłopotu. Jest to prawdopodobnie błąd samego układu AX5202P - mappera MMC3, gdyż inne osoby z forum forums.nesdev.com opisywały podobne kłopoty.
    Na AliExpress można kupić te układy - sprawdzę, czy nowe mają podobne objawy.

    film:

    Link
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
    O autorze
    phanick
    Poziom 28  
    Offline 
    phanick napisał 2255 postów o ocenie 2145, pomógł 50 razy. Mieszka w mieście Warszawa. Jest z nami od 2007 roku.
  • IGE-XAOIGE-XAO
  • #3
    zgierzman
    Poziom 26  
    Świetny projekt. Nie bawiłem się Pegasusem, ale robiłem proste carty do C64 i Atari. Widzę, że tutaj włożyłeś dużo pracy.

    Ja do rozpracowywania PCB używam programu graficznego pracującego na warstwach (Paint.NET) i kartki, ale specjalizowany soft to zupełnie inna liga. Gratulacje.
  • IGE-XAOIGE-XAO
  • #5
    dawiid88
    Poziom 8  
    Najbardziej intryguje soft do inżynierii wstecznej płytek. Cały projekt super, choć zgranie warstw szczególnie w górnej części widać że jednak nie takie idealne ;)
  • #7
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #10
    AoT_Hunter_PL
    Poziom 21  
    Witam również przyłączam się do pytania o programik rev eng. PCB - coś więcej na jego temat ( a wygląda mi to na plugin do Eagle)

    Pozdrawiam
  • #11
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #12
    phanick
    Poziom 28  
    Chyba komuś się delikatnie mówiąc - coś po.....myliło. Jak sam opis działu mówi:
    Code:

    DIY Konstrukcje
    Album własnych działających konstrukcji stworzonych samodzielnie, pochwal się całemu światu co stworzyłeś!


    Nigdzie nie ma wypisanego wymogu publikacji kodów źródłowych, skompilowanych wersji, schematów. Oczywiście warto opublikować jakieś potwierdzenie działania, aby dyskusja mogła się rozwijać. Ale widzę, że wszechobecna w dzisiejszych czasach moda na hejt, rzucanie stwierdzeniami typu `fake`, a do tego roszczeniowa postawa pewnej grupy użytkowników przekreśla jakiekolwiek moje chęci na publikacje opisów dalszych projektów.

    Równie dobrze mógłbym zamieszczane tutaj opisy wysłać do pierwszego lepszego czasopisma elektronicznego i zgarnąć sumkę od każdej strony A4 artykułu. A ja poświęcam czas, dziele się opisami za darmo, bo zależy mi na opinii i uwagach innych. Ale widzę, że niektórym dasz palec - wezmą całą rękę. Więc uświadomię Cię drogi Armageddon22 - uważam się za choć odrobinę inteligentnego człowieka, a inteligentny człowiek ma pewne poszanowanie dla swojego czasu i nie oddaję go za darmo. Bo jeden odda za darmo, następny mu ten pomysł i wykonanie ukradnie, sam zacznie sprzedawać i jeszcze na tym zarabiać, a autor pierwotnego rozwiązania zostaje z ręką w nocniku.

    Przeglądałem sobie też dyskusję na temat KrzysioPCB tutaj i pod udostępnionym artykułem na facebook'owym koncie elektrody i widzę, identyczne zachowanie.

    Kilka osób może się zastanawiać, dlaczego od kilkunastu lat na świecie nie pojawiają się znaczące odkrycia, tylko jakieś `gadżety` wykorzystujące dawno znane idee. To już macie odpowiedź - autor takiego rozwiązania będzie wolał zabrać swój pomysł ze sobą do grobowej deski albo sprzedać go po cichu komuś za fortunę, kto może nawet tego nie wykorzysta. Nadawanie rozgłosu nikomu nie sprzyja.

    Przykre, ale prawdziwe. Na tym kończę dyskusję.
  • #13
    diseasekowalski
    Poziom 35  
    Armageddon22 napisał:
    Publikujesz kolejny projekt i opisujesz sprzęt Krzysio coś tam ale ich nie udostępniasz. Też mogę napisać jaki to ze mnie super elektronik bo zrobiłem Paweł-programator, Paweł-PCB itd.
    PS. Zapomniałem napisać że byłem na księżycu.


    Ale jednak autor opisał pięknie i sprzęt i program.
    Bazując na tych opisach można zrobić to samo. Jednak trzeba mieć solidne podstawy teoretyczne i praktyczne. Po prostu nie jest to temat dla zielonych. Chciałbyś mieć podane wszystko na tacy a jednak trzeba ostro popracować.
  • #14
    winio42
    Poziom 18  
    diseasekowalski napisał:
    Bo jeden odda za darmo, następny mu ten pomysł i wykonanie ukradnie, sam zacznie sprzedawać i jeszcze na tym zarabiać, a autor pierwotnego rozwiązania zostaje z ręką w nocniku.


    Spoko, prawa autorskie zawsze są Twoje - nikt nie może opatentować, wykorzystać ani sprzedać Twojego pomysłu bez Twojej zgody :)
    Osobiście, do publikacji ani nie zachęcam, ani nie zniechęcam. Jedno i drugie ma wady i zalety.
    Mogę tylko spytać Cię Krzysiu, w jakim języku pisałeś?
  • #15
    CMS
    Administator HydePark
    phanick napisał:
    Bo jeden odda za darmo, następny mu ten pomysł i wykonanie ukradnie, sam zacznie sprzedawać i jeszcze na tym zarabiać,


    phanick napisał:
    Kilka osób może się zastanawiać, dlaczego od kilkunastu lat na świecie nie pojawiają się znaczące odkrycia, tylko jakieś `gadżety` wykorzystujące dawno znane idee. To już macie odpowiedź - autor takiego rozwiązania będzie wolał zabrać swój pomysł ze sobą do grobowej deski albo sprzedać go po cichu komuś za fortunę, kto może nawet tego nie wykorzysta. Nadawanie rozgłosu nikomu nie sprzyja.


    Niestety ale masz rację. Sam już się kilka razy spotkałem z takim podejściem użytkowników. Ba nawet sam osobiście zrobiłem kiedyś znajomemu jakiś "popierdułek za przysłowiowego browara", a potem się dowiedziałem, po latach, że moja zabawka ma niezłe wzięcie. Exznajomy, po tym jak mu zasugerowałem, że chyba mnie troszkę wykorzystał dla własnego zarobku, już się nigdy nie odezwał. Boli.

    phanick napisał:

    Nigdzie nie ma wypisanego wymogu publikacji kodów źródłowych, skompilowanych wersji, schematów.


    Koniec i kropka.

    Pozdrawiam.
    CMS
  • #16
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #17
    electro
    Poziom 17  
    Za taką pracę należy się zapłata, tym bardziej że niektórzy będą korzystać z tego oprogramowania typowo komercyjnie. Niestety ale u nas jest tak że wielu chciało by wszystko za darmo, ale jak juz to wreszcie mają to zaraz kombinują jak to spieniężyć. I do tego jeszcze, ta roszczeniowa postawa!

    Co w tym złego że praca kosztuje? Pracujecie za darmo? Dzięki zapłacie autor ma motywacje do rozwijania projektu, a użytkownicy cieszą się że dany produkt jest rozwijany. I wszyscy zadowoleni...
  • #18
    doman18
    Poziom 17  
    Cytat:
    Sprawa jest prosta. Albo robi się coś dla kasy albo pro bono. Określ się bo teraz to jest niejasne.

    Ani jedno ani drugie. Już wcześniej koledze wyjaśnili że ten dział ma funkcję tylko i wyłącznie pochwalenia się i udostępniania pomysłów rozwiązań. Nikt nie jest zobligowany tutaj publikować bebechów a jedynie w miarę dokładnie opisać jak coś zrobił. Takie artykuły głównie służą innym do inspiracji, podpowiadania rozwiązań albo pokazania jakie rzeczy i na jakim poziomie można wykonać na własną rękę. Dlatego naprawdę wymaganie tutaj żeby kolega po prostu wywalił na stół lata wiedzy i doświadczeń jest nie na miejscu. I tak fajnie że chciało mu się dokumentować i wyjaśniać szczegółowo wszystko w całym poście.
  • #19
    grzewoj
    Poziom 27  
    Armageddon22 napisał:
    Sprawa jest prosta. Albo robi się coś dla kasy albo pro bono. Określ się bo teraz to jest niejasne.


    Naprawdę nie wiem co chcecie od człowieka.
  • #20
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #21
    Freddy
    Poziom 43  
    Armageddon22 napisał:
    Sprawa jest prosta. Albo robi się coś dla kasy albo pro bono. Określ się bo teraz to jest niejasne
    Nie wiem o co Ci chodzi, regulamin nie wymaga publikacji kodów w dziale DIY.
    Jeśli coś Ci nie odpowiada w nim, to po prostu nie zaglądaj tam i juz.

    Wiele firm w USA nie patentuje swoich rozwiązań, lecz skrzętnie ukrywa - dlaczego, bo po opatentowaniu za kilka lat kazdy ma prawo robic to samo :)
  • #22
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #23
    homoviridis
    Poziom 2  
    Opis działu mówi sam za siebie: "...pochwal się całemu światu..." koniec kropka.

    Druga sprawa. Ciekaw jestem czy pójdziesz jeszcze krok dalej by gry kopiować na karte pamięci a karte wkładac do kartridża i w tej sposób bardziej uprościć wgrywanie gier.
  • #24
    winio42
    Poziom 18  
    Oj dajcie już spokój, to nie miejsce na kłótnie.
    Krzysio się obrazi i figa będzie a nie artykuły. Sama dokumentacja fotograficzna i opis na tym poziomie to pół dnia roboty, więc nie marudzić.
  • #25
    Użytkownik usunął konto
    Użytkownik usunął konto