back to fun with pread.c

Well I know this topic keeps comming up over & over that the pread.c that I had used to build my Xenix on Qemu is long lost.

Anyways someone else was asking me for it, and I stumbled accross this Microsoft Memo:

which means the device name I was listing was wrong… I’m unsure if it means in 2003 it change from what it was since 1991….

Anyways here is my new ‘pread’.

#include <stdio.h>

#define BUFFSIZE 1024*1024

void main(void)
FILE *disk;
FILE *ofile;
int disknumber;
char fname[255];
char oname[255];
char *buffer;
int rc;
int pass;

{printf(“\nError allocating buffer!!\n”);return;}

printf(“please tell me the disk NUMBER that you want to read\n”);
printf(“for \\\\.\\PhysicalDrive1 just answer 1\n\n:”);

printf(“reading the device %s\n”,fname);


printf(“\nWhat is the output file name?\n\n:”);

if(ofile==NULL){printf(“\n\nERROR with %s\n”,oname);return;}
if(disk==NULL){printf(“\n\nERROR with disk %s\n”,fname);return;}

pass = 0;
printf(“\r%d\t%d:Megabytes processed”,rc,pass);


FWIW I was checking links, and Tom’s site has moved to, which of course itself is now gone.  However with a lot of leg work, I did manage to snag the source to a few versions, and put them onto my CVS server, linked here: on  And of course you can replicate it via CVS.

As mentioned over here, the steps basically are:

cvs -d:pserver:[email protected]:/frontvm login
cvs -d:pserver:[email protected]:/frontvm checkout frontvm
cvs -d:pserver:[email protected]:/frontvm log -h | grep -P '^\t' | awk '{print $1}' | sort|uniq| sed -e 's/://g'

With the last step showing you the various commit levels….
In this case they are:

  • frontvm-20040517
  • frontvm2-20061120
  • frontvm3-20060613
  • frontvm3-20060623

So to checkout the first and oldest code I’ve found, you would execute:

cvs -d:pserver:[email protected]:/frontvm checkout -r frontvm-20040517 frontvm

And there you go.

The Frontier wiki is still here.

Packages so far on Uwisc 4.3BSD

I’ve been compiling quite a bit of stuff.. Looking back it was something I intended to do back in October of 2007… Well no time like the present then! I’ve done my best to include all the relevant bits for each of the following packages. It’s entirely possible I’ve missed stuff, so feel free to re-build the stuff as you wish. Some of the packages require you to build them with GCC as the default CC won’t work. However if you are going to build it yourself you won’t be able to jump to gcc as it requires gperf which in turn requires a working c++ compiler. So far here are the following packages:


All of these can be downloaded from here. I’m keeping all the source code (unaltered) in tap format for the SIMH emulator right here.

To get the C compilers going I had to build gcc 1.42 with the system compiler (cc/PCC) then use that version of GCC to build the next version. Once I had gcc 2.5.8 building, then I was able to build binutils 2.8.1 without issues, then rebuild gcc 2.5.8 to use binutils instead of the default system assembler so that I could build lynx and it wouldn’t barf because of the massive switch statement…

And no, -J didn’t help.

Speaking of lynx the search ability is broken because the function simply isn’t in 4.3 BSD (bsearch), and for pine, I had to make a fake tmpfile function that uses the /tmp/pinebox directory.

The gcc 2.5.8 package includes the C++ components, and I’m pretty sure I did with as well. I’m not sure if GCC 3.x kept the VAX cpu so I haven’t pushed forward, but seeing that the cc1 exe is over 1mb it doesn’t seem worth it to push ahead.

I’ll have to see about including more games. The selection in this 4.3 release is kind of weak,

aardvark* boggle* [email protected] monop* snake*adventure* ching* hangman* quiz* snscore*backgammon* cribbage* hunt* robots* teachgammon*battlestar* doctor* lib/ rogue* trek*bogdict* fortune* mille* sail* zork*

I’ll have to see what’s missing from where.. Also I notice that the arrow key bindings in terraterm are not working… I’ll have to dive into that as well. It may end up with a new re-relase of the emulator or a patch thing. I’ll have to see.

I should add a quick note on how to unpack these tap files. First you will need bzip2 on your native pc. You should be able to get one here.

Now just uncompress the file..

C:\Program Files (x86)\uwiscbsd>bzip2 -d lynx-2.8.2.binary.BSD-4.3.Uwisc.tap.bz2

Now you need to go to the SIMH console window. It will say something like this in it:

VAX780 simulator V3.8-1
Listening on port 42221 (socket 376)
Waiting for console Telnet connection

Hit Control+E and it’ll interrupt the simulator. Then we need to attach the tap file like so:

Simulation stopped, PC: 800018A3 (MTPR #0,#12)
sim> att ts0 lynx-2.8.2.binary.BSD-4.3.Uwisc.tap
sim> c

the att command will attach the tap file to the ts0 device. the c will tell the simulator to continue. Now just switch to a tty windows (or attach a pty), then it’s a simple matter of running the following commands:

myname# cd /
myname# mt rew
myname# tar -xvmf /dev/rmt12
x /usr/local/bin/gzip, 66560 bytes, 130 tape blocks
x /usr/local/bin/lynx, 949248 bytes, 1854 tape blocks
x /usr/local/lib/lynx.cfg, 97203 bytes, 190 tape blocks
myname# rehash

Thats about all it takes, now you can run lynx. If you so wish, you can run back to the SIMH console, and tell it to “det ts0” which will detach the tape image.

Update for HACK

I just found out that hack will run properly if it’s built with the default compiler PCC (cc). However there is a single file that will not build, but gcc can be used to build the single file, and the build process can continue as normal.

Here is a quick log:

myname# make
cc -g -c hack.Decl.c
cc -g -c hack.apply.c
cc -g -c hack.bones.c
cc -g -c hack.c
hack.c: 799: missing endif
*** Error code 1

myname# gcc -g -c hack.c
myname# make
cc -g -c hack.cmd.c

cc -g -c rnd.c
cc -g -c alloc.c
Loading …
myname# size hack
text data bss dec hex
158720 47104 30404 236228 39ac4
myname# ls -l hack
-rwxrwxr-x 1 root 694272 May 10 10:23 hack
myname# strip hack
myname# ls -l hack
-rwxrwxr-x 1 root 206848 May 10 10:23 hack

And with that being said, it seems just about any version of GCC will do… from 1.27 to 2.45. I’ve test played it, and you get the tombstone when you die, not a core dump. This applies to 4.2 BSD and all the 4.3 BSD’s. I’ve updated the sourceforge binary packages that I have made for Hack to include this hybrid exe that seems to work just fine.

Happy hacking!



Hack is the precursor to NetHack, and the follower of rogue. It’s a fun game, however I thought it would be a great addition to my 4.2 BSD project stuff. Thanks to the awesome site NetHackWiki I was able to quickly find Hack 1.0.3, download it, convert it into a tape for SIMH, and get it compiled. In it’s present state it does core dump when exiting, I’m not all that sure as to why, and to be honest I’m not all that good with adb. Perhaps a project for another time.

At any rate, the game is somewhat playable.

GCC is required to compile the source, pcc chokes when trying to build. I have made minor modifications to the source with regards to some variables, and renaming variables called ‘inline’..

If the COMPAT_42 is built with any later BSD it should run the binary otherwise producing your own ought to be trivial.

The binary is located here.

The modified source is here.

I’m sure there are all kinds of mods like PC hack to run it under DOSBOX or some kind of Windows thing, but it’s more fun running it under a VAX 11/780 emulator…

New versions of Qemu!

While I’ve been playing with 386BSD, it seems a bunch of new versions of Qemu have been released. Sadly they all crash at the same point on 386BSD so it’s kind of moot. Also my OS/2 2.0 image doesn’t work on the new Qemu, it hangs at the switch to graphical mode…. So I suspect there will be more quick revisions to Qemu.

At any rate, they have added all kinds of features and stuff to it, I’d say check it out, but hold on tightly to older versions that you have working now…

You can find the source code to Qemu here.

The win32 binary is lagging, so you’ll have to build it yourself. I’ve been using my old MinGW environment that I had detailed it’s setup here.

The new Qemu works with GCC’s greater than version 3 which is a good thing for the many platforms with ONLY GCC 4.

Windows XP Mode in Windows 7

Well it seems to be all the rage in the world of emulation on Windows 7. Windows XP mode, from the user standpoint is just like the old days of WIN/OS2 from OS/2 2.0 and above.

While WIN/OS2 used specialized device drivers that could ‘punch thru’ the virtual machine, and render each window on the OS/2 PM display, Windows XP mode, takes the Citrix like approach of using Terminal Services (RDP) to initiate a remote display to the local desktop.

Since RDP is the mechanism used, only XP and above will work, sorry Windows 2000 users. Another minor (is it?) annoyance is that the new version of Virtual PC has NO floppy driver support! It also seems to not have sound support, although it’s totally unverified at the moment. I’ll have to snag a VHD with MS-DOS pre-installed along with whatever integration tools I have around.

Anyways, the install is a snap, you can find all the components here.

Setup is straight forward, just install the Virtual PC component, then Windows 7 will want to reboot. Then install the Windows XP msi file (it’s over 450MB) and you’ll get a fully installed copy of Windows XP ready to go, and best of all you don’t have to configure anything. Start Windows XP in a “normal” desktop environment, install whatever it is you want to run. Publishing apps to the Windows 7 desktop is easy, just paste a shortcut under the “all users” start menu, and the screen will blink and it’s available.

The down side, is that other OS’s seem to perform poorly under this version of VPC. The mouse is very erratic on RHEL 4 that I had to setup to emulate a production environment. Also you need to have a CPU with the new virtualization extensions. It seems this VPC version is more like the hypervisor in 2008, then like the old Virtual PC we all knew. I almost wonder if there is a way to run VPC 2004 or 5 on Windows 7 natively for running older stuff…

It will be interesting to see where Microsoft goes with this, as this could leave a major rift in their product lineup. And as I’m sure a few people will find out, just because you have a ‘new’ machine doesn’t mean the CPU is up to the task… Not all new CPUs have the virtualization environment built in…

Another issue I’ve been having is that the network from time to time disconnects and will remain disconnected… It seems if you shut down & power the VM on/off (no hibernation!) eventually the NAT adapter will reconnect. Clearly it’s a beta. Also it won’t let you publish solitary, pinball, nor any of the other games. However it will let you publish cmd.exe so you can run them that way.



OS/2 vs Windows 7

I installed the latest RC of Windows 7 x64 today, and while going thru the latest wall papers I saw one that looked surpisngly familiar…..

Then it hit me, this looks a LOT like the old light house from OS/2 2.0! To check I quickly installed a copy of OS/2 2.0 on Qemu 0.90 (which works on Vista, unlike 0.91).

Lighthouses into the new world...


While it may be the same place from a different angle, the similarity is kind of funny. At the time OS/2 2.0 was the new striking consumer 32bit OS, and here I am on the new striking consumer 64bit OS… with more or less the same wall paper from a different perspective.

The more things change, the more they stay the same!

386BSD & Bochs

386BSD on Bochs

While checking around on wikipedia for something related to 4.2BSD, I found out that bochs 2.4 can run 386BSD!

Now the significance of 386BSD is that it was the real first time that BSD had been given to the masses, in that it *could* run on commodity hardware (read 386’s!), come with full source code and be free. It is no wonder that the initial 0.0 release had well over 100,000 downloads!

It is getting harder and harder to track down a download source for 386BSD as it too was swept up in the great lawsuit of AT&T vs BSDI/CSRG although it was never named in the suit. Not to mention it was quickly superseded by the FreeBSD & NetBSD projects. It is very unstable in the 0.1 release, there is clearly some issues with it’s “install” program with regards to allocating swap space, and in general with the OS’s swapping routines. Also because of the overlap any attempt to install on a disk larger then 100MB results in a corrupted file system that will no longer boot after the eventual file corruption. It’s quite sad, but if you search the news group at the time, there was all kinds of issues with the install process, and with it’s stability.

The installation process does involve quite a bit of floppy shuffling, and will almost result in lots of trial & error to get it going. While there is an install guide on the install disk, it isn’t worded into exactly how to do it. Needless to say the Free/Net BSD releases have improved on the install greatly.

On the other hand it sure is interesting to see a Net/2 BSD to see how far we have come, and how so much is the same.

You can find 386BSD on the mirror site

Just watch out that the install floppy (dist.fs) is only 1.2MB.. So be sure to alter your bochsrc file accordingly.

Announcing Research Unix v1 for Windows


Today I have decided that I should make a windows installer for the Unix v1 restoration project’s efforts on getting Unix v1 running.

For windows users this is a simple click & install project. This version of Unix v1 will support up to 8 simultaneous users on the system. Please note that this is a ‘rework’ of the v1 kernel from printouts to run a v2 userland, and the earliest C compiler from somewhere around v3-v4. It is not ‘pure’ per say as almost all v1 Unix documentation, tapes have been lost.

Simply install with all options, then click on the “RUN unixv1” link, and the kernel will load up (quickly!) to a login prompt. Login as root, and you should be good to go. Additional users can telnet into the host PC on port 12323 and they will be prompted to login. You can also use the “attach a pty” link, and it will launch teraterm pro onto the port 12323.

Because of the age of this system lots of commands that you take for granted did not exist back in 1972. A quick survey of my own use led to this:

Sync –doesn’t exist-
Reboot –doesn’t exist-
Vi –doesn’t exist-
Clear –doesn’t exist-
Cd –it’s actually chdir
Finger –doesn’t exist-
UUCP –doesn’t exist-
TCP/IP –doesn’t exist-

Remember it’s on a system with 32kb of ram. Don’t confuse Unix’s humble beginnings with the later v7 on the VAX, or the BSD releases that added TCP/IP networking.

I have included the PDF for the 2nd edition programmers guide. Since the userland is from this generation it is as close as you will get to a system manpage.

To exit the emulator, you can just close the SIMH process window, or hit Control+E then q to quit. I’m not sure of a ‘clean’ way to reset a Unix v1 machine. If there is significant disk corruption, I’d just recommend un-installing this program, then re-installing. It is no doubt the saving grace about running this emulated. As far as I know nobody has run this on a physical PDP-11. You would require an actual 11/20 because of how the multiply / divide instruction is handled. I won’t run on any of the bigger PDP-11’s.

The project page is:

You can download this release from here: