Interestingly, if you implement more of the CRTC, it’s less likely to hang.
The vertical smearing is a feature – the so-called 1:2:1 convolution. In reality, it reduces interlace flicker. It’s only used for indexed colour modes (bandwidth between RAMDAC and VRAM is too low to support it in direct colour mode), and it’s only used when 1MB VRAM is installed (there doesn’t appear to be a technical reason for this, just to “encourage” you to buy the card with more VRAM).
Drawing in interlaced modes still isn’t quite right, most noticeably with the vertical offset. But this is all derived directly from parameters sent to the framebuffer controller, CRTC and RAMDAC – no magic numbers.