Difference between revisions of "Sprite Attribute Upload"
(Core 2.00.22 changes.) |
(Added extra info about coordinates from forum post.) |
||
Line 9: | Line 9: | ||
Uploads attributes of the sprite slot selected by {{PortNo|$303B}}. Attributes are in 4-5 byte blocks sent in the following order; after sending 4 or 5 bytes the address auto-increments to the next sprite. This auto-increment is independent of other sprite ports. The 4-5 bytes are as follows: | Uploads attributes of the sprite slot selected by {{PortNo|$303B}}. Attributes are in 4-5 byte blocks sent in the following order; after sending 4 or 5 bytes the address auto-increments to the next sprite. This auto-increment is independent of other sprite ports. The 4-5 bytes are as follows: | ||
− | Byte 1 is the low bits of the X position | + | Byte 1 is the low bits of the X position. The MSB is in byte 3. |
− | Byte 2 is the Y position. | + | Byte 2 is the low bits of the Y position. The MSB is in optional byte 5. |
Byte 3 is bitmapped: | Byte 3 is bitmapped: | ||
Line 55: | Line 55: | ||
| 0 || MSB of Y coordinate | | 0 || MSB of Y coordinate | ||
|} | |} | ||
+ | |||
+ | About [X,Y] coordinates: 9 bit values allow for 0..511 coordinate. The top-left ULA pixel ("paper" area) is at [32,32] and bottom-right ULA pixel is at [287,223] (256x192 pixel area). | ||
+ | |||
+ | When sprites are configured to be drawn "over border", there is fixed-size 32 pixels wide area around pixel area (so called "border" in BASIC terms), i.e. coordinates [0,0] to [319,255] are coordinates of visible over-border sprite area. | ||
+ | |||
+ | All coordinates beyond these act as wrap-around 0..511 coordinate system, with sprite getting outside of drawing area, i.e. [X,Y]=[511,510] will render sprite in top left corner over "border" area, with left-most column already not visible (511 works as "-1" X coordinate) and two top-most rows not visible (510 works as "-2" Y coordinate), only remaining 15x14 pixels of sprite pattern are visible in top-left corner. Similarly sprite at coordinates [310,250] will render only 10x6 pixels of pattern in bottom right corner, rest of pattern being already outside of rendering area and not visible (assuming the over-border is enabled and not clipped by sprite clip-window). |
Revision as of 13:00, 21 December 2018
Number | $xx57 |
---|---|
Decimal | |
Short desc. | Uploads sprite positions, visibility, colour type and effect flags. |
Bit Mask | %---- ---- 0101 0111 |
Readable | No |
Writable | Yes |
Subsystem | Sprites |
Uploads attributes of the sprite slot selected by Sprite Status/Slot Select ($303B / 12347). Attributes are in 4-5 byte blocks sent in the following order; after sending 4 or 5 bytes the address auto-increments to the next sprite. This auto-increment is independent of other sprite ports. The 4-5 bytes are as follows:
Byte 1 is the low bits of the X position. The MSB is in byte 3.
Byte 2 is the low bits of the Y position. The MSB is in optional byte 5.
Byte 3 is bitmapped:
Bit | Description |
---|---|
4-7 | Palette offset, added to each palette index from pattern before drawing |
3 | Enable X mirror |
2 | Enable Y mirror |
1 | Enable rotation |
0 | MSB of X coordinate |
Byte 4 is bitmapped:
Bit | Description |
---|---|
7 | Enable visibility |
6 | If 1, the optional 5th attribute byte should follow. If 0, only four attribute bytes are expected. |
5-0 | Pattern index ("Name") |
Optional (when bit 6 is set in byte 4) byte 5 is bitmapped:
Bit | Description |
---|---|
7 | If 1, the pattern will be treated as 4-bit colour one (128 bytes), 0 is for 8-bit colour patterns (256 bytes) |
6 | Chooses top/bottom part of pattern slot (for 4-bit colour patterns) |
5 | Reserved, use always 0 |
4-3 | x-axis scale factor: %00 = 1x (16 pixels), %01 = 2x, %10 = 4x, %11 = 8x (128 pixels) |
2-1 | y-axis scale factor: %00 = 1x (16 pixels), %01 = 2x, %10 = 4x, %11 = 8x (128 pixels) |
0 | MSB of Y coordinate |
About [X,Y] coordinates: 9 bit values allow for 0..511 coordinate. The top-left ULA pixel ("paper" area) is at [32,32] and bottom-right ULA pixel is at [287,223] (256x192 pixel area).
When sprites are configured to be drawn "over border", there is fixed-size 32 pixels wide area around pixel area (so called "border" in BASIC terms), i.e. coordinates [0,0] to [319,255] are coordinates of visible over-border sprite area.
All coordinates beyond these act as wrap-around 0..511 coordinate system, with sprite getting outside of drawing area, i.e. [X,Y]=[511,510] will render sprite in top left corner over "border" area, with left-most column already not visible (511 works as "-1" X coordinate) and two top-most rows not visible (510 works as "-2" Y coordinate), only remaining 15x14 pixels of sprite pattern are visible in top-left corner. Similarly sprite at coordinates [310,250] will render only 10x6 pixels of pattern in bottom right corner, rest of pattern being already outside of rendering area and not visible (assuming the over-border is enabled and not clipped by sprite clip-window).