I've probably brought up some of these issues before... but these things have been bugging me for a while.
1) Hypothetical example: $2002 is read on the same cycle that sprite 0 is hit. Does the value come back with bit 6 high? Another: $2005 is written to on the same cycle that the PPU address gets reloaded... does the written value get moved to Loopy_V?
I vaguely remember someone on here saying they perform reads at the start of the cycle and writes at the end of the cycle. I'd take that to mean that with a "catch-up" style implimentation, you'd run the PPU/APU to cycle X on a read, but would run it to X+1 on a write.
Can any clarification be made on this? That seems like a pretty decent method to me, but what do you guys think?
2) APU Frame IRQ seems to have a latency of 2 cycles (the IRQ doesn't happen until two cycles after the flag goes high).... or at least, that's what blargg's test ROMs lead me to believe. Is it just Frame IRQs? Or do DMC and/or mapper IRQs exhibit this behavior as well? I was having some difficulty with VRC IRQs, as they wouldn't work quite right when given that 2 cycle delay. Other mappers that used a CPU-cycle based IRQ counter had problems when adding that delay.
3) MMC2 and MMC4 latches are said to be affected by PPU accesses to $0FDx or $0FEx. However it seems that the "swap" doesn't happen until AFTER the $FD/$FE tile has been fully fetched. Wouldn't this mean they're only affected by accesses to $0FD8-0FDF and $0FE8-0FEF? I would assume the latch can be manually manipulated by reading $2007, right? What about writing to $2007? Is the latch affected by writes as well? or just reads?
4) I still have problems with the Retrocoders: Years Behind demo. For the most part it works fine, but when songs which use the DMC come up, it has some graphical distortion (it's mostly noticable in Boomjunk). I've chalked this up to incorrect handling of the "stolen cycles" by the DMC, but I've been looking at my trace logs and am almost positive I'm stealing the right amount of cycles at the right intervals. Does this demo actually work?
I guess that's it for now. Any and all help appreciated
1) Hypothetical example: $2002 is read on the same cycle that sprite 0 is hit. Does the value come back with bit 6 high? Another: $2005 is written to on the same cycle that the PPU address gets reloaded... does the written value get moved to Loopy_V?
I vaguely remember someone on here saying they perform reads at the start of the cycle and writes at the end of the cycle. I'd take that to mean that with a "catch-up" style implimentation, you'd run the PPU/APU to cycle X on a read, but would run it to X+1 on a write.
Can any clarification be made on this? That seems like a pretty decent method to me, but what do you guys think?
2) APU Frame IRQ seems to have a latency of 2 cycles (the IRQ doesn't happen until two cycles after the flag goes high).... or at least, that's what blargg's test ROMs lead me to believe. Is it just Frame IRQs? Or do DMC and/or mapper IRQs exhibit this behavior as well? I was having some difficulty with VRC IRQs, as they wouldn't work quite right when given that 2 cycle delay. Other mappers that used a CPU-cycle based IRQ counter had problems when adding that delay.
3) MMC2 and MMC4 latches are said to be affected by PPU accesses to $0FDx or $0FEx. However it seems that the "swap" doesn't happen until AFTER the $FD/$FE tile has been fully fetched. Wouldn't this mean they're only affected by accesses to $0FD8-0FDF and $0FE8-0FEF? I would assume the latch can be manually manipulated by reading $2007, right? What about writing to $2007? Is the latch affected by writes as well? or just reads?
4) I still have problems with the Retrocoders: Years Behind demo. For the most part it works fine, but when songs which use the DMC come up, it has some graphical distortion (it's mostly noticable in Boomjunk). I've chalked this up to incorrect handling of the "stolen cycles" by the DMC, but I've been looking at my trace logs and am almost positive I'm stealing the right amount of cycles at the right intervals. Does this demo actually work?
I guess that's it for now. Any and all help appreciated