Timer interrupt

The timer interrupt is a 68k interrupt triggered when the 32-bit down-counter internal to LSPC reaches 0. As it is synchronous with the video output, it is mainly used for scanline effects.

=Mode of operation=

The value of this counter is decremented by the pixel clock, which runs at 6MHz (166.7ns period). It is automatically reloaded with the value specified in and  each time one of these 3 selectable events occur:


 * Immediately when register is written to.
 * At the beginning of the frame blanking period (one-shot).
 * When the counter reaches 0 (repeat).

=Range=


 * Minimum time ($00000000): 166.7ns, corresponds to 1 pixel, useless, see below.
 * Maximum time ($FFFFFFFF): 715.8s, corresponds to 42366 frames, or 11.9 minutes.

=Vector address=
 * Cartridge systems: $68 (IRQ2)
 * CD systems: $64 (IRQ1)

Like other interrupts, this one needs to be acknowledged with to trigger again.

=Configuration=

The register is used to configure the timer's operation:


 * Bit 4 = 1: Enable timer interrupt.
 * Bit 5 = 1: Reload counter as soon as is written to.
 * Bit 6 = 1: Reload counter at the beginning of the hblank of the first vblank line (start of each frame).
 * Bit 7 = 1: Reload counter when it reaches 0.

Caution: When the timer interrupt is enabled, the value of and  should always be set higher than 4, or the 68k will get flooded with interrupts and program execution will lock up.

=Example: Neo Turf Masters=




 * A: First line of the frame. The timer is reloaded with the value set at C: 41016. The next interrupt will trigger at B, in 106 lines and 313 pixels (just before the 107th line). The scroll value for the mountains is set.
 * B: Start of the ground area. The timer is immediately reloaded to 767 and the mode is set to "reload when 0 is reached". This will trigger interrupts every 2 lines so that the ground can be shifted to produce the perspective effect. A variable is used to count the number of ground lines.
 * C: End of the ground area. When enough ground lines are rendered, the timer is immediately reloaded to 16383 so that the next interrupt won't happen soon. The mode is set to "reload on first line of next frame" and the reload value (not the timer !) is set to 41016.