Hello, Guest the thread was viewed2.7k times and contains 28 replies

last post from cbmhardware at the

3-plus-1 Software Roms am Plus/4 durch etwas Sinnvolles ersetzen

  • Cartridge (extern) oder internes ROM sind bei mir zwei völlig verschiedene Dinge....

    Das ist beim Plus/4 nicht wie beim C64. Die internen ROMs werden ähnlich wie ein Cartridge behandelt. Unten die Tabelle ROM-Banking: http://cbmhardware.de/show.php?r=4&id=11 , anhand von $ffddx wird ausgewählt, welche Kombination eingeblendet wird, das findet man dann auch leicht in der Schaltung wieder: http://www.zimmers.net/anonftp…us4/plus4-310164-4of4.gif .

    Die Header ist intern wie extern auch immer "identisch": $modulnummer,CBM. Ich fand damals bei den internen 3plus1-ROMs eine andere Behandlung als beim Cartridge. Der Unterschied lag in den angesprungenen Routinen. Beim ROM wird die Einsprungadresse nach $05f0, $05f1 geschrieben und dann eine Longjump-Routine angesprungen. Beim Cartridge war es ein Vector bei $02fe, $02ff und Sprung in die modifizierten Banking-Routinen. Der Unterschied liegt im Aufruf: ein Cartridge wird direkt ausgeführt und beim Function-ROM wird eine Tastenabfrage eingefügt (F1 für irgendwelchen Käse). Diese ROMs bringen also einen Teil der Funktionen mit, sollten demnach auch problemlos austauschbar sein. Ein Function-ROM kann ein Cartridge werden und anders herum, auch wenn das beim Cartridge nicht sinnvoll ist. Wenn man das in den Function-ROM Sockel steckt, kann der P/4 nur noch dieses ROM ausführen, anders herum macht es mehr Sinn

    Lange Rede kurzer Sinn: das interne ROM unterscheidet sich vom Cartridge, ist aber auch das selbe. :) Mann kann es auch über externen Code einblenden und munter über eigene Routinen als Datenbunker nutzen. Dann ist es identisch.




    .

  • Gibt es irgendwo eine Information/Anleitung, wie man eine .prg Datei in ein (Cartrige-)Eproms speichern und später im Plus/4 dann vom (Cartrige-)Eprom starten kann ?!


    Ausserdem suche ich noch eine Schaltungsbeispiel mit ROM-Bank-Switching, um 2x 64KB in den beiden ROM-Sockeln verwenden zu können.

    Ich hatte Dir den Link schon gezeigt, aber hier ist noch ein Beispiel mit einem Programm: http://www.cbmhardware.de/show.php?r=4&id=29 . Dazu musst Dich mit Assembler, den Routinen und der Architektur des P/4 beschäftigen.


    Naja, ein ROM-Banking per Userport wäre trivial: A15 und A14 mit jeweils einem Bit beschalten, dann hat man 16kByte Pages.

  • Genau, da habe ich schon geschaut.


    Evtl. lässt sich das auch exklusiv nur intern via der Erweiterungs-ROM-Sockel lösen. Man könnte z.B. die letzten 4 Bytes vom High-EPROM für die Bank-Umschaltung missbrauchen (nur Read-Zugriff) und die Banknummer (1-4) mit extra TTL Chips dann speichern. Da gehen dann zwar 4x4 Bytes (E)EPROM-Speicher verloren, jedoch braucht man keine anderen separaten, komplizierten Lösungen mit extra Verdrahtungen...

  • Das Aufrufen eigener ROM Software sollte genauso möglich sein, wie es bei den 3-plus-1 Roms auch ist.

    Also mit Taste [F1] + Taste [Return] zum Starten der Software im ROM....(Sollte Dummy sicher sein).

    Wahrscheinlich muss man dafür noch etwas Extra-Code im ROM unterbringen.

    Das Programmierbeispiel dafür befindet sich wahrscheinlich in den 3-Plus-ROMS...

    Am bestem gleich mal disassemblieren, um zu schauen, wie es geht.

  • Evtl. lässt sich das auch exklusiv nur intern via der Erweiterungs-ROM-Sockel lösen. Man könnte z.B. die letzten 4 Bytes vom High-EPROM für die Bank-Umschaltung missbrauchen (nur Read-Zugriff) und die Banknummer (1-4) mit extra TTL Chips dann speichern. Da gehen dann zwar 4x4 Bytes (E)EPROM-Speicher verloren, jedoch braucht man keine anderen separaten, komplizierten Lösungen mit extra Verdrahtungen...

    ROM = Read only Memory ... an den Erweiterungssockeln liegt dementsprechend keine R/W-Leitung, man kann also kein Bit setzen, demnach ist das nicht möglich. Da wird nur Read in den Select-Leitungen eingebunden.

  • Richtig ! Der Hinweis auf Nur-Lesen-Zugriff fehlt in meinem Kommentar.


    Aber meine Idee mit den 4 verlorenen Bytes am EPROM Adressende geht so, dass die EPROM Bank-Nummer über den Adressbus [A0/A1] sozusagen auscodiert wird:

    1. Lesezugriff auf [Adresse EPROM-Ende -3 / A1=0/A0=0] => Aktivierung EPROM Bank 1.
    2. Lesezugriff auf [Adresse EPROM-Ende -2 / A1=0/A0=1] => Aktivierung EPROM Bank 2.
    3. Lesezugriff auf [Adresse EPROM-Ende -1 / A1=1/A0=0] => Aktivierung EPROM Bank 3.
    4. Lesezugriff auf [Adresse EPROM-Ende -0 / A1=1/A0=1] => Aktivierung EPROM Bank 4.

    Soweit ich gelesen habe, lässt sich die Speicherung der 2 Bit für die EPROM Bank_-Selektierung mit einem TTL 2-Bit-Latch realisieren.

    Somit wären 2x 16 KByte x 4 Bänke = 128 KByte nutzbar.


    Für den Bank-Umschalt-Code gehen dann auch noch ein paar Bytes in den EPROMS verloren, da der auch in allen 4 EPROM Bänken enthalten sein müsste...

  • Aber meine Idee mit den 4 verlorenen Bytes am EPROM Adressende geht so, dass die EPROM Bank-Nummer über den Adressbus [A0/A1] sozusagen auscodiert wird:

    1. Lesezugriff auf [Adresse EPROM-Ende -3 / A1=0/A0=0] => Aktivierung EPROM Bank 1.
    2. Lesezugriff auf [Adresse EPROM-Ende -2 / A1=0/A0=1] => Aktivierung EPROM Bank 2.
    3. Lesezugriff auf [Adresse EPROM-Ende -1 / A1=1/A0=0] => Aktivierung EPROM Bank 3.
    4. Lesezugriff auf [Adresse EPROM-Ende -0 / A1=1/A0=1] => Aktivierung EPROM Bank 4.

    Soweit ich gelesen habe, lässt sich die Speicherung der 2 Bit für die EPROM Bank_-Selektierung mit einem TTL 2-Bit-Latch realisieren.


    Das wäre mir neu. Das Lo-ROM liegt im Bereich $8000-$bfff, man müsste also $bffc dekodieren lassen. Letztlich muss dann $bffc als Select-Leitung übrig bleiben. Wenn jetzt meinetwegen A0=0, A1=0 : $bffc herauskommt, liest man von $bffc. Beim Zugriff der CPU auf $bffd schaltet sich dann alles um, da die CPU nicht wartet und gar nicht weiß, dass man die Adressleitungen braucht, um aus einem ganz anderen Bereich zu lesen. Demnach kann man auch nur 4 Bit aus einem anderen Bereich lesen, wenn man diese dekodiert. Man kann der CPU nicht sagen: "Hey ich habe auf $bffc gelesen, warte mal kurz, ich brauche die Adressleitungen". Das geht beim C64 per DMA und BA, ist mit einem ROM-Sockel aber unmöglich.


    Was man braucht ist der Schreibzugriff: http://www.zimmers.net/anonftp…us4/plus4-310164-4of4.gif , so macht es der P/4 auch.

  • Hallo,


    Ich habe eine Prototype-Entwurf entdeckt, mit dem man größere ROM's (> 2x 16 KByte) verwenden kann.

    Außerdem kann man mit einem Programm dann die ROM-Speicherbereiche mittels Register ($FD23/$FD23) umschalten. Im Prototype-Entwurf werden sogar 2 ROMS mit 2x 128 KByte verwendet !


    Viel Spaß beim Studieren:


    Quote

    [...von 'CBM Hardware => Der C16 & Plus/4 Expansionsport'...(ganz unten am Seitenende)]

    Hier noch ein kleiner Ansatz als Inspiration. Das Cartridge verwendet $df2x zum Schalten der Register und zwei 010er Flash-ROMs zur Aufnahme vieler einzelner ROM-Images. Die Steuersoftware wird im Low-ROM Bank $00 untergebracht und wird beim Startup zuerst aktiviert. So sollte eine komfortable Auswahl der gespeicherten ROMs möglich sein.



    Wie man im Bild erkennen kann, ist die Dekodierung mehr als holprig mit Standard-TTLs. Da wäre wohl zumindest ein GAL 20V8 oder CPLD angebracht.

  • Kommt mir bekannt vor. Bei mir liegen seit einiger Zeit einige Teile für die internen ROM-Steckplätze auf dem Tisch. Fehlt ein Register und etwas weitere Logik für den Schreibzugriff. Letztlich wird es den "bleed-through"-Effekt nutzen müssen und ich möchte bald damit anfangen. Muss sowieso noch eine 1551 für jemanden reparieren, der langsam schon trampelt. :)


    Wird ein paar Leitungen von anderen Bauteilen brauchen: R/W, Phi2 und F0 (? .. Erinnerung ist unsicher) vom PLA. Also von gesockelten Bauteilen, die sich leicht mit einem Zwischensockel anzapfen lassen. Wird dann erst mal nur für die Lo-Bank (512kByte Flash).


    Bin im Moment neben der Arbeit aber noch mit der Restauration eines angehenden Oldtimers beschäftigt.