Hallo, ich möchte als Übungsprojekt sowas einen ROM Dumper aufbauen. Zur Vereinfachung nehme ich ein Spiel welches nur ein kleines ROM ohne MBC hat. Hierzu habe ich einen Arduino Mega 2560 und einen Gameslot Adapter zur Verfügung. Elektrisch sollte das kein grosses Problem sein, Anleitungen für Dumper gibt es reichlich im Netz. Leider geht aber keiner auf das Timing der Signale ein. Wann muss was anliegen? Auf den ROM Bausteinen im Spielemodul ist keine offizielle Bezeichnung vorhanden, so konnte ich nochts finden. Ich könnte mir vorstellen, das man zuerst die Datenleitungen auf Input stellen, die Adressleitungen anstellen, dann RD auf Low und die Daten am Bus einlesen. Ein erster Test ging aber schief, ich erhielt entweder Datenmüll oder 0. Auch extrem hohe delays zwischen den Phasen gaben kein stabiles Ergebnis. Um zu wissen das die Sache funktioniert habe ich die Bytes des Logos ausgelesen, da diese bei jedem ROM gleich sind und an einer definierten Stelle liegen.
Hallo, klingt erstmal richtig. Alle Leitungen des Moduls so wie in irgendeinem Beispiel beschaltet? In der Luft hängende Leitungen können nette Efekte verursachen, ich kenne die Module nicht. Timing kann eigenlich kein Problem sein, es sei denn Du programmierst in Assembler... Die Zugriffszeiten üblicher Roms lagen höchstens bei 200-300µs. PS: http://hackaday.com/2011/05/09/avr-gameboy-dumper/ Gruß aus Berlin Michael
:
Bearbeitet durch User
Olli Z. schrieb: > Leider geht aber keiner auf das Timing der Signale ein. Wann muss was > anliegen? Auf den ROM Bausteinen im Spielemodul ist keine offizielle > Bezeichnung vorhanden, so konnte ich nochts finden. Guck Dir das Timing von einem 27C256 an. Das ist die programmierbare Variante eines 32k ROM-Chips. Neben /RD (/OE) muss es noch eine zweite Leitung (/CE) geben, die auf Low gelegt wird.
Hallo! Schau doch mal bei http://reinerziegler.de/index.html vorbei. Ich hatte damals ein Lesegerät an der parallelen Schnittstelle gebaut. Die Quellen waren offen. Gruß Andreas
Michael U. schrieb: > Die Zugriffszeiten üblicher Roms lagen höchstens bei 200-300µs. Ringkernspeicher oder kein sicheres Gefühl für Zehnerpotenzen?
Hallo, Route_66 schrieb: > Michael U. schrieb: >> Die Zugriffszeiten üblicher Roms lagen höchstens bei 200-300µs. > > Ringkernspeicher oder kein sicheres Gefühl für Zehnerpotenzen? vermutlich, KRS4201? ;) ... natürlich ns... Gruß aus Berlin Michael
Warum wird wohl nix auf dem Chip drauf stehen ? Warum sollte es ein Datenblatt zum Modul geben ? Arduinos ersetzen nicht die Kenntnisse über Elektronik. Ein ROM läßt sich auch mit 2 Zählern einem Taster und 8 LED auslesen wenn man viel Langeweile hat. Er kann auch mehrere Sekunden warten und das Datum einlesen. Langsamer geht immer. :-)
:
Bearbeitet durch User
Olli Z. schrieb: > Leider geht aber keiner auf das Timing der Signale ein. Wann muss was > anliegen? Auf den ROM Bausteinen im Spielemodul ist keine offizielle > Bezeichnung vorhanden, so konnte ich nochts finden. Ich könnte mir > vorstellen, das man zuerst die Datenleitungen auf Input stellen, die > Adressleitungen anstellen, dann RD auf Low und die Daten am Bus > einlesen. Die Module sind da recht flexibel. Wenn der Gameboy Instructions von der Cartridge ließt bleibt RD oft ganze Zeit auf Low und nur die Adressdaten ändern sich. Was das Timing angeht haben eigene Messungen gezeigt, dass der Gameboy ca. 450ns nach einer Adressänderung die Daten ließt. Bei Gameboy Color Spielen im Double Speed Modus doppelt so schnell. soul e. schrieb: > Neben /RD (/OE) muss es noch eine zweite Leitung (/CE) geben, die auf > Low gelegt wird. An den Chips vielleicht irgendwas mit dem CE Pin am Pinout der Cartridge war merkwürdig. Ich glaube den CE Pin braucht man nur wenn man vom SRAM in der Cartridge etwas lesen möchte, aber auch nicht bei allen Modulen, denn einige Module haben diesen Pin gar nicht angeschlossen. Da kann ich heute Abend nochmal in den Code meines eigenen Cartridge Dumpers schauen.
:
Bearbeitet durch User
Sebastian V. schrieb: > An den Chips vielleicht aber am Pinout der Cartridge gibt es schon kein > OE Pin und einen CE Pin findet man zwar in manchen Bildern die man so > online findet aber irgendwas mit dem CE Pin war merkwürdig. /OE liegt auf Pin 21 der Cartridge, /OE auf Pin 4. Zum Lesen müssen beide low sein. Pin 6..20 ist die Adresse (A0..A14), Pin 22..29 die Daten (D0..D7)
soul e. schrieb: > /OE liegt auf Pin 21 der Cartridge, /OE auf Pin 4. Zum Lesen müssen > beide low sein. Pin 6..20 ist die Adresse (A0..A14), Pin 22..29 die > Daten (D0..D7) Mir ist auch gerade wieder aufgefallen das OE und RD ja das gleiche sind. Ich denke du hast auch einen Tippfehler und wolltest sagen Pin 21 ist CS? So kann man das zwar auch sehen weil alle Adressen <0x8000 irgendwas im ROM entsprechen. Edit: Ich sprach vorhin von dem CS der häufig als Pin 5 am Pinout der Cartridge aufgeführt wird. Dieser Pin ist wie gesagt merkwürdig da er selten angeschlossen ist und scheinbar nur beim Auslesen des SRAM benötigt wird.
:
Bearbeitet durch User
Sebastian V. schrieb: > Mir ist auch gerade wieder aufgefallen das OE und RD ja das gleiche > sind. Ich denke du hast auch einen Tippfehler und wolltest sagen Pin 21 > ist CS? Richtig, das erste /OE auf Pin 21 sollte ein /CE sein > Edit: Ich sprach vorhin von dem CS der häufig als Pin 5 am Pinout der > Cartridge aufgeführt wird. Dieser Pin ist wie gesagt merkwürdig da er > selten angeschlossen ist und scheinbar nur beim Auslesen des SRAM > benötigt wird. /RAMCS ist Pin 5 und /WR ist Pin 3. Die Module mit RAM haben aber eigentlich alle einen Memory Bank Controller an Bord, und dann wird's komplizierter.
soul e. schrieb: > Die Module mit RAM haben aber > eigentlich alle einen Memory Bank Controller an Bord, und dann wird's > komplizierter. Nur unwesentlich. Von 0x0000 bis 0x3FFF liegt eh immer ROM Bank 0. Den Rest muss man dann umschalten wenn man die komplette Cartridge lesen will. Aber wenn das Lesen erstmal klappt ist das schreiben zum ROM Bank wechsel auch schnell gemacht.
Erstmal vielen Dank fürd die rege Beteiligung! Ich habe jetzt mal ein paar Module meines Sohnes (der Arme ;-) geöffnet und angesehen. Das einfachste hat nur einen Chip (ROM) und dort sind einige Pins des Slot garnicht belegt. Dort ist nur die /RD Leitung, sowie einige Adressleitungrn und natürlich die Datenleitungen belegt Das einfache Modul habe ich dann über ein Breadbord so verschaltet, das es nur Betriebsspannung hat. Die Adressleitungen habe ich nach Binärmuster mit der Adresse 0x104 beschaltet. Die /RD Leitung mittels Pullup auf VCC und via Taster gegen GND. Die Datenleitungrn lasse ich mir über einen 74541 (non inverting buffer) auf LEDs anzeigen. Ohne gedrückte RD-Taste zeigen sich teils wild blinkende Bitmuster am Datenport. Sobald ich die RD auf low ziehe kommt ein stabiles Bitmuster, welches exakt dem erwarteten Wert dieser Speicheradresse entspricht (0xCE). Soweit alles gut. Als nächstes werde ich dann die Adressleitungen und das RD vom Arduino ansteuern lassen und das Datenwort zurücklesen. Passt das, kann ich ja das Tastverhältnis des RD solange reduzieren, bis ich nicht mehr die erwartete Antwort erhalte. Dann hätte ich meine Minimalzeit. Grundsätzlich sollte aber doch die Z80-CPU aufschluss über das Timing geben, denn an ihr sind die Module ja angepasst...
Hallo, auch wenn ich oben ein peer Zehnerpotenzen dazugeschullt hatte... Mehr als 500ns Zugriffszeit gab es da nie. Adressen ran, warten (Vorhaltezeit), /RD auf L, warten (Zugriffszeit) und lesen. Ich habe mal vor ein paar Jahren von einem DDR-Schachcomouter die Roms mit einem Mega32 ausgelesen, Leitungen an den vorhandenen Testverbinder, den Z80 mit HALT in TriState geschickt, Daten gelesen und als Hex-Dump oder BIN-File zum PC geschickt. BIN-File mit XModem, da kann man das einfach in 128Byte-Blöcken lesen und rüberschicken. Die Sourcen gibt es noch, wäre aber in Assembler/AVR-Studio. Gruß aus Berlin Michael
:
Bearbeitet durch User
Das mit dem 74HCT541 war keine gute Idee. Anscheinend zieht die Led ihren gesamten Strom durch den Buffer vom Eingang, also vom ROM :-( Hat gottseidank überlebt da ich nur eine angeschlossen hatte... Dann habe ich die Adressleitungen an die Ports A0-A15 des Mega geklemmt. Sind zwar eigentlicht für Analogeingänge, aber dem Atmega ist das wurscht, der kann die Ports auch als digitale Eingänge schalten. Die Datenleitungrn an Port A und die RD an Pin 40. Beim ersten Leseversuch via Software habe ich wieder das Problem gehabt, das nur 0x00 zurück kam. Dann aber hab ich meinen Fehler gefunden, ich habe zum lesen versehentlich "val = PORTA;" geschrieben anstelle "val = PINA;". Dann ging alles und ich konnte Title, etc. auslesen.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.