Yes, it could render during H-Blank but I think the timing would be extremely tight:How did you get there was two line buffers ? Wouldn't it be possible to get same effects with only one buffer (the same buffer is filled during HBLANK and pixels cleared as they are being displayed) ?
40-cell mode, pixel clock is 6.75 MHz (53.693172/8)
428 pixels per line, 320 for display, so 108 for hblank (let's assume every pixel can be used for rendering)
320 / 108 = Draws ~3 linebuffer pixels per pixel clock
Linebuffer write rate is 6.75 * 3 = 20.25 MHz (!)
Given the technology of the time I think it is more realistic that they used two line buffers and rendered at the pixel clock rate. And I know this isn't good evidence but virtually all arcade games of that era use two line buffers and Sega's games were amongst the first to do so (Hang-On, 1986).
At least in my experience using two buffers allows all the sprite behavior I've tested to be reproduced. (not including Mickey Mania :)
But you lose the line because the buffer was erased when it was displayed before blanking was turned on. For example assume an even number of lines are blanked:Another game to try is Deadly Move (Power Instinct) which disable display before the end of active screen and re-enable it only at line 15. You can make your character (sprite) jump and see that the first line of sprite is not drawn, just like in Sonic 2 when you make your character jump in the bottom screen.
Line 1. Draw to buf #0, show then erase buf #1
Line 2. Draw to buf #1, show then erase buf #0 (CPU turns off screen)
Line 3. Blank line. Would have shown buf #1
Line 4. Blank line. Would have shown buf #0 (CPU turns on screen)
Line 5. Draw to buf #1, show then erase buf #0. #0 is still erased so the line is empty.
Line 6. Draw to buf #0, show then erase buf #1. Normal sprite display from now on.
Hmm, I always thought it worked like the SMS VDP. What games establish that this isn't true?(1) contrary to Master System VDP, sprite Ypos is directly related to the Vcounter value which seems to indicate that sprite pre-processing starts with Vcounter increment (unlike the SMS VDP where it is done on the previous line, as described in TMS9918 recent docs also)
I understand that I may be completely wrong about all of this. :D