Move doc folder to media
[reactos.git] / reactos / media / doc / HACKING
diff --git a/reactos/media/doc/HACKING b/reactos/media/doc/HACKING
new file mode 100644 (file)
index 0000000..8c8cf4e
--- /dev/null
@@ -0,0 +1,130 @@
+* Introduction
+
+Having successfully built ReactOS and been amazed by what it does, you're
+now desperate to fill in some of the omissions, this document shows you how.
+
+* Prerequisites
+
+A working knowledge of NT driver development is useful for understanding the
+kernel and some of its abstractions. The NT4 ddk is available for free
+download from http://www.microsoft.com/hwdev/. The Windows 98 and Windows
+2000 DDKs are also available but the NT4 one is the most useful. See
+Legal Stuff below however.
+
+There are a number of books on NT driver development, I would recommend
+'Windows NT Device Driver Development' (http://www.osr.com/book/) since OSR
+seem to know their stuff. There is only one book on NT filesystem
+development 'Windows NT File System Internals'. Please don't buy any of
+these books unless you need to, and can afford it. 
+
+These mailing lists and newsgroups are useful for NT internals related 
+questions,
+           ntfsd@atria.com, ntdev@atria.com 
+                           (subscribe by email to majordomo@atria.com)
+          comp.os.????
+          microsoft.public.????
+          
+* Style
+
+There is no coding style used for ReactOS, however the following guidelines
+make things easier
+
+     Include information at the top of a module about its purpose, contact
+     information for its programmer and any useful notes. 
+     
+     Include a comment by each non-trival function describing its arguments,
+     purpose and any other notes.
+     
+     Update the documentation in this directory
+     
+These guidelines are an ideal, no one manages to implement them all the
+time, straightforward working code is probably just as good.
+
+* Debugging
+
+Debugging kernel-mode code is tricky, these are some snippets
+
+    DbgPrint writes a message to the console using a printf style format
+    string. The DPRINT macro (defined in internal/debug.h) expands to
+    DbgPrint unless NDEBUG is defined, this is useful for having copious
+    output from a module only when a problem is being debugging. DPRINT
+    also prefixes the message with the file and line number to make it
+    easier to see where output is coming from. DbgPrint can be used at any
+    point including in interrupt handlers.
+    
+    There are options in ntoskrnl/kd/kdebug.c for copying DbgPrint output
+    to a serial device or bochs logging port (parallel support should also
+    be added). This can be useful if a lot of output is being generated.
+    
+    It should be possible to include support for debugging the kernel with
+    gdb over a serial line. Bochs (a shareware CPU emulator) is also useful
+    for debugging the kernel, I wrote some patches to allow capture of console
+    output from within bochs to file and for debugging a kernel running
+    under bochs with gdb. Contact me (welch@cwcom.net) if you're are 
+    interested.
+    
+    If CPU reports an exception not handled by the kernel (any page fault
+    not part of virtual memory support or any other exception) the kernel 
+    will display output like this and halt
+    
+            General Protection Fault Exception: 13(0)
+           CS:EIP  xxxxxxxx:xxxxxxx
+           DS xxxx ES xxxx FS xxxx GS xxxxx
+           EAX: xxxx EBX: xxxx
+           ....
+           EDI: xxxx EFLAGS: xxxx ESP: xxxx
+           cr2: xxxx
+           Stack: xxxx xxxx xxxx ...
+                  ....
+           Frames: xxxx xxxx xxxx ...
+                  ....
+                  
+    The fault type will usually be either 'General Protection' or
+    'Page Fault', see your Intel manual for the more exotic types. The
+    'EIP' number is the address of the faulting instruction. If the 'CS'
+    number is 0x20 then the exception occured in kernel mode, if it is 0x11
+    then the exception occurred in user mode. 'cr2' is the address that the
+    faulting instruction was trying to access, if the exception was a page 
+    fault. The number printed after 'Frames' are any addresses on the stack
+    that look like function addresses. 
+    
+    
+    If the kernel detects a serious problem that it will bug check, displaying
+    output like this
+    
+           Bug detected (code x, param x x x x)
+          Frames: xxx xxxx xxxx
+                  ....
+                  
+    Again the numbers printed after 'Frames' are any addresses on the stack
+    that look like function addresss. Usually the kernel will also print a
+    message describing the problem in more detail, the bug check code isn't
+    very useful at the moment. 
+    
+* Contacts
+
+    There is a mailing list for kernel development,
+    
+            ros-kernel@reactos.com
+           
+    The main developers use a cvs account to coordinate changes, ask 
+    rex (rex@lvcablemodem.com) for an account if you are going to be adding
+    a lot of code. Smaller patches can go to the mailing list or to the
+    relevant developer (usually the comment at the top of a module will have
+    an email address). Regular snapshots are made available for download,
+    see the mailing list for announcements.
+    
+* Legal stuff
+
+    The ReactOS project is GPL'ed, please make sure any code submitted is
+    compatible with this. 
+    
+    The NT4 ddk license agreement allows its usage for developing nt drivers
+    only. Legally therefore it can not be used to develop ReactOS, neither the
+    documentation or the sample code. I'm not a lawyer, but I doubt the
+    effiacy of 'shrinkwrap licenses' particularly on freely downloadable 
+    software. The only precendent I know of, in a Scottish court, didn't
+    upload this type of license.
+    
+    Also the 'fair use' section of copyright law allows the 'quoting' of small
+    sections from copyrighted documents, e.g. Windows API or DDK documentation