Super Nintendo Multigame

  • Wollte euch nur mal informieren, dass ich gerade dran bin ein "Multigame"-Cartridge zu bauen. Allerdings ohne schalter an den Spielen, sondern mit richtigen menü.
    Später wird dann ein Megamanx X/X2/X3 multispiel draus.


    Ich halte euch auf den laufenden.


    Warte derzeit auf meine Flash-Eproms :D. Leider ab Samstag im Urlaub, somit kanns noch etwas dauern...

  • Also, wie vielleicht schon mehrere von euch mitbekommen habt, habe ich versucht, bzw bin dabei ein Multi-Game-Rom zu erstellen.
    Da es zur Zeit nicht so funktioniert wie es soll, wollte ich nunmal ein wenig erklären, eventuell bekomm ich ja einen heißen tipp :D.


    Die Adressleitungen eines EEProms beginnen mit A0 und enden bei einem 16MBit EEPROM mit A20.
    Durch das Binärsystem wird das EEPROM angesprochen. Wobei mit 000000000000000000001 also


    A0-A19 = 0 und
    A20 = 1


    das erste Byte des EEPROMS ausgelesen wird und mit 111111111111111111111 also


    A0-A20 = 1


    das letze Byte.



    Würde man nun das EEPROM teilen, würde man um die erste hälfte auszulesen A20 auf 0 und für die andere hälfte auf 1 legen müssen. Dies wollte ich ausnutzen.


    Ich habe mir ein Menü geschrieben, da dieses Menü sehr wenig speicherplatz benötigt bleibt die 2th hälfte des EEPROMS komplett leer. Somit sollte A20 nie angesprochen werden, bzw immer 0 haben.
    Durch das manipulieren des "Menüs", also des ROMs, konnte ich per knopfdruck in die 2th hälfte des EEPROMS springen. Das sollte A20 auf 1 legen.
    Per Mikrocontroller sollte diese 1 dann erkannt werden und das wäre das Ziel. Ein Mikrocontoller soll erkennen was im Menü ausgewählt wurde und daraufhin reagieren.


    Doch per Logicanalyser konnte ich erkennen (zu spät), dass die Super Nintendo komischerweiße den Pin A20 IMMER anspricht, egal ob dort ein abzuarbeitender Inhalt liegt, oder der komplett leer ist.


    Somit muss ich an einer anderen lösung arbeiten.

    • Official Post

    Hmm,


    achso willst du das machen. Interessant und genauso wollte ich die Sache auch mal angehen.


    Das SNES prüft am Anfang ja so oder so was an den Dxx und Axx Leitungen anliegt. GND oder 5V bzw 1/0 oder high/low.


    Normalerweise kannst du aber vor dem Initialisieren probieren diese Zustände zu kontrollieren und das erreichen was dein Menü auch kann.


    Ich habe im Tut Bereich, wo du ja keinen Zugriff hast, ein Tut posten lassen was erklärt wie man ein Multicartmodul macht was sich einen 29F032 Chip in 0-2 und 2 bis 4 MB splitten lääst. Auf dem chip sind dann MMX2 und MMX3 welche durchgeschalten werden können. Im Tut mir Schalter gelöst.


    Ich habe in Anlehnung von Chillers MOd damals einen Code geschriebn der im Endeffekt das gleiche macht, aber ohne Schalter.


    Wenn man statt dem RESET Signal dem Code nun Beibringen würde aus Position X im MEnü in Position Y des Chips zu springen, wäre der Ablauf ja identisch.


    Gruß


    red

  • Stimmt, würde er das aber nur anfangs machen, wäre es viel einfacher. Er macht es aber "ständig" :D


    Ja leider habe ich keinen Zugriff auf diesen.


    Die Idee, per schalter zu lösen, oder per Reset wäre ziemlich einfach zu bewerkstelligen.


    Das Problem ist nun aber folgendes.
    Würde ich nun 2 Spiele in ein Rom packen, und würde per menü in die 2th hälfte des Roms springen, wäre das bis dahin kein problem.
    Nur man müsste alle sprungbefehle des 2th Spieles anpassen, da dieser ja z.B. auf position 8200 springen möchte, dieser Punkt aber die Position des 1th ist.


    Legt man aber z.B. A20 per schalter selbst fest, "denkt" die SNES er wäre wirklich auf 8200, aber ist in wirklichkeit auf 2081FF.
    Somit ist das einfache springen an den anfang des im Rom befindlichen spieles leider nicht so einfach.

    • Official Post

    Ja das war schon immer das Problem des zweiten- xten Games das natürlich die commands nicht mehr stimmen...


    Die andere Sache ist, wenn das SNES das mehrmals prüft, wieso gehen dann die Sachen mit meinem Code... Selbst wenn. Um den hinteren Speicherbereich zu aktivieren müsste man doch nur A20 immer wieder nur auf 5V justieren, oder?!


    Ich glaube du solltest mal zeigen was du wie weit schon geschrieben hast.


    Gruß


    red


    Update:
    Schau mal:


    http://forums.nesdev.com/viewtopic.php?f=12&t=9927&start=15


    Das Menü sieht gut aus! ;)

  • wieso gehen dann die Sachen mit meinem Code


    welche sachen machst du denn?


    Immer wieder auf 5V justieren?


    Mir geht es ja darum, das wenn man irgendwas bestimmtes beim Spielen macht, in dem Fall im menü auswählt "Spiel 1", dann soll und NUR dann an A20 = 1 anliegen.

  • Fuktioniert das nur mit nem FX chip?
    Habs nicht ganz genau gelesen, aber da sind ne menge Chips in dem Cart. So möchte ich das nicht.


    Macht er das so, das er einen 74x373 als RAM missbraucht? Verstehs nicht zu 100%


  • nicht ganz - A20 ist das höchstwertige Adressbit bei einem 2M x 8Bit EEPROM.
    sieht man einerseits daran, dass die 32Pin Maskroms nur A0-A19 haben, andererseits sieht mans auch schön im Datenblatt vom AM29F032B: http://www.spansion.com/Suppor…AM29F032B_EOL_21610d8.pdf S10ff


    Ausserdem ist das erste Byte an Adresse 0 (hex: 0x000000 binär: 0 0000 0000 0000 0000 0000) - also A0-A20=0.
    das zweite Byte sitzt an Adresse 1 (hex: 0x000001 binär: 0 0000 0000 0000 0000 0001) - Also dann eben A0=1 und A1-A20=0


    wenn du dein ROM zweiteilen willst für zwei Games ist das A20 Bit als höchstwertiges Adressbit entscheidend.
    an Adresse 1.048.576 (hex 0x100000 binär 1 0000 0000 0000 0000) kommt dann das erste Byte der "oberen hälfte" - A20 = 1 usw...


    Ich glaube du wolltest es eh richtig herum schreiben, wollte das nur korrigieren ;)



    Ich bin momentan selber am planen ein paar von meinen aus Japan mitgebrachten Games zu lokalisierten Versionen umzubauen bzw Super Mario Kart und Super Mario World Hacks Multicards zu bauen.


    Hab dafür meinen SNES2TSOP adapter direkt mit nem Stecker für Adressleitungen A20 und A21 versehen - werde mich aber wohl vorerst mit nem DIP-Switch zufrieden geben.

  • Stimmt natürlich. Beginnt bei 0x000000 und nicht 0x000001. Hab ich leider falsch aufgeschrieben :D.


    Wollte nur darauf hinaus, das die höchstwertige Adressleitung, also hier A20 für die 2th hälfte des EEPROMS zuständig ist. 8)