* doc/sdccman.lyx:
[fw/sdcc] / doc / sdccman.lyx
index 91bbf9df9397d4e93cef2f09b146b2c64cdeccfe..199904bdfbea1d0eb9c37bd54c0cc93623b2454f 100644 (file)
@@ -1,4 +1,4 @@
-#LyX 1.4.2 created this file. For more info see http://www.lyx.org/
+#LyX 1.4.5 created this file. For more info see http://www.lyx.org/
 \lyxformat 245
 \begin_document
 \begin_header
@@ -104,13 +104,13 @@ SDCC Compiler User Guide
 \begin_layout Date
 
 \size normal
-SDCC 2.6.5
+SDCC 2.8.5
 \size footnotesize
 
 \newline
-$Date$ 
+$Date: 2008-11-16#
 \newline
-$Revision$
+$Revision: 5272$
 \end_layout
 
 \begin_layout Standard
@@ -163,7 +163,7 @@ C
 \emph on
 C
 \emph default
-ompiler) is free open source, retargettable, optimizing ANSI-C compiler
+ompiler) is free open source, retargettable, optimizing ANSI-C compiler
  by 
 \series bold
 Sandeep Dutta
@@ -676,13 +676,14 @@ status collapsed
 \newline
 
 \newline
-SDCC also comes with a companion source level debugger SDCDB, the debugger
- currently uses ucSim a freeware simulator for 8051 and other micro-controllers.<
+SDCC also comes with a companion source level debugger SDCDB.
+ The debugger currently uses ucSim, a free open source simulator for 8051
+ and other micro-controllers.
 \newline
 
 \newline
-
-The latest version can be downloaded from 
+The latest SDCC version can be downloaded from
 \begin_inset LatexCommand \url{http://sdcc.sourceforge.net/snap.php}
 
 \end_inset
@@ -729,12 +730,12 @@ open source
 freeware
 \emph default
 ; source code for all the sub-packages (pre-processor, assemblers, linkers
- etc) is distributed with the package.
- This documentation is maintained using a freeware word processor (LyX).
+ etc.) is distributed with the package.
+ This documentation is maintained using a free open source word processor
+ (LyX).
 \newline
-This
- program is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License
+This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License
 \begin_inset LatexCommand \index{GNU General Public License, GPL}
 
 \end_inset
@@ -835,8 +836,20 @@ It would be fine to add to each item, in which version was it changed.
 \begin_layout Itemize
 short is now equivalent to int (16 bits), it used to be equivalent to char
  (8 bits) which is not ANSI compliant.
- To maintain compatibility, old programs may be compiled using the --short-is-8b
-its commandline option (see 
+ To maintain compatibility, old programs may be compiled using the -
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-short-is-8bits commandline option (see 
 \begin_inset LatexCommand \vref{lyx:--short-is-8bits}
 
 \end_inset
@@ -855,7 +868,51 @@ char type parameters to vararg
 
 \end_inset
 
- functions are casted to int unless explicitly casted
+ functions are casted to int unless explicitly casted and 
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-c89
+\begin_inset LatexCommand \index{-\/-std-c89}
+
+\end_inset
+
+\series default
+and
+\series bold
+ -
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-c99
+\begin_inset LatexCommand \index{-\/-std-c99}
+
+\end_inset
+
+
+\series default
+ command line option are not defined 
 \begin_inset Marginal
 status collapsed
 
@@ -884,7 +941,97 @@ n", a, (char)a);
 \family default
 
 \newline
- will push a as an int and as a char resp.
+ will push a as an int and as a char resp if
+\series bold
+ -
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-c89
+\begin_inset LatexCommand \index{-\/-std-c89}
+
+\end_inset
+
+\series default
+and
+\series bold
+ -
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-c99
+\begin_inset LatexCommand \index{-\/-std-c99}
+
+\end_inset
+
+
+\series default
+ command line options are not defined,
+\newline
+ will push a as two ints if
+\series bold
+ -
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-c89
+\begin_inset LatexCommand \index{-\/-std-c89}
+
+\end_inset
+
+\series default
+or
+\series bold
+ -
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-c99
+\begin_inset LatexCommand \index{-\/-std-c99}
+
+\end_inset
+
+
+\series default
+ command line option is defined.
 \end_layout
 
 \begin_layout Itemize
@@ -1011,10 +1158,168 @@ b = !b; /* toggles b */
 In previous versions, both forms would have toggled the bit.
 \end_layout
 
+\begin_layout Itemize
+in older versions, the preprocessor was always called with 
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
 \begin_layout Standard
 
-\emph on
-<pending: more incompatibilities?>
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-c99
+\begin_inset LatexCommand \index{-\/-std-c99}
+
+\end_inset
+
+
+\series default
+ regardless of the 
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-xxx
+\series default
+ setting.
+ This is no longer true, and can cause compilation failures on code built
+ with 
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-c89
+\begin_inset LatexCommand \index{-\/-std-c89}
+
+\end_inset
+
+
+\series default
+ but using c99 preprocessor features, such as one-line (//) comments
+\end_layout
+
+\begin_layout Itemize
+in versions older then 2.8.4 the pic16 *printf() and printf_tiny() library
+ functions supported undocumented and not standard compliant 'b' binary
+ format specifier ("%b", "%hb" and "%lb").
+ The 'b' specifier is now disabled by default.
+ It can be enabled by defining BINARY_SPECIFIER macro in files device/lib/pic16/
+libc/stdio/vfprintf.c and device/lib/pic16/libc/stdio/printf_tiny.c and recompilin
+g the library.
+\end_layout
+
+\begin_layout Itemize
+in versions older then 2.8.5 the unnamed bitfield structure members participated
+ in initialization, which is not conforming with ISO/IEC 9899:1999 standard
+ (see section Section 6.7.8 Initialization, clause 9)
+\newline
+
+\newline
+Old behavior, before
+ version 2.8.5:
+\family typewriter
+
+\newline
+\InsetSpace ~
+\InsetSpace ~
+struct {
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+int a : 2;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+char\InsetSpace ~
+ : 2;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+int b : 2;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+} s = {1, 2, 3};
+\family default
+
+\newline
+
+\family typewriter
+/* s.a = 1, s.b = 3 */
+\family default
+
+\newline
+
+\newline
+New behavior:
+\family typewriter
+
+\newline
+\InsetSpace ~
+\InsetSpace ~
+struct {
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+int a : 2;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+char\InsetSpace ~
+ : 2;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+int b : 2;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+} s = {1, 2};
+\family default
+
+\newline
+
+\family typewriter
+/* s.a = 1, s.b = 2 */
 \end_layout
 
 \begin_layout Section
@@ -1403,7 +1708,25 @@ status collapsed
 
 \end_inset
 
--disable-pic-port Excludes the PIC port
+-disable-pic-port Excludes the PIC14 port
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-disable-pic16-port Excludes the PIC16 port
 \end_layout
 
 \begin_layout List
@@ -1517,6 +1840,24 @@ status collapsed
  Lower runtime footprint.
 \end_layout
 
+\begin_layout List
+\labelwidthstring 00.00.0000
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-without-ccache Do not use ccache even if available
+\end_layout
+
 \begin_layout Standard
 Furthermore the environment variables CC, CFLAGS, ...
  the tools and their arguments can be influenced.
@@ -1533,14 +1874,14 @@ status collapsed
 
 \end_inset
 
--help` and the man/info pages of `configure` for details.
+-help' and the man/info pages of `configure' for details.
 \newline
 
 \newline
 The names of the
  standard libraries STD_LIB, STD_INT_LIB, STD_LONG_LIB, STD_FP_LIB, STD_DS390_LI
 B, STD_XA51_LIB and the environment variables SDCC_DIR_NAME, SDCC_INCLUDE_NAME,
- SDCC_LIB_NAME are defined by `configure` too.
+ SDCC_LIB_NAME are defined by `configure' too.
  At the moment it's not possible to change the default settings (it was
  simply never required).
 \newline
@@ -2810,7 +3151,7 @@ model
 
 \begin_layout Standard
 \noindent
-The install paths can still be changed during `make install` with e.g.:
+The install paths can still be changed during `make install' with e.g.:
 \end_layout
 
 \begin_layout LyX-Code
@@ -3922,7 +4263,7 @@ Type
 \end_layout
 
 \begin_layout Subsection
-Building SDCC on OSX 2.x
+Building SDCC on Mac OS X
 \end_layout
 
 \begin_layout Standard
@@ -3930,8 +4271,8 @@ Follow the instruction for Linux.
 \newline
 
 \newline
-On OSX 2.x it was reported, that the default
- gcc (version 3.1 20020420 (prerelease)) fails to compile SDCC.
+On Mac OS X 10.2.x it was reported, that the
default gcc (version 3.1 20020420 (prerelease)) fails to compile SDCC.
  Fortunately there's also gcc 2.9.x installed, which works fine.
  This compiler can be selected by running 'configure' with:
 \end_layout
@@ -3940,6 +4281,36 @@ On OSX 2.x it was reported, that the default
 ./configure CC=gcc2 CXX=g++2
 \end_layout
 
+\begin_layout Standard
+Universal (ppc and i386) binaries can be produced on Mac OS X 10.4.x with
+ Xcode.
+ Run 'configure' with:
+\end_layout
+
+\begin_layout LyX-Code
+./configure 
+\backslash
+
+\end_layout
+
+\begin_layout LyX-Code
+LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch
+ ppc" 
+\backslash
+
+\end_layout
+
+\begin_layout LyX-Code
+CXXFLAGS = "-O2 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch
+ ppc" 
+\backslash
+
+\end_layout
+
+\begin_layout LyX-Code
+CFLAGS = "-O2 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
+\end_layout
+
 \begin_layout Subsection
 Cross compiling SDCC on Linux for Windows
 \end_layout
@@ -4610,8 +4981,8 @@ This is not only usefull for building different binaries, e.g.
  generated files are not scattered between the source files.
  And the best thing is: if you want to change a file you can leave the original
  file untouched in the source directory.
- Simply copy it to the build directory, edit it, enter `make clean`, `rm
- Makefile.dep` and `make`.
+ Simply copy it to the build directory, edit it, enter `make clean', `rm
+ Makefile.dep' and `make'.
  
 \series bold
 make
@@ -5380,7 +5751,7 @@ S51
 
 \end_inset
 
- is a freeware, opensource simulator developed by Daniel Drotos.
+ is a free open source simulator developed by Daniel Drotos.
  The simulator is built as part of the build process.
  For more information visit Daniel's web site at: 
 \begin_inset LatexCommand \url{http://mazsola.iit.uni-miskolc.hu/~drdani/embedded/s51}
@@ -6248,6 +6619,28 @@ sdcclib libint.lib _moduint.rel
 \family sans
 \series bold
 sdcclib libint.lib _mulint.rel
+\family default
+\series default
+
+\newline
+
+\end_layout
+
+\begin_layout Standard
+Or, if you preffer:
+\family sans
+\series bold
+
+\newline
+
+\end_layout
+
+\begin_layout Standard
+
+\family sans
+\series bold
+sdcclib libint.lib _divsint.rel _divuint.rel _modsint.rel _moduint.rel _mulint.rel
+\family default
 \series default
 
 \newline
@@ -6256,7 +6649,110 @@ sdcclib libint.lib _mulint.rel
 
 \begin_layout Standard
 If the file already exists in the library, it will be replaced.
- To see what modules and symbols are included in the library, options -s
+ If a list of .rel files is available, you can tell sdcclib to add those
+ files to a library.
+ For example, if the file 'myliblist.txt' contains
+\family sans
+\series bold
+
+\newline
+
+\end_layout
+
+\begin_layout Standard
+
+\family sans
+\series bold
+_divsint.rel
+\end_layout
+
+\begin_layout Standard
+
+\family sans
+\series bold
+_divuint.rel
+\end_layout
+
+\begin_layout Standard
+
+\family sans
+\series bold
+_modsint.rel
+\end_layout
+
+\begin_layout Standard
+
+\family sans
+\series bold
+_moduint.rel
+\end_layout
+
+\begin_layout Standard
+
+\family sans
+\series bold
+_mulint.rel
+\family default
+\series default
+
+\newline
+
+\end_layout
+
+\begin_layout Standard
+Use
+\family sans
+\series bold
+
+\newline
+
+\end_layout
+
+\begin_layout Standard
+
+\family sans
+\series bold
+sdcclib -l libint.lib myliblist.txt
+\family default
+\series default
+
+\newline
+
+\end_layout
+
+\begin_layout Standard
+Additionally, you can instruct sdcclib to compiles the files before adding
+ them to the library.
+ This is achieved using the environment variables SDCCLIB_CC and/or SDCCLIB_AS.
+ For example:
+\family sans
+\series bold
+
+\newline
+
+\end_layout
+
+\begin_layout Standard
+
+\family sans
+\series bold
+set SDCCLIB_CC=sdcc -c
+\end_layout
+
+\begin_layout Standard
+
+\family sans
+\series bold
+sdcclib -l libint.lib myliblist.txt
+\family default
+\series default
+
+\newline
+
+\end_layout
+
+\begin_layout Standard
+To see what modules and symbols are included in the library, options -s
  and -m are available.
  For example:
 \newline
@@ -6962,17 +7458,7 @@ Pedantic parse numbers so that situations like 0xfe-LO_B(3) are parsed properly
 
  
 \emph on
-Note: this functionality is not in conformance with 
-\begin_inset Note Note
-status collapsed
-
-\begin_layout Standard
-which standard? C99? 
-\end_layout
-
-\end_inset
-
-standard!
+Note: this functionality is not in conformance with C99 standard!
 \end_layout
 
 \begin_layout List
@@ -7718,6 +8204,11 @@ linkOption[,linkOption]
 
 \end_inset
 
+
+\begin_inset LatexCommand \label{lyx:-Wl option}
+
+\end_inset
+
 ...
  Pass the linkOption to the linker.
  If a bootloader is used an option like 
@@ -7730,6 +8221,8 @@ linkOption[,linkOption]
 \end_inset
 
  would be typical to set the start of the code segment.
+ Either use the double quotes around this option or use no space (e.g.
+ -Wl-bCSEG=0x1000).
  See also #pragma constseg and #pragma codeseg in section 
 \begin_inset LatexCommand \ref{sec:Pragmas}
 
@@ -8069,6 +8562,38 @@ status collapsed
  Causes the linker to use old style for allocating memory areas.
 \end_layout
 
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-acall-ajmp
+\series default
+\InsetSpace ~
+
+\begin_inset LatexCommand \index{-\/-acall-ajmp}
+
+\end_inset
+
+ Replaces the three byte instructions lcall/ljmp with the two byte instructions
+ acall/ajmp.
+ Only use this option if your code is in the same 2k block of memory.
+ You may need to use this option for some 8051 derivatives which lack the
+ lcall/ljmp instructions..
+\end_layout
+
 \begin_layout Standard
 \begin_inset VSpace bigskip
 \end_inset
@@ -8274,7 +8799,20 @@ status collapsed
 \labelwidthstring 00.00.0000
 
 \series bold
---stack-8-bit - switches off the 10-bit mode
+-
+\begin_inset ERT
+status open
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-stack-8-bit - switches off the 10-bit mode
 \end_layout
 
 \end_inset
@@ -8315,7 +8853,7 @@ status collapsed
 \series bold
 -
 \begin_inset ERT
-status collapsed
+status open
 
 \begin_layout Standard
 
@@ -8445,10 +8983,120 @@ status collapsed
 
  When linking, skip the standard crt0.o object file.
  You must provide your own crt0.o for your system when linking.
 \end_layout
 
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-portmode=
+\series default
+<Value>
+\begin_inset LatexCommand \index{Z80!Options!-\/-portmode=<Value>}
+
+\end_inset
+
+ Determinate PORT I/O mode (<Value> is z80 or z180).
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-asm=
+\series default
+<Value>
+\begin_inset LatexCommand \index{Z80!Options!-\/-asm=<Value>}
+
+\end_inset
+
+ Define assembler name (<Value> is rgbds, asxxxx, isas or z80asm).
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-codeseg
+\series default
+\InsetSpace ~
+<Value>
+\begin_inset LatexCommand \index{Z80!Options!-\/-codeseg <Value>}
+
+\end_inset
+
+ Use <Value> for the code segment name.
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
 \begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-constseg
+\series default
+\InsetSpace ~
+<Value>
+\begin_inset LatexCommand \index{Z80!Options!-\/-constseg <Value>}
+
+\end_inset
+
+ Use <Value> for the const segment name.
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
 \begin_inset VSpace bigskip
 \end_inset
 
@@ -8456,13 +9104,181 @@ status collapsed
 \end_layout
 
 \begin_layout Subsection
-Optimization Options
-\begin_inset LatexCommand \index{Options optimization}
+GBZ80 Options
+\begin_inset LatexCommand \index{Options GBZ80}
 
 \end_inset
 
 
-\begin_inset LatexCommand \index{Optimization options}
+\begin_inset LatexCommand \index{GBZ80}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-callee-saves-bc
+\series default
+
+\begin_inset LatexCommand \index{GBZ80!Options!-\/-callee-saves-bc}
+
+\end_inset
+
+
+\size large
+\emph on
+\size default
+\emph default
+Force a called function to always save BC.
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-no-std-crt0
+\series default
+
+\begin_inset LatexCommand \index{Z80!Options!-\/-no-std-crt0}
+
+\end_inset
+
+ When linking, skip the standard crt0.o object file.
+ You must provide your own crt0.o for your system when linking.
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\series bold
+-bo
+\series default
+\InsetSpace ~
+<Num>
+\begin_inset LatexCommand \index{GBZ80!Options!-bo <Num>}
+
+\end_inset
+
+ Use code bank <Num>.
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\series bold
+-ba
+\series default
+\InsetSpace ~
+<Num>
+\begin_inset LatexCommand \index{GBZ80!Options!-ba <Num>}
+
+\end_inset
+
+ Use data bank <Num>.
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-codeseg
+\series default
+\InsetSpace ~
+<Value>
+\begin_inset LatexCommand \index{GBZ80!Options!-\/-codeseg <Value>}
+
+\end_inset
+
+ Use <Value> for the code segment name.
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-constseg
+\series default
+\InsetSpace ~
+<Value>
+\begin_inset LatexCommand \index{GBZ80!Options!-\/-constseg <Value>}
+
+\end_inset
+
+ Use <Value> for the const segment name.
+\end_layout
+
+\begin_layout Standard
+\begin_inset VSpace bigskip
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+Optimization Options
+\begin_inset LatexCommand \index{Options optimization}
+
+\end_inset
+
+
+\begin_inset LatexCommand \index{Optimization options}
 
 \end_inset
 
@@ -9040,11 +9856,74 @@ status collapsed
 
  
 \series default
-The output path resp.
file where everything will be placed.
+The output path where everything will be placed or the file name used for
all generated output files.
  If the parameter is a path, it must have a trailing slash (or backslash
  for the Windows binaries) to be recognized as a path.
+
+\emph on
+\emph default
+Note for Windows users: if the path contains spaces, it should be surrounded
+ by quotes.
+ The trailing backslash should be doubled in order to prevent escaping the
+ final quote, for example: 
+\emph on
+-o 
+\begin_inset Quotes sld
+\end_inset
+
+F:
+\backslash
+Projects
+\backslash
+test3
+\backslash
+output 1
+\backslash
+
+\backslash
+
+\begin_inset Quotes srd
+\end_inset
+
+
+\emph default
+ or put after the final quote, for example: 
+\emph on
+-o 
+\begin_inset Quotes sld
+\end_inset
+
+F:
+\backslash
+Projects
+\backslash
+test3
+\backslash
+output 1
+\begin_inset Quotes srd
+\end_inset
+
+
+\backslash
+
+\emph default
+.
+ The path using slashes for directory delimiters can be used too, for example:
  
+\emph on
+-o 
+\begin_inset Quotes sld
+\end_inset
+
+F:/Projects/test3/output 1/
+\begin_inset Quotes srd
+\end_inset
+
+
+\emph default
+.
 \end_layout
 
 \begin_layout List
@@ -9100,7 +9979,41 @@ reentrant
  Parameters and Local Variables for more details.
  If this option is used all source files in the project should be compiled
  with this option.
- It automatically implies --int-long-reent and --float-reent.
+ It automatically implies -
+\series bold
+
+\begin_inset ERT
+status open
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+
+\series default
+-int-long-reent and -
+\series bold
+
+\begin_inset ERT
+status open
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+
+\series default
+-float-reent.
  
 \end_layout
 
@@ -9445,7 +10358,24 @@ status collapsed
  unsigned
 \family default
 .
- To set the signess for characters to unsigned, use the option --funsigned-char.
+ To set the signess for characters to unsigned, use the option -
+\series bold
+
+\begin_inset ERT
+status open
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+
+\series default
+-funsigned-char.
  If this option is set and no signedness keyword (unsigned/signed) is given,
  a char will be signed.
  All other types are unaffected.
@@ -9639,14 +10569,14 @@ status collapsed
 
 \end_inset
 
--no-peep-comments
-\begin_inset LatexCommand \index{-\/-no-peep-comments}
+-fverbose-asm
+\begin_inset LatexCommand \index{-\/-no-gen-comments}
 
 \end_inset
 
 
 \series default
Will not include peep-hole comments in the generated files.
Include code generator and peep-hole comments in the generated asm files.
 \end_layout
 
 \begin_layout List
@@ -9666,14 +10596,31 @@ status collapsed
 
 \end_inset
 
--no-gen-comments
-\begin_inset LatexCommand \index{-\/-no-gen-comments}
+-no-peep-comments
+\begin_inset LatexCommand \index{-\/-no-peep-comments}
+
+\end_inset
+
+
+\series default
+ Don't include peep-hole comments in the generated asm files even if -
+\series bold
+
+\begin_inset ERT
+status open
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
 
 \end_inset
 
 
 \series default
- Will not include code generator comments in the generated files.
+-fverbose-asm option is specified.
 \end_layout
 
 \begin_layout List
@@ -9791,6 +10738,33 @@ status collapsed
 \begin_layout Standard
 
 
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-Werror
+\begin_inset LatexCommand \index{-\/-Werror}
+
+\end_inset
+
+
+\series default
+ Treat all warnings as errors.
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
 \backslash
 /
 \end_layout
@@ -10037,6 +11011,11 @@ status collapsed
 
 \end_inset
 
+
+\begin_inset LatexCommand \label{lyx:-codeseg}
+
+\end_inset
+
 \InsetSpace ~
 <Name> The name to be used for the code
 \begin_inset LatexCommand \index{code}
@@ -10077,7 +11056,7 @@ status collapsed
 
 \InsetSpace ~
 <Name> The name to be used for the const
-\begin_inset LatexCommand \index{code}
+\begin_inset LatexCommand \index{const}
 
 \end_inset
 
@@ -10113,7 +11092,7 @@ status collapsed
 
 
 \series default
- Permit '$' as an identifier character-
+ Permit '$' as an identifier character.
 \end_layout
 
 \begin_layout List
@@ -10391,7 +11370,7 @@ status collapsed
 
 
 \series default
- Will create a dump of iCode's, after global subexpression elimination
+ Will create a dump of iCodes, after global subexpression elimination
 \begin_inset LatexCommand \index{Global subexpression elimination}
 
 \end_inset
@@ -10425,7 +11404,7 @@ status collapsed
 
 
 \series default
- Will create a dump of iCode's, after deadcode elimination
+ Will create a dump of iCodes, after deadcode elimination
 \begin_inset LatexCommand \index{Dead-code elimination}
 
 \end_inset
@@ -10462,7 +11441,7 @@ status collapsed
 \size large
  
 \size default
-Will create a dump of iCode's, after loop optimizations
+Will create a dump of iCodes, after loop optimizations
 \begin_inset LatexCommand \index{Loop optimization}
 
 \end_inset
@@ -10499,7 +11478,7 @@ status collapsed
 \size large
  
 \size default
-Will create a dump of iCode's, after live range analysis
+Will create a dump of iCodes, after live range analysis
 \begin_inset LatexCommand \index{Live range analysis}
 
 \end_inset
@@ -10568,7 +11547,7 @@ status collapsed
  
 \series default
 \bar default
-Will create a dump of iCode's, after register assignment
+Will create a dump of iCodes, after register assignment
 \begin_inset LatexCommand \index{Register assignment}
 
 \end_inset
@@ -10649,7 +11628,7 @@ Redirecting output on Windows Shells
 \end_layout
 
 \begin_layout Standard
-By default SDCC writes it's error messages to 
+By default SDCC writes its error messages to 
 \begin_inset Quotes sld
 \end_inset
 
@@ -12412,6 +13391,31 @@ The xdata storage class declares a variable that can reside anywhere in
 \end_inset
 
 
+\end_layout
+
+\begin_layout Section
+Other SDCC language extensions
+\begin_inset LatexCommand \index{Other SDCC language extensions}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+Binary constants
+\end_layout
+
+\begin_layout Standard
+SDCC supports the use of binary constants, such as 0b01100010.
+ This feature is only enabled when the compiler is invoked using --std-sdccxx.
+\end_layout
+
+\begin_layout Standard
+\begin_inset VSpace bigskip
+\end_inset
+
+
 \end_layout
 
 \begin_layout Section
@@ -12516,29 +13520,36 @@ status collapsed
 \end_inset
 
 ) are good places to look for such overlaps.
- Variables with an absolute address are 
-\emph on
-not
-\begin_inset Marginal
-status collapsed
+\end_layout
 
 \begin_layout Standard
-
-\series bold
-\InsetSpace ~
-!
-\end_layout
+If however you provide an initializer
+\begin_inset LatexCommand \index{Variable initialization}
 
 \end_inset
 
+ actual memory allocation will take place and overlaps will be detected
+ by the linker.
+ E.g.:
+\end_layout
 
-\emph default
- initialized
-\begin_inset LatexCommand \index{Variable initialization}
+\begin_layout Verse
+
+\family typewriter
+__code __at (0x7ff0) char Id[5] = 
+\begin_inset Quotes sld
+\end_inset
 
+SDCC
+\begin_inset Quotes srd
 \end_inset
 
-.
+;
+\end_layout
+
+\begin_layout Standard
+In the above example the variable Id will be located from 0x7ff0 to 0x7ff4
+ in code memory.
 \end_layout
 
 \begin_layout Standard
@@ -12891,7 +13902,7 @@ Parameters
 Automatic (local) variables and parameters to functions can either be placed
  on the stack or in data-space.
  The default action of the compiler is to place these variables in the internal
- RAM (for small model) or external RAM (for large model).
+ RAM (for small model) or external RAM (for medium or large model).
  This in fact makes them similar to 
 \emph on
 static
@@ -14802,7 +15813,24 @@ The compiler triggers the linker to link certain initialization modules
 
  called crt<something>.
  Only the necessary ones are linked, for instance crtxstack.asm (GSINIT1,
- GSINIT5) is not linked unless the --xstack option is used.
+ GSINIT5) is not linked unless the -
+\series bold
+
+\begin_inset ERT
+status open
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+
+\series default
+-xstack option is used.
  These modules are highly entangled by the use of special segments/areas,
  but a common layout is shown below:
 \end_layout
@@ -15302,6 +16330,17 @@ mov a,r0
 \InsetSpace ~
 \InsetSpace ~
 \InsetSpace ~
+orl a,#(l_PSEG
+ >> 8)
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
 jz 00006$
 \newline
 \InsetSpace ~
@@ -15312,8 +16351,7 @@ jz 00006$
 \InsetSpace ~
 \InsetSpace ~
 \InsetSpace ~
-mov
- r1,#s_PSEG
+mov r1,#s_PSEG
 \newline
 \InsetSpace ~
 \InsetSpace ~
@@ -15336,7 +16374,8 @@ mov __XPAGE,#(s_PSEG >> 8)
 clr a
 \newline
 00005$:\InsetSpace ~
-movx @r1,a
+movx
+ @r1,a
 \newline
 \InsetSpace ~
 \InsetSpace ~
@@ -15358,8 +16397,7 @@ inc r1
 \InsetSpace ~
 djnz r0,00005$
 \newline
-0
-0006$:
+00006$:
 \newline
 \InsetSpace ~
 \InsetSpace ~
@@ -15389,7 +16427,8 @@ mov a,r0
 \InsetSpace ~
 \InsetSpace ~
 \InsetSpace ~
-orl a,#(l_XSEG >> 8)
+orl a,#(l_XSEG >>
+ 8)
 \newline
 \InsetSpace ~
 \InsetSpace ~
@@ -15409,8 +16448,7 @@ jz 00008$
 \InsetSpace ~
 \InsetSpace ~
 \InsetSpace ~
-mov r1,#((l_XSEG
- + 255) >> 8)
+mov r1,#((l_XSEG + 255) >> 8)
 \newline
 \InsetSpace ~
 \InsetSpace ~
@@ -15433,7 +16471,8 @@ mov dptr,#s_XSEG
 clr a
 \newline
 00007$:\InsetSpace ~
-movx @dptr,a
+movx
+ @dptr,a
 \newline
 \InsetSpace ~
 \InsetSpace ~
@@ -15463,8 +16502,7 @@ djnz r0,00007$
 \InsetSpace ~
 \InsetSpace ~
 \InsetSpace ~
-djnz
- r1,00007$
+djnz r1,00007$
 \newline
 00008$:
 \end_layout
@@ -15757,6 +16795,75 @@ status collapsed
 \end_inset
 
  about MCS51-variants.
+\newline
+
+\end_layout
+
+\begin_layout Standard
+While these initialization modules are meant as generic startup code there
+ might be the need for customization.
+ Let's assume the return value of 
+\emph on
+_sdcc_external_startup()
+\emph default
+ in 
+\emph on
+crtstart.asm
+\emph default
+ should not be checked (or 
+\emph on
+_sdcc_external_startup()
+\emph default
+ should not be called at all).
+ The recommended way would be to copy 
+\emph on
+crtstart.asm
+\emph default
+ (f.e.
+ from 
+\begin_inset LatexCommand \url{http://sdcc.svn.sourceforge.net/viewvc/*checkout*/sdcc/trunk/sdcc/device/lib/mcs51/crtstart.asm}
+
+\end_inset
+
+) into the source directory, adapt it there, then assemble it with 
+\emph on
+asx8051 -plosgff
+\begin_inset Foot
+status open
+
+\begin_layout Standard
+\begin_inset Quotes sld
+\end_inset
+
+-plosgff
+\begin_inset Quotes srd
+\end_inset
+
+ are the assembler options used in 
+\begin_inset LatexCommand \url{http://sdcc.svn.sourceforge.net/viewvc/sdcc/trunk/sdcc/device/lib/mcs51/Makefile.in?view=markup }
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+ crtstart.asm
+\emph default
+ and when linking your project explicitely specify 
+\emph on
+crtstart.rel
+\emph default
+.
+ As a bonus a listing of the relocated object file 
+\emph on
+crtstart.rst
+\emph default
+ is generated.
+\end_layout
+
+\begin_layout Standard
 \begin_inset VSpace bigskip
 \end_inset
 
@@ -17045,8 +18152,8 @@ Use of Labels within Inline Assembler
 \begin_layout Standard
 SDCC allows the use of in-line assembler with a few restrictions regarding
  labels.
- In older versions of the compiler all labels defined within inline assembler
- code had to be of the form 
+ All labels defined within inline assembler code have to be of the form
 \emph on
 nnnnn$
 \emph default
@@ -17059,6 +18166,33 @@ per function
 )
 \noun default
 .
+\begin_inset Foot
+status open
+
+\begin_layout Standard
+This is a slightly more stringent rule than absolutely necessary, but stays
+ always on the safe side.
+ Labels in the form of nnnnn$ are local labels in the assembler, locality
+ of which is confined within two labels of the standard form.
+ The compiler uses the same form for labels within a function (but starting
+ from nnnnn=00100); and places always a standard label at the beginning
+ of a function, thus limiting the locality of labels within the scope of
+ the function.
+ So, if the inline assembler part would be embedded into C-code, an improperly
+ placed non-local label in the assembler would break up the reference space
+ for labels created by the compiler for the C-code, leading to an assembling
+ error.
+\end_layout
+
+\begin_layout Standard
+The numeric part of local labels does not need to have 5 digits (although
+ this is the form of labels output by the compiler), any valid integer will
+ do.
+ Please refer to the assemblers documentation for further details.
+\end_layout
+
+\end_inset
+
  
 \end_layout
 
@@ -17154,7 +18288,7 @@ _asm
 \InsetSpace ~
 \InsetSpace ~
 \InsetSpace ~
-ljmp $0003 
+ljmp 0003$ 
 \newline
 \InsetSpace ~
 \InsetSpace ~
@@ -17173,6 +18307,21 @@ clabel:\InsetSpace ~
 \InsetSpace ~
 /* inline assembler cannot reference this
  label */ 
+\begin_inset Foot
+status open
+
+\begin_layout Standard
+Here, the C-label 
+\family typewriter
+clabel
+\family default
+ is translated by the compiler into a local label, so the locality of labels
+ within the function is not broken.
+\end_layout
+
+\end_inset
+
+
 \newline
 \InsetSpace ~
 \InsetSpace ~
@@ -17184,8 +18333,7 @@ _asm
 \InsetSpace ~
 \InsetSpace ~
 \InsetSpace ~
-$0003: ;label (can be referenced by inline assembler only)
+0003$: ;label (can be referenced by inline assembler only) 
 \newline
 \InsetSpace ~
 \InsetSpace ~
@@ -17266,8 +18414,8 @@ and
 
 
 \emph default
- to pass the first parameter to a function, and also to pass the return
- value 
+ to pass the first (non-bit) parameter to a function, and also to pass the
return value 
 \begin_inset LatexCommand \index{return value}
 
 \end_inset
@@ -17369,7 +18517,21 @@ status collapsed
 \end_inset
 
 -stack-auto is used) or in data/xdata memory (depending on the memory model).
+\end_layout
+
+\begin_layout Standard
+Bit parameters are passed in a virtual register called 'bits' in bit-addressable
+ space for reentrant functions or allocated directly in bit memory otherwise.
+\end_layout
+
+\begin_layout Standard
+Functions (with two or more parameters or bit parameters) that are called
+ through function pointers
+\begin_inset LatexCommand \index{function pointers}
+
+\end_inset
+
+ must therefor be reentrant so the compiler knows how to pass the parameters.
 \end_layout
 
 \begin_layout Subsection
@@ -21001,7 +22163,7 @@ less_pedantic
 
 \end_inset
 
-- the compiler will not warn you anymore for obvious mistakes, you'r on
+- the compiler will not warn you anymore for obvious mistakes, you're on
  your own now ;-( .
  See also the command line option -
 \begin_inset ERT
@@ -21118,24 +22280,6 @@ disable_warning
 \end_inset
 
  - the compiler will not warn you anymore about warning number <nnnn>.
-\begin_inset Note Note
-status open
-
-\begin_layout Itemize
-\begin_inset Quotes sld
-\end_inset
-
-For list of warnings and corresponding codes, see err_warn.txt
-\begin_inset Quotes srd
-\end_inset
-
- This list should probably be part of the manual? See Patch #1697136 
-\end_layout
-
-\end_inset
-
-.
 \end_layout
 
 \begin_layout Itemize
@@ -21784,7 +22928,7 @@ int foo ()
 
 \begin_layout Standard
 The compiler will generate a warning message when extra space is allocated.
- It is strongly recommended that the save and restore pragma's be used when
+ It is strongly recommended that the save and restore pragmas be used when
  changing options for a function.
 \newline
 
@@ -21816,7 +22960,7 @@ The compiler creates the following #defines
 
 \begin_layout Standard
 \begin_inset Tabular
-<lyxtabular version="3" rows="11" columns="2">
+<lyxtabular version="3" rows="15" columns="2">
 <features>
 <column alignment="left" valignment="top" leftline="true" width="3in">
 <column alignment="left" valignment="top" leftline="true" rightline="true" width="3in">
@@ -22186,7 +23330,7 @@ when
 \end_inset
 </cell>
 </row>
-<row topline="true" bottomline="true">
+<row topline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
@@ -22212,6 +23356,158 @@ when
  is used
 \end_layout
 
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+SDCC_REVISION
+\begin_inset LatexCommand \index{SDCC\_REVISION}
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Always defined.
+ SDCC svn revision number
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+SDCC_PARMS_IN_BANK1
+\begin_inset LatexCommand \index{SDCC\_PARMS\_IN\_BANK1}
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+when 
+\emph on
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-parms-in-bank1
+\emph default
+ is used
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+SDCC_FLOAT_REENT
+\begin_inset LatexCommand \index{SDCC\_MODEL\_FLAT24}
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+when 
+\emph on
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-float-reent
+\emph default
+ is used
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+SDCC_INT_LONG_REENT
+\begin_inset LatexCommand \index{SDCC\_INT\_LONG\_REENT}
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+when 
+\emph on
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-int-long-reent
+\emph default
+ is used
+\end_layout
+
 \end_inset
 </cell>
 </row>
@@ -22352,6 +23648,281 @@ Some MCS51 variants offer features like Double DPTR
  These are currently not used for the MCS51 port.
  If you absolutely need them you can fall back to inline assembly or submit
  a patch to SDCC.
+\end_layout
+
+\begin_layout Subsection
+Bankswitching
+\end_layout
+
+\begin_layout Standard
+Bankswitching
+\begin_inset LatexCommand \index{Bankswitching}
+
+\end_inset
+
+ (a.k.a.
+ code banking
+\begin_inset LatexCommand \index{code banking}
+
+\end_inset
+
+) is a technique to increase the code space above the 64k limit of the 8051.
+\end_layout
+
+\begin_layout Subsubsection
+Hardware
+\end_layout
+
+\begin_layout Standard
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="4">
+<features>
+<column alignment="center" valignment="top" width="0">
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
+<row topline="true" bottomline="true">
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+8000-FFFF
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+bank1
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+bank2
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+bank3
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+0000-7FFF
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+common
+\end_layout
+
+\end_inset
+</cell>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell multicolumn="1" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+SiLabs C8051F120 example
+\end_layout
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\newline
+
+\newline
+Usually the hardware uses some sfr (an output port or an internal sfr) to
+ select a bank and put it in the banked area of the memory map.
+ The selected bank usually becomes active immediately upon assignment to
+ this sfr and when running inside a bank it will switch out this code it
+ is currently running.
+ Therefor you cannot jump or call directly from one bank to another and
+ need to use a so-called trampoline in the common area.
+ For SDCC an example trampoline is in crtbank.asm and you may need to change
+ it to your 8051 derivative or schematic.
+ The presented code is written for the C8051F120.
+\newline
+
+\newline
+When calling a banked function
+ SDCC will put the LSB of the functions address in register R0, the MSB
+ in R1 and the bank in R2 and then call this trampoline 
+\emph on
+__sdcc_banked_call
+\emph default
+.
+ The current selected bank is saved on the stack, the new bank is selected
+ and an indirect jump is made.
+ When the banked function returns it jumps to 
+\emph on
+__sdcc_banked_ret
+\emph default
+ which restores the previous bank and returns to the caller.
+\end_layout
+
+\begin_layout Subsubsection
+Software
+\end_layout
+
+\begin_layout Standard
+When writing banked software using SDCC you need to use some special keywords
+ and options.
+ You also need to take over a bit of work from the linker.
+\newline
+
+\newline
+To create a function
+ that can be called from another bank it requires the keyword 
+\emph on
+banked
+\emph default
+
+\begin_inset LatexCommand \index{banked}
+
+\end_inset
+
+.
+ The caller must see this in the prototype of the callee and the callee
+ needs it for a proper return.
+ Called functions within the same bank as the caller do not need the 
+\emph on
+banked
+\emph default
+ keyword nor do functions in the common area.
+ Beware: SDCC does not know or check if functions are in the same bank.
+ This is your responsibility!
+\newline
+
+\newline
+Normally all functions you write end up in
+ the segment CSEG.
+ If you want a function explicitly to reside in the common area put it in
+ segment HOME.
+ This applies for instance to interrupt service routines as they should
+ not be banked.
+\end_layout
+
+\begin_layout Standard
+Functions that need to be in a switched bank must be put in a named segment.
+ The name can be mostly anything upto eight characters (e.g.
+ BANK1).
+ To do this you either use -
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-codeseg BANK1 (See 
+\begin_inset LatexCommand \ref{lyx:-codeseg}
+
+\end_inset
+
+) on the command line when compiling or #pragma codeseg BANK1 (See 
+\begin_inset LatexCommand \ref{sec:Pragmas}
+
+\end_inset
+
+) at the top of the C source file.
+ The segment name always applies to the whole source file and generated
+ object so functions for different banks need to be defined in different
+ source files.
+\newline
+
+\newline
+When linking your objects you need to tell the linker where
+ to put your segments.
+ To do this you use the following command line option to SDCC: -Wl-b BANK1=0x180
+00 (See 
+\begin_inset LatexCommand \ref{lyx:-Wl option}
+
+\end_inset
+
+).
+ This sets the virtual start address of this segment.
+ It sets the banknumber to 0x01 and maps the bank to 0x8000 and up.
+ The linker will not check for overflows, again this is your responsibility.
+\end_layout
+
+\begin_layout Standard
 \begin_inset VSpace bigskip
 \end_inset
 
@@ -22483,42 +24054,114 @@ The HC08 port passes the regression test suite (see section
 \end_inset
 
 
-\newpage
-
 \end_layout
 
 \begin_layout Section
-The PIC14 port
+The PIC14
+\begin_inset LatexCommand \index{PIC14}
+
+\end_inset
+
+ port
 \end_layout
 
 \begin_layout Standard
-The 14bit PIC
+The PIC14 port adds support for Microchip
+\begin_inset LatexCommand \index{Microchip}
+
+\end_inset
+
+
+\begin_inset Formula $^{\text{TM}}$
+\end_inset
+
+ PIC
 \begin_inset LatexCommand \index{PIC14}
 
 \end_inset
 
- port still requires a major effort from the development community.
- However it can work for simple code.
- It passes its (smaller set of) regression tests
-\begin_inset LatexCommand \index{Regression test (PIC14)}
 
+\begin_inset Formula $^{\text{TM}}$
 \end_inset
 
- in the directory 
-\shape italic
-sdcc/src/regression
-\shape default
-.
+ MCUs with 14 bit wide instructions.
+ This port is not yet mature and still lacks many features.
+ However, it can work for simple code.
+\end_layout
+
+\begin_layout Standard
+\noindent
+Currently supported devices include:
+\end_layout
+
+\begin_layout Standard
+12F: 629, 635, 675, 683
+\end_layout
+
+\begin_layout Standard
+16C: 432, 433
+\end_layout
+
+\begin_layout Standard
+16C: 554, 557, 558
+\end_layout
+
+\begin_layout Standard
+16C: 62, 620, 620a, 621, 621a, 622, 622a, 63a, 65b
+\end_layout
+
+\begin_layout Standard
+16C: 71, 710, 711, 715, 717, 72, 73b, 745, 74b, 765, 770, 771, 773, 774,
+ 781, 782
+\end_layout
+
+\begin_layout Standard
+16C: 925, 926
+\end_layout
+
+\begin_layout Standard
+16CR: 620a, 73, 74, 76, 77
+\end_layout
+
+\begin_layout Standard
+16F: 616, 627, 627a, 628, 628a, 630, 636, 639, 648, 648a, 676, 684, 685,
+ 687, 688, 689, 690
+\end_layout
+
+\begin_layout Standard
+16F: 716, 72, 73, 737, 74, 747, 76, 767, 77, 777, 785
+\end_layout
+
+\begin_layout Standard
+16F: 818, 819, 84, 84a, 87, 870, 871, 872, 873, 873a, 874, 874a, 876, 876a,
+ 877, 877a, 88, 886, 887
+\end_layout
+
+\begin_layout Standard
+16F: 913, 914, 916, 917, 946
+\end_layout
+
+\begin_layout Standard
+26HV: 626, 785
+\end_layout
+
+\begin_layout Standard
+\noindent
+An up-to-date list of currently supported devices can be obtained via 
+\family typewriter
+sdcc -mpic14 -phelp foo.c
+\family default
+ (foo.c must exist...).
 \end_layout
 
 \begin_layout Subsection
-C code and 14bit PIC code page
+PIC Code Pages
 \begin_inset LatexCommand \index{code page (pic14)}
 
 \end_inset
 
- and RAM banks
-\begin_inset LatexCommand \index{RAM bank (pic14)}
+ and Memory Banks
+\begin_inset LatexCommand \index{Memory bank (pic14)}
 
 \end_inset
 
@@ -22528,56 +24171,116 @@ C code and 14bit PIC code page
 \begin_layout Standard
 The linker organizes allocation for the code page and RAM banks.
  It does not have intimate knowledge of the code flow.
- It will put all the code section of a single asm file into a single code
+ It will put all the code section of a single .asm file into a single code
  page.
  In order to make use of multiple code pages, separate asm files must be
  used.
- The compiler treats all functions of a single C file as being in the same
- code page unless it is non static.
+ The compiler assigns all 
+\emph on
+static
+\emph default
+ functions of a single .c file into the same code page.
 \newline
 
 \newline
-To get the best follow these guide lines:
+To get the best results,
+ follow these guidelines:
 \end_layout
 
 \begin_layout Enumerate
 Make local functions static, as non static functions require code page selection
  overhead.
+\newline
+Due to the way sdcc handles functions, place called functions prior
+ to calling functions in the file wherever possible: Otherwise sdcc will
+ insert unneccessary pagesel directives around the call, believing that
+ the called function is externally defined.
 \end_layout
 
 \begin_layout Enumerate
 For devices that have multiple code pages it is more efficient to use the
- same number of files as pages, i.e.
- for the 16F877 use 4 separate files and i.e.
- for the 16F874 use 2 separate files.
+ same number of files as pages: Use up to 4 separate .c files for the 16F877,
+ but only 2 files for the 16F874.
  This way the linker can put the code for each file into different code
- pages and there's less page selection overhead.
+ pages and there will be less page selection overhead.
 \end_layout
 
 \begin_layout Enumerate
-And as for any 8 bit micro (especially for PIC 14 as they have a very simple
- instruction set), use 'unsigned char' whereever possible instead of 'int'.
+And as for any 8 bit micro (especially for PIC14 as they have a very simple
+ instruction set), use `unsigned char' wherever possible instead of `int'.
 \end_layout
 
 \begin_layout Subsection
-Creating a device include file 
+Adding New Devices to the Port 
 \end_layout
 
 \begin_layout Standard
-For generating a device include file
-\begin_inset LatexCommand \index{PIC14!Header files}
+Adding support for a new 14
+\begin_inset ERT
+status open
+
+\begin_layout Standard
+
+
+\backslash
+,
+\end_layout
 
 \end_inset
 
- use the support perl script inc2h.pl kept in directory support/script.
+bit PIC MCU requires the following steps:
+\end_layout
+
+\begin_layout Enumerate
+Create a new device description.
+\newline
+Each device is described in two files: pic16f*.h
+ and pic16f*.c.
+ These files primarily define SFRs, structs to access their bits, and symbolic
+ configuration options.
+ Both files can be generated from gputils' .inc files using the perl script
+\family typewriter
+support/scripts/inc2h.pl
+\family default
+.
+ This file also contains further instructions on how to proceed.
+\end_layout
+
+\begin_layout Enumerate
+Copy the .h file into SDCC's include path and either add the .c file to your
+ project or copy it to 
+\family typewriter
+device/lib/pic/libdev
+\family default
+.
+ Afterwards, rebuild and install the libraries.
+\end_layout
+
+\begin_layout Enumerate
+Edit pic14devices.txt in SDCC's include path (
+\family typewriter
+device/include/pic/
+\family default
+ in the source tree or 
+\family typewriter
+/usr/local/share/sdcc/include/pic
+\family default
+ after installation).
+\newline
+You need to add a device specification here to make
+ the memory layout (code banks, RAM, aliased memory regions, ...) known to
+ the compiler.
+ Probably you can copy and modify an existing entry.
+ The file format is documented at the top of the file.
 \end_layout
 
 \begin_layout Subsection
-Interrupt code
+Interrupt Code
 \end_layout
 
 \begin_layout Standard
-For the interrupt function, use the keyword '__interrupt'
+For the interrupt function, use the keyword `__interrupt'
 \begin_inset LatexCommand \index{PIC14!interrupt}
 
 \end_inset
@@ -22602,7 +24305,7 @@ T0IF = 0; /* Clear timer interrupt */
 \end_layout
 
 \begin_layout Subsection
-Linking and assembling
+Linking and Assembling
 \end_layout
 
 \begin_layout Standard
@@ -22612,13 +24315,13 @@ For assembling you can use either GPUTILS'
 \end_inset
 
  gpasm.exe or MPLAB's mpasmwin.exe.
- GPUTILS is available from 
+ GPUTILS are available from 
 \begin_inset LatexCommand \url{http://sourceforge.net/projects/gputils}
 
 \end_inset
 
 .
- For linking you can use either GPUTIL's gplink or MPLAB's mplink.exe.
+ For linking you can use either GPUTILS' gplink or MPLAB's mplink.exe.
  If you use MPLAB and an interrupt function then the linker script file
  vectors section will need to be enlarged to link with mplink.
 \newline
@@ -22644,17 +24347,7 @@ Makefile
 \InsetSpace ~
 \InsetSpace ~
 \InsetSpace ~
-sdcc -S -V -mpic14 -p16F877 $< 
-\newline
-\InsetSpace ~
-\InsetSpace ~
-\InsetSpace ~
-\InsetSpace ~
-\InsetSpace ~
-\InsetSpace ~
-\InsetSpace ~
-\InsetSpace ~
-gpasm -c $*.asm
+sdcc -V -mpic14 -p16f877 -c $< 
 \newline
 
 \newline
@@ -22668,8 +24361,8 @@ $(PRJ).hex: $(OBJS)
 \InsetSpace ~
 \InsetSpace ~
 \InsetSpace ~
-gplink
- -m -s $(PRJ).lkr -o $(PRJ).hex $(OBJS) libsdcc.lib
+gplink -m -s $(PRJ).lkr
+ -o $(PRJ).hex $(OBJS) libsdcc.lib
 \end_layout
 
 \begin_layout Standard
@@ -22693,7 +24386,7 @@ Makefile
 \InsetSpace ~
 \InsetSpace ~
 \InsetSpace ~
-sdcc -S -V -mpic14 -p16F877 $< 
+sdcc -S -V -mpic14 -p16f877 $< 
 \newline
 \InsetSpace ~
 \InsetSpace ~
@@ -22730,7 +24423,7 @@ Please note that indentations within a
 \end_layout
 
 \begin_layout Subsection
-Command-line options
+Command-Line Options
 \end_layout
 
 \begin_layout Standard
@@ -22751,8 +24444,7 @@ status collapsed
 -help):
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -22766,7 +24458,7 @@ status collapsed
 
 \end_inset
 
--debug-extra
+-debug-xtra
 \begin_inset LatexCommand \index{PIC14!Options!-\/-debug-extra}
 
 \end_inset
@@ -22774,8 +24466,7 @@ status collapsed
  emit debug info in assembly output
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -22797,8 +24488,7 @@ status collapsed
  disable (slightly faulty) optimization on pCode
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -22821,8 +24511,7 @@ status collapsed
  large shared databank to reduce BANKSEL overhead)
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -22845,19 +24534,37 @@ status collapsed
 \end_layout
 
 \begin_layout Subsection
-The library
+Environment Variables
 \end_layout
 
-\begin_layout Subsubsection
-error: missing definition for symbol 
-\begin_inset Quotes sld
-\end_inset
+\begin_layout Standard
+The PIC14 port recognizes the following environment variables:
+\end_layout
 
-__gptrget1
-\begin_inset Quotes srd
-\end_inset
+\begin_layout Description
+SDCC_PIC14_SPLIT_LOCALS If set and not empty, sdcc will allocate each temporary
+ register (the ones called r0xNNNN) in a section of its own.
+ By default (if this variable is unset), sdcc tries to cluster registers
+ in sections in order to reduce the BANKSEL overhead when accessing them.
+\end_layout
 
+\begin_layout Subsection
+The Library
+\end_layout
 
+\begin_layout Standard
+The PIC14 library currently only contains support routines required by the
+ compiler to implement multiplication, division, and floating point support.
+ No libc-like replacement is available at the moment, though many of the
+ common sdcc library sources (in 
+\family typewriter
+device/lib
+\family default
+) should also compile with the PIC14 port.
+\end_layout
+
+\begin_layout Subsubsection
+error: missing definition for symbol ``__gptrget1''
 \end_layout
 
 \begin_layout Standard
@@ -22880,20 +24587,25 @@ libsdcc.lib
 \end_layout
 
 \begin_layout Subsubsection
-Processor mismatch in file 
-\begin_inset Quotes sld
-\end_inset
-
-XXX
-\begin_inset Quotes srd
-\end_inset
-
-.
+Processor mismatch in file ``XXX''.
 \end_layout
 
 \begin_layout Standard
 This warning can usually be ignored due to the very good compatibility amongst
- 14 bit PIC
+ 14
+\begin_inset ERT
+status open
+
+\begin_layout Standard
+
+
+\backslash
+,
+\end_layout
+
+\end_inset
+
+bit PIC
 \begin_inset LatexCommand \index{PIC14}
 
 \end_inset
@@ -22913,46 +24625,37 @@ device/lib/pic/Makefile
 \family default
  to reflect your device.
  This might even improve performance for smaller devices as unneccesary
- BANKSELs migth be removed.
+ BANKSELs might be removed.
 \end_layout
 
 \begin_layout Subsection
-Known bugs
+Known Bugs
 \end_layout
 
 \begin_layout Subsubsection
-initialized data
+Function arguments
 \end_layout
 
 \begin_layout Standard
-Currently, data can only be initialized if it resides in the source file
- together with 
-\emph on
-main()
-\emph default
-.
- Data in other source files will silently 
-\series bold
-not
-\series default
- be initialized.
-\family typewriter
-\size footnotesize
+Functions with variable argument lists (like printf) are not yet supported.
+ Similarly, taking the address of the first argument passed into a function
+ does not work: It is currently passed in WREG and has no address...
+\end_layout
 
-\begin_inset Marginal
-status collapsed
+\begin_layout Subsubsection
+Regression tests fail
+\end_layout
 
 \begin_layout Standard
-
-\series bold
-\InsetSpace ~
-!
+Though the small subset of regression tests in src/regression passes, SDCC
+ regression test suite does not, indicating that there are still major bugs
+ in the port.
+ However, many smaller projects have successfully used SDCC in the past...
 \end_layout
 
-\end_inset
-
+\begin_layout Standard
 
-\family default
+\size footnotesize
 
 \newpage
 
@@ -22968,276 +24671,180 @@ The PIC16
 \end_layout
 
 \begin_layout Standard
-The PIC16
-\begin_inset LatexCommand \index{PIC16}
+The PIC16 port adds support for Microchip
+\begin_inset LatexCommand \index{Microchip}
 
 \end_inset
 
- port is the portion of SDCC that is responsible to produce code for the
- Microchip
-\begin_inset LatexCommand \index{Microchip}
 
+\begin_inset Formula $^{\text{TM}}$
 \end_inset
 
-(TM) microcontrollers with 16 bit core.
- Currently this family of microcontrollers contains the PIC18Fxxx and PIC18Fxxxx.
- Currently supported devices are:
-\end_layout
+ PIC
+\begin_inset LatexCommand \index{PIC}
 
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="4" columns="6">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
+\end_inset
 
-\begin_layout Standard
-18F242
-\end_layout
 
+\begin_inset Formula $^{\text{TM}}$
 \end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
 
-\begin_layout Standard
-18F248
+ MCUs with 16 bit wide instructions.
+ Currently this family of microcontrollers contains the PIC18Fxxx and PIC18Fxxxx
+; devices supported by the port include:
 \end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
 \begin_layout Standard
-18F252
+18F: 242, 248, 252, 258, 442, 448, 452, 458
 \end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
 \begin_layout Standard
-18F258
+18F: 1220, 1320
 \end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
 \begin_layout Standard
-18F442
+18F: 2220, 2221, 2320, 2321, 2331, 2410, 2420, 2423, 2431, 2450, 2455, 2480,
+ 24j10
 \end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
 \begin_layout Standard
-18F448
+18F: (2510,) 2515, 2520, 2523, 2525, 2550, 2580, 2585, 25j10, 2610, 2620,
+ 2680, 2682, 2685
 \end_layout
 
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
 \begin_layout Standard
-18F452
+18F: 4220, 4221, 4320, 4321, 4331, 4410, 4420, 4423, 4431, 4450, 4455, 4480,
+ 44j10
 \end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
 \begin_layout Standard
-18F458
+18F: 4510, 4515, 4520, 4523, 4525, 4550, 4580, 4585, 45j10, 4610, 4620,
+ 4680, 4682, 4685
 \end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
 \begin_layout Standard
-18F1220
+18F: 6520, 6585, 6620, 6680, 66j60, 66j65, 6720, 67j60
 \end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
 \begin_layout Standard
-18F2220
+18F: 8520, 8585, 8620, 8680, 86j60, 86j65, 8720, 87j60
 \end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
 \begin_layout Standard
-18F2550
+18F: 96j60, 96j65, 97j60
 \end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
 \begin_layout Standard
-18F4331
+\noindent
+An up-to-date list of supported devices is also available via '
+\family typewriter
+sdcc -mpic16 -plist
+\family default
+'.
 \end_layout
 
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
+\begin_layout Subsection
+Global Options
+\end_layout
 
 \begin_layout Standard
-18F4455
+PIC16 port supports the standard command line arguments as supposed, with
+ the exception of certain cases that will be mentioned in the following
+ list:
 \end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
+\begin_layout Description
+-
+\begin_inset ERT
+status collapsed
 
 \begin_layout Standard
-18F6520
-\end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
 
-\begin_layout Standard
-18F6620
+\backslash
+/
 \end_layout
 
 \end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
 
-\begin_layout Standard
-18F6680
-\end_layout
+-callee-saves
+\begin_inset LatexCommand \index{PIC16!Options!-\/-callee-saves}
 
 \end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
+
+ See -
+\begin_inset ERT
+status collapsed
 
 \begin_layout Standard
-18F6720
-\end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
 
-\begin_layout Standard
-18F8520
+\backslash
+/
 \end_layout
 
 \end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
 
-\begin_layout Standard
-18F8620
+-all-callee-saves
 \end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
+\begin_layout Description
+-
+\begin_inset ERT
+status collapsed
 
 \begin_layout Standard
-18F8680
-\end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
 
-\begin_layout Standard
-18F8720
+\backslash
+/
 \end_layout
 
 \end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
 
-\begin_layout Standard
+-fommit-frame-pointer
+\begin_inset LatexCommand \index{PIC16!Options!-\/-fommit-frame-pointer}
 
+\end_inset
+
+ Frame pointer will be omitted when the function uses no local variables.
 \end_layout
 
+\begin_layout Subsection
+Port Specific Options
+\begin_inset LatexCommand \index{Options PIC16}
+
 \end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
 
-\begin_layout Standard
 
 \end_layout
 
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
+\begin_layout Standard
+The port specific options appear after the global options in the sdcc -
+\begin_inset ERT
+status collapsed
 
 \begin_layout Standard
 
-\end_layout
 
-\end_inset
-</cell>
-</row>
-</lyxtabular>
+\backslash
+/
+\end_layout
 
 \end_inset
 
-
+-help output.
 \end_layout
 
-\begin_layout Subsection
-Global Options
+\begin_layout Subsubsection
+Code Generation Options
 \end_layout
 
 \begin_layout Standard
-PIC16 port supports the standard command line arguments as supposed, with
- the exception of certain cases that will be mentioned in the following
- list:
+These options influence the generated assembler code.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23251,12 +24858,36 @@ status collapsed
 
 \end_inset
 
--callee-saves
-\begin_inset LatexCommand \index{PIC16!Options!-\/-callee-saves}
+-pstack-model=[model] Used in conjuction with the command above.
+ Defines the stack model to be used, valid stack models are:
+\end_layout
 
-\end_inset
+\begin_deeper
+\begin_layout List
+\labelwidthstring 00.00.0000
 
- See -
+\emph on
+small
+\emph default
+ Selects small stack model.
+ 8 bit stack and frame pointers.
+ Supports 256 bytes stack size.
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+
+\emph on
+large
+\emph default
+ Selects large stack model.
+ 16 bit stack and frame pointers.
+ Supports 65536 bytes stack size.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+-
 \begin_inset ERT
 status collapsed
 
@@ -23269,11 +24900,10 @@ status collapsed
 
 \end_inset
 
--all-callee-saves
+-pno-banksel Do not generate BANKSEL assembler directives.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23287,38 +24917,15 @@ status collapsed
 
 \end_inset
 
--fommit-frame-pointer
-\begin_inset LatexCommand \index{PIC16!Options!-\/-fommit-frame-pointer}
-
-\end_inset
-
- Frame pointer will be omitted when the function uses no local variables.
-\end_layout
-
-\begin_layout Subsection
-Port Specific Options
-\begin_inset LatexCommand \index{Options PIC16}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-The port specific options appear after the global options in the sdcc --help
- output.
+-extended Enable extended instruction set/literal offset addressing mode.
+ Use with care!
 \end_layout
 
 \begin_layout Subsubsection
-General Options
-\end_layout
-
-\begin_layout Standard
-General options enable certain port features and optimizations.
+Optimization Options
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23332,36 +24939,37 @@ status collapsed
 
 \end_inset
 
--pstack-model=[model] Used in conjuction with the command above.
- Defines the stack model to be used, valid stack models are : 
+-obanksel=n Set optimization level for inserting BANKSELs.
+\newline
+
 \end_layout
 
 \begin_deeper
 \begin_layout List
 \labelwidthstring 00.00.0000
+0 no optimization
+\end_layout
 
-\emph on
-small
-\emph default
- Selects small stack model.
- 8 bit stack and frame pointers.
- Supports 256 bytes stack size.
+\begin_layout List
+\labelwidthstring 00.00.0000
+1 checks previous used register and if it is the same then does not emit
+ BANKSEL, accounts only for labels.
 \end_layout
 
 \begin_layout List
 \labelwidthstring 00.00.0000
+2 tries to check the location of (even different) symbols and removes BANKSELs
+ if they are in the same bank.
+\newline
 
 \emph on
-large
-\emph default
- Selects large stack model.
- 16 bit stack and frame pointers.
- Supports 65536 bytes stack size.
+Important: There might be problems if the linker script has data sections
+ across bank borders!
 \end_layout
 
 \end_deeper
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23375,13 +24983,11 @@ status collapsed
 
 \end_inset
 
--preplace-udata-with=[kword] Replaces the default udata keyword for allocating
- unitialized data variables with [kword].
- Valid keywords are: "udata_acs", "udata_shr", "udata_ovr".
+-denable-peeps Force the usage of peepholes.
+ Use with care.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23395,12 +25001,10 @@ status collapsed
 
 \end_inset
 
--ivt-loc <nnnn> positions the Interrupt Vector Table at location <nnnn>.
- Useful for bootloaders.
+-no-optimize-goto Do not use (conditional) BRA instead of GOTO.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23414,11 +25018,10 @@ status collapsed
 
 \end_inset
 
--asm= sets the full path and name of an external assembler to call.
+-optimize-cmp Try to optimize some compares.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23432,11 +25035,31 @@ status collapsed
 
 \end_inset
 
--link= sets the full path and name of an external linker to call.
+-optimize-df Analyze the dataflow of the generated code and improve it.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Subsubsection
+Assembling Options
+\end_layout
+
+\begin_layout Description
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-asm= Sets the full path and name of an external assembler to call.
+\end_layout
+
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23460,29 +25083,10 @@ status collapsed
 \end_layout
 
 \begin_layout Subsubsection
-Optimization Options
-\end_layout
-
-\begin_layout List
-\labelwidthstring 00.00.0000
--
-\begin_inset ERT
-status collapsed
-
-\begin_layout Standard
-
-
-\backslash
-/
-\end_layout
-
-\end_inset
-
--optimize-goto Try to use (conditional) BRA instead of GOTO
+Linking Options
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23496,11 +25100,10 @@ status collapsed
 
 \end_inset
 
--optimize-cmp Try to optimize some compares.
+-link= Sets the full path and name of an external linker to call.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23514,11 +25117,12 @@ status collapsed
 
 \end_inset
 
--optimize-df Analyze the dataflow of the generated code and improve it.
+-preplace-udata-with=[kword] Replaces the default udata keyword for allocating
+ unitialized data variables with [kword].
+ Valid keywords are: "udata_acs", "udata_shr", "udata_ovr".
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23532,42 +25136,15 @@ status collapsed
 
 \end_inset
 
--obanksel=nn Set optimization level for inserting BANKSELs.
-\newline
-
-\end_layout
-
-\begin_deeper
-\begin_layout List
-\labelwidthstring 00.00.0000
-0 no optimization
-\end_layout
-
-\begin_layout List
-\labelwidthstring 00.00.0000
-1 checks previous used register and if it is the same then does not emit
- BANKSEL, accounts only for labels.
-\end_layout
-
-\begin_layout List
-\labelwidthstring 00.00.0000
-2 tries to check the location of (even different) symbols and removes BANKSELs
- if they are in the same bank.
-\newline
-
+-ivt-loc=n Place the interrupt vector table at address 
 \emph on
-Important: There might be problems if the linker script has data sections
- across bank borders!
-\end_layout
-
-\end_deeper
-\begin_layout Subsubsection
-Linking Options
+n
+\emph default
+.
+ Useful for bootloaders.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23581,11 +25158,10 @@ status collapsed
 
 \end_inset
 
--nodefaultlibs do not link default libraries when linking
+-nodefaultlibs Do not link default libraries when linking.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23599,11 +25175,10 @@ status collapsed
 
 \end_inset
 
--no-crt Don't link the default run-time modules
+-use-crt= Use a custom run-time module instead of the defaults.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23617,7 +25192,7 @@ status collapsed
 
 \end_inset
 
--use-crt= Use a custom run-time module instead of the defaults.
+-no-crt Don't link the default run-time modules
 \end_layout
 
 \begin_layout Subsubsection
@@ -23628,8 +25203,7 @@ Debugging Options
 Debugging options enable extra debugging information in the output files.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23664,8 +25238,7 @@ status collapsed
 , but dumps more information.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23681,11 +25254,10 @@ status collapsed
 
 -debug-ralloc Force register allocator to dump <source>.d file with debugging
  information.
- <source> is the name of the file compiled.
+ <source> is the name of the file being compiled.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23702,8 +25274,7 @@ status collapsed
 -pcode-verbose Enable pcode debugging information in translation.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23717,12 +25288,10 @@ status collapsed
 
 \end_inset
 
--denable-peeps Force the usage of peepholes.
- Use with care.
+-calltree Dump call tree in .calltree file.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 -
 \begin_inset ERT
 status collapsed
@@ -23736,29 +25305,11 @@ status collapsed
 
 \end_inset
 
--gstack Trace push/pops for stack pointer overflow
-\end_layout
-
-\begin_layout List
-\labelwidthstring 00.00.0000
--
-\begin_inset ERT
-status collapsed
-
-\begin_layout Standard
-
-
-\backslash
-/
-\end_layout
-
-\end_inset
-
--call-tree dump call tree in .calltree file
+-gstack Trace push/pops for stack pointer overflow.
 \end_layout
 
 \begin_layout Subsection
-Enviromental Variables
+Enviroment Variables
 \end_layout
 
 \begin_layout Standard
@@ -23772,26 +25323,24 @@ abled at will.
 Currently there is only two such variables available:
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
-OPTIMIZE_BITFIELD_POINTER_GET when this variable exists reading of structure
+\begin_layout Description
+OPTIMIZE_BITFIELD_POINTER_GET When this variable exists, reading of structure
  bitfields is optimized by directly loading FSR0 with the address of the
  bitfield structure.
  Normally SDCC will cast the bitfield structure to a bitfield pointer and
  then load FSR0.
- This step saves data ram and code space for functions that perform heavy
use of bitfields.
- (ie.
80 bytes of code space are saved when compiling malloc.c with this option).
+ This step saves data ram and code space for functions that make heavy use
+ of bitfields.
+ (i.e., 80 bytes of code space are saved when compiling malloc.c with this
+ option).
  
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
-NO_REG_OPT do not perform pCode registers optimization.
+\begin_layout Description
+NO_REG_OPT Do not perform pCode registers optimization.
  This should be used for debugging purposes.
- In some where bugs in the pcode optimizer are found, users can benefit
from temporarily disabling the optimizer until the bug is fixed.
+ If bugs in the pcode optimizer are found, users can benefit from temporarily
+ disabling the optimizer until the bug is fixed.
 \end_layout
 
 \begin_layout Subsection
@@ -23974,6 +25523,7 @@ nnn = SMALL or LARGE respectively according to the stack model used
 \end_layout
 
 \begin_layout Standard
+\noindent
 In addition the following macros are defined when calling assembler:
 \end_layout
 
@@ -24231,7 +25781,7 @@ Pragmas
 \end_layout
 
 \begin_layout Standard
-PIC16
+The PIC16
 \begin_inset LatexCommand \index{PIC16}
 
 \end_inset
@@ -24239,21 +25789,15 @@ PIC16
  port currently supports the following pragmas:
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 stack
 \begin_inset LatexCommand \index{PIC16!Pragmas!\#pragma stack}
 
 \end_inset
 
- pragma stack
-\begin_inset LatexCommand \index{PIC16!stack}
-
-\end_inset
-
- forces the code generator to initialize the stack & frame pointers at a
- specific address.
- This is an adhoc solution for cases where no STACK directive is available
+ This forces the code generator to initialize the stack & frame pointers
+ at a specific address.
+ This is an ad hoc solution for cases where no STACK directive is available
  in the linker script or gplink is not instructed to create a stack section.
 \newline
 The
@@ -24276,10 +25820,14 @@ The old format (ie.
 
 \newline
 The format is as follows:
+\newline
+
 \end_layout
 
 \begin_layout LyX-Code
 #pragma stack bottom_address [stack_size]
+\newline
+
 \end_layout
 
 \begin_layout Standard
@@ -24314,14 +25862,13 @@ If the stack_size field is omitted then a stack is created with the default
  with deep function nesting or excessive stack usage.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 code
 \begin_inset LatexCommand \index{PIC16!Pragmas!\#pragma code}
 
 \end_inset
 
- place a function symbol at static FLASH address
+ Force a function to a static FLASH address.
 \end_layout
 
 \begin_layout LyX-Code
@@ -24344,8 +25891,7 @@ Example:
 
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 library instructs the linker to use a library module.
 \newline
 Usage:
@@ -24586,6 +26132,7 @@ libdebug
 \end_layout
 
 \begin_layout Standard
+\noindent
 This feature allows for linking with specific libraries withoug having to
  explicit name them in the command line.
  Note that the 
@@ -24595,10 +26142,9 @@ ignore
  keyword will reject all modules specified by the library pragma.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
-udata pragma udata instructs the compiler to emit code so that linker will
- place a variable at a specific memory bank
+\begin_layout Description
+udata The pragma udata instructs the compiler to emit code so that linker
+ will place a variable at a specific memory bank.
 \end_layout
 
 \begin_layout LyX-Code
@@ -24784,6 +26330,11 @@ The specific microcontroller is selected within the pic18fregs.h automatically,
 
 \begin_layout Subsection
 Libraries
+\begin_inset LatexCommand \label{sub:pic16Libraries}
+
+\end_inset
+
+
 \end_layout
 
 \begin_layout Standard
@@ -24809,6 +26360,7 @@ xxxx
 \end_layout
 
 \begin_layout Standard
+\noindent
 Libraries are created with gplib which is part of the gputils package 
 \begin_inset LatexCommand \url{http://sourceforge.net/projects/gputils}
 
@@ -24823,13 +26375,11 @@ Building the libraries
 
 \begin_layout Standard
 Before using SDCC/pic16 there are some libraries that need to be compiled.
- This process is not done automatically by SDCC since not all users use
- SDCC for pic16 projects.
- So each user should compile the libraries separately.
-\end_layout
-
-\begin_layout Standard
-The steps to compile the pic16 libraries under Linux are:
+ This process is done automatically if gputils are found at SDCC's compile
+ time.
+ Should you require to rebuild the pic16 libraries manually, these are the
+ steps required to do so under Linux or Mac OS X (cygwin might work as well,
+ but is untested):
 \end_layout
 
 \begin_layout LyX-Code
@@ -24837,11 +26387,7 @@ cd device/lib/pic16
 \end_layout
 
 \begin_layout LyX-Code
-./configure
-\end_layout
-
-\begin_layout LyX-Code
-make
+./configure.gnu
 \end_layout
 
 \begin_layout LyX-Code
@@ -24856,6 +26402,10 @@ make model-pic16
 su -c 'make install'     # install the libraries, you need the root password
 \end_layout
 
+\begin_layout LyX-Code
+cd ../..
+\end_layout
+
 \begin_layout Standard
 If you need to install the headers too, do:
 \end_layout
@@ -24868,24 +26418,192 @@ cd device/include
 su -c 'make install'     # install the headers, you need the root password
 \end_layout
 
+\begin_layout Subsection
+Adding New Devices to the Port
+\end_layout
+
 \begin_layout Standard
-There exist a special target to build the I/O libraries.
- This target is not automatically build because it will build the I/O library
- for 
-\emph on
-every
-\emph default
- supported device.
- This way building will take quite a lot of time.
- Users are advised to edit the 
-\series bold
-device/lib/pic16/pics.build
-\series default
- file and then execute:
+Adding support for a new 16
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+,
 \end_layout
 
-\begin_layout LyX-Code
-make lib-io
+\end_inset
+
+bit PIC MCU requires the following steps:
+\end_layout
+
+\begin_layout Enumerate
+Create picDEVICE.c and picDEVICE.h from pDEVICE.inc using
+\newline
+
+\family typewriter
+perl /path/to/sdcc/support/scripts/inc2h-pic16.pl /path/to/gputils/header/pDEVICE.
+inc
+\end_layout
+
+\begin_layout Enumerate
+
+\family typewriter
+mv picDEVICE.h /path/to/sdcc/device/include/pic16
+\end_layout
+
+\begin_layout Enumerate
+
+\family typewriter
+mv picDEVICE.c /path/to/sdcc/device/lib/pic16/libdev
+\end_layout
+
+\begin_layout Enumerate
+Add DEVICE to 
+\family typewriter
+/path/to/sdcc/device/lib/pic16/pics.all
+\family default
+
+\newline
+Note: No 18f prefix here!
+\end_layout
+
+\begin_layout Enumerate
+Edit 
+\family typewriter
+/path/to/sdcc/device/include/pic16/adc.h
+\newline
+
+\family default
+Add the new devices to the correct ADC style class (depending on the number
+ of ADC channels).
+\newline
+Do not touch 
+\family typewriter
+adc.h
+\family default
+ if the device does not offer any ADC at all.
+\end_layout
+
+\begin_layout Enumerate
+Edit 
+\family typewriter
+/path/to/sdcc/device/include/pic16/pic18fregs.h
+\family default
+
+\newline
+The file format is self-explanatory, just add
+\newline
+
+\family typewriter
+#elif defined(picDEVICE)
+\newline
+#
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+\backslash
+\end_layout
+
+\end_inset
+
+include <picDEVICE.h>
+\family default
+
+\newline
+at the right place (keep the file sorted, please).
+\end_layout
+
+\begin_layout Enumerate
+Edit 
+\family typewriter
+/path/to/sdcc/device/include/pic16devices.txt
+\newline
+
+\family default
+Copy and modify an existing entry or create a new one and insert it at the
+ correct place (keep the file sorted, please).
+\end_layout
+
+\begin_layout Enumerate
+Add the device to 
+\family typewriter
+/path/to/sdcc/device/lib/pic16/libdev/Makefile.am
+\family default
+
+\newline
+Copy an existing entry and adjust the device name.
+\end_layout
+
+\begin_layout Enumerate
+Add the device to 
+\family typewriter
+/path/to/sdcc/device/lib/pic16/libio/Makefile.am
+\family default
+
+\newline
+Copy the record from the 18f2220 and adjust the device name.
+\newline
+If the new device
+ does not offer ADC, I
+\begin_inset Formula $^{\text{2}}$
+\end_inset
+
+C, and/or (E)USART functionality as assumed by the library, remove the lines
+ with references to 
+\family typewriter
+adc/*.c
+\family default
+, 
+\family typewriter
+usart/*.c
+\family default
+, or 
+\family typewriter
+usart/*.c
+\family default
+, respectively.
+\end_layout
+
+\begin_layout Enumerate
+Update 
+\family typewriter
+libdev/Makefile.in
+\family default
+ and 
+\family typewriter
+libio/Makefile.in
+\family default
+ using
+\newline
+
+\family typewriter
+./bootstrap.sh
+\family default
+
+\newline
+in 
+\family typewriter
+/path/to/sdcc/device/lib/pic16
+\family default
+.
+\end_layout
+
+\begin_layout Enumerate
+Recompile the pic16 libraries as described in 
+\begin_inset LatexCommand \ref{sub:pic16Libraries}
+
+\end_inset
+
+.
 \end_layout
 
 \begin_layout Subsection
@@ -25052,13 +26770,11 @@ The stack
  FSR2.
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 FSR1 is assigned as stack pointer
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 FSR2 is assigned as frame pointer
 \end_layout
 
@@ -25202,6 +26918,7 @@ Frame pointer FSR2
 \end_layout
 
 \begin_layout Standard
+\noindent
 
 \noun on
 Large 
@@ -25242,8 +26959,7 @@ In addition to the standard SDCC function keywords, PIC16
  port makes available two more:
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 wparam
 \begin_inset LatexCommand \index{PIC16!wparam}
 
@@ -25281,8 +26997,7 @@ void func_wparam(int a) wparam
 }
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 shadowregs
 \begin_inset LatexCommand \index{PIC16!shadowregs}
 
@@ -25692,7 +27407,7 @@ not
  Address of the specific interrupt.
  This is not a problem for the LOW priority interrupts, but it is a problem
  for the RESET and the HIGH priority interrupts because code may be written
- at the next interrupt´s vector address and cause undeterminate program
+ at the next interrupt's vector address and cause undeterminate program
  behaviour if that interrupt is raised.
 \begin_inset Foot
 status open
@@ -25710,7 +27425,7 @@ disabled
 \end_layout
 
 \begin_layout Enumerate
-when the ISR is small enough not to reach the next interrupt´s vector address.
+when the ISR is small enough not to reach the next interrupt's vector address.
 \end_layout
 
 \end_inset
@@ -25723,7 +27438,7 @@ when the ISR is small enough not to reach the next interrupt
 \emph on
 n
 \emph default
is possible to be omitted.
may be omitted.
  This way a function is generated similar to an ISR, but it is not assigned
  to any interrupt.
 \end_layout
@@ -26053,6 +27768,7 @@ unimplemented pointer type
 \end_layout
 
 \begin_layout Standard
+\noindent
 Generic pointer are read and written with a set of library functions which
  read/write 1, 2, 3, 4 bytes.
 \end_layout
@@ -26101,6 +27817,7 @@ pointer.
 \end_layout
 
 \begin_layout Standard
+\noindent
 \align center
 \begin_inset Tabular
 <lyxtabular version="3" rows="2" columns="7">
@@ -26254,10 +27971,12 @@ upper byte high nubble is 0x2n, the rest are zeroes
 \end_layout
 
 \begin_layout Standard
+\noindent
 Currently implemented there are 3 types of streams defined:
 \end_layout
 
 \begin_layout Standard
+\noindent
 \align center
 \begin_inset Tabular
 <lyxtabular version="3" rows="4" columns="4">
@@ -26432,17 +28151,18 @@ Writes/Reads characters via used defined functions
 \end_layout
 
 \begin_layout Standard
+\noindent
 The stream identifiers are declared as macros in the stdio.h header.
 \end_layout
 
 \begin_layout Standard
+\noindent
 In the libc library there exist the functions that are used to write to
  each of the above streams.
  These are
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 _
 \begin_inset ERT
 status collapsed
@@ -26459,8 +28179,7 @@ status collapsed
 _stream_usart_putchar writes a character at the USART stream
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 _
 \begin_inset ERT
 status collapsed
@@ -26477,8 +28196,7 @@ status collapsed
 _stream_mssp_putchar writes a character at the MSSP stream
 \end_layout
 
-\begin_layout List
-\labelwidthstring 00.00.0000
+\begin_layout Description
 putchar dummy function.
  This writes a character to a user specified manner.
 \end_layout
@@ -26539,9 +28257,17 @@ void main(void)
 \end_layout
 
 \begin_layout LyX-Code
-    printf (¨This is a printf test
+    printf (
+\begin_inset Quotes sld
+\end_inset
+
+This is a printf test
 \backslash
-n¨);
+n
+\begin_inset Quotes srd
+\end_inset
+
+);
 \end_layout
 
 \begin_layout LyX-Code
@@ -27052,6 +28778,7 @@ TMR3 overflow interrupt
 \end_layout
 
 \begin_layout Standard
+\noindent
 The prototypes for these names are defined in the header file 
 \emph on
 signal.h
@@ -27060,6 +28787,7 @@ signal.h
 \end_layout
 
 \begin_layout Standard
+\noindent
 In order to simplify signal handling, a number of macros is provided:
 \end_layout
 
@@ -27266,11 +28994,38 @@ status collapsed
 \end_layout
 
 \begin_layout Subsection
-Known bugs
+Known Bugs
+\end_layout
+
+\begin_layout Subsubsection
+Extended Instruction Set
+\end_layout
+
+\begin_layout Standard
+The PIC16 port emits code which is incompatible with the extended instruction
+ set available with many newer devices.
+ Make sure to always explicitly disable it, usually using
+\end_layout
+
+\begin_layout Standard
+
+\family typewriter
+static __code char __at(__CONFIG4L) conf4l = /* more flags & */ _XINST_OFF_4L;
 \end_layout
 
 \begin_layout Standard
-The PIC16 Port currently does not pass SDCC's regression test
+\noindent
+Some devices (namely 18f2455, 18f2550, 18f4455, and 18f4550) use _ENHCPU_OFF_4L
+ instead of _XINST_OFF_4L.
+\end_layout
+
+\begin_layout Subsubsection
+Regression Tests
+\end_layout
+
+\begin_layout Standard
+The PIC16 port currently passes most but not all of the tests in SDCC's
+ regression test
 \begin_inset LatexCommand \index{Regression test (PIC16)}
 
 \end_inset
@@ -27280,10 +29035,8 @@ The PIC16 Port currently does not pass SDCC's regression test
 
 \end_inset
 
-) and thus the snapshot build regression tests for the PIC16 target are
- currently disabled for all hosts
-\emph on
-.
+), thus no automatic regression tests are currently performed for the PIC16
+ target.
 \end_layout
 
 \begin_layout Chapter
@@ -30305,11 +32058,11 @@ Related open source tools
 \begin_layout Standard
 \align left
 \begin_inset Tabular
-<lyxtabular version="3" rows="14" columns="3">
+<lyxtabular version="3" rows="16" columns="3">
 <features>
 <column alignment="left" valignment="top" leftline="true" width="0pt">
 <column alignment="block" valignment="top" leftline="true" width="30line%">
-<column alignment="left" valignment="top" leftline="true" rightline="true" width="0pt">
+<column alignment="left" valignment="top" leftline="true" rightline="true" width="40col%">
 <row topline="true" bottomline="true">
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
@@ -30816,6 +32569,111 @@ Debugger, serves nicely as GUI to SDCDB
 \end_inset
 
 
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+d52
+\begin_inset LatexCommand \index{d52}
+
+\end_inset
+
+
+\begin_inset LatexCommand \index{d52 (disassembler)}
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Disassembler, can count instruction cycles
+\begin_inset LatexCommand \index{instruction cycles (count)}
+
+\end_inset
+
+, use with options -pnd
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+\begin_inset LatexCommand \url{http://www.8052.com/users/disasm/}
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+cmake
+\begin_inset LatexCommand \index{cmake}
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Cross platform build system, generates Makefiles
+\begin_inset LatexCommand \index{Makefile}
+
+\end_inset
+
+ and project workspaces
+\begin_inset LatexCommand \index{project workspace}
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+\begin_inset LatexCommand \url{http://www.cmake.org}
+
+\end_inset
+
+ \InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+and a dedicated wiki entry: 
+\begin_inset LatexCommand \url{http://www.cmake.org/Wiki/CmakeSdcc}
+
+\end_inset
+
+
 \end_layout
 
 \end_inset
@@ -31842,7 +33700,24 @@ Subversion Source Code Repository
 The output of 
 \family sans
 \series bold
-sdcc --version
+sdcc -
+\family default
+
+\begin_inset ERT
+status open
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+
+\family sans
+-version
 \family default
 \series default
  or the filenames of the snapshot versions of SDCC include date and its
@@ -31899,18 +33774,18 @@ Historically there often were long delays between official releases and
 \end_inset
 
 .
A release wiki
The SDCC Wiki
 \begin_inset LatexCommand \index{wiki}
 
 \end_inset
 
 
-\begin_inset LatexCommand \index{Release wiki}
+\begin_inset LatexCommand \index{SDCC Wiki}
 
 \end_inset
 
  at 
-\begin_inset LatexCommand \url{http://sdcc.sf.net/release_wiki/}
+\begin_inset LatexCommand \url{http://sdcc.wiki.sourceforge.net/}
 
 \end_inset
 
@@ -31998,9 +33873,9 @@ regression tests
 \end_inset
 
  check that SDCC itself compiles flawlessly on several host platforms (i386,
- Opteron, 64 bit Alpha, ppc64, MacOS X on PPC, Solaris on Sparc) and checks
- the quality of the code generated by SDCC by running the code for several
- target platforms through simulators.
+ Opteron, 64 bit Alpha, ppc64, Mac OS X on ppc and i386, Solaris on Sparc)
+ and checks the quality of the code generated by SDCC by running the code
for several target platforms through simulators.
  The regression test suite comprises more than 100 files which expand to
  more than 500 test cases which include more than 4500 tests.
  The results of these tests are published daily on SDCC's snapshot page
@@ -32070,7 +33945,7 @@ make test-mcs51
 \end_layout
 
 \begin_layout Standard
-The 14bit pic port uses a different set of regression tests 
+The PIC14 port uses a different set of regression tests 
 \begin_inset LatexCommand \index{Regression test (PIC14)}
 
 \end_inset
@@ -32177,8 +34052,8 @@ not tie students to a specific host platform and instead allow them to use
 \emph on
 their
 \emph default
- choice (among them Alpha, i386, i386_64, MacOs, Mips, Sparc, Windows and
- eventually 
+ choice (among them Alpha, i386, i386_64, Mac OS X, Mips, Sparc, Windows
and eventually 
 \begin_inset LatexCommand \url[OLPC]{http://www.laptop.org}
 
 \end_inset
@@ -35070,6 +36945,34 @@ replace { lcall %1 } by { acall %1 }
 replace { ljmp %1 } by { ajmp %1 }
 \end_layout
 
+\begin_layout Standard
+(NOTE: from version 2.7.3 on, you can use option -
+\emph on
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+
+\emph default
+-acall-ajmp
+\begin_inset LatexCommand \index{-\/-acall-ajmp}
+
+\end_inset
+
+, which also takes care of aligning the interrupt vectors properly.)
+\newline
+
+\end_layout
+
 \begin_layout Standard
 The 
 \emph on
@@ -35543,7 +37446,7 @@ Old K&R style
 \family typewriter
 foo(i,j) /* this old style of function declarations */ 
 \newline
-int i,j; /* are valid
+int i,j; /* is valid
  in ANSI but not valid in SDCC */ 
 \newline
 { 
@@ -35560,7 +37463,24 @@ int i,j; /* are valid
 
 \end_deeper
 \begin_layout Itemize
-Most enhancements in C99 are not supported, f.e.:
+Most enhancements in C99 are not supported, e.g.:
+\end_layout
+
+\begin_deeper
+\begin_layout Verse
+
+\family typewriter
+for (
+\series bold
+int
+\series default
+ i=0; i<10; i++) /* is invalid in SDCC although allowed in C99 */
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+But some have been added recently in SDCC 2.7.0.
+ They must be considered alpha quality however.
 \end_layout
 
 \begin_deeper
@@ -35575,21 +37495,19 @@ inline
 
 
 \series default
- int increment (int a) { return a+1; } /* is invalid in SDCC although allowed
- in C99.
- An empty define 
-\emph on
-#define inline
-\emph default
- can be used as a work around */
+ int increment (int a) { return a+1; } /* inlines the increment without
+ function call overhead */
 \newline
-
-\newline
-for (
+int * 
 \series bold
-int
+restrict
+\begin_inset LatexCommand \index{inline (not supported)}
+
+\end_inset
+
+
 \series default
i=0; i<10; i++) /* is invalid in SDCC although allowed in C99 */
p; /* accepted but ignored */
 \end_layout
 
 \end_deeper
@@ -35615,7 +37533,11 @@ status collapsed
 
 \end_inset
 
- or -
+\series default
+or
+\series bold
+ -
 \begin_inset ERT
 status collapsed
 
@@ -35651,6 +37573,124 @@ t', 'near', 'nonbanked', 'pdata', 'reentrant', 'sbit', 'sfr', 'shadowregs',
  '__data' instead of 'data'.
 \end_layout
 
+\begin_layout Itemize
+Integer promotion of variable arguments is not performed if the argument
+ is explicitly taypecasted unless the
+\series bold
+ -
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-c89
+\begin_inset LatexCommand \index{-\/-std-c89}
+
+\end_inset
+
+\series default
+or
+\series bold
+ -
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-c99
+\begin_inset LatexCommand \index{-\/-std-c99}
+
+\end_inset
+
+
+\series default
+ command line options are used.
+\end_layout
+
+\begin_deeper
+\begin_layout Verse
+
+\family typewriter
+void vararg_func (char *str, ...) { str; }
+\newline
+
+\newline
+void main (void)
+\newline
+{
+\newline
+\InsetSpace ~
+\InsetSpace ~
+char c = 10;
+\newline
+
+\newline
+\InsetSpace ~
+\InsetSpace ~
+/* argument
+ u is promoted to int before
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+* passing to function */
+\newline
+\InsetSpace ~
+\InsetSpace ~
+vararg_func ("%c", c);
+\newline
+
+\newline
+\InsetSpace ~
+\InsetSpace ~
+/*
+ argument u is not promoted to int,
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+* it is passed as char to function
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+* if
+ --std-cXX is not defined;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+* is promoted to int before passing
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+* to function
+ if --std-cXX is defined */
+\newline
+\InsetSpace ~
+\InsetSpace ~
+vararg_func ("%bc", (char)u);
+\newline
+}
+\end_layout
+
+\end_deeper
 \begin_layout Section
 Cyclomatic Complexity
 \begin_inset LatexCommand \index{Cyclomatic complexity}
@@ -35809,13 +37849,13 @@ As mentioned in the optimization section the peep-hole optimizer is rule
 \end_layout
 
 \begin_layout Standard
-More information is available in a wiki
+More information is available on SDCC Wiki
 \begin_inset LatexCommand \index{wiki}
 
 \end_inset
 
  (preliminary link 
-\begin_inset LatexCommand \url{http://sdcc.sourceforge.net/release_wiki/index.php?page=SDCC+internals+and+porting}
+\begin_inset LatexCommand \url{http://sdcc.wiki.sourceforge.net/SDCC+internals+and+porting}
 
 \end_inset
 
@@ -39302,7 +41342,7 @@ Acknowledgments
 \end_layout
 
 \begin_layout Standard
-\begin_inset LatexCommand \url{http://sdcc.sourceforge.net#Who}
+\begin_inset LatexCommand \url{http://sdcc.sourceforge.net/#Who}
 
 \end_inset
 
@@ -39322,38 +41362,23 @@ Thanks to all the other volunteer developers who have helped with coding,
 \newline
 
 \emph on
-Also thanks to Sourceforge 
+Thanks to Sourceforge 
 \begin_inset LatexCommand \url{http://www.sf.net}
 
 \end_inset
 
  which has hosted the project since 1999 and donates significant download
- bandwidth and probably more than 
-\begin_inset ERT
-status collapsed
-
-\begin_layout Standard
-
-$10^{13}$
-\end_layout
-
-\end_inset
+ bandwidth.
+\emph default
 
-CPU cycles per day.
 \newline
-\begin_inset Note Note
-status open
 
-\begin_layout Standard
-more than 10^13 is an estimate: on my Athlon 2800+ it takes about (0.5+6.5+20)
- minutes for (configure+make+regression test), and there is (i386, amd64,
- alpha, ppc64, (mingw32), sparc, macosx).
-\end_layout
-
-\end_inset
+\newline
 
+\emph on
+Also thanks to all SDCC Distributed Compile Farm members for donating CPU
+ cycles and bandwidth for snapshot builds.
+\newline
 
 \end_layout