OAM layout: Difference between revisions

From SNESdev Wiki
Jump to navigationJump to search
(Fixes sprite indices 0-15.)
(number of bits for properties in last byte of dword in low table)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[OAM]] is a total of 544 bytes in size, consisting of a 512 byte low table and a 32 byte high table.
[[OAM]] is a total of 544 bytes in size, consisting of a 512 byte low table and a 32 byte high table.
It holds the properties of up all 128 sprites.
It holds the properties of up to all 128 sprites.


Each of these cells represents one byte.  The high table packs information on 4 sprites into each byte.
Each of these cells represents one byte.  The low table spreads information on each sprite across 4 bytes, and the high table packs information on 4 sprites into each byte.


<pre>
<pre>
--+------------------+------------------+------------------+------------------------------------------------+
--+------------------+------------------+------------------+------------------------------------------------+
L | Sprite #0        | Sprite #0        | Sprite #0        | Sprite #0                                      |
L | Sprite #0        | Sprite #0        | Sprite #0        | Sprite #0                                      |
O | x pos (low bits) | y pos            | tile (low bits)  | flip v/h, priority, palette, high bit of tile) |
O | x pos (low bits) | y pos            | tile (low bits)  | flip v/h, priority, palette, high bit of tile |
W +------------------+------------------+------------------+------------------------------------------------+
W |                  |                  |                  | (2 bits)  (2 bits)  (3 bits)                   |
  | Sprite #1        | Sprite #1        | Sprite #1        | Sprite #1                                      |
  +------------------+------------------+------------------+------------------------------------------------+
T | x pos (low bits) | y pos            | tile (low bits)  | flip v/h, priority, palette, high bit of tile) |
T | Sprite #1        | Sprite #1        | Sprite #1        | Sprite #1                                      |
A +------------------+------------------+------------------+------------------------------------------------+
A | x pos (low bits) | y pos            | tile (low bits)  | flip v/h, priority, palette, high bit of tile |
B | Sprite #2        | Sprite #2        | Sprite #2        | Sprite #2                                      |
B +------------------+------------------+------------------+------------------------------------------------+
L | x pos (low bits) | y pos            | tile (low bits)  | flip v/h, priority, palette, high bit of tile) |
L | Sprite #2        | Sprite #2        | Sprite #2        | Sprite #2                                      |
E +------------------+------------------+------------------+------------------------------------------------+
E | x pos (low bits) | y pos            | tile (low bits)  | flip v/h, priority, palette, high bit of tile |
  +------------------+------------------+------------------+------------------------------------------------+
   |                  |                  |                  |                                                |
   |                  |                  |                  |                                                |
   |      ....      |    ...          |      ...        |                      ...                      |
   |      ....      |    ...          |      ...        |                      ...                      |
Line 20: Line 21:
   +------------------+------------------+------------------+------------------------------------------------+
   +------------------+------------------+------------------+------------------------------------------------+
   | Sprite #127      | Sprite #127      | Sprite #127      | Sprite #127                                    |
   | Sprite #127      | Sprite #127      | Sprite #127      | Sprite #127                                    |
   | x pos (low bits) | y pos            | tile (low bits)  | flip v/h, priority, palette, high bit of tile) |
   | x pos (low bits) | y pos            | tile (low bits)  | flip v/h, priority, palette, high bit of tile |
--+------------------+------------------+------------------+------------------------------------------------+
--+------------------+------------------+------------------+------------------------------------------------+
H | Sprites #0-3    | Sprites #4-7    | Sprites #8-11    | Sprites #12-15                                |
H | Sprites #0-3    | Sprites #4-7    | Sprites #8-11    | Sprites #12-15                                |
Line 42: Line 43:
   +------------------+------------------+------------------+------------------------------------------------+
   +------------------+------------------+------------------+------------------------------------------------+
   | Sprites #112-115 | Sprites #116-119 | Sprites #120-123 | Sprites #124-127                              |
   | Sprites #112-115 | Sprites #116-119 | Sprites #120-123 | Sprites #124-127                              |
   |                  |                  |                  |                                                |  
   |                  |                  |                  |                                                |
   |                  |                  |                  |                                                |
   |                  |                  |                  |                                                |
   | size select bits | size select bits | size select bits | size select bits                              |
   | size select bits | size select bits | size select bits | size select bits                              |

Latest revision as of 22:52, 22 July 2022

OAM is a total of 544 bytes in size, consisting of a 512 byte low table and a 32 byte high table. It holds the properties of up to all 128 sprites.

Each of these cells represents one byte. The low table spreads information on each sprite across 4 bytes, and the high table packs information on 4 sprites into each byte.

--+------------------+------------------+------------------+------------------------------------------------+
L | Sprite #0        | Sprite #0        | Sprite #0        | Sprite #0                                      |
O | x pos (low bits) | y pos            | tile (low bits)  | flip v/h, priority, palette, high bit of tile  |
W |                  |                  |                  | (2 bits)  (2 bits)  (3 bits)                   |
  +------------------+------------------+------------------+------------------------------------------------+
T | Sprite #1        | Sprite #1        | Sprite #1        | Sprite #1                                      |
A | x pos (low bits) | y pos            | tile (low bits)  | flip v/h, priority, palette, high bit of tile  |
B +------------------+------------------+------------------+------------------------------------------------+
L | Sprite #2        | Sprite #2        | Sprite #2        | Sprite #2                                      |
E | x pos (low bits) | y pos            | tile (low bits)  | flip v/h, priority, palette, high bit of tile  |
  +------------------+------------------+------------------+------------------------------------------------+
  |                  |                  |                  |                                                |
  |       ....       |    ...           |      ...         |                      ...                       |
  |                  |                  |                  |                                                |
  +------------------+------------------+------------------+------------------------------------------------+
  | Sprite #127      | Sprite #127      | Sprite #127      | Sprite #127                                    |
  | x pos (low bits) | y pos            | tile (low bits)  | flip v/h, priority, palette, high bit of tile  |
--+------------------+------------------+------------------+------------------------------------------------+
H | Sprites #0-3     | Sprites #4-7     | Sprites #8-11    | Sprites #12-15                                 |
I |                  |                  |                  |                                                |
G |                  |                  |                  |                                                |
H | size select bits | size select bits | size select bits | size select bits                               |
  |  |  |  |  |      |  |  |  |  |      |  |  |  |  |      |  |  |  |  |                                    |
  |  v  v  v  v      |  v  v  v  v      |  v  v  v  v      |  v  v  v  v                                    |
T | +--+--+--+--+    | +--+--+--+--+    | +--+--+--+--+    | +--+--+--+--+                                  |
A | |s |s |s |s |    | |s |s |s |s |    | |s |s |s |s |    | |s |s |s |s |                                  |
B | |#4|#3|#2|#1|    | |#4|#3|#2|#1|    | |#4|#3|#2|#1|    | |#4|#3|#2|#1|                                  |
L | | x| x| x| x|    | | x| x| x| x|    | | x| x| x| x|    | | x| x| x| x|                                  |
E | +--+--+--+--+    | +--+--+--+--+    | +--+--+--+--+    | +--+--+--+--+                                  |
  |   ^  ^  ^  ^     |   ^  ^  ^  ^     |   ^  ^  ^  ^     |   ^  ^  ^  ^                                   |
  |   |  |  |  |     |   |  |  |  |     |   |  |  |  |     |   |  |  |  |                                   |
  |   hi x bits      |   hi x bits      |   hi x bits      |   hi x bits                                    |
  +------------------+------------------+------------------+------------------------------------------------+
  |                  |                  |                  |                                                |
  |       ....       |    ...           |      ...         |                      ...                       |
  |                  |                  |                  |                                                |
  +------------------+------------------+------------------+------------------------------------------------+
  | Sprites #112-115 | Sprites #116-119 | Sprites #120-123 | Sprites #124-127                               |
  |                  |                  |                  |                                                |
  |                  |                  |                  |                                                |
  | size select bits | size select bits | size select bits | size select bits                               |
  |  |  |  |  |      |  |  |  |  |      |  |  |  |  |      |  |  |  |  |                                    |
  |  v  v  v  v      |  v  v  v  v      |  v  v  v  v      |  v  v  v  v                                    |
  | +--+--+--+--+    | +--+--+--+--+    | +--+--+--+--+    | +--+--+--+--+                                  |
  | |s |s |s |s |    | |s |s |s |s |    | |s |s |s |s |    | |s |s |s |s |                                  |
  | |#4|#3|#2|#1|    | |#4|#3|#2|#1|    | |#4|#3|#2|#1|    | |#4|#3|#2|#1|                                  |
  | | x| x| x| x|    | | x| x| x| x|    | | x| x| x| x|    | | x| x| x| x|                                  |
  | +--+--+--+--+    | +--+--+--+--+    | +--+--+--+--+    | +--+--+--+--+                                  |
  |   ^  ^  ^  ^     |   ^  ^  ^  ^     |   ^  ^  ^  ^     |   ^  ^  ^  ^                                   |
  |   |  |  |  |     |   |  |  |  |     |   |  |  |  |     |   |  |  |  |                                   |
  |   hi x bits      |   hi x bits      |   hi x bits      |   hi x bits                                    |
  +------------------+------------------+------------------+------------------------------------------------+