x86.inc 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. {$packrecords C}
  2. TYPE uint=CARDINAL;
  3. CONST
  4. I386_GET_LDT =0;
  5. I386_SET_LDT =1;
  6. { I386_IOPL }
  7. I386_GET_IOPERM =3;
  8. I386_SET_IOPERM =4;
  9. { xxxxx }
  10. I386_VM86 =6;
  11. {
  12. type i386_ldt_args = record
  13. int start : longint;
  14. union descriptor *descs;
  15. int num;
  16. end;
  17. }
  18. type
  19. i386_ioperm_args = record
  20. start : uint;
  21. length : uint;
  22. enable : longint;
  23. end;
  24. i386_vm86_args = record
  25. sub_op : longint; { sub-operation to perform }
  26. sub_args : pchar; { args }
  27. end;
  28. sysarch_args = record
  29. op : longint;
  30. parms : pchar;
  31. end;
  32. {
  33. int i386_get_ldt __P((int, union descriptor *, int));
  34. int i386_set_ldt __P((int, union descriptor *, int));
  35. int i386_get_ioperm __P((unsigned int, unsigned int *, int *));
  36. int i386_set_ioperm __P((unsigned int, unsigned int, int));
  37. int i386_vm86 __P((int, void *));
  38. int i386_set_watch __P((int watchnum, unsigned int watchaddr, int size,
  39. int access, struct dbreg * d));
  40. int i386_clr_watch __P((int watchnum, struct dbreg * d));
  41. }
  42. Function IOPerm(From,Num:CARDINAL;Value:Longint):boolean;
  43. var sg : i386_ioperm_args;
  44. sa : sysarch_args;
  45. begin
  46. sg.start:=From;
  47. sg.length:=Num;
  48. sg.enable:=value;
  49. sa.op:=i386_SET_IOPERM;
  50. sa.parms:=@sg;
  51. IOPerm:=do_syscall(syscall_nr_sysarch,longint(@sa))=0;
  52. LinuxError:=ErrNo;
  53. end;