Ich habe nun folgendes probiert:
in main (extra die Konstante verwendet:
void test()
{
while(TRUE)
{
asm volatile ("call *%0"::"r"( 0x40082372 ) ); // <- program from outside "loaded" by incbin ...
}
}
task_t* task5 = create_task (test, 3);
in syscall.h/syscall.c
DECL_SYSCALL1(puts, UCHAR*)
DECL_SYSCALL0(test)
DECL_SYSCALL2(test1, ULONG, ULONG)
DEFN_SYSCALL1(puts, 0, UCHAR*);
DEFN_SYSCALL0(test, 1)
DEFN_SYSCALL2(test1, 2, ULONG, ULONG)
ULONG num_syscalls = 3;
static void* syscalls[3] =
{
&puts,
&test,
&test1
};
Dennoch klappt es nicht mit dem User Mode. Woran liegt das?
Im Kernel Mode übrigens kein Problem.
Die Konstante habe ich durch Screen-Ausdruck kontrolliert:
printformat("%x\n",ramdisk_start + (ULONG)&prog_start - (ULONG)&file_data_start);