Hallo, Leider habe ich nicht viel Ahnung von Elektronik, deswegen brauche ich eure Hilfe. Ich versuche zu verstehen wie die Kommunikation zwischen dem Hauptprozessor und dem Soundprozessor in alten Arcade-Automaten auf Hardwareebene funktioniert. In meinem konkreten Fall ist der Hauptprozessor ein Motorola 68000 und der Soundprozessor ein Zilog Z80. Ich habe mir den MAME (Multiple Arcade Machine Emulator) Source Code angesehen: Wenn der Hauptprozessor einen Befehl an den Soundprozessor schicken möchte dann schreibt er ein Byte an die Speicherstelle 0x1111. Der Soundprozessor kann dieses Byte auslesen in dem er die Speicherstelle 0x2222 ausliest. In der angehängten Grafik habe ich gezeichnet wie ich die Kommunikation auf Hardwarebene implementieren würde. Also mein Grundgedanke ist, dass 0x1111 und 0x2222 in Wirklichkeit dieselbe Speicherstelle sind, weil sonst würde das Ganze meiner Meinung nach nicht funktionieren. Könnte man das so implementieren wie in meiner Grafik oder ist das totaler Blödsinn? Erklärung zur Grafik: Ausgangssituation ist, dass CPU1 einen Befehl an CPU2 übermitteln möchte. Dies geschieht wie oben geschrieben über die Speicherstelle 0x1111. Also kommt die Adresse 0x1111 auf den Addressbus und das Befehlsbyte auf den Datenbus. Der Memory Controller für CPU1 erhält beides und leitet das Befehlsbyte in einen Zwischenspeicher bestehend aus 8 Flip-Flops. Das RAM der CPU1 wird also überhaupt nicht angesprochen. CPU2 kann das Befehlsbyte auslesen in dem es wie oben geschrieben die Speicherstelle 0x2222 ausliest. Also kommt die Adresse 0x2222 auf den Addressbus von CPU2. Der Memory Controller für CPU2 erhält die Adresse. Dann leitet er die 8 Bits die im Flip-Flop gespeichert sind über den Datenbus an die CPU2 weiter. Auch hier wird das RAM von CPU2 gar nicht verwendet. Was haltet ihr davon? Ich weiss es ist eine totale Anfängerfrage, aber mich würde wirklich interessieren ob ich das so bauen könnte. lg Georg
Hast du die Datenbl#tter der beiden CPUs oder wenigstens ein Bild der Platibe mit den beiden CPUs?
Danke für Dein Interesse. Das Datenblatt des Z80 gibt es hier: http://www.z80.info/zip/z80data.zip Hier das 'Schematic Diagram' und hochauflösende Fotos der Platine von einem Automaten der sowohl als Hauptprozessor als auch als Soundprozessor einen Z80 verwendet: http://www.cityofberwyn.com/schematics/PDF/BubbleBobbleSchem.pdf http://home.online.no/~tjaberg/bublbobl/bb_pcb_top.jpg http://home.online.no/~tjaberg/bublbobl/bb_pcb_bottom.jpg Dem Source Code des Emulators habe ich entnommen das CPU1 (im Schematic Diagram links unten) der Soundprozessor ist. Die beiden CPU2 (im Schematic Diagramm auf der linken Seite) sind Master- und Slave Prozessoren. Der Master-Prozessor kann mit dem Soundprozessor "kommunizieren" indem er den Befehl an die Speicheradresse 0XFA00 schreibt. Der Soundprozessor empfängt Befehle in dem er die Speicherstelle 0XB000 ausliest. Alle drei sind Z80-Prozessoren. Meine ursprüngliche Frage war ob man die Kommunikation Hauptprozessor<->Soundprozessor so realisieren könnte wie ich es in meinem ersten Post beschrieben habe. Falls jemand aus dem Schematic Diagram erahnen kann wie die Kommunikation tatsächlich funktioniert wäre ich natürlich auch für diese Information sehr dankbar. lg Georg
Kommunikation: Schematics S.4 ICs 24+25 bilden ein bidrektionales Speicherregister zwischen ML-CPU-Datenbus und SND-CPU-Datenbus. Der Kram rechts davon ('74 und '125) dürfte auch dazu gehören.
Da hast du eine interessante Geschichte ausgegraben. Im Prinzip ist es so wie du dir das vorstellst. Für das Verständnis ist es hilfreich die Bussysteme zu betrachten. Von jeder CPU (M-CPU, SUB-CPU, SND-CPU ) gehen 16 Adressleitungen und 8 Datenleitungen aus. Die beiden Pakete von Leitungen nennt man einen Bus (M-Bus, SUB-Bus, SND-Bus). Die einzelnen Busse gehen an verschiedene ICs wie z.B. RAM und ROM und Spezial-ICs (YM... die eigentlichen Soundprozessoren). Zwischen einem Bus zu einem anderen sitzen logische ICs der 74er Reihe. Die können Leitungen Multiplexen oder Treiben/Verstärken oder hochohmig Trennen oder Zwischenspeichern/Merken. Sie dienen dazu um die einzelnen Busse miteinander zu verbinden u.U. unter Zwischenschaltung eines weiteren Busses (ML-Bus zwischen M-Bus und SND-Bus). Im Groben könnte man also die Funktion der logischen ICs als eine Art Memory Controller bezeichnen, insbesondere wenn man das moderner z.B. in einem FPGA o.ä. implementiert. Einen richtigen, diskreten Memory Controller sehe ich in der Schaltung aber nicht.
Danke für eure Infos. So langsam beginne ich zu verstehen wie das System aufgebaut ist: Also wenn ich mir das Schematic-PDF auf Seite 2 anschaue dann sehe ich das 2 74LS-Logikchips zwischen CPU-Datenbus und ML-Datenbus sind (IC57, IC57) und 2 74LS-Logikchips zwischen CPU-Addressbus und dem ML-Adressbus sitzen (IC54, IC55). Wenn die CPU also an die Speicherstelle 0xFA00 schreibt um einen Befehl an die Sound-CPU zu senden werden dann genau diese Chips durch den PAL (links, unten) "chip selected" und nehmen das Signal entgegen? Beim Adressbus sind es 2 74LS-Chips weil einer die Addressleitungen 0-7 übernimmt und der andere die Leitungen 8-12. Aber wieso habe ich beim Datenbus 2 74-LS Chips? Wenn ich das Posting von prx richtig verstanden habe dann wird einer zum Senden verwendet und der andere zum Empfang, oder? Nachdem die 74LS die Signale empfangen haben legen sie sie auf den ML-Addressbus und ML-Datenbus. Weiter geht es dann auf Seite 4 im Schematic-PDF. Dort sieht man, dass zwischen dem ML-Address/Datenbus und dem SND-Address/Datenbus wieder 74LS-Chips sind. Ich frage mich woher diese Chips "wissen" das sie das Signal "entgegennehmen" sollen - werden die auch gleich durch den PAL auf Seite 2 (links, unten) "chip selected"? - der IC26 (Seite 4, oben) dürfte ja, wenn ich das Diagramm richtig interpretiere, mit dem PAL verbunden sein. Am Datenbus sitzen wieder zwei 74LS (IC24, IC25). Also wird wieder beim empfangen nur einer verwendet und der andere ist dafür da um Daten zu senden? Interessant ist das der 74LS der mit dem Addressbus verbunden ist A0 und A1 "entgegennimmt". Das wären ja dann 2 Bits, also könnte man vier verschiedene Addressen ansprechen. Bedeutet das, dass der IC24 und der IC25 nicht nur jeweils 1 Byte sondern jeweils 4 Bytes speichern können? Wenn die Sound-CPU dann den Befehl empfangen "will" indem sie auf die Speicherstelle 0xB000 zugreift, dann wird das Address-Signal entweder vom IC24 oder vom IC25 "entgegengenommen" und dieser sendet über den Datenbus das Byte an die Sound-CPU. Sehe ich das richtig, dass das System nur so deswegen so kompliziert ist weil die Kommunikation zwischen Haupt-CPU und Sound-CPU über einen bidirektionalen Bus läuft? Ich meine, wenn ich nur in eine Richtung kommunizieren möchte dann könnte ich ja den ganzen ML-Bus weglassen und die 74LS-Chips einfach "direkt" zwischen den Haupt-CPU-Bus und den Sound-CPU-Bus "setzen", oder? Was ich nicht verstehe ist, woher kann der 74LS "wissen", dass der ML-Bus gerade frei ist? Ich meine es könnten ja sowohl Haupt-CPU als auch Sound-CPU auf die "Idee kommen" etwas über den ML-Bus zur selben Zeit zu senden und dann würde es ja zur Kollision kommen. Kann man das auch im Schematic Diagram erkennen? Ich hab es versucht herauszufinden bin aber leider gescheitert (habe vorher noch nie ein Schematic Diagram gesehen) - vielleicht lauft es auch irgendwie über den PAL auf Seite 2, links, unten? Ich weiss viele Fragen, falls jemand etwas Zeit hat mir weiterzuhelfen wäre ich sehr dankbar. lg Georg
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.