Previous 1.4 features NeXTdimension emulation!



It’s really cool!  And as an added bonus, it can now run in ‘Variable’ speed, meaning as fast as your machine can emulate the 68040.

OS X version here, and Windows version here.  For me, at least a bunch of DLL’s are missing, so I put together a quick package containing the Windows version with all of the missing DLLs here.

From the announcement:

Hello all,

I am happy to annouce the release of Previous v1.4! Simon did lots of work on emulating the NeXTdimension and he considerably improved timings and efficiency of Previous. Furthermore there is now a mode to accelerate the emulation beyond the performance of real systems. Other improvements and bugfixes are listed in the readme.

Emulating the NeXTdimension board was something i thought would not be feasible. But thanks to the i860 emulator from Jason Eckhardt and the work of Simon, who improved and completed parts of it, it finally came true. I hope you enjoy it!

ReactOS hits 0.4!

So as a totally unfair test, I thought I’d load SQL server 6.5 on it.

SQL Server 6.5 on ReactOS

SQL Server 6.5 on ReactOS

After copying in some NT 4.0 dll’s regarding licensing it’ll start to install but the service itself doesn’t work.


MSDE2000 didn’t work either.

And the setup program from SQL 4.21 just crashed.

DR-DOS 5.0 and Windows 3.0

So I’ve always heard about the incompatibility, and I thought I’d give it a try in PCem.  I know I used to run DR-DOS 5.00 and Windows 3.0 (because of the CGA driver) and it worked fine.

So just to prove it works, here I am installing Windows 3.0 on DR-DOS 5

Installing Windows 3.0

Installing Windows 3.0

And even better, running Word 2.0! Although I did install a whopping 4MB of ram on this virtual 286.

MS Word 2.0

MS Word 2.0

And to make it all the better, I changed to a 386, and re-installed Windows 3.0 and yes it runs in enhanced mode.  And I can run DR-DOS in a windows.

386 enhanced mode

386 enhanced mode

Of course there was the AARD code, in the Windows 3.1 betas, but as far as I know that didn’t make it to release.  I was able to upgrade to a virtual VGA adapter, and update to Windows 3.1 in standard mode on a 286, just fine

Windows 3.1 standard mode on a 286

Windows 3.1 standard mode on a 286

And DR-DOS worked through the standard mode task swapper

DR-DOS in standard mode

DR-DOS in standard mode

But Windows 3.1 in enhanced mode always locked up during setup.  Maybe a PCem bug?  I’m not sure.  But Windows 3.0 works great.

Build an AT for $1000!

compute 117 cover

Compute! #117 February 1990

I found this browsing around looking at old PC cases, when I came across a picture of a baby AT case, and I thought I remembered what it was from, a great magazine article showing how to assemble a PC.

Baby AT flip case

Baby AT flip case

So thankfully over on they have a PDF of the magazine, along with the archive of Compute! magazines!  And of all places atari magazines has the full text, along with black and white pictures of the article.

For those inclined to follow it starts on page 20.

In a lot of ways the industry really hasn’t changes, and in the spirit of this, you can still assemble your own machine.  Luckily the prices have fallen like a rock compared to $1000 in 1990 dollars or about $1875 US (or $2596.31 Canadian!!)  For those prices you can build a machine that would put a 12Mhz 286 with a 20 megabyte (YES MEGABYTE) hard disk, and mono graphics.

For me, this article is what finally got me off of the Commodore 64 I had as a child.  1990 was not a good year in Canada, and getting that Amiga 500 I wanted so badly just wasn’t going to happen.  My parents would not let me get something that expensive, however I could get a component for a 286 a little bit at a time.  I was lucky to secure a 286 motherboard, used for $30 which was a great start. In around 6 months, I had finally amassed enough parts to power it on.

Upgrading and Repairing PCs 1989

Upgrading and Repairing PCs 1989

Another fantastic book Upgrading and Repairing Pcs by Scott Mueller was, and surprisingly the 3rd edition is also available on!  I rented this out at the library constantly, and it was a wealth of information on how the PC actually worked, what chips did what, and it went on and on about the amazing promise that was OS/2.  Keep in mind it was 1990 already, and even in May, PC Magazine was hyping the awesomeness that was going to be Microsoft OS/2 2.0.  All of that changed of course with the sales success that was Windows 3.0.  And back in Canada circa 1990 I couldn’t find anyone who had OS/2 to test, sell or anything.  It really was a MS-DOS and Windows world.  Heck even back then I couldn’t afford a real copy of MS-DOS so instead I used DR-DOS.

DR-DOS 5.0

DR-DOS 5.0

I got this on a trip to the united states for something insanely cheap like $5.  nobody wanted it, as it was then, or today end users don’t know or care about operating systems.

So that is what got me started, sure all my friends either had Amigas or even more powerful 386 computers, and I had an ancient Commodore 64.  It was nice upgrading up and out of the 8bit world, but my trip wasn’t the easy buy a new machine, but rather get a new component like a CGA card, then wait a month, and a floppy controller, then a diskette drive..   Although once I got a power supply, and keyboard it was pretty awesome turning it on, hearing it beep, and loading DR-DOS from diskette over CGA on a TV.

The first game I got was the Tex Murphy game, Mean streets, which features awesome PC speaker ‘music’.



Compare the ‘awesome’ CGA graphics to the VGA graphcs I’d have to wait for another 4 years before I could afford the ultra expensive VGA card + monitor.



256 colours!  Not bad for 1989 software.  Just as they were able to do audio playback over the speaker, not requiring a then expensive audio card.  Compared to the normal beeps, and low res, low color games like Kings Quest, Mean Streets really blew them away!.. Even if it was yet another point and click.

King's Quest 1, CGA

King’s Quest 1, CGA

Fun times indeed.  After that I got a 20MB disk, that had issues starting so I’d pop the top off, and spin the spindle manually to get it working.  Absolutely crazy, and it worked for months until I accidentally touched the platter.  I was so crazy, I even ran stacker on it.

Needless to say, thanks to the writings of Bruce W. Haase & Scott Mueller for getting me started on the PC path.  But Id’ rather it had been Commodore with an open platform, that I could build one part at a time.

New Sourceforge owners end controversial DevShare programme

At the end of January, SourceForge and Slashdot were sold to BIZX, LLC by DHI Group, Inc. As the new owners of two iconic sites, we are excited about the future and what we can do together. We’ve already started to take action, and are developing further plans for the site. We encourage your feedback to help us shape the future direction for the site.

Our first order of business was to terminate the “DevShare” program. As of last week, the DevShare program was completely eliminated. The DevShare program delivered installer bundles as part of the download for participating projects. We want to restore our reputation as a trusted home for open source software, and this was a clear first step towards that. We’re more interested in doing the right thing than making extra short-term profit. As we move forward, we will be focusing on the needs of our developers and visitors by building out site features and establishing community trust. Eliminating the DevShare program was just the first step of many more to come. Plans for the near future include full https support for both SourceForge and Slashdot, and a lot more changes we think developers and end-users will embrace.

Stay tuned for future announcements about how we’re making SourceForge better for everyone.

Logan Abbott


SourceForge Media, LLC

So, it looks like staying put was the easier thing to do. And I keep all my insane old downloads and whatnot. Hopefully they update the SAN…

FOOTBALL Design Document

Over at, this interesting prototype version of OS/2 has been unearthed.  What this means is that not only was there prototypes of a 386 aware version of OS/2 in 1986, but by 1987 the base of cruiser AKA OS/2 2.0 was already in place.  With this now somewhat made public, it really is clear that IBM’s meddling in OS/2 prevented it from being a success.

Check out the design document below:
The following text is from an email titled “3xBox Design Document” sent to the football alias on Saturday, February 28, 1987, at 5:02pm.


The goal for this research project was to demonstrate the feasability of supporting multiple virtual DOS 3.x machines on a 286DOS-based kernel running on an 386 personal computer. Each “3xBox” would have its own virtual screen, keyboard, interrupt vectors, and address space. Furthermore, well- behaved DOS 3.x applications that do text (as opposed to graphic) screen output would run in the background.

In order to acheive this goal in a reasonable amount of time, we started from the 286DOS “sizzle” kernel and made the minimum amount of changes necessary, both in code and fundamental design. The resulting DOS will be referred to as “386DOS” in this paper.

386DOS provides up to four 3xBoxes, depending upon the available RAM. More 3xBoxes could be supported if a slight change is made to the method of allocating page tables.

Well-behaved DOS 3.x applications (i.e., MS-Multiplan, MS-Word, Lotus 1-2-3) can run in the background, multi-tasking against one another and against the foreground screen group. Lotus 1-2-3 (version 2.01) passes its floppy-based copy protection when in the foreground.

It should be noted that 386DOS, while functional, is not an optimal design/implementation of multiple 3xBoxes. In particular, interrupt management, the device driver model, and the existence of V86-mode kernel code should be modified before 386DOS is made a commercial product.

Unless stated otherwise, most of the concepts extant in 286DOS apply to 386DOS.

V86 Mode and the 386

The 386 CPU has three distinct execution modes: REAL, PROT, and V86. REAL
and PROT modes are largely compatible with the corresponding modes of an 286.
V86 modes is exactly the same as RING 3 PROT mode, with the following

o Memory Address Hierarchy
A 386 has three levels of memory addresses:
– Virtual (Intel refers to this as Logical)
This is either the selector:offset or segment:offset address used by unprivledged machine language code.
– Linear
This is the 32-bit address arrived at either via a GDT/LDT
selector lookup, or via the 8086-compatible (seg << 4 + offset).
– Physical
This is the 32-bit address arrived at by pushing a linear address
through the paging mechanism. This is the address that the CPU
sends out on the bus to select physical memory.

When in V86 mode, the CPU performs the 8086-compatible computation.

o I/O instructions are NOT IOPL-sensitive
Trapping of I/O is done using the IO Permission Map.

o All instructions which modify or expose the Interrupt Flag ARE IOPL-
This allows the OS to simulate the Interrupt Flag, if desired.

V86 IRETD Frame

When any interrupt, trap, exception, or fault occurs in V86 mode, the CPU
switches to PROT mode and switches to the TSS Ring 0 Stack and builds the
following stack frame:


CPU Mode Determination

A new implementation of the WHATMODE macro was written in order to distinguish
between the three CPU modes: REAL, PROT, and V86. REAL mode is indicated by
a 0 PE bit in CR0 (a.k.a. MSW on a 286). If the PE bit is 1, then the mode
may be either PROT or V86. These two modes may be distinguished by attempting
to change the IOPL bits in the FLAGS word. At Ring 0 in PROT mode (the only
place WHATMODE is used), the IOPL may be changed. In V86 mode, IOPL cannot
be changed. So, we change IOPL and then check to see if it changed. If so,
PROT mode, else V86 mode.

CPU Mode Switching

The 286DOS kernel relies extensively on switching inbetween REAL and PROT.
This functionality is provided by the RealMode and ProtMode routines.
In 386DOS, RealMode is no longer needed. As soon as we switch to PROT mode
during SysInit, the CPU only uses PROT and V86 modes.

Two new routines, ProtToV86 and V86ToProt, that are analogous to RealMode and
ProtMode. ProtToV86 is quite straightforward. We build a V86 IRETD frame
on the stack with the VM bit set in the EFLAGS image. We set the SS:SP
image to be equivalent to the stack just above the V86 IRETD frame, and
set the CS:IP image to instruction following an IRETD. Then, we issue the
IRETD and the CPU continues processing following the IRETD and in V86 mode.

V86ToProt is a bit trickier. The only way to get out of V86 mode is to
trap or fault or issue a software interrupt. We chose to use a software
interrupt, 30h, which we call the V86 Services interrupt. The INT 30h entry
in the IDT is a ring 3 interrupt gate, so issuing an INT 30 from V86 mode
causes a V86 IRETD frame to be built on the TSS Ring 0 stack and control
transfers to the INT 30h vector. The handler verifies that the INT 30h
was issued by the V86ToProt routine (checks CS:IP on the stack). If not,
the interrupt is reflected back to the requesting 3xBox (See Interrupt
Reflection). If it was V86ToProt, we clean off the stack frame and return to
the caller. NOTE: V86 Services is also used for completing the 386 LOADALL
used by PhysToVirt to map “high” memory in “REAL” mode.

Stack Switching

In order to maintain the 286DOS mode switch and stack switch semantics
when V86 mode is used, we have a new stack (the V86 Stack) in the 3xBox PTDA.

286DOS Modes and Stacks

The RealMode and ProtMode procedures in 286DOS are the only ways to switch
the CPU execution mode. These routines both maintain SS:SP, allowing
RealMode and ProtMode to be reentrant. The TSS Ring 0 stack is always the
current TCB stack in the current PTDA. The only other stacks in the system
are the Interrupt Stack and user stack(s).

386DOS Modes and Stacks

In 386DOS, any interrupt or exception while in V86 mode causes a switch to
PROT mode and the TSS Ring 0 Stack. So we have a new way to mode switch with
an incompatible stack semantic. We had to fix this mode switch to make it
compatible with 286DOS.


In V86 mode, the current stack must not be the TSS Ring 0 Stack. The CPU
only leaves V86 mode via an interrupt/exception, which causes a stack switch
to the TSS Ring 0 Stack. If the current stack was the same as the TSS Ring 0
Stack, then the stack might get corrupted. In 286DOS, the Ring 0 Stack is
the PTDA. Since we run on this stack in V86 mode, we need a new Ring 0 stack
when a 3xBox is running.


1) When a PMBox is running, the TSS Ring 0 Stack is a PTDA TCB stack.
+ This is consistent with the 286DOS model.

2) When a 3xBox is running, the TSS Ring 0 Stack is the “V86 Stack”.
+ The V86 Stack is allocated in the 3xBox PTDA.
+ If the cause of the mode switch can be handled without enabling
interrupts (e.g., interrupt reflection, IN/OUT trapping), we stay
on the V86 stack.
+ Otherwise, copy the V86 IRETD frame to the previous stack and
switch back to the previous stack.


1) Leaving V86 mode
a. V86ToProt (analog of ProtMode)
+ Issue special V86ToProt software interrupt. If the interrupt
gate is DPL=3 (and it must be a 386 Interrupt Gate), then the 386
switches to Ring 0 (and the TSS Ring 0 stack) and transfers
control to the handler.
+ To ensure that 3xBox apps don’t use this feature, the interrupt
handler checks that CS=DosGroup and IP is in the correct range.
If not, then the interrupt is reflected (see below).
+ To make V86ToProt compatible with ProtMode, the interrupt handler
switches to the old stack (we get SS:ESP from TSS Ring 0 stack,
which is where we are running).
+ Finally, V86ToProt restores saved registers and flags from the
stack and returns to caller.

b. Software interrupt
+ GP-Fault handler reflects to 3xBox IVT handler in V86 mode.
o Add IRET frame on old stack, taking IP, CS, FLAGS from
TSS Ring 0 Stack.
o Look up handler in 3xBox IVT.
o Edit TSS Ring 0 Stack EIP and CS to point to IVT handler.
+ IVT interrupt handler IRET uses IRET frame we built on old stack.

c. Hardware interrupt
+ To make this operation compatible with 286Dos, the interrupt
handler copies the V86 stack from the TSS Ring 0 stack to
the old stack, then switches stacks to the newly modified old
stack. This allows the Interupt Manager to do an IRETD to
get back to the correct mode.

d. Exception
+ Remain on V86 stack, process exception, and IRETD.

2) Entering V86 mode
a. ProtToV86
+ Build V86 IRETD frame on current stack and IRETD.
+ Execute 386 LOADALL with VM bit set in EFLAGS image in loadall

Interrupt Management

All software interrupts, hardware interrupts, and CPU traps and exceptions
are vectored through a common IDT, regardless of whether the CPU is in PROT
or V86 mode.

NOTE: Background 3xBoxes get no hardware interrupts. In the commercial 386DOS,
this restriction can be relaxed so that interrupts, other than for the
keyboard and mouse (since those are implicitly for the foreground box),
can be given to background 3xBoxes.

Passing Hardware Interrupts to the Foreground 3xBox

In the interrupt manager:

IF a 3xBox is foreground -AND-
the current mapped 3xBox is background
MapIn foreground 3xBox;
Dispatch interrupt;

And to make things more interesting, from the later version of FOOTBALL, oddly enough version 4:

OS/2 FOOTBALL Boot Disk (v4.41.00)

This disk contained an updated version of OS/2 FOOTBALL Boot Disk (v4.41.00). It was built in December 1987, using final OS/2 1.0 sources merged with assorted FOOTBALL changes, and although it was originally assigned version number 1.3, this version of OS/2 would ultimately become 2.0.

It crashes on an 80286, jumping to invalid code immediately after performing a processor check. On an 80386, the following version banner is displayed:


The numbering of revisions must have been, um, revised, because despite the lower revision (4.41.00 vs. 7.68.17), it is newer than the 7.68.17 prototype. This is confirmed by the boot message (12/02/87), the file dates (12-23-87) and the higher version number (1.3).

NeXTSTEP in your browser!

Well, kind of.



It’s a Docker containers running Previous, that you connect to with noVNC in your browser.  So it’s a legacy system thing on demand!  I had tried to do something like this ages ago with SIMH on demand, but I broke it all when I installed apache on OS/2 to make the bbs url self hosting.

The mouse control is insanely offtrack, but this does present an interesting possibility of bringing back an OS museum / zoo thing.

Also worth mentioning that they do offer MacOS!

Usborne collection of 1980’s computer books!


Back in the 1980’s home computers were a new and exciting thing, and with these machines came very technical manuals.  But us young children wanted to program, and thankfully companies like Usborne filled the gap by providing programming books geared towards kids!  It was a golden age as every machine had a basic interpreter.  Then for some reason software companies (Microsoft/IBM) didn’t think it was a good thing anymore bundling in languages with their OS’s, or worse thinking that development tools should be a source of revenue and pricing amateurs out of the market (seriously SCO, $5000 for a C compiler?)  But now thanks to the common carrier network we all have (the internet) the rise of open and free software hackers have taken things into their hands, and we are back to empowering users.

So I thought it was interesting that Usborne opened up a bunch of it’s older books.  All available in PDF, free for personal use.

First computer library

Introductions to programming


Adventure games

You can see their page with full details here.