delorie.com/djgpp/faq/lowlevel/unsup.html   search  
Why does my program crash with ``Unsupported DOS request 0xNN'' or ``Unsupported INT 0xNN'' when I call int86() or intdos() functions to invoke a software interrupt?

Calling real-mode DOS or BIOS services from protected-mode program requires a switch to real mode, so go32 catches the int instruction and tries to reissue it after the mode switch. However, some services require pointers to memory buffers. Real-mode DOS/BIOS functions can only access buffers in conventional memory, so go32 has to move data between your program and low memory to transparently support these services. But this means it should know about all these services to perform these chores correctly. While go32 supports many of these services, it doesn't support all of them. For those it doesn't support, you will have to call the _go32_dpmi_simulate_int() library function instead. It is documented in the libcref.i Info file (get and unzip the file djdocXXX.zip, then type

  info libc.a alpha _go32_dpmi_simulate_int
In fact, it's best to always call _go32_dpmi_simulate_int(): this way you can be sure it will work no matter what services are supported by go32. _go32_dpmi_simulate_int() requires that you set up all the data as required by the service you are calling, including moving the data to and from low memory.


  webmaster     delorie software   privacy  
  Copyright © 1995     Updated Feb 1995