Projects
FreeBSD netboot
We maintain our own version of the FreeBSD "netboot" code, and we use it for
booting the 60 or so diskless X-terminals in the department. The FreeBSD
people have deprecated the use of netboot in favour of the "etherboot"
project, but we continue to use netboot. Our version includes support
for the Intel Etherexpress Pro cards, building on FreeBSD 3.x, and more
recently ELF kernel support. The code is available in
my
netboot working source directory.
We currently use flash chips in most X-terminals, and program them with
a
FreeBSD flash utility (Some newer versions of the Intel Etherexpress
cards have an Atmel flash chip soldered on the board; for these, a
special
Atmel version may work).
MMDF
MMDF is the "Multi-channel Memo Distribution Facility", an ancient Mail
Transport Agent (MTA) written around 1979-1986. We use MMDF to handle
all mail within the department, but our version has changed almost
unrecognisably from the original. As well as fixing a multitude of
bugs and security issues in the original version, we have added many
new features, and rewritten several sections of the code. Our
development tree
and (partial)
change log are available.
FreeBSD libkvm tools
To help with debugging various FreeBSD kernel problems, I am slowly
building up a selection of tools that use libkvm to print out various
queues and structures from system core dumps. They can also be used
(somewhat unreliably) on a quiet running system. So far I have:
- mbstat
: prints information about the proportion of the mb_map that is in use.
- minfo
: prints all mbuf chains, optionally printing contained data in hex.
- nfsq
: prints the contents of the NFS server input record queue (ns_rec) and
the server cache.
- tcpq
: prints some TCP protocol control block information (unfinished).
- vnq
: prints a list of all vnodes, sorted by mountpoint.
- fstat
: a version of fstat(1) that includes information about socket buffer
sizes, when printing info about sockets.
All of these tools are based on the the source code for FreeBSD's fstat(1).
1995 Irish Micromouse competition
I was on the team that built the winning entry at the 1995 Irish
Micromouse competition. Some pictures and
details are available.
Amstrad CPC
Before going to college, most of my experience of computers came from
tinkering with hardware and software on the Amstrad CPC series computers.
My CPC464 (which is in an attic at home right now) was substantially
modified over the space of a few years; here are some of the additions:
- Internal 3.5" floppy drive and disk controller. In the newer revision
of the CPC464, the main circuit board is smaller, so there was room for
a PC floppy drive between the circuit board and the tape drive. I also
built a disk controller using a uA765 controller and lots of discrete
logic (including a discrete logic digital PLL), and this fitted inside
the case too. At the back of the controller board is a standard 6128-style
edge connector for connecting in external drives. There is also a digital
side-select switch which can be controlled either by buttons on the front
of the box, or by a "|SIDE" command in software.
- Internal 128kB battery backed-up static RAM, organised to emulate
expansion ROMs. After loss of memory, the disk ROM image must first be
loaded from tape before the disk drive becomes usable. Then other ROM
images such as BASIC 1.1, Maxam and Protext could be loaded from disk.
The RAM chip itself, and supporting logic are built piggy-backed on
ICs on the main CPC circuit board.
- Internal 512k expansion RAM. This is based on two 256k SIMM modules
and quite a bit of support logic. It sits underneath the main circuit
board, connecting to it via a DIP socket under the Z80 CPU.
- 8-bit printer port. Some of the other additions required some
general purpose IO ports (RAM write protect, side switch etc), so I used
one of these bits to add an 8th bit to the 7-bit printer port. Software
in a custom ROM image intercepted accesses to the printer to deal with
the 8th bit correctly.
- Internal EPROM programmer (well, not entirely internal - it required
an external socket and PSU). This was implemented by piggy-backing a
second i8255 PIO chip on top of the existing one.
- "|464" command. Some games and software wouldn't load with all the
extra ROMS present, or with the 6128 ROM image. A new external command
"|464" would immediately reboot the computer with all ROMs disabled. A
full power cycle would restore all the ROMS again.
I finally got around to unpacking my CPC recently; here are some
photos .