Ok. So I appear to have sorted out the last inconsistency issue with the SA-1 carts. The key is getting the clock signals exactly right in order to have the cart recognized and dump properly. One of my SA-1 carts, PGA European Tour, almost never got recognized due to a slightly incorrect clock frequency. I completely forgot that I had an old PIC 16F84 frequency counter so I never bothered to check the clock signals until yesterday.
Using the Si5351 Arduino library (GitHub - etherkit/Si5351Arduino: Library for the Si5351 clock generator IC in the Arduino environment), there is a calibration needed to get the clock output as close as possible to the target 21.477272 MHz and 3.072 MHz. If you read the documentation on the library, then you will find the calibration section in the Readme. You need to run the si5351calibration sketch in the Arduino IDE to find the setting for your individual setup.
After testing my clock generator with a frequency counter, I found that my clocks were at 21.46998 MHz and 3.07096 MHz. So the clock generator definitely needed calibration. I ran the si5351calibration sketch in the IDE and found the correction needed for my reader. The set_correction value needs to be set early in the setup. Here's how my clock generator section in setup() looks right now:
void setup() {
...
// Adafruit Clock Generator
clockgen.set_correction(-29000); // Find this value by using the si5351calibration in the Arduino IDE
clockgen.init(SI5351_CRYSTAL_LOAD_8PF, 0);
clockgen.set_pll(SI5351_PLL_FIXED, SI5351_PLLA);
clockgen.set_pll(SI5351_PLL_FIXED, SI5351_PLLB);
// Set Clock Generator CLK0 to 21.477272MHz
clockgen.set_freq(2147727200ULL, SI5351_PLL_FIXED, SI5351_CLK0);
// Set Clock Generator CLK2 to 3.072MHz
clockgen.set_freq(307200000ULL, SI5351_PLL_FIXED, SI5351_CLK2);
clockgen.output_enable(SI5351_CLK0, 1);
clockgen.output_enable(SI5351_CLK1, 0);
clockgen.output_enable(SI5351_CLK2, 1);
...
}
The clocks are now almost spot on at 21.47727 MHz and 3.07199 MHz. With the current clock settings, the SA-1 carts are recognized every time even the problem PGA European Tour cart. I'll be picking up a new frequency counter to replace my old PIC16F84 unit so maybe I can get the clocks exactly right.
For anyone planning on adding SA-1 support to their reader, the snescic-lock-resync is definitely the best version to use. Don't bother with the SuperCIC as it doesn't recognize the SA-1 carts as reliably as the snesCIC resync version.
Using my reader, I dumped a new version of an SA-1 cart, PGA Tour 96 (U). The cart that I dumped is Revision 1.1 with ROM chip "SNS-A3GE-1". The previous known version is Revision 1.0 with chip "SNS-A3GE-0" (I dumped a copy of that one too). I submitted the new dump to No-Intro and GoodTools so it will eventually be available for anyone that cares about this type of stuff.