Difference between revisions of "Sprite port-mirror Index Register"

From SpecNext official Wiki
Jump to: navigation, search
(Core 2.00.23 changes (sprite-index link with port $303B))
(read register detail extended by info from Allen)
 
(4 intermediate revisions by 3 users not shown)
Line 3: Line 3:
 
|Readable=Yes
 
|Readable=Yes
 
|Writable=Yes
 
|Writable=Yes
|ShortDesc=Selects sprite index 0..63 to be affected by writes to other Sprite ports (and mirrors).
+
|ShortDesc=Selects sprite index 0..127 to be affected by writes to other Sprite ports (and mirrors).
 
}}
 
}}
{|class="wikitable"
+
If sprite id lockstep in {{NextRegNo|$09}} is enabled, write to this registers has same effect as writing to {{PortNo|$303B}}.
! Bit !! Description
 
|-
 
| 7 || Enable "link" with I/O port {{PortNo|$303B}} (sprite index for port {{PortNo|$xx57}}) (1 = interlinked, 0 = decoupled)
 
|-
 
| 6 || reserved, write 0
 
|-
 
| 5-0 || Sprite index (0..63), which sprite-attributes will be modified.
 
|}
 
When the index is "linked" (bit 7 is set), it ties the nextreg sprite-index and the I/O sprite-index together.
 
* any change to the nextreg sprite number via write to nextreg $34 or auto-inc on nextreg $75-$79 will set the sprite index for I/O to the same and also reset the I/O attribute port {{PortNo|$xx57}} (next write to sprite-attribute port will modify first byte of attributes of particular sprite)
 
* any change to sprite number via I/O port {{PortNo|$303B}} or auto-inc via I/O port $xx57 will also be reflected in nextreg $34.
 
  
This link is broken by writing to nextreg $34 with bit 7 reset.
+
I.e. bit 7 offsets pattern writes by 128 bytes (second half of 0..63 pattern slot), and bits 6-0 contain index 0..63 (for patterns) or 0..127 for sprite attributes, resetting those indices for ports {{PortNo|$xx57}} and {{PortNo|$xx5B}} and for following NextRegs $35..$39 and $75..$79.
 +
 
 +
Index-increments caused by write to NextRegs $75..$79 will propagate also to current index of port $xx57 and reset current attribute (next write to port $xx57 after index change will modify first byte of attributes).
 +
 
 +
The index increment caused by sending full attribute set to port $xx57, or by writing to port $303B, will also propagate to this register, affecting next writes to registers $35..$39/$75..$79.
 +
 
 +
-------
 +
 
 +
If sprite id lockstep in {{NextRegNo|$09}} is disabled, bit 7 is ignored and bits 6-0 value selects index 0..127 for NextRegs $35..$39 and $75..$79 (decoupled from ports $xx57/$303B completely).
 +
 
 +
-------
 +
 
 +
The read will in every mode return the sprite id (not pattern id) and bit 7 always reads back as zero.

Latest revision as of 21:56, 6 December 2019

Number $34
Readable Yes
Writable Yes
Short Description Selects sprite index 0..127 to be affected by writes to other Sprite ports (and mirrors).

If sprite id lockstep in Peripheral 4 Register ($09) is enabled, write to this registers has same effect as writing to Sprite Status/Slot Select ($303B / 12347).

I.e. bit 7 offsets pattern writes by 128 bytes (second half of 0..63 pattern slot), and bits 6-0 contain index 0..63 (for patterns) or 0..127 for sprite attributes, resetting those indices for ports Sprite Attribute Upload ($xx57 / 87) and Sprite Pattern Upload ($xx5B / 91) and for following NextRegs $35..$39 and $75..$79.

Index-increments caused by write to NextRegs $75..$79 will propagate also to current index of port $xx57 and reset current attribute (next write to port $xx57 after index change will modify first byte of attributes).

The index increment caused by sending full attribute set to port $xx57, or by writing to port $303B, will also propagate to this register, affecting next writes to registers $35..$39/$75..$79.


If sprite id lockstep in Peripheral 4 Register ($09) is disabled, bit 7 is ignored and bits 6-0 value selects index 0..127 for NextRegs $35..$39 and $75..$79 (decoupled from ports $xx57/$303B completely).


The read will in every mode return the sprite id (not pattern id) and bit 7 always reads back as zero.