Get it at https://gist.github.com/fo-fo/771a49e7b49cf8daa182
NOTE: You need to enable the NesHawk core in BizHawk. QuickNES core doesn't support event.onmemorywrite.
You'd have to customize it per-game, it's set up for a "STA $4014" and 8x8 sprites. FCEUX lua/breakpoints could really use access to the value being written; maybe I should try to add that...
Edit: Lua scripts were later disallowed on this forum. Can't find the original, but am uploading the most recent version I have of this script in a ZIP, which was included in FCEUX 2.2.3 and due to lua feature improvements is now able to listen to $2000 writes without having to know which register it came from.
- (682 Bytes) Downloaded 162 times
[The extension lua has been deactivated and can no longer be displayed.]
1. Still don't know what register to read back for the write (A, X, Y?)
2. $4014 is written only once per frame. $2000 is often written several times per-frame with differing values. The last one before OAM DMA might not be the correct one. You might need a way to trigger the drawing at the end of vblank or some other time besides when $4014 is written, etc. etc.
So... go ahead and write a more complicated script to try and solve the problem generically, if you like. I spent maybe 10 minutes on this script, trying to solve that harder problem would probably take hours, and it's simply not worth my time. (Super easy to just customize the simple script per-game, anyway. Would rather spend 1 minute altering the script 10 times, than all day 1 time.)
You can hover the cursor over the sprites to get more information about them. I'm using a hack to detect which values are written to the PPU registers, because the latest stable version of FCEUX doesn't yet pass the written value to the callback function. Anyway, the script only works for sprites copied to OAM by sprite DMA, starting from $00, since $2003 and $2004 are completely ignored. There might be bugs.
- (1.18 KiB) Downloaded 180 times