home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / UTILITY / MONITOR.M < prev    next >
Encoding:
Text File  |  1990-09-25  |  3.0 KB  |  109 lines

  1. MODULE Monitor;
  2. (*$L-*)
  3.  
  4. (*
  5.  * Dieses Modul zeigt, wie man einen residenten Debugger, wie z.B. TEMPLEMON,
  6.  * automatisch bei jedem Start eines Moduls aufrufen lassen kann, um dann
  7.  * beispielsweise Haltepunkte (Breakpoints) zu setzen.
  8.  *)
  9.  
  10. FROM Loader IMPORT Monitor;
  11.  
  12. FROM ModCtrl IMPORT InstallModule, ReleaseModule, FirstModuleStart;
  13.  
  14. FROM MOSGlobals IMPORT MemArea;
  15.  
  16. FROM SYSTEM IMPORT ASSEMBLER;
  17.  
  18. VAR oldV: PROC;
  19.     wsp: MemArea;
  20.  
  21.  
  22. CONST   RegD0 = 04;
  23.         RegD1 = 08;
  24.         RegD2 = 12;
  25.         RegD3 = 16;
  26.         RegD4 = 20;
  27.         RegD5 = 24;
  28.         RegD6 = 28;
  29.         RegD7 = 32;
  30.         RegA0 = 36;
  31.         RegA1 = 40;
  32.         RegA2 = 44;
  33.         RegA3 = 48;
  34.         RegA4 = 52;
  35.         RegA5 = 56;
  36.         RegA6 = 60;
  37.         RegA7 = 64;
  38.         RegSR = 02;
  39.         RegPC = 68;
  40.         RegUSP = 72;
  41.         RegSSP = 76;
  42.         RegBEV = 80;
  43.         RegAEV = 84;
  44.  
  45. PROCEDURE trc;
  46.   BEGIN
  47.     ASSEMBLER
  48.         ; Diese Routine wird von TEMPLEMON regelmäßig im Trace-Modus
  49.         ; aufgerufen.
  50.         ; In A0 erhält sie einen Zeiger auf die - geretteten - CPU-
  51.         ; Register. Die obigen Konstanten können benutzt werden, um
  52.         ; auf sie zuzugreifen.
  53.         ; In D0.B muß die Routine einen Wert ungleich Null liefern, wenn
  54.         ; der Trace-Modus unterbrochen werden soll.
  55.         ;
  56.         ; Als (fiktives) Beispiel wird überwacht, daß die Register
  57.         ; D4 und D5 nicht den gleichen Wert enthalten.
  58.  
  59.         MOVE.L  RegD4(A0),D0
  60.         CMP.L   RegD5(A0),D0
  61.         SEQ     D0              ; wenn D4=D5, dann wird D0.B zu $FF, sonst $00
  62.     END
  63.   END trc;
  64.  
  65. PROCEDURE mon;
  66.   BEGIN
  67.     ASSEMBLER
  68.         ; Diese Routine wird beim Start eines Moduls aufgerufen.
  69.         ;
  70.         ; Man gelangt dann in den TEMPLEMON, der natürlich installiert
  71.         ; sein muß, wo mit "BU RD0" der User-Trace-Vektor auf die
  72.         ; Funktion 'trc' (oben) gesetzt werden kann.
  73.         ; Dann kann mit "T+" der Trace-Modus aktiviert und mit "G" und
  74.         ; der Taste /A/ das Programm im Trace-Modus gestartet werden.
  75.         ; (Näheres siehe TEMPLEMON-Dokumentation)
  76.         ;
  77.         ; Natürlich kann auch auf die obige User-Trace-Routine verzichtet
  78.         ; werden und stattdessen z.B. das geladene Programm disassembliert
  79.         ; werden.
  80.  
  81.         MOVE.L    #trc,D0
  82.         BREAK
  83.     END
  84.   END mon;
  85.  
  86. PROCEDURE restore;
  87.   BEGIN
  88.     Monitor:= oldV
  89.   END restore;
  90.  
  91. BEGIN
  92.   IF FirstModuleStart () THEN
  93.     (*
  94.      * Die Prozedur 'mon' wird so installiert, daß sie bei jedem folgenden
  95.      * Start eines Moduls (über den Loader) aufgerufen wird.
  96.      *)
  97.     oldV:= Monitor;              (* alten Vektor retten *)
  98.     Monitor:= mon;               (* Routine 'mon' installieren *)
  99.     wsp.bottom:= NIL;
  100.     InstallModule (restore,wsp)  (* Dieses Modul resident machen *)
  101.   ELSE
  102.     (*
  103.      * Beim zweiten Start dieses Programms wird wieder alles abgemeldet.
  104.      *)
  105.     restore;
  106.     ReleaseModule
  107.   END
  108. END Monitor.
  109.