Okay, so I bought an AVR STK500 programmer board for about £80 from http://uk.farnell.com, which comes with an ATmega16 and an ATmega8515-8PC microcontroller (not an AT90S8515-8PC as stated in the manual, but I only figured this out later). Just to be extravagant, I also bought an ATmega128, which has 64 pins so I had to buy an STK501, which costs more than the STK500 (about £95). This was from http://rswww.com; it hasn't arrived yet, however.
It needs a serial RS232 port (AKA a COM port on PCs) to program it. These are a bit rare these days, so I thought I was going to have to buy a USB to RS232 adapter, which cost about £30, and seem hard to find in shops. If I did buy one, I'd want it also to work on Linux, and operate at the required 11280+ baud. Luckily however, I discovered that I do have a COM port on a windows box I have.
It also needs a 10-15V DC, 500+ mA power supply (polarity not important, but negative-centre preferred). Luckily I found that I had one from external DVD drive I could use.
So, I am now at the point where I can plug it in and turn it on. The board came with an ATmega8515 already inserted, and pre-programmed with some code which will flash the LEDs on the STK500 if they and the switches are connected to the microcontroller. Yep, and it works, so far so good.
My friend (Martin) suggested that I might use a chain of shift-registers to shift out a given pattern to the LEDs quickly, pause for a while, then repeat. If this is done quickly enough, the shifting should be invisible. Presumably some sort of arrangement with latches could keep the LEDs isolated whilst the shifting happens if this proves to be a problem. I quote:
The easiest way to do it, as I mentioned before, is to connect all the
shift registers in a line with the LEDs connected to their outputs. Then
you feed in the pattern you want from one end, very quickly, and leave
it to sit for a while before loading the next.
PWR ---+-----------------------+---------------------
| |
CLK -----+-----------------------+-------------------
| | | |
+------------------+ +------------------+
---->| SHIFT REGISTER 1 |--->| SHIFT REGISTER 2 |---> ...
IN +------------------+ +------------------+
| | | | | | | | | | | | | | | | | |
LEDs O O O O O O O O | LEDs O O O O O O O O |
| | | | | | | | | | | | | | | | | |
GND ---+-+-+-+-+-+-+-+-+-------+-+-+-+-+-+-+-+-+-----
The rest is a case of programming the microcontroller to feed in the
patterns. You can do this in C, or assembly if you're feeling hardcore.