SYSTEM.DEF 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * SYSTEM.DEF - Modula-2 system-dependent definitions *
  5. * *
  6. * COPYRIGHT (C) 1987..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. (*# call(o_a_copy => on,
  11. o_a_size => on) *)
  12. (*%F _fdata *)
  13. (*# call(seg_name => null) *)
  14. (*# data(seg_name => null) *)
  15. (*%E *)
  16. (*# module(implementation=>off) *)
  17. DEFINITION MODULE SYSTEM;
  18. TYPE
  19. PROCESS = FarADDRESS;
  20. CONST
  21. ADDRESS ::= ADDRESS; ADR ::= ADR; SIZE ::= SIZE;
  22. TSIZE ::= SIZE; WORD ::= WORD; BYTE ::= BYTE;
  23. SHORTADDR ::= SHORTADDR; LONGWORD ::= LONGWORD;
  24. Seg ::= Seg; Ofs ::= Ofs;
  25. FarADDRESS ::= FarADDRESS; NearADDRESS ::= NearADDRESS;
  26. FarADR ::= FarADR; NearADR ::= NearADR;
  27. FarNIL ::= FarNIL; NearNIL ::= NearNIL;
  28. (*%T _fcall *)
  29. Ret = 0CBH;
  30. (*%E *)
  31. (*%F _fcall *)
  32. Ret = 0C3H;
  33. (*%E *)
  34. TYPE
  35. Registers = RECORD
  36. CASE : BOOLEAN OF
  37. | TRUE : AX,BX,CX,DX,BP,SI,DI,DS,ES : CARDINAL;
  38. Flags : BITSET;
  39. | FALSE : AL,AH,BL,BH,CL,CH,DL,DH : SHORTCARD;
  40. END;
  41. END;
  42. CONST
  43. CarryFlag = 0;
  44. ZeroFlag = 6;
  45. VAR
  46. HeapBase : CARDINAL; (* Base segment of heap *)
  47. (*# save *)
  48. (*# call(near_call=>off, reg_saved=>(ds,si,di,st1,st2), reg_param=>(),seg_name=>PROC) *)
  49. (*# data(near_ptr=>off) *)
  50. (* Under MSDOS These are in CoreProc *)
  51. PROCEDURE NEWPROCESS(P: PROC; A: FarADDRESS; S: CARDINAL; VAR P1: FarADDRESS);
  52. PROCEDURE TRANSFER (VAR P1,P2: FarADDRESS);
  53. PROCEDURE IOTRANSFER (VAR P1,P2: FarADDRESS; I: CARDINAL); (* Only Timer (I=8) supported under OS/2 *)
  54. PROCEDURE CurrentProcess():ADDRESS;
  55. PROCEDURE initprocess();
  56. PROCEDURE CurrentPriority() : CARDINAL;
  57. PROCEDURE NewPriority(PR: CARDINAL);
  58. PROCEDURE Listen(Mask: BITSET);
  59. PROCEDURE InterruptRegisters(P: FarADDRESS): FarADDRESS;
  60. (*# restore *)
  61. TYPE A3=ARRAY [0..2] OF SHORTCARD;
  62. TYPE A2=ARRAY [0..1] OF SHORTCARD;
  63. TYPE A1=ARRAY [0..0] OF SHORTCARD;
  64. (*# save,
  65. call( reg_param=>(dx,ax),
  66. reg_saved=>(dx,ax,bx,cx,si,di,es,ds,st1,st2),
  67. inline=>on )
  68. *)
  69. INLINE PROCEDURE Out (p:CARDINAL;v:SHORTCARD)=A2(0EEH, Ret);
  70. INLINE PROCEDURE OutW(p:CARDINAL;v:CARDINAL )=A2(0EFH, Ret);
  71. (*# call( reg_param=>(dx),
  72. reg_saved=>(dx,bx,cx,si,di,es,ds,st1,st2)) *)
  73. INLINE PROCEDURE In (p:CARDINAL):SHORTCARD=A2(0ECH, Ret);
  74. INLINE PROCEDURE InW(p:CARDINAL):CARDINAL =A2(0EDH, Ret);
  75. (*# call( reg_param=>(ax),
  76. reg_saved=>(dx,bx,cx,si,di,es,ds,st1,st2)) *)
  77. INLINE PROCEDURE GetFlags():CARDINAL=A3(9CH, 58H, Ret);
  78. INLINE PROCEDURE SetFlags(F: CARDINAL)=A3(50H, 9DH, Ret);
  79. (*# call( reg_param=>(ax,bx,cx,dx,st1,st2),
  80. reg_saved=>(dx,bx,cx,si,di,es,ds,st0,st1,st2,st2,st3,st4,st5,st6)) *)
  81. INLINE PROCEDURE Eval(Result: ARRAY OF BYTE)=A1(Ret);
  82. (* Discards function result *)
  83. (*# call( reg_param=>(),
  84. reg_saved=>(ax,dx,bx,cx,si,di,es,ds,st1,st2)) *)
  85. INLINE PROCEDURE DI()=A2(0FAH, Ret);
  86. INLINE PROCEDURE EI()=A2(0FBH, Ret);
  87. (*# restore *)
  88. END SYSTEM.
  89.