Browsing your code I looked a bit at your 68K implementation. Here I am providing some answers to some of the comments at your code:
Note that hardware tests have shown that all registers are not initialized to 0 when the processor is first powered on. In fact, it would appear that most likely all that is initialized is what is initialized by a normal reset operation, namely, PC, SSP, and SR. We know that the data registers and address registers 0-6 are uninitialized
Only the SR is initialized at reset, nothing else. The PC and the SSP are initialized only indirectly, as a consequence of reading the vectors at the exception process.
We have reason to believe that this interrupt execution time is too long for user interrupts on the Mega Drive. Tests with horizontal interrupts on the last line of the display indicate that horizontal interrupts need to be taken more quickly by the M68000
The interrupt exception time at the Motorola manual is correct. But as noted on the manual, it assumes an interrupt ack cycle taking 4 cycles. However I understand that Genesis interupts are autovector. Autovector interrupts use VPA and not DTACK and the interrupt ack cycle becomes a 6800 peripheral bus cycle. Then the timing is variable depending on the internal state of the E counter. See appendix B at the Motorola user manual for details.
This is based on a best guess, that the M68000 probably drives the data lines low before starting the read, and considers the interrupt vector number to be uninitialized if the resulting vector number is 0.
There is no such a thing. There is no concept of unitialized interrupt at the CPU. This is just a Motorola convention, a recommendation to the interrupt controllers to use that vector if the interrupt is not initialized. If DTACK is asserted the CPU expects the data bus to be driven during the ack cycle. And if it is not, it will read bus capacitance, pullups or just plain random noise.