User Tools

Site Tools


base:demo_programming

This is an old revision of the document!


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 demo effects and tutorials on how to make demos specifically (rather than coding in general). General drawing, non-specific to demo coding, is also on the general VIC page instead.

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).

General Information and Tutorials

Effects

Many demo effects depend on precise timing. Therefore it might be useful to have a look on the Interrupts and Timing page.

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:

 waiting for a rasterline

Dependent of which rasterline your 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. you have to consider 6 different cases:

beeing 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

beeing 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
    ;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

Rasterbars

The most classic demo effect, apart from scrolling text.

Scrolling text

Those scrolling texts that we all hate to love that we love to hate. Also see the sprite section for a sprite scroller.

Swinging and tech-tech

  • TechTech (or “wave”) - by Pasi 'Albert' Ojala (from “Demo corner” in C= Hacking 7).
  • TechTech (using FLI routine) - by Compyx/Focus
  • Logo swing - By Richard Bayliss

3D dot scroll

DYCP

  • DYCP - Pasi 'Albert' Ojala (from “Demo Corner” in C= Hacking 6).

DYSP

Plasma

FPP (Flexible Pixel Position, aka Stretcher)

Graphics Distortion

Fractals

Vectors

Blending and Fading

Starfields

2nd Line FLI

Fire Effects

Misc

Software screen modes for effects

Optimization

base/demo_programming.1506378636.txt.gz · Last modified: 2017-09-26 00:30 by ftc