Dear visitor, welcome to Forum64. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.
Quoted
Original von Nightshade
Immerhin, es gibt ja da noch den
R/W Ausgang: Bestimmt ob Daten am Datenbus geschrieben oder gelesen werden sollen.
So wie ich das sehe, spricht nichts dagegen, dass diese Speicher von 0x8000-0xBFFF nicht auch RAM sein könnten.
Quoted
Gut, nicht so sonderlich sinnvoll, weil sie ja fest beim Rechner-Neustart eingeblendet sind und nicht von der Seite des C64 wieder ausgeschaltet werden können,
Quoted
Es gibt da noch zwei andere Leitungen am Expansionsport:
I/O1: 0xDE00-0xDEFF
I/O2: 0xDF00-0xDFFF
Das hört sich schon erheblich mehr nach dem an, was ich suche. Wie genau man diese beiden Leitungen verwendet, um Register zu etablieren, das hab ich noch nicht vollkommen raus. Ist etwas kompliziert im Schaltplan. Aber das krieg ich noch raus.
Quoted
Wenn ich meinen Register im I/O-Bereich habe, kann man die Speicherbereiche, die über GAME und EXROM eingeblendet werden, einfach so umblenden. Das ist schon eher was für eine Speichererweiterung! Wenn auch sehr grob.
Ich weiß ja nicht viel über die REUs von Commodore, aber die haben ganz offensichtlich nicht so funktioniert.
Quoted
Hier musste ich etwas Phantasie entwickeln und genau nachlesen.
Zum einen wurde aus der 64 Intern nicht ersichtlich, worin genau der Unterschied zwischen dem RDY und dem AEC im MPU liegt,
Quoted
Zum anderen was ø1 von ø2 unterscheidet.

Quoted
Die Lösung fand ich anderswo.
Was ø2 angeht, kann ich jetzt sagten, dass Low bedeutet, der Bus gehört dem VIC, ein Hight gibt den Bus an den MPU.
So wie ich das jetzt sehe, ist der entscheidende Punkt bei RDY und AEC, dass ein RDY auf Low dem MPU Leseoperationen untersagt, nicht aber Schreiboperationen!
Quoted
Wenn der VIC mal mehr Zeit am Bus braucht, als ihm normalerweise zugestanden würde, legt er erst den BA (und damit den RDY) auf Low und verhindert, dass der MPU noch weitere Leseaktionen durchführen kann. Dann wartet der VIC drei Systemtakte lang, bis der MPU alle eventuell noch laufenden Schreibaktionen beendet.
Erst dann setzt er AEC auf Low und sperrt den MPU vollständig, setzt alle Ausgänge auf Tri-State und isoliert den Bus so vom MPU.
Quoted
Zurück zum Expansionsport.
Was wäre, wenn man DMA auf Low setzt?
DMA hängt an den AND-Gattern sowohl vom BA (und damit RDY) als auch dem AEC. Folglich könnte ein einfaches Low am DMA den MPU abkoppeln und das Cartridge hätte volle Kontrolle über den Bus bei allen Phasen, in denen ø2 High ist.
Wozu aber dann der BA-Pin noch zusätzlich? Ein DMA Low setzt ja auch automatisch das AND-Gatter mit dem BA auf Low.
Quoted
Also sollte man es wie der VIC machen:
Erst BA auf low ziehen, drei Systemtakte warten, und dann über den DMA auf Low auch das AEC auf Low ziehen.
Quoted
Viel einfacher wäre natürlich folgendes: Den Bildschirm deaktivieren! Ich gehe mal davon aus, dass dann der VIC auf keinen Fall mehr den Bus extra reservieren muss. Deshalb funktioniert ja auch die Datenübertragung von der Datasette.
Quoted
PS: Wofür steht "MPU" eigentlich?
Quoted
Original von strik
Quoted
Original von Nightshade
Immerhin, es gibt ja da noch den
R/W Ausgang: Bestimmt ob Daten am Datenbus geschrieben oder gelesen werden sollen.
So wie ich das sehe, spricht nichts dagegen, dass diese Speicher von 0x8000-0xBFFF nicht auch RAM sein könnten.
Hm... Die Dekodierleitungen des PLA werden aber nicht low (= aktiv), wenn man in diese Speicherbereiche schreibt. Sprich: Wenn du da RAM reinpacken willst, dann mußt du das selbst dekodieren. Ausserdem würde dann auch in den RAM "unter" den ROMs reingeschrieben werden, so dass du im internen RAM und im "externen" RAM den gleichen Wert hättest. Macht nicht viel Sinn, oder?
Quoted
Quoted
Gut, nicht so sonderlich sinnvoll, weil sie ja fest beim Rechner-Neustart eingeblendet sind und nicht von der Seite des C64 wieder ausgeschaltet werden können,
Doch, kann ausgeblendet werden, wenn du in dem Modul diese Möglichkeit vorsiehst (Register).

Quoted
Quoted
Es gibt da noch zwei andere Leitungen am Expansionsport:
I/O1: 0xDE00-0xDEFF
I/O2: 0xDF00-0xDFFF
Das hört sich schon erheblich mehr nach dem an, was ich suche. Wie genau man diese beiden Leitungen verwendet, um Register zu etablieren, das hab ich noch nicht vollkommen raus. Ist etwas kompliziert im Schaltplan. Aber das krieg ich noch raus.
Eigentlich ganz einfach: Sofern irgendein Zugriff im Bereich $DE00-$DEFF erfolgt (egal ob Lese- oder Schreibe, allerdings muss es im I/O-Bereich sein; bei Zugriffen zum Characterrom oder RAM unter I/O wird das nicht gesetzt), so wird I/O1 auf low gesetzt. Ebenso I/O2 bei $DF00-$DFFF (gleiche Bedingungen).
Du kannst I/O1 oder I/O2 nutzen, um das ganze weiter auszudekodieren, oder auch als Chip Select für einen I/O-Baustein.
Wie ich später noch geschrieben habe, in der 64 Intern hab ich es nicht gefunden. In der einen Webseite über den VIC aber sehr wohl.
Quoted
Quoted
Hier musste ich etwas Phantasie entwickeln und genau nachlesen.
Zum einen wurde aus der 64 Intern nicht ersichtlich, worin genau der Unterschied zwischen dem RDY und dem AEC im MPU liegt,
Mit RDY stoppst du die CPU (nach maximal 3 Takten). Die CPU treibt dann aber immer noch die Busse. AEC sorgt dafür, dass die CPU in den Tristate-Modus geht; d.h., die Busse werden nicht mehr getrieben, so dass jemand anderes (VIC, ext. Prozessor, REU) die Busse treiben darf.
Die beiden Leitungen können nicht zusammengefaßt werden, da nach RDY noch bis zu 3 Takte ausgeführt werden können. Damit die CPU das kann muss sie die Busse natürlich noch treiben.
Quoted
AEC sperrt die CPU nicht, es sorgt nur für den Tristate-Modus. Wenn dabei nicht RDY aktiv ist dürfte die CPU alles mögiche Verhalten zeigen (Absturz?).
Das habe ich ja auch herausgefunden, wie ich unten geschrieben habe.
Quoted
Quoted
Zurück zum Expansionsport.
Was wäre, wenn man DMA auf Low setzt?
DMA hängt an den AND-Gattern sowohl vom BA (und damit RDY) als auch dem AEC. Folglich könnte ein einfaches Low am DMA den MPU abkoppeln und das Cartridge hätte volle Kontrolle über den Bus bei allen Phasen, in denen ø2 High ist.
Wozu aber dann der BA-Pin noch zusätzlich? Ein DMA Low setzt ja auch automatisch das AND-Gatter mit dem BA auf Low.
Du willst BA lesen können, nicht setzen! Damit kannst du feststellen, ob gerade der VIC auf den Bus zugreifen will. Dann muss ja auch die ext. CPU den Bus freigeben (Tristate).
Quoted
Quoted
Also sollte man es wie der VIC machen:
Erst BA auf low ziehen, drei Systemtakte warten, und dann über den DMA auf Low auch das AEC auf Low ziehen.
Nein. BA niemals selbst auf low ziehen, das macht schon der VIC!
Werden bei Datasettenbetrieb auch die Sprites ausgeschaltet? Müsste ich nachschauen. Ist aber nicht so wichtig.
Quoted
Quoted
Viel einfacher wäre natürlich folgendes: Den Bildschirm deaktivieren! Ich gehe mal davon aus, dass dann der VIC auf keinen Fall mehr den Bus extra reservieren muss. Deshalb funktioniert ja auch die Datenübertragung von der Datasette.
IIRC kann der VIC den Bus trotzdem noch belegen, sofern die Sprites nicht abgeschaltet wurden.
Mir ist gerade eine mögliche Lösung eingefallen.
Quoted
Original von Nightshade
Wie bitteschön soll denn ich ein DMA machen, ohne vorher gestaffelt RDY und drei Takte später AEC auszuführen?
Wenn ich einfach so DMA auf Low lege, würde doch genau das passieren, was der VIC mit dem drei Takte Vorlaufzeit zu verhindern sucht: Den MPU bei einer möglichen Schreibarbeit zu unterbrechen.
Wenn ich DMA einfach so auf Low lege ohne vorher den BA verwendet zu haben um ein RDY ohne ein AEC auszulösen, dann würde ich doch evtl Speicher korrumpieren!
Vielleicht habe ich ja etwas übersehen, aber wenn ich mir den Schaltplan so anschaue, macht für mich nur das einen Sinn.
Ich lasse mich aber gern anderweitig überzeugen. Würde die Sache sehr vereinfachen.
This post has been edited 1 times, last edit by "Nightshade" (Nov 1st 2007, 11:07pm)
Forum Software: Burning Board® 3.1.7, developed by WoltLab® GmbH