While it's possible to setup a scanline interleaved display so that a regular single blit updates all planes in one operation, for area fill and line draw the blitter is usually restarted for each plane.Cyprian wrote:what about drawing lines/fills in 4 or more bitplanes? does blitter draw lines on all bitplanes at once or it needs to be restarted separately for each biplane?mc6809e wrote:Line draws especially benefit from this technique
There are a couple of exceptions that I know of. If a line has abs(slope)>=1 and the number of planes is 4 and the display is scanline interleaved, the line pattern register can be loaded with 4 copies of the color. Then as the line is drawn, the pattern register writes the correct bits into the correct planes.
Not sure how useful that is, though.
Another exception occurs when all the bitplanes are to be written with the same bit value during area fill. Then a single blit can area fill all planes.
One way to get around the overhead associated with multiple blits/line draws is to use the COPPER. The CPU can take a COPPER list and fill it with all the register writes needed to control the blitter. Then as the COPPER is running it's program from the list, it will automatically do the writes to setup and start the blitter for one plane, execute a wait-for-blitter-finish instruction, then setup and start the next blit for the next plane, etc. The drawback with this method is that the COPPER list must finish executing by the end of the frame before it's reset to its next program. But a big benefit of this method is that you can avoid having to poll the blitter to see if it's finished for each blit. This means you can have the CPU executing other instructions while the blit/line draw/area fill is going on. Line draw skips every other cycle, so the CPU has an opportunity to do work during these skipped cycles. The alternative would be to interrupt after each blit, but interrupt handling can be expensive.