CPC BASIC "CALL" komutu
Son zamanlarda bir Amstrad CPC emülatörü ile uğraşıyorum. Yıllardır BASIC kodu yazmadım, ancak o gün gerçekten bir TBM'yi gerçekten kullanıyordum.
Her neyse, çevrimiçi belgelere baktığımda, CPC'nin CALLrastgele Z80 makine kodu alt rutinlerini yürütmek için bir komutu olduğunu görüyorum . Ancak, bununla ilgili çok fazla belge bulmakta güçlük çekiyorum; çoğu komut listesi sadece "bunun ne olduğunu bilmiyorsanız, ona dokunmayın!" der.
CALLardından yürütülecek makine kodunun adresi gelir. Muhtemelen basit bir alt programdan geri dönüş talimatı, işiniz bittiğinde sizi BASIC'e geri götürecektir.
Bu, BASIC ile makine kodu arasında verilerin nasıl aktarılacağı sorununu ortadan kaldırır. Özellikle, CALLkomut başlangıç adresinden sonra ek parametreleri kabul ediyor gibi görünüyor, ancak bunların gerçekte ne yaptıkları belgelenmemiş gibi görünüyor. (Ne yazık ki, sonuçları BASIC'e geri döndürmenin bir yolu yok gibi görünüyor.)
Yanıtlar
Çağrı yalnızca tamsayıları ve işaretçileri parametre olarak kabul eder; her ikisi de 16 bit değerlerdir. Parametreler BASIC yığınına konur. IX bu yığının tepesini işaret ediyor. Parametrelerin sayısı A'ya girilir. Makine kodu işleminin, parametrelerin veri tipini bulmak (veya sadece varsaymak) dahil olmak üzere onu oradan alması gerekir.
Bir örnek için bkz. Ör. http://www.cpcwiki.eu/index.php/Technical_information_about_Locomotive_BASIC; ancak açıklamanın biraz kafa karıştırıcı olduğuna dikkat edin.
Bir işaretçiyi ilettiğinizde, etkili bir şekilde başvuruya göre geçeceğinizi, böylece işaret edilen değişkene bir değer döndürülebileceğini unutmayın.
Birkaç işaret:
Bazı HLL POV'larından Z80 montajı yapmak için güzel bir kitap, her zaman Osborne'un Z80 Assembly Dili Altyordamları olmuştur .
TBM'ye özgü adresler için, CPCWIKI gibi TBM ile ilgili sitelere bakmak isteyebilirsiniz.
Ve genel 8080 dönüş talimatı RET(C9h)
Koşullu getiri,
RET xxkoşul olarak xx ile olur.