CPC BASIC-Befehl „CALL“

Oct 27 2020

Vor kurzem habe ich mit einem Amstrad CPC-Emulator herumgespielt. Ich habe seit Jahren keinen BASIC-Code mehr geschrieben, aber damals habe ich tatsächlich einen CPC verwendet.

Wenn ich mir die Online-Dokumentation anschaue, sehe ich, dass der CPC einen CALLBefehl zum Ausführen beliebiger Z80-Maschinencode-Subroutinen hat. Ich habe jedoch Probleme, viele Unterlagen darüber zu finden. Die meisten Befehlslisten sagen nur "Wenn Sie nicht wissen, was das ist, berühren Sie es nicht!"

CALLgefolgt von der Adresse des auszuführenden Maschinencodes. Vermutlich bringt Sie eine einfache Anweisung zum Zurückkehren aus dem Unterprogramm zurück zu BASIC, wenn Sie fertig sind.

Damit bleibt das Problem, wie Daten zwischen BASIC und Maschinencode übertragen werden. Insbesondere CALLscheint der Befehl zusätzliche Parameter nach der Startadresse zu akzeptieren, aber es scheint nicht dokumentiert zu sein, was diese tatsächlich tun. (Leider scheint es keine Möglichkeit zu geben, die Ergebnisse an BASIC zurückzugeben.)

Antworten

5 MichaelGraf Oct 27 2020 at 05:15

Call akzeptiert nur Ganzzahlen und Zeiger als Parameter. beide sind 16-Bit-Werte. Die Parameter werden auf den BASIC-Stack gelegt. IX zeigt auf die Oberseite dieses Stapels. Die Anzahl der Parameter wird in A eingegeben. Die Maschinencode-Operation muss sie von dort übernehmen, einschließlich des Herausfindens (oder nur der Annahme) des Datentyps der Parameter.

Ein Beispiel finden Sie z http://www.cpcwiki.eu/index.php/Technical_information_about_Locomotive_BASIC;; Beachten Sie jedoch, dass die Beschreibung etwas verwirrend ist.

Beachten Sie, dass Sie beim Übergeben eines Zeigers effektiv als Referenz übergeben, sodass ein Wert an die Variable zurückgegeben werden kann, auf die verwiesen wird.

1 Raffzahn Oct 27 2020 at 05:55

Ein paar Hinweise:

  • Ein schönes Buch für die Z80-Assemblierung aus einigen HLL-POVs waren schon immer Osbornes Z80-Assembler-Subroutinen .

  • Für CPC-spezifische Adressen sollten Sie sich CPC-bezogene Websites wie das CPCWIKI ansehen

  • Und die generische 8080-Rückgabeanweisung lautet RET(C9h)

  • Die bedingte Rückgabe erfolgt RET xxmit xx als Bedingung.