Если он использует стандартные соглашения о вызовах, то можно так
#define IAP_LOCATION 0x1FFF1FF1
typedef void (*IAP)(unsigned int[], unsigned int[]);
unsigned int foo(void)
{
unsigned int command[5];
unsigned int result[3];
command[0] = 0;
command[1] = 1;
command[2] = 2;
command[3] = 3;
((IAP)IAP_LOCATION)(command, result);
return result[0];
}
Если нет, то проще вызывать из ассемблерного модуля.