Kestrel-1 20th Anniversary Edition emulator (ARCHIVED; see ~vertigo/forthbox for recent development).
50Hz timer tick now tied to actual clock.
Code to test full-screen update speed
Commentary for SVFIG


browse  log 
release notes 



You can also use your local clone with git send-email.

#ForthBox Emulator

also known as...

#Kestrel-1 20th Anniversary Edition Emulator

In 2004, I embarked on a project to build for myself a W65C816-based home-made computer. I eventually succeeded in making a computer equipped with 32KiB of RAM storage from $8000-$FFFF, and I/O from $0000-$000F. This computer ran at 4 MHz, and relied upon an umbilical connection to a host PC to load software into it. It ran quite well; however, its limited I/O facilities naturally limited what I could do with the machine. Eventually, I named this home-made computer the Kestrel-1.

As I write this paragraph, 18 years has elapsed since I placed the last wire on the Kestrel-1. It's time I return to this project and finish it.

#Emulated Features

The following "hardware" resources are currently emulated:

  • W65C816 16-bit Processor
  • 16MiB RAM (note: actual hardware is likely to only have 512KB or 1MB)
  • Operator/Debugger Console
  • Up to 8 fixed DASDs up to 32MiB each

This project is a fork of Alan Cox's v65c816 project. As it currently stands, not much has changed. With time, however, I hope to emulate other bus-resident peripherals as well.

#System Software

The disk0 directory contains an interactive machine language monitor, IM/F.


This repository uses Git submodules. The easiest way to clone this repository is to use the --recursive option on your git clone command.

git clone --recursive ...


You must have cmake and xa65 installed.

First, you will need to build and install the emulator. This will install the executable and a set of manual pages, which you can summon with man k1emu.

rm -rf build
cmake -S . -B build
cd build
make install

Then, you'll need to build the bootstrap. This will create a 512KB DASD image containing the basic system software. If you desire to create your own DASD image for the ForthBox or Kestrel-1, you are encouraged to duplicate the disk0 directory and customize it to your liking.

cd ../disk0


There are two ways to run the emulator. The first way is without any options. Note that you must have a DASD file named disk0 whereever you run the emulator from.


The second way is to turn on tracing support. This is normally only used for debugging purposes during initial bring-up. Warning! Tracing mode produces a ton of output.

k1emu -t

#Disk Files

Up to 8 virtual DASDs (each no greater than 32MB in size) are supported. Simply call them disk0, disk1, ..., disk7. Note that disk0 is always the boot DASD, which is why it must always be present. The other DASD files are optional.


The imaginary boot ROM loads block 0 from disk0 to $FC00-$FDFF and jumps to it in 6502 mode.

#System and Application Development

You'll find additional information for programming the environment in the k1emu(1) and k1emu-io(7) man pages, including a complete description of the I/O page and examples on how to use the DMA/block move space.