SegaXtreme

I'm running some tests and I have the following (VDP1+VDP2 normal resolution, non-interlace):

0. Set up list of commands in H-WRAM
1. Transfer commands from H-WRAM to VDP1 VRAM
2. Draw. PTMR=1
3. If drawing is done (Sprite End IRQ fired) before VBLANK OUT IRQ, perform FB change. FBCR=3
4. Go back to step 0

Essentially the above would allow me to perform as many "draw calls" as I like, and only change framebuffers when I'm done.

As opposed to 1-cycle mode where I must always finish drawing before V-Blank OUT IRQ is fired.


However, this doesn't seem to work for double-density interlace, as expected. Note above, I DO NOT call to erase the framebuffers (FBCR=2). Instead, the command list has a large polygon to erase the FB.

How would I approach this? Do I check VDP2(TVSTAT) for even/odd field scan and set FBCR=8 (DIE) and FBCR=12 (DIE|DIL), respectively during VBLANK-OUT?

I ran a test where I draw as normal (as explained above), and I go through two frames, each time setting FBCR=8 for even field, and FBCR=12 for odd field. No swapping of framebuffer.


Though, this isn't working. I get massive flickering.

How do I approach this? Draw twice? Does calling FBCR=8 and FBCR=12 swap the framebuffers for me?



Any bit of info would help!
Back
Top