Z80-Programme im C128-Modus (nicht CP/M) möglich?

Es gibt 176 Antworten in diesem Thema, welches 32.826 mal aufgerufen wurde. Der letzte Beitrag (9. Januar 2023 um 23:24) ist von Mike.

  • Ich habe mich heute mal rangetraut und den C128 mit Double Ass in 8510 und Z80 in einem Programm programmiert.

    Die Zeilen 10-30 und 10000-10110 habe ich aus dem Beispiel im Sonderheft übernommen.

    Der 8510 schreibt $CC in Adresse $9000 (Zeile 110-120) und der Z80 addiert dann über Umweg mit HL 3 dazu und schreibt das Ergebnis $CF wieder in Adresse $9000 (Zeile 11000 - 11050). Diese kann ich dann wieder zurück im C128-Modus mittels PEEK auslesen.

    Ich liebe solche Beispielprogramme :D , aber es funktioniert! :thumbup:

    Bitte melde dich an, um diesen Anhang zu sehen.

    Bitte melde dich an, um diesen Anhang zu sehen.

    Bitte melde dich an, um diesen Anhang zu sehen.

    Bitte melde dich an, um diesen Anhang zu sehen.

  • Ich bin schon einige Zeit bezüglich Z80-Programmierung etwas eingerostet, will das nun aber wieder auffrischen. Ein bisschen Wissen dazu ist Dank ZX80, ZX81 und ZX Spectrum in der Jugend noch vorhanden. :)

    Heute Nachmittag habe ich mich hingesetzt und hatte die "tolle Idee", mittels dem Doppelregister BC eine Schleife zu programmieren, die ich bis zu 65535 Mal durchlaufen kann.

    Code
    LD BC,$FFFF
    JUMP1
    ...(mach was)...
    DEC BC
    JP NZ,JUMP1

    Ja, und was ist, das wird genau einmal durchlaufen. Gesucht und gesucht und probiert und probiert ...

    Letztendlich: Dieser verdammte DEC-Befehl reduziert zwar das Doppelregister um Eins, aber lässt bei Doppelregister als Argument die Flags in Ruhe. Das Z-Flag wird nie geändert (war hier vor der Schleife gesetzt). :aerger:

    Bitte melde dich an, um diesen Anhang zu sehen.

    Und das war es dann schon wieder mit meiner "tollen Idee" und dem Doppelregister als Schleifenindex. :cry:

  • Also, ich würde da JR statt JP nehmen. Spart Speicher, da relativ.

    BC auf 0 testen:

    LD a,b

    Or c

    Jr nz,jump1

    Wenn die Loop max $FF läuft, dann könnte man B als Zähler nehmen, das DEC sparen und DJNZ nehmen. In diesem Fall DJNZ jump1.

  • Danke für die Hinweise! Wie geschrieben, ist mein Z80-Wissen mit den Jahren etwas eingerostet. :)


    Ich habe heute mal etwas Zeit gehabt und wollte mal ausprobieren, wie unterschiedlich ich mit dem 8502 und dem Z80 an die gleiche Aufgabe rangehen kann.

    Meine selbstgestellte Aufgabe war es, den 40 Zeichen-Bildschirm des C128 jeweils 255 Mal mit Herzen ausfüllen zu lassen. <3 :D

    Dabei soll die äußere Schleife (JP0) von 255 auf 0 runterzählen (255 Wiederholungen), die zweite (JP1) von 25 auf 0 (25 Zeilen) und die innere (JP2) von 40 auf 0 (40 Spalten). Der Screencode für das Herz ist 83.

    Also Double-Ass angeworfen und das Ganze nach der Vorgabe für den 8502 umgesetzt:

    Bitte melde dich an, um diesen Anhang zu sehen.

    Edit: Die INT in den Zeilen 200 und 220 müssen ein Ausgabefehler von Double-Ass sein. Die habe ich nie eingegeben und kommen so auch nicht im Speicher vor. Zeile 220 gehört ganz weg. Keine Ahnung, was da beim Listing passiert ist. Werde morgen nochmal nachschauen. Also die INTs und Zeile 220 einfach ignorieren! ;)

    Ich habe die letzten Monate so viel am MEGA65 gemacht, dass ich ganz vergessen habe, dass der 8502 ja noch nicht einmal das Z-Register hat. Register in der Schmalspurvariante A,X und Y. Ich hab dann halt die freien Zeropageadressen $FB bis $FE benutzt. Es soll ja erstmal nur laufen. :)

    Und dann das Ganze für den Z80 (ab Zeile 180, vorher wird in den übernommenen Beispiel aus dem Sonderheft 22 für den Z80 vorbereitet):

    Bitte melde dich an, um diesen Anhang zu sehen.

    Nun ja, geht schon etwas "leichter von der Hand" mit paar Register mehr. :D

    Beide Programme füllen den 40 Zeichen-Bildschirm jeweils 255 Mal mit Herzen! Klappt soweit! :tanz:

    Bitte melde dich an, um diesen Anhang zu sehen.

    Leider hab ich den C128 erst wieder morgen in Griffweite, war aber trotzdem mal neugierig, wie sich die beiden Routinen auf dem Emulator x128 (VICE 3.4) schlagen. Da ich von Hand gestoppt habe (das Z80-Programm lässt TI nicht weiterlaufen), habe ich schnell in BASIC 7 fünf Mal die 8502-Routine

    Bitte melde dich an, um diesen Anhang zu sehen.

    und danach mit dem anderen Programm fünf Mal die Z80-Routine aufrufen lassen.

    Bitte melde dich an, um diesen Anhang zu sehen.


    Handgestoppt braucht der 8502 ca. 28 Sekunden und der Z80 ca. 15,5 Sekunden.

    Am Wochenende probiere ich es mal auf dem echten C128 aus. :)

    Es macht mir schon großen Spass und ist auch faszinierend, den C128 mit Z80-Code zu programmieren. :D

    Das ist was, was meines Erachtes nicht so groß rausgekommen ist. Außerhalb von CP/M fristet der Z80 ja doch ein unbeachtetet Dasein im C128. Was schade ist bzw. war, da ich in meinem Beispiel damit recht flott auf den 40 Zeichenbildschirm zugreifen kann. Also mir gefällt das im Moment recht gut und macht mir Spass! Da werde ich mich noch ein bisschen tiefer reingraben. :)

  • Handgestoppt braucht der 8502 ca. 28 Sekunden und der Z80 ca. 15,5 Sekunden.

    :lol23:

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • In beiden Routinen hat sich ein kleiner Fehler eingeschlichen, die innere Schleife von 40 stimmt nicht.

    Es ist praktisch unmöglich, ein schnelles Programm zu schreiben, wenn man es in Basic programmiert.

  • Handgestoppt braucht der 8502 ca. 28 Sekunden und der Z80 ca. 15,5 Sekunden.

    Also, diese kurze Fassung:

    ... braucht auf meinem C64 rund 11 Sekunden (bei 5-maliger Ausführung). Z80 kann ich leider nicht. :|

    Bitte melde dich an, um diesen Link zu sehen. - Ratespiel • Bitte melde dich an, um diesen Link zu sehen. - BASIC-Erweiterung • Bitte melde dich an, um diesen Link zu sehen. - Sprite-Editor • Bitte melde dich an, um diesen Link zu sehen. - Zeichensatz-Editor Bitte melde dich an, um diesen Link zu sehen. - 2048 Blöcke

    Einmal editiert, zuletzt von goloMAK (7. Januar 2023 um 08:38)

  • Auch wenn man sich an den Vorgaben orientiert, würde man auf einem 6502 auf jeden Fall für eine Schleife bis zu 256 direkt das Indexregister nehmen und nicht jedes Mal den ZP-Pointer modifizieren.

    ────────────────────────────────────────────────────────────
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    ────────────────────────────────────────────────────────────

  • Jetzt bin ich angefixt! Ich will auch mal was für eine Z80-Plattform schreiben!

    Wer gerne ein paar Hinweise dazu geben möchte - hier habe ich einen eigenen Thread dazu aufgemacht:

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen. - Ratespiel • Bitte melde dich an, um diesen Link zu sehen. - BASIC-Erweiterung • Bitte melde dich an, um diesen Link zu sehen. - Sprite-Editor • Bitte melde dich an, um diesen Link zu sehen. - Zeichensatz-Editor Bitte melde dich an, um diesen Link zu sehen. - 2048 Blöcke

  • könnte man nicht einen speccy Emulator schreiben

    Besser einen CPC Emulator. :prof:

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Edit: Die INT in den Zeilen 200 und 220 müssen ein Ausgabefehler von Double-Ass sein. Die habe ich nie eingegeben und kommen so auch nicht im Speicher vor. Zeile 220 gehört ganz weg. Keine Ahnung, was da beim Listing passiert ist. Werde morgen nochmal nachschauen. Also die INTs und Zeile 220 einfach ignorieren! ;)

    Irgendwie zickt Double-Ass hier rum. :aerger:

    Hier einfach mal das obige 8502-Listing frisch aus dem C128-Monitor: :)

    Bitte melde dich an, um diesen Anhang zu sehen.

  • fürs Master system hatte ich immer den WLA z80 asm. Den hatte ich auch für den cpc genommen, als ich eigene ROMs geschrieben hatte.

  • Was denn für ROMs?

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Eine RSX Erweiterung (Overscanbilder, Rasterbalken, Circle, IFF Lader, BMP Saver,.... auch mit Plus-Farben), diverse Tools, eine RAM Disk, DOS, ...