In the investigation for issues like #679 and #664, I found strange behaviors in SEGA Saturn emulation of Yaba Sanshiro. DMAC(Direct Memory Access Controller) starts memory copy despite CD-ROM data is not read yet. The master CPU start copy to VRAM before the slave CPU finishes copying data to the source region. I write code that reproduces these behaviors and runs it on the real SEGA Saturn. it shows that memory access timing is the cause of this matter.

SEGA Saturn has three buses. CPU bus, A bus, and B Bus. CPU bus connects to main memory, backup memory. A Bus connect to CD-ROM drive, B Bus connect to Video memory and Sound memory. My investigation shows the time required to access each is different. The screenshot below is a result of memory access test program running on the real SEGA Saturn. right numbers are the time required to finish memory copy.

I implement this difference then there are many improvements.

But also, since this implement affects everywhere in the emulation, there are unexpected side effects.

  • Some video scenes flickrs.
  • The frame rate of Virtua Fighter 2 and Fighters megamix drops down

I will fix the side effects as many as I found. But it will be not enough with just two eye bolls. I will release the beta version. I hope you guys will test and report issues to GitHub or this site using report tool. You may complain about regressions, but sometimes progress needs pain and the show must go on!

EDIT(05/09): I have released 3.2.BETA. You can download it here.

posted by: devMiyax