home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / SYSTEM.DOC < prev    next >
Encoding:
Modula Definition  |  1989-09-25  |  3.2 KB  |  102 lines

  1. DEFINITION MODULE System;
  2.  
  3. (*
  4.  * Definitionen, die später im internen SYSTEM-Modul definiert
  5.  * sein werden, um portablere Low-Level-Implementationen vor-
  6.  * nehmen zu können.
  7.  *)
  8.  
  9. IMPORT SYSTEM;
  10.  
  11. TYPE
  12.  
  13.   LOC = SYSTEM.BYTE;            (* Basis-Größe aller Daten (hier: 8 Bit) *)
  14.                                 (* TSIZE (LOC) = 1 (definitionsgemäß)!   *)
  15.  
  16.   ADDRESS = POINTER TO LOC;     (* Adreß-Arithmetik nur mögl. mit Funk-  *)
  17.                                 (* tionen INC-/DEC-/DIFADR (s.u.)!       *)
  18.  
  19. CONST
  20.  
  21.   LOCsperBYTE = 1;
  22.   LOCsperWORD = 2;
  23.   BITNUM = 16;
  24.  
  25. PROCEDURE INCADR ( addr: ADDRESS; offset: LONGCARD ): ADDRESS;
  26.   (*
  27.    * Addiert einen Offset zu einer Adresse.
  28.    *)
  29.  
  30. PROCEDURE DECADR ( addr: ADDRESS; offset: LONGCARD ): ADDRESS;
  31.   (*
  32.    * Subtrahiert einen Offset von einer Adresse.
  33.    *)
  34.  
  35. PROCEDURE DIFADR ( from, sub: ADDRESS ): LONGINT;
  36.   (*
  37.    * Bildet die Differenz zw. zwei Adressen.
  38.    *
  39.    * Ist 'from' größer als 'sub', wird ein positiver Wert geliefert
  40.    *)
  41.  
  42. PROCEDURE SHIFT ( VAR val: ARRAY OF LOC; n: INTEGER );
  43.   (*
  44.    * Ist 'n' positiv, wird 'val' mit '2^n' multipliziert, ansonsten
  45.    * dadurch dividiert.
  46.    *
  47.    * Beispiel:
  48.    *   SHIFT ( 5, 2 ) ergibt 20
  49.    *
  50.    * ACHTUNG: Bei allen Arten von SETs (auch BITSET) muß die Funktion
  51.    *          SHIFTSET verwendet werden!
  52.    *)
  53.  
  54. PROCEDURE SHIFTSET ( VAR set: ARRAY OF LOC; bits: CARDINAL; n: INTEGER );
  55.   (*
  56.    * Wie SHIFT, jedoch für SETs. Hier muß zusätzlich die Breite in Bits
  57.    * des übergebenen Sets in 'bits' angegeben werden (Bei 'BITSET' ist das
  58.    * die Konstante 'BITsperBITSET', bei einem 'SET OF [3..7]' wäre es '5').
  59.    *
  60.    * Die besondere interne Darstellung von SETs beim Megamax Modula wird
  61.    * hierbei berücksichtigt (die Set-Elemente werden auf ihren logischen
  62.    * Positionen verschoben).
  63.    *
  64.    * Beispiel:
  65.    *   SHIFTSET ( BITSET {0,9,15}, BITsperBITSET, 2 ) ergibt BITSET {2,11}
  66.    *
  67.    * Diese Hilfsfunktion ist nur notwendig, solange sich SHIFT noch nicht
  68.    * im internen SYSTEM-Modul befindet.
  69.    *)
  70.  
  71. PROCEDURE ROTATE ( VAR val: ARRAY OF LOC; n: INTEGER );
  72.   (*
  73.    * Ist 'n' positiv, werden die Bits in 'val' 'n' mal in höhere
  74.    * Positionen gerollt (oben überlaufende Bits werden unten wieder
  75.    * eingeschoben), bei negativem 'n' geht's abwärts.
  76.    *
  77.    * Beispiel:
  78.    *   ROTATE ( $410F, -1 ) ergibt $A087
  79.    *
  80.    * ACHTUNG: Bei allen Arten von SETs (auch BITSET) muß die Funktion
  81.    *          ROTATESET verwendet werden!
  82.    *)
  83.  
  84. PROCEDURE ROTATESET ( VAR set: ARRAY OF LOC; bits: CARDINAL; n: INTEGER );
  85.   (*
  86.    * Wie ROTATE, jedoch für SETs. Hier muß zusätzlich die Breite in Bits
  87.    * des übergebenen Sets in 'bits' angegeben werden (Bei 'BITSET' ist das
  88.    * die Konstante 'BITsperBITSET', bei einem 'SET OF [3..7]' wäre es '5').
  89.    *
  90.    * Die besondere interne Darstellung von SETs beim Megamax Modula wird
  91.    * hierbei berücksichtigt (die Set-Elemente werden auf ihren logischen
  92.    * Positionen verschoben).
  93.    *
  94.    * Beispiel:
  95.    *   ROTATESET ( BITSET {0,9,15}, BITsperBITSET, 2 ) ergibt BITSET {1,2,11}
  96.    *
  97.    * Diese Hilfsfunktion ist nur notwendig, solange sich ROTATE noch nicht
  98.    * im internen SYSTEM-Modul befindet.
  99.    *)
  100.  
  101. END System.
  102. ə