home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / dev / m2 / CycloneModules.lha / modules / txt / NoGuru.mod < prev    next >
Text File  |  1996-11-28  |  2KB  |  79 lines

  1. IMPLEMENTATION MODULE NoGuru;
  2.  
  3. (* (C) Copyright 1993 Marcel Timmermans. All rights reserved. *)
  4.  
  5. FROM SYSTEM    IMPORT ASSEMBLE,ADDRESS,ADR,CAST,REG,LONGSET,SETREG;
  6. FROM ModulaLib IMPORT thisTask,TerminateRequester;
  7. IMPORT ED: ExecD;
  8.  
  9. (*$ CaseTab- *)
  10.  
  11. PROCEDURE TrapHandler;
  12. VAR ErrMsg  : ARRAY[0..25] OF CHAR;
  13. BEGIN
  14.  CASE TrapInfo.TrapNr OF
  15.     02H : ErrMsg:="Bus error";
  16.   | 03H : ErrMsg:="Address error";
  17.   | 04H : ErrMsg:="Illegal instruction";
  18.   | 05H : ErrMsg:="Zero divide";
  19.   | 06H : ErrMsg:="Rangecheck error (CHK)";
  20.   | 07H : ErrMsg:="Overflow error (TPAPV)"
  21.   | 08H : ErrMsg:="Privilege error";
  22.   | 09H : ErrMsg:="Trace";
  23.   | 0AH : ErrMsg:="Line 1010 emulator";
  24.   | 0BH : ErrMsg:="Line 1111 emulator";
  25.   | 20H : ErrMsg:="illegal CASE-index";
  26.   | 21H : ErrMsg:="Pointer is NIL";
  27.   | 22H : ErrMsg:="Overflow";
  28.   | 23H : ErrMsg:="Stack Overflow!";
  29.   | 24H : ErrMsg:="Return Failure!";
  30.   | 25H : ErrMsg:="Range error!";
  31.  ELSE
  32.   ErrMsg:="Trap error nr 00H";
  33.   WITH TrapInfo DO
  34.    INC(ErrMsg[14],SHORTINT(TrapNr DIV 16)); IF ((TrapNr DIV 16)>9) THEN INC(ErrMsg[14],7) END;
  35.    INC(ErrMsg[15],SHORTINT(TrapNr MOD 16)); IF ((TrapNr MOD 16)>9) THEN INC(ErrMsg[15],7) END;
  36.   END;
  37.  END;
  38.   TerminateRequester(ADR(ErrMsg));
  39. END TrapHandler;
  40.  
  41.  
  42.  
  43. PROCEDURE TrapProc;
  44. (*$ EntryExitCode- *)
  45. BEGIN
  46.     ASSEMBLE(
  47.      MOVEM.L  A0-A6,-(A7)
  48.      LEA      TrapInfo.DRegs(A4),A2
  49.      LEA      TrapInfo.ARegs(A4),A3
  50.      MOVEM.L  D0-D7,(A2)
  51.      MOVEM.L  (A7)+,D0-D6
  52.      MOVEM.L  D0-D6,(A3)
  53.      MOVE.L   (A7),TrapInfo.TrapNr(A4)
  54.      LEA      TrapHandler(PC),A0
  55.      CMPI.L   #3,TrapInfo.TrapNr(A4)
  56.      BHI.S    n
  57.      MOVE.L   4, A6   //Check for 68010+
  58.      BTST.B   #0, ED.ExecBase.attnFlags+1(A6)
  59.      BNE.S    m
  60.      ADDQ.W   #8,SP
  61. n:
  62.      ADDQ.W   #4,SP
  63. m:
  64.      MOVE.L   2(A7),TrapInfo.pc(A4)
  65.      MOVE.L   A0,2(A7)
  66.      RTE
  67.     END);
  68. END TrapProc;
  69.  
  70. BEGIN
  71.  ASSEMBLE(
  72.     MOVEA.L thisTask(A4),A3
  73.     LEA     TrapProc(PC),A0
  74.     MOVE.L  A0,50(A3)
  75.     END);
  76.  
  77.  (* ModulaStartup Restores always startop TrapProc !!! *)
  78.  
  79. END NoGuru.