OK, got basic world rendering working. Using translucency to test basic occlusion culling but it will end up opaque eventually. Rendering's quite bad right now, and I honestly blame the sheer amount of divisions I'm doing in the CPU, so I should probably offload those to the GTE. That and I'm still not using DMA, and I should use it, but that can wait until tomorrow.
Also, adjusting the delays used for port I/O to the GPU makes me get back to 50fps for the most part, so actually, it's probably not the divisions.
Here's the basic idea of the renderer. I've got a 3D voxel world, and I do a breadth-first floodfill from the camera, taking care to ensure that I don't double-count a cell. I build an ordered list of cell positions and then I walk them back to front. The PS1 has no Z buffer so you basically have to do painter's algorithm to do things, and while it *does* provide surprisingly good facilities for handling this (it's basically got hardware radix sort support), I'm not using them here.
The floodfill is somewhat expensive right now so I only calculate it whenever the cell the camera's in changes, which happens a lot so I'm going to have to find a good solution for that.
Oh, as far as RAM usage goes, I'm using about 10% of 2MB right now, and that includes the music I've got in there as a placeholder. For VRAM I've got no textures so I'm only using two 320x200 video buffers in the 1024x512 space I've got. For sound RAM there should be plenty of space and the samples for the music fit just fine so I'm not concerned about that.
Anyway, we should be getting close to gameplay going in. I think tomorrow's going to be DMA and world collisions.