Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.

phanick 05 Apr 2018 14:12 75384 102
Optex
  • #91
    szogowaty
    Level 2  
    W ostatnim e-mailu pisał pan że udało się panu powtórzyć błąd ,ja mam taką propozycję ,mianowicie jak już chce się pan brać na poważnie za biznes i to w kierunku który pan lubi (widać że pan lubi retro) oraz żeby pana ludzie traktowali poważnie dzięki czemu ktoś chętniej zainwestuje w pana produkt to musi pan pokazać że jest kontakt i rozwiązuje pan potencjalne problemy ,i w tym celu na poważnie proponuje panu panie Krzysztofie założyć jakieś forum zamknięte dla posiadaczy krzysiocarta w którym ludzie mogli by się wymieniać informacjami na jego temat ,czyli co nie działa ,popularne błędy ,pomysły oraz propozycję , proponowane aktualizację , Aktualny postęp prac (dopóki ostatnio tutaj nie zajrzałem to nie miałem zielonego pojęcia że już sprzedaje pan na nowej płytce) ,problem jest z panem ,wykonał pan kawał dobrej roboty jak na jednego gościa który sam się podjął wyzwania ,tutaj tylko mogę pogratulować samozaparcia ale jest straszny problem z przepływem informacji ,jak by pan ogarnął takie zamknięte forum to raz że nie musiał by pan odpowiadać po raz kolejny na to samo pytanie bo by prędzej czy później na owym forum się znalazło ,nie da się samemu dopracować czegokolwiek bez pomocy innych tym bardziej że nie robi pan panie Krzysztofie tych cartów dla siebie tylko je pan sprzedaje i to nie tanio.


    Edit :panie Modzie , ta pana propozycja z pisownią wykryła całe 3 błędy ,no dałem ciała mimo że wujek google ich nie wykrył , serio staram się pisać poprawnie gramatycznie ale jest to ciężkie jak się mieszka od wielu lat za granicą , a tak się starałem i calusieńkiego posta wcześniej sprawdziłem 2 razy.

    Edit 2: już poprawiłem te 3 byki.

    Moderated By dondu:

    Faktycznie algorytm sprawdzania pisowni nie wykrył tak oczywistego błędu jak "do puki". Błąd poprawiłem, z problem zgłoszę adminowi.

  • Optex
  • #92
    KL86
    Level 12  
    mobor wrote:
    Ronin64 wrote:
    mobor wrote:
    wgrać do niej cały romset NES'a


    A te ROM'y to z emuparadise czy Nintendo je dodaje? :)



    Próbowałeś błysnąć intelektem ale nie wyszło... A zawartość na tą kartę SD do tego Pegasusa to niby skąd? Ze sklepu Nintendo?


    Samo Nintendo kiedyś strzeliło sobie w kolano w podobnej kwestii zamieszczając "własne" gry, w jakiejś składance na konsolę nowszej generacji zamieszczając je z pirackich źródeł ... mówmy co chcemy, ale dość dwuznacznie to wygląda. [ Śmieszne jest to że łatwiej im było dorwać Romy z zewnętrznego źródła niż z własnej biblioteki ]
  • Optex
  • #93
    Dleit
    Level 9  
    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.

    Na oryginalnym Nintendo Famicom HVC - 001 + av mod działa elegancko co ciekawe oryginalna Złota Czwórka mi nie działa ,,szary obraz ,, a z Krzysio Cart śmiga bez problemu .

    Trochę można się przyczepić do wykończenia ,spasowania obudowy ale papierek ścierny + mleczko do czyszczenia i kartridż malina prawie oryginał P

    Dodano po 1 [godziny] 26 [minuty]:

    Działający rom 168 in 1 pobrałem z http://www.gry-pegasus.xaa.pl/0-9.html
  • #94
    Dleit
    Level 9  
    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.

    Na Nintendo Entertainment System , NESE-001 1985r działa dobrze trzeba dokupić jedynie adapter 60 na 72 pin oraz obudowę gry .
    W środku obudowy kartridża mieści się zarówno adapter jak i KrzysioCart .
    Po odpowiedniej modyfikacji jest nawet dostęp do karty SD .

    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.
  • #95
    Dleit
    Level 9  
    Krzysiocart Micro SD kupiłem 31 sierpnia dwie sztuki .

    Coś się stało z jednym z moich flashcart-ów wyskakuje komunikat ,,SD READ BOOTSEC FAILURE ,, Karta SD z grami jest w 100% sprawna bo kupiłem 2 sztuki i na drugim egzemplarzu karta SD odpala się prawidłowo .

    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.
  • #96
    phanick
    Level 28  
    Odpowiedziałem Panu 5 minut temu że wystarczy go przysłać, to bezpłatnie sprawdzę w czym rzecz, nie wiem w jakim celu pisze Pan do mnie w 3 różnych miejscach - forum to nie miejsce na tego typu prywatne dyskusje.
  • #97
    Dleit
    Level 9  
    Kupiłem dwie sztuki.
    Okazało się ze w jednym egzemplarzu padła kość RAM.
    Trochę paniki napisałem do Krzysia szybko dostałem odpowiedz.
    Wysłane ,naprawione co więcej chcieć ? Gorąco Polecam !!


    Mały gratis domowej roboty przejściówka 60 pin na 72 pin by na oryginalnym NES-ie grac w gry z pegazusa.
    O dziwo oryginalna Złota Piątka oraz 168 in 1 nie działają rom z neta + KrzysioCart działa wszystko .
    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom. KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom. KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.
  • #98
    phanick
    Level 28  
    Dla bardziej dociekliwych powiem, że już od dłuższego czasu nosiłem się z zamiarem wprowazenia kilku modyfikacji oprogramowania selektora (czyli części kodu odpowiedzialnej za obsługę menu i całokształtu interfejsu użytkownika) w KrzysioCarcie
    * Głównym powodem była chęć dodania utrwalenia zapisu w przypadku gier, które obsługują zapis i posiadają baterię w wydaniach kartridżowych, np. Kirby, Final Fantasy),
    * chciałem też wprowadzić kilka mniejszych zmian zgodnie z sugestiami (np. automatyczne przesuwanie kursora gdy trzymamy strzałkę czy w przypadku, gdy w folderze jest dużo plików - przyspieszyć do przechodzenia do następnych ekranach),
    * a także poprawić kilka drobnych błędów (np. w pewnych rzadkich sytuacjach po wejściu do jakiegoś katalogu, a potem cofnięciu się poziom wyżej, od pewnego momentu pozycje mogły się wyświetlać nieprawidłowo)

    Samo dodanie baterii do kartridża nie rozwiązałoby kwestii utrwalania zapisu:
    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.
    * Po pierwsze dlatego, że selektor także korzysta z tej pamięci na swoje potrzeby i dane zapisane przez grę zostałyby podmazane.
    * A nawet gdyby wyeliminować korzystanie z tej pamięci to i tak po wyborze nowej gry, zapis poprzedniej gry zostałby wymazany nowym.
    Konieczne było więc inne podejście.

    Całość prac musiałem oczywiście zacząć od przejrzenia i analizy kodu, do którego nie zaglądałem od 1-2 lat. Niestety z assemblerem tak jest, że czasami i po 2 dniach patrząc na jakiś fragment zastanawiam się nawet nie tyle, za co on odpowiada, ale czy to w ogóle ja pisałem :))

    Pierwszym krokiem było usprawnienie procesu testowania. Wierzcie lub nie, ale do tej pory cykl prac był następujący:
    Code:
    wprowadzenie poprawki do kodu -> kompilacja kodu -> wsadzenie KrzysioCarta do Kazzo -> przeprogramowanie kartridża nowym kodem -> wsadzenie KrzysioCarta do konsoli -> uruchomienie -> jeśli nie działa zgodnie z oczekiwaniem - wróć na początek


    Testowanie w emulatorze nie było możliwe, bo kartridż korzysta z karty pamięci, a także programuje wewnętrzny flash-rom. Powiedziałem jednak dość i dodałem do emulatora swoją definicję mappera, która emuluje zarówno flash-rom (wysyłanie poleceń typu programowanie/kasoweń) jak i kartę pamięci (wysyłanie wszystkich potrzebnych komend SPI). Jako "zawartość" karty można wybrać dowolny plik z obrazem dysku twardego.
    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.
    Plusem jest nie tylko szybkość testowania, ale przede wszystkim możliwośc debugowania - sprawdzenie, jakie polecenie zostało wysłane do karty, jakie do flash-romu. No i w przypadku, gdy "coś" się zapisało na karcie, ale nie do końca dziala to tak jak oczekiwałem, można podejrzeć różnicę w sektorach przed i po zapisie.

    -

    Aby zrealizowac funkcjonalnóść zapisu stanu gry, wymagło to dodania szeregu funkcjonalnośći:
    * dodanie polecenia SPI (CMD24) do zapisu sektora na kartę pamięci,
    * dodanie funkcji wyszukiwania pliku/katalogu zadanej nazwie w danym katalogu, aby wiedzieć, czy np. już istnieje plik SAVE dla jakiejś gry
    * modyfikacja istniejącej funkcji odczytu klastra z partycji FAT uwzględniając sprawdzenie, czy jesteśmy na końcu klastra - przydatne w w przypadku, gdy chcemy stworzyć nowy wpis w katalogu, a obecne wpisy wypełniają już cały klaster
    * dodanie funkcji znalezienie pierwszego wolnego klastra w partycji FAT
    * dodanie funkcji poszerzenia istniejącego łańcucha FAT w partycji o nowo znaleziony wolny
    * dodanie funkcji stworzenia nowego wpisu (pliku/katalogu) w danym katalogu, uwzględniając konieczność stworzenia wpisów z długą nazwą (LFN - Long File Name).
    Z tym ostatnim miałem dość spory ból głowy, bo Windows pomimo stworzenia takich wpisów, nie chciał brać pod uwagę długiej nazwy, a wyświetlał zawsze krótką nazwę (8+3). Dodatkowo test programem CHKDISK powodował znalezienie błędów. Dla niewtajemniczonych przypomnę, że zawartość każdego katalogu zapisana jest w klastrze w postaci wpisów direntry. Każdy z takich wpisów zajmuje 32 bajty i zawiera m. in takie informacje:
    * nazwa (8+11 znaków), czyli to co kiedyś DOS wyświetlał
    * początkowy klaster, gdzie zaczyna się plik/katalog
    * rozmiar pliku w bajtach
    * data utworzenia/modyfikacji/ostatniego dostępu
    * atrybuty (archiwalny, tylko do odczytu, systemowy, ukryty).
    Chcąc stworzyć coś z dłuższą nazwą, Windows dodaje sztuczne wpisy (tzw. LFN - Long File Name). Każdy z takich wpisów przechowuje informacje o 13 znakach z nazwy, więc np. tworząc plik "Ala ma kota.txt", system dla takiego pliku utworzy 3 wpisy w takiej kolejności
    Code:

    "xt*``````````  (LFN #2)
    "Ala ma kota.t" (LFN #1)
    ALAMAK~1.TXT     8+3 entry

    Dlaczego więc z tym było aż tyle problemów? Jest trochę kruczków:
    a) konieczność poprawnego wyliczenia sumy kontrolnej CRC od krótkiej nazwy i umieszczenia jej w każdym wpisie LFN
    b) Pola w ostatnim wpisie LFN po kończącym znaku 00 (oznaczonym gwiazdką) muszą być równe FF (oznaczone jako `).
    c) Jeśli nazwa ma 26 znaków to system utworzy dwa wpisy LFN (nie będzie trzeciego wpisu z samym zerem kończącym i resztą FFów)

    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.
    * konieczność wygenerowania krótkiej nazwy z długiej. Początkowo chciałem, aby nazwy te były zgodne z "dobrymi zasadami", czyli pierwsze sześć liter, tylda i numer, np. MOJPLI~1. To jednak wiązałoby się z koniecznością ponownego przeszukania katalogu w celu sprawdzenia, czy taka nazwa istnieję, a jeśli istnieje to kolejnego przeszukania czy istnieje MOJPLI~2, itd, co przypadku, gdy mamy w katalogu już dużo plików podobnych długich nazwach niepotrzebnie wydłużały czas trwania tej operacji, np:
    Code:

    1998-01-09  17:44            65 552 THELEG~1.NES The Legend of Kage.nes
    1997-07-13  03:53           131 088 THELEG~2.NES The Legends of Zelda 1.nes
    1997-04-06  13:54           245 904 THELEG~3.NES The Legends of Zelda 2.nes

    Szukając innego pomysłu przypadkowo sprawdziłem, że Windows nie trzyma się i tak tych "dobrych zasad" - np. gdy w długiej nazwie są znaki regionalne (np. "oż"), to jego DOSowa nazwa to 0C707~1 mimo, że długa nazwa i tak jest krótsza niż 8 znaków. Potem wpadł mi do głowy pomysł, że krótka nazwa wcale nie musi być w jakimkolwiek stopniu związana z nową. Wystarczy tylko zapewnić, aby była unikalna w danym folderze - a do tego świetnie się nadaje przyjęcie jako nazwę startowego numeru klastra danego pliku w systemie szesnastkowym - akurat ma 8 znaków.
    Oczywiście ktoś widząc coś takiego mógłby się mocno zdziwić lub śmiać, no ale kto w dzisiejszych czasach używa DOSa. A poza tym co za różnica, skoro i tak działa :)
    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.

    Samo przeniesienie zawartości pamięci WRAM na kartę pamięci (i w drugą stronę) też nie jest proste, bo funkcje od karty pamięci i obsługi FATu także korzystają z tej pamięci jako tymczasowej. Dlatego koniecznego było użycie jednego z nieużywanych obszarów flash-romu jako tymczasowego miejsca składowania:
    *Przy transferze WRAM->KartaPamięci program musi zawartość pamięci WRAM zaprogramować w flash-rom, a dopiero potem z flash-romu stopniowo zapisać na kartę pamięci
    *Przy KartaPamięci->WRAM program najpierw programuje flash-rom odczytanymi danymi z karty, a dopiero potem tuż przed włączeniem gry przepisuje je z flash-romu do WRAMu.

    Wreszcie, samo testowanie, czy zawartość pamięci WRAM się poprawnie przywraca także było kłopotliwe na gotowych grach, bo wymagało np. przejścia pierwszego poziomu w Kirby bo dopiero wtedy zapisywane było położenie gracza.
    Musiałem więc napisać swój ROM do testu, który wylicza CRC z danych zapisanych w WRAMie a w razie gdy użytkownik o to poprosi - generuje nową zawartość pamięci:
    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.

    Kruczki:
    * W FAT16 katalog główny nie jest zapisany w klastrze, tylko tuż po tablicach alokacji. W efekcie maksymalna ilość wpisów jest z góry ograniczona i trzeba to brać pod uwagę (sprawdzać), przy tworzeniu nowego wpisu
    * Przy okazji znalazłem przyczynę opisywanego wcześniej błędu związanego z cofaniem się do głównego katalogu: system w każdym folderze umieszcza dwa (niewidoczne dla użytkownika, chyba, że korzysta z DOSa) wpisy: . oraz .., wskazujące na folder bieżący i folder poziom wyżej.
    Z niewiadomego mi powodu w FAT32, w przypadku gdy .. wskazuje na folder główny, to jego nr klastra w tym wpisie jest równy 0, a nie 2. W efekcie kardidż, chcąc wylistować zawartość folderu poziom wyżej, odczytuje klaster wskazujący na ".." i odczytuje zawartość klastra 0, czyli śmieci. (co śmieszne - w FAT16 to działało, bo dla uproszczenia przyjąłem, że faktycznie klaster katalogu głównego ma numer 0)
    * Znalezienie pierwszego wolnego klastra - w przypadku partycji FAT16, maksymalna ilośc klastrów to 2^16 - 2 czyl 65534

    Poprawki (ulepszenia) w stosunku do poprzedniej wersji:
    * kardridż posiadana baterię, która przechowuje zawartość wewnętrznej pamięci RAM w momencie, gdy wyłączysz konsolę. Po ponownym włączeniu, zawartość pamięci jest przenoszona automatycznie na kartę micro sd (do katalogu !SAVE), a gdy kiedyś znowu wybierzesz tą samą gre, stan zapisu jest ponownie odtwarzany. Wybranie innej gdy NIE POWODUJE utraty poprzedniego stanu zapisu. Pliki z zapisanym stanem można potem odczytac na komputerze i np. dokończyć rozgrywkę na emulatorze lub w drugą stronę - rozpoczętą gre na emulatorze można dokończyć na prawdziwej konsoli.
    * dodanie obsługi mappera 30 - od teraz możliwa jest też gra w gry stworzone za pomocą NesMakera - programu ułatwiającego tworzenie gier czy inne nieoficjalne tytuły o rozmiarze 512 kB korzystające z mappera nr 2 (np. Battle Kid 2),
    * wyświetlanie napisów wcześniej było realizowane jako: 1) wyłącz generowanie obrazu, 2) wyświetl, 3) włącz generowanie obrazu, co powodowało miganie. Obecnie to: 1) czekaj na vblank 2) wyświetl.
    * Wyświetlanie nazwy przyciskó "A", "B", "SELECT" jako grafik, zamiast tekstu na ekranie głównym
    * Trzymanie przycisku strzałka w dół/góre/prawo/lewo powoduje ciągłe przewijanie
    * W momencie przejścia do następnej strony z listą plików, używana jest informacja z wcześniejszego wywołania funkcji, dzięki czemu ekran pojawia się szybciej
    * znaki Unicode o kodach > 127 (regionalne) będą wyświetlane jako myślnik zamiast coś losowego.
    * szeroka gama kolorystyczna obudów z możliwością wyboru ulubionej barwy

    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom. KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom. KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom. KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.

    A dla zagorzałych NESmaniaków - niebawem wersja przystosowana dla konsoli NES:
    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.
  • #99
    metal_kosz
    Level 2  
    Cześć, od jakiegoś czasu hobbystycznie piszę grę na pegasusa i kupiłem nowego krzysiocarta z opcją zapisu aby przetestować czy gra zadziała na prawdziwej konsoli a nie tylko na emulatorze :) Gra działa dobrze, ale zauważyłem jedną rzecz o którą chciałem z ciekawości zapytać. Mianowicie jak testowałem wcześniej grę na emulatorze to zauważyłem że wartości w WRAMie są wypełnione domyślnie samymi 0x00. Więc idąc na łatwiznę stwierdziłem, że będę sprawdzał czy są jakieś zapisane stany gry na podstawie tego czy pierwszy bajt z adresu gdzie trzymam zapis jest różny od zera. Po uruchomieniu gry na konsoli z krzysiocarta okazało się, że gra twierdzi iż są już jakieś zapisane stany gry, zdziwiony skopiowałem plik .sav żeby zobaczyć jak on wygląda. I wygląda to tak że jest zapisany bajtami od 0x60 do 0x7F powtarzającymi się 256 razy każdy.

    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.

    Nie przeszkadza mi to oczywiście, już zmieniłem kod gry, żeby działało to poprawnie :) Chciałem tylko z ciekawości zapytać z czego to wynika, że początkowe wartości w WRAMie przy pierwszym odpaleniu gry są takie nie inne :).
  • #100
    phanick
    Level 28  
    Emulator daję opcję wyboru, w jaki sposób ma być zainicjowana pamięć RAM na starcie (aczkolwiek nie pamiętam już, czy dotyczy to tylko pamięci RAM od $000-$7ff czy też $6000-$7fff.
    KrzysioCart Micro SD - rewolucja dla fanów konsoli Pegasus/Famicom.

    Wyobraźmy sobie, ze mamy kardridż, w którym nie ma żadnej pamięci pod $6000-$7fffi, a gra i tak próbuje odczytać wartość komórki spod tego adresu, np. $6005. Co zobaczy?
    Odczyt danych może być realizowany za pomocą różnych instrukcji, np.
    LDA $6005
    LDA $6000, X ;X=5
    LDX $6005
    LDA ($02), Y ;$02 = $05, $03 = $60, Y = 0
    Jednak cechą wspólną tych wszystkich rozkazów jest to, że przed cyklem odczytu spod $6005, ostatnią wartością na magistrali danych był starszy bajt adresu $6005, czyli $60. Dlaczego?

    Np. dla instrukcji "LDA $6005" kod rozkazu to "$A9 $05 $60"
    Procesor wykonując ten rozkaz wygeneruje następujące cykle odczytu:
    Code:

    Adres     Wartośc na magistrali
    xxxx      $A9 ;kod rozkazu
    xxxx + 1  $05 ;młodszy bajt adresu
    xxxx + 2  $60 ;starszy bajt adresu
    $6005     $60 ;ponieważ pamięci WRAM w kardridżu nie ma, to nic nie wysteruje szyny danych w tym cyklu,
                   czyli na szynie będzie obecna wartość taka jak w poprzednim cyklu (linie danych zachowują się jak
                   pojemności)


    Niektóre z gier, z niewiadomych powodów (błąd programistów? celowe działanie "utrudniające" coś) właśnie w ten sposób się zachowują - próbują odczytać coś z pamięci, której de facto w tym kartridżu nie ma. Tak robi np. Battle Toads - i jeśli odczytana wartość będzie inna niż oczekiwana, to gra się zawiesi (o dziwo nie od razu, tylko po pierwszym poziomie)

    Dlatego każda komórka pamięci WRAM w moim kartridżu przed uruchomieniem gry inicjowana jest wartością odpowiadającą jej starszemu bajtowi adresu, czyli np:
    $6000 -> $60
    $6001 -> $60
    ...
    $6100 -> $61
    Taki sposób inicjalizacji ma za zadanie "udawać" zjawisko "open bus", czyli naśladować zachowanie, gdyby tej pamięci nie było.


    Jeśli dbasz o spójność i poprawnośc zapisu, to koniecznie wylicz jakąś sumę kontrolną zapisanych danych i tez zapisz ją w RAMie, a potem porównaj czy faktycznie jest równa tyle, ile powina być.
  • #101
    metal_kosz
    Level 2  
    Dzięki za odpowiedź, użyję sumy kontrolnej. (powinienem był to zrobić od początku, ale lenistwo wzięło górę :) teraz mam nauczkę)

    Dzięki również za dogłębne wyjaśnienie, nie zastanawiałem się wcześniej co się dzieje jak chcemy odczytać wartość z pamięci, której nie ma. Teraz ma to sens.
    Jeżeli dobrze rozumiem, to jak bez WRAMu odczytamy wartość z adresu $6101 w taki sposób:

    LDX #$02
    LDA $60FF, X

    To do akumulatora wczytamy wartość $60, a nie $61? Więc Twoje rozwiązanie nie symuluje zjawiska "open bus" w 100%? (tak wiem, czepiam się, pewnie nie dało się tego lepiej zrobić :p)

    I jeszcze jedno pytanie, jeżeli nie mamy WRAMu, to jak to działa na przykład z CMP? Jeżeli użyjemy:

    CMP $6005

    to akumulator zostanie przyrównany do wartości 0x60 i na tej podstawie zostaną wystawione flagi?

    A co do krzysiocarta, to świetna robota w przystępnej cenie, tak trzymaj!
  • #102
    phanick
    Level 28  
    Quote:

    To do akumulatora wczytamy wartość $60, a nie $61? Więc Twoje rozwiązanie nie symuluje zjawiska "open bus" w 100%?

    Niestety tak ale tego typu rzeczy tylko emulator potrafi naśladować (oczywiście mógłbym wyłączyć pamięc RAM dla wszystkich mapperów które domyślnie z RAMu nie korzystają, ale nawet FCEUX tak nie robi).
    Zagadnienie ciekawe, bo nie dotyczy tylko RAMu, ale tez np. nieużywanych bitów w porcie joysticka - np. niektóre gry odczytując $4016 spodziewają się wartości #$40 lub #$41 (np. Paper Boy)

    Quote:

    I jeszcze jedno pytanie, jeżeli nie mamy WRAMu, to jak to działa na przykład z CMP? Jeżeli użyjemy:

    CMP $6005

    Z zewnątrz instrukcja CMP od LDA niczym się nie różni - procesor i tak musi wykonać te same cykle odczytów, aby pobrać wartość z pamięci, więć będzie się ona zachowywać tak samo.
  • #103
    Potek11
    Level 6  
    Krzysio, well done, wreszcie jakiś update do tego projektu. Przydałyby się jakieś bajeranckie naklejki , jakaś choćby witryna projektu na free servie postawiona, co by ożywić legendę , nieprawdaż?
    Piszę nie bez kozery, może znajdzie się tam u Ciebie jakiś rom update dla wersji bez bateryjek? - na bazie wolnej pamięci chip-a, w pamięci flash.

    Dla maniaków zgrywania (oczywiście z własnych, oryginalnych kartridży nes;) ) rom-ów podaję swój kod do samodzielnej kompilacji (mam skompilowany pod debian jak ktoś nie umie, udostępnię) np. w linuxie - do samodzielnej identyfikacji romów obsługiwanych przez KK.

    Po zapisaniu załącznika np. do pliku o nazwie 'kk.cpp', kompilujemy go (pod linux - w innym systemie kod wymaga zmian ukośników ścieżek dostępu):
    Code:
    g++ kk.cpp -o kkk


    zmieniamy atrybuty skompilowanego pliku na wykonywalne

    Code:
    chmod +x kkk


    kopiujemy plik kkk do naszego katalogu z romami, wchodzimy do tego katalogu (cd [katalog]) i z niego wydajemy polecenie:

    Code:
    ./kkk >lista.txt


    następnie utworzy się plik lista.txt, obrabiamy go w np. Libre Office, wczytując do Calc (Excel) plik jako .txt z podziałem na kolumny.
    W skoroszycie tworzymy arkusz z listą obsługiwanych mapperów (pierwszy temat tego wątku) i w nowej kolumnie arkusza z listą dodajemy formułę "countif", która oznacza nam obsługiwane mappery na naszej liście plików.

    Dalsza obróbka to utworzenie skryptu bash / .bat , który nam wybrane pliki skopiuje , przeniesie do wybranego folderu - skrypt da się zrobić z użyciem Libre / Office.

    Kod powstał z mojej inicjatywy i udostępniam go (bez korzyści w związku z projektem KK) na zasadach open source, jeśli chcesz go rozbudować, daj znać będzie miło. Pomogłem? zostaw ślad, thx.