SECTION 19 - Protected Mode Programming This document contains information that is most often provided to users of this section. There is a listing of common Technical Information Documents that can be downloaded from the libraries, and a listing of the five most frequently asked questions and their answers. TI1184 Overview of Borland Pascal 7.0 and Turbo Pascal 7.0 TI1722 Declaring an array on the heap TI1760 Creating a temporary stack in real or protected mode TI1188 Creating protected mode apps with Borland Pascal TI1171 Problem Report Form TI1719 Booting Clean NEWRTM.ZIP Latest RTM.EXE and DPMI16BI.OVL PASALL.ZIP Collection of Technical Information sheets from 1986 on EZDPMI.ZIP Unit encapsulating all common DPMI requirements for protected mode programming BIGSTU.PAS How to cope with memory allocations > 64K MOUSE.ZIP General Purpose mouse unit for text/graphics mode Q. "When using the BP7 IDE to compile a protected mode application, how do I step through the code like I do with real mode applications?" A. To debug protected mode programs, you must use the external debugger (TDX). You can put it on the TOOLS menu to make it just a keystroke away. Q. "When I convert a program from Real Mode to Protected Mode, do I have to change the GetMem calls to GlobalAlloc and GlobalDiscard?" A. No, you don't have to change the GetMem calls. GetMem is a better allocation method. Getmem will do a better job of allocating memory. It allocates the memory in 8K chunks, then suballocates from that. The reason for this is that there are a maximum of 2000 selectors availble in BP7, so you don't want to waste them. GlobalAlloc calls the DPMI directly to allocate the memory, bypassing the heap manager. GlobalAlloc is there for when you need to bypass the heap manager for some reason, but you normally don't want to do that. Q. "How do I profile a protected mode application using BP7?" A. You can only profile real mode applications, Borland does not supply a protected mode profiler. Q. "I have ported a large program to protected mode and am getting a General Protection Fault on calls to GetMem. What could be causing this?" A. In DPMI, a Local Descriptor Table (LDT) can contain 8192 selectors. The Run Time Manager (RTM) maintains an internal table to track allocated selectors. The RTM table has a capacity of approximately 2K selectors. GlobalAlloc and GetMem calls that need to allocate a new block will fail when that 2K table is full. Q. "I have a protected mode application that was created with BP7. When running the program in a DOS box under Windows, the computer locks up. What could be causing this?" A. Check the "XMS KB Required" and "XMS KB Limit" settings in the .PIF file used for the DOS box. The "Required" setting should be 0 and the "Limit" should be at least 2048K.