Re: Beat Em Up Game Engine Ideas.
Posted: Wed Jul 27, 2016 9:34 am
Arg what a shame :'( The fact it reads back old values for sometime before reading garbage can be even more confusing to understand what happen...
What if there is a sprite D that gets cut off between the first DMA set and the second DMA set?tepples wrote:That's exactly what you'd do. On Atari 7800, you write a sprite to the display list of all 16-pixel-tall zones it crosses.
But between the "zones" you need several lines to fill up the OAM, which must be arranged carefully to avoid flickering and priority issues in the transitional region.tepples wrote:The zone list on the 7800 is a software-defined counterpart to the sprite evaluation in the NES PPU or any other TMS9918-style VDP. Because it's software-defined, it's not as efficient, but it's more flexible. For example, if you want sprite D to show up in one zone but not the adjacent one, such as if you're making a split screen or a "behind the background" type thing, then don't write the sprite to the other zone.
With 192 of vertical resolution you will have 5KB extra of bandwidth. In total, almost 11KB of data transfer (10,89KB), plus the bit you would have compressing (let's say a 20%, that is 2,17KB).lidnariq wrote:I assume you mean "the input is letterboxed, remove the letterboxing" with a proportional scaling. Tepples has pointed out in the past that the SNES/NES could have an active area of ≈256x164 to be 16:9 friendly.Espozo wrote:if your TV is able to vertically stretch the display
That said, 160 pixels is kinda painfully low.
You can't send compressed graphics to VRAM, so you're stuck with 11KB. This is really more than enough though, sprites only have access to 16KB of VRAM and they're going to be what you're updating the most, and probably somewhere around 30fps, so you could probably get away with a vertical resolution of 208 which would give you 8.5KB per frame. I don't know what animation scheme you want to use, but I imagine you're not updating all of the VRAM available to sprites anyway.Señor Ventura wrote:the bit you would have compressing (let's say a 20%, that is 2,17KB).
No. DMA transfers happen one at a time.Señor Ventura wrote:If i'm transfering tiles from ROM to VRAM, Can the DMA transfer tiles from WRAM to VRAM simultaneously?.
Why not just use DMA to VRAM from a different location in ROM?Señor Ventura wrote:In this way maybe could be use the WRAM like a kind of caché for backgrounds animations (people walking, things exploding, etc).
But you can set up eight of them (minus however many HDMA channels you're using) before vblank and then have them all run consecutively.Espozo wrote:No. DMA transfers happen one at a time.Señor Ventura wrote:If i'm transfering tiles from ROM to VRAM, Can the DMA transfer tiles from WRAM to VRAM simultaneously?.
If the background animations are compressed, you need to DMA them from WRAM.* I seem to remember reading that when Super Mario World shows "Nintendo Presents" before the title screen, it's decompressing a lot of graphics to WRAM.Espozo wrote:Why not just use DMA to VRAM from a different location in ROM?Señor Ventura wrote:In this way maybe could be use the WRAM like a kind of caché for backgrounds animations (people walking, things exploding, etc).
So, is the same thing, except for the fact that it's done automatically.tepples wrote:But you can set up eight of them (minus however many HDMA channels you're using) before vblank and then have them all run consecutively.
Sounds logic, cause the cpu can't adressing to VRAM.tepples wrote:If the background animations are compressed, you need to DMA them from WRAM.* I seem to remember reading that when Super Mario World shows "Nintendo Presents" before the title screen, it's decompressing a lot of graphics to WRAM.
And therefore without losing bandwidth to the CPU setting up the registers for another DMA transfer.Señor Ventura wrote:So, is the same thing, except for the fact that it's done automatically.tepples wrote:But you can set up eight of them (minus however many HDMA channels you're using) before vblank and then have them all run consecutively.
Correct. As I understand it, the vast majority of Super NES games send audio data to the S-SMP using closed-loop programmed input and output (PIO). Block DMA works for graphics, but it's too fast for the S-SMP to receive. There are modern-day demos of using HDMA to send a few bytes each scanline open-loop, but I'm not aware of that being done in the Super NES's original commercial era (pre-1999). It's also possible to alternate between sending a few bytes of audio using PIO during draw time and sending 5.something kB of graphics using block DMA during the following vblank; I think this is what Jurassic Park does outside.Señor Ventura wrote:The reason of my question is, if the bandwidth of the tile graphics works ever at 5.72KB, while samples are being transferred to the SPC700's RAM.
But now i see that, when graphics are transferred to VRAM, nothing is happening with the samples going to the SPC700's RAM... and vice versa.
Attached are official details on that bug (because I'm certain someone will want details on it).93143 wrote:You can also DMA from the cartridge to WRAM during active display - UNLESS you're using HDMA, because the earliest version of the S-CPU had a bug whereby DMA and HDMA could trip over each other and lock up the system. Very aggravating...