home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / misc / emu / AROSdev.lha / AROS / config / m68k-emul / initcore.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-12-11  |  1.4 KB  |  60 lines

  1. /*
  2.     (C) 1995-96 AROS - The Amiga Replacement OS
  3.     $Id: initcore.c,v 1.2 1996/12/11 10:05:51 aros Exp $
  4.  
  5.     Desc: Exec interrupt handling
  6.     Lang: english
  7. */
  8. #include <hardware/intbits.h>
  9. #include <exec/interrupts.h>
  10. #include <exec/execbase.h>
  11. #include <clib/exec_protos.h>
  12. #include <aros/asmcall.h>
  13. #include <signal.h>
  14. #define timeval     linux_timeval
  15. #include <sys/time.h>
  16. #undef timeval
  17.  
  18. void disable(void);
  19. static int sig2inttabl[NSIG];
  20. char supervisor;
  21.  
  22. static void signals(int sig)
  23. {
  24.     struct IntVector *iv;
  25.     supervisor++;
  26.     iv=&SysBase->IntVects[sig2inttabl[sig]];
  27.     AROS_UFC2(void,iv->iv_Code,
  28.         AROS_UFCA(APTR,iv->iv_Data,A1),
  29.         AROS_UFCA(struct ExecBase *,SysBase,A6));
  30.     disable();
  31.     supervisor--;
  32.     if(SysBase->AttnResched&0x8000)
  33.     {
  34.         SysBase->AttnResched&=~0x8000;
  35.         Dispatch();
  36.     }
  37. }
  38.  
  39. void InitCore(void)
  40. {
  41.     static const int sig2int[][2]=
  42.     {
  43.         {   SIGALRM, INTB_VERTB   },
  44.     };
  45.     struct itimerval interval;
  46.     int i;
  47.     struct sigaction sa={ signals, ~0ul, 0, NULL };
  48.  
  49.     for(i=0;i<sizeof(sig2int)/sizeof(sig2int[0]);i++)
  50.     {
  51.         sig2inttabl[sig2int[i][0]]=sig2int[i][1];
  52.         sigaction(sig2int[i][0],&sa,NULL);
  53.     }
  54.  
  55.     interval.it_interval.tv_sec = interval.it_value.tv_sec = 0;
  56.     interval.it_interval.tv_usec = interval.it_value.tv_usec = 1000000/50;
  57.  
  58.     setitimer (ITIMER_REAL, &interval, NULL);
  59. }
  60.