Virtual Control Program Interface
In computing, the Virtual Control Program Interface (VCPI) is a specification published in 1989 by Phar Lap Software that allows a DOS program to run in protected mode, granting access to many features of the processor not available in real mode. It was supplanted by DOS Protected Mode Interface (DPMI) shortly after being introduced, due in large part to VCPI's inability to work in Windows 3.0's protected mode.
Developed since 1987 in cooperation with Quarterdeck Office Systems and with support by A.I. Architects, Lotus Development Corp., Quadram, Qualitas and Rational Systems, VCPI is provided by an expanded memory manager in DOS (e.g. CEMM, QEMM, later EMM386). It was eclipsed by DPMI, most notably because it was not supported for DOS programs run in Windows 3.0's native protected mode (called 386 enhanced mode) and because VCPI runs programs in Ring 0, which defeated the purpose of x86 protection. It also did not work with OS/2 2.0 and later. VCPI was only supported in Windows 3.0 real mode, some programs could run in Windows 3.x standard mode. Standard mode (286 mode) Windows 3.1 (but not 3.0) itself was VCPI compliant (it was a VCPI client). Earlier Windows/386 2.1 was not compatible with DOS extenders at all. Windows NT DOS box did not support VCPI either.
VCPI also had a comparatively limited scope in that it allowed a protected mode DOS program to run only when the program was started from DOS already running inside a virtual 8086 mode task. (This was typically accomplished through a memory manager operating as a virtual [mode] control program for the processor.) Because the virtual 8086 mode isolates programs from the hardware, it is not possible for a program to switch to protected mode without some support from the control program.
Between 1989 and February 1990 an alternative specification was proposed under the name Extended VCPI (XVCPI) by a number of companies including Intel's Software Focus Group, Lotus, Digital Research, Interactive Systems and others to address some of the shortcomings of VCPI and better exploit the memory management and multitasking capabilities of the 386 processor. It was used by a small number of products including operating systems like Interactive Unix, Concurrent DOS 386 and Multiuser DOS.[nb 1] Since February 1990 these efforts ultimately succumbed to the (parallel) development and publication of the DPMI specification in May 1990, which addressed similar problems, but was compatible with the implementation of Microsoft Windows 3.0 to be released the same year.
- NB. Like VCPI, the XVCPI API sits on top of INT 67h, AH=DEh, but has a different set of function numbers. XVCPI install check: Input: AX=DE40h; INT 67h; Return: AH=00h (installed); BH=main-version, BL=sub-version. Another known function is defined as: Input: AX=DE43h; INT 67h; Return: DX=number of free 4 KB pages.
- "KB81493: Using VCPI Programs with Windows". Microsoft Corporation. "Many MS-DOS-based applications use the Virtual Control Program Interface (VCPI) specification (...). These programs do not work with Microsoft Windows version 3.0 in 386 enhanced mode. They work in Windows in real mode and may work in standard mode."
- "KB64478: Mathematica 387 and Mathlab 386 with Windows 3.0". Microsoft Corporation. "These programs use the VCPI (...) to access extended memory that conflicts with Windows in protected mode (standard and enhanced)."
- "KB82298: Windows 3.1 Standard Mode and the VCPI". Microsoft Corporation. "(...) an MS-DOS-based application that uses extended memory probably will fail to run in the standard-mode MS-DOS box."
- "KB86018: Windows 3.1 Has Limited Support for VCPI". Microsoft Corporation. "It is possible to run some VCPI applications in standard mode."
- "KB81476: MS-DOS Customers Who Want Windows 3.1 EMM386.EXE". Microsoft Corporation. "Standard mode Windows 3.1 is VCPI-compliant; standard mode Windows 3.0 is not."
- "KB101780: VCPI Not Supported in Windows NT". Microsoft Corporation. "VCPI (...) is not supported in Windows NT."
- Wurthmann, Gerold; Wopperer, Bernhard; Wiesböck, Johann (1991). "Die DPMI-Spezifikation - Eine Einführung" [An introduction to the DPMI specification]. Vorträge und Begleittexte zum 2. Entwicklerforum: PC-Architektur, 17. September 1991, München [Presentations and supplemental material for the second developer forum on PC architecture on 17 September 1991, Munich] (book) (in German) (1st ed.). Munich, Germany: Markt & Technik Verlag Aktiengesellschaft. p. 223.
- Duncan, Ray; Petzold, Charles; Schulman, Andrew; Baker, M. Steven; Nelson, Ross P.; Davis, Stephen R.; Moote, Robert (1992). Extending DOS: A Programmer's Guide to Protected-Mode DOS. 2 (2nd ed.). Addison-Wesley Publishing Company, Inc. ISBN 0-201-56798-9.
- "DOS Protected Mode Interface (DPMI) 1.0 - Application Program Interface for Protected Mode DOS Applications" (PDF). 1.0. DPMI Committee. 1991-03-12. pp. 4–5. Retrieved 2013-05-24. "The initial DPMI prototype was developed by Microsoft for Windows version 3.0, with input from Lotus Corporation and Rational Systems, as part of a general effort to enhance Windows' performance by allowing the Windows kernel to run in extended memory. In parallel, Intel was working with manufacturers of multitasking environments, EMS emulators, and DOS extenders to ensure that an extended VCPI specification could fully utilize the 80386's virtualitation and protection features. In February 1990, the parties involved in the above activities agreed to form the DPMI Committee and formulate an industry-wide standard for protected-mode DOS applications. The Committee released the first public DPMI Specification, Version 0.9 in May 1990."