I386.EFIMachine.Mod 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. MODULE EFIMachine; (** AUTHOR ""; PURPOSE ""; *)
  2. IMPORT SYSTEM, EFI;
  3. (* I386.Machine.Mod uses following registers as arguments:
  4. eax : bootFlag (= address of boot table)
  5. esi : ?
  6. edi : address of frame buffer
  7. *)
  8. PROCEDURE JumpTo*(adr : ADDRESS; eax,esi,edi, ecx, edx: LONGINT);
  9. CODE {SYSTEM.i386}
  10. XOR ECX,ECX
  11. XOR EDX,EDX
  12. MOV EDI, [EBP+edi];
  13. MOV ESI, [EBP+esi];
  14. MOV EAX, [EBP+eax];
  15. MOV ECX, [EBP+ecx];
  16. MOV EDX, [EBP+edx];
  17. MOV EBX, [EBP+adr];
  18. CALL EBX
  19. END JumpTo;
  20. PROCEDURE Portin8*(port: LONGINT; VAR val: CHAR);
  21. CODE{SYSTEM.i386}
  22. MOV EDX,[EBP+port]
  23. IN AL, DX
  24. MOV ECX, [EBP+val]
  25. MOV [ECX], AL
  26. END Portin8;
  27. PROCEDURE Portin16*(port: LONGINT; VAR val: INTEGER);
  28. CODE{SYSTEM.i386}
  29. MOV EDX,[EBP+port]
  30. IN AX, DX
  31. MOV ECX, [EBP+val]
  32. MOV [ECX], AX
  33. END Portin16;
  34. PROCEDURE Portin32*(port: LONGINT; VAR val: LONGINT);
  35. CODE{SYSTEM.i386}
  36. MOV EDX,[EBP+port]
  37. IN EAX, DX
  38. MOV ECX, [EBP+val]
  39. MOV [ECX], EAX
  40. END Portin32;
  41. PROCEDURE Portout8*(port: LONGINT; val: CHAR);
  42. CODE{SYSTEM.i386}
  43. MOV AL,[EBP+val]
  44. MOV EDX,[EBP+port]
  45. OUT DX,AL
  46. END Portout8;
  47. PROCEDURE Portout16*(port: LONGINT; val: INTEGER);
  48. CODE{SYSTEM.i386}
  49. MOV AX,[EBP+val]
  50. MOV EDX,[EBP+port]
  51. OUT DX,AX
  52. END Portout16;
  53. PROCEDURE Portout32*(port: LONGINT; val: LONGINT);
  54. CODE{SYSTEM.i386}
  55. MOV EAX,[EBP+val]
  56. MOV EDX,[EBP+port]
  57. OUT DX,EAX
  58. END Portout32;
  59. PROCEDURE -GetParameter (offset: LONGINT): LONGINT;
  60. CODE {SYSTEM.i386}
  61. POP EAX
  62. MOV EAX, [EBP+EAX]
  63. END GetParameter;
  64. BEGIN
  65. SYSTEM.PUT32 (ADDRESSOF (EFI.imageHandle), GetParameter (12));
  66. SYSTEM.PUT32 (ADDRESSOF (EFI.table), GetParameter (16));
  67. END EFIMachine.