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:
- Background layers (BG1, BG2, BG3, BG4)
- The Sprite layer (OBJ)
- The main screen
- The sub screen (color math)
|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/transparent regions (MS), fixed/subscreen (A), direct color (D).|
The SNES has two window devices which can be used to selectively cut holes out of parts of the picture.
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 effect is nowhere (all 0 output). HDMA can be used to create shapes by adjusting the left/right position for each scanline.
Each window can be separately enabled for the various layers, and also inverted (W12SEL/W34SEL). If the window is inverted, the left/right position instead defines where the window should not hide the affected layers (if left > right, the window effect is everywhere, all 1 output). If the window is disabled then invert has no effect (all 0 output).
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.