Difference between revisions of "Arwinss"
(→Architecture) |
(→TODO) |
||
Line 42: | Line 42: | ||
# Make win32k/wine/queue.c (timer callback and timeout callback) multithread aware. Right now it doesn't lock its lists | # Make win32k/wine/queue.c (timer callback and timeout callback) multithread aware. Right now it doesn't lock its lists | ||
# Make user/kernel handles mapping multithread aware | # Make user/kernel handles mapping multithread aware | ||
− | # Add some real locking to GDI_ObjGetPtr / GDI_ObjRelease | + | # [Fixed] Add some real locking to GDI_ObjGetPtr / GDI_ObjRelease. NOTE: Just added multithread safety to GDI_ObjGetPtr, but pointers to objects are not locked in any way, so release is a noop. |
# Implement disabled surface bits locking for concurrent accesses | # Implement disabled surface bits locking for concurrent accesses | ||
# Implement mouse cursor support in win32k | # Implement mouse cursor support in win32k |
Revision as of 15:33, 29 July 2009
Contents
Arwinss
An alternative implementation of core Win32 subsystem components.
Usage
Checkout the arwinss branch (svn://svn.reactos.org/reactos/branches/arwinss/reactos), and compile using following command:
makex user32 gdi32 win32k winent win32csr freetype kernel32
This will build you all needed modules of a new subsystem, which you need to copy over to the installed ReactOS version. Modified kernel32.dll is needed only for a compatible global atoms support.
IMPORTANT: Set your display bit depth to 32bpp and resolution to 800x600.
Architecture
Arwinss uses parts of Wine architecture, and parts of Windows NT architecture in appropriate places and in a good way. A detailed description is provided on a standlone page called Arwinss architecture.
It consists of the following five modules, one of them being optional (winex11.drv):
- dll/win32/freetype - implements usermode font rendering (FreeType library, with small ros glue), used by gdi32.dll
- dll/win32/user32 - implements USER API
- dll/win32/gdi32 - implements GDI API
- dll/win32/winent.drv - implements native graphics and user drivers
- dll/win32/winex11.drv - implements X11 X-windows graphics and user drivers
- subsystems/win32/win32k - implements kernel mode counter part of the native graphics driver and a kernel mode USER server.
- subsystems/win32/csrss/win32csr - implements needed parts of the CSR subsystem along with handling user input
Hacking
Most of the hacking happens in winent.drv and win32k.sys, with very rare fixes to the user32/gdi32 (mainly, because it's a tested Wine's code with only minor changes).
Convention for marking changes. C++ code comments (//) mean that the place has some special mark up for debugging. A typical use is for a
// FIXME: Something
TODO
- [Fixed] Check situation with desktop and top windows - need to ensure there is no auto "one desktop per application" creation happens!
- [Fixed] Check all places which use PsLookupThreadByThreadId and fix reference counting
- Enable commented out places in the font output code (ET_OPAQUE, etc)
- [Fixed] No desktop background (hacked away in win32csr)
- [Fixed] Fix absence of a background color in windows, and general lacking of windows painting
- Fix a "err:(dll\win32\gdi32\freetype.c:3068) FT_New_Face rets 85" problem, resulting in a hack in RosDrv_GetTextMetrics
- Fix RosGdiSelectBitmap with an incorrect user bitmap handle (probably a stock bitmap?)
- Make win32k/wine/queue.c (timer callback and timeout callback) multithread aware. Right now it doesn't lock its lists
- Make user/kernel handles mapping multithread aware
- [Fixed] Add some real locking to GDI_ObjGetPtr / GDI_ObjRelease. NOTE: Just added multithread safety to GDI_ObjGetPtr, but pointers to objects are not locked in any way, so release is a noop.
- Implement disabled surface bits locking for concurrent accesses
- Implement mouse cursor support in win32k
- Implement user input in win32k and winent.drv
- Implement a locking mechanism for GDI kernel mode objects
- Add commented out CombinedClipping region back into all graphics operations
- Make /CONSOLE booting from working perfectly