Autor Wątek: [DIY] Naprawa 168-in-1  (Przeczytany 4387 razy)

krzysiobal

  • Stały bywalec PG
  • *****
  • Wiadomości: 386
  • Naprawie pegasusa każdemu!
    • Zobacz profil
[DIY] Naprawa 168-in-1
« dnia: 07.12.2016, 22:35:53 »


Ponieważ w najciekawszym dziale tego forum `Rozmowy dotyczące sprzętu` rzadko pojawiają się nowe wątki, postaram się publikować co jakiś czas ciekawe treści, aby rozruszać forum. Wszak głównie na forum powinniśmy pisać właśnie o konsolach / kardridżach w ich technicznym kontekście, zamiast przechwałek `jaka to moja kolekcja dyskietek jest wielka`. Dziś czas na opis naprawy kardridża 168-in-1.

Kardridże na układach scalonych budzą zawsze ciekawość, dla jednych - w kontekście przeróbki ich na dev-cart, dla innych (np. mnie) - z uwagi na możliwość zapoznania się z mechanizmem, w jaki działa na nich przełączanie pamięci oraz jak zostało to zrealizowane w sprzęcie (elektroników kręcą takie rzeczy!)

Ostatnio trafił w moje ręce 168-in-1, niestety niesprawny. Kardridż był w całości na układach przewlekanych (a zdarzają się konstrukcję w których pamięć CHR-RAM jest SMD)


więc wylutowałem wszystko i jako pierwszy na świecie wreszcie postanowiłem przeanalizować jego sposób działania, odtwarzając schemat.



Mamy tu PRG-ROM (8 Mbit), CHR-RAM, dwa rejestry no i archaiczny układ programowalny PAL8V16, który steruje wszystkim. Podobny układ znajdziemy też na składance Złota 5, tylko tam producent postanowił dłutem zeskrobać jego oznaczenie.


Wszystkie scalaki (oprócz PAL-a) przetestowałem - okazały się sprawne. Więc cień padł na niego. Kolejnym problemem było to, że nikt do tej pory nie wiedział, jak ten układ działa. Analizując odtworzony schemat kardridża doszedłem, które sygnały poprowadzone do PALa są jego wejściami, a które wyjściami. Mając drugi, sprawny 168-in-1, wylutowałem z niego PALa i poddałem go analizie KrzysioTesterem. Na tej podstawie odtworzyłem funkcję logiczną scalaka, którą on realizuje, tj:
* ustala mirroring,
* wyższe linie adresowe pamięci,
* blokuje zapis do CHR-RAMu w pewnych sytuacjach:

Odtworzony schemat działania układu w języku VHDL:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity pal16v8_168in1 is
port (
cpu_a1 : in std_logic;
cpu_a0 : in std_logic;
cpu_d2 : in std_logic;
cpu_d1 : in std_logic;
cpu_d0 : in std_logic;
cpu_d7 : in std_logic;
cpu_d6 : in std_logic;
cpu_a13 : in std_logic;
cpu_a14 : in std_logic;
ppu_nwe : in std_logic;
prg_a16 : out std_logic;
prg_a15 : out std_logic;
prg_a14 : out std_logic;
prg_a13 : out std_logic;
ppu_a10 : in std_logic;
ppu_a11 : in std_logic;
chr_nwe : out std_logic;
ciram_a10 : out std_logic
);
end pal16v8_168in1;

architecture Behavioral of pal16v8_168in1 is
signal mode : std_logic_vector(1 downto 0);
begin
mode <= cpu_a1 & cpu_a0;

ciram_a10 <= ppu_a10 when cpu_d6 = '0' else
             ppu_a11;
             
chr_nwe <= ppu_nwe when mode = "01" or mode = "10" else
           '1';
       
prg_a13 <= cpu_d7 when mode = "10" else
           cpu_a13;
               
prg_a14 <=    '1' when cpu_a14 = '1' and mode = "01" else
           cpu_d0 when cpu_a14 = '1' and mode = "01" else
           cpu_a14 when mode = "00" else
           cpu_d0;
           
prg_a15 <= '1' when mode = "01" and cpu_a14 = '1' else
           cpu_d1;
           
prg_a16 <= '1' when mode = "01" and cpu_a14 = '1' else
           cpu_d2;

end;

Kolejnym problemem było, jak naprawić ten kardridż. Co prawda układ PAL16V8 znalazłem w okolicznym sklepie za jakieś grosze, ale niestety nigdzie w sieci (!!!) nie ma informacji na temat programowania tych układów ani opisu konstrukcji doń programatorów. Przemysłowe programatory PALów kosztują grube pieniądze. Istnieje też nowsza rodzina układów, zgodna z nimi - GAL16V8, a programatory do nich można prosto zbudować, jednak te układy występują głównie w obudowach PLCC, więc o prostej podmianie i wlutowaniu układu musiałem zapomnieć, a zamiast tego - wymyślić inny sposób.

Postanowiłem zamiast zepsutego układu zrobić `protezę` w postaci układu programowalnego XC9572, który by realizował identyczną funkcję. Oczywiście układ XC9572 jest w obudowie PLCC, więc konieczne było stworzenie mini-PCB pod niego. Priorytetem było, aby całość po zlutowaniu nadal mieściła się w oryginalnej obudowie kardridża. Ponieważ egzemplarz XC9572, który postanowiłem przeznaczyć był trochę uszkodzony (miał upalonych kilka wyprowadzeń podczas moich wcześniejszych eksperymentów), to musiałem poprowadzić sygnały jedynie do działających nóg.

Stosując w projekcie mikrokontroler/FPGA, staram się tak wybierać wyprowadzenia, aby maksymalnie uprościć prowadzenie ścieżek.


   

Jak widać kardridż bez problemu mieści się w oryginalnej obudowie, a całość zadziałała od pierwszego uruchomienia.
« Ostatnia zmiana: 07.12.2016, 22:41:22 wysłana przez krzysiobal »

pshq

  • Aktywny użytkownik
  • ***
  • Wiadomości: 173
    • Zobacz profil
Odp: [DIY] Naprawa 168-in-1
« Odpowiedź #1 dnia: 08.12.2016, 22:23:53 »
Ogromne gratulacje! Sam nieraz próbowałem poczytać o tych wszystkich układach i zrozumieć, jak to działa. Niestety, nic z tego… Przekracza to wszystko moje umysłowe zdolności. Ale to bardzo dobrze, że jest na świecie parę osób, które to łapią i potrafią tak zakręcić, że działa jak powinno. Pewnie to Twój klon wtedy na Tajwanie zrekonstruował naszego Pegasusa… ;)
Powinieneś zacząć produkować kartridże, jak Igor Golubowski (vel krikzz) czy Aleksy Awdiuhin (vel clusterrr). Byś wiele osób ucieszył na pewno i jeszcze dorobił. Tylko musisz sobie wymyślić pseudonim z powtórzoną 4 razy literą na końcu. :)

Aha, no i zapewne wkrótce nasze forum zaczną odwiedzać zagraniczni goście (jak tylko ktoś na zagranicznych forach podlinkuje do tematu… i zdjęć) ;D

Mcin

  • Twój Moderator
  • Moderator Globalny
  • Stały bywalec PG
  • *****
  • Wiadomości: 2922
    • Zobacz profil
Odp: [DIY] Naprawa 168-in-1
« Odpowiedź #2 dnia: 08.12.2016, 23:24:40 »
Ponieważ w najciekawszym dziale tego forum `Rozmowy dotyczące sprzętu` rzadko pojawiają się nowe wątki, postaram się publikować co jakiś czas ciekawe treści, aby rozruszać forum. Wszak głównie na forum powinniśmy pisać właśnie o konsolach / kardridżach w ich technicznym kontekście, zamiast przechwałek `jaka to moja kolekcja dyskietek jest wielka`. Dziś czas na opis naprawy kardridża 168-in-1.

Obawiam się, niestety, że po prostu więcej osób potrafi zrobić zakupy na Allegro niż pogrzebać w elektronice i zrobić z tym coś sensownego ;) Mnie niestety też to przerasta. Szacun za naprawę, wiele osób psiało o niemożności wymiany tego układu, ale jak widzę mamy kolejny piękny precedens ;)

Tylko musisz sobie wymyślić pseudonim z powtórzoną 4 razy literą na końcu. :)

Od dziś Krzysioballll?

pshq

  • Aktywny użytkownik
  • ***
  • Wiadomości: 173
    • Zobacz profil
Odp: [DIY] Naprawa 168-in-1
« Odpowiedź #3 dnia: 09.12.2016, 07:49:15 »
Od dziś Krzysioballll?
:D Nie napisałem sobie tego i nie wiedziałem, jak śmiesznie wygląda…

A przy okazji zadam pytanie: 168in1 ma takie wolno wyświetlające się menu (w porównaniu do innych multicartów). Czy przyczyną tego nie jest może ten układ PAL16V8 /tzn. czy jego wymiana nie przyspieszyła wczytywania menu?/ czy to może po prostu wina programu przełączającego gry?

TomasZzz

  • Aktywny użytkownik
  • ***
  • Wiadomości: 152
    • Zobacz profil
Odp: [DIY] Naprawa 168-in-1
« Odpowiedź #4 dnia: 10.12.2016, 20:22:10 »
Ładnie - czy będziesz też złotą piątkę/czwórkę tak analizował?
Widziałem jak ktoś na YT przerabiał złote 4 i 5 z przełącznikiem (wgrywając pozostałe wersje jak Sports, Adventure...).
W Złotej4 trzeba by pewnie rozwiercić gluta i wrzucić dużą kostkę. Kwestia jak przełączać `banki` i zedytować menu gry. Możesz coś na ten temat powiedzieć?

krzysiobal

  • Stały bywalec PG
  • *****
  • Wiadomości: 386
  • Naprawie pegasusa każdemu!
    • Zobacz profil
Odp: [DIY] Naprawa 168-in-1
« Odpowiedź #5 dnia: 10.12.2016, 23:23:03 »
Złota 5:


--Golden 5 (Zlota piatka) / Famicom multicart / pal16v8 logic, (c) Krzysiobal
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity pal16v8_Golden5 is
port (
cpu_nromsel : in std_logic;
cpu_r_nw : in std_logic;
cpu_a14 : in std_logic;
reg1_d0 : in std_logic;
reg1_d1 : in std_logic;
reg1_d2 : in std_logic;
reg1_d3 : in std_logic;
nreg2is0 : in std_logic;
nreg2is1 : in std_logic;
reg2_d3 : in std_logic;

rom_nrd : out std_logic;
r1_clk : out std_logic;
r2_clk : out std_logic;
prg_a14 : out std_logic;
prg_a15 : out std_logic;
prg_a16 : out std_logic;
prg_a17 : out std_logic;
nce_master : out std_logic

);
end;

architecture Behavioral of pal16v8_Golden5 is
begin
rom_nrd  <= '0' when cpu_nromsel  = '0' and cpu_r_nw = '1' else '1';
r2_clk   <= '0' when cpu_nromsel  = '0' and cpu_r_nw = '0' and cpu_a14 = '0' and reg2_d3  = '0' else '1';
r1_clk   <= '0' when cpu_nromsel  = '0' and cpu_r_nw = '0' and cpu_a14 = '1' else '1';
prg_a14  <= reg1_d0  when cpu_a14 = '0' else '1';
prg_a15  <= reg1_d1  when cpu_a14 = '0' else '1';
prg_a16  <= reg1_d2  when cpu_a14 = '0' else '1';
prg_a17  <= reg1_d3  when cpu_a14 = '0' else '1';
nce_master <= '0' when nreg2is0 = '0' or nreg2is1 = '0' else '1';
end;

W przypadku złotej 4 to chyba sprawa jest oczywista - mapper to BF9096, więc Camerica 232 (przerobiony któryś z Quatro).

Jeśli chce się zdezaktywować gry na glucie złotej 4, wystarczy podłączyć linię !CE dochodzącą do gluta do VCC, odcinając ją od tego, do czego była połączona wcześniej.
« Ostatnia zmiana: 11.12.2016, 16:54:38 wysłana przez krzysiobal »

mizgu

  • Użytkownik
  • *
  • Wiadomości: 12
    • Zobacz profil
Odp: [DIY] Naprawa 168-in-1
« Odpowiedź #6 dnia: 18.01.2017, 22:44:41 »
krzysiobal a może byś polecił jakąś książkę o programowaniu tego typu układów ? Po polsku oczywiście i zrozumiałą. Elektronika klasyczna cyfrowa nie sprawia mi problemu bramki itd nawet atmega i c. Ale programowalne układy vhld to dla mnie hmm czarna magia, ja jak robię coś, to po prostu klasycznie na płytce logikę upycham ale wiadomo jest to upierdliwe gdy jest to bardziej rozbudowane.
« Ostatnia zmiana: 18.01.2017, 22:47:49 wysłana przez mizgu »

swenson84

  • Użytkownik
  • *
  • Wiadomości: 77
    • Zobacz profil
Odp: [DIY] Naprawa 168-in-1
« Odpowiedź #7 dnia: 25.02.2018, 16:29:36 »
Witam
Mam taki problem z 168 in 1 że wyświetlane niektóre części są powielone, którego z układów może to być wina?
-------------------------------------------------------------------------------------------------------------
Już Działa. :)
Dzięki Krzysiobal za podpowiedź. Winna była kostka RAM ta na dole po prawej zmieniona na HY6264.
« Ostatnia zmiana: 27.02.2018, 20:28:22 wysłana przez swenson84 »