home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / lang / c / 12603 < prev    next >
Encoding:
Text File  |  1992-08-20  |  2.7 KB  |  80 lines

  1. Path: sparky!uunet!cs.utexas.edu!usc!sdd.hp.com!hplabs!felix!fritz!scotth
  2. From: scotth@felix.filenet.com (Scott Hopson)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: help REAL TIME CLOCK INTERRUPT
  5. Message-ID: <19687@fritz.filenet.com>
  6. Date: 21 Aug 92 05:58:47 GMT
  7. References: <1992Aug18.043938.20502@cs.uow.edu.au>
  8. Reply-To: scotth@fritz.filenet.com (Scott Hopson)
  9. Organization: FileNet Corp., Costa Mesa, CA
  10. Lines: 68
  11.  
  12. In article <1992Aug18.043938.20502@cs.uow.edu.au> u8800914@cs.uow.edu.au (Mohammad Salim Olime) writes:
  13. >For simulation of an ATM link between to IBM-PC/AT I need to generate
  14. >packets(pay load)  in real time using Turbo C under MS-DOS .
  15. >Interrupt 08h ie the clock tick with a frequency of 18.2 Hz is not 
  16. >fast enough. In C User Journal Dec 1991  I found an article
  17. >by Paul A. Cornelius titled "Using 1KHz Interrupts on AT CLones"
  18. >He discusses a method for generating interrupts at a rate of 1KHz
  19. >using the Real Time clock interrupt (70h) which can be enabled 
  20. >through BIOS INT 15h, function 83h.
  21.  
  22. >> misc deleted <<
  23.  
  24. To an interrupt on the PC running DOS you need to trap the interrupt,
  25. execute your own code, and resume the trapped interrupt or clean up
  26. like the interrupt would. In the case of the TIMER interrupt you can
  27. execute your own code and let the interrupt continue on. If you don't
  28. let the interrupt finish the processing things will get really messed
  29. up. Below is an example of how to VECTOR the INT 70 Real Time Clock 
  30. interrupt.
  31.  
  32. --------------------------------CUT HERE----------------------------------
  33.  
  34. #include <dos.h>
  35.  
  36. static int counter = 0;
  37.  
  38. void interrupt (*old_int70)();        /* save addres of old INT 70 code */
  39.  
  40. void interrupt int70(void)
  41. {
  42.  
  43.     /* perform your own code here */
  44.  
  45.     old_int70();        /* call the original handler */
  46.  
  47. /* if you want to by pass the original handler you will need to perform */
  48. /* the following Magic Rituals inorder to satisfy the god of DOS. */
  49. /*
  50.     outport(0x20,0x20);         send EOI to PIC  
  51. */
  52. /* this call sends an End Of Interrupt to the Programmable Interrupt
  53.    Controler
  54. */
  55. }
  56.  
  57.  
  58. main()
  59. {
  60.  
  61.     old_int70 = getvect(0x70);    /* get and save old handlers address */
  62.     setvect(0x70,int70);    /* set new address for int handler routine */
  63.  
  64.     /* perform work */
  65.  
  66.     setvect(0x70,old_int70);    /* restore original int handler */
  67.     exit(0);            /* before you exit or you'll crash */
  68. }                /* the system */
  69.  
  70. --------------------------------CUT HERE----------------------------------
  71.  
  72.  
  73. This is basically what you need to do, you need to make sure your code
  74. executes within the 1K time slice or the system may begin to slow or
  75. do other strange things. Note that this is a very simple example. You
  76. will need to experiment on your own with your own code.
  77.  
  78. -- 
  79. Scott Hopson   (scotth@filenet.com)
  80.