23.05.2018, 20:43:34 *
Witamy, Gość. Zaloguj się lub zarejestruj.

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności: Zapraszamy do rejestracji na forum wszystkich fanów Pegasusa!
 
  Strona główna Help Szukaj Zaloguj się Rejestracja  
  Pokaż wiadomości
Strony: [1] 2 3 4 5 6 ... 16
1  Pegasus Gry / Pomocna dłoń / Odp: Złota Piątka problem z jedną grą : 11.05.2018, 15:56:21
Albo pamięć ROM w kardridżu uzkodzony (MM) albo RAM w konsoli, na dwoje babka wróżyła (ja bym sprawdził kardridż na innej konsoli).
2  Pegasus Gry / Pomocna dłoń / Odp: Złota Piątka problem z jedną grą : 11.05.2018, 00:16:42
Być może pamięć ROM z grą Micro Machines na skutek upływu lat uległa uszkodzeniu (kilka bajów zmieniło swoją wartość), stąd problemy. Trzeba by
a) odczytać i sprawdzić
b) jeśli się to potwierdzi -> wylutować i wlutować nową pamięć z poprawnym kodem gry
3  Pegasus Gry / Konsole / Odp: Kardridż do zgrania zawartości nietypowej konsoli PEGASUS : 07.05.2018, 23:02:30
Cytuj
Ja niestety jestem w stanie jedynie podziwiać, bo to wszystko dla mnie za mądre, ale chętnie potestuje gotową składankę na emulatorze
Na FCEUX powinno działać, na innych - nie testowałem
https://ufile.io/p78q0

Cytuj
Te linie adresowe są podpięte do dodatkowej pamięci RAM w kartridżu służącej do dodatkowych 2 nametable (4 - ekranowy mirroring)?
Jeśli w kardridżu jest dodatkowa pamięć która ma zastąpić wewnęrzną pamięć w konsoli, to wewnętrzną pamięc w konsoli można całkowicie wyłączyć.
Jeśli natomiast dodatkowa pamięć ma tylko rozszerzać pamięć w konsoli, to można ją włączać tylko w odpowiednich momentach.

PPU !A13 może też być czasami używane jeśli z jakichś powodów kardridż potrzebuje takiego sygnału (zamiast korzystać z PPU A13 + negatora) - raz się z tym spotkałem w SMB3 pirate bootleg:
https://forums.nesdev.com/viewtopic.php?f=9&t=16123
4  Pegasus Gry / Konsole / Kardridż do zgrania zawartości nietypowej konsoli PEGASUS : 03.05.2018, 11:20:01

W tym artykule opiszę zmagania z odczytem nietypowej składanki, wbudowanej w konsole typu Pegasus. Projekt to pomysł + stworzenie PCB + napisanie kodu w assemblerze 6502.

 

Motywacja
Niedawno w moje ręce trafiła dość oryginalna konsola (oznaczenie BOS-2800 CONSOLE TV). Jej rzadkość polega na tym, że w jej wnętrze wchodzą cztery baterie R20. I brak możliwości podpięcia dodatkowego zasilania DC. Nikt o zdrowych zmysłach nie kupowałby oczywiście takich wielkich (i drogich) baterii, aby pograć kilka godzin aż do rozładowania, więc konsolę przerobiłem na zasilanie z zewnętrznego 9V DC (z tyłu była nawet zaślepka na gniazdo).


Jednak po włączeniu urządzenia, zaciekawiło mnie zupełnie co innego - wbudowana składanka gier. Jest ona o tyle nietypowa, że wszystkie z nich to znane hity, ale w przebraniu. Przerobieniu uległa muzyka, postacie oraz krajobrazy. I tak np. zamiast wyścigów formuły 1 (F1 Race), ścigamy się statkiem kosmicznym wśród gwiazd, a strzelanie do kaczek  (Duck Hunt zostało zmienione na strzelanie do spodków. Nigdy wcześniej nie widziałem czegoś takiego, więc postanowiłem znaleźć jakiś sposób, na zgranie tej składanki na PC.



Idea wbudowywania gier w konsole to chleb powszedni w pegasusopodobnych podróbkach - zwykle we wnętrzu takiej konsoli dostępne jest drugie gniazdo (od spodu), do którego włożona jest płytka drukowana z wbudowaną składanką lub wręcz jest ona wlutowana na kablach.


Trochę mnie to dziwi, bo z ekonomicznego punktu widzenia chyba taniej byłoby po prostu dołożyć dyskietkę jako oddzielny nośnik. W omawianej konsoli składanka obecna jest jako dodatkowy układ-glut na płytce drukowanej. I jak tu zgrać ją?


Gdyby nawet popodłączać się do wszystkich mikroskopijnych ścieżek kabelkami, a następie wygenerować kolejne adresy i odczytać magistralę danych, to sygnały przez nas wystawiane kolidowałyby z tymi od procesora konsoli (drugi glut). Można byłoby się pokusić o odcięcie ścieżek od CPU, jednak byłby to zabieg wyjątkowo ryzykowny i z całą pewnością destruktywny dla konsoli. Więc może jest jakiś prostszy sposób?

Pomysł i plan
Pierwszym krokiem jest określenie, w jaki sposób konsola wykrywa obecność kardridża w gnieździe (i dezaktywuje wbudowaną składankę). Konsole, z jakimi miałem do czynienia robiły to na różne sposoby, jednak idea była podobna: wykorzystanie, że 99% kardridży posiada zwarte i do niczego nie podłączone dwa piny:
- CIRAM !CE i PPU !A13 (te służą do rozszerzania rozmiarów planszy wyświetlanej na ekranie)
- AUDIO-IN i AUDIO-OUT (możliwość dodania nowych kanałów dźwiękowych).

Po stronie konsoli jeden z pinów podłączano do masy (lub zasilania) i badano stan na drugim pinie. Oczywiście, gdyby jednak w gnieździe znalazł się kardridż, który owe piny do czegoś wykorzystuje, mogłoby dojść do zwarć i jego uszkodzenia.

W omawianej konsoli konstruktor wykorzystał sprytny fakt, że kardridż posiada dwa piny do zasilania +5V, a w każdej dystkietce, z jaką się spotkałem, są one ze sobą połączone. Wystarczy więc tylko podać zasilanie na jeden z nich (tutaj pin nr 30), natomiast drugi (pin nr 31) będzie służył jako detekcja, czy kardridż jest włożony (wtedy jest na nim +5V) czy nie.

Zwarcie podczas działania wewnętrznej składanki pinu nr 31 do +5V powoduje natychmiastowe zawieszenie (kardridż sie dezaktywuje), zatem świadczy to o tym, że przełączenia można dokonać nawet już w czasie działania konsoli.

Zgrywanie
Wymyśliłem dość oryginalny sposób na zgranie, mianowicie: stworzenie kardridża z programowalną pamięcią typu flash, który sterowałby właśnie stanem logicznym pinu 31, dzięki czemu mógłby aktywować/dezaktywować wewnętrzną pamięć w konsoli w trakcie jej działania. Schemat działania byłby następujący:



1. Tuż po włączeniu zasilania, aktywny jest zewnętrzny kardridż, który kopiuje swój kod wykonywalny do pamięci RAM (*) w konsoli i zaczyna go wykonywać:
3a. Aktywuje wewnętrzny kardridż
3b. Kopiuje porcję danych z wewnętrznego kardridża do pamięci RAM
3c. Aktywuje zewnętrzny kardridż i zaprogramuj obecną w nim pamięć flash skopiowaną porcją danych z pamięci RAM
3d. Jeśli nie skopiowano jeszcze wszystkiego, skacze do punktu 3a
Kardridż taki następnie zostanie wyjęty z konsoli i włożony do zgrywarki (Kazzo) i jego zawartość zostanie odczytana.

(*) Kopiowanie kodu wykonywalnego do pamięci RAM jest konieczne z dwóch względów:
* Zapewnia możliwość wykonywania go nawet, gdy aktywna jest wewnętrzna składanka,
* Zapewnia możliwość programowania pamięci Flash (nie da się jednocześnie wykonywać kodu z pamięci Flash i jej programować, bo cykl zaprogramowania jednego bajtu składa się z czterech cykli zapisu i nie można go przerwać operacją odczytu)


Dodatkowa funkcjonalność wymagała dołożenia jedynie jednego scalaka (7474) i kilku elementów biernych. Kilka kruczków:
* Nie można pinu 31 podłączyć bezpośrednio do wyjścia 7474, bo gdy taki kardridż umieścimy w zgrywarce (lub innej zwykłej konsoli), gdzie oba piny 30/31 są podpięte do +5V, nastąpi zwarcie
* Kardridż sam musi dezaktywować swoją pamięć (zarówno PRG jak i CHR), gdy włączy on wewnątrzną składankę w konsoli,
* Pamięć CHR w zasadzie nie jest potrzebna, ale dzięki jej obecności taki kardridż można też wykorzystać do wykonania na nim zwykłej gry.

Z technicznego punktu widzenia, kardridż taki przypomina popularny mapper UNROM (a właściwie jego odmianę - #71 Camerica):
Kod:
Odczyt:
  $8000-$bfff: przełączalny bank
  $c000-$ffff: wskazuje na ostatni bank

Zapis:
 $8000-$bfff: programowanie obszaru pamięci flash
 $c000-$ffff: E--P PPPP
              |  | ||||
              |  +-++++- ustaw numer banku dla obszaru $8000-$bfff
              +--------- włącz (1) lub wyłącz (0) wewnętrzną skladankę

Po wykonaniu, kardridż prezentuje się jak poniżej:
 


Uruchamianie - 1 podejście
Na start napisałem jakiś prosty program w 6502 aby sprawdzić, czy uda się zaprogramować pamięć Flash chociażby kilkoma bajtami. Oczywiście, nie działał. Przyczyną była obecność w konsoli, w szeregu z zasilaniem kardridża diody, która obniżała napięcie z 5 V do ~4.3 V. Po jej zwarciu kardridż (i kilka innych gier, które na tej konsoli nie chodziły) zaczął działać. Obecność diody jest dla mnie zagadką, ale prawdopodobnie została ona umieszczona, aby  poziomy logiczne generowane przez kardridż nie przekraczały 4.3V, dzięki czemu może współpracować on z układami 3.3V (być może gluty w konsoli wykonano właśnie w takiej technologii)

Uruchamianie - 2 podejście
Próbowałem odczytać obszary $8000-$bfff i $c000-$ffff, jednak tuż po włączeniu wewnętrznej składanki, ich odczyt zwracał otwartą magistralę. Dopiero dodanie odstępu ok 10 ms pomiędzy włączeniem (oraz wyłączeniem) składanki rozwiązało problem - wtedy wreszcie mogłem zobaczyć na oczy pierwsze poprawne bajty, które pochodziły już ze składanki.

Uruchamianie - 3 podejście
W wyniku analizy odczytanych obszarów $8000-$bfff i $c000-$ffff, dostałem już działające menu składanki (oczywiście bez działającej grafiki - więc albo grafika w tej składance jest w oddzielnej pamięci CHR-ROM, albo jest w pamięci PRG-ROM z programem, ale w innym banku)


Następnie mogłem sprawdzić, jakie banki próbują być włączone po starcie kardridża oraz po wybraniu każdej z gry z listy. To pozwoliło przekonać się, że przy zapisie liczy się adres zapisywanej wartości

Kod:
                                           Cykl zapisu po wybraniu
Nazwa        Oryginalna gra      Rozm M  Hex   Bin
------------------------------------------------------------------
-Menu-                              ? ?  $8000 100000000 0 000 000
Tennis       Tennis                16 V  $8048 100000000 1 001 000
Mars         Star Force            16 V  $8052 100000000 1 010 010
Sky Invader  Sky Destroyer         16 H  $80db 100000001 1 011 011
Cow Boy      Wild Gunman           16 V  $8064 100000000 1 100 100
Forest Guard Hogans Alley          16 V  $806d 100000000 1 101 101
Space 2050   Duck Hunt             16 V  $8076 100000000 1 110 110
Ufo Race     F1 Race               16 V  $807f 100000000 1 111 111
                                                               
Ufo Shoot    Duck Hunt Clay Shoot  16 V  $8076 100000000 1 110 110
                                                       | | ||| |||
                                                       | | ||| +++- PRG bank
                                                       | | +++ ---- CHR bank
                                                       | + --- ---- mode (0=32K, 1=16K)
                                                       + - --- ---- mirroring (0=V, 1=H)


Uruchamianie - 4 podejście
Kolejnym krokiem było zganie całej pamięci z kodem oraz z grafiką oraz dopisanie do emulatora (FCEUX) kodu realizującego obsługiwany sposób bankowania pamięci w kardridżu (nie widziałem żadnych gotowych numerów mapperów, które mógłbym wykorzystać):



Po tej czynności, wszystkie gry już działały. Niestety, wyświetlana grafika miała błędy::


Wyglądało na to, jakby była przesunięta o jedną linie w pionie (pierwsza linia to jakieś śmieci). Długo nie wiedziałem, o co chodzi, a po analizie odczytanych bajtów wyszło, że pierwszy poprawny bajt jest drugim, drugi trzecim, itp. Dopiero potem mnie olśniło, że przecież tak działa mechanizm odczytu, że gdy CPU chce odczytać dane z magistrali PPU, ustawiając adres przez PPUADDR, a potem odczytując dane przez PPUDATA, pierwsza odczytana wartość pochodzi z rejestru tymczasowego, dopiero kolejne są już prawidłowe. Po uwzględnieniu tego, kardridż wyświetla się już poprawnie i cel został osiągnięty:
5  Pegasus Gry / Konsole / Odp: Problem z padami do pegasusa : 02.05.2018, 00:57:50
Tak samo.
6  Pegasus Gry / Konsole / Odp: Problem z padami do pegasusa : 01.05.2018, 22:44:17
Delikatne przebicia? Chyba testujesz w trybie pomiaru diod i Ci pokazuje napięcia złącz w strukturze półprzewodnikowej pada. Odłącz kable od płytki.
7  Pegasus Gry / Konsole / Odp: Problem z padami do pegasusa : 01.05.2018, 20:54:01
Raczej pady od mt777dx mają bardzo trwałe kable, ale oczywiście zmierzyć ciągłości nie zaszkodzi.
8  Pegasus Gry / Konsole / Odp: Zestaw do naprawy padów do Pegasusa : 01.05.2018, 20:16:05
17zł + wysyłka (sama płytka z wlutowanymi elementami, bez wtyczki i kabla).
Jeśli potrzeba z wtyczką i kablem to 22zł.

Kabla który polecałem post wyżej jednak nie polecam - w egzemplarzu który dostąłem jedna z żył miała zwarcie z ekranem. Natomiast na wolumenie trafiłem niezły kabel, 9 żyłowy a bardziej elastyczny niż niejeden standardowy w padach.
9  Pegasus Gry / Konsole / Odp: Iq-502 rev2 i ciekawy problem z przyciskiem power : 21.04.2018, 10:12:52
Włóż i wyjmij kardridż z 20-30 razy, może gniazdo się w ten sposób przeczyści.
10  Pegasus Gry / Konsole / Odp: Iq-502 rev2 i ciekawy problem z przyciskiem power : 20.04.2018, 23:08:58
Czy przypadkiem wtyczki od LED i przycisku power nie są zamienione miejscami?
11  Pegasus Gry / Konsole / Odp: Iq-502 rev2 i ciekawy problem z przyciskiem power : 20.04.2018, 19:37:41
Zrób zdjęcie PCB z obu stron
12  Pegasus Gry / Konsole / Odp: Iq-502 rev3 nie wyswietla obrazu. : 17.04.2018, 23:33:54
13  Inne / Sprzedam / Odp: Wycena sprzętu/gier na pegasusa/nesa/famicoma : 10.04.2018, 22:01:27
Co to?
14  Pegasus Gry / Konsole / Odp: Problemy z działaniem niektórych składanek 168in1 i podobych. : 16.03.2018, 01:31:13
Problem ze 168 in 1 polega na tym, że ma on źle dobrane elementy układu resetu (R=4.7k, C=1n). Układ LS pobierając swoim wejściem prąd 0.5 mA powoduję nadmierny spadek napięcia, przez co nieprawidłowo są interpretowane stany logiczne.
Trzymając reset w konsoli, na wejściu /RESET układu 174 jest ok 1.2 V, a powinno być maksimum 0.8V!

W przypadku dwóch układów HC nie powinno być problemu, przy jednym LS i jednym HC problem wystepuję (przy dwóch LS jeszcze bardziej się nasila). Zmniejszając R do 1k i zwiększając C do 4.7n stała czasowa pozostaje ta sama. Nie wiem czy zastępowanie C=1n przez C=100nF to najlepszy pomysł, bo ta składanka już próbuje coś zapisać do rejestru po 38 cyklach od startu konsoli.

---

Podobne problemy występują także ze składanką złota piątka, tam jednak kłopot polega na tym, że układ resetu nie jest oparty o linię M2, lecz tylko o VCC (R=47k, C=1n). Gdy konsola ma wewnątrz zbyt mały kondensator trzymający ją w resecie, to kardridż nie wystaruje. Ponadto, przy szybkim wyłączeniu i włączeniu konsoli, C w kardridżu się nie zdąży rozładowac i także skladanka nie wystartuje. Problem rozwiązałaby dioda, na którą nawet przewidziano miejsce na PCB, ale z nieznanych powodów nie została wlutowana.

---

W przypadku migającego menu w 168 in 1, jest to spowodowane przez stosowanie koloru $0D przez tą składankę, który może sprawiać problemy niektórym telewizorom, zwłaszcza jeśli w torze wideo jest kondensator w szeregu. Niestety tutaj nie za wiele można zrobić, ewentualnie tylko zmienić TV.
15  Pegasus Gry / Konsole / Nagrywanie gier na SNES (Super Nintendo) - dla laików : 10.02.2018, 20:30:52
To wszakże forum o Pegasusie ale z racji pokrewieństwa może temat kogoś zainteresuje Mrugnięcie



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):
Kod:
               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:


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:


* zakupić pamięć 29F033 i wlutować ją na specjalny adapter stworzony na potrzeby kartridża:


* 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:


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ć koncepcje 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:


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, ktore nie zawsze występują w kartridżu).

Jedną z różnic w porównaniu do kartridzy Pegasus jest to, że tu do pamięci podpięta jest cała szyna adresowa, natomiast układ MAD-1 aktywuję 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:


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łądamy 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 pamę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  gnieździe SNES to 2.50 mm, w przeciwieństwie do "standardwoego" 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.


Efekt końcowy
W efekcie udało się osiągnąć zamierzony cel  i wykonać spolszczoną wersję gry:


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.

Strony: [1] 2 3 4 5 6 ... 16
Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines
Sitemap
pegasus