The 286 Gives Up One Of Its Final Secrets

Though it is largely forgotten today, the Intel 80286 was for a while in the 1980s the processor of choice and designated successor to the 8086 in the world of PCs. It brought a new mode that could address up to 16 Mb of memory, and a welcome speed boost over machines using an 8086 or 8088. As with many microprocessors, it has a few undocumented features, and it’s a couple of these that [rep lodsb] takes a look at. Along the way we learn a bit about the 286, and about why Intel had some of these undocumented instructions in the first place.

If you used a 286 it was probably as an end-user sitting in front of a PC-AT or clone. During manufacture and testing though, the processor had need of some extra functions, both for testing the chip itself and for debugging designs using it. It’s in these fields that the undocumented instructions sit, and they relate to an in-circuit emulator, a 286 with a debug port on some of its unused pins, which would have sat on a plug-in daughterboard for systems under test. The 286 was famous for its fancy extended mode taking rather a long time to switch to, and these instructions relate to loading and saving states before and after the switch.

The 286s time as the new hotness was soon blasted away by the 386 with its support for virtual memory, so for most of us it remains as simply a faster way that we ran 8086 code for a few years. They appear from time to time here, even being connected to the internet.

286 image: Thomas Nguyen (PttNguyen.net), CC BY-SA 4.0.

115 thoughts on “The 286 Gives Up One Of Its Final Secrets

          1. No, the other guy, “I concur” is either an imposter or one of the many with the exact same name. This is not the first time. “I know I didn’t post that, but it is me”

    1. I used Coherent too back when. Soon Linux took over though and that was that.

      After using my Dec Rainbow, I bought a 286 computer, and as most of us, then a 386, 486 … and so on.

    2. 8088,, to a short time 186, then 286,386dx then I was hot stuff with the 486, and running Dos 1,2.2, 3.o , 3.1 and on and on until a gui namned windows ran dos behind the scene.lol and yes I was so proud to build and a run scusi with lunix. Mo from Trotwood,Ohio

  1. I remember saving up to buy a 286 PC, only to have the 386 shame it out of the marketplace before there was enough money set aside.
    So, a couple of years later I bought a used 8088 PC.

      1. Yes, I did get a used 386 at some point followed by a 486 SX.
        Later, I bought the coprocessor from somewhere (used) but it didn’t work.
        A Pentium from Computer City was my first all new PC.

          1. A 486-50 was my first ibm clone as well. Thought I was hot stuff but it was as dead end as anything could be, still worked well for some years. Later I cobbled together a 486-160 (overclocked amd 5×86-133) out of lots of parts that was definitely a point of pride.

          2. I had one briefly – I recall it was about on par with a friend’s DX2/66. I actually had a VESA video card and a VESA controller card in that thing functioning perfectly – apparently that was quite the feat back in the day.

    1. I had an 8086, my dad bought from my oldest brother as he was heading off to college. Before that, I had a C64 (commodore 64). I programmed on it with Basic… Those were the days.

    2. In ’88 or so we had a tsr running in 286 protected mode. Ben Williams at Rational put this together for us. Hopping back and forth from dos protected mode using the kbd reset trick. This was for Imagen’s postscript clone, the idea being you keep the print sw up in protected mode leaving the users wordperfect etc with its dos ram spared.

    3. I had one of the speedy little Amstrad XT clones, possibly also had been hotrodded with a V30 before I got it, so when I picked up a 286 it felt like a downgrade because it was the 6 Mhz version of the IBM AT, had 1MB and 1MB of LIM which was the most exciting part, but still felt less useful than the Amstrad.

    4. I still have a 386-SX at home. 25 MHz if I recall. It’s in a Tandy 1000 RSX with it’s 52 MB hard drive and a WHOPPING 8 MB of RAM. It’s not very good at doing much by todays standards… except taking up space and collecting dust.

      1. I had a couple running 386 boxes up to just a few years ago – they were development systems for the gamma ray spectrometer on the Mars Odyssey spacecraft and the TEGA instrument on the Mars Phoenix lander. Both of those instruments had a ‘386 in them. The Odyssey 386 is still running perfectly 20 years into its 2 year mission.

    5. I had a 286-16 MHz not too long ago (maybe 2016?) and a 386 SX 16 (still have that one) and I did run benchmarks on them when I had them both – with pretty much the same config (4Mb RAM in each, 16 bit ISA controller card, a 40 Mb WD in the 386, a 40 Mb Maxtor in the 286) the 386 was a hair faster. The 286 had quite the BIOS, and if you changed the wait states and used 70ns SIMMS, the 286 would actually be slightly faster than the 386 (which is equipped with 36 individual DIP RAM, unfortunately at 80ns) – Mid range 286s were better than entry level 386s. Same is true for the 386 DX 40, which will shame a 486 25 MHz.

  2. The 286 already supported virtual memory, but using segmentation (no paging support). But most common virtual memory implementations only supported paging, almost nobody tried implementing it using segmentation (well, there are good technical reasons to prefer paging anyway).

      1. In 16-bit OS/2, 286 segmentation was used for each memory allocation, so any buffer overruns would immediately cause a CPU exception. I seem to remember that this was the reason why 16-bit OS/2 was so popular for ATM machines — it was so hack-proof and stable. [It was also great training for a certain beginning C programmer — I was quickly ‘trained’ to insure my code was overrun free).

          1. OS/2 was the only OS that seemed to run better the longer that you used it. Hard to install on IBM clones but it was the best desktop “environment” that I have ever seen. I migrated to Linux after that and I still don’t see why anyone needs a desktop environment. Seems like a waste of CPU cycles to me.

          2. OS/2 3.0 “A better DOS that DOS, a better Windows than Windows, a better OS/2 than OS/2 (2.0)” WARP 3.0 was my move from WFW 3.11 then Warp 4.0, then BSD, then Windows 2000, then Linux, and never looked back.

    1. Yes! Glad someone comments to say the 80286 did support Virtual Memory (with 1GB per process). The designers of the 80286 based it on the Multics segmentation model, but in reality segmentation makes it really hard to implement, because of internal memory fragmentation. A while back I wrote blog post about how an alternative 80286 with segment registers pointing to 256 byte paragraphs giving a true 24-bit virtual address which was then paged into a 24-bit physical address space. 8068 compatibility could then be managed by having the segment registers map to 16 byte paragraphs as before.

      The interesting thing is that it’s possible to use the same kind of thinking to design a usable Virtual Memory system for a real 80286, by making sure that segments are allocated in mutliples of 4kB blocks (allowing small far pointer memory allocations being allocated to existing 4kB blocks where possible). This was going to be the next post on the subject.

      https://oneweekwonder.blogspot.com/2021/08/virtually-lost-alternative-intel-80286.html

      1. I have long forgotten how I did it but back in the ’80s I used the memory management features of the 286 to design a flight simulation device for a major airlines at a time when manufacturers were bidding high prices for mainframe computers to do the same job. It was my entry into engineering. I even translated complex jet engine models from mainframes running Fortran IV in Assembly language without a floating point processor. Utilizing the macro assembler I came up with a fixed point math system to run those engine models as well as pneumatic, hydraulic, and electrical system models for a 727 trainer. It even included a simplified flight mode for driving navigational instruments. I used a Heath zenith 286 computer and a RS488 instrumentation interface to drive the cockpit of the flight trainer. The trainer was later sold to a university. It ran for many years after.

  3. I was an engineer years ago and once upon a time (1980s) remember using Venix, a UNIX System V with real time extensions on 286-based PCs when the typical memory expanders of the time we’re unsuitable for our need. Cool stuff at the time.

    1. The 286 was my first computer as a child when my dad’s office upgraded to a 486 (which ended up being my second computer). There was even a button that let yoy.slow it does form 12.5 MHz to 8 MHz if your programs were running too fast.

    1. Also DOS4GW and other DOS Extenders. AFAIK none of them came in a ‘generic’ version that could be used with any DOS software. It had to be integrated with each individual program.

      1. Was pretty common to see it. Too bad more things didn’t use it, though. Anyone who ever had to try to squeeze as much out of that 640k limit to run a game definitely knows that struggle. And even some that did use it still had ridiculous conventional memory requirements, which was endlessly frustrating. Do I get to use my mouse, my joystick, or my sound card? Decisions decisions.

        1. This is exactly why I think that software sucks so bad today. When you had limited resources you produced elegant code. Mindful of how many CPU cycles you were consuming along with memory. Graphics have improved but everything is nothing more than moving the user interface around or rewriting it into a different language undoing years of debugging of existing code so that the young programmer makes it “better” today.

    2. Yes. In my first programming job we used Phar Lap to extend memory for DOS programs. I distinctly remember being “volunteered” to call them on the phone about some technical issues. Back then, calling the USA was a Big Thing and quite expensive so i was very nervous!

        1. It wasn’t really a different cpu, other than a few instructions, but it included peripherals, which made it great for embedded use. On the other hand, because of those internal peripherals, they weren’t in the right address points that MSDOS expected. So early on, they worked, just fix the bios. But once software started addressing hardware directly for speed, it all blew up.

          1. It was still common to see a 386 or similar in a lot of RAID controllers up until pretty recently, even (hell, maybe still – I haven’t needed one since we moved to ZFS). Don’t really need a ton of computing power when your main function is just doing XOR all day.

          2. If anyone else has read this many comments ….. yay…fellow needs from the 80’s.
            Sinclair zx-81. 1k ram 1k rom I do recall….basic language no storage.
            Type in your program everyti.e you powered it on…..then came the expensive 16k brick that plugged in the back…..if you had that you were well ahead of the curve, ahead of schools, and friends for sure…..my father had the foresight to get us one of these in 1980 and it changed my life I was 8 yrs old at the time.

      1. I remember I found a few 80188 at the uni in the same kind of packaging as shown in this article’s picture (leftovers from some sort of industrial application?) and wondering if I could just solder some wires to connect to a DIP40 socket on a PC clone with an 8088 motherboard I had at the time. Never got round finding the 80188 datasheet, but that was just pre-internet and then my parents emptied the attic and threw away all my old computers. I still cry inside when I think of it…

      2. I got a Compis (COMputer In School, a punny name as kompis in swedish means friend) at a fleamarket just this summer. It was an early 80’s attempt, in Sweden, at creating a computer system for schools. It is commonly thought of as an utter failure. Hated by both students and teachers alike. Mainly running CP/M-86 and programmed in COMAL.
        I am “young” enough myself to only remember seeing them in computer labs for kids twice my age, I was never subjected to them first hand. That might be why I still think it was a pretty cool machine, and also it was one of the few systems that was specifically built around the 80186.

      1. The difference between the 8088 and the 8086 was that there were only 8 data and 8 address pins on the 8088 chip. They were multiplexed which means it took 2 internal clocks to get the 16bits in or out of the chip. That basically meant that the external hardware had to work twice as much for each instruction. Basically the hardware had to run 2 cycles for each instruction.

        Cheaper since your only had to run 8 traces and could run 8 bit banks of memory on a 16 bit machine, you just needed a latch to demultiplex it.

        1. And for the consumer, but 9 ram ICs at a time for another bank, rather than 18. I’msure that helped at the time.

          So yes, until better things came along, lots of addons to speed things up.

          I once found a 286 board that plugged into an ISA bus. It had to have limitations, but it stretched your 8088 a bit longer.

    1. Many Turbo XT clones used an 8 or 10 Mhz 8086. The extra bus width and faster clock both contributed to being considerably faster than any PC with an 8088. IBM originally planned to boost the ISA bus speed to 10Mhz but some of the bigger peripheral companies balked at having to ensure their cards could go that fast.

  4. A 25MHz 286 (from AMD or Harris) had similar performance to a 25MHz 386SX (80386 with a 16-bit data bus), in most benchmarks because both chips were manufactured at a 1.5 µm process. Surprisingly some instructions on the 286 required fewer clock cycles the 386 and vice versa.

    1. Popular myth. http://www.dosdays.co.uk/topics/get_a_286_running_like_a_386_pt1.php put it to the test. Part 4 is where he pulls out all the guns overclocking the cpu and installing 60ns RAM.

      >So in conclusion, the fastest I can get is 25 MHz with 1 wait state or 20 MHz with 0 wait states on this particular board. Is it actually faster than a 386, which was after all the purpose of this exercise?…. Yes and no – at least some 386s. If the 386 had no level 2 cache, the 286 can achieve similar performance to a 386DX-25. In real-world testing, my OPTi 386DX-20 with 0WS ran the Wolfenstein 3D timedemo at about 17 fps. Using the same video card on this 286 at the same clock speed and 0WS produced just under 15 fps. So it’s close, but not quite there.

  5. My first project at a startup I joined in 1987 was to re-write their software-only implementation of Lotus-Intel-Microsoft Expanded Memory Specification for version 4.0 of the spec. The founder handed me an n’th generation paper copy of Intel’s 80286 LOADALL instruction documentation. I immediately asked “well what about STOREALL?”, speculating it must also exist. He shrugged his shoulders. In one of the true miracles of my programming career, I implemented the general memcopy function using LOADALL without crashing or hanging the PC even once. I figured it would be so difficult to debug, I had to get it right by desk checking alone. Anyway, I am happy to learn STOREALL did actually exist.

    1. Jon, I haven’t thought about Expanded Memory for years. In the late 80s, a colleague and I implemented TCP/IP in expanded memory (our employer even patented it) to leave room for apps to run below 640K. Sadly, our employer couldn’t find a business model for the Internet. :( Our code went into an early version of WFW before the moved into the 32-bit space.

  6. My first home build PC was a 286 as an upgrade from my old Amstrad PC1640 which prevented all my neighbors listening to their radios whenever I used it.

    I splashed out for a cutting edge WYSE monitor which needed its own graphics card. The monitor was literally hardwired to the graphics card mind you. No connectors, which made getting the card into the case an interesting challenge.

  7. I still remember all those extra clock cycles on that IBM PC/AT! And then I overclocked it to 8MHz, added expansion memory, and it blew away the competition. (At first not realizing that memory expansion on an ISA bus was a stuhpid idea.)

    And the PC/AT even came with a hardware reference guide that had the source code for the BIOS, plus a reasonably complete description of the circuitry. Those were the days when men — ok, let’s be real here, geeks — knew how to bitbang devices and their email used bangpaths…

    1. I had 12 megabytes of RAM in my 12Mhz 286. The motherboard had 512K in DIP chips. The first ISA RAM card backfilled that to 640K. The remainder of its RAM and the other two surplus Micron RAM cards was evenly split between XMS and EMS. I had an 8 bit Soundblaster and a Pro Audio Spectrum 16. My DOS setup was configured to load everything high that could be and so that all the DOS games would automatically work with the SB or PAS – depending on which was the best audio each one supported. Windows 3.11 (the OEM only 3.11 that still had Standard Mode, not Windows for Workgroups 3.11 which requires 386 or newer) ran wonderfully when it had all the RAM it could use.

      1. Awesome configuration, kudos to you!
        My 286 @12MHz in the 90s had a PAS16, too, and a SCSI CD-ROM drive but merely 4MB SIMM RAM.
        But that was okay for Windows 3.10, I guess.
        Still much better than the usual 1MB.
        I suppose your 286 was running very well on Windows by comparison.
        I’m really glad to hear you were one of the users who invested in a 286.
        The 286 really deserved more love, I think.
        It was one of most powerful, pure 16-Bit CPUs back then.
        In the early 90s, a 286 PC with EGA/VGA graphics was the spirtual sibling to a SNES or Mega Drive, which were members of the 16-Bit generation.

        Personally, I learned so much about DOS memory management because V86 wasn’t available to me.
        I did all the optimization myself, since I had to.
        MemMaker/EMM386 and QEMM were all 386+.
        But I also was rewarded with high compatibility and stability.
        Since no V86 was used, all my applications ran in true Real-Mode without timing issues.

    1. And nothing yet has improved on that tech. Hardware has gotten faster and graphics better but I could enter an order on a terminal while a customer spoke in real time to me and print the pick ticket. Now I have to wait on REST API responses and click through a bunch of crap.

    2. Assuming you could make it through the installation from the 50? (can’t remember the exact number, but it was dozens) floppies. It would take several tries, perversely only failing after about 30). I may be exagerating the number after 35 years, but the memory of the horror persists.

      1. I think Xenix was only about 7 or so – but later products like open desktop was large. You could install from QIC tape or cd-rom much later.

        Believe it or not, there was a version of Xenix for the 8086 too. Created by a company you may have heard of – Microsoft.

  8. Read through this and was a little confused by reference to “the keyboard reset trick”

    afaik, the keyboard could send an NMI to the main CPU, not a reset. I seem to recall there sometimes being special push button switches, on the PC itself, to effect an actual RESET.

    1. There was no (documented) way to exit protected mode on the 286 except by resetting the processor. So they made the keyboard MCU able to reset the 286. Then the BIOS would detect a flag in memory saying that it was coming out of protected mode and continue doing whatever it was doing.

  9. Oh, and how about … having to set the jumpers on our expansion cards mapping out which irq’s were going to be used. Then realizing, you don’t have enough available for all the cards that were plugged in…..
    And which addresses were being used….

  10. Back when this was new tech, I worked in one of the factories that made 286 computers for big blue. One of the jobs I had there was debugging the PC’s to component level and if needed, using the very expensive 80286 ICE from Intel. The ICE was a big cream box that took half the desk with a control PC on top. The ICE was used to step through the POST tests to find out exactly what went wrong and to develop and execute small assembly language test routines.They were great days and I learnt a ton of stuff which is still useful today. The jump into protected mode was a real ball ache and I would avoid it as much as I could. Happy days.

  11. I pieced together a 286, 16 MHz once out of the pages of Computer Shopper and was the envy of my friends until one of them got an Everex system with a 20 MHz cpu for Christmas . Those were the days!

    Reading these comments takes me back. I was reminded of a joke from the era about “how big of nerds we were…”

    We’d always end up saying something along the lines of, “my computer crashed so I recreated the contents of my disk in Edline and recovered my memory using debug…”

    I still reference G=C800:5 on occasion, even once having it as a license plate on my car… From an era when I could actually afford a hard drive…

  12. I started on the TRS-80 Model 1 back in ’76 or ’77 where I learned BASIC. I think it was an 8080? My next machine was the Atari 800 (6502? 48K RAM. And, yes I was a kid) where I started delving into graphics, sound, and eventually DLI programming and assembler. That grew into an Atari ST, and 68000 machine with 4MB, learning C and 68K machine code, as well as learning Unix. I then learned 80×86 assembler running it on a painfully slow software emulator on the ST. College had just purchased shiny new 486 machines for the computer lab. I then had a 3b2/400 with old AT&T Unix Sys III. I replaced the ST with a Pentium laptop running Linux and was briefly exposed to Windows 3.1 and 3.11 and DOS at work where I was the Unix admin (SCO Unix). As I upgraded my PC systems at home, I’d sometimes run dual boot but rarely used the Windows side and really hated it.

    So … I really couldn’t care less about the 286. When people has 286 and 386 machines, my 68K machine was running circles around it. A small software upgrade to 16Mhz made it fly around most 486 machines with none of the stupid limitations of Intel. Remember “far” pointers? OMG! The limitations of very few 16bit registers compared to 32bit general purpose registers is amazing

    1. The 68K is (yet one more) proof that marketing and marketshare is more important for success than innovation. Other examples are the Burroughs 6700 series (virtual memory, stack, etc) and 1700 (user microprograramable with multi tasking in the microcode) … well ahead of their time then and still today. And even Intel’s own iAPX 432 … who remembers that?

  13. I guess this topic brought us all back to a simpler time of frustration. My favorite game was playing autoexec.bat and config.sys for hours just to get a game to run right. Creating boot floppies for each game, etc. I had a 8088 with an add on daughter board to turn it into a 286 with math co-processor technically an 80287. The bus speed was much slower than a REAL 286 but it was still cool cuz I could run AutoCAD

  14. Dip me in axle grease and call me slick! In 1990 I tried 0xF1 opcode on 286, could not make sense of it. A year later tried on a 386, it threw Int 1. Wrote about that to Ralph Brown in 1992 and got the credit in his Interrupt list. Never thought it would pop in my news feed!

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.