15

I'm looking for existing, old operating systems which can run programs in 286 16-bit protected mode. (Please note that in this question I'm not interested in 16-bit programs for the 8086 and 80186, or running programs in real mode or virtual 8086 mode.)

I already know these:

  • Windows 3.0 and 3.1 in standard mode can run GUI NE .exe programs designed for Windows 3.x. Later versions of Windows also support this for compatibility. Wine can also do it. As a cool feature, Windows 3.0 is able to run the same program in real mode as well, so that Windows 3.0 and its programs can run on a computer with an 8086 CPU, so a 286 CPU is not required.
  • OS/2 1.x can run both GUI and text mode NE .exe programs designed for OS/2 1.x. Later versions of OS/2 also support this for compatibility.
  • Some DOS extenders running under DOS can run both GUI and text mode NE .exe programs designed for that DOS extender.
  • Some operating systems (such as Windows 3.x, and probably OS/2 1.x or later) can start running a DOS program in real mode or virtual 8086 mode, and they provide an API (such as VCPI or DPMI) for the program, using which the program can switch to 16-bit protected mode.
  • Xenix can run 16-bit x.out programs designed for Xenix 16-bit. 32-bit support has been introduced in Xenix 2.2, and later versions of Xenix also support 16-bit programs for compatibility. AT&T Unix System V/386 Release 3 (SVR3) and Release 4 (SVR4) can also run these Xenix 16-bit programs, if the Xenix compatibility package is installed.

As far as I know, Unix systems other than Xenix in the 1980s, before they gained support for 386 and 32-bit protected mode, ran 16-bit programs (and also the operating system) in real mode rather than 16-bit protected mode. Please correct me if I'm wrong.

Is there anything else?

2
  • 1
    Present-day Linux can run 16-bit protected-mode code just fine. From a 32-bit program, you use modify_ldt to create a 16-bit segment, and far jump to it. I tested and it works. You need the X86_16BIT config option enabled in the kernel, but Ubuntu stock kernels have it enabled by default. I believe WINE uses this. Of course, I don't think any 16-bit binary formats are supported by the kernel, so you'd have to write your own loader. Commented Oct 18 at 6:01
  • I don't think OS/2 1 could run DOS programs in a virtual mode - OS/2 2 could Commented Oct 18 at 7:28

3 Answers 3

17

I know of at least four other operating systems running programs in 286 protected mode:

Concurrent DOS was famous for running DOS programs in protected mode, but that revealed multiple bugs in various 286 steppings and led to significant delays in the release of the operating system. Concurrent DOS relied on the undocumented LOADALL instruction to set up shadow segment descriptors as needed by DOS programs.

Earlier versions of Coherent and Minix could run on 8086 PCs; Minix 1.5 and later could use protected mode on 286 and later systems. Coherent 3 and Minix 2 required a 286 and ran entirely in protected mode. Coherent 4 and Minix 3 dropped support for 286s (I haven’t checked whether they support 16-bit protected mode tasks running on the 32-bit kernel).

QNX, at least version 2.x, could run either in real mode or in protected mode; when run in protected mode, it ran programs in protected mode too (unsurprisingly, given the limitations of the 286 CPU). Starting with version 4, QNX only supported protected mode, either 16-bit protected mode on 286 systems, or 32-bit protected mode on 386 and later systems.

See also

10
  • 6
    It's interesting how Concurrent DOS 286 was able to do that, because DOS programs were written for real mode, and they freely modified their segment registers (e.g. ES), which would lead to a CPU exception when done in protected mode. Concurrent DOS 286 added a trap for the exceptions, and the trap code helpfully created a matching segment descriptor on the fly, and resumed the program. The undocumented LOADALL 286 instruction was used for editing segment descriptors. Commented Oct 18 at 1:24
  • Can you clarify what "286 steppings" means here? Is that a type of software? Commented Oct 18 at 14:06
  • 2
    When the CPU mask was updated, that's a "stepping". Intel revises CPU's regularly. Commented Oct 18 at 15:06
  • 1
    Minix 1.5 can already do that. In fact, the Minix 1.5 8086 kernel can detect the availability of 16-bit protected mode at boot time. If it decides to use it, both the kernel and userspace programs run in 16-bit protected mode. Commented Oct 22 at 12:14
  • 2
    Ah, they days of running multiple Wyse terminals off a 16 serial port card in a PC running Concurrent DOS, and discovering that it was only kinda MS-DOS compatible. Commented Oct 22 at 13:09
12

There is a fairly obscure OS called TheOS (https://en.wikipedia.org/wiki/THEOS). Earlier versions could run on 80286 in 16-bit protected mode, while newer versions demand 80386+ and 32-bit PM.

It uses 286 PM selectors heavily for protection - every driver and subsystem has its own segments, and some common structures have their own data segments. This was fairly common for 80286 OSes and 16-bit code, but TheOS 80386 32-bit code still uses same approach unlike most 32-bit OSes.

3

There is also Intel's Realtime OS called iRMX II or iRMX 286. https://en.wikipedia.org/wiki/RMX_(operating_system) - Intel Realtime Multitasking Executive.

It was highly configurable (similar to VxWorks). The Intel System 310 and 320 computers that they were normally hosted on could support 2 terminals.

I used it when I was working on body scanners, secure comms systems and undersea cables.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.