\Spr           |           |
 \             |           |
  \ 00 01 02 03|10 11 12 13|20 21 22 23
Scr+-----------+-----------+-----------
00 |BP S  S  S |S  S  S  S |S  S  S  S
01 |S  BP S  S |S  S  S  S |S  S  S  S
02 |S  B  S  S |S  S  S  S |S  S  S  S
03 |S  B  S  S |S  S  S  S |S  S  S  S
---+-----------+-----------+----------
10 |S  S  S  S |BP BP S  S |S  S  S  S
11 |S  S  S  S |BP BP S  S |S  S  S  S
12 |S  S  S  S |S  S  S  S |S  S  S  S
13 |S  S  S  S |S  S  S  S |S  S  S  S
---+-----------+-----------+----------
20 |E  E  S  S |E  E  S  S |B  B  S  S
21 |E  E  S  S |E  E  S  S |B  B  S  S
22 |E  E  S  S |E  E  S  S |B  B  S  S
23 |E  E  S  S |E  E  S  S |S  S  S  S

S = Single pixel at a time
B = Block copy if fully word aligned
P = Preshifted plotter supported
Future optimisations:
* Colour expansion (E)
- If plotting from ps0/1 to ps 2, data can be loaded from sprite a word at a time and stored to screen a pixel at a time
- Will work with sprite mask types 0,1, and any screen mask type
- Could also make it work with ps2, mt0/1 onto ps2 mt 3?
- And what about ps0 onto ps1?