It probably wants correct subcode Q data; this must be put in cdram directly after the data at offset 0x924 (I left that out in the code I sent you).
This is not the case, sadly. Something else is upsetting the BIOS when the game tries to play a CDDA track. I can tell, because at no point is the BIOS even getting far enough in the CDDA processing to read from offset 0x924...

My current methodology is:
- First, upon a CDDA request, begin processing after either 1/75th of a second or the current time remaining until a CD sector transfer, whichever comes first
- After processing commences due to the callback...
- Calculate the current MSF frame, calculated by taking CDIC_TIME & 0xffff7f00
- Calculate the next MSF frame, by taking CDIC_TIME & 0xffff7f00 and incrementing by BCD 0x00000100.
- Calculate the next MSF frame, rounded to the next second, by taking CDIC_TIME & 0xffff0000 and incrementing by BCD 0x00010000.
- Set CDIC_TIME to be the next MSF frame
- Read a sector's worth of data at CDIC_TIME
- If we're at frame 0, begin playing a second's worth of CDDA audio by just playing it through the "CDDA" audio device in MESS
- If we're also at frame 0, trigger an interrupt
- Set a callback to trigger after 1/75th of a second, to poll the next MSF frame
I can't seem to determine what CDIC register bits should be set or cleared upon CDDA read...