---
name: "vm86old"
section: "2"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/vm86"
---

# vm86old(2)

enter virtual 8086 mode

Part of [vm86(2)](/vm86/2.md).

## NAME

vm86old, vm86 - enter virtual 8086 mode

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <sys/vm86.h>
```

**int vm86old(struct vm86\_struct \****info***);** **int vm86(unsigned long** *fn***, struct vm86plus\_struct \****v86***);**

## DESCRIPTION

The system call **vm86**() was introduced in Linux 0.97p2. In Linux 2.1.15 and 2.0.28, it was renamed to **vm86old**(), and a new **vm86**() was introduced. The definition of *struct vm86\_struct* was changed in 1.1.8 and 1.1.9.

These calls cause the process to enter VM86 mode (virtual-8086 in Intel literature), and are used by **dosemu**.

VM86 mode is an emulation of real mode within a protected mode task.

## RETURN VALUE

On success, zero is returned. On error, -1 is returned, and *errno* is set to indicate the error.

## ERRORS

- **EFAULT**

  This return value is specific to i386 and indicates a problem with getting user-space data.

- **ENOSYS**

  This return value indicates the call is not implemented on the present architecture.

- **EPERM**

  Saved kernel stack exists. (This is a kernel sanity check; the saved stack should exist only within vm86 mode itself.)

## STANDARDS

Linux on 32-bit Intel processors.
