|
@@ -30,7 +30,131 @@
|
|
|
For now I do them in assembler, which makes it easier to test them (copy and
|
|
|
paste to and AS source). Ultimately I hope to design something like this}
|
|
|
|
|
|
-{$i cpusys.inc }
|
|
|
+
|
|
|
+procedure actualsyscall; assembler; {inline requires a dummy push IIRC}
|
|
|
+ asm
|
|
|
+ int $0x80
|
|
|
+ jb .LErrorcode
|
|
|
+ xor %ebx,%ebx
|
|
|
+ ret
|
|
|
+.LErrorcode:
|
|
|
+ mov %eax,%ebx
|
|
|
+ mov $-1,%eax
|
|
|
+ end;
|
|
|
+
|
|
|
+function Do_SysCall(sysnr:LONGINT):longint; assembler;
|
|
|
+
|
|
|
+asm
|
|
|
+ movl sysnr,%eax
|
|
|
+ call actualsyscall
|
|
|
+ movw %bx,Errno
|
|
|
+end;
|
|
|
+
|
|
|
+function Do_SysCall(sysnr,param1:longint):longint; assembler;
|
|
|
+
|
|
|
+ asm
|
|
|
+ movl sysnr,%eax
|
|
|
+ pushl Param1
|
|
|
+ call actualsyscall
|
|
|
+ addl $4,%esp
|
|
|
+ movw %bx,Errno
|
|
|
+ end;
|
|
|
+
|
|
|
+{
|
|
|
+function Do_SysCall(sysnr,param1:integer):longint; assembler;
|
|
|
+
|
|
|
+ asm
|
|
|
+ movl sysnr,%eax
|
|
|
+ pushw Param1
|
|
|
+ call actualsyscall
|
|
|
+ add $2,%esp
|
|
|
+ movw %bx,Errno
|
|
|
+ end;
|
|
|
+}
|
|
|
+
|
|
|
+function Do_SysCall(sysnr,param1,param2:LONGINT):longint; assembler;
|
|
|
+
|
|
|
+ asm
|
|
|
+ movl sysnr,%eax
|
|
|
+ pushl param2
|
|
|
+ pushl Param1
|
|
|
+ call actualsyscall
|
|
|
+ addl $8,%esp
|
|
|
+ movw %bx,Errno
|
|
|
+ end;
|
|
|
+
|
|
|
+function Do_SysCall(sysnr,param1,param2,param3:LONGINT):longint; assembler;
|
|
|
+
|
|
|
+ asm
|
|
|
+ movl sysnr,%eax
|
|
|
+ pushl param3
|
|
|
+ pushl param2
|
|
|
+ pushl Param1
|
|
|
+ call actualsyscall
|
|
|
+ addl $12,%esp
|
|
|
+ movw %bx,Errno
|
|
|
+ end;
|
|
|
+
|
|
|
+function Do_SysCall(sysnr,param1,param2,param3,param4:LONGINT):longint; assembler;
|
|
|
+
|
|
|
+asm
|
|
|
+ movl sysnr,%eax
|
|
|
+ pushl param4
|
|
|
+ pushl param3
|
|
|
+ pushl param2
|
|
|
+ pushl Param1
|
|
|
+ call actualsyscall
|
|
|
+ addl $16,%esp
|
|
|
+ movw %bx,Errno
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+function Do_SysCall(sysnr,param1,param2,param3,param4,param5:LONGINT):longint; assembler;
|
|
|
+
|
|
|
+ asm
|
|
|
+ movl sysnr,%eax
|
|
|
+ pushl param5
|
|
|
+ pushl param4
|
|
|
+ pushl param3
|
|
|
+ pushl param2
|
|
|
+ pushl Param1
|
|
|
+ call actualsyscall
|
|
|
+ addl $20,%esp
|
|
|
+ movw %bx,Errno
|
|
|
+ end;
|
|
|
+
|
|
|
+function Do_SysCall(sysnr,param1,param2,param3,param4,param5,param6:LONGINT):longint; assembler;
|
|
|
+
|
|
|
+asm
|
|
|
+ movl sysnr,%eax
|
|
|
+ pushl param6
|
|
|
+ pushl param5
|
|
|
+ pushl param4
|
|
|
+ pushl param3
|
|
|
+ pushl param2
|
|
|
+ pushl Param1
|
|
|
+ call actualsyscall
|
|
|
+ addl $24,%esp
|
|
|
+ movw %bx,Errno
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+function Do_SysCall(sysnr,param1,param2,param3,param4,param5,param6,param7:LONGINT):longint; assembler;
|
|
|
+
|
|
|
+asm
|
|
|
+ movl sysnr,%eax
|
|
|
+ pushl param7
|
|
|
+ pushl param6
|
|
|
+ pushl param5
|
|
|
+ pushl param4
|
|
|
+ pushl param3
|
|
|
+ pushl param2
|
|
|
+ pushl Param1
|
|
|
+ call actualsyscall
|
|
|
+ addl $28,%esp
|
|
|
+ movw %bx,Errno
|
|
|
+end;
|
|
|
+
|
|
|
|
|
|
Function Sys_Time:longint;
|
|
|
|
|
@@ -343,7 +467,10 @@ end;
|
|
|
|
|
|
{
|
|
|
$Log$
|
|
|
- Revision 1.3 2003-01-21 15:39:45 marco
|
|
|
+ Revision 1.4 2003-05-30 19:37:14 marco
|
|
|
+ * small changes
|
|
|
+
|
|
|
+ Revision 1.3 2003/01/21 15:39:45 marco
|
|
|
* NetBSD first rtl. Still not 100%, but close
|
|
|
|
|
|
Revision 1.2 2003/01/17 22:13:47 marco
|