Comando CPC BASIC "CALL"
Recentemente ho giocato con un emulatore CPC di Amstrad. Non scrivo codice BASIC da anni, ma in passato usavo davvero un CPC.
Comunque, guardando la documentazione in linea, vedo che il CPC ha un CALLcomando, per eseguire subroutine arbitrarie del codice macchina Z80. Tuttavia, ho problemi a trovare molta documentazione su di esso; la maggior parte degli elenchi di comandi dice semplicemente "se non sai di cosa si tratta, non toccarlo!"
CALLè seguito dall'indirizzo del codice macchina da eseguire. Presumibilmente una semplice istruzione di ritorno dalla subroutine ti riporterà al BASIC quando avrai finito.
Ciò lascia il problema di come passare i dati tra BASIC e codice macchina. In particolare, il CALLcomando sembra accettare parametri aggiuntivi dopo l'indirizzo iniziale, ma non sembra documentato cosa questi effettivamente facciano. (Purtroppo, non sembra esserci un modo per riportare i risultati in BASIC.)
Risposte
Call accetta solo numeri interi e puntatori come parametri; entrambi sono valori a 16 bit. I parametri vengono inseriti nello stack BASIC. IX indica la cima di quella pila. Il numero di parametri viene inserito in A. L'operazione del codice macchina deve prenderlo da lì, incluso capire (o semplicemente assumere) il tipo di dati dei parametri.
Per un esempio, vedere ad es http://www.cpcwiki.eu/index.php/Technical_information_about_Locomotive_BASIC; ma attenzione che la descrizione sia un po 'confusa.
Notare che quando si passa un puntatore, si passa effettivamente per riferimento, quindi è possibile restituire un valore alla variabile a cui si punta.
Alcuni suggerimenti:
Un bel libro per fare assembly Z80 da alcuni POV HLL è sempre stato Z80 Assembly Language Subroutine di Osborne .
Per indirizzi specifici CPC potresti voler guardare i siti correlati al CPC come CPCWIKI
E l'istruzione di ritorno generica 8080 è RET(C9h)
Il ritorno condizionale è
RET xxcon xx come condizione.