PRODUCT : Borland C++ NUMBER : 1336 VERSION : 3.x OS : DOS DATE : October 26, 1993 PAGE : 1/4 TITLE : Using DPMIINST to configure BC/TC's DPMI extender. What is DPMI? What is DPMIINST? When must I run DPMIINST? =========================================================== What is DPMI? ============= Beginning with Borland C++ 3.0, our products make use of the protected mode mechanism of the 80286 and 80386 processors. This allows the compiler to access all of your computers extended memory, and compile larger programs. Your computer's operating system ( ie DOS ) does not run in protected mode, instead it operates in real mode. In order for our compiler to run in protected mode, and still have access to all the functionality of DOS, it needs to switch in and out of protected mode while running. A standard was created that allows applications to do just that. This standard is called DPMI ( DOS Protected Mode Interface ) and was developed with the cooperation of many software vendors, including Borland. What is DPMIINST? ================= Not all machines access their protected memory in the same way. Because of this, protected mode programs must be configured for each machine they are run on. ( NOTE: The discrepancy amoung various machines traces back to the fact the IBM-Compatible have subtle differences in their BIOS ) DPMIINST analyzes your machine and updates a database that is read by the compiler. The DPMIINST utility analyzes your machine to determine the following: - How to switch in and out of protected mode - How to access your extended memory - How to manipulate the A20 line. (The A20 line is related to extended memory usage) This information gathered by DPMIINST is stored in the file DPMI16BI.OVL, which is located in the \BIN directory where the compiler is installed. When must I run DPMIINST? ========================= PRODUCT : Borland C++ NUMBER : 1336 VERSION : 3.x OS : DOS DATE : October 26, 1993 PAGE : 2/4 TITLE : Using DPMIINST to configure BC/TC's DPMI extender. It is recommended that DPMIINST be run once after installing the compiler. Failure to do so could result in error messages such as: Exception 13 (or 0D): General protection fault. Furthermore the compiler will explicitly indicate the need to run the utility if the current machine's information is not found in the shipping database. Requirements for running DPMIINST? ================================== DPMIINST will not run properly if certain memory managers are loaded. It is best to boot your machine clean (without any 386-type memory managers, device drivers, or TSR's) and then run DPMIINST. NOTE: HIMEM.SYS is not a 386-specifi memory manager and is generally ok to leave in your CONFIG.SYS. With some systems we've noticed that HIMEM.SYS can correct BIOS incompatibilities. After booting clean, change into the \BIN directory where the compiler is installed, and type DPMIINST. Upon startup, DPMIINST should display the following: DPMIINST will periodically ask you to type a key in order to verify that your keyboard is still working. If the keyboard appears to be dead, please reboot the machine and run DPMIINST again. A checkpoint file is used to restart DPMIINST beyond the failing test. Proceed? (space to continue, control-C to quit): If successfull, DPMIINST will display a message that is has updated the database. It may also list a file which you can send to us. This file contains information specific to your machine that we can include in later releases of our machine database. DPMIINST may display various other messages and not proceed to analyze the machine. Let's look at the various possible messages: - "DPMIINST: cannot find DPMI16BI file: DPMI16BI.OVL" PRODUCT : Borland C++ NUMBER : 1336 VERSION : 3.x OS : DOS DATE : October 26, 1993 PAGE : 3/4 TITLE : Using DPMIINST to configure BC/TC's DPMI extender. This simply means you didn't change to the \BIN directory before running DPMIINST. DPMIINST expects this file DPMI16BI.OBJ to be in the current directory. - "A20 was already enabled, so test is meaningless" or "Cannot find a method to enable A20" The A20 line ( address line 20 ) controls access to the high memory area ( 64K memory above the 1MB mark ) and extended memory. If you have DOS loaded high, then DPMIINST cannot access the A20 line, and will generate an error. The simplest way to solve this problem is to remove the line "DOS=HIGH" from your CONFIG.SYS file. Then reboot and try DPMIINST again. After DPMIINST runs to completion, you can add the "DOS=HIGH" line back to your CONFIG.SYS file. Another possible cause of this error is that your machine does not have more than 1Meg of memory. The A20 line is not present unless your machine contains more than 1Meg of memory. - "This machine is running an expanded memory manager that supports the Virtual Control Program Interface. As long as that program (QEMM, 386max) remains in the system, you do not need to configure DPMI16BI.OVL." Although the presence of a VCPI memory manager may not require that you run DPMIINST, we recommend that you temporarily disable the memory manager and run DPMIINST. After successfully runing DPMIINST, you may restore your system's original settings. - What if DPMIINST keeps hanging at a particular checkpoint? This usually happens on older 286 machines. Unfortunately, our compiler may not run on some older hardware, and if DPMIINST cannot run to completion, the compiler will not work. You may be able to fix this by altering certain parameters in your machines CMOS setup. Please refer to your computers documentation on this procedure. - "Machine already in database." PRODUCT : Borland C++ NUMBER : 1336 VERSION : 3.x OS : DOS DATE : October 26, 1993 PAGE : 4/4 TITLE : Using DPMIINST to configure BC/TC's DPMI extender. This means that DPMIINST has identified your machine as one that is already in its database. If you still have problems with the compiler after recieving this message, it is possible that DPMIINST has incorrectly identified your machine. If this happens, you can force DPMIINST to analyze your machine and record the information in it's database. This requires running DPMIINST twice, as follows: First, run DPMIINST with the paramters -a and -v. This tells DPMIINST to run in "analyze only" mode, and in "verbose" mode. "Analyze only" means it will analyze but not write the information to the database. "Verbose" means it will print extra information to the screen. You will be prompted to type in a comment for the database information, type anything you like. Then proceed by pressing the spacebar when prompted. DPMIINST will finish by displaying the following information: Enable A20 method: 02 Disable A20 method: 02 Shutdown method: 04 Shutdown flags: 0000 Other flags: 0000 BIOS checksum: D95C6416 The numbers may be different on your machine. Record this information, except for the BIOS checksum. Then run DPMIINST a second time with the -f parameter as follows: DPMIINST -f##/##/##/####/#### Replace the ##'s with the data you recorded from the first run of DPMIINST. For example, with the data above, you would type: DPMIINST -f02/02/04/0000/0000 DISCLAIMER: You have the right to use this technical information subject to the terms of the No-Nonsense License Statement that you received with the Borland product to which this information pertains.