By Monte Carlos
Very basic rastersplitting can be done by waiting for a certain rasterline an then switch some VIC register. The display has 312 rasterlines at max but the VIC rasterline register ($d012) has only a range of 0 to 255. Therefore bit 7 of $d011 indicates if the rasterline is <256 or >255. Now the questions arises how to wait for a certain rasterline in the whole range without the preassumption of beeing in rasterline x when the wait routine is called. Here is a diagram which examples the situation:
Dependent of which rasterline you're currently in, you can simply compare $d012 with the desired rasterline or you must first wait for bit 7 of $d011 to attain the right value and then wait again for the desired line. Even more, retrace has to be taken into account, too.
In total you have to consider 6 different cases:
being in rasterline 0-255 and
being in rasterline 256+ and
waitrasterline: cpx #0 beq wait0To255 ;from here on we wait for a rasterline > 255 bit $d011 bpl *-3 ;inRasterLineGT255 cmp $d012 bcs waitMatchingD012 bit $d011 bmi *-3 bit $d011 bpl *-3 bmi waitMatchingD012 wait0To255: bit $d011 bmi *-3 ;inRasterlineLT256 cmp $d012 bcs waitMatchingD012 bit $d011 bpl *-3 bit $d011 bmi *-3 waitMatchingD012: cmp $d012 bne waitMatchingD012 rts