It works.93143 wrote: ↑Sat Nov 02, 2019 10:50 pmThat may also be possible on SNES. I don't know if it's been tested; it's one of the things I haven't gotten around to yet. As with the MD, this would almost certainly prevent sprite compositing.turboxray wrote:TmEE had a trick where he turned off the screen during hblank that allowed him to transfer more per scanline. He turned the display back on right before the screen went active. But yeah otherwise it just stalls the cpu. Didn't cause any artifacting from what I remember. But I don't remember the exact amount he could transfer before artifacting.
I've used all 8 HDMA channels to force blank, write the VRAM address, transfer 20 bytes of data, and turn the screen back on. It appears to work as well as could reasonably be expected.
I have not stress-tested it with regular DMA to work out what the ultimate limits are, what with map and tile prefetch needing to happen before line drawing starts. I should test this.
As we've seen in other experiments, the SNES may become violent when confused. On my SNES, the sprite layer on the line following the data burst not only doesn't work properly (which was expected), it shows white flickering segments despite white being nowhere in the palette. However, turning off sprites with TM/TS ($212C/$212D) removes the artifacting.
Unfortunately, writing the VRAM address during active display (so as to save time during HBlank) seems to have weird results (black lines across the tile, implying a nonzero index corresponding to a colour I didn't specify...?). I haven't gone to great lengths to figure out why this happens. It's possible I screwed something up... However, it does appear that once properly established, the VRAM address carries over between HBlanks, and that VRAM is open for data pretty much immediately after force blank is set.
The attachment shows a BG layer repeating a single tile composed of data with only one nonzero bitplane (the highlights indicate >16 bytes transferred), with a blue background composed of 64x64 sprites. The change in the tile pattern halfway down the screen is due to the tile being overwritten by HDMA.
EDIT: in a later post in this thread, I tested what happens when you use an IRQ and try for the maximum possible bandwidth: viewtopic.php?f=12&t=19896&p=250353#p250178