I've now had a chance to look into the 640x480x256 mode registers in interlaced mode. I think the difference between g640x480x256i_regs[] and g640x480x256_regs[] is that the former uses the old style 128k paging mode and the latter uses the new style 64k mode. Both modes are available on all chips (even the 8800). The 64k mode is better because it lets the display start address cross a 512k boundary. I think there's nothing to do with interlaced mode here, 480 scan lines are drawn the same in both cases and I think the arrays are misnamed. The gravitywars game I was having trouble with seems to use the display start address to scroll right through a full 1Mb or so of memory and so requires 64k mode. The two modes need slightly different code to set the display start address and tvga8900_setdisplaystart() already has this, but it decides which to use based on the memory size: 64k style for 1Mb cards, 128k style for 512k cards. So it gets it wrong when an interlaced 1Mb card uses the 128k mode. It might be similarly wrong on a 2Mb card non-interlaced. It's not clear that the 128k mode is needed at all, but if both are going to be used tvga8900_setdisplaystart() ought to look at the mode selected in the registers. I think it's bit 0x10 of old control register 2, which is the first of the extra CRTCs in the saveregs. I haven't tried to fix this. The attached patch changes tvga_modes_1024i[] to use the same 640x480x256 as tvga_modes_1024[], and amends comments in tvga8900.regs. cd svgalib-1.4.1/src patch -p1