home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / lang / c / 12293 < prev    next >
Encoding:
Internet Message Format  |  1992-08-13  |  1.9 KB

  1. Xref: sparky comp.lang.c:12293 rec.games.programmer:3403
  2. Path: sparky!uunet!olivea!bu.edu!wang!smayo
  3. From: smayo@wang.com (Scott Mayo)
  4. Newsgroups: comp.lang.c,rec.games.programmer
  5. Subject: Need help with Microsoft C calling sequence & interrupts
  6. Message-ID: <bsxs77.67g@wang.com>
  7. Date: 13 Aug 92 19:16:18 GMT
  8. Sender: news@wang.com
  9. Organization: Wang Labs, Lowell MA, USA
  10. Lines: 32
  11.  
  12. Please mail responses (to smayo@wang.com). This question goes to folk
  13. who are familiar with Large model C as done by the Microsoft Compiler,
  14. and with DOS and PC interrupts. Apologies, if this is not exactly the
  15. right newsgroup.
  16.  
  17. I am using the C runtime _dos_getvect() and _dos_setvect() calls to
  18. snag an interrupt on the PC, and provide my own handler (0x9, the keyboard,
  19. if you are curious, but the question applies to any interrupt). As far
  20. as I know, you can't code inline assembly in Microsoft's C, and I'm
  21. not an ASM programmer anyway. I can hook the interrupt easily
  22. enough. _setvect works just fine.
  23.  
  24. At the end of my interrupt handler, though, I need to pass control to
  25. the previous handler of the interrupt - which is BIOS in this case. I
  26. have the address to jump to, courtesy of my call to _getvect. I just don't
  27. seem to have any way to *get* there. If I *call* through the pointer,
  28. I seem, not too suprisingly, to end up with an eventual stack overflow. But I
  29. have no way to JMP there, which is probably what this situation calls for.
  30.  
  31. If I wedge the address into the right place on the stack, and just let
  32. my interrupt routine pick up the address as it returns, will it work?
  33. (I have my doubts - I imagine my interrupt routine ends with an IRET).
  34.  
  35. Is there some evil trickery I can do with longjmp() to get to the right
  36. place? (Again, I have doubts).
  37.  
  38. Is there a sane way to do this, or do I simply have to use ASM to do this
  39. right? Thanks for any information - please mail responses.
  40. --
  41. The moment you step into the world of facts, you step into a world of
  42. limits.            GKChesterton
  43. smayo@wang.com
  44.