I was able to make some progress on this thanks to
@opualuan generously loaning me his XRack card. I dumped the ROM and attached it to this post. It's only superficially different from the Mathey ROM; just the names are changed, everything else is the same. The contents of the AT93C46 are identical.
My problem was the ROM device ID check all along. The Fcode has a whitelist of 5 flash ROM parts:
| Brand | Model | Mfg. Code | Dev. Code | Notes |
| Winbond | W49V002A | 0xDA | 0xB0 | Same as W49V002AP, found on Mathey and XRack cards |
| SST | SST49LF020 | 0xBF | 0x61 | Should work |
| AMD | AM29LV040 | 0x01 | 0x4F | No LPC support |
| SST | SST39SF010A | 0xBF | 0xB5 | 5V part, also no LPC |
| Atmel | AT49BV512 | 0x1F | 0x03 | Too small (only 64KB) and no LPC |
Only the first two make sense. The remaining 3 lack LPC support, which the VIA 6421 requires. Not sure what they're doing there, maybe left over from something else. My PC card came with a SST49LF020
A which is
not the same as the plain SST49LF020. It has a device code of 0x52, so it will not match the 0x61 the firmware is expecting. When I install the Winbond chip from the XRack card on my modified PC card pictured above, with no other changes, it works great, just like the original XRack card, bootable in OS 9 and X, etc.
As an aside, the AT93C46 is operating in 16-bit mode, but instead of pulling the ORG pin up to VCC as specified in the datasheet, the XRack card leaves it floating. The datasheet says that ORG has an internal 1Mohm pull-up, so the part should default to 16-bit mode, but also that if you want to leave that pin floating, you should use the AT93C46
A, which is a 16-bit only part, so you don't need to worry about the ORG pin. I am pulling ORG up to VCC on my PC card and it works well. I wouldn't trust such a weak pull-up, but apparently whoever designed this card did, and it seems to work fine too.
So, the device code check...that should be pretty easy to hack, right? Here's how it's encoded in the firmware:
The manufacturer code and device code are in there twice, the second time is endian-swapped, no idea why, but all the ROM entries are like that. So, a simple change to BF 52 52 BF should do it, but that'll screw up the checksum, right? To take care of that, I used the old trick of adding some bits elsewhere equal to what I subtracted. In this case, 0x61 - 0x52 = 0xF, so I needed to add 0xF in two places. I chose the spaces before and after Storage, which turns them into ASCII slashes:
I was feeling quite clever, but this did not work. Thanks to the detokenized Forth that joevt posted earlier, I was able to figure out where the checksum is stored and how to calculate it, so I made another version of the ROM where instead of adding 0xFs, I corrected the checksum. That didn't work either. With either modified ROM loaded onto the SST49LF020A, connected devices will show up in the boot menu when holding down the Option key, but I cannot boot from them, and they do not show up when booted into 10.4 on another device (and neither does the card).
If I load my modified ROM onto the W49V002AP and install that onto either card, it works fine, so I don't think I screwed anything up. Something is still weird with the SST49LF020A vs. SST49LF020. The only difference I can find in the A version is some ID pins that are used as straps, so that up to 16 of the devices to share the same bus. I'll look at what, if anything, either card is doing with those pins. In the meantime, I have some W49V002APs on the way.