Sprite Control Register

From SpecNext official Wiki
Jump to: navigation, search
Number $15
Readable Yes
Writable Yes
Short Description Enables/disables Sprites and Lores Layer, and chooses priority of sprites and Layer 2.

Bitmapped as follows:

Bit Function
7 Enable Lores Layer
6 If 1, the sprite rendering priority is flipped, i.e. sprite 0 is on top of other sprites (0 after reset)
5 If 1, the clipping works even in "over border" mode (doubling X-axis coordinates of clip window) (0 after reset)
4-2 Layers priority and mixing
1 Enable sprites over border (0 after reset)
0 Enable sprite visibility (0 after reset)
Bits 4-2 Priority and mixing of layers
%000 S L U (Sprites are at top, Layer 2 under, Enhanced_ULA at bottom)
%001 L S U
%010 S U L
%011 L U S
%100 U S L
%101 U L S
%110 since core3.1.1: (U|T)S(T|U)(B+L) Blending layer and Layer 2 combined, colours clamped to [0,7]

S (U+L) Colours from ULA and Layer 2 are added (per R/G/B channel) and clamped to 7.

%111 since core3.1.1: (U|T)S(T|U)(B+L-5) Blending layer and Layer 2 combined, colours clamped to [0,7]

S (U+L-5) Similar as previous, but per R/G/B channel (U+L-5) is calculated and result is clamped by 0..7 range.

In layer mixing modes (%110 and %111) the "priority bit 7" of Layer 2 colour is propagated through the calculation, i.e. such pixel will raise above sprites even in mixing modes. If either U|T or L layer contains transparent colour pixel, the other layer pixel is drawn unchanged (skipping mixing calculation).

Since core3.1.1 the blending modes allow for layer non-contributing-to-blending (use ULA Control Register ($68) to configure blending sub-mode) to show independently in front of sprites.

When both "over border" (bit 1) and "clipping over border" (bit 5) is enabled, the Sprite clipping window Clip Window Sprites Register ($19) X-axis coordinates are "doubled", and coordinates origin is moved from pixel [0,0] position to sprite [0,0] position ([-32,-32] pixel position). For example: setting clip coordinates as {x1:5, x2:155, y1:7, y2:248} will make sprites visible in area [10,7]..[311,248] (inclusively) in sprite coordinates, i.e. the first visible pixel is at X1*2 coordinate, and last visible pixel is at X2*2+1 coordinate.