home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / modula2 / hk_lib / def_mod / machine.def < prev    next >
Encoding:
Modula Definition  |  1994-09-22  |  4.4 KB  |  93 lines

  1. DEFINITION MODULE  MACHINE;
  2.  
  3. (*****************************************************************************)
  4. (* Dieses Modul ist nur was fuer Spezialisten; da diese ohnehin wissen soll- *)
  5. (* ten, was mit diesen Prozeduren angerichtet werden kann, folgt hier auch   *)
  6. (* keine grosse Erlaeuterung...                                              *)
  7. (*___________________________________________________________________________*)
  8. (*    05-Mae-90 , Holger Kleinschmidt                                        *)
  9. (*****************************************************************************)
  10.  
  11. FROM  SYSTEM  IMPORT  (* TYPE *) BYTE, ADDRESS;
  12.  
  13. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  14.  
  15. TYPE
  16.        CPUMode = ( USER, SUPERVISOR );
  17.  
  18.        IRLevel = ( IPL0, IPL1, IPL2, IPL3, IPL4, IPL5, IPL6, IPL7 );
  19.  
  20. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  21.  
  22.  
  23.   PROCEDURE  ReadSysMem  ((* EIN/ -- *)     adr  : LONGCARD;
  24.                           (* -- /AUS *) VAR wert : ARRAY OF BYTE );
  25.  
  26.   PROCEDURE  WriteSysMem ((* EIN/ -- *) adr  : LONGCARD;
  27.                           (* EIN/ -- *) wert : ARRAY OF BYTE );
  28.  
  29.  (*-------------------------------------------------------------------------
  30.   | Mithilfe dieser Prozeduren kann auf RAM-Bereiche zugegriffen werden, die|
  31.   | nur im Supervisormodus der CPU zugaenglich sind, also der Bereich der   |
  32.   | Systemvariablen.                                                        |
  33.   | <adr> darf ungerade sein; es ist egal, in welchem Modus die CPU beim    |
  34.   | Aufruf dieser Prozeduren ist. Es werden  HIGH( wert )+1 Bytes  ueber-   |
  35.   | tragen.                                                                 |
  36.    -------------------------------------------------------------------------*)
  37.  
  38.  
  39.   PROCEDURE  BREAKPOINT; CODE( 4E4AH );
  40.  
  41.  (*-------------------------------------------------------------------------
  42.   | Solange das MODULA-System unter Kontrolle des Laders laeuft, fuehrt     |
  43.   | TRAP #10 zur Unterbrechung des Programms mit Moeglichkeit zum Aufruf    |
  44.   | des Debuggers; scheint die gleiche Wirkung wie ein HALT zu haben.       |
  45.    -------------------------------------------------------------------------*)
  46.  
  47. (*===========================================================================
  48.  
  49.   Die folgenden Prozeduren sind nur was fuer Leute, die genau wissen,
  50.   was sie damit erreichen wollen !!
  51.  
  52.   ===========================================================================*)
  53.  
  54.  
  55.   PROCEDURE  CurrentCPUMode ( ): CPUMode;
  56.  
  57.  (*-------------------------------------------------------------------------
  58.   | Liefert den momentanen CPU-Modus                                        |
  59.    -------------------------------------------------------------------------*)
  60.  
  61.  
  62.   PROCEDURE  SuperOn;
  63.  
  64.   PROCEDURE  SuperOff;
  65.  
  66.  (*-------------------------------------------------------------------------
  67.   | Schalten den Supervisormodus ein bzw. aus.                              |
  68.   | Die beiden Prozeduren duerfen nur auf einer Ebene als 'Klammer' benutzt |
  69.   | werden, d.h. innerhalb einer Prozedur: "SuperOn"..."SuperOff". Innerhalb|
  70.   | dieses priviligierten Abschnitts duerfen also auch keine Prozeduren     |
  71.   | aufgerufen werden, die selber den Modus aendern, denn mit dem ersten    |
  72.   | auftretenden "SuperOff" ist wieder der Usermodus eingeschaltet.         |
  73.    -------------------------------------------------------------------------*)
  74.  
  75.  
  76.   PROCEDURE  CurrentIRLevel ( ): IRLevel;
  77.  
  78.   PROCEDURE  SetIRLevel ((* EIN/ -- *) irlevel : IRLevel );
  79.  
  80.  (*-------------------------------------------------------------------------
  81.   | Fragt die aktuelle Prioritaetsebene der CPU ab, bzw. setzt sie.         |
  82.   | Mit IPL6 bzw. IPL7 koennen z.B. saemtliche Interrupts unterbunden wer-  |
  83.   | den: wird der IR-Level allerdings nachher nicht wieder auf IPL3 runter- |
  84.   | gesetzt, kann man sich auch aus dem System ausblenden - auf den Tasta-  |
  85.   | tur-IR wird dann naemlich auch nicht mehr reagiert...                   |
  86.   | Mit IPL1 koennen die Horizantalblank-IRs des Videochips zugelassen wer- |
  87.   | den - da hierdurch vor allem bei Schwarzweiss-Monitor ein erheblicher   |
  88.   | Teil der CPU-Kapazitaet beansprucht wird, laeuft alles im Schnecken-    |
  89.   | tempo ab.                                                               |
  90.    -------------------------------------------------------------------------*)
  91.  
  92. END  MACHINE.
  93.