Tasks

What I'm working on right now

Having A Life
Ok, so that's a bit glib, but my partner started complaining bitterly about being widowed by this project. I do intend to return; possibly once I've gotten moved into my new place. I'm not dead, just restin'.
Sending my changes to the uClinux folks
I need to pretty it up a bit, move the Cyclone stuff to conform with the new ARCH/PLATFORM/BOARD layout, and fix whatever I have broken.

To Do

Console Support
Right now, I am implementing console output with some custom code. It is just enough to be able to see what is going on. Eventually, I should work in the frame buffer console support which exists in the m68k port.
Getting kernel command line from NVRAM
Right now, it is hard coded into the kernel, which sort of defeats the purpose of a kernel command line.
Stacks
The kernel inherits a stack from the stage 2 boot loader, but it gets a new one right away. The supervisor and interrupt stacks can be relatively small, and are just static arrays. They can be small because the syscall and interrupt routines immediately switch to a kernel stack upon entry. I have written a function which executes the i960 Reset sysctl AND saves enough of the registers so that the function can actually return. Reset is the only documented way to specify new interrupt and supervisor stacks.
Getting the FSF's GCC to generate suitable code.
I've been using Intel's CTOOLS compiler, but, well, it isn't gcc, and a lot of Makefiles need heavy tweaking to use the different command flags. Currently, gcc lacks the -mpid and -mpic features to make workable code for userspace. I have not yet gotten gcc to make a proper kernel, though I seem to be getting closer.

Done

Get the kernel to actually run
After much blood, sweat, and tears, I have actually gotten the thing to boot and run Keith's userland. Telnet and httpd work, as does catting /proc files.
Memory Management
Since the RAM is banked, and Linux doesn't know how to cope with that, I had to do some serious magic to make the two play nice together. Allocating and freeing memory is a little slower, but I get to use all of the memory.
Ethernet Driver
Necessary for NFS. I was able to modify the Apricot driver to use the different I/O ports and interrupt. Oh, and this chip is wired for 32 bit operation, as opposed to the Apricot's 16. The MAC address comes from a different place, too. Once I have enough other stuff working, this driver could do with a bit of optimization (waste reduction) in how it allocates buffers.
Boot loader
I've got it to the point where I am producing a table of the sizes of the banks of RAM, which I pass on through the boot stages. The kernel is stage 3 as far as the boot loader is concerned, and has access to that table. Actually, unless I discover something wrong with it or that I need it to do, it is pretty much done. It still has some debugging code in it, though. Earlier, I produced an image with a simplistic stage 3 program which just prints the sizes out. If anyone out there actually has one of these things, you can grab it here.