enoritz
24.07.2005, 10:17
Hallo Leute!
(Ich habe das Thema jetzt einfach mal hier eröffnet, da ich mich nicht entscheiden konnte ob es ins AVR-Controller oder Andere Controller - Forum passt, hat nämlich mit beiden eher weniger zu tun)
Ich habe mich in der letzten Woche sehr intensiv mit dem alten GameBoy (ja dem ganz alten) beschäftigt. Hardware, Memory Mapping, MBC's, etc.
Nun habe ich mir mit einem AVR-Controller eine Schaltung aufgebaut mit der ich in der Lage sein sollte fertige Module zu lesen bzw. eigene Module zu lesen und zu beschreiben. (Soviel sei gesagt: Das auslesen klappt! - Jedenfalls zum Teil).
Ich habe mir zum Anfang ein GB-Modul ausgesucht (Snoopy's Magic Schow) und den Aufbau etwas genauer angesehen. In dem Modul befindent sich ein Memory Bank Controller (MBC Typ 1) und ein ROM.
Also: Raussuchen, wie der MBC funktioniert und das Modul auslesen. Alles weniger das Problem - bis jetzt.
Ich Addressiere in einem Bereich von 0x0000 bis0x3FFF (Der erste 16KB-Block des ROMs) und kann die Daten auch ohne weiteres auslesen.
Hier einige Infos aus dem Header, die für mein Problem wichtig sein könnten:
1. Kartentyp: MBC1 + ROM (0x01 an Adresse 0x147)
2. ROM: 64 KB - 4 Blöcke a 16KB (0x01 an Adresse 0x148)
3. RAM: Kein RAM (0x00 an Adresse 0x149)
Das ROM kann im Addressbereich 0x0000 bis 0x7FFF ausgelesen werden. Dabei ist im Bereich von 0x0000 - 0x3FFF der 0. Block (16KB) und im Bereich 0x4000 - 0x7FFF der n. Block (16KB). Der n. Block kann ausgewählt werden indem man an die Adresse 0x2000 den Wert für den auszuwählenden Block schreibt (z.B. 0x01). Damit hätte ich jetzt Block 0 im forderen Addressbereich und Block 1 im hinteren Addressbereich.
Lese ich nur 32768Bytes aus bekomme ich im Bereich 0x000 - 0x3FFF den nullten Datenblock. Im 1. Datenblock wiederholen sich nun aber leider die Daten aus dem nullten Datenblock (0x4000 - 0x7FFF).
Ich weiß einfach nicht warum. Ich habe doch meine 15 Addressleitungen mit denen ich den Speicher erreichen kann. Ich hab sogar Leitung 15 durchgemessen (einfach mal 0x4000 Addressiert und an der Leitung +5V nachmessen können).
Hat von euch vieleicht jemand eine Ahnung wo das Problem liegen könnte? Ich habe nämlich einfach keine Ahnung wo das Problem liegen könnte. Ich hab den MBC-Chip auf der Karte initialisiert, ich habe einen 16KB-Block ausgewählt.
Wäre schön wenn jemand hier wäre, der sich mit der Thematik auskennt. Aber auch sonst wäre ich für alle Vorschläge offen.
Gruß
enoritz
(Ich habe das Thema jetzt einfach mal hier eröffnet, da ich mich nicht entscheiden konnte ob es ins AVR-Controller oder Andere Controller - Forum passt, hat nämlich mit beiden eher weniger zu tun)
Ich habe mich in der letzten Woche sehr intensiv mit dem alten GameBoy (ja dem ganz alten) beschäftigt. Hardware, Memory Mapping, MBC's, etc.
Nun habe ich mir mit einem AVR-Controller eine Schaltung aufgebaut mit der ich in der Lage sein sollte fertige Module zu lesen bzw. eigene Module zu lesen und zu beschreiben. (Soviel sei gesagt: Das auslesen klappt! - Jedenfalls zum Teil).
Ich habe mir zum Anfang ein GB-Modul ausgesucht (Snoopy's Magic Schow) und den Aufbau etwas genauer angesehen. In dem Modul befindent sich ein Memory Bank Controller (MBC Typ 1) und ein ROM.
Also: Raussuchen, wie der MBC funktioniert und das Modul auslesen. Alles weniger das Problem - bis jetzt.
Ich Addressiere in einem Bereich von 0x0000 bis0x3FFF (Der erste 16KB-Block des ROMs) und kann die Daten auch ohne weiteres auslesen.
Hier einige Infos aus dem Header, die für mein Problem wichtig sein könnten:
1. Kartentyp: MBC1 + ROM (0x01 an Adresse 0x147)
2. ROM: 64 KB - 4 Blöcke a 16KB (0x01 an Adresse 0x148)
3. RAM: Kein RAM (0x00 an Adresse 0x149)
Das ROM kann im Addressbereich 0x0000 bis 0x7FFF ausgelesen werden. Dabei ist im Bereich von 0x0000 - 0x3FFF der 0. Block (16KB) und im Bereich 0x4000 - 0x7FFF der n. Block (16KB). Der n. Block kann ausgewählt werden indem man an die Adresse 0x2000 den Wert für den auszuwählenden Block schreibt (z.B. 0x01). Damit hätte ich jetzt Block 0 im forderen Addressbereich und Block 1 im hinteren Addressbereich.
Lese ich nur 32768Bytes aus bekomme ich im Bereich 0x000 - 0x3FFF den nullten Datenblock. Im 1. Datenblock wiederholen sich nun aber leider die Daten aus dem nullten Datenblock (0x4000 - 0x7FFF).
Ich weiß einfach nicht warum. Ich habe doch meine 15 Addressleitungen mit denen ich den Speicher erreichen kann. Ich hab sogar Leitung 15 durchgemessen (einfach mal 0x4000 Addressiert und an der Leitung +5V nachmessen können).
Hat von euch vieleicht jemand eine Ahnung wo das Problem liegen könnte? Ich habe nämlich einfach keine Ahnung wo das Problem liegen könnte. Ich hab den MBC-Chip auf der Karte initialisiert, ich habe einen 16KB-Block ausgewählt.
Wäre schön wenn jemand hier wäre, der sich mit der Thematik auskennt. Aber auch sonst wäre ich für alle Vorschläge offen.
Gruß
enoritz