These files are released under the GNU Public License, Version 2.

All the images require a Pent Pro or better with at least 32 Meg of memory.

*NEW* as of Mar 11, 2002: I have it running on a stRAaIGhT Pentium. At least one that CPUID's as type 052C and features mask 01BF. All I test for in the features mask is for 0019. I used to require 8019, but now I emulate the CMOV's if not present.

Click here for Bochs info

Here are some images for downloading that contain a bootable OZONE system:

Rev date: Sept 11, 2004

I also put together a simple floppy image. It uses the memory from 24M..32M for the system ramdisk. That leaves about 16 Meg left for applications.

Files (download either one):

Rev date: Sept 11, 2004


  1. Copy the bootfloppy image to a floppy (or gunzip bootfloppy.gz to a floppy)
  2. Boot the floppy
  3. It creates a ramdisk in memory range 24M..32M and puts the system files there
  4. It then boots the kernel it loaded in the ramdisk
  5. It takes a few seconds (5 or so) to load the kernel and start the system up
  6. Eventually it gets to the message press control-shift-L to logon
  7. It is safe to remove the floppy as the system is completely running from the ramdisk
  8. So press control-shift-L and it will put you in the shell (the startup file is set up to bypass username/password prompt)

The above works with a real system using a floppy and IDE hard drive. The Bochs I use has some patches I made and I sent in, and they adopted some of them. The only one they said they wouldn't do was to have the floppy drive accept a 'disable perpendicular' command as older floppy controllers choke on this command, so they wanted to trap it too. So I just removed it from my OS as it wasn't really necessary.

It still doesn't work with V1.3, though, as the Bochs floppy 'configure' command incorrectly expects 3 bytes for the command (total), instead of 4, so it prematurely indicates that it has received all command bytes before receiving the 4th. This is one I know they said they have fixed, but I haven't tested it with the most recent CVS stuff.

As of Bochs V2.0.2, stuff works as is. But if you try to use SMP, Bochs puques because it does not handle the local apic task priority register. There were also some small stuff that was messed up. So I modified it and now it works.

With Bochs V2.0.2, you will get a panic that says something like 'recal issued to non-hard disk' when OZONE probes for a CDROM. Just type in 'alwayscont' and Bochs will continue merrily on its way. I do a 'recalibrate' to probe for ATA drives and Bochs doesn't like it. I had to do the recal, it seemed at the time anyway, for an old hard drive I was using for testing.

Here are the repaired Bochs 2.0.2 source files:

If you are using Linux, just rename the .cpp files to .cc. They are otherwise identical.

I put together a patched bochs zip file with everything self-contained. I tested it with Windows XP and 2000. I don't have an WindoesNT system handy. The EDT keypad keys are scrambled using Bochs, though. Also, a little patience is required while the loader is gunzipping the files from the floppy onto the ramdisk.

  1. Download it (2841Kb)
  2. Unzip it into a folder (it all goes into one folder)
  3. Run the bochs.exe by double clicking or starting from MS-DOS prompt
  4. Select option 2, then supply filename rchd10meg.txt
  5. Select option 5 and it should boot all the way through to the 'press control-shift-L to logon' message
Rev date: Dec 9, 2003

If you want to enable password prompt for logging in, do this:

  1. change the
          create logical name -kernel OZ_SYSTEM_TABLE%OZ_LOGON_IMAGE {load_dir}oz_cli.elf
    in boothard.cli to
          create logical name  -kernel OZ_SYSTEM_TABLE%OZ_PASSWORD_FILE {load_dir}../startup/password.dat
          create logical name  -kernel OZ_SYSTEM_TABLE%OZ_LOGON_IMAGE   {load_dir}oz_util_logon.elf
          create logical name OZ_SYSTEM_TABLE%OZ_UTIL_LOGON_MSG "OZONE experimental system" "Authorized access only"
  2. Create a password.dat file in /ozone/startup/ directory with this line in it:
    ... without any spaces. The password in this example is pass. There really isn't anything special about the name root. The thing that makes this entry magic are the *s in there that give it unlimited access to everything. The 1000 says to run things by default as priority 1000. The 5000 means this user can start things up to priority 5000.
If you mess up the file and can't log in, you can break in (because you're at the console) by pressing control-shift-D and entering diag mode. From there, you can start the oz_cli.elf image directly and fix the problem.

If you have a Dec Tulip card with a 21041 or 21140 in it, you can start the ip stack. It also works with a Realtek 8139. The tulip driver only supports twisted-pair 10MHz mode whereas the Realtek 8139 driver will autosense for either 10MHz or 100MHz, and half- or full-duplex (ie, the chip pretty much did it without any effort ;). You need something like this in the startup file (boothard.cli):

create logical name  -kernel OZ_SYSTEM_TABLE%OZ_IP_HOSTNAME <its host name like>
create logical table -kernel OZ_SYSTEM_DIRECTORY%OZ_IP_SERVICES
create logical name  -kernel OZ_IP_SERVICES%ftp    tcp:21
create logical name  -kernel OZ_IP_SERVICES%telnet tcp:23
create logical name  -kernel OZ_IP_SERVICES%domain udp:53 tcp:53
#  Define filters (optional)
ip filter add input 0 accept srcipaddr <a net addr/mask like>     # accept anything coming in from home
ip filter add input 1 accept srcipaddr <a net addr/mask like> # accept anything coming in from nii
ip filter add input 2 deny   tcpflagsyn tcpflagack not          # deny connection initiations from anywhere else
ip filter add input 3 accept proto 6                            # accept other tcp packets from anywhere
ip filter add input 4 deny                                      # deny everything else
#  Start hardware
ip hw add etherloop
ip hw ipam add etherloop
ip hw add <its devname like dectulip_0_10 or rtl8139_0_9>
ip hw ipam add <its devname like dectulip_0_10 or rtl8139_0_9> <its ip address like> <its_net_address like> <its netmask like>
ip route add <the router ip address>
ip dns server add <a dns ip addr> 53
ip dns server add <a dns ip addr> 53
#  Start daemons
run -orphan -nowait -thread OZ_SYSTEM_TABLE%ftpd_thread    oz_util_ftpd.elf    21 -restrictports
run -orphan -nowait -thread OZ_SYSTEM_TABLE%telnetd_thread oz_util_telnetd.elf 23
Sorry I only have an FTP daemon, no client. There is both a telnet client and daemon.