Hello, Guest the thread was called12k times and contains 167 replays

last post from olly at the

CP/M Z80 Verständnisfrage

  • Moin in die Runde,


    ich habe eine Verständnisfrage. Wenn man im Monitor des c128 mit go in die Adresse $ffd0 springt, landet man ja in der CP/M Bootroutine in der nach der CP/M Systemdiskette gesucht wird. Ich vermute, dass an diesem Punkt die Z80 CPU aktiv ist. Ist das richtig?
    Würde im Umkehrschluß bedeuten, das es theoretisch an der Stelle möglich sein könnte, Z80 Code auszuführen (wenn man weis wie). Theoretisch richtig? Oder lässt sich von dort aus nur das 128er CP/M booten?


    Ist die CP/M Variante für den 128er auch speziell nur auf dem C128 lauffähig? Ich vermute es, wegen der restlichen Hardware die ja mitgenutzt wird.


    Bin durch einige Bücher darauf gestoßen, allerdings irgendwie keine konkreten Antworten darauf gefunden.


    Ich wäre über eine kurze Aufklärung sehr dankbar.


    Grüße :winke:

  • ich habe eine Verständnisfrage. Wenn man im Monitor des c128 mit go in die Adresse $ffd0 springt, landet man ja in der CP/M Bootroutine in der nach der CP/M Systemdiskette gesucht wird. Ich vermute, dass an diesem Punkt die Z80 CPU aktiv ist. Ist das richtig?

    Nicht direkt ab diesem Punkt, aber kurze Zeit später sollte auf den Z80 umgeschaltet werde. Dessen Startadresse ist wohl üblicherweise so eingestellt, dass CP/M gebootet wird, aber das lässt sich ändern. Sinnigerweise schaltet der Bootvorgang für die Diskettenzugriffe wieder auf den 8502 zurück.


    Quote

    Würde im Umkehrschluß bedeuten, das es theoretisch an der Stelle möglich sein könnte, Z80 Code auszuführen (wenn man weis wie). Theoretisch richtig? Oder lässt sich von dort aus nur das 128er CP/M booten?

    Man kann das auch verwenden, um eigenen Z80-Code ohne CP/M laufenzulassen: http://commodore64.se/wiki/ind…embly_programming#Z80_CPU


    Quote

    Ist die CP/M Variante für den 128er auch speziell nur auf dem C128 lauffähig?

    Ja. Gilt aber vergleichbar für (fast?) alle CP/M-80-Systeme.


    Edit: Erst googlen, dann absenden klicken hilft...

  • Das C128 CP/M ist speziell für den C128, wobei von der Theorie her einige Teile davon auch auf anderen CP/M+ (auch als CP/M 3.0 bezeichnet) laufen dürfte. Theorie: bei CP/M gibt es eine hardwarespezifische Schicht, das BIOS. Darauf greift das hardwareunabhängige BDOS zurück, darauf setzt dann nochmal ein Element drauf auf (welches vom Anwendungsprogramm überschrieben werden kann und nach Beendigung desselben wieder von Diskette nachgeladen wird).


    Z80-Code sollte sich auch so ausführen lassen, imho wird das über eine Speicheradresse getriggert. Eventuell hat das jemand anders hier schon ausprobiert. Naja, muss schon allein deshalb gehen, weil die ganzen I/O-Operationen meines Wissens nach 8502-Code sind.


    Ich hoffe, ich hab jetzt um halb 1 nicht zuviel durcheinandergebracht...

  • Edit: Erst googlen, dann absenden klicken hilft...

    Entschuldige, dass ich mich an das Forum gewedet habe. Der Spruch ist völlig unnötig. Wie Google funktioniert, weiß ich. Du hättest den Thread ja ignorieren können, aber trotzdem herzlichen Dank für Deine Mühe. Ich google dann mal und werde mich in Zukunft erst an das Forum wenden, wenn Google keine Ergebnisse anzeigt. Also garnicht! :thumbsup:


    @Tale-X
    Auch dir herzlichen Dank für die Infos.
    Das reicht mir schon aus.


    Kann dann geschlossen werden. Danke.

  • Der Spruch ist völlig unnötig.

    Damit hat @Unseen wohl sich selbst gemeint, nicht Dich ;)

  • Der Sinn solche Fragen im Forum zu stellen, ist ja u.a. auch, dass andere, die das vielleicht auch interessiert, mitlesen.
    Wenn alle nur noch googlen, kann man das Forum auch gleich zumachen.


    Deswegen beteilige ich mich auch gerne an Themen, von denen ich eigentlich keine Ahnung habe und stelle doofe Fragen. Weil ich da oft Dinge erfahre, wo ich gar noch auf diie Idee gekommen wäre, danach zu googlen..

  • Damit hat @Unseen wohl sich selbst gemeint, nicht Dich ;)

    Im Ernst?
    Sicher?


    Das hab ich aber nicht so verstanden. ?( Na wenn dem wirklich so ist, hab ich das wohl missverstanden und nehme alles Zurück, bis auf das Dankeschön natürlich und entschuldige mich bei Unseen. Ich möchte natürlich niemandem Unrecht tun. Also wenn es nicht so gemeint war, sorry & peace.


    :schande:

  • Da kann man sich bei @Unseen nicht so sicher sein. Ich habe mir auch schon einen Spruch gefangen, von wegen "wenn man keine Ahnung hat...".
    Aber in dem Fall, hat er wohl wirklich sich selbst gemeint.

    Leute, ich will hier keinen Streit verursachen. Kann sein, dass ich da was in den falschen Hals bekommen habe. Ist doof, passiert aber.


    Wenn dem so ist, hab ich mich in aller Form bei Unseen entschuldigt, wenn nicht und es doch so gemeint war wie ich es erst verstnaden hatte, hab ich meine Meinung gesagt.


    Damit ist die Sache für mich durch und muss nicht weiter ausarten. Wäre schön, wenn es dabei bleibt. :)

  • Hi,
    ich könnte hier den ASM-Versuch, den ich auf dem Vice128 im Urlaub am Raspberry.-RetroPie-System gemacht habe, posten. Ist aus einem 128er Sonderheft entlehnt.
    Das hin und her zwischen den CPUs funktioniert, ich konnte aber noch nichts sinnvolles damit anstellen. Vielleicht ist der 128er Emu nicht ganz so perfekt. Irgenwelche Rasterzeitanzeigen via
    STA $D020 nimmt er grundsätzlich nicht. Der selbe Flimmer-Code im Emu-64er (ohne den Z80 Kram natürlich) läuft. Somit habe ich den Versuch abgebrochen und momentan wegen Wetter auch keine
    große Lust, das auch noch am echten 128er zu wiederholen. Das mache ich aber definitiv, weil mich das sher interessiert. CP/M ist aber dabei eigentlich nicht mein Fokus.
    Leider habe ich mit einem abgesetzte LDIR-Blockmove-Befehl auch nur einen Freeze des Emus produziert.
    Gruß
    Mark

  • Vielleicht ist der 128er Emu nicht ganz so perfekt.

    Ist er in der Sache definitiv nicht, deshalb benutze ich die echte Hardware. Ich bin durch lesen darauf aufmerksam geworden und dachte mir, wenn schon ein Z80 eingebaut ist, warum ist das auf CP/M beschränkt? Ich denke auch da geht noch was. Ob es einen Sinn macht, ist mir aber auch noch nicht ganz klar. Interressant ist´s allemal.


    In welchem 128er SH bist Du fündig geworden?

    Versuch abgebrochen und momentan wegen Wetter auch keine
    große Lust, das auch noch am echten 128er zu wiederholen

    Völlig korrekt :thumbsup:

  • Äh ja, [...]

    Trotzdem noch zur Ergänzung, und weil darüber auch in dem anderen Thread nichts steht:


    Es ist nicht unbedingt nötig, die Routine bei $FFD0 anzuspringen um den Z80 zu aktivieren, das kann man auch direkt im eigenen Programm machen, wenn man das 8502/Z80-Flag der MMU direkt anspricht. Der 8502 hebt dann nach Rückkehr vom Z80 auch genau an dieser Stelle wieder ab, direkt hinter dem "Z80-aktivierenden" Befehl sollte aber ein NOP stehen.


    Wichtiger ist eine sinnvolle Vorbereitung des Z80-Pendants bei $FFE0: hier bleibt der Z80 nach einem Power-On/Reset "stehen" und startet ab $FFEE durch. Genau da sollte eine kleine Routine geschrieben werden, die folgendes tut:


    1. Den Stackpointer SP mit einem geeigneten Wert (z.B. $FF00) laden,
    2. die gewünschte Routine mit einem CALL-Befehl aufrufen und
    3. Mit JP nach $FFE0 loopen, damit der Z80 wieder vor $FFEE angehalten wird.


    zu 1.: das Z80-ROM initialisiert SP beim Hochbooten *nicht*, das geschieht erst, wenn sonst CP/M gestartet wird.


    Also:

    ... mit der Sprungadresse in $FFF2/$FFF3. Wenn man ganz nett ist, stellt man anschließend den Originalzustand (das &B1 bei $FFEA und ein RST &08 (Opcode &CF) bei $FFEE) wieder her. :)


    Der "Absprung" im eigenen Programm braucht nun mindestens I/O bei $Dxxx, sonst halt Bank 0, und sieht dann so aus:

    Code
    1. PHP
    2. SEI
    3. LDA #$3E ; Bank 0 + I/O
    4. STA $FF00
    5. LDA $D505 ; gewünschter Wert in $D505 zur Reaktivierung der 8502-CPU
    6. STA $FFEA ; ... wird in Operand von $FFE9 LD A,&xx geschrieben,
    7. AND #$FE ; Bit0 = 0 => Z80 aktiv
    8. STA $D505 ; und schreiben!
    9. NOP ; "Absprungpunkt" für 8502 -> Z80
    10. PLP ; 8502 wieder aktiv, vorigen IRQ-Status wiederherstellen.
  • Irgendwie komme ich mit der Forumsuche nicht zurecht.

    [OT]


    Die Forumssuche ist :poop: ... wenn man hier im Forum was finden will (Beispiel: "C128 auf Z80 umschalten"), dann bei Google ins Suchfeld eingeben:


    Code
    1. site:forum64.de C128 auf Z80 umschalten

    Beiträge, die älter als ein paar Stunden sind, sind normalerweise im Google-Index schon drinnen. (Ja, ist OT, aber man kann es nicht oft genug wiederholen. :D )



    [/OT]

  • @maik


    Du scheinst Dich ja schon sehr intensiv mit dem Thema beschäftigt zu haben. Klasse Sache! Das sind sehr wertvolle Info´s.


    Genau durch die Beschäftigung mit der MMU und dem Banking bin ich darauf gestoßen.


    Vielen Dank für Deine Mühe. Hab mir die Infos schon weggespeichert.


    Es scheint zwar einen guten Grund zu geben, dass der Z80 von Beginn des 128er an außer dem CP/M-System keine weitere Beachtung gefunden hat, aber es scheint mir auch erforschenswert.


    Nochmals Dank! :dafuer:

  • @kinzi


    Macht doch nichts. Ich hab mich mal getraut das zu bemosern, wobei ich mir dabei trotzdem nicht ganz sicher war, ob ich mich einfach nur dusselig anstelle. Aber du hast völlig Recht! Über Google finde ich wesentlich mehr und auch die richtigen Forumsbeiträge :whistling: .