First of all I must say I'm flattered to see people actually invested time in properly emulating my GBVideoPlayer.
(You should have contacted me though! I could have helped!)
Second, the source code of the OAM interrupt in the player (It's incorrectly labeled as HBlank, sorry!) states the problem:
; Not sure how or why, but this routine gets called 145 times
; per frame instead of 144. The addional call is not rLY=144.
; Until I figure out which LY value is being used twice (or,
; which LY value greater than 144 is being used), we skip the
; last line so HL won't go out of sync with frame starts.
ldh a, [rLY] ; 3
xor $8F ; 2
jr z, SkipLine ; 2 (If false)
When I released the player, I haven't investigated this issue that much, after I start writing my own Gameboy Color emulator (Will release it sooner or later
) I decided to investigate further. And yes, my own player gave me a pretty much hard time when writing the emulator.
I discovered that the extra interrupt only occurs for OAM interrupts, but that extra "line" is neither 153, nor is it 144 (as stated in the comment). BGB emulates this hardware bug incorrectly, an interrupt being fired for LY=144. This was EXTREMELY confusing to figure that out, since I used BGB to debug my player when I was making it.
I wrote a simple test ROM that had an OAM interrupt that simply added 1 to an array cell, with LY as an index (i.e. array[rLY]++). I ran the test on my GBC and found out that the extra interrupt occurs for LY=151
This can also be verified by modifying GBVideo Player by changing $8F in the above code snippet. Setting anything higher that 143, except 151, will break it on a real Gameboy. 144 will work on BGB, but not on a real Gameboy, and 153 will work on higan, but not on a real Gameboy. Also, any value greater than 143 will work on an emulator that does not emulate this bug in the first place.
And while we're at it, my local "build" has a double resolution, which will later get another 50% increase. I attached a comparison as a teaser, I hope the coming soon updates won't break any of your emulators!