base:demo_programming
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
base:demo_programming [2018-12-18 16:53] – [Rasterbars] ftc | base:demo_programming [2018-12-18 17:01] – [Demo Coding] ftc | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Demo Coding ====== | ====== Demo Coding ====== | ||
- | This section contain material related to demo coding. General VIC programming is not available on this page. Instead it is devoted to coding specific | + | This page is devoted |
- | + | ||
- | To give an example: Opening the border is commonly made in demo parts, but simply opening the border does not constitute a demo effect in itself (at least not during the last 20 years). | + | |
+ | To provide an example: Opening the border is commonly made in demo parts, but simply opening the border does not constitute a demo effect in itself (at least not during the last 20 years). Therefore you would find that on the General VIC programming page instead. | ||
===== General Information and Tutorials ===== | ===== General Information and Tutorials ===== | ||
Line 13: | Line 12: | ||
====== 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