ReactOS  0.4.14-dev-1314-gacf135d
xboxvideo.c File Reference
#include <freeldr.h>
#include <debug.h>
Include dependency graph for xboxvideo.c:

Go to the source code of this file.

Macros

#define CHAR_WIDTH   8
 
#define CHAR_HEIGHT   16
 
#define TOP_BOTTOM_LINES   0
 
#define FB_SIZE_MB   4
 
#define MAKE_COLOR(Red, Green, Blue)   (0xff000000 | (((Red) & 0xff) << 16) | (((Green) & 0xff) << 8) | ((Blue) & 0xff))
 

Functions

 DBG_DEFAULT_CHANNEL (UI)
 
static VOID XboxVideoOutputChar (UCHAR Char, unsigned X, unsigned Y, ULONG FgColor, ULONG BgColor)
 
static ULONG XboxVideoAttrToSingleColor (UCHAR Attr)
 
static VOID XboxVideoAttrToColors (UCHAR Attr, ULONG *FgColor, ULONG *BgColor)
 
static VOID XboxVideoClearScreenColor (ULONG Color, BOOLEAN FullScreen)
 
VOID XboxVideoClearScreen (UCHAR Attr)
 
VOID XboxVideoPutChar (int Ch, UCHAR Attr, unsigned X, unsigned Y)
 
UCHAR NvGetCrtc (UCHAR Index)
 
ULONG XboxGetFramebufferSize (PVOID Offset)
 
VOID XboxVideoInit (VOID)
 
VIDEODISPLAYMODE XboxVideoSetDisplayMode (char *DisplayMode, BOOLEAN Init)
 
VOID XboxVideoGetDisplaySize (PULONG Width, PULONG Height, PULONG Depth)
 
ULONG XboxVideoGetBufferSize (VOID)
 
VOID XboxVideoGetFontsFromFirmware (PULONG RomFontPointers)
 
VOID XboxVideoSetTextCursorPosition (UCHAR X, UCHAR Y)
 
VOID XboxVideoHideShowTextCursor (BOOLEAN Show)
 
VOID XboxVideoCopyOffScreenBufferToVRAM (PVOID Buffer)
 
BOOLEAN XboxVideoIsPaletteFixed (VOID)
 
VOID XboxVideoSetPaletteColor (UCHAR Color, UCHAR Red, UCHAR Green, UCHAR Blue)
 
VOID XboxVideoGetPaletteColor (UCHAR Color, UCHAR *Red, UCHAR *Green, UCHAR *Blue)
 
VOID XboxVideoSync (VOID)
 
VOID XboxVideoPrepareForReactOS (VOID)
 

Variables

PVOID FrameBuffer
 
ULONG FrameBufferSize
 
static ULONG ScreenWidth
 
static ULONG ScreenHeight
 
static ULONG BytesPerPixel
 
static ULONG Delta
 
multiboot_info_tMultibootInfoPtr
 

Macro Definition Documentation

◆ CHAR_HEIGHT

#define CHAR_HEIGHT   16

Definition at line 36 of file xboxvideo.c.

◆ CHAR_WIDTH

#define CHAR_WIDTH   8

Definition at line 35 of file xboxvideo.c.

◆ FB_SIZE_MB

#define FB_SIZE_MB   4

Definition at line 40 of file xboxvideo.c.

◆ MAKE_COLOR

#define MAKE_COLOR (   Red,
  Green,
  Blue 
)    (0xff000000 | (((Red) & 0xff) << 16) | (((Green) & 0xff) << 8) | ((Blue) & 0xff))

Definition at line 42 of file xboxvideo.c.

◆ TOP_BOTTOM_LINES

#define TOP_BOTTOM_LINES   0

Definition at line 38 of file xboxvideo.c.

Function Documentation

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( UI  )

◆ NvGetCrtc()

UCHAR NvGetCrtc ( UCHAR  Index)

Definition at line 125 of file xboxvideo.c.

126 {
128  return *((PUCHAR) NV2A_CRTC_REGISTER_VALUE);
129 }
unsigned char * PUCHAR
Definition: retypes.h:3
#define NV2A_CRTC_REGISTER_VALUE
Definition: machxbox.h:44
#define NV2A_CRTC_REGISTER_INDEX
Definition: machxbox.h:43
static const UCHAR Index[8]
Definition: usbohci.c:18

Referenced by XboxVideoInit().

◆ XboxGetFramebufferSize()

ULONG XboxGetFramebufferSize ( PVOID  Offset)

Definition at line 132 of file xboxvideo.c.

133 {
135  INT Count, i;
136 
137  if (!MultibootInfoPtr)
138  {
139  return 0;
140  }
141 
143  {
144  return 0;
145  }
146 
148 
149  if (!MemoryMap ||
151  MultibootInfoPtr->mmap_length % sizeof(memory_map_t) != 0)
152  {
153  return 0;
154  }
155 
157  for (i = 0; i < Count; i++, MemoryMap++)
158  {
159  TRACE("i = %d, base_addr_low = 0x%p, MemoryMap->length_low = 0x%p\n", i, MemoryMap->base_addr_low, MemoryMap->length_low);
160 
161  /* Framebuffer address offset value is coming from the GPU within
162  * memory mapped I/O address space, so we're comparing only low
163  * 28 bits of the address within actual RAM address space */
164  if (MemoryMap->base_addr_low == ((ULONG)Offset & 0x0FFFFFFF) && MemoryMap->base_addr_high == 0)
165  {
166  TRACE("Video memory found\n");
167  return MemoryMap->length_low;
168  }
169  }
170  ERR("Video memory not found!\n");
171  return 0;
172 }
unsigned long mmap_addr
Definition: multiboot.h:109
BIOS_MEMORY_MAP MemoryMap[32]
Definition: loader.c:11
_Inout_ __drv_aliasesMem PSLIST_ENTRY _Inout_ PSLIST_ENTRY _In_ ULONG Count
Definition: exfuncs.h:1015
int32_t INT
Definition: typedefs.h:57
unsigned long flags
Definition: multiboot.h:96
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
#define MB_INFO_FLAG_MEMORY_MAP
Definition: multiboot.h:50
#define TRACE(s)
Definition: solgame.cpp:4
if(!(yy_init))
Definition: macro.lex.yy.c:714
multiboot_info_t * MultibootInfoPtr
struct memory_map memory_map_t
unsigned long mmap_length
Definition: multiboot.h:108
#define ERR(fmt,...)
Definition: debug.h:109
unsigned int ULONG
Definition: retypes.h:1

Referenced by XboxVideoInit().

◆ XboxVideoAttrToColors()

static VOID XboxVideoAttrToColors ( UCHAR  Attr,
ULONG FgColor,
ULONG BgColor 
)
static

Definition at line 82 of file xboxvideo.c.

83 {
84  *FgColor = XboxVideoAttrToSingleColor(Attr & 0xf);
85  *BgColor = XboxVideoAttrToSingleColor((Attr >> 4) & 0xf);
86 }
static ULONG XboxVideoAttrToSingleColor(UCHAR Attr)
Definition: xboxvideo.c:69

Referenced by XboxVideoClearScreen(), and XboxVideoPutChar().

◆ XboxVideoAttrToSingleColor()

static ULONG XboxVideoAttrToSingleColor ( UCHAR  Attr)
static

Definition at line 69 of file xboxvideo.c.

70 {
72 
73  Intensity = (0 == (Attr & 0x08) ? 127 : 255);
74 
75  return 0xff000000 |
76  (0 == (Attr & 0x04) ? 0 : (Intensity << 16)) |
77  (0 == (Attr & 0x02) ? 0 : (Intensity << 8)) |
78  (0 == (Attr & 0x01) ? 0 : Intensity);
79 }
unsigned char UCHAR
Definition: xmlstorage.h:181
static WORD Intensity(RGBQUAD clr)
Definition: msrle32.c:44

Referenced by XboxVideoAttrToColors().

◆ XboxVideoClearScreen()

VOID XboxVideoClearScreen ( UCHAR  Attr)

Definition at line 105 of file xboxvideo.c.

106 {
107  ULONG FgColor, BgColor;
108 
109  XboxVideoAttrToColors(Attr, &FgColor, &BgColor);
110 
112 }
static VOID XboxVideoClearScreenColor(ULONG Color, BOOLEAN FullScreen)
Definition: xboxvideo.c:89
static VOID XboxVideoAttrToColors(UCHAR Attr, ULONG *FgColor, ULONG *BgColor)
Definition: xboxvideo.c:82
unsigned int ULONG
Definition: retypes.h:1

Referenced by MachInit().

◆ XboxVideoClearScreenColor()

static VOID XboxVideoClearScreenColor ( ULONG  Color,
BOOLEAN  FullScreen 
)
static

Definition at line 89 of file xboxvideo.c.

90 {
91  ULONG Line, Col;
92  PULONG p;
93 
94  for (Line = 0; Line < ScreenHeight - (FullScreen ? 0 : 2 * TOP_BOTTOM_LINES); Line++)
95  {
96  p = (PULONG) ((char *) FrameBuffer + (Line + (FullScreen ? 0 : TOP_BOTTOM_LINES)) * Delta);
97  for (Col = 0; Col < ScreenWidth; Col++)
98  {
99  *p++ = Color;
100  }
101  }
102 }
#define TOP_BOTTOM_LINES
Definition: xboxvideo.c:38
static ULONG ScreenWidth
Definition: xboxvideo.c:29
struct Color Color
static ULONG ScreenHeight
Definition: xboxvideo.c:30
Definition: ncftp.h:79
PVOID FrameBuffer
Definition: xboxvideo.c:27
static ULONG Delta
Definition: xboxvideo.c:32
unsigned int * PULONG
Definition: retypes.h:1
unsigned int ULONG
Definition: retypes.h:1
GLfloat GLfloat p
Definition: glext.h:8902
struct Line Line

Referenced by XboxVideoClearScreen(), XboxVideoInit(), and XboxVideoPrepareForReactOS().

◆ XboxVideoCopyOffScreenBufferToVRAM()

VOID XboxVideoCopyOffScreenBufferToVRAM ( PVOID  Buffer)

Definition at line 254 of file xboxvideo.c.

255 {
256  PUCHAR OffScreenBuffer = (PUCHAR) Buffer;
257  ULONG Col, Line;
258 
259  for (Line = 0; Line < (ScreenHeight - 2 * TOP_BOTTOM_LINES) / CHAR_HEIGHT; Line++)
260  {
261  for (Col = 0; Col < ScreenWidth / CHAR_WIDTH; Col++)
262  {
263  XboxVideoPutChar(OffScreenBuffer[0], OffScreenBuffer[1], Col, Line);
264  OffScreenBuffer += 2;
265  }
266  }
267 }
unsigned char * PUCHAR
Definition: retypes.h:3
#define TOP_BOTTOM_LINES
Definition: xboxvideo.c:38
static ULONG ScreenWidth
Definition: xboxvideo.c:29
Definition: bufpool.h:45
static ULONG ScreenHeight
Definition: xboxvideo.c:30
Definition: ncftp.h:79
#define CHAR_WIDTH
Definition: xboxvideo.c:35
VOID XboxVideoPutChar(int Ch, UCHAR Attr, unsigned X, unsigned Y)
Definition: xboxvideo.c:115
#define CHAR_HEIGHT
Definition: xboxvideo.c:36
unsigned int ULONG
Definition: retypes.h:1
struct Line Line

Referenced by MachInit().

◆ XboxVideoGetBufferSize()

ULONG XboxVideoGetBufferSize ( VOID  )

Definition at line 230 of file xboxvideo.c.

231 {
233 }
#define TOP_BOTTOM_LINES
Definition: xboxvideo.c:38
static ULONG ScreenWidth
Definition: xboxvideo.c:29
static ULONG ScreenHeight
Definition: xboxvideo.c:30
#define CHAR_WIDTH
Definition: xboxvideo.c:35
#define CHAR_HEIGHT
Definition: xboxvideo.c:36

Referenced by MachInit().

◆ XboxVideoGetDisplaySize()

VOID XboxVideoGetDisplaySize ( PULONG  Width,
PULONG  Height,
PULONG  Depth 
)

Definition at line 222 of file xboxvideo.c.

223 {
224  *Width = ScreenWidth / CHAR_WIDTH;
225  *Height = (ScreenHeight - 2 * TOP_BOTTOM_LINES) / CHAR_HEIGHT;
226  *Depth = 0;
227 }
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION _In_ ULONG _In_ SIZE_T _In_ ULONG _In_ USHORT Depth
Definition: exfuncs.h:656
#define TOP_BOTTOM_LINES
Definition: xboxvideo.c:38
static ULONG ScreenWidth
Definition: xboxvideo.c:29
static ULONG ScreenHeight
Definition: xboxvideo.c:30
#define CHAR_WIDTH
Definition: xboxvideo.c:35
#define CHAR_HEIGHT
Definition: xboxvideo.c:36

Referenced by MachInit(), and XboxConsPutChar().

◆ XboxVideoGetFontsFromFirmware()

VOID XboxVideoGetFontsFromFirmware ( PULONG  RomFontPointers)

Definition at line 236 of file xboxvideo.c.

237 {
238  TRACE("XboxVideoGetFontsFromFirmware(): UNIMPLEMENTED\n");
239 }
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by MachInit().

◆ XboxVideoGetPaletteColor()

VOID XboxVideoGetPaletteColor ( UCHAR  Color,
UCHAR Red,
UCHAR Green,
UCHAR Blue 
)

Definition at line 282 of file xboxvideo.c.

283 {
284  /* Not supported */
285 }

Referenced by MachInit().

◆ XboxVideoHideShowTextCursor()

VOID XboxVideoHideShowTextCursor ( BOOLEAN  Show)

Definition at line 248 of file xboxvideo.c.

249 {
250  /* We don't have a cursor yet */
251 }

Referenced by MachInit(), and XboxVideoPrepareForReactOS().

◆ XboxVideoInit()

VOID XboxVideoInit ( VOID  )

Definition at line 175 of file xboxvideo.c.

176 {
177  /* Reuse framebuffer that was set up by firmware */
179  /* Verify that framebuffer address is page-aligned */
181 
182  /* Obtain framebuffer memory size from multiboot memory map */
184  {
185  /* Fallback to Cromwell standard which reserves high 4 MB of RAM */
186  FrameBufferSize = 4 * 1024 * 1024;
187  WARN("Could not detect framebuffer memory size, fallback to 4 MB\n");
188  }
189 
192  /* Get BPP directly from NV2A CRTC (magic constants are from Cromwell) */
193  BytesPerPixel = 8 * (((NvGetCrtc(0x19) & 0xE0) << 3) | (NvGetCrtc(0x13) & 0xFF)) / ScreenWidth;
194  if (BytesPerPixel == 4)
195  {
196  ASSERT((NvGetCrtc(0x28) & 0xF) == BytesPerPixel - 1);
197  }
198  else
199  {
200  ASSERT((NvGetCrtc(0x28) & 0xF) == BytesPerPixel);
201  }
202  Delta = (ScreenWidth * BytesPerPixel + 3) & ~ 0x3;
203 
204  /* Verify screen resolution */
205  ASSERT(ScreenWidth > 1);
206  ASSERT(ScreenHeight > 1);
207  ASSERT(BytesPerPixel >= 1 && BytesPerPixel <= 4);
208  /* Verify that screen fits framebuffer size */
210 
212 }
#define TRUE
Definition: types.h:120
static VOID XboxVideoClearScreenColor(ULONG Color, BOOLEAN FullScreen)
Definition: xboxvideo.c:89
static ULONG BytesPerPixel
Definition: xboxvideo.c:31
#define WARN(fmt,...)
Definition: debug.h:111
static ULONG ScreenWidth
Definition: xboxvideo.c:29
uint32_t ULONG_PTR
Definition: typedefs.h:64
ULONG XboxGetFramebufferSize(PVOID Offset)
Definition: xboxvideo.c:132
#define NV2A_RAMDAC_FP_VVALID_END
Definition: machxbox.h:47
ULONG FrameBufferSize
Definition: xboxvideo.c:28
void * PVOID
Definition: retypes.h:9
#define NV2A_CRTC_FRAMEBUFFER_START
Definition: machxbox.h:42
static ULONG ScreenHeight
Definition: xboxvideo.c:30
UCHAR NvGetCrtc(UCHAR Index)
Definition: xboxvideo.c:125
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define PAGE_SIZE
Definition: env_spec_w32.h:49
PVOID FrameBuffer
Definition: xboxvideo.c:27
static ULONG Delta
Definition: xboxvideo.c:32
unsigned int * PULONG
Definition: retypes.h:1
#define MAKE_COLOR(Red, Green, Blue)
Definition: xboxvideo.c:42
#define NV2A_RAMDAC_FP_HVALID_END
Definition: machxbox.h:46

Referenced by MachInit().

◆ XboxVideoIsPaletteFixed()

BOOLEAN XboxVideoIsPaletteFixed ( VOID  )

Definition at line 270 of file xboxvideo.c.

271 {
272  return FALSE;
273 }

Referenced by MachInit().

◆ XboxVideoOutputChar()

static VOID XboxVideoOutputChar ( UCHAR  Char,
unsigned  X,
unsigned  Y,
ULONG  FgColor,
ULONG  BgColor 
)
static

Definition at line 45 of file xboxvideo.c.

46 {
47  PUCHAR FontPtr;
48  PULONG Pixel;
49  UCHAR Mask;
50  unsigned Line;
51  unsigned Col;
52 
53  FontPtr = BitmapFont8x16 + Char * 16;
54  Pixel = (PULONG) ((char *) FrameBuffer + (Y * CHAR_HEIGHT + TOP_BOTTOM_LINES) * Delta
55  + X * CHAR_WIDTH * BytesPerPixel);
56  for (Line = 0; Line < CHAR_HEIGHT; Line++)
57  {
58  Mask = 0x80;
59  for (Col = 0; Col < CHAR_WIDTH; Col++)
60  {
61  Pixel[Col] = (0 != (FontPtr[Line] & Mask) ? FgColor : BgColor);
62  Mask = Mask >> 1;
63  }
64  Pixel = (PULONG) ((char *) Pixel + Delta);
65  }
66 }
#define Y(I)
static ULONG BytesPerPixel
Definition: xboxvideo.c:31
unsigned char * PUCHAR
Definition: retypes.h:3
UCHAR BitmapFont8x16[]
Definition: vgafont.c:12
#define TOP_BOTTOM_LINES
Definition: xboxvideo.c:38
Definition: ncftp.h:79
#define CHAR_WIDTH
Definition: xboxvideo.c:35
unsigned char UCHAR
Definition: xmlstorage.h:181
#define CHAR_HEIGHT
Definition: xboxvideo.c:36
PVOID FrameBuffer
Definition: xboxvideo.c:27
static ULONG Delta
Definition: xboxvideo.c:32
unsigned int * PULONG
Definition: retypes.h:1
struct Line Line

Referenced by XboxVideoPutChar().

◆ XboxVideoPrepareForReactOS()

VOID XboxVideoPrepareForReactOS ( VOID  )

Definition at line 294 of file xboxvideo.c.

295 {
298 }
#define TRUE
Definition: types.h:120
static VOID XboxVideoClearScreenColor(ULONG Color, BOOLEAN FullScreen)
Definition: xboxvideo.c:89
VOID XboxVideoHideShowTextCursor(BOOLEAN Show)
Definition: xboxvideo.c:248
#define MAKE_COLOR(Red, Green, Blue)
Definition: xboxvideo.c:42

Referenced by XboxPrepareForReactOS().

◆ XboxVideoPutChar()

VOID XboxVideoPutChar ( int  Ch,
UCHAR  Attr,
unsigned  X,
unsigned  Y 
)

Definition at line 115 of file xboxvideo.c.

116 {
117  ULONG FgColor, BgColor;
118 
119  XboxVideoAttrToColors(Attr, &FgColor, &BgColor);
120 
121  XboxVideoOutputChar(Ch, X, Y, FgColor, BgColor);
122 }
static VOID XboxVideoOutputChar(UCHAR Char, unsigned X, unsigned Y, ULONG FgColor, ULONG BgColor)
Definition: xboxvideo.c:45
#define Y(I)
#define Ch(x, y, z)
Definition: sha2.c:141
static VOID XboxVideoAttrToColors(UCHAR Attr, ULONG *FgColor, ULONG *BgColor)
Definition: xboxvideo.c:82
unsigned int ULONG
Definition: retypes.h:1

Referenced by MachInit(), XboxConsPutChar(), and XboxVideoCopyOffScreenBufferToVRAM().

◆ XboxVideoSetDisplayMode()

VIDEODISPLAYMODE XboxVideoSetDisplayMode ( char DisplayMode,
BOOLEAN  Init 
)

Definition at line 215 of file xboxvideo.c.

216 {
217  /* We only have one mode, semi-text */
218  return VideoTextMode;
219 }

Referenced by MachInit().

◆ XboxVideoSetPaletteColor()

VOID XboxVideoSetPaletteColor ( UCHAR  Color,
UCHAR  Red,
UCHAR  Green,
UCHAR  Blue 
)

Definition at line 276 of file xboxvideo.c.

277 {
278  /* Not supported */
279 }

Referenced by MachInit().

◆ XboxVideoSetTextCursorPosition()

VOID XboxVideoSetTextCursorPosition ( UCHAR  X,
UCHAR  Y 
)

Definition at line 242 of file xboxvideo.c.

243 {
244  /* We don't have a cursor yet */
245 }

Referenced by MachInit().

◆ XboxVideoSync()

VOID XboxVideoSync ( VOID  )

Definition at line 288 of file xboxvideo.c.

289 {
290  /* Not supported */
291 }

Referenced by MachInit().

Variable Documentation

◆ BytesPerPixel

ULONG BytesPerPixel
static

◆ Delta

◆ FrameBuffer

◆ FrameBufferSize

ULONG FrameBufferSize

◆ MultibootInfoPtr

multiboot_info_t* MultibootInfoPtr

Referenced by XboxGetFramebufferSize().

◆ ScreenHeight

◆ ScreenWidth