base:horizontal_raster_split
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
— | base:horizontal_raster_split [2018-12-18 16:54] (current) – Moved contents to a separate page. ftc | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Horizontal Rastersplits ====== | ||
+ | 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// | ||
+ | * waiting for a rasterline < $d012 -> wait for bit 7 of $d011 to switch to 1 and back to 0 and then wait for lowbyte | ||
+ | * waiting for rasterline > $d012 but < 256 -> simply wait on lowbyte to match | ||
+ | * waiting for a rasterline > $d012 but > 255 -> wait for set bit 7 of $d011 and then wait for lowbyte to match | ||
+ | |||
+ | //being in rasterline 256+ and// | ||
+ | * waiting for a rasterline < $d012 and < 256 -> wait for unset bit 7 of $d011 and then wait for lowb | ||
+ | * waiting for rasterline < $d012 but > 256 -> wait for unset bit 7 of $d011, then set bit7 of $d011 and then on lowbyte | ||
+ | * waiting for a rasterline > $d012 -> simply wait for lowbyte to match | ||
+ | |||
+ | < | ||
+ | |||
+ | waitrasterline: | ||
+ | cpx #0 | ||
+ | beq wait0To255 | ||
+ | ;from here on we wait for a rasterline > 255 | ||
+ | bit $d011 | ||
+ | bpl *-3 | ||
+ | ; | ||
+ | cmp $d012 | ||
+ | bcs waitMatchingD012 | ||
+ | bit $d011 | ||
+ | bmi *-3 | ||
+ | bit $d011 | ||
+ | bpl *-3 | ||
+ | bmi waitMatchingD012 | ||
+ | wait0To255: | ||
+ | bit $d011 | ||
+ | bmi *-3 | ||
+ | ; | ||
+ | cmp $d012 | ||
+ | bcs waitMatchingD012 | ||
+ | bit $d011 | ||
+ | bpl *-3 | ||
+ | bit $d011 | ||
+ | bmi *-3 | ||
+ | waitMatchingD012: | ||
+ | cmp $d012 | ||
+ | bne waitMatchingD012 | ||
+ | rts | ||
+ | </ |
base/horizontal_raster_split.txt · Last modified: 2018-12-18 16:54 by ftc