As a researcher, software engineer and hardware designer, I have often
needed to write or modify programs to support my work. I also write programs for
fun. This page is an archive of the work I am able to make freely available.
It is divided into small and large programs.
I have also included some hardware designs in VHDL form.
My professional activities page lists the
other software and hardware projects that I have contributed to.
Small Programs
My definition of a "small program" is a utility, patch or
small software library.
- pickleserver.py is a Twisted Python
module that implements a lightweight distributed computing platform
for Python programs. I use it to distribute experiments to
a group of machines on a LAN. It is also useful on a multi-core
system: it makes it easy to run N single-threaded tasks on N cores.
Its advantage over the many programs
that do something similar (e.g. BOINC) is (1) good Python integration,
and (2) extreme simplicitly.
- udg.py is a Python module that generates
uDrawGraph
files from Python data structures. This is useful for debugging
graph algorithms. For my PhD work, I used this to
visualise control flow graphs.
- epsfixup.py
is a Python program that modifies an EPS image file so that it will be
processed with high quality compression by the PDF distiller. This is useful when
the PDF image compression is destroying the quality of images in documents.
This external page explains
what is happening in detail.
- Sound Troll locks the Windows
recording input to a specified device, preventing other
programs changing it. This might be useful if you have two sound cards. This
program is written in C.
- My SOCKSified version of SDL_net allows
you to enable an SDL application for SOCKS. This program is written in C.
- thumbnail is a Python extension (Python + C)
for Windows XP that (1) allows Python programs to generate thumbnails of
documents, and (2) communicates with a
Flash applet via a local
connection.
- Patches for Simplescalar,
the CPU simulator. These allow you to compile Simplescalar on a modern system.
I also wrote some other patches to enable support
for RTEMS, the real-time operating system.
I'm going to keep these online indefinitely, but I now tell everyone to use
M5 instead of Simplescalar if possible.
- em180 is an emulator for the Z180/64180 microprocessor
for Linux systems. It is an extension of an existing Z80 emulator; it implements
most of the new Z180 instructions.
Large Programs
My definition of a "large program" is a complete standalone application or a
large software library.
- The virtual lab project includes
a great deal of software written by myself, including two servers and
one shell written using C, and client libraries written using Twisted Python.
- The software library I wrote for my final year project
as an undergraduate. This is a
search engine for analogue electronic circuits (expressed in
SPICE format). The
project report provides all the documentation.
This program was written in C and C++.
- 20,000 Light Years Into Space is a steampunk-themed
strategy game where you have to manage a steam supply network. It is
written in Python and runs on Windows and Linux.
- My PhD thesis includes a very large software distribution
that includes simulators, benchmark programs and WCET analysis tools.
- The Nethack Valentine's Day 2004 Special is a game
that was written as a present for Jillian. It is an extension ("mod")
for Nethack. This program is written
in C and runs on Linux systems.
- Snowplough is another mod for an existing game,
this time Digger. It makes Digger look
all Christmassy. This program was written in C, and runs on Windows and Linux systems.
- York is a game inspired by
Carcassonne,
one of my favourite board games. Unfortunately I was forced to abandon this
programming project due to time constraints, but all source code is available
in a "mostly working" unfinished state.
- A fixed point mathematics library
for the Z180/64180. This is written in Z180 assembly code; it is part of an
undergraduate project.
Hardware Designs
My hardware designs are synthesisable source code for use in a programmable
logic device such as an FPGA.
- Virtual Lab Interface Hardware
is a component that concentrates multiple bi-directional channels into
a single serial connection. This allows software to communicate with
several hardware devices in a single FPGA. One of these is
the debugging device, which generates
a debugging
system for VHDL hardware designs, allowing inspection of registers, single
stepping etc., via a serial cable. These components are related to
the virtual lab project, but they do not
require any virtual lab hardware or software.
- My PhD thesis includes synthesisable
hardware designs
for a predictable CPU and its peripherals.
- FX12 Linux is (1) a Xilinx EDK hardware
design and (2) a set of modifications for the Linux kernel. Together, these
components implement a complete Linux system for the tiny
Avnet
FX12 mini module, which features a Xilinx Virtex-4
FX12 FPGA.
| |
 |
|
|
| |
Copyright (C) Jack Whitham 1997-2008
|
|