Hallo Besucher, der Thread wurde 11k mal aufgerufen und enthält 41 Antworten

letzter Beitrag von mgreima am

EasyFlash und der C128

  • Hallo Frank,


    hier die Erklärung der einzelnen Bytes:

    Code
    1. 00 - 02: Kaltstart (JMP 800A)
    2. 03 - 05: Warmstart (JMP 800A)
    3. 06: ID (Kartentyp)
    4. 07 - 09: Kennung 43,42,4D (CBM)


    Der Warmstart wird offenbar nie verwendet, der Einsprung erfolgt also immer über den Kaltstart. Im C-128 Programmers Reference Guide wird auf Seite 409 sogar folgender Einsprung empfohlen:

    Code
    1. 8000 SEI
    2. 8001 JMP START
    3. 8004 NOP
    4. 8005 NOP


    ID entscheidet über das Verhalten und dient auch der Unterscheidung der Karten, da es bis zu vier (2 interne / 2 externe) Roms geben kann:
    0 => nicht starten
    1 => Autostart: Sofort starten, vor allen Initialisierungen
    sonst => Der Aufruf erfolgt nach der Initialisierung, noch vor dem Versuch von Floppy zu booten (Im Kernal: Phoenix-Jump)


    Die $11 für ID habe ich ohne besonderen Grund verwendet, auf jeden Fall <> 1.


    Gruß Dirk

  • Code
    1. 00 - 02: Kaltstart (JMP 800A)
    2. 03 - 05: Warmstart (JMP 800A)
    3. 06: ID (Kartentyp)
    4. 07 - 09: Kennung 43,42,4D (CBM)


    Der Warmstart wird offenbar nie verwendet, der Einsprung erfolgt also immer über den Kaltstart.


    Danke für die Erklärung



    Im C-128 Programmers Reference Guide wird auf Seite 409 sogar folgender Einsprung empfohlen:

    Code
    1. 8000 SEI
    2. 8001 JMP START
    3. 8004 NOP
    4. 8005 NOP


    Sieht aus, als ob ich mir mal den C-128 Programmers Reference Guide zu Gemüte führen sollte. Mal sehen, ob ich diesen im Internet finde.



    Mit $01 konnte ich nicht in den C128 Monitor springen. Jetzt weiss ich warum. Danke :)


  • Der Warmstart wird offenbar nie verwendet, der Einsprung erfolgt also immer über den Kaltstart.


    Bei meinem Diagnose ROM für C128DCR wird der Warmstart genutzt. Ich brauchte etwas Zeit, um das 16K ROM zu verstehen. Im Gegensatz zum 8K Diagnose ROM für den C128 ist mein C128DCR Diagnose ROM 16K groß. Die ersten 8K sind dem C128 Diagnose ROM ähnlich. Die zusätzlichen 8K enthalten 1571 spezifische Tests.


    Beim Kaltstart initialisiert sich kurz der Floppy Part (die oberen 8K) - primär eine Kopier-Routine ROM2RAM. Dann Rücksprung zur Warmstart Adresse (die unteren 8K) und Ausführung der Basis Diagnose. Auf meinem C128DCR hängt das C128DCR Diagnose Programm beim Z80 Test fest. Unter VICE wird dieser Test erfolgreich bewältigt. Der Z80 ROM Test des C128 Diagnose ROM hat auf meinem C128DCR dagegen keine Probleme. Natürlich hängt das Diagnose Programm bei I/O Port, Cassette und Control Port - hier fehlt wohl das Commodore Diagnose Kabel. Diese Tests habe ich kurzerhand mit NOPs deaktiviert um wie in einem gecrackten Computergame in das nächste Level zu kommen. :) End-Screen in den ersten 8k war ein C64 ROM-Test (irgendwie komisch bei einem C128 Diagnose Programm). Ich fragte mich an dieser Stelle, wo die Funktionalität der anderen 8K war. Habe alle möglichen Tasten und Tastaturkombinationen probiert. Ein zufälliger Soft-Reset in VICE (mache sonst nur Hard-Resets) gab die Antwort. Hardreset und Softreset sind der Diagnose Switch. Nach dem Soft-Reset landet man in einem Floppy-Test, der (abgespeckt) ähnliches bietet wie der System Tests im "128 FACTORY TEST".


    Der Switch via Soft-Reset funktioniert derzeit nicht auf meinem C128CDR (nur in VICE). Das liegt wohl daran, dass meine Adress-Anpassung nicht vollständig war. Letztere ist notwendig, da ich mit EasyFlash keine durchgängigen 16K auf dem C128 zur Verfügung habe. Das C128DCR Diagnose ROM erwartet seinen Programmcode bei $88000-$8BFFF. Mit EasyFlash kann man nur splitteten:

    • 8K Lo-Datei: $88000-$89FFF
    • 8K Hi-Datei: $8C000-$8DFFF


    Somit musste ich absolute Adressen (in absoluten jumps und beim Kopieren ROM2RAM) von $8A000 auf $8C000 mappen. Hier habe ich vielleicht noch etwas übersehen.


  • Bei meinem Diagnose ROM für C128DCR wird der Warmstart genutzt. Ich brauchte etwas Zeit, um das 16K ROM zu verstehen. Im Gegensatz zum 8K Diagnose ROM für den C128 ist mein C128DCR Diagnose ROM 16K groß. Die ersten 8K sind dem C128 Diagnose ROM ähnlich. Die zusätzlichen 8K enthalten 1571 spezifische Tests.


    Ich rate mal: das 8k ROM meldet sich mit "V1.1", das 16k ROM mit "V1.4"?

  • das 8k ROM meldet sich mit "V1.1", das 16k ROM mit "V1.4"?


    Das 16K-Modul meldet sich mit: "C-128DCR INTEGRAL DIAG 1.0"
    Das 8K-Modul meldet sich mit: "C-128 DIAGNOSTIC REV 1.1"


    Der Kaltstart eines Moduls erfolgt in der Kernal-Routine PHOENIX über den direkten Aufruf des Vektors im Modul.


    Der Warmstart eines Moduls erfolgt in der Kernal-Routine RESET bzw. POLL (?) über den (modifizierten) Vektor in $0A00.


    In dem 16K-Modul befindet sich außerdem am Ende der Initialisierung bei $8A318 ein direkter Sprung in den Warmstart-Vektor des Moduls.


    Gruß Dirk


  • In dem 16K-Modul befindet sich außerdem am Ende der Initialisierung bei $8A318 ein direkter Sprung in den Warmstart-Vektor des Moduls.



    Von $8A300 bis $8A382 läuft die Initialisierung. Von $8A31B bis $8A35E wird

    • $8A000 - $8BEEFF nach $1800-$36FF
    • $8BE00 - $8BEFF nach $2000 - $20FF


    kopiert. Die Überlappung ist irgendwie komisch - wird aber schon irgend wie Sinn machen. Danach erfolgen diverse Speicher Initialisierungen, dann @ $8A382 Rücksprung auf $8A318. Auch das untere Modul kopiert Code in das RAM. Die Testroutinen nach dem RAM Test 1 starten ab $1217. Hier kann man bequem einzelne Tests deaktivieren. Nach Ablauf der Tests hängt das Programm in einer Endlos(?)Schleife zwischen $12A0-$12A4. Hier gibt es nur den Warmstart zum weiterkommen.


  • Letztere ist notwendig, da ich mit EasyFlash keine durchgängigen 16K auf dem C128 zur Verfügung habe. Das C128DCR Diagnose ROM erwartet seinen Programmcode bei $88000-$8BFFF. Mit EasyFlash kann man nur splitteten:

    • 8K Lo-Datei: $88000-$89FFF
    • 8K Hi-Datei: $8C000-$8DFFF


    Leider ist die Sache wegen EasyFlash komplizierter. Die 8K Hi-Datei wird in zwei getrennten 4K Blöcken im C128 gemappt.

    • $8C000-$8CFFF
    • $8F000-$8FFFF


    Das macht eine Anpassung via Byte-Patching sehr schwierig. Hier stößt man mit easyFlash beim C128 an seine Grenzen. Ein besserer EasyFlash Support für den C128 Modus wäre wünschenswert.

  • Habe das Diagnose ROM für den C128DCR jetzt unter EasyFlash komplett zum Laufen bekommen. Im Lo-Rom musste so gut wie nichts geändert werden. Hier habe ich für mich den Z80 Test und Tests, die ohne Diagnose Kabel die Diagnose stoppen, abgeschaltet. Im Hi-ROM musste ich dagegen einiges Patchen und die Kopierroutine ROM2RAM erweitern. Ich kann mehrere Versionen des Lo-Rom anbieten. Den vollen Test, einen wo nur der Z80 Test abgeschaltet ist, und einen, wo alle Tests die ohne Diagnosekabel zum stoppen der Diagnose führen abgeschaltet sind. Lo-ROM und Hi Rom müssen separat mit EasyProg geflashed werden.


    Expert -> Write BIN to LOROM
    Expert -> Write BIN to HIROM



    Wer die Easyflash Dateien haben will melde sich bei mir via PM.


  • Im Lo-Rom musste so gut wie nichts geändert werden. Hier habe ich für mich den Z80 Test und Tests, die ohne Diagnose Kabel die Diagnose stoppen, abgeschaltet.


    Ich musste im Lo-ROM etwas ändern, der native Z80 Code im Hi-Rom liegt, und dieser Speicherbereich wegen EasyFlash woanders hin gemappt ist. Der Z80 Test funktioniert jetzt.

  • Leider ist die Sache wegen EasyFlash komplizierter. Die 8K Hi-Datei wird in zwei getrennten 4K Blöcken im C128 gemappt.
    $8C000-$8CFFF$8F000-$8FFFF


    Warum liegt das am Easyflash? Ich habe im Schaltplan nichts gefunden, was dies verursachen würde.


    Ich habe die Vermutung, du hast die I/O Speicherkonfiguration eingeschaltet, so dass das externe ROM einfach nicht sichtbar ist.


    Mir ist eine relativ einfach Möglichkeit eingefallen, wie man das Easyflash als vollwertiges C128 Modul nutzen kann. Dazu muss lediglich die Adressleitung A13 vom Expansionport mit der Adressleitung A13 der Flash-Chips verbunden werden. Natürlich ist auch die Verbindung von A13 zum '174 Latch derweil zu unterbrechen. Das könnte man mit einem mechanischen Kippschalter (c64/128mode) machen oder evtl. auch elektronisch/automatisch.


    Für die Automatik könnte man nutzen, dass im C128-Modus GAME und EXROM auf H liegen. Bei dieser Konfiguration der Leitungen ist das Modul im C64 Modus inaktiv und es würde nicht stören, wenn man dann die Adresszuordnung entsprechend der C128 Variante durchführt.


  • Mir ist eine relativ einfach Möglichkeit eingefallen, wie man das Easyflash als vollwertiges C128 Modul nutzen kann. Dazu muss lediglich die Adressleitung A13 vom Expansionport mit der Adressleitung A13 der Flash-Chips verbunden werden. Natürlich ist auch die Verbindung von A13 zum '174 Latch derweil zu unterbrechen. Das könnte man mit einem mechanischen Kippschalter (c64/128mode) machen oder evtl. auch elektronisch/automatisch.


    Ein C64/C128 Schalter für das neue EasyFlash3 wäre schon toll. Die Frage ist nur, ob die C128 Besitzer genug kritische Masse besitzen, um die/den EasyFlash Entwickler für so ein Feature erwärmen zu können?


  • Ich dachte eher Du lötest kurz das eine Kabel an und testest das dann aus.


    Programmieren auf Prozessorebene (6502/Z80) gerne, aber löten ist nicht so mein Ding.



    Dazu muss lediglich die Adressleitung A13 vom Expansionport mit der Adressleitung A13 der Flash-Chips verbunden werden. Natürlich ist auch die Verbindung von A13 zum '174 Latch derweil zu unterbrechen.


    Adressleitung A13 am Expansionport kann ich noch lokalisieren, aber EasyFlash Schema - "Note that the actual cartridge has a slighly different pin assignment, because e.g. logic gates have been swaped to simplify the PCB layout."


    Das hilft mir da wenig. Keine Ahnung, welche der Leitungen A13 ist und und was der 174 Latch ist.

  • Ja, das EF3 hat alle relevanten Leitungen mit dem CPLD verbunden. Eine CPLD-Firmware für verbesserte C128-Unterstützung ist also denkbar. Mein Fokus ist im Moment aber der C64. Zum Glück kann man ja den/das CPLD über USB umprogrammieren, so dass jeder die Möglichkeit hat, sich daran zu versuchen.


    btw: Momentan bin ich ein bisschen eingeschränkt (Schwiegereltern zu Besuch...), aber bald geht's weiter mit dem EF3 :)

  • Adressleitung A13 am Expansionport kann ich noch lokalisieren, aber EasyFlash Schema - "Note that the actual cartridge has a slighly different pin assignment, because e.g. logic gates have been swaped to simplify the PCB layout."


    Das hilft mir da wenig. Keine Ahnung, welche der Leitungen A13 ist und und was der 174 Latch ist.


    Ich hab hier aus dem passenden Schaltplan (hoffe ich) den Chip mal rauskopiert. Es müsste also der Chip U6 rausgezogen, Beinchen #7 etwas rausgebogen, und Chip wieder reingesteckt werden. Dann unten an der Platine ein Kabel von Pin #7 des Sockels an den Expansionport, Signal A13 (Pin J) legen.


    Nach der Modifikation kann man leider das Modul nicht mehr programmieren oder im C64 Modus benutzen. Aber für einen Test, ob es dann direkt C128 Modulimages ausführen kann, wäre das wertvoll.


    Ich kann mir auch vorstellen, dass man hier ein per Menü gesteuertes Multimodul anlegen kann. Vom C128 Modus hat man ja Zugriff auf die Bankingregister.


    ef-174.png

  • Hier noch ein später Nachtrag

    Hier habe ich für mich den Z80 Test und Tests, die ohne Diagnose Kabel die Diagnose stoppen, abgeschaltet.

    Den Z80 Test hatte ich ja schon 2011 zum Laufen gebracht. Die anderen "problematischen Tests" gehen auch mit dem offiziellen "C128 Diagnostic Assembly" (P/N 314060-01) nicht. Der Test hängt beim I/O Port Test. Dagegen läuft das "C128/C128D Diagnostic Cartridge" (P/N 789010) mit dem Diagnosekabel ohne Probleme alle Tests durch. Vielleicht braucht dieses Testprogramm ein spezielles Diagnosekabel?

  • Nach meiner 4 Jährigen Commodore Abstinenz gibt es ja jetzt
    das EasyFlash3.





    http://blog.c128.net/archives/638




    "Anders als zuerst befürchtet, funktioniert das EasyFlash 3 doch am C128, wenn auch etwas eingeschränkt."

    Ja, das EF3 hat alle relevanten Leitungen mit dem CPLD verbunden. Eine CPLD-Firmware für verbesserte C128-Unterstützung ist also denkbar.

    Wie sieht der EF3 Status (Stand 2015) hinsichtlich des hier im Thread beschriebenen Problems aus?

  • Ich hoffe das es OK ist wenn ich diesen alten Thread nochmals aufwärme.


    Ich habe die C128 Diagnose 1.4 (16kB) mit dem von x1541 vorgeschlagenen MOD zum Laufen bekommen. Also von U6 Pin 7 abgebogen, und eine Brücke zwischen A13 vom Expansionsport und U6-Sockel Pin 7 auf der Untertseite der Platine gelötet. Die Diagnose lief danach.


    Als nächstes gibts nen kleinen Umschalter ins EasyFlash Gehäuse (was ja an sich echt schick und nett ist), damit es sich weiterhin wie gewohnt mit EasyProg programmieren lässt.