The Centris 610, Centris 650, and Q800 were all released at the same time, I believe. They share the same ROM, memory and video controller, and most everything else. The Quadra 610 and Quadra 650 were speed bumps and received ROM updates, although it seems to be pretty much just to differentiate the Centris and the Quadra.
I've got the Centrises and can double check.
This page seems to indicate there are compatibility differences between the manual inject and auto inject floppies. That page links to a page that is now gone, but thanks to archive.org, here is the page that mentions the manual-inject floppy drive first appeared in the Quadra 605. But the C610/C650/Q800 predate the Q605, so I'll need to double check.
It may not be manual vs. auto inject related, it could just be ROM differences. In that case, it's worth testing the jump from the 512k ROM, which we know works with the IIsi, to the 1MB ROM. The 1MB ROM appeared with the Q700 and the IIvi/vx/Performa 600.
I've got a couple of those machines, and I'll try to do some testing with that today.
I burned a Quadra 700 ROM onto one of my programmable ROM SIMMs and booted my IIci with it. The IIci is now exhibiting the same behavior reported on the Quadra 800 (inserting a disk causes the OS to think it needs to be initialized).
Thanks for all the testing! That's super helpful, especially dougg3's ROM swapping test.
Someone on my blog reported that it worked on the LC 475, which is the same as the Quadra 605, which has the manual inject drive right? So the whole manual/auto inject thing may be a red herring.
I need to test again, but I think the behavior I saw on the PowerMacs was different from what you guys are describing on these 68040 Macs. On the PowerMacs, if I'm not mistaken, it acted as if there were no drive present at all. That was with an older firmware revision though, before I added 1.4 MB read support, so maybe something's changed.
I'm going to keep focusing on 1.4 MB write support for the time being, and just leave these 040's and PowerMacs as "known incompatible" for now. Unfortunately I'm starting to lose gas for doing much further firmware development, after having poured a ton of time into it this past month or two, what was fun originally has turned into a chore. I'm sure you guys have been in similar places before with some of your projects. It also doesn't help that the firmware is threatening to collapse under the weight of its complexity, and every little change I make now seems to introduce 10 new bugs. I'll check out those docs from bbraun and balrog though, thanks! Maybe there are some hints in there.
Now that I think about it, maybe dougg3's ROM swap test doesn't necessarily prove it's a ROM issue. Doug, did you notice if the internal floppy (the real drive) on the IIci worked after the ROM swap? If not, then it could just mean that the Q700 ROM expects a different floppy controller or memory map than is present in the IIci, rather than that there's an important difference in the floppy routines in that ROM.
The Quadra 800 reports of the LCD screen going blank or the Floppy Emu rebooting are the most disturbing. I can't imagine what kind of incompatibility would cause that, unless there's some basic electrical problem like a different voltage.
That's a good point about my test not proving it's a ROM issue without trying an actual floppy drive with that ROM. I just booted my IIci with a Quadra 700 ROM, inserted a 1.44 MB floppy into the internal floppy drive, and it works fine. So the new ROM still works OK with a real floppy drive. Then, just for consistency (proving it's not just the external port misbehaving), I hooked the floppy emu up to the internal floppy port and it exhibits the same problem (X disk icon when trying to boot from a known good image)
I totally get what you're saying about it becoming a chore. Working hard on the same project for so long does that to me too
I looked through the New Age floppy controller doc enough to see that some substantially new features were added to Apple's FDDs somewhere around this time - probably with the introduction of manual inject drives, but maybe that's a coincidence. The doc talks about several new drive parameters that should be queryable and settable, like a 2MB/4MB switch and some kind of PLL control, none of which are supported by Floppy Emu. The original Superdrive essentially has 4 address bits for internal drive registers, and all 16 registers are already used, so it looks like they used some weird tricks to add these new registers. Like the same address is used for multiple registers, and which register you're actually accessing depends on how many times you access it, or whether it's the first access since the last time the drive was enabled, or whether the drive motor is on or off. Unfortunately it doesn't go into much detail, or even say what the new register addresses are, since this document is for the host-to-controller interface, not the controller-to-FDD interface.
Doug, your second test gives me some hope. If the IIci's Superdrive can work with the newer ROM, then I assume there's some way the ROM routines can tell if they're talking to a regular Superdrive or one of these newer drives with the extra registers. I'm guessing Floppy Emu is somehow misidentifying itself as one of these newer drives.
But to muddy the waters further, it looks like the Q800 and other systems you've tested don't actually use the New Age controller. New Age was used in the AV series. The Q800 and friends use the SWIM II or SWIM III. Even the early Power Macs used SWIM III. So maybe these extra drive registers actually date back to the SWIM II, and aren't new with New Age.
Grepping the internet for anything relevant, I found this bit of 68K linux code. The function swim_init() has a switch statement that seems to match the observed pattern of what Macs do and don't work. On older machines where SWIMBase is VIA1_BASE + 0x16000, I believe every one that's been tested has worked. But for newer machines where SWIMBase is VIA1_BASE + 0x1E000, every one that's been tested has NOT worked, except for the LC 475. I didn't do the LC 475 test myself - maybe the guy who did was confused or made a mistake. If I had to guess, then, I'd say this code describes the current compatibility list for Floppy Emu.
After staring at some 68K Linux code, I have a hunch the problem may be that Floppy Emu always says it's operating in GCR mode, regardless of the actual disk image type. Using an 800K disk image in the Q800 or another "problem" Mac might actually work. If that's the issue, it should be easy to fix.
The high density MFM write stuff was a lot more difficult to get working than I'd expected. I was going nuts trying to debug all these weird timing and sync problems with print statements and LEDs. I lost my cool a few times, started yelling at the computer, etc... not fun. Thank God there's not much more left to add at this point.
The new PCBs shipped from China yesterday, so now the waiting begins!