DECLARE [SYSTEM] FUNCTION name AT address [ ( par1 [, par2 [, ... ] ] ) ] RETURN ret [ ON targets ] par : name AS type ON register par : name AS type ON STACK(width) ret : register AS type | STACK(width) AS type width: BYTE | WORD | DWORD targets : name of targets, separated by comma (,)
Il DECLARE FUNCTION
è un modo per definire e chiamare funzioni esterne scritte in linguaggio macchina
e per inserire assembly nei sorgenti. Le funzioni così definite possono essere richiamate come se
fossero parte integrante del linguaggio. Una volta dichiarata la funzione sarà sufficiente invocarla
con una delle seguenti sintassi:
x = test[ ]
come se fosse una procedura ugBASIC. Se lo si desidera, è possibile aggiungere parametri. Per ognuno è ovviamente necessario indicare come verrà passato il valore alla funzione scritta in linguaggio macchina.
Il compilatore ugBASIC consente di dichiarare funzioni e procedure che sono “di sistema”. Cosa significa “di sistema”? Vuol dire che il codice macchina risiede in una ROM, precaricata in fase di esecuzione e quindi già resa disponibile a qualsiasi programma che sappia chiamarla.
Tuttavia, poiché ugBASIC mette a disposizione tutto lo spazio di memoria consentito dall'hardware, è possibile che le ROM siano state disabilitate o comunque rese irraggiungibili. Indicando che si vuole chiamare una procedura o una funzione di sistema, ugBASIC si occuperà di riabilitare la ROM prima di eseguire la richiesta, disattivandola all'uscita.
Per dichiarare una procedura o una funzione come sistema, utilizzare semplicemente la parola chiave SYSTEM
.
DECLARE SYSTEM FUNCTION test ON CPC, ZX
Si vedano anche i seguenti file di esempio:
Dec Fu
Se si riscontra un problema nell'utilizzare questo comando, se si ritiene che vi sia un bug oppure che la spiegazione sia poco chiara, è possibile aprire una segnalazione per questa parola chiave su GitHub. Grazie!