Perintah CPC BASIC “CALL”

Oct 27 2020

Baru-baru ini saya bermain-main dengan emulator BPK Amstrad. Saya belum pernah menulis kode BASIC selama bertahun-tahun, tetapi dulu saya benar-benar menggunakan BPK secara nyata.

Bagaimanapun, melihat dokumentasi online, saya melihat BPK memiliki CALLperintah, untuk menjalankan subrutin kode mesin Z80 sewenang-wenang. Namun, saya kesulitan menemukan banyak dokumentasi tentangnya; kebanyakan daftar perintah hanya mengatakan "jika Anda tidak tahu apa ini, jangan sentuh!"

CALLdiikuti dengan alamat kode mesin yang akan dieksekusi. Agaknya instruksi kembali-dari-subrutin sederhana akan membawa Anda kembali ke BASIC setelah Anda selesai.

Itu menyisakan masalah bagaimana melewatkan data antara BASIC dan kode mesin. Secara khusus, CALLperintah tersebut tampaknya menerima parameter tambahan setelah alamat awal, tetapi tampaknya tidak didokumentasikan apa yang sebenarnya dilakukannya. (Sayangnya, tampaknya tidak ada cara untuk mengembalikan hasil ke BASIC.)

Jawaban

5 MichaelGraf Oct 27 2020 at 05:15

Panggilan hanya menerima bilangan bulat dan pointer sebagai parameter; keduanya adalah nilai 16 bit. Parameter diletakkan pada tumpukan BASIC. IX menunjuk ke atas tumpukan itu. Jumlah parameter dimasukkan ke dalam A. Operasi kode mesin perlu mengambilnya dari sana, termasuk mencari tahu (atau hanya mengasumsikan) tipe data dari parameter.

Sebagai contoh, lihat mis http://www.cpcwiki.eu/index.php/Technical_information_about_Locomotive_BASIC; tetapi berhati-hatilah karena deskripsinya sedikit membingungkan.

Perhatikan bahwa ketika Anda memberikan pointer, Anda secara efektif meneruskan referensi, sehingga nilai dapat dikembalikan ke variabel yang dituju.

1 Raffzahn Oct 27 2020 at 05:55

Beberapa petunjuk:

  • Sebuah buku bagus untuk melakukan perakitan Z80 dari beberapa HLL POV selalu menjadi Subrutin Bahasa Perakitan Z80 Osborne .

  • Untuk alamat spesifik BPK, Anda mungkin ingin melihat situs terkait BPK seperti CPCWIKI

  • Dan instruksi pengembalian 8080 generik adalah RET(C9h)

  • Pengembalian bersyarat RET xxdengan xx sebagai kondisi.