ericsa@microsoft.UUCP (Eric Sassaman) (09/18/90)
> I recently tried to experience the IOPL segment in OS/2 2.0. By > setting IOPL=YES in the config.sys file. By declairing SEGMENTS > IO_TEXT IOPL in the definition file. Writting an IO_TEXT segment with > priviledge instruction in assembly routine. Made a dummy c file which > essencially calls the assembly routine. Generated an EXE file to run. > The executable always give me a page fault error. Does anybody knows > if the IOPL segment exist and runs reliablly in the OS/2 2.0 > environment(386 CPU). It will be appreciated that if you can tell me > how to write such program. The problem is that port I/O from an OS/2 2.0 32-bit application is only allowed in a ring zero code segment. An IOPL segment runs at ring 2; at this level port I/O is not allowed in a 32-bit application. In order for you to do direct port I/O under OS/2 2.0, you will need to either write your application as 16-bit or write a device driver that runs at ring 0. This device driver can be either 16 bit or 32 bit. Eric Sassaman Microsoft OS/2 Systems Support
n8840371@unicorn.wwu.edu (Todd Crowe) (09/21/90)
ericsa@microsoft.UUCP (Eric Sassaman) writes: >The problem is that port I/O from an OS/2 2.0 32-bit application is >only allowed in a ring zero code segment. An IOPL segment runs at ring >2; at this level port I/O is not allowed in a 32-bit application. In >order for you to do direct port I/O under OS/2 2.0, you will need to >either write your application as 16-bit or write a device driver that >runs at ring 0. This device driver can be either 16 bit or 32 bit. I won't deny that any of this is true, but I *think* it omits an important point. About 6(?) monthes ago in either Computer Language or DR Dobbs there was an article on using IOPL segments to read/write the I/O ports. It mentioned that there was a function that enabled/disabled port access (even to IOPL segments). In OS/2 1.x this function didn't do anything, since the 286 is not able to offer individual I/O ports (and disallow others). But according to the article there were supposed to be required in OS/2 2.0. I think the name of the function was DosEnablePortAccess (or something similar). If this isn't enough information let me know and I can look up the article. +++++++++++++++ "Dont get your hair in an uproar!!!" +++++ +@+++++++++++++ +-----------------------------------------------------+ +++++ +++Western+++++ | Todd Crowe | +++++++Washington+++ | n8840371@unicorn.wwu.edu or TODDC@nessie.wwu.edu | +++++++University+++ | (Finally a real .sig!) | +++++++++++++++++++ +-----------------------------------------------------+ ++++++++++ "There's more than one way to skin a cat..." -- +++++++++++++++ "Dont get your hair in an uproar!!!" +++++ +@+++++++++++++ +-----------------------------------------------------+ +++++ +++Western+++++ | Todd Crowe | +++++++Washington+++ | n8840371@unicorn.wwu.edu or TODDC@nessie.wwu.edu |