From: "Rob van Berkel" To: Subject: Q: Should I set up a TSS to make a long call to a linear address?? Date: Mon, 11 May 1998 13:07:04 +0200 Message-ID: <000001bd7ccc$edbcfc00$0201a8c0@king> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Importance: Normal Precedence: bulk Hi, Im currently having lotsa trouble with a program that is supposed to find and call the BIOS32 entry point. My program finds the entrypoint (following the guidelines of the Standard BIOS 32-bit Service Directory Proposal), which is a linear pmode address. Next I set up a suitable selector (base, limit and accessrights) and save the entrypoint and the selector in a struct. This causes the struct to hold an 48bit addres suitable to use in an __asm__(lcall (struct_address)) statement. Compiling and running the program results in the following output: +++++ pcibios_init : BIOS32 Service Directory structure at 000fd9f0 pcibios_init : BIOS32 Service Directory entry at 000fda00 Exiting due to signal SIGSEGV General Protection Fault at eip=00001dc1 eax=49435024 ebx=00000000 ecx=00000000 edx=00000005 esi=00055000 edi=000096a0 ebp=0004cec8 esp=0004ce68 program=C:\PROJECTS\MMIO.EXE cs: sel=00a7 base=8331a000 limit=0008ffff ds: sel=00af base=8331a000 limit=0008ffff es: sel=00af base=8331a000 limit=0008ffff fs: sel=00d7 base=c12d5000 limit=0001ffff gs: sel=00bf base=00000000 limit=ffffffff ss: sel=00af base=8331a000 limit=0008ffff Call frame traceback EIPs: 0x00001dc1 +++++ EIP address 00001dc1 is the address where the inline LCALL instruction occurs. With the coding of this part nothing seems to be wrong - I compiled and disassembled the object files to see what instructions the compiler and assembler generated. It was coded as I expected it to be. No matter how I set up the selector that accompanies the 32bit entrypoint, it seems I'm not allowed to make the call. After doing a bit of reading about LDT, GDT and protected mode (in the Intel 386 programmers guide) I get the feeling I should set up my own TSS (task status segment) and use the task-selector instead of the current selector+offset to make the LCALL. Will DPMI allow me to do so? Does anyone out there have any experience in this field? Should I really bother myself with TSS'es etc?? Please try and help me out. TIA Rob.