Windows: Difference between revisions

From SNESdev Wiki
Jump to navigationJump to search
(→‎Registers: quick link to register definitions)
(explain the color window's blacking function)
Line 2: Line 2:
* [[Backgrounds|Background]] layers (BG1, BG2, BG3, BG4)
* [[Backgrounds|Background]] layers (BG1, BG2, BG3, BG4)
* The [[Sprites|Sprite]] layer (OBJ)
* The [[Sprites|Sprite]] layer (OBJ)
* [[Color math]]
* The main screen
* The sub screen ([[color math]])


== Registers ==
== Registers ==
Line 31: Line 32:
| style="text-align: right" | <tt style="white-space: nowrap">LlKk JjIi</tt>
| style="text-align: right" | <tt style="white-space: nowrap">LlKk JjIi</tt>
| W8
| W8
| Enable (IJKL) and Invert (ijkl) windows for OBJ (IJ) and color math (KL).
| Enable (IJKL) and Invert (ijkl) windows for OBJ (IJ) and color (KL).
|-
|-
! [[PPU registers#WH0|WH0]]
! [[PPU registers#WH0|WH0]]
Line 67: Line 68:
| style="text-align: right" | <tt style="white-space: nowrap">.... CCOO</tt>
| style="text-align: right" | <tt style="white-space: nowrap">.... CCOO</tt>
| W8
| W8
| Window mask logic for OBJ (O) and color math (C).
| Window mask logic for OBJ (O) and color (C).
|-
|-
! [[PPU registers#TMW|TMW]]
! [[PPU registers#TMW|TMW]]
Line 85: Line 86:
| style="text-align: right" | <tt style="white-space: nowrap">MMSS ..AD</tt>
| style="text-align: right" | <tt style="white-space: nowrap">MMSS ..AD</tt>
| W8
| W8
| main/sub screen color math window regions (MS), fixed/subscreen (A), direct color (D).
| main/sub screen color window black regions (MS), fixed/subscreen (A), direct color (D).
|}
|}


Line 98: Line 99:
Additionally if two windows are enabled for the same layer, boolean logic can be applied between them ([[PPU registers#WBGLOG|WBGLOG]]/[[PPU registers#WOBJSEL|WOBJSEL]]). An individual window is 0 when showing the layer, and 1 when hiding it. This logic will combine the effect of both windows in the chosen way.
Additionally if two windows are enabled for the same layer, boolean logic can be applied between them ([[PPU registers#WBGLOG|WBGLOG]]/[[PPU registers#WOBJSEL|WOBJSEL]]). An individual window is 0 when showing the layer, and 1 when hiding it. This logic will combine the effect of both windows in the chosen way.


Finally, windows can be selectively applied to the main screen and sub screen ([[PPU registers#TMW|TMW]]/[[PPU registers#TSW|TSW]]) or their color math combination ([[PPU registers#CGWSEL|CGWSEL]]).
The windows can be selectively applied to the main screen and sub screen layers ([[PPU registers#TMW|TMW]]/[[PPU registers#TSW|TSW]]), and finally the color window can be used to black areas of the main or sub screen ([[PPU registers#CGWSEL|CGWSEL]]). Using CGWSEL to black the sub screen can be used to mask [[color math]] to a region.


== See Also ==
== See Also ==

Revision as of 01:02, 13 October 2022

Windows are used to hide layers from regions of the screen. On a per-scanline basis, they can be used to cut out areas of:

Registers

See: PPU registers: Windows

Name Address Bits Type Notes
W12SEL $2123 DdCc BbAa W8 Enable (ABCD) and Invert (abcd) windows for BG1 (AB) and BG2 (CD).
W34SEL $2124 DdCc BbAa W8 Enable (EFGH) and Invert (efgh) windows for BG3 (EF) and BG2 (GH).
WOBJSEL $2125 LlKk JjIi W8 Enable (IJKL) and Invert (ijkl) windows for OBJ (IJ) and color (KL).
WH0 $2126 LLLL LLLL W8 Window 1 left position.
WH1 $2127 RRRR RRRR W8 Window 1 right position.
WH2 $2128 LLLL LLLL W8 Window 2 left position.
WH3 $2129 RRRR RRRR W8 Window 2 right position.
WBGLOG $212A 4433 2211 W8 Window mask logic for BG layers (00=OR, 01=AND, 10=XOR, 11=XNOR).
WOBJLOG $212B .... CCOO W8 Window mask logic for OBJ (O) and color (C).
TMW $212E ...O 4321 W8 Main screen layer window enable.
TSW $212F ...O 4321 W8 Sub screen layer window enable.
CGWSEL $2130 MMSS ..AD W8 main/sub screen color window black regions (MS), fixed/subscreen (A), direct color (D).

Window

The SNES has two window devices.

Each window has a left and right pixel position (WH0/WH1/WH2/WH3) where the window should hide the affected layers. The window effect (1 output) is at left <= X <= right. If left > right then the window is disabled (all 0 output). HDMA can be used to create shapes by adjusting the left/right position for each scanline.

If the window is inverted (W12SEL/W34SEL), the left/right position instead defines where the window should not hide the affected layers.

Additionally if two windows are enabled for the same layer, boolean logic can be applied between them (WBGLOG/WOBJSEL). An individual window is 0 when showing the layer, and 1 when hiding it. This logic will combine the effect of both windows in the chosen way.

The windows can be selectively applied to the main screen and sub screen layers (TMW/TSW), and finally the color window can be used to black areas of the main or sub screen (CGWSEL). Using CGWSEL to black the sub screen can be used to mask color math to a region.

See Also