base:demo_programming
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | Next revisionBoth sides next revision | ||
base:demo_programming [2018-12-18 16:53] – [Rasterbars] ftc | base:demo_programming [2018-12-18 16:54] – [Horizontal Rastersplits] - Moved to separate page ftc | ||
---|---|---|---|
Line 13: | Line 13: | ||
====== Effects ====== | ====== Effects ====== | ||
Many demo effects depend on precise timing. Therefore it might be useful to have a look on the [[base: | Many demo effects depend on precise timing. Therefore it might be useful to have a look on the [[base: | ||
- | |||
- | ==== Horizontal Rastersplits ==== | ||
- | 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/demo_programming.txt · Last modified: 2022-03-15 19:00 by erhan