I think some registers of the control interface are not set up properly but I may have misunderstood what you are trying to achieve. If you want the frame reader to output 40x40 interlaced video (ie, a pair of 40x20 fields) then I would suggest something like that:
IOWR(FRAMEREADER_BASE, 4, FIELD_0_BASE);
IOWR(FRAMEREADER_BASE, 5, 200); // 40*20 / ( 64/(8*2) ) = 200
IOWR(FRAMEREADER_BASE, 6, 1600); // 40*20*2
IOWR(FRAMEREADER_BASE, 8, 40);
IOWR(FRAMEREADER_BASE, 9, 20);
IOWR(FRAMEREADER_BASE, 10, 8);
IOWR(FRAMEREADER_BASE, 11, FIELD_1_BASE);
IOWR(FRAMEREADER_BASE, 12, 200); // 40*20 / ( 64/(8*2) ) = 200
IOWR(FRAMEREADER_BASE, 13, 1600); // 40*20*2
IOWR(FRAMEREADER_BASE, 15, 40);
IOWR(FRAMEREADER_BASE, 16, 20);
IOWR(FRAMEREADER_BASE, 17, 12);
You also need to switch the frame select register between field 0 and field 1 for every output field.
IOWR(FRAMEREADER_BASE, 3, ??);
Be aware that the alpha blending mixer has limited support for interlaced video. There is no mechanism in the mixer to ensure that fields of the same type are mixed together so if a F0 is coming one input and a F1 is coming on the other one they will be mixed together which is probably not the desired behavior.