I think I know how this works now, partly via Nitty gritty VRAM doc, and partly from the sprite tests in mooneye-gb. I don't think I'll have to implement the full pipeline behavior, because it's not observable outside the fetches from VRAM. (Though maybe that's not observable?)