[BUG] FDS game Putt Putt Golf just freeze in-game after switching to disk side B
Describe the bug Despite the recent IRQ updates, this game still does not work and unplayable.
To Reproduce Steps to reproduce the behavior:
- Load game Putt Putt Golf
- continue to play until you reach to the point of switching disk sides.
- wait for disk to load
- be amazed at a static screen shown in screenshot while music continues to play in the background.
Expected behavior Well, the sprites would appear and you can play golf :D
Screenshots
it just freezes on this screen:

(please complete the following information):
- OS and Version: [e.g. Windows 10] Linux: (arch/artix)
- Version of FCEUX used (QT or non-QT) QT : FCEUX 2.6.4-interim git
Additional context some things ive tried to force it to work (somehow)
- ~~ignore firing IRQ at scanline 174 OR~~
- force disk status reg $4030 bit 1 (transfer flag) to be always enabled;
- ~~following fbneo's fds disk functions (where fceux's disk routine was from) when is forced to trigger at $FFFF-5 instead of 0 will force the game to work, BUT everything moves slowly other than the music playing.~~
UPDATE: its appears that disk irq and transfer flag ($4030.1) are separate flags, so disk irq should not be used to set $4030.1. Since the variable DiskSeekIRQ value gets set when a disk transfer happens (also a counter to trigger disk IRQ when $4025.7 is set), we can use this variable to set 4030.1 instead and the game will work fine. aka(quick implementation just to test proof of concept):
if (X.IRQlow & FCEU_IQEXT2) ret |= 2;
to
if (DiskSeekIRQ) ret |= 2;
https://www.nesdev.org/wiki/Family_Computer_Disk_System https://forums.nesdev.org/viewtopic.php?f=3&t=16507
its appears that disk irq and transfer flag ($4030.1) are separate flags, so disk irq should not be used to set $4030.1. Since the variable DiskSeekIRQ value gets set when a disk transfer happens (also a counter to trigger disk IRQ when $4025.7 is set), we can use this variable to set 4030.1 instead and the game will work fine. aka(quick implementation just to test proof of concept):
if (X.IRQlow & FCEU_IQEXT2) ret |= 2;
to
if (DiskSeekIRQ) ret |= 2;
EDIT: It appears that the transfer flag at $4030.1 is suppose to be not needed for this game. Comparing with other emulators, they too do not send the transfer flag and yet they worked fine. Not sure why FCEUX would need that transfer flag to be returned at least once for this game....