Call me a pessimist, but... if you're buying the development kit to get familiar with FPGAs might it be a better idea to try interfacing it to something a little slower/better documented than the SE/30 PDS first?
(Apple II, maybe an an ISA slot... how about a clip or socket-adapter to tap into an SE or Plus' 68000 bus?)
Nah. I've already had a class on VHDL and FPGA programming. It was about seven years ago... But this won't be my first shot at FPGAs. I probably know them as well as I do microcontrollers.
And interfacing them on the SE/30 or the Apple II looks about equally complicated to me because I'm not that familiar with either one. Neither the SE nor the Plus is 32 bit clean so I'd rather not try that.
The idea behind the baby steps isn't to make learning the FPGA simpler. It's to minimize the number of variables while I'm learning the SE/30 interface. If I try to get the SE/30 to command the FPGA to do something, I don't want to be left wondering whether the "something" is wrong, or the interface is wrong. I want the "something" to be as simple as possible so I can focus all my initial attention on the interface.
Starting out on an Apple II or ISA slot would just mean I was debugging interfacing with one of those computers first. That wouldn't help me any when I'm really trying to interface with an SE/30.
it seems that your plan is to map RAM into one of the Nubus slot spaces and try to remap it with the MMU? I seem to recall vaguely that 32-bit 68k Macs *already* do some fairly complicated memory mapping in order to paper over the differences between their native memory maps and those of the "24 bit" Macs. I can't find the Developer Note for the SE/30, but the one for the IIci specifically talks about how the 68030's MMU is used to remap the "small" NuBus I/O spaces (the 1MB ones, not the wide "Superslot" spaces) into the lower 8MB, in addition to shoving the location of the ROMs and built-in I/O devices. It appears the mappings for these are embedded in the ROMs. That's certainly not to say that it wouldn't be possible to add additional mappings which would take a block of memory located at 0x60000000 and append it to the end of motherboard memory, but at the least it's going to take something like a patched version of MODE32 to do it.
My first plan is to build a video card using DDR2 memory as the frame buffer. Once I get that working, I'll do the memory mapping stuff. But I don't want to get to the memory mapping part and discover that I needed a signal on my interface board that I didn't include, so I'm doing some conceptual design up front.
If all that ever works is the video card, that will still be a big accomplishment.
As to the memory mapping, I'm not so sure that will all work through the MMU. I've been doing some more pondering prompted by my recent reading in GTTMFH.
I'm going to have to spend some time with Inside Macintosh or something to figure it out. It seems to me, from what little I've read, that the Macintosh OS uses a bunch of Global Variables like ROM_base and VIA_base (not sure those names are exactly right) and probably one called RAM_base.
I would bet that it is possible to simply rewrite one of those base address globals in order to tell the OS that the RAM starts at 0x6000 0000 instead of 0x0000 0000. One might also need a little routine to copy any stuff that already exists in RAM to the proper relative addresses in the new RAM space.
Of course, with the SE/30 booting up in 24bit mode until Mode32 loads, that is a problem. I'm going to have to explore exactly what problems that causes and how expansion cards are informed of changing from 24 bit mode to 32 bit mode.
Honestly, I'm a little hazy on exactly what that 24 bit mode and 32 bit mode means down in the details. That's going to need some exploration.
But you're right, I might have to do something like put a variation on Mode_32 into the firmware of my card, or something. Or disassemble it and see what it does. Or just put a copy of the IIci ROM on the card and remap the SE/30 ROM space to the address of the IIci ROM on the card. Or put a IIci ROM on the card, program the FPGA to map the normal ROM address to the IIci ROM, and leave the SE/30 ROM socket empty so there's no contention.