Reshaped doc's
authorjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 13 Jul 2001 15:32:09 +0000 (15:32 +0000)
committerjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 13 Jul 2001 15:32:09 +0000 (15:32 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1066 4a8a32a2-be11-0410-ad9d-d568d2c75423

84 files changed:
doc/Makefile
doc/sdccman.html/WARNINGS [new file with mode: 0644]
doc/sdccman.html/contents_motif.gif [new file with mode: 0644]
doc/sdccman.html/footnode.html [new file with mode: 0644]
doc/sdccman.html/index.html [new file with mode: 0644]
doc/sdccman.html/index_motif.gif [new file with mode: 0644]
doc/sdccman.html/next_motif.gif [new file with mode: 0644]
doc/sdccman.html/next_motif_gr.gif [new file with mode: 0644]
doc/sdccman.html/node1.html [new file with mode: 0644]
doc/sdccman.html/node10.html [new file with mode: 0644]
doc/sdccman.html/node11.html [new file with mode: 0644]
doc/sdccman.html/node12.html [new file with mode: 0644]
doc/sdccman.html/node13.html [new file with mode: 0644]
doc/sdccman.html/node14.html [new file with mode: 0644]
doc/sdccman.html/node15.html [new file with mode: 0644]
doc/sdccman.html/node16.html [new file with mode: 0644]
doc/sdccman.html/node17.html [new file with mode: 0644]
doc/sdccman.html/node18.html [new file with mode: 0644]
doc/sdccman.html/node19.html [new file with mode: 0644]
doc/sdccman.html/node2.html [new file with mode: 0644]
doc/sdccman.html/node20.html [new file with mode: 0644]
doc/sdccman.html/node21.html [new file with mode: 0644]
doc/sdccman.html/node22.html [new file with mode: 0644]
doc/sdccman.html/node23.html [new file with mode: 0644]
doc/sdccman.html/node24.html [new file with mode: 0644]
doc/sdccman.html/node25.html [new file with mode: 0644]
doc/sdccman.html/node26.html [new file with mode: 0644]
doc/sdccman.html/node27.html [new file with mode: 0644]
doc/sdccman.html/node28.html [new file with mode: 0644]
doc/sdccman.html/node29.html [new file with mode: 0644]
doc/sdccman.html/node3.html [new file with mode: 0644]
doc/sdccman.html/node30.html [new file with mode: 0644]
doc/sdccman.html/node31.html [new file with mode: 0644]
doc/sdccman.html/node32.html [new file with mode: 0644]
doc/sdccman.html/node33.html [new file with mode: 0644]
doc/sdccman.html/node34.html [new file with mode: 0644]
doc/sdccman.html/node35.html [new file with mode: 0644]
doc/sdccman.html/node36.html [new file with mode: 0644]
doc/sdccman.html/node37.html [new file with mode: 0644]
doc/sdccman.html/node38.html [new file with mode: 0644]
doc/sdccman.html/node39.html [new file with mode: 0644]
doc/sdccman.html/node4.html [new file with mode: 0644]
doc/sdccman.html/node40.html [new file with mode: 0644]
doc/sdccman.html/node41.html [new file with mode: 0644]
doc/sdccman.html/node42.html [new file with mode: 0644]
doc/sdccman.html/node43.html [new file with mode: 0644]
doc/sdccman.html/node44.html [new file with mode: 0644]
doc/sdccman.html/node45.html [new file with mode: 0644]
doc/sdccman.html/node46.html [new file with mode: 0644]
doc/sdccman.html/node47.html [new file with mode: 0644]
doc/sdccman.html/node48.html [new file with mode: 0644]
doc/sdccman.html/node49.html [new file with mode: 0644]
doc/sdccman.html/node5.html [new file with mode: 0644]
doc/sdccman.html/node50.html [new file with mode: 0644]
doc/sdccman.html/node51.html [new file with mode: 0644]
doc/sdccman.html/node52.html [new file with mode: 0644]
doc/sdccman.html/node53.html [new file with mode: 0644]
doc/sdccman.html/node54.html [new file with mode: 0644]
doc/sdccman.html/node55.html [new file with mode: 0644]
doc/sdccman.html/node56.html [new file with mode: 0644]
doc/sdccman.html/node57.html [new file with mode: 0644]
doc/sdccman.html/node58.html [new file with mode: 0644]
doc/sdccman.html/node59.html [new file with mode: 0644]
doc/sdccman.html/node6.html [new file with mode: 0644]
doc/sdccman.html/node60.html [new file with mode: 0644]
doc/sdccman.html/node61.html [new file with mode: 0644]
doc/sdccman.html/node62.html [new file with mode: 0644]
doc/sdccman.html/node7.html [new file with mode: 0644]
doc/sdccman.html/node8.html [new file with mode: 0644]
doc/sdccman.html/node9.html [new file with mode: 0644]
doc/sdccman.html/previous_motif.gif [new file with mode: 0644]
doc/sdccman.html/previous_motif_gr.gif [new file with mode: 0644]
doc/sdccman.html/sdccman.html [new file with mode: 0644]
doc/sdccman.html/up_motif.gif [new file with mode: 0644]
doc/sdccman.html/up_motif_gr.gif [new file with mode: 0644]
doc/sdccman.lyx [new file with mode: 0644]
doc/test_suite_spec.html/WARNINGS [new file with mode: 0644]
doc/test_suite_spec.html/index.html [new file with mode: 0644]
doc/test_suite_spec.html/next_group_motif_gr.gif [new file with mode: 0644]
doc/test_suite_spec.html/previous_motif_gr.gif [new file with mode: 0644]
doc/test_suite_spec.html/test_suite_spec.html [new file with mode: 0644]
doc/test_suite_spec.html/up_motif_gr.gif [new file with mode: 0644]
doc/test_suite_spec.lyx [new file with mode: 0644]
doc/test_suite_spec.tex [deleted file]

index ccfb08be35ec609114a7e8f108e64d7715a1b88f..a715ec29bdee8e88c41799ef6912523d1bd0cd3d 100644 (file)
@@ -1,29 +1,52 @@
-# Very simple Makefile for converting the design doc into something useful.
-TOPDIR = ..
+include ../Makefile.common
 
-include $(TOPDIR)/Makefile.common
+MANUAL = sdccman
+TSS = test_suite_spec
 
-TEX = latex
+all: $(MANUAL).html $(MANUAL).pdf $(MANUAL).txt \
+       $(TSS).html $(TSS).pdf $(TSS).txt
 
-S = test_suite_spec.tex
-PDF = $(S:.tex=.pdf)
-PS = $(S:.tex=.ps)
-HTML = $(S:.tex=.html)
+install:
+       $(INSTALL) -d $(docdir)
+       cp -rf *.html *.txt *.pdf $(MANUAL).html $(TSS).html z80 avr $(docdir)
+
+uninstall:
+       rm -rf $(docdir)
+
+
+$(MANUAL).html: $(MANUAL).tex $(MANUAL).ind ;#$(MANUAL).glo
+       latex2html -split 5 -show_section_numbers -dir $(MANUAL).html $(MANUAL)
 
-all: $(PS) $(PDF) $(HTML)
+$(TSS).html: $(TSS).tex
+       latex2html -split 0 -dir $(TSS).html $(TSS)
 
-%.ps: %.dvi
-       dvips -f.ps $< > $@
+%.txt: %.lyx
+       lyx -e text $<
 
 %.pdf: %.dvi
-       dvipdf $< $@
+       pdflatex $*
 
-%.html: %.tex
-       latex2html -no_subdir -split 0 $<
+%.dvi: %.tex
+       latex $<
+
+%.tex: %.lyx
+       lyx -e latex $<
+
+%.ind: %.dvi
+       makeindex -s l2hidx.ist $*
+
+%.glo: %.dvi
+       # the glossary, not implemented yet
+       # makeindex -s l2hglo.ist -o $@ $<
 
-install:
-       $(INSTALL) -d $(docdir)
-       cp -rf *.html SDCCUdoc.* *.txt *.tex z80 avr $(docdir)
 
 clean:
-       rm -f $(PS) $(PDF) *.log *.aux *~
+       # remove intermediate file, not the final pdf's and html's
+       # because these are needed for the distribution
+       rm -rf *.tex *.aux *.dvi *.idx *.ilg *.ind *.log *.toc *~ \#* \
+               *.ps */*.css */*.pl *.gif core
+
+superclean:
+       $(MAKE) clean
+       # now get rid of the generated pdf's and html's as well
+       rm -rf *.pdf $(MANUAL).html $(TSS).html
\ No newline at end of file
diff --git a/doc/sdccman.html/WARNINGS b/doc/sdccman.html/WARNINGS
new file mode 100644 (file)
index 0000000..56ef1e5
--- /dev/null
@@ -0,0 +1,9 @@
+No implementation found for style `fontenc'
+No implementation found for style `fancyhdr'
+No implementation found for style `url'
+
+redefining command \url 
+
+previous meaning of \url will be lost
+
+There is no author for this document.
diff --git a/doc/sdccman.html/contents_motif.gif b/doc/sdccman.html/contents_motif.gif
new file mode 100644 (file)
index 0000000..7b3c904
Binary files /dev/null and b/doc/sdccman.html/contents_motif.gif differ
diff --git a/doc/sdccman.html/footnode.html b/doc/sdccman.html/footnode.html
new file mode 100644 (file)
index 0000000..1788fc8
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Footnotes</TITLE>
+<META NAME="description" CONTENT="Footnotes">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="previous" HREF="node61.html">
+<LINK REL="up" HREF="sdccman.html">
+</HEAD>
+
+<BODY >
+
+<DL>
+<DT><A NAME="foot531">...
+anyway</A><A NAME="foot531"
+ HREF="node29.html#tex2html1"><SUP>1</SUP></A>
+<DD>possible exception: if a function is called ONLY from 'interrupt'
+functions using a particular bank, it can be declared with the same
+'using' attribute as the calling 'interrupt' functions. For instance,
+if you have several ISRs using bank one, and all of them call memcpy(),
+it might make sense to create a specialized version of memcpy() 'using
+1', since this would prevent the ISR from having to save bank zero
+to the stack on entry and switch to bank zero before calling the function
+
+<PRE>.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+</PRE>
+</DL>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/index.html b/doc/sdccman.html/index.html
new file mode 100644 (file)
index 0000000..de73f32
--- /dev/null
@@ -0,0 +1,348 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>SDCC Compiler User Guide</TITLE>
+<META NAME="description" CONTENT="SDCC Compiler User Guide">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node1.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html6"
+ HREF="node1.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif_gr.gif"> 
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif_gr.gif"> 
+<A NAME="tex2html2"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html4"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html7"
+ HREF="node1.html">Contents</A>
+ &nbsp <B>  <A NAME="tex2html3"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html5"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<P>
+
+<P>
+<H1 ALIGN="CENTER">SDCC Compiler User Guide</H1>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"></A>
+
+<UL>
+<LI><A NAME="tex2html8"
+ HREF="node1.html">Contents</A>
+<LI><A NAME="tex2html9"
+ HREF="node2.html">1. Introduction</A>
+<UL>
+<LI><A NAME="tex2html10"
+ HREF="node3.html">1.1 About SDCC</A>
+<LI><A NAME="tex2html11"
+ HREF="node4.html">1.2 Open Source</A>
+<LI><A NAME="tex2html12"
+ HREF="node5.html">1.3 Typographic conventions</A>
+<LI><A NAME="tex2html13"
+ HREF="node6.html">1.4 Compatibility with previous versions</A>
+<LI><A NAME="tex2html14"
+ HREF="node7.html">1.5 System Requirements</A>
+<LI><A NAME="tex2html15"
+ HREF="node8.html">1.6 Other Resources</A>
+<LI><A NAME="tex2html16"
+ HREF="node9.html">1.7 Wishes for the future</A>
+</UL>
+<LI><A NAME="tex2html17"
+ HREF="node10.html">2. Installation</A>
+<UL>
+<LI><A NAME="tex2html18"
+ HREF="node11.html">2.1 Linux/Unix Installation</A>
+<LI><A NAME="tex2html19"
+ HREF="node12.html">2.2 Windows Installation</A>
+<UL>
+<LI><A NAME="tex2html20"
+ HREF="node12.html#SECTION00032100000000000000">2.2.1 Windows Install Using a Binary Package</A>
+<LI><A NAME="tex2html21"
+ HREF="node12.html#SECTION00032200000000000000">2.2.2 Windows Install Using Cygwin</A>
+</UL>
+<LI><A NAME="tex2html22"
+ HREF="node13.html">2.3 Testing out the SDCC Compiler</A>
+<LI><A NAME="tex2html23"
+ HREF="node14.html">2.4 Install Trouble-shooting</A>
+<UL>
+<LI><A NAME="tex2html24"
+ HREF="node14.html#SECTION00034100000000000000">2.4.1 SDCC cannot find libraries or header files.</A>
+<LI><A NAME="tex2html25"
+ HREF="node14.html#SECTION00034200000000000000">2.4.2 SDCC does not compile correctly.</A>
+<LI><A NAME="tex2html26"
+ HREF="node14.html#SECTION00034300000000000000">2.4.3 What the ''./configure'' does</A>
+<LI><A NAME="tex2html27"
+ HREF="node14.html#SECTION00034400000000000000">2.4.4 What the ''make'' does.</A>
+<LI><A NAME="tex2html28"
+ HREF="node14.html#SECTION00034500000000000000">2.4.5 What the ''make install'' command does.</A>
+</UL>
+<LI><A NAME="tex2html29"
+ HREF="node15.html">2.5 Additional Information for Windows Users</A>
+<UL>
+<LI><A NAME="tex2html30"
+ HREF="node15.html#SECTION00035100000000000000">2.5.1 Getting started with Cygwin</A>
+<LI><A NAME="tex2html31"
+ HREF="node15.html#SECTION00035200000000000000">2.5.2 Running SDCC as Native Compiled Executables</A>
+</UL>
+<LI><A NAME="tex2html32"
+ HREF="node16.html">2.6 SDCC on Other Platforms</A>
+<LI><A NAME="tex2html33"
+ HREF="node17.html">2.7 Advanced Install Options</A>
+<LI><A NAME="tex2html34"
+ HREF="node18.html">2.8 Components of SDCC</A>
+<UL>
+<LI><A NAME="tex2html35"
+ HREF="node18.html#SECTION00038100000000000000">2.8.1 sdcc - The Compiler</A>
+<LI><A NAME="tex2html36"
+ HREF="node18.html#SECTION00038200000000000000">2.8.2 sdcpp (C-Preprocessor)</A>
+<LI><A NAME="tex2html37"
+ HREF="node18.html#SECTION00038300000000000000">2.8.3 asx8051, as-z80, as-gbz80, aslink, link-z80, link-gbz80 (The Assemblers
+and Linkage Editors)</A>
+<LI><A NAME="tex2html38"
+ HREF="node18.html#SECTION00038400000000000000">2.8.4 s51 - Simulator</A>
+<LI><A NAME="tex2html39"
+ HREF="node18.html#SECTION00038500000000000000">2.8.5 sdcdb - Source Level Debugger</A>
+</UL>
+</UL>
+<LI><A NAME="tex2html40"
+ HREF="node19.html">3. Using SDCC</A>
+<UL>
+<LI><A NAME="tex2html41"
+ HREF="node20.html">3.1 Compiling</A>
+<UL>
+<LI><A NAME="tex2html42"
+ HREF="node20.html#SECTION00041100000000000000">3.1.1 Single Source File Projects</A>
+<LI><A NAME="tex2html43"
+ HREF="node20.html#SECTION00041200000000000000">3.1.2 Projects with Multiple Source Files</A>
+<LI><A NAME="tex2html44"
+ HREF="node20.html#SECTION00041300000000000000">3.1.3 Projects with Additional Libraries</A>
+</UL>
+<LI><A NAME="tex2html45"
+ HREF="node21.html">3.2 Command Line Options</A>
+<UL>
+<LI><A NAME="tex2html46"
+ HREF="node21.html#SECTION00042100000000000000">3.2.1 Processor Selection Options</A>
+<LI><A NAME="tex2html47"
+ HREF="node21.html#SECTION00042200000000000000">3.2.2 Preprocessor Options</A>
+<LI><A NAME="tex2html48"
+ HREF="node21.html#SECTION00042300000000000000">3.2.3 Linker Options</A>
+<LI><A NAME="tex2html49"
+ HREF="node21.html#SECTION00042400000000000000">3.2.4 MCS51 Options</A>
+<LI><A NAME="tex2html50"
+ HREF="node21.html#SECTION00042500000000000000">3.2.5 DS390 Options</A>
+<LI><A NAME="tex2html51"
+ HREF="node21.html#SECTION00042600000000000000">3.2.6 Optimization Options</A>
+<LI><A NAME="tex2html52"
+ HREF="node21.html#SECTION00042700000000000000">3.2.7 Other Options</A>
+<LI><A NAME="tex2html53"
+ HREF="node21.html#SECTION00042800000000000000">3.2.8 Intermediate Dump Options</A>
+</UL>
+<LI><A NAME="tex2html54"
+ HREF="node22.html">3.3 MCS51/DS390 Storage Class Language Extensions</A>
+<UL>
+<LI><A NAME="tex2html55"
+ HREF="node22.html#SECTION00043100000000000000">3.3.1 xdata</A>
+<LI><A NAME="tex2html56"
+ HREF="node22.html#SECTION00043200000000000000">3.3.2 data</A>
+<LI><A NAME="tex2html57"
+ HREF="node22.html#SECTION00043300000000000000">3.3.3 idata</A>
+<LI><A NAME="tex2html58"
+ HREF="node22.html#SECTION00043400000000000000">3.3.4 bit</A>
+<LI><A NAME="tex2html59"
+ HREF="node22.html#SECTION00043500000000000000">3.3.5 sfr / sbit</A>
+</UL>
+<LI><A NAME="tex2html60"
+ HREF="node23.html">3.4 Pointers</A>
+<LI><A NAME="tex2html61"
+ HREF="node24.html">3.5 Parameters &amp; Local Variables</A>
+<LI><A NAME="tex2html62"
+ HREF="node25.html">3.6 Overlaying</A>
+<LI><A NAME="tex2html63"
+ HREF="node26.html">3.7 Interrupt Service Routines</A>
+<LI><A NAME="tex2html64"
+ HREF="node27.html">3.8 Critical Functions</A>
+<LI><A NAME="tex2html65"
+ HREF="node28.html">3.9 Naked Functions</A>
+<LI><A NAME="tex2html66"
+ HREF="node29.html">3.10 Functions using private banks</A>
+<LI><A NAME="tex2html67"
+ HREF="node30.html">3.11 Absolute Addressing</A>
+<LI><A NAME="tex2html68"
+ HREF="node31.html">3.12 Startup Code</A>
+<LI><A NAME="tex2html69"
+ HREF="node32.html">3.13 Inline Assembler Code</A>
+<LI><A NAME="tex2html70"
+ HREF="node33.html">3.14 int(16 bit) and long (32 bit) Support</A>
+<LI><A NAME="tex2html71"
+ HREF="node34.html">3.15 Floating Point Support</A>
+<LI><A NAME="tex2html72"
+ HREF="node35.html">3.16 MCS51 Memory Models</A>
+<LI><A NAME="tex2html73"
+ HREF="node36.html">3.17 DS390 Memory Models</A>
+<LI><A NAME="tex2html74"
+ HREF="node37.html">3.18 Defines Created by the Compiler</A>
+</UL>
+<LI><A NAME="tex2html75"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<UL>
+<LI><A NAME="tex2html76"
+ HREF="node39.html">4.1 Optimizations</A>
+<UL>
+<LI><A NAME="tex2html77"
+ HREF="node39.html#SECTION00051100000000000000">4.1.1 Sub-expression Elimination</A>
+<LI><A NAME="tex2html78"
+ HREF="node39.html#SECTION00051200000000000000">4.1.2 Dead-Code Elimination</A>
+<LI><A NAME="tex2html79"
+ HREF="node39.html#SECTION00051300000000000000">4.1.3 Copy-Propagation</A>
+<LI><A NAME="tex2html80"
+ HREF="node39.html#SECTION00051400000000000000">4.1.4 Loop Optimizations</A>
+<LI><A NAME="tex2html81"
+ HREF="node39.html#SECTION00051500000000000000">4.1.5 Loop Reversing</A>
+<LI><A NAME="tex2html82"
+ HREF="node39.html#SECTION00051600000000000000">4.1.6 Algebraic Simplifications</A>
+<LI><A NAME="tex2html83"
+ HREF="node39.html#SECTION00051700000000000000">4.1.7 'switch' Statements</A>
+<LI><A NAME="tex2html84"
+ HREF="node39.html#SECTION00051800000000000000">4.1.8 Bit-shifting Operations.</A>
+<LI><A NAME="tex2html85"
+ HREF="node39.html#SECTION00051900000000000000">4.1.9 Bit-rotation</A>
+<LI><A NAME="tex2html86"
+ HREF="node39.html#SECTION000511000000000000000">4.1.10 Highest Order Bit</A>
+<LI><A NAME="tex2html87"
+ HREF="node39.html#SECTION000511100000000000000">4.1.11 Peep-hole Optimizer</A>
+</UL>
+<LI><A NAME="tex2html88"
+ HREF="node40.html">4.2 Pragmas</A>
+<LI><A NAME="tex2html89"
+ HREF="node41.html">4.3 <I>&lt;pending: this is messy and incomplete&gt;</I> Library Routines</A>
+<LI><A NAME="tex2html90"
+ HREF="node42.html">4.4 Interfacing with Assembly Routines</A>
+<UL>
+<LI><A NAME="tex2html91"
+ HREF="node42.html#SECTION00054100000000000000">4.4.1 Global Registers used for Parameter Passing</A>
+<LI><A NAME="tex2html92"
+ HREF="node42.html#SECTION00054200000000000000">4.4.2 Assembler Routine(non-reentrant)</A>
+<LI><A NAME="tex2html93"
+ HREF="node42.html#SECTION00054300000000000000">4.4.3 Assembler Routine(reentrant)</A>
+</UL>
+<LI><A NAME="tex2html94"
+ HREF="node43.html">4.5 External Stack</A>
+<LI><A NAME="tex2html95"
+ HREF="node44.html">4.6 ANSI-Compliance</A>
+<LI><A NAME="tex2html96"
+ HREF="node45.html">4.7 Cyclomatic Complexity</A>
+</UL>
+<LI><A NAME="tex2html97"
+ HREF="node46.html">5. TIPS</A>
+<UL>
+<LI><A NAME="tex2html98"
+ HREF="node47.html">5.1 Notes on MCS51 memory layout</A>
+</UL>
+<LI><A NAME="tex2html99"
+ HREF="node48.html">6. Retargetting for other MCUs.</A>
+<LI><A NAME="tex2html100"
+ HREF="node49.html">7. SDCDB - Source Level Debugger</A>
+<UL>
+<LI><A NAME="tex2html101"
+ HREF="node50.html">7.1 Compiling for Debugging</A>
+<LI><A NAME="tex2html102"
+ HREF="node51.html">7.2 How the Debugger Works</A>
+<LI><A NAME="tex2html103"
+ HREF="node52.html">7.3 Starting the Debugger</A>
+<LI><A NAME="tex2html104"
+ HREF="node53.html">7.4 Command Line Options.</A>
+<LI><A NAME="tex2html105"
+ HREF="node54.html">7.5 Debugger Commands.</A>
+<UL>
+<LI><A NAME="tex2html106"
+ HREF="node54.html#SECTION00085100000000000000">7.5.1 break [line | file:line | function | file:function]</A>
+<LI><A NAME="tex2html107"
+ HREF="node54.html#SECTION00085200000000000000">7.5.2 clear [line | file:line | function | file:function ]</A>
+<LI><A NAME="tex2html108"
+ HREF="node54.html#SECTION00085300000000000000">7.5.3 continue</A>
+<LI><A NAME="tex2html109"
+ HREF="node54.html#SECTION00085400000000000000">7.5.4 finish</A>
+<LI><A NAME="tex2html110"
+ HREF="node54.html#SECTION00085500000000000000">7.5.5 delete [n]</A>
+<LI><A NAME="tex2html111"
+ HREF="node54.html#SECTION00085600000000000000">7.5.6 info [break | stack | frame | registers ]</A>
+<LI><A NAME="tex2html112"
+ HREF="node54.html#SECTION00085700000000000000">7.5.7 step</A>
+<LI><A NAME="tex2html113"
+ HREF="node54.html#SECTION00085800000000000000">7.5.8 next</A>
+<LI><A NAME="tex2html114"
+ HREF="node54.html#SECTION00085900000000000000">7.5.9 run</A>
+<LI><A NAME="tex2html115"
+ HREF="node54.html#SECTION000851000000000000000">7.5.10 ptype variable </A>
+<LI><A NAME="tex2html116"
+ HREF="node54.html#SECTION000851100000000000000">7.5.11 print variable</A>
+<LI><A NAME="tex2html117"
+ HREF="node54.html#SECTION000851200000000000000">7.5.12 file filename</A>
+<LI><A NAME="tex2html118"
+ HREF="node54.html#SECTION000851300000000000000">7.5.13 frame</A>
+<LI><A NAME="tex2html119"
+ HREF="node54.html#SECTION000851400000000000000">7.5.14 set srcmode</A>
+<LI><A NAME="tex2html120"
+ HREF="node54.html#SECTION000851500000000000000">7.5.15 ! simulator command</A>
+<LI><A NAME="tex2html121"
+ HREF="node54.html#SECTION000851600000000000000">7.5.16 quit.</A>
+</UL>
+<LI><A NAME="tex2html122"
+ HREF="node55.html">7.6 Interfacing with XEmacs.</A>
+</UL>
+<LI><A NAME="tex2html123"
+ HREF="node56.html">8. Other Processors</A>
+<UL>
+<LI><A NAME="tex2html124"
+ HREF="node57.html">8.1 The Z80 and gbz80 port</A>
+</UL>
+<LI><A NAME="tex2html125"
+ HREF="node58.html">9. Support</A>
+<UL>
+<LI><A NAME="tex2html126"
+ HREF="node59.html">9.1 Reporting Bugs</A>
+</UL>
+<LI><A NAME="tex2html127"
+ HREF="node60.html">10. Acknowledgments</A>
+<LI><A NAME="tex2html128"
+ HREF="node61.html">Index</A>
+<LI><A NAME="tex2html129"
+ HREF="node62.html">About this document ...</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/index_motif.gif b/doc/sdccman.html/index_motif.gif
new file mode 100644 (file)
index 0000000..b9b3108
Binary files /dev/null and b/doc/sdccman.html/index_motif.gif differ
diff --git a/doc/sdccman.html/next_motif.gif b/doc/sdccman.html/next_motif.gif
new file mode 100644 (file)
index 0000000..928a32d
Binary files /dev/null and b/doc/sdccman.html/next_motif.gif differ
diff --git a/doc/sdccman.html/next_motif_gr.gif b/doc/sdccman.html/next_motif_gr.gif
new file mode 100644 (file)
index 0000000..011fa04
Binary files /dev/null and b/doc/sdccman.html/next_motif_gr.gif differ
diff --git a/doc/sdccman.html/node1.html b/doc/sdccman.html/node1.html
new file mode 100644 (file)
index 0000000..403f432
--- /dev/null
@@ -0,0 +1,210 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Contents</TITLE>
+<META NAME="description" CONTENT="Contents">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node2.html">
+<LINK REL="previous" HREF="sdccman.html">
+<LINK REL="up" HREF="sdccman.html">
+<LINK REL="next" HREF="node2.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html140"
+ HREF="node2.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html136"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html130"
+ HREF="sdccman.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A>  
+<A NAME="tex2html138"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html141"
+ HREF="node2.html">1. Introduction</A>
+<B> Up:</B> <A NAME="tex2html137"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html131"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+ &nbsp <B>  <A NAME="tex2html139"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<BR>
+
+<H2><A NAME="SECTION00010000000000000000">
+Contents</A>
+</H2>
+<!--Table of Contents-->
+
+<UL>
+<LI><A NAME="tex2html142"
+ HREF="node1.html">Contents</A>
+<LI><A NAME="tex2html143"
+ HREF="node2.html">1. Introduction</A>
+<UL>
+<LI><A NAME="tex2html144"
+ HREF="node3.html">1.1 About SDCC</A>
+<LI><A NAME="tex2html145"
+ HREF="node4.html">1.2 Open Source</A>
+<LI><A NAME="tex2html146"
+ HREF="node5.html">1.3 Typographic conventions</A>
+<LI><A NAME="tex2html147"
+ HREF="node6.html">1.4 Compatibility with previous versions</A>
+<LI><A NAME="tex2html148"
+ HREF="node7.html">1.5 System Requirements</A>
+<LI><A NAME="tex2html149"
+ HREF="node8.html">1.6 Other Resources</A>
+<LI><A NAME="tex2html150"
+ HREF="node9.html">1.7 Wishes for the future</A>
+</UL>
+<LI><A NAME="tex2html151"
+ HREF="node10.html">2. Installation</A>
+<UL>
+<LI><A NAME="tex2html152"
+ HREF="node11.html">2.1 Linux/Unix Installation</A>
+<LI><A NAME="tex2html153"
+ HREF="node12.html">2.2 Windows Installation</A>
+<LI><A NAME="tex2html154"
+ HREF="node13.html">2.3 Testing out the SDCC Compiler</A>
+<LI><A NAME="tex2html155"
+ HREF="node14.html">2.4 Install Trouble-shooting</A>
+<LI><A NAME="tex2html156"
+ HREF="node15.html">2.5 Additional Information for Windows Users</A>
+<LI><A NAME="tex2html157"
+ HREF="node16.html">2.6 SDCC on Other Platforms</A>
+<LI><A NAME="tex2html158"
+ HREF="node17.html">2.7 Advanced Install Options</A>
+<LI><A NAME="tex2html159"
+ HREF="node18.html">2.8 Components of SDCC</A>
+</UL>
+<LI><A NAME="tex2html160"
+ HREF="node19.html">3. Using SDCC</A>
+<UL>
+<LI><A NAME="tex2html161"
+ HREF="node20.html">3.1 Compiling</A>
+<LI><A NAME="tex2html162"
+ HREF="node21.html">3.2 Command Line Options</A>
+<LI><A NAME="tex2html163"
+ HREF="node22.html">3.3 MCS51/DS390 Storage Class Language Extensions</A>
+<LI><A NAME="tex2html164"
+ HREF="node23.html">3.4 Pointers</A>
+<LI><A NAME="tex2html165"
+ HREF="node24.html">3.5 Parameters &amp; Local Variables</A>
+<LI><A NAME="tex2html166"
+ HREF="node25.html">3.6 Overlaying</A>
+<LI><A NAME="tex2html167"
+ HREF="node26.html">3.7 Interrupt Service Routines</A>
+<LI><A NAME="tex2html168"
+ HREF="node27.html">3.8 Critical Functions</A>
+<LI><A NAME="tex2html169"
+ HREF="node28.html">3.9 Naked Functions</A>
+<LI><A NAME="tex2html170"
+ HREF="node29.html">3.10 Functions using private banks</A>
+<LI><A NAME="tex2html171"
+ HREF="node30.html">3.11 Absolute Addressing</A>
+<LI><A NAME="tex2html172"
+ HREF="node31.html">3.12 Startup Code</A>
+<LI><A NAME="tex2html173"
+ HREF="node32.html">3.13 Inline Assembler Code</A>
+<LI><A NAME="tex2html174"
+ HREF="node33.html">3.14 int(16 bit) and long (32 bit) Support</A>
+<LI><A NAME="tex2html175"
+ HREF="node34.html">3.15 Floating Point Support</A>
+<LI><A NAME="tex2html176"
+ HREF="node35.html">3.16 MCS51 Memory Models</A>
+<LI><A NAME="tex2html177"
+ HREF="node36.html">3.17 DS390 Memory Models</A>
+<LI><A NAME="tex2html178"
+ HREF="node37.html">3.18 Defines Created by the Compiler</A>
+</UL>
+<LI><A NAME="tex2html179"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<UL>
+<LI><A NAME="tex2html180"
+ HREF="node39.html">4.1 Optimizations</A>
+<LI><A NAME="tex2html181"
+ HREF="node40.html">4.2 Pragmas</A>
+<LI><A NAME="tex2html182"
+ HREF="node41.html">4.3 &lt;pending: this is messy and incomplete&gt; Library Routines</A>
+<LI><A NAME="tex2html183"
+ HREF="node42.html">4.4 Interfacing with Assembly Routines</A>
+<LI><A NAME="tex2html184"
+ HREF="node43.html">4.5 External Stack</A>
+<LI><A NAME="tex2html185"
+ HREF="node44.html">4.6 ANSI-Compliance</A>
+<LI><A NAME="tex2html186"
+ HREF="node45.html">4.7 Cyclomatic Complexity</A>
+</UL>
+<LI><A NAME="tex2html187"
+ HREF="node46.html">5. TIPS</A>
+<UL>
+<LI><A NAME="tex2html188"
+ HREF="node47.html">5.1 Notes on MCS51 memory layout</A>
+</UL>
+<LI><A NAME="tex2html189"
+ HREF="node48.html">6. Retargetting for other MCUs.</A>
+<LI><A NAME="tex2html190"
+ HREF="node49.html">7. SDCDB - Source Level Debugger</A>
+<UL>
+<LI><A NAME="tex2html191"
+ HREF="node50.html">7.1 Compiling for Debugging</A>
+<LI><A NAME="tex2html192"
+ HREF="node51.html">7.2 How the Debugger Works</A>
+<LI><A NAME="tex2html193"
+ HREF="node52.html">7.3 Starting the Debugger</A>
+<LI><A NAME="tex2html194"
+ HREF="node53.html">7.4 Command Line Options.</A>
+<LI><A NAME="tex2html195"
+ HREF="node54.html">7.5 Debugger Commands.</A>
+<LI><A NAME="tex2html196"
+ HREF="node55.html">7.6 Interfacing with XEmacs.</A>
+</UL>
+<LI><A NAME="tex2html197"
+ HREF="node56.html">8. Other Processors</A>
+<UL>
+<LI><A NAME="tex2html198"
+ HREF="node57.html">8.1 The Z80 and gbz80 port</A>
+</UL>
+<LI><A NAME="tex2html199"
+ HREF="node58.html">9. Support</A>
+<UL>
+<LI><A NAME="tex2html200"
+ HREF="node59.html">9.1 Reporting Bugs</A>
+</UL>
+<LI><A NAME="tex2html201"
+ HREF="node60.html">10. Acknowledgments</A>
+<LI><A NAME="tex2html202"
+ HREF="node61.html">Index</A>
+</UL>
+<!--End of Table of Contents--> 
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node10.html b/doc/sdccman.html/node10.html
new file mode 100644 (file)
index 0000000..b321e25
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>2. Installation</TITLE>
+<META NAME="description" CONTENT="2. Installation">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node19.html">
+<LINK REL="previous" HREF="node2.html">
+<LINK REL="up" HREF="sdccman.html">
+<LINK REL="next" HREF="node11.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html332"
+ HREF="node11.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html326"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html320"
+ HREF="node9.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html328"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html330"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html333"
+ HREF="node11.html">2.1 Linux/Unix Installation</A>
+<B> Up:</B> <A NAME="tex2html327"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html321"
+ HREF="node9.html">1.7 Wishes for the</A>
+ &nbsp <B>  <A NAME="tex2html329"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html331"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00030000000000000000">
+2. Installation</A>
+</H1>
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html334"
+ HREF="node11.html">2.1 Linux/Unix Installation</A>
+<LI><A NAME="tex2html335"
+ HREF="node12.html">2.2 Windows Installation</A>
+<UL>
+<LI><A NAME="tex2html336"
+ HREF="node12.html#SECTION00032100000000000000">2.2.1 Windows Install Using a Binary Package</A>
+<LI><A NAME="tex2html337"
+ HREF="node12.html#SECTION00032200000000000000">2.2.2 Windows Install Using Cygwin</A>
+</UL>
+<LI><A NAME="tex2html338"
+ HREF="node13.html">2.3 Testing out the SDCC Compiler</A>
+<LI><A NAME="tex2html339"
+ HREF="node14.html">2.4 Install Trouble-shooting</A>
+<UL>
+<LI><A NAME="tex2html340"
+ HREF="node14.html#SECTION00034100000000000000">2.4.1 SDCC cannot find libraries or header files.</A>
+<LI><A NAME="tex2html341"
+ HREF="node14.html#SECTION00034200000000000000">2.4.2 SDCC does not compile correctly.</A>
+<LI><A NAME="tex2html342"
+ HREF="node14.html#SECTION00034300000000000000">2.4.3 What the ''./configure'' does</A>
+<LI><A NAME="tex2html343"
+ HREF="node14.html#SECTION00034400000000000000">2.4.4 What the ''make'' does.</A>
+<LI><A NAME="tex2html344"
+ HREF="node14.html#SECTION00034500000000000000">2.4.5 What the ''make install'' command does.</A>
+</UL>
+<LI><A NAME="tex2html345"
+ HREF="node15.html">2.5 Additional Information for Windows Users</A>
+<UL>
+<LI><A NAME="tex2html346"
+ HREF="node15.html#SECTION00035100000000000000">2.5.1 Getting started with Cygwin</A>
+<LI><A NAME="tex2html347"
+ HREF="node15.html#SECTION00035200000000000000">2.5.2 Running SDCC as Native Compiled Executables</A>
+</UL>
+<LI><A NAME="tex2html348"
+ HREF="node16.html">2.6 SDCC on Other Platforms</A>
+<LI><A NAME="tex2html349"
+ HREF="node17.html">2.7 Advanced Install Options</A>
+<LI><A NAME="tex2html350"
+ HREF="node18.html">2.8 Components of SDCC</A>
+<UL>
+<LI><A NAME="tex2html351"
+ HREF="node18.html#SECTION00038100000000000000">2.8.1 sdcc - The Compiler</A>
+<LI><A NAME="tex2html352"
+ HREF="node18.html#SECTION00038200000000000000">2.8.2 sdcpp (C-Preprocessor)</A>
+<LI><A NAME="tex2html353"
+ HREF="node18.html#SECTION00038300000000000000">2.8.3 asx8051, as-z80, as-gbz80, aslink, link-z80, link-gbz80 (The Assemblers
+and Linkage Editors)</A>
+<LI><A NAME="tex2html354"
+ HREF="node18.html#SECTION00038400000000000000">2.8.4 s51 - Simulator</A>
+<LI><A NAME="tex2html355"
+ HREF="node18.html#SECTION00038500000000000000">2.8.5 sdcdb - Source Level Debugger</A>
+</UL></UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node11.html b/doc/sdccman.html/node11.html
new file mode 100644 (file)
index 0000000..9fb745a
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>2.1 Linux/Unix Installation</TITLE>
+<META NAME="description" CONTENT="2.1 Linux/Unix Installation">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node12.html">
+<LINK REL="previous" HREF="node10.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node12.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html368"
+ HREF="node12.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html362"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html356"
+ HREF="node10.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html364"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html366"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html369"
+ HREF="node12.html">2.2 Windows Installation</A>
+<B> Up:</B> <A NAME="tex2html363"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html357"
+ HREF="node10.html">2. Installation</A>
+ &nbsp <B>  <A NAME="tex2html365"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html367"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00031000000000000000">
+2.1 Linux/Unix Installation</A>
+</H2>
+
+<P>
+
+<OL>
+<LI>Download the source package, it will be named something like sdcc-2.x.x.tgz.</LI>
+<LI>Bring up a command line terminal, such as xterm.</LI>
+<LI>Unpack the file using a command like: <I><B>&#34;tar
+-xzf sdcc-2.x.x.tgz</B></I>&#34;, this will create a sub-directory
+called sdcc with all of the sources.</LI>
+<LI>Change directory into the main SDCC directory, for example type: <I><B>&#34;cd
+sdcc</B></I><I>&#34;.</I></LI>
+<LI>Type <I><B>&#34;./configure</B></I>&#34;. This configures
+the package for compilation on your system.</LI>
+<LI>Type <I><B>&#34;make</B></I>&#34;. All of the source
+packages will compile, this can take a while.</LI>
+<LI>Type <I><B>&#34;make install&#34;</B></I> as root. This
+copies the binary executables, the include files, the libraries and
+the documentation to the install directories.</LI>
+</OL>
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node12.html b/doc/sdccman.html/node12.html
new file mode 100644 (file)
index 0000000..30b48b9
--- /dev/null
@@ -0,0 +1,164 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>2.2 Windows Installation</TITLE>
+<META NAME="description" CONTENT="2.2 Windows Installation">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node13.html">
+<LINK REL="previous" HREF="node11.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node13.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html382"
+ HREF="node13.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html376"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html370"
+ HREF="node11.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html378"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html380"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html383"
+ HREF="node13.html">2.3 Testing out the</A>
+<B> Up:</B> <A NAME="tex2html377"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html371"
+ HREF="node11.html">2.1 Linux/Unix Installation</A>
+ &nbsp <B>  <A NAME="tex2html379"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html381"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html384"
+ HREF="node12.html#SECTION00032100000000000000">2.2.1 Windows Install Using a Binary Package</A>
+<LI><A NAME="tex2html385"
+ HREF="node12.html#SECTION00032200000000000000">2.2.2 Windows Install Using Cygwin</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H2><A NAME="SECTION00032000000000000000">
+2.2 Windows Installation</A>
+</H2>
+
+<P>
+<I>&lt;pending: is this complete? where is borland, mingw&gt;</I>
+<BR>
+<BR>
+For installation under Windows you first need to pick between a pre-compiled
+binary package, or installing the source package along with the Cygwin
+package. The binary package is the quickest to install, while the
+Cygwin package includes all of the open source power tools used to
+compile the complete SDCC source package in the Windows environment.
+If you are not familiar with the Unix command line environment, you
+may want to read the section on additional information for Windows
+users prior to your initial installation.
+
+<P>
+
+<H3><A NAME="SECTION00032100000000000000">
+2.2.1 Windows Install Using a Binary Package</A>
+</H3>
+
+<P>
+
+<OL>
+<LI>Download the binary package and unpack it using your favorite unpacking
+tool (gunzip, WinZip, etc). This should unpack to a group of sub-directories.
+An example directory structure after unpacking is: c:&#92;usr&#92;local&#92;bin
+for the executables, c:&#92;usr&#92;local&#92;share&#92;sdcc&#92;include
+and c:&#92;usr&#92;local&#92;share&#92;sdcc&#92;lib
+for the include and libraries.</LI>
+<LI>Adjust your environment PATH to include the location of the bin directory.
+For example, make a setsdcc.bat file with the following: set PATH=c:&#92;usr&#92;local&#92;bin;%PATH%</LI>
+<LI>When you compile with sdcc, you may need to specify the location of
+the lib and include folders. For example, sdcc -I c:&#92;usr&#92;local&#92;share&#92;sdcc&#92;include
+-L c:&#92;usr&#92;local&#92;share&#92;sdcc&#92;lib&#92;small
+test.c</LI>
+</OL>
+
+<P>
+
+<H3><A NAME="SECTION00032200000000000000">
+2.2.2 Windows Install Using Cygwin</A>
+</H3>
+
+<P>
+
+<OL>
+<LI>Download and install the cygwin package from the redhat site http://sources.redhat.com/cygwin/.
+Currently, this involved downloading a small install program which
+then automates downloading and installing selected parts of the package
+(a large 80M byte sized dowload for the whole thing). </LI>
+<LI>Bring up a Unix/Bash command line terminal from the Cygwin menu.</LI>
+<LI>Follow the instructions in the preceding Linux/Unix installation section.</LI>
+</OL>
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html382"
+ HREF="node13.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html376"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html370"
+ HREF="node11.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html378"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html380"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html383"
+ HREF="node13.html">2.3 Testing out the</A>
+<B> Up:</B> <A NAME="tex2html377"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html371"
+ HREF="node11.html">2.1 Linux/Unix Installation</A>
+ &nbsp <B>  <A NAME="tex2html379"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html381"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node13.html b/doc/sdccman.html/node13.html
new file mode 100644 (file)
index 0000000..64daa55
--- /dev/null
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>2.3 Testing out the SDCC Compiler</TITLE>
+<META NAME="description" CONTENT="2.3 Testing out the SDCC Compiler">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node14.html">
+<LINK REL="previous" HREF="node12.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node14.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html398"
+ HREF="node14.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html392"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html386"
+ HREF="node12.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html394"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html396"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html399"
+ HREF="node14.html">2.4 Install Trouble-shooting</A>
+<B> Up:</B> <A NAME="tex2html393"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html387"
+ HREF="node12.html">2.2 Windows Installation</A>
+ &nbsp <B>  <A NAME="tex2html395"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html397"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00033000000000000000">
+2.3 Testing out the SDCC Compiler</A>
+</H2>
+
+<P>
+The first thing you should do after installing your SDCC compiler
+is to see if it runs. Type <I><B>&#34;sdcc -version&#34;</B></I>
+at the prompt, and the program should run and tell you the version.
+If it doesn't run, or gives a message about not finding sdcc program,
+then you need to check over your installation. Make sure that the
+sdcc bin directory is in your executable search path defined by the
+PATH environment setting (see the Trouble-shooting section for suggestions).
+Make sure that the sdcc program is in the bin folder, if not perhaps
+something did not install correctly.
+<BR>
+
+<BR>
+SDCC binaries are commonly installed in a directory arrangement like
+this:
+<BR>
+
+<BR>
+<TABLE CELLPADDING=3 BORDER="1">
+<TR><TD ALIGN="LEFT">/usr/local/bin</TD>
+<TD ALIGN="LEFT">Holds executables(sdcc, s51, aslink, ...)</TD>
+</TR>
+<TR><TD ALIGN="LEFT">/usr/local/share/sdcc/lib</TD>
+<TD ALIGN="LEFT">Holds common C libraries</TD>
+</TR>
+<TR><TD ALIGN="LEFT">/usr/local/share/sdcc/include</TD>
+<TD ALIGN="LEFT">Holds common C header files</TD>
+</TR>
+</TABLE>
+<BR>
+
+<BR>
+Make sure the compiler works on a very simple example. Type in the
+following test.c program using your favorite editor:
+<BR>
+<BR>
+<TT>int test(int t) {</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;return t+3;</TT>&nbsp;
+<BR>
+<TT>}</TT>
+<BR>
+<BR>
+Compile this using the following command: <I><B>&#34;sdcc
+-c test.c&#34;.</B></I> If all goes well, the compiler will generate
+a test.asm and test.rel file. Congratulations, you've just compiled
+your first program with SDCC. We used the -c option to tell SDCC not
+to link the generated code, just to keep things simple for this step.
+<BR>
+
+<BR>
+The next step is to try it with the linker. Type in <I><B>&#34;sdcc
+test.c</B></I>&#34;. If all goes well the compiler will link with the
+libraries and produce a test.ihx output file. If this step fails (no
+test.ihx, and the linker generates warnings), then the problem is
+most likely that sdcc cannot find the /usr/local/share/sdcc/lib directory
+(see the Install trouble-shooting section for suggestions).
+<BR>
+
+<BR>
+The final test is to ensure sdcc can use the standard header files
+and libraries. Edit test.c and change it to the following:
+<BR>
+
+<BR>
+#include &lt;string.h&gt;
+<BR>
+main() {
+<BR>
+<TT>char str1[10];</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(str1, &#34;testing&#34;);</TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+Compile this by typing <I><B>&#34;sdcc test.c&#34;</B></I>.
+This should generate a test.ihx output file, and it should give no
+warnings such as not finding the string.h file. If it cannot find
+the string.h file, then the problem is that sdcc cannot find the /usr/local/share/sdcc/include
+directory (see the Install trouble-shooting section for suggestions).
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html398"
+ HREF="node14.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html392"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html386"
+ HREF="node12.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html394"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html396"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html399"
+ HREF="node14.html">2.4 Install Trouble-shooting</A>
+<B> Up:</B> <A NAME="tex2html393"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html387"
+ HREF="node12.html">2.2 Windows Installation</A>
+ &nbsp <B>  <A NAME="tex2html395"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html397"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node14.html b/doc/sdccman.html/node14.html
new file mode 100644 (file)
index 0000000..c2bcf67
--- /dev/null
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>2.4 Install Trouble-shooting</TITLE>
+<META NAME="description" CONTENT="2.4 Install Trouble-shooting">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node15.html">
+<LINK REL="previous" HREF="node13.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node15.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html412"
+ HREF="node15.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html406"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html400"
+ HREF="node13.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html408"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html410"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html413"
+ HREF="node15.html">2.5 Additional Information for</A>
+<B> Up:</B> <A NAME="tex2html407"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html401"
+ HREF="node13.html">2.3 Testing out the</A>
+ &nbsp <B>  <A NAME="tex2html409"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html411"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html414"
+ HREF="node14.html#SECTION00034100000000000000">2.4.1 SDCC cannot find libraries or header files.</A>
+<LI><A NAME="tex2html415"
+ HREF="node14.html#SECTION00034200000000000000">2.4.2 SDCC does not compile correctly.</A>
+<LI><A NAME="tex2html416"
+ HREF="node14.html#SECTION00034300000000000000">2.4.3 What the ''./configure'' does</A>
+<LI><A NAME="tex2html417"
+ HREF="node14.html#SECTION00034400000000000000">2.4.4 What the ''make'' does.</A>
+<LI><A NAME="tex2html418"
+ HREF="node14.html#SECTION00034500000000000000">2.4.5 What the ''make install'' command does.</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H2><A NAME="SECTION00034000000000000000">
+2.4 Install Trouble-shooting</A>
+</H2>
+
+<P>
+
+<H3><A NAME="SECTION00034100000000000000">
+2.4.1 SDCC cannot find libraries or header files.</A>
+</H3>
+
+<P>
+The default installation assumes the libraries and header files are
+located at ``/usr/local/share/sdcc/lib'' and ``/usr/local/share/sdcc/include''.
+An alternative is to specify these locations as compiler options like
+this: <I><B>&#34;sdcc&nbsp;-L&nbsp;/usr/local/sdcc/lib/small&nbsp;-I&nbsp;/usr/local/sdcc/include&nbsp;test.c&#34;</B></I>.
+
+<P>
+
+<H3><A NAME="SECTION00034200000000000000">
+2.4.2 SDCC does not compile correctly.</A>
+</H3>
+
+<P>
+A thing to try is starting from scratch by unpacking the .tgz source
+package again in an empty directory. Confure it again and build like:
+<BR>
+
+<BR>
+<I><B>make 2SPMamp;&gt;1 | tee make.log</B></I>
+<BR>
+
+<BR>
+After this you can review the make.log file to locate the problem.
+Or a relevant part of this be attached to an email that could be helpful
+when requesting help from the mailing list.
+
+<P>
+
+<H3><A NAME="SECTION00034300000000000000">
+2.4.3 What the ''./configure'' does</A>
+</H3>
+
+<P>
+The ''./configure'' command is a script that analyzes your system
+and performs some configuration to ensure the source package compiles
+on your system. It will take a few minutes to run, and will compile
+a few tests to determine what compiler features are installed.
+
+<P>
+
+<H3><A NAME="SECTION00034400000000000000">
+2.4.4 What the ''make'' does.</A>
+</H3>
+
+<P>
+This runs the GNU make tool, which automatically compiles all the
+source packages into the final installed binary executables.
+
+<P>
+
+<H3><A NAME="SECTION00034500000000000000">
+2.4.5 What the ''make install'' command does.</A>
+</H3>
+
+<P>
+This will install the compiler, other executables and libraries in
+to the appropriate system directories. The default is to copy the
+executables to /usr/local/bin and the libraries and header files to
+/usr/local/share/sdcc/lib and /usr/local/share/sdcc/include.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html412"
+ HREF="node15.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html406"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html400"
+ HREF="node13.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html408"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html410"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html413"
+ HREF="node15.html">2.5 Additional Information for</A>
+<B> Up:</B> <A NAME="tex2html407"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html401"
+ HREF="node13.html">2.3 Testing out the</A>
+ &nbsp <B>  <A NAME="tex2html409"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html411"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node15.html b/doc/sdccman.html/node15.html
new file mode 100644 (file)
index 0000000..cfb91e6
--- /dev/null
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>2.5 Additional Information for Windows Users</TITLE>
+<META NAME="description" CONTENT="2.5 Additional Information for Windows Users">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node16.html">
+<LINK REL="previous" HREF="node14.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node16.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html431"
+ HREF="node16.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html425"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html419"
+ HREF="node14.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html427"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html429"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html432"
+ HREF="node16.html">2.6 SDCC on Other</A>
+<B> Up:</B> <A NAME="tex2html426"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html420"
+ HREF="node14.html">2.4 Install Trouble-shooting</A>
+ &nbsp <B>  <A NAME="tex2html428"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html430"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html433"
+ HREF="node15.html#SECTION00035100000000000000">2.5.1 Getting started with Cygwin</A>
+<LI><A NAME="tex2html434"
+ HREF="node15.html#SECTION00035200000000000000">2.5.2 Running SDCC as Native Compiled Executables</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H2><A NAME="SECTION00035000000000000000">
+2.5 Additional Information for Windows Users</A>
+</H2>
+
+<P>
+<I>&lt;pending: is this up to date?&gt;</I>
+<BR>
+<BR>
+The standard method of installing on a Unix system involves compiling
+the source package. This is easily done under Unix, but under Windows
+it can be a more difficult process. The Cygwin is a large package
+to download, and the compilation runs considerably slower under Windows
+due to the overhead of the Cygwin tool set. An alternative is to install
+a pre-compiled Windows binary package. There are various trade-offs
+between each of these methods. 
+
+<P>
+The Cygwin package allows a Windows user to run a Unix command line
+interface (bash shell) and also implements a Unix like file system
+on top of Windows. Included are many of the famous GNU software development
+tools which can augment the SDCC compiler.This is great if you have
+some experience with Unix command line tools and file system conventions,
+if not you may find it easier to start by installing a binary Windows
+package. The binary packages work with the Windows file system conventions.
+
+<P>
+
+<H3><A NAME="SECTION00035100000000000000">
+2.5.1 Getting started with Cygwin</A>
+</H3>
+
+<P>
+SDCC is typically distributed as a tarred/gzipped file (.tgz). This
+is a packed file similar to a .zip file. Cygwin includes the tools
+you will need to unpack the SDCC distribution (tar and gzip). To unpack
+it, simply follow the instructions under the Linux/Unix install section.
+Before you do this you need to learn how to start a cygwin shell and
+some of the basic commands used to move files, change directory, run
+commands and so on. The change directory command is <I><B>``cd''</B></I>,
+the move command is <I><B>``mv''</B></I>. To print the current
+working directory, type <I><B>``pwd''</B></I>. To make a directory,
+use <I><B>``mkdir''</B></I>.
+
+<P>
+There are some basic differences between Unix and Windows file systems
+you should understand. When you type in directory paths, Unix and
+the Cygwin bash prompt uses forward slashes '/' between directories
+while Windows traditionally uses '&#92;' backward slashes.
+So when you work at the Cygwin bash prompt, you will need to use the
+forward '/' slashes. Unix does not have a concept of drive letters,
+such as ``c:``, instead all files systems attach and appear
+as directories.
+
+<P>
+
+<H3><A NAME="SECTION00035200000000000000">
+2.5.2 Running SDCC as Native Compiled Executables</A>
+</H3>
+
+<P>
+If you use the pre-compiled binaries, the install directories for
+the libraries and header files may need to be specified on the sdcc
+command line like this: <I><B>&#34;sdcc -L c:&#92;usr&#92;local&#92;sdcc&#92;lib&#92;small
+-I c:&#92;usr&#92;local&#92;sdcc&#92;include
+test.c&#34;</B></I> if you are running outside of a Unix bash shell.
+
+<P>
+If you have successfully installed and compiled SDCC with the Cygwin
+package, it is possible to compile into native .exe files by using
+the additional makefiles included for this purpose. For example, with
+the Borland 32-bit compiler you would run <I><B>&#34;make
+-f Makefile.bcc&#34;</B></I>. A command line version of the Borland
+32-bit compiler can be downloaded from the Inprise web site.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html431"
+ HREF="node16.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html425"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html419"
+ HREF="node14.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html427"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html429"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html432"
+ HREF="node16.html">2.6 SDCC on Other</A>
+<B> Up:</B> <A NAME="tex2html426"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html420"
+ HREF="node14.html">2.4 Install Trouble-shooting</A>
+ &nbsp <B>  <A NAME="tex2html428"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html430"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node16.html b/doc/sdccman.html/node16.html
new file mode 100644 (file)
index 0000000..4d1ab70
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>2.6 SDCC on Other Platforms</TITLE>
+<META NAME="description" CONTENT="2.6 SDCC on Other Platforms">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node17.html">
+<LINK REL="previous" HREF="node15.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node17.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html447"
+ HREF="node17.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html441"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html435"
+ HREF="node15.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html443"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html445"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html448"
+ HREF="node17.html">2.7 Advanced Install Options</A>
+<B> Up:</B> <A NAME="tex2html442"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html436"
+ HREF="node15.html">2.5 Additional Information for</A>
+ &nbsp <B>  <A NAME="tex2html444"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html446"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00036000000000000000">
+2.6 SDCC on Other Platforms</A>
+</H2>
+
+<P>
+
+<UL>
+<LI><B>FreeBSD and other non-GNU Unixes</B> - Make sure the GNU make
+is installed as the default make tool.</LI>
+<LI>SDCC has been ported to run under a variety of operating systems and
+processors. If you can run GNU GCC/make then chances are good SDCC
+can be compiled and run on your system.</LI>
+</UL>
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node17.html b/doc/sdccman.html/node17.html
new file mode 100644 (file)
index 0000000..1d146b1
--- /dev/null
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>2.7 Advanced Install Options</TITLE>
+<META NAME="description" CONTENT="2.7 Advanced Install Options">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node18.html">
+<LINK REL="previous" HREF="node16.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node18.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html461"
+ HREF="node18.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html455"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html449"
+ HREF="node16.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html457"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html459"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html462"
+ HREF="node18.html">2.8 Components of SDCC</A>
+<B> Up:</B> <A NAME="tex2html456"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html450"
+ HREF="node16.html">2.6 SDCC on Other</A>
+ &nbsp <B>  <A NAME="tex2html458"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html460"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00037000000000000000">
+2.7 Advanced Install Options</A>
+</H2>
+
+<P>
+The ``configure'' command has several options. The most commonly
+used option is -prefix=&lt;directory name&gt;, where &lt;directory name&gt; is
+the final location for the sdcc executables and libraries, (default
+location is /usr/local). The installation process will create the
+following directory structure under the &lt;directory name&gt; specified
+(if they do not already exist). 
+<BR>
+
+<BR>
+bin/ - binary exectables (add to PATH environment variable)
+<BR>
+bin/share/
+<BR>
+bin/share/sdcc/include/ - include header files
+<BR>
+bin/share/sdcc/lib/
+<BR>
+bin/share/sdcc/lib/small/ - Object &amp; library files for small model
+library
+<BR>
+bin/share/sdcc/lib/large/ - Object &amp; library files for large model
+library
+<BR>
+bin/share/sdcc/lib/ds390/ - Object &amp; library files forDS80C390 library
+<BR>
+
+<BR>
+The command <I><B>''./configure -prefix=/usr/local''</B></I>
+will configure the compiler to be installed in directory /usr/local.
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node18.html b/doc/sdccman.html/node18.html
new file mode 100644 (file)
index 0000000..eb14aa9
--- /dev/null
@@ -0,0 +1,231 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>2.8 Components of SDCC</TITLE>
+<META NAME="description" CONTENT="2.8 Components of SDCC">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="previous" HREF="node17.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node19.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html473"
+ HREF="node19.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html467"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html463"
+ HREF="node17.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html469"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html471"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html474"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Up:</B> <A NAME="tex2html468"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html464"
+ HREF="node17.html">2.7 Advanced Install Options</A>
+ &nbsp <B>  <A NAME="tex2html470"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html472"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html475"
+ HREF="node18.html#SECTION00038100000000000000">2.8.1 sdcc - The Compiler</A>
+<LI><A NAME="tex2html476"
+ HREF="node18.html#SECTION00038200000000000000">2.8.2 sdcpp (C-Preprocessor)</A>
+<LI><A NAME="tex2html477"
+ HREF="node18.html#SECTION00038300000000000000">2.8.3 asx8051, as-z80, as-gbz80, aslink, link-z80, link-gbz80 (The Assemblers
+and Linkage Editors)</A>
+<LI><A NAME="tex2html478"
+ HREF="node18.html#SECTION00038400000000000000">2.8.4 s51 - Simulator</A>
+<LI><A NAME="tex2html479"
+ HREF="node18.html#SECTION00038500000000000000">2.8.5 sdcdb - Source Level Debugger</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H2><A NAME="SECTION00038000000000000000">
+2.8 Components of SDCC</A>
+</H2>
+
+<P>
+SDCC is not just a compiler, but a collection of tools by various
+developers. These include linkers, assemblers, simulators and other
+components. Here is a summary of some of the components. Note that
+the included simulator and assembler have separate documentation which
+you can find in the source package in their respective directories.
+As SDCC grows to include support for other processors, other packages
+from various developers are included and may have their own sets of
+documentation.
+<BR>
+
+<BR>
+You might want to look at the files which are installed in &lt;installdir&gt;.
+At the time of this writing, we find the following programs:
+<BR>
+<BR>
+In &lt;installdir&gt;/bin:
+
+<P>
+
+<UL>
+<LI>sdcc - The compiler.</LI>
+<LI>sdcpp - The C preprocessor.</LI>
+<LI>asx8051 - The assembler for 8051 type processors.</LI>
+<LI>as-z80<B>,</B> as-gbz80 - The Z80 and GameBoy Z80 assemblers.</LI>
+<LI>aslink -The linker for 8051 type processors.</LI>
+<LI>link-z80<B>,</B> link-gbz80 - The Z80 and GameBoy Z80 linkers.</LI>
+<LI>s51 - The ucSim 8051 simulator.</LI>
+<LI>sdcdb - The source debugger.</LI>
+<LI>packihx - A tool to pack Intel hex files.</LI>
+</UL>
+In &lt;installdir&gt;/share/sdcc/include
+
+<P>
+
+<UL>
+<LI>the include files</LI>
+</UL>
+In &lt;installdir&gt;/share/sdcc/lib
+
+<P>
+
+<UL>
+<LI>the sources of the runtime library and the subdirs small large and
+ds390 with the precompiled relocatables.</LI>
+</UL>
+In &lt;installdir&gt;/share/sdcc/doc
+
+<P>
+
+<UL>
+<LI>the documentation</LI>
+</UL>
+As development for other processors proceeds, this list will expand
+to include executables to support processors like AVR, PIC, etc.
+
+<P>
+
+<H3><A NAME="SECTION00038100000000000000">
+2.8.1 sdcc - The Compiler</A>
+</H3>
+
+<P>
+This is the actual compiler, it in turn uses the c-preprocessor and
+invokes the assembler and linkage editor.
+
+<P>
+
+<H3><A NAME="SECTION00038200000000000000">
+2.8.2 sdcpp (C-Preprocessor)</A>
+</H3>
+
+<P>
+The preprocessor is a modified version of the GNU preprocessor. The
+C preprocessor is used to pull in #include sources, process #ifdef
+statements, #defines and so on.
+
+<P>
+
+<H3><A NAME="SECTION00038300000000000000">
+2.8.3 asx8051, as-z80, as-gbz80, aslink, link-z80, link-gbz80 (The Assemblers
+and Linkage Editors)</A>
+</H3>
+
+<P>
+This is retargettable assembler &amp; linkage editor, it was developed
+by Alan Baldwin. John Hartman created the version for 8051, and I
+(Sandeep) have made some enhancements and bug fixes for it to work
+properly with the SDCC.
+
+<P>
+
+<H3><A NAME="SECTION00038400000000000000">
+2.8.4 s51 - Simulator</A>
+</H3>
+
+<P>
+S51 is a freeware, opensource simulator developed by Daniel Drotos
+( mailto:drdani@mazsola.iit.uni-miskolc.hu). The simulator is
+built as part of the build process. For more information visit Daniel's
+website at:  http://mazsola.iit.uni-miskolc.hu/&nbsp;drdani/embedded/s51
+.
+
+<P>
+
+<H3><A NAME="SECTION00038500000000000000">
+2.8.5 sdcdb - Source Level Debugger</A>
+</H3>
+
+<P>
+Sdcdb is the companion source level debugger. The current version
+of the debugger uses Daniel's Simulator S51, but can be easily changed
+to use other simulators.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html473"
+ HREF="node19.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html467"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html463"
+ HREF="node17.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html469"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html471"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html474"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Up:</B> <A NAME="tex2html468"
+ HREF="node10.html">2. Installation</A>
+<B> Previous:</B> <A NAME="tex2html464"
+ HREF="node17.html">2.7 Advanced Install Options</A>
+ &nbsp <B>  <A NAME="tex2html470"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html472"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node19.html b/doc/sdccman.html/node19.html
new file mode 100644 (file)
index 0000000..c86e282
--- /dev/null
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3. Using SDCC</TITLE>
+<META NAME="description" CONTENT="3. Using SDCC">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node38.html">
+<LINK REL="previous" HREF="node10.html">
+<LINK REL="up" HREF="sdccman.html">
+<LINK REL="next" HREF="node20.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html492"
+ HREF="node20.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html486"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html480"
+ HREF="node18.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html488"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html490"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html493"
+ HREF="node20.html">3.1 Compiling</A>
+<B> Up:</B> <A NAME="tex2html487"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html481"
+ HREF="node18.html">2.8 Components of SDCC</A>
+ &nbsp <B>  <A NAME="tex2html489"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html491"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00040000000000000000">
+3. Using SDCC</A>
+</H1>
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html494"
+ HREF="node20.html">3.1 Compiling</A>
+<UL>
+<LI><A NAME="tex2html495"
+ HREF="node20.html#SECTION00041100000000000000">3.1.1 Single Source File Projects</A>
+<LI><A NAME="tex2html496"
+ HREF="node20.html#SECTION00041200000000000000">3.1.2 Projects with Multiple Source Files</A>
+<LI><A NAME="tex2html497"
+ HREF="node20.html#SECTION00041300000000000000">3.1.3 Projects with Additional Libraries</A>
+</UL>
+<LI><A NAME="tex2html498"
+ HREF="node21.html">3.2 Command Line Options</A>
+<UL>
+<LI><A NAME="tex2html499"
+ HREF="node21.html#SECTION00042100000000000000">3.2.1 Processor Selection Options</A>
+<LI><A NAME="tex2html500"
+ HREF="node21.html#SECTION00042200000000000000">3.2.2 Preprocessor Options</A>
+<LI><A NAME="tex2html501"
+ HREF="node21.html#SECTION00042300000000000000">3.2.3 Linker Options</A>
+<LI><A NAME="tex2html502"
+ HREF="node21.html#SECTION00042400000000000000">3.2.4 MCS51 Options</A>
+<LI><A NAME="tex2html503"
+ HREF="node21.html#SECTION00042500000000000000">3.2.5 DS390 Options</A>
+<LI><A NAME="tex2html504"
+ HREF="node21.html#SECTION00042600000000000000">3.2.6 Optimization Options</A>
+<LI><A NAME="tex2html505"
+ HREF="node21.html#SECTION00042700000000000000">3.2.7 Other Options</A>
+<LI><A NAME="tex2html506"
+ HREF="node21.html#SECTION00042800000000000000">3.2.8 Intermediate Dump Options</A>
+</UL>
+<LI><A NAME="tex2html507"
+ HREF="node22.html">3.3 MCS51/DS390 Storage Class Language Extensions</A>
+<UL>
+<LI><A NAME="tex2html508"
+ HREF="node22.html#SECTION00043100000000000000">3.3.1 xdata</A>
+<LI><A NAME="tex2html509"
+ HREF="node22.html#SECTION00043200000000000000">3.3.2 data</A>
+<LI><A NAME="tex2html510"
+ HREF="node22.html#SECTION00043300000000000000">3.3.3 idata</A>
+<LI><A NAME="tex2html511"
+ HREF="node22.html#SECTION00043400000000000000">3.3.4 bit</A>
+<LI><A NAME="tex2html512"
+ HREF="node22.html#SECTION00043500000000000000">3.3.5 sfr / sbit</A>
+</UL>
+<LI><A NAME="tex2html513"
+ HREF="node23.html">3.4 Pointers</A>
+<LI><A NAME="tex2html514"
+ HREF="node24.html">3.5 Parameters &amp; Local Variables</A>
+<LI><A NAME="tex2html515"
+ HREF="node25.html">3.6 Overlaying</A>
+<LI><A NAME="tex2html516"
+ HREF="node26.html">3.7 Interrupt Service Routines</A>
+<LI><A NAME="tex2html517"
+ HREF="node27.html">3.8 Critical Functions</A>
+<LI><A NAME="tex2html518"
+ HREF="node28.html">3.9 Naked Functions</A>
+<LI><A NAME="tex2html519"
+ HREF="node29.html">3.10 Functions using private banks</A>
+<LI><A NAME="tex2html520"
+ HREF="node30.html">3.11 Absolute Addressing</A>
+<LI><A NAME="tex2html521"
+ HREF="node31.html">3.12 Startup Code</A>
+<LI><A NAME="tex2html522"
+ HREF="node32.html">3.13 Inline Assembler Code</A>
+<LI><A NAME="tex2html523"
+ HREF="node33.html">3.14 int(16 bit) and long (32 bit) Support</A>
+<LI><A NAME="tex2html524"
+ HREF="node34.html">3.15 Floating Point Support</A>
+<LI><A NAME="tex2html525"
+ HREF="node35.html">3.16 MCS51 Memory Models</A>
+<LI><A NAME="tex2html526"
+ HREF="node36.html">3.17 DS390 Memory Models</A>
+<LI><A NAME="tex2html527"
+ HREF="node37.html">3.18 Defines Created by the Compiler</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node2.html b/doc/sdccman.html/node2.html
new file mode 100644 (file)
index 0000000..b51405c
--- /dev/null
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>1. Introduction</TITLE>
+<META NAME="description" CONTENT="1. Introduction">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node10.html">
+<LINK REL="previous" HREF="node1.html">
+<LINK REL="up" HREF="sdccman.html">
+<LINK REL="next" HREF="node3.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html215"
+ HREF="node3.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html209"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html203"
+ HREF="node1.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html211"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html213"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html216"
+ HREF="node3.html">1.1 About SDCC</A>
+<B> Up:</B> <A NAME="tex2html210"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html204"
+ HREF="node1.html">Contents</A>
+ &nbsp <B>  <A NAME="tex2html212"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html214"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00020000000000000000">
+1. Introduction</A>
+</H1>
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html217"
+ HREF="node3.html">1.1 About SDCC</A>
+<LI><A NAME="tex2html218"
+ HREF="node4.html">1.2 Open Source</A>
+<LI><A NAME="tex2html219"
+ HREF="node5.html">1.3 Typographic conventions</A>
+<LI><A NAME="tex2html220"
+ HREF="node6.html">1.4 Compatibility with previous versions</A>
+<LI><A NAME="tex2html221"
+ HREF="node7.html">1.5 System Requirements</A>
+<LI><A NAME="tex2html222"
+ HREF="node8.html">1.6 Other Resources</A>
+<LI><A NAME="tex2html223"
+ HREF="node9.html">1.7 Wishes for the future</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node20.html b/doc/sdccman.html/node20.html
new file mode 100644 (file)
index 0000000..52b85d9
--- /dev/null
@@ -0,0 +1,232 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.1 Compiling</TITLE>
+<META NAME="description" CONTENT="3.1 Compiling">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node21.html">
+<LINK REL="previous" HREF="node19.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node21.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html540"
+ HREF="node21.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html534"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html528"
+ HREF="node19.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html536"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html538"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html541"
+ HREF="node21.html">3.2 Command Line Options</A>
+<B> Up:</B> <A NAME="tex2html535"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html529"
+ HREF="node19.html">3. Using SDCC</A>
+ &nbsp <B>  <A NAME="tex2html537"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html539"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html542"
+ HREF="node20.html#SECTION00041100000000000000">3.1.1 Single Source File Projects</A>
+<LI><A NAME="tex2html543"
+ HREF="node20.html#SECTION00041200000000000000">3.1.2 Projects with Multiple Source Files</A>
+<LI><A NAME="tex2html544"
+ HREF="node20.html#SECTION00041300000000000000">3.1.3 Projects with Additional Libraries</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H2><A NAME="SECTION00041000000000000000">
+3.1 Compiling</A>
+</H2>
+
+<P>
+
+<H3><A NAME="SECTION00041100000000000000">
+3.1.1 Single Source File Projects</A>
+</H3>
+
+<P>
+For single source file 8051 projects the process is very simple. Compile
+your programs with the following command <I><B>&#34;sdcc
+sourcefile.c&#34;.</B></I> This will compile, assemble and link your
+source file. Output files are as follows
+<BR>
+
+<BR>
+sourcefile.asm - Assembler source file created by the compiler
+<BR>
+sourcefile.lst - Assembler listing file created by the Assembler
+<BR>
+sourcefile.rst - Assembler listing file updated with linkedit information,
+created by linkage editor
+<BR>
+sourcefile.sym - symbol listing for the sourcefile, created by the
+assembler
+<BR>
+sourcefile.rel - Object file created by the assembler, input to Linkage
+editor
+<BR>
+sourcefile.map - The memory map for the load module, created by the
+Linker
+<BR>
+sourcefile.ihx - The load module in Intel hex format (you can select
+the Motorola S19 format with -out-fmt-s19)
+<BR>
+sourcefile.cdb - An optional file (with -debug) containing debug
+information
+<BR>
+
+<P>
+
+<H3><A NAME="SECTION00041200000000000000">
+3.1.2 Projects with Multiple Source Files</A>
+</H3>
+
+<P>
+SDCC can compile only ONE file at a time. Let us for example assume
+that you have a project containing the following files:
+<BR>
+
+<BR>
+foo1.c (contains some functions)
+<BR>
+foo2.c (contains some more functions)
+<BR>
+foomain.c (contains more functions and the function main)
+<BR>
+
+<BR>
+The first two files will need to be compiled separately with the commands:
+
+<BR>
+
+<BR>
+<I><B>sdcc&nbsp;-c&nbsp;foo1.c</B></I>
+<BR>
+<I><B>sdcc&nbsp;-c&nbsp;foo2.c</B></I>
+<BR>
+
+<BR>
+Then compile the source file containing the <I>main()</I> function
+and link the files together with the following command: 
+<BR>
+
+<BR>
+<I><B>sdcc&nbsp;foomain.c&nbsp;foo1.rel&nbsp;foo2.rel</B></I>
+<BR>
+
+<BR>
+Alternatively, <I>foomain.c</I> can be separately compiled as well:
+<BR>
+<BR>
+<I><B>sdcc&nbsp;-c&nbsp;foomain.c</B></I>
+<BR>
+<I><B>sdcc foomain.rel foo1.rel foo2.rel</B></I>
+<BR>
+<BR>
+The file containing the <I>main()</I> function <SMALL>MUST</SMALL>
+be the <SMALL>FIRST</SMALL> file specified in the command line, since the
+linkage editor processes file in the order they are presented to it.
+
+<P>
+
+<H3><A NAME="SECTION00041300000000000000">
+3.1.3 Projects with Additional Libraries</A>
+</H3>
+
+<P>
+Some reusable routines may be compiled into a library, see the documentation
+for the assembler and linkage editor (which are in &lt;installdir&gt;/share/sdcc/doc)
+for how to create a <I>.lib</I> library file. Libraries created in
+this manner can be included in the command line. Make sure you include
+the -L &lt;library-path&gt; option to tell the linker where to look for
+these files if they are not in the current directory. Here is an example,
+assuming you have the source file <I>foomain.c</I> and a library <I>foolib.lib</I>
+in the directory <I>mylib</I> (if that is not the same as your current
+project):
+<BR>
+
+<BR>
+<I><B>sdcc foomain.c foolib.lib -L mylib</B></I>
+<BR>
+<BR>
+Note here that <I>mylib</I> must be an absolute path name.
+<BR>
+
+<BR>
+The most efficient way to use libraries is to keep seperate modules
+in seperate source files. The lib file now should name all the modules.rel
+files. For an example see the standard library file <I>libsdcc.lib</I>
+in the directory &lt;installdir&gt;/share/lib/small.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html540"
+ HREF="node21.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html534"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html528"
+ HREF="node19.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html536"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html538"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html541"
+ HREF="node21.html">3.2 Command Line Options</A>
+<B> Up:</B> <A NAME="tex2html535"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html529"
+ HREF="node19.html">3. Using SDCC</A>
+ &nbsp <B>  <A NAME="tex2html537"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html539"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node21.html b/doc/sdccman.html/node21.html
new file mode 100644 (file)
index 0000000..f3614e9
--- /dev/null
@@ -0,0 +1,435 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.2 Command Line Options</TITLE>
+<META NAME="description" CONTENT="3.2 Command Line Options">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node22.html">
+<LINK REL="previous" HREF="node20.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node22.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html557"
+ HREF="node22.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html551"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html545"
+ HREF="node20.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html553"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html555"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html558"
+ HREF="node22.html">3.3 MCS51/DS390 Storage Class</A>
+<B> Up:</B> <A NAME="tex2html552"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html546"
+ HREF="node20.html">3.1 Compiling</A>
+ &nbsp <B>  <A NAME="tex2html554"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html556"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html559"
+ HREF="node21.html#SECTION00042100000000000000">3.2.1 Processor Selection Options</A>
+<LI><A NAME="tex2html560"
+ HREF="node21.html#SECTION00042200000000000000">3.2.2 Preprocessor Options</A>
+<LI><A NAME="tex2html561"
+ HREF="node21.html#SECTION00042300000000000000">3.2.3 Linker Options</A>
+<LI><A NAME="tex2html562"
+ HREF="node21.html#SECTION00042400000000000000">3.2.4 MCS51 Options</A>
+<LI><A NAME="tex2html563"
+ HREF="node21.html#SECTION00042500000000000000">3.2.5 DS390 Options</A>
+<LI><A NAME="tex2html564"
+ HREF="node21.html#SECTION00042600000000000000">3.2.6 Optimization Options</A>
+<LI><A NAME="tex2html565"
+ HREF="node21.html#SECTION00042700000000000000">3.2.7 Other Options</A>
+<LI><A NAME="tex2html566"
+ HREF="node21.html#SECTION00042800000000000000">3.2.8 Intermediate Dump Options</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H2><A NAME="SECTION00042000000000000000">
+3.2 Command Line Options</A>
+</H2>
+
+<P>
+
+<H3><A NAME="SECTION00042100000000000000">
+3.2.1 Processor Selection Options</A>
+</H3>
+
+<P>
+
+<UL>
+<LI>[<B>-mmcs51</B>]Generate code for the MCS51 (8051) family of processors.
+This is the default processor target.</LI>
+<LI>[<B>-mds390</B>]Generate code for the DS80C390 processor.</LI>
+<LI>[<B>-mz80</B>]Generate code for the Z80 family of processors.</LI>
+<LI>[<B>-mgbz80</B>]Generate code for the GameBoy Z80 processor.</LI>
+<LI>[<B>-mavr</B>]Generate code for the Atmel AVR processor(In development,
+not complete).</LI>
+<LI>[<B>-mpic14</B>]Generate code for the PIC 14-bit processors(In development,
+not complete).</LI>
+<LI>[<B>-mtlcs900h</B>]Generate code for the Toshiba TLCS-900H processor(In
+development, not complete).</LI>
+</UL>
+<P>
+
+<H3><A NAME="SECTION00042200000000000000">
+3.2.2 Preprocessor Options</A>
+</H3>
+
+<P>
+
+<UL>
+<LI>[<B>-I&lt;path&gt;</B>]The additional location where the pre processor
+will look for &lt;..h&gt; or ``..h'' files.</LI>
+<LI>[<B>-D&lt;macro[=value]&gt;</B>]Command line definition of macros.
+Passed to the pre processor.</LI>
+<LI>[<B>-M</B>]Tell the preprocessor to output a rule suitable for make
+describing the dependencies of each object file. For each source file,
+the preprocessor outputs one make-rule whose target is the object
+file name for that source file and whose dependencies are all the
+files `#include'd in it. This rule may be a single line or may be
+continued with `&#92;'-newline if it is long. The list
+of rules is printed on standard output instead of the preprocessed
+C program. `-M' implies `-E'.</LI>
+<LI>[<B>-C</B>]Tell the preprocessor not to discard comments. Used with
+the `-E' option.</LI>
+<LI>[<B>-MM</B>]Like `-M' but the output mentions only the user header
+files included with `#include ``file&#34;'. System header
+files included with `#include &lt;file&gt;' are omitted.</LI>
+<LI>[<B>-Aquestion(answer)</B>]Assert the answer answer for question,
+in case it is tested with a preprocessor conditional such as `#if
+#question(answer)'. `-A-' disables the standard assertions that normally
+describe the target machine.</LI>
+<LI>[<B>-Aquestion</B>](answer) Assert the answer answer for question,
+in case it is tested with a preprocessor conditional such as `#if
+#question(answer)'. `-A-' disables the standard assertions that normally
+describe the target machine.</LI>
+<LI>[<B>-Umacro</B>]Undefine macro macro. `-U' options are evaluated
+after all `-D' options, but before any `-include' and `-imacros' options.</LI>
+<LI>[<B>-dM</B>]Tell the preprocessor to output only a list of the macro
+definitions that are in effect at the end of preprocessing. Used with
+the `-E' option.</LI>
+<LI>[<B>-dD</B>]Tell the preprocessor to pass all macro definitions
+into the output, in their proper sequence in the rest of the output.</LI>
+<LI>[<B>-dN</B>]Like `-dD' except that the macro arguments and contents
+are omitted. Only `#define name' is included in the output.</LI>
+</UL>
+<P>
+
+<H3><A NAME="SECTION00042300000000000000">
+3.2.3 Linker Options</A>
+</H3>
+
+<P>
+
+<UL>
+<LI>[<B>-L&nbsp;-lib-path</B>]&lt;absolute path to additional libraries&gt; This
+option is passed to the linkage editor's additional libraries search
+path. The path name must be absolute. Additional library files may
+be specified in the command line. See section Compiling programs for
+more details.</LI>
+<LI>[<B>-xram-loc</B>&lt;Value&gt;]The start location of the external ram,
+default value is 0. The value entered can be in Hexadecimal or Decimal
+format, e.g.: -xram-loc 0x8000 or -xram-loc 32768.</LI>
+<LI>[<B>-code-loc</B>&lt;Value&gt;]The start location of the code segment,
+default value 0. Note when this option is used the interrupt vector
+table is also relocated to the given address. The value entered can
+be in Hexadecimal or Decimal format, e.g.: -code-loc 0x8000 or -code-loc
+32768.</LI>
+<LI>[<B>-stack-loc</B>&lt;Value&gt;]The initial value of the stack pointer.
+The default value of the stack pointer is 0x07 if only register bank
+0 is used, if other register banks are used then the stack pointer
+is initialized to the location above the highest register bank used.
+eg. if register banks 1 &amp; 2 are used the stack pointer will default
+to location 0x18. The value entered can be in Hexadecimal or Decimal
+format, eg. -stack-loc 0x20 or -stack-loc 32. If all four register
+banks are used the stack will be placed after the data segment (equivalent
+to -stack-after-data)</LI>
+<LI>[<B>-stack-after-data</B>]This option will cause the stack to be
+located in the internal ram after the data segment.</LI>
+<LI>[<B>-data-loc</B>&lt;Value&gt;]The start location of the internal ram
+data segment, the default value is 0x30.The value entered can be in
+Hexadecimal or Decimal format, eg. -data-loc 0x20 or -data-loc 32.</LI>
+<LI>[<B>-idata-loc</B>&lt;Value&gt;]The start location of the indirectly
+addressable internal ram, default value is 0x80. The value entered
+can be in Hexadecimal or Decimal format, eg. -idata-loc 0x88 or -idata-loc
+136.</LI>
+<LI>[<B>-out-fmt-ihx</B>]The linker output (final object code) is in
+Intel Hex format. (This is the default option).</LI>
+<LI>[<B>-out-fmt-s19</B>]The linker output (final object code) is in
+Motorola S19 format.</LI>
+</UL>
+<P>
+
+<H3><A NAME="SECTION00042400000000000000">
+3.2.4 MCS51 Options</A>
+</H3>
+
+<P>
+
+<UL>
+<LI>[<B>-model-large</B>]Generate code for Large model programs see
+section Memory Models for more details. If this option is used all
+source files in the project should be compiled with this option. In
+addition the standard library routines are compiled with small model,
+they will need to be recompiled.</LI>
+<LI>[<B>-model-small</B>]Generate code for Small Model programs see
+section Memory Models for more details. This is the default model.</LI>
+</UL>
+<P>
+
+<H3><A NAME="SECTION00042500000000000000">
+3.2.5 DS390 Options</A>
+</H3>
+
+<P>
+
+<UL>
+<LI>[<B>-model-flat24</B>]Generate 24-bit flat mode code. This is the
+one and only that the ds390 code generator supports right now and
+is default when using <I>-mds390</I>. See section Memory Models for
+more details.</LI>
+<LI>[<B>-stack-10bit</B>]Generate code for the 10 bit stack mode of
+the Dallas DS80C390 part. This is the one and only that the ds390
+code generator supports right now and is default when using <I>-mds390</I>.
+In this mode, the stack is located in the lower 1K of the internal
+RAM, which is mapped to 0x400000. Note that the support is incomplete,
+since it still uses a single byte as the stack pointer. This means
+that only the lower 256 bytes of the potential 1K stack space will
+actually be used. However, this does allow you to reclaim the precious
+256 bytes of low RAM for use for the DATA and IDATA segments. The
+compiler will not generate any code to put the processor into 10 bit
+stack mode. It is important to ensure that the processor is in this
+mode before calling any re-entrant functions compiled with this option.
+In principle, this should work with the <I>-stack-auto</I> option,
+but that has not been tested. It is incompatible with the <I>-xstack</I>
+option. It also only makes sense if the processor is in 24 bit contiguous
+addressing mode (see the <I>-model-flat24 option</I>).</LI>
+</UL>
+<P>
+
+<H3><A NAME="SECTION00042600000000000000">
+3.2.6 Optimization Options</A>
+</H3>
+
+<P>
+
+<UL>
+<LI>[<B>-nogcse</B>]Will not do global subexpression elimination, this
+option may be used when the compiler creates undesirably large stack/data
+spaces to store compiler temporaries. A warning message will be generated
+when this happens and the compiler will indicate the number of extra
+bytes it allocated. It recommended that this option NOT be used, #pragma&nbsp;NOGCSE
+can be used to turn off global subexpression elimination for a given
+function only.</LI>
+<LI>[<B>-noinvariant</B>]Will not do loop invariant optimizations,
+this may be turned off for reasons explained for the previous option.
+For more details of loop optimizations performed see section Loop
+Invariants.It recommended that this option NOT be used, #pragma&nbsp;NOINVARIANT
+can be used to turn off invariant optimizations for a given function
+only.</LI>
+<LI>[<B>-noinduction</B>]Will not do loop induction optimizations,
+see section strength reduction for more details.It is recommended
+that this option is NOT used, #pragma&nbsp;NOINDUCTION can be used to
+turn off induction optimizations for a given function only.</LI>
+<LI>[<B>-nojtbound</B>] Will not generate boundary condition check
+when switch statements are implemented using jump-tables. See section
+Switch Statements for more details. It is recommended that this option
+is NOT used, #pragma&nbsp;NOJTBOUND can be used to turn off boundary
+checking for jump tables for a given function only.</LI>
+<LI>[<B>-noloopreverse</B>]Will not do loop reversal optimization.</LI>
+</UL>
+<P>
+
+<H3><A NAME="SECTION00042700000000000000">
+3.2.7 Other Options</A>
+</H3>
+
+<P>
+
+<UL>
+<LI>[<B>-c&nbsp;-compile-only</B>]will compile and assemble the source,
+but will not call the linkage editor.</LI>
+<LI>[<B>-E</B>]Run only the C preprocessor. Preprocess all the C source
+files specified and output the results to standard output.</LI>
+<LI>[<B>-stack-auto</B>]All functions in the source file will be compiled
+as <I>reentrant</I>, i.e. the parameters and local variables will
+be allocated on the stack. see section Parameters and Local Variables
+for more details. If this option is used all source files in the project
+should be compiled with this option. </LI>
+<LI>[<B>-xstack</B>]Uses a pseudo stack in the first 256 bytes in the
+external ram for allocating variables and passing parameters. See
+section on external stack for more details.</LI>
+<LI>[<B>-callee-saves</B>]<B>function1[,function2][,function3]....</B>
+The compiler by default uses a caller saves convention for register
+saving across function calls, however this can cause unneccessary
+register pushing &amp; popping when calling small functions from larger
+functions. This option can be used to switch the register saving convention
+for the function names specified. The compiler will not save registers
+when calling these functions, no extra code will be generated at the
+entry &amp; exit for these functions to save &amp; restore the registers
+used by these functions, this can SUBSTANTIALLY reduce code &amp; improve
+run time performance of the generated code. In the future the compiler
+(with interprocedural analysis) will be able to determine the appropriate
+scheme to use for each function call. DO NOT use this option for built-in
+functions such as _muluint..., if this option is used for a library
+function the appropriate library function needs to be recompiled with
+the same option. If the project consists of multiple source files
+then all the source file should be compiled with the same -callee-saves
+option string. Also see #pragma&nbsp;CALLEE-SAVES.</LI>
+<LI>[<B>-debug</B>]When this option is used the compiler will generate
+debug information, that can be used with the SDCDB. The debug information
+is collected in a file with .cdb extension. For more information see
+documentation for SDCDB.</LI>
+<LI>[<B><I>-regextend</I></B>] <I>This option is obsolete and isn't
+supported anymore.</I></LI>
+<LI>[<B><I>-noregparms</I></B>]<I>This option is obsolete and isn't
+supported anymore.</I></LI>
+<LI>[<B>-peep-file</B>&lt;filename&gt;]This option can be used to use additional
+rules to be used by the peep hole optimizer. See section Peep Hole
+optimizations for details on how to write these rules.</LI>
+<LI>[<B>-S</B>]Stop after the stage of compilation proper; do not assemble.
+The output is an assembler code file for the input file specified.</LI>
+<LI>[<B>-Wa_asmOption[,asmOption]</B>...]Pass the asmOption to
+the assembler.</LI>
+<LI>[<B>-Wl_linkOption[,linkOption]</B>...]Pass the linkOption
+to the linker.</LI>
+<LI>[<B>-int-long-reent</B>] Integer (16 bit) and long (32 bit) libraries
+have been compiled as reentrant. Note by default these libraries are
+compiled as non-reentrant. See section Installation for more details.</LI>
+<LI>[<B>-cyclomatic</B>]This option will cause the compiler to generate
+an information message for each function in the source file. The message
+contains some <I>important</I> information about the function. The
+number of edges and nodes the compiler detected in the control flow
+graph of the function, and most importantly the <I>cyclomatic complexity</I>
+see section on Cyclomatic Complexity for more details.</LI>
+<LI>[<B>-float-reent</B>] Floating point library is compiled as reentrant.See
+section Installation for more details.</LI>
+<LI>[<B>-nooverlay</B>] The compiler will not overlay parameters and
+local variables of any function, see section Parameters and local
+variables for more details.</LI>
+<LI>[<B>-main-return</B>]This option can be used when the code generated
+is called by a monitor program. The compiler will generate a 'ret'
+upon return from the 'main' function. The default option is to lock
+up i.e. generate a 'ljmp '.</LI>
+<LI>[<B>-no-peep</B>] Disable peep-hole optimization.</LI>
+<LI>[<B>-peep-asm</B>] Pass the inline assembler code through the peep
+hole optimizer. This can cause unexpected changes to inline assembler
+code, please go through the peephole optimizer rules defined in the
+source file tree '&lt;target&gt;/peeph.def' before using this option.</LI>
+<LI>[<B>-iram-size</B>&lt;Value&gt;]Causes the linker to check if the interal
+ram usage is within limits of the given value.</LI>
+<LI>[<B>-nostdincl</B>]This will prevent the compiler from passing
+on the default include path to the preprocessor.</LI>
+<LI>[<B>-nostdlib</B>]This will prevent the compiler from passing on
+the default library path to the linker.</LI>
+<LI>[<B>-verbose</B>]Shows the various actions the compiler is performing.</LI>
+<LI>[<B>-V</B>]Shows the actual commands the compiler is executing.</LI>
+</UL>
+<P>
+
+<H3><A NAME="SECTION00042800000000000000">
+3.2.8 Intermediate Dump Options</A>
+</H3>
+
+<P>
+The following options are provided for the purpose of retargetting
+and debugging the compiler. These provided a means to dump the intermediate
+code (iCode) generated by the compiler in human readable form at various
+stages of the compilation process. 
+
+<P>
+
+<UL>
+<LI>[<B>-dumpraw</B>]This option will cause the compiler to dump the
+intermediate code into a file of named <I>&lt;source filename&gt;.dumpraw</I>
+just after the intermediate code has been generated for a function,
+i.e. before any optimizations are done. The basic blocks at this stage
+ordered in the depth first number, so they may not be in sequence
+of execution.</LI>
+<LI>[<B>-dumpgcse</B>]Will create a dump of iCode's, after global subexpression
+elimination, into a file named <I>&lt;source filename&gt;.dumpgcse.</I></LI>
+<LI>[<B>-dumpdeadcode</B>]Will create a dump of iCode's, after deadcode
+elimination, into a file named <I>&lt;source filename&gt;.dumpdeadcode.</I></LI>
+<LI>[<B>-dumploop</B>]Will create a dump of iCode's, after loop optimizations,
+into a file named <I>&lt;source filename&gt;.dumploop.</I></LI>
+<LI>[<B>-dumprange</B>]Will create a dump of iCode's, after live range
+analysis, into a file named <I>&lt;source filename&gt;.dumprange.</I></LI>
+<LI>[<B>-dumlrange</B>]Will dump the life ranges for all symbols.</LI>
+<LI>[<B>-dumpregassign</B>]Will create a dump of iCode's, after register
+assignment, into a file named <I>&lt;source filename&gt;.dumprassgn.</I></LI>
+<LI>[<B>-dumplrange</B>]Will create a dump of the live ranges of iTemp's</LI>
+<LI>[<B>-dumpall</B>]Will cause all the above mentioned dumps to be
+created.</LI>
+</UL>
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html557"
+ HREF="node22.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html551"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html545"
+ HREF="node20.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html553"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html555"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html558"
+ HREF="node22.html">3.3 MCS51/DS390 Storage Class</A>
+<B> Up:</B> <A NAME="tex2html552"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html546"
+ HREF="node20.html">3.1 Compiling</A>
+ &nbsp <B>  <A NAME="tex2html554"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html556"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node22.html b/doc/sdccman.html/node22.html
new file mode 100644 (file)
index 0000000..a110bef
--- /dev/null
@@ -0,0 +1,198 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.3 MCS51/DS390 Storage Class Language Extensions</TITLE>
+<META NAME="description" CONTENT="3.3 MCS51/DS390 Storage Class Language Extensions">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node23.html">
+<LINK REL="previous" HREF="node21.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node23.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html579"
+ HREF="node23.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html573"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html567"
+ HREF="node21.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html575"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html577"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html580"
+ HREF="node23.html">3.4 Pointers</A>
+<B> Up:</B> <A NAME="tex2html574"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html568"
+ HREF="node21.html">3.2 Command Line Options</A>
+ &nbsp <B>  <A NAME="tex2html576"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html578"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html581"
+ HREF="node22.html#SECTION00043100000000000000">3.3.1 xdata</A>
+<LI><A NAME="tex2html582"
+ HREF="node22.html#SECTION00043200000000000000">3.3.2 data</A>
+<LI><A NAME="tex2html583"
+ HREF="node22.html#SECTION00043300000000000000">3.3.3 idata</A>
+<LI><A NAME="tex2html584"
+ HREF="node22.html#SECTION00043400000000000000">3.3.4 bit</A>
+<LI><A NAME="tex2html585"
+ HREF="node22.html#SECTION00043500000000000000">3.3.5 sfr / sbit</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H2><A NAME="SECTION00043000000000000000">
+3.3 MCS51/DS390 Storage Class Language Extensions</A>
+</H2>
+
+<P>
+In addition to the ANSI storage classes SDCC allows the following
+MCS51 specific storage classes.
+
+<P>
+
+<H3><A NAME="SECTION00043100000000000000">
+3.3.1 xdata</A>
+</H3>
+
+<P>
+Variables declared with this storage class will be placed in the extern
+RAM. This is the <B>default</B> storage class for Large Memory model,
+e.g.:
+<BR>
+
+<BR>
+<TT>xdata unsigned char xduc;</TT>
+
+<P>
+
+<H3><A NAME="SECTION00043200000000000000">
+3.3.2 data</A>
+</H3>
+
+<P>
+This is the <B>default</B> storage class for Small Memory model.
+Variables declared with this storage class will be allocated in the
+internal RAM, e.g.:
+<BR>
+
+<BR>
+<TT>data int iramdata;</TT>
+
+<P>
+
+<H3><A NAME="SECTION00043300000000000000">
+3.3.3 idata</A>
+</H3>
+
+<P>
+Variables declared with this storage class will be allocated into
+the indirectly addressable portion of the internal ram of a 8051,
+e.g.:
+<BR>
+
+<BR>
+<TT>idata int idi;</TT>
+
+<P>
+
+<H3><A NAME="SECTION00043400000000000000">
+3.3.4 bit</A>
+</H3>
+
+<P>
+This is a data-type and a storage class specifier. When a variable
+is declared as a bit, it is allocated into the bit addressable memory
+of 8051, e.g.:
+<BR>
+
+<BR>
+<TT>bit iFlag;</TT>
+
+<P>
+
+<H3><A NAME="SECTION00043500000000000000">
+3.3.5 sfr / sbit</A>
+</H3>
+
+<P>
+Like the bit keyword, <I>sfr / sbit</I> signifies both a data-type
+and storage class, they are used to describe the special function
+registers and special bit variables of a 8051, eg:
+<BR>
+
+<BR>
+<TT>sfr at 0x80 P0; /* special function register P0 at location
+0x80 */</TT>&nbsp;
+<BR>
+<TT>sbit at 0xd7 CY; /* CY (Carry Flag) */</TT>
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html579"
+ HREF="node23.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html573"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html567"
+ HREF="node21.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html575"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html577"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html580"
+ HREF="node23.html">3.4 Pointers</A>
+<B> Up:</B> <A NAME="tex2html574"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html568"
+ HREF="node21.html">3.2 Command Line Options</A>
+ &nbsp <B>  <A NAME="tex2html576"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html578"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node23.html b/doc/sdccman.html/node23.html
new file mode 100644 (file)
index 0000000..d408a4d
--- /dev/null
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.4 Pointers</TITLE>
+<META NAME="description" CONTENT="3.4 Pointers">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node24.html">
+<LINK REL="previous" HREF="node22.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node24.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html598"
+ HREF="node24.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html592"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html586"
+ HREF="node22.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html594"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html596"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html599"
+ HREF="node24.html">3.5 Parameters &amp; Local</A>
+<B> Up:</B> <A NAME="tex2html593"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html587"
+ HREF="node22.html">3.3 MCS51/DS390 Storage Class</A>
+ &nbsp <B>  <A NAME="tex2html595"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html597"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00044000000000000000">
+3.4 Pointers</A>
+</H2>
+
+<P>
+SDCC allows (via language extensions) pointers to explicitly point
+to any of the memory spaces of the 8051. In addition to the explicit
+pointers, the compiler also allows a <I>_generic</I> class of pointers
+which can be used to point to any of the memory spaces.
+<BR>
+
+<BR>
+Pointer declaration examples:
+<BR>
+
+<BR>
+<TT>/* pointer physically in xternal ram pointing to object
+in internal ram */ </TT>&nbsp;
+<BR>
+<TT>data unsigned char * xdata p;</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>/* pointer physically in code rom pointing to data in xdata
+space */ </TT>&nbsp;
+<BR>
+<TT>xdata unsigned char * code p;</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>/* pointer physically in code space pointing to data in
+code space */ </TT>&nbsp;
+<BR>
+<TT>code unsigned char * code p;</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>/* the folowing is a generic pointer physically located
+in xdata space */</TT>&nbsp;
+<BR>
+<TT>char * xdata p;</TT>
+<BR>
+
+<BR>
+Well you get the idea. 
+<BR>
+
+<BR>
+<I>For compatibility with the previous version of the compiler,
+the following syntax for pointer declaration is still supported but
+will disappear int the near future. </I>
+<BR>
+<BR>
+<TT><I>unsigned char _xdata *ucxdp; /* pointer to data
+in external ram */ </I></TT>&nbsp;
+<BR>
+<TT><I>unsigned char _data &nbsp;*ucdp ; /* pointer to data
+in internal ram */ </I></TT>&nbsp;
+<BR>
+<TT><I>unsigned char _code &nbsp;*uccp ; /* pointer to data
+in R/O code space */</I></TT>&nbsp;
+<BR>
+<TT><I>unsigned char _idata *uccp; &nbsp;/* pointer to upper
+128 bytes of ram */</I></TT>
+<BR>
+
+<BR>
+All unqualified pointers are treated as 3-byte (4-byte for the ds390)
+<I>generic</I> pointers. These type of pointers can also to be explicitly
+declared.
+<BR>
+
+<BR>
+<TT>unsigned char _generic *ucgp;</TT>
+<BR>
+
+<BR>
+The highest order byte of the <I>generic</I> pointers contains the
+data space information. Assembler support routines are called whenever
+data is stored or retrieved using <I>generic</I> pointers. These are
+useful for developing reusable library routines. Explicitly specifying
+the pointer type will generate the most efficient code. Pointers declared
+using a mixture of OLD and NEW style could have unpredictable results.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html598"
+ HREF="node24.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html592"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html586"
+ HREF="node22.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html594"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html596"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html599"
+ HREF="node24.html">3.5 Parameters &amp; Local</A>
+<B> Up:</B> <A NAME="tex2html593"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html587"
+ HREF="node22.html">3.3 MCS51/DS390 Storage Class</A>
+ &nbsp <B>  <A NAME="tex2html595"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html597"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node24.html b/doc/sdccman.html/node24.html
new file mode 100644 (file)
index 0000000..0d8c000
--- /dev/null
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.5 Parameters &amp; Local Variables</TITLE>
+<META NAME="description" CONTENT="3.5 Parameters &amp; Local Variables">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node25.html">
+<LINK REL="previous" HREF="node23.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node25.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html612"
+ HREF="node25.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html606"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html600"
+ HREF="node23.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html608"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html610"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html613"
+ HREF="node25.html">3.6 Overlaying</A>
+<B> Up:</B> <A NAME="tex2html607"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html601"
+ HREF="node23.html">3.4 Pointers</A>
+ &nbsp <B>  <A NAME="tex2html609"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html611"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00045000000000000000">
+3.5 Parameters &amp; Local Variables</A>
+</H2>
+
+<P>
+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). This in fact makes them
+<I>static</I> so by default functions are non-reentrant.
+
+<P>
+They can be placed on the stack either by using the <I>-stack-auto</I>
+compiler option or by using the <I>reentrant</I> keyword in the function
+declaration, e.g.:
+<BR>
+
+<BR>
+<TT>unsigned char foo(char i) reentrant </TT>&nbsp;
+<BR>
+<TT>{ </TT>&nbsp;
+<BR>
+<TT>... </TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>
+
+<BR>
+Since stack space on 8051 is limited, the <I>reentrant</I> keyword
+or the <I>-stack-auto</I> option should be used sparingly. Note that
+the reentrant keyword just means that the parameters &amp; local variables
+will be allocated to the stack, it <I>does not</I> mean that the function
+is register bank independent.
+<BR>
+
+<BR>
+Local variables can be assigned storage classes and absolute addresses,
+e.g.: 
+<BR>
+
+<BR>
+<TT>unsigned char foo() {</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;xdata unsigned char i;</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;bit bvar;</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;data at 0x31 unsiged char j;</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;... </TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+In the above example the variable <I>i</I> will be allocated in the
+external ram, <I>bvar</I> in bit addressable space and <I>j</I> in
+internal ram. When compiled with <I>-stack-auto</I> or when a function
+is declared as <I>reentrant</I> this can only be done for static variables.
+
+<P>
+Parameters however are not allowed any storage class, (storage classes
+for parameters will be ignored), their allocation is governed by the
+memory model in use, and the reentrancy options.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html612"
+ HREF="node25.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html606"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html600"
+ HREF="node23.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html608"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html610"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html613"
+ HREF="node25.html">3.6 Overlaying</A>
+<B> Up:</B> <A NAME="tex2html607"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html601"
+ HREF="node23.html">3.4 Pointers</A>
+ &nbsp <B>  <A NAME="tex2html609"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html611"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node25.html b/doc/sdccman.html/node25.html
new file mode 100644 (file)
index 0000000..24fb960
--- /dev/null
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.6 Overlaying</TITLE>
+<META NAME="description" CONTENT="3.6 Overlaying">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node26.html">
+<LINK REL="previous" HREF="node24.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node26.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html626"
+ HREF="node26.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html620"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html614"
+ HREF="node24.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html622"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html624"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html627"
+ HREF="node26.html">3.7 Interrupt Service Routines</A>
+<B> Up:</B> <A NAME="tex2html621"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html615"
+ HREF="node24.html">3.5 Parameters &amp; Local</A>
+ &nbsp <B>  <A NAME="tex2html623"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html625"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00046000000000000000">
+3.6 Overlaying</A>
+</H2>
+
+<P>
+For non-reentrant functions SDCC will try to reduce internal ram space
+usage by overlaying parameters and local variables of a function (if
+possible). Parameters and local variables of a function will be allocated
+to an overlayable segment if the function has <I>no other function
+calls and the function is non-reentrant and the memory model is small.</I>
+If an explicit storage class is specified for a local variable, it
+will NOT be overlayed.
+
+<P>
+Note that the compiler (not the linkage editor) makes the decision
+for overlaying the data items. Functions that are called from an interrupt
+service routine should be preceded by a #pragma&nbsp;NOOVERLAY if they
+are not reentrant.
+
+<P>
+Also note that the compiler does not do any processing of inline assembler
+code, so the compiler might incorrectly assign local variables and
+parameters of a function into the overlay segment if the inline assembler
+code calls other c-functions that might use the overlay. In that case
+the #pragma&nbsp;NOOVERLAY should be used.
+
+<P>
+Parameters and Local variables of functions that contain 16 or 32
+bit multiplication or division will NOT be overlayed since these are
+implemented using external functions, e.g.:
+<BR>
+
+<BR>
+<TT>#pragma SAVE </TT>&nbsp;
+<BR>
+<TT>#pragma NOOVERLAY </TT>&nbsp;
+<BR>
+<TT>void set_error(unsigned char errcd) </TT>&nbsp;
+<BR>
+<TT>{</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;P3 = errcd;</TT>&nbsp;
+<BR>
+<TT>} </TT>&nbsp;
+<BR>
+<TT>#pragma RESTORE </TT>&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>void some_isr () interrupt 2 using 1 </TT>&nbsp;
+<BR>
+<TT>{</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;...</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;set_error(10);</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;... </TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+In the above example the parameter <I>errcd</I> for the function <I>set_error</I>
+would be assigned to the overlayable segment if the #pragma&nbsp;NOOVERLAY
+was not present, this could cause unpredictable runtime behavior when
+called from an ISR. The #pragma&nbsp;NOOVERLAY ensures that the parameters
+and local variables for the function are NOT overlayed.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html626"
+ HREF="node26.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html620"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html614"
+ HREF="node24.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html622"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html624"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html627"
+ HREF="node26.html">3.7 Interrupt Service Routines</A>
+<B> Up:</B> <A NAME="tex2html621"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html615"
+ HREF="node24.html">3.5 Parameters &amp; Local</A>
+ &nbsp <B>  <A NAME="tex2html623"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html625"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node26.html b/doc/sdccman.html/node26.html
new file mode 100644 (file)
index 0000000..ad0afe2
--- /dev/null
@@ -0,0 +1,197 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.7 Interrupt Service Routines</TITLE>
+<META NAME="description" CONTENT="3.7 Interrupt Service Routines">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node27.html">
+<LINK REL="previous" HREF="node25.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node27.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html640"
+ HREF="node27.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html634"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html628"
+ HREF="node25.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html636"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html638"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html641"
+ HREF="node27.html">3.8 Critical Functions</A>
+<B> Up:</B> <A NAME="tex2html635"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html629"
+ HREF="node25.html">3.6 Overlaying</A>
+ &nbsp <B>  <A NAME="tex2html637"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html639"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00047000000000000000">
+3.7 Interrupt Service Routines</A>
+</H2>
+
+<P>
+SDCC allows interrupt service routines to be coded in C, with some
+extended keywords.
+<BR>
+
+<BR>
+<TT>void timer_isr (void) interrupt 2 using 1 </TT>&nbsp;
+<BR>
+<TT>{ </TT>&nbsp;
+<BR>
+<TT>.. </TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+The number following the <I>interrupt</I> keyword is the interrupt
+number this routine will service. The compiler will insert a call
+to this routine in the interrupt vector table for the interrupt number
+specified. The <I>using</I> keyword is used to tell the compiler to
+use the specified register bank (8051 specific) when generating code
+for this function. Note that when some function is called from an
+interrupt service routine it should be preceded by a #pragma&nbsp;NOOVERLAY
+if it is not reentrant. A special note here, int (16 bit) and long
+(32 bit) integer division, multiplication &amp; modulus operations are
+implemented using external support routines developed in ANSI-C, if
+an interrupt service routine needs to do any of these operations then
+the support routines (as mentioned in a following section) will have
+to be recompiled using the <I>-stack-auto</I> option and the source
+file will need to be compiled using the <I>-int-long-ren</I>t compiler
+option.
+
+<P>
+If you have multiple source files in your project, interrupt service
+routines can be present in any of them, but a prototype of the isr
+MUST be present or included in the file that contains the function
+<I>main</I>.
+
+<P>
+Interrupt Numbers and the corresponding address &amp; descriptions for
+the Standard 8051 are listed below. SDCC will automatically adjust
+the interrupt vector table to the maximum interrupt number specified.
+<BR>
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1">
+<TR><TD ALIGN="CENTER">Interrupt #</TD>
+<TD ALIGN="CENTER">Description</TD>
+<TD ALIGN="CENTER">Vector Address</TD>
+</TR>
+<TR><TD ALIGN="CENTER">0</TD>
+<TD ALIGN="CENTER">External 0</TD>
+<TD ALIGN="CENTER">0x0003</TD>
+</TR>
+<TR><TD ALIGN="CENTER">1</TD>
+<TD ALIGN="CENTER">Timer 0</TD>
+<TD ALIGN="CENTER">0x000B</TD>
+</TR>
+<TR><TD ALIGN="CENTER">2</TD>
+<TD ALIGN="CENTER">External 1</TD>
+<TD ALIGN="CENTER">0x0013</TD>
+</TR>
+<TR><TD ALIGN="CENTER">3</TD>
+<TD ALIGN="CENTER">Timer 1</TD>
+<TD ALIGN="CENTER">0x001B</TD>
+</TR>
+<TR><TD ALIGN="CENTER">4</TD>
+<TD ALIGN="CENTER">Serial</TD>
+<TD ALIGN="CENTER">0x0023</TD>
+</TR>
+</TABLE>
+<BR>
+
+<BR>
+If the interrupt service routine is defined without <I>using</I> a
+register bank or with register bank 0 (using 0), the compiler will
+save the registers used by itself on the stack upon entry and restore
+them at exit, however if such an interrupt service routine calls another
+function then the entire register bank will be saved on the stack.
+This scheme may be advantageous for small interrupt service routines
+which have low register usage.
+
+<P>
+If the interrupt service routine is defined to be using a specific
+register bank then only <I>a, b &amp; dptr</I> are save and restored,
+if such an interrupt service routine calls another function (using
+another register bank) then the entire register bank of the called
+function will be saved on the stack. This scheme is recommended for
+larger interrupt service routines.
+
+<P>
+Calling other functions from an interrupt service routine is not recommended,
+avoid it if possible.
+<BR>
+
+<BR>
+Also see the _naked modifier.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html640"
+ HREF="node27.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html634"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html628"
+ HREF="node25.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html636"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html638"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html641"
+ HREF="node27.html">3.8 Critical Functions</A>
+<B> Up:</B> <A NAME="tex2html635"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html629"
+ HREF="node25.html">3.6 Overlaying</A>
+ &nbsp <B>  <A NAME="tex2html637"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html639"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node27.html b/doc/sdccman.html/node27.html
new file mode 100644 (file)
index 0000000..1df4055
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.8 Critical Functions</TITLE>
+<META NAME="description" CONTENT="3.8 Critical Functions">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node28.html">
+<LINK REL="previous" HREF="node26.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node28.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html654"
+ HREF="node28.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html648"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html642"
+ HREF="node26.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html650"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html652"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html655"
+ HREF="node28.html">3.9 Naked Functions</A>
+<B> Up:</B> <A NAME="tex2html649"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html643"
+ HREF="node26.html">3.7 Interrupt Service Routines</A>
+ &nbsp <B>  <A NAME="tex2html651"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html653"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00048000000000000000">
+3.8 Critical Functions</A>
+</H2>
+
+<P>
+A special keyword may be associated with a function declaring it as
+<I>critical</I>. SDCC will generate code to disable all interrupts
+upon entry to a critical function and enable them back before returning.
+Note that nesting critical functions may cause unpredictable results.
+<BR>
+
+<BR>
+<TT>int foo () critical </TT>&nbsp;
+<BR>
+<TT>{ </TT>&nbsp;
+<BR>
+<TT>... </TT>&nbsp;
+<BR>
+<TT>... </TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>
+
+<BR>
+The critical attribute maybe used with other attributes like <I>reentrant.</I>
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node28.html b/doc/sdccman.html/node28.html
new file mode 100644 (file)
index 0000000..043321a
--- /dev/null
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.9 Naked Functions</TITLE>
+<META NAME="description" CONTENT="3.9 Naked Functions">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node29.html">
+<LINK REL="previous" HREF="node27.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node29.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html668"
+ HREF="node29.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html662"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html656"
+ HREF="node27.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html664"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html666"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html669"
+ HREF="node29.html">3.10 Functions using private</A>
+<B> Up:</B> <A NAME="tex2html663"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html657"
+ HREF="node27.html">3.8 Critical Functions</A>
+ &nbsp <B>  <A NAME="tex2html665"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html667"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00049000000000000000">
+3.9 Naked Functions</A>
+</H2>
+
+<P>
+A special keyword may be associated with a function declaring it as
+<I>_naked.</I> The <I>_naked</I> function modifier attribute prevents
+the compiler from generating prologue and epilogue code for that function.
+This means that the user is entirely responsible for such things as
+saving any registers that may need to be preserved, selecting the
+proper register bank, generating the <I>return</I> instruction at
+the end, etc. Practically, this means that the contents of the function
+must be written in inline assembler. This is particularly useful for
+interrupt functions, which can have a large (and often unnecessary)
+prologue/epilogue. For example, compare the code generated by these
+two functions:
+<BR>
+
+<BR>
+<TT>data unsigned char counter;</TT>&nbsp;
+<BR>
+<TT>void simpleInterrupt(void) interrupt 1</TT>&nbsp;
+<BR>
+<TT>{</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;counter++;</TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>void nakedInterrupt(void) interrupt 2 _naked</TT>&nbsp;
+<BR>
+<TT>{</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;_asm</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_counter</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reti&nbsp;&nbsp;&nbsp;&nbsp;; MUST explicitly include ret in _naked
+function.</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;_endasm;</TT>&nbsp;
+<BR>
+<TT>}</TT>
+<BR>
+
+<BR>
+For an 8051 target, the generated simpleInterrupt looks like:
+<BR>
+
+<BR>
+<TT>_simpleIterrupt:</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;&nbsp;acc</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;&nbsp;b</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;&nbsp;dpl</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;&nbsp;dph</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;&nbsp;psw</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;psw,#0x00</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_counter</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;psw</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dph</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dpl</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acc</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;reti</TT>
+<BR>
+
+<BR>
+whereas nakedInterrupt looks like:
+<BR>
+
+<BR>
+<TT>_nakedInterrupt:</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;&nbsp;&nbsp;&nbsp;_counter</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;reti&nbsp;&nbsp;&nbsp;; MUST explicitly include ret(i) in _naked
+function.</TT>
+<BR>
+
+<BR>
+While there is nothing preventing you from writing C code inside a
+_naked function, there are many ways to shoot yourself in the foot
+doing this, and is is recommended that you stick to inline assembler.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html668"
+ HREF="node29.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html662"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html656"
+ HREF="node27.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html664"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html666"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html669"
+ HREF="node29.html">3.10 Functions using private</A>
+<B> Up:</B> <A NAME="tex2html663"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html657"
+ HREF="node27.html">3.8 Critical Functions</A>
+ &nbsp <B>  <A NAME="tex2html665"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html667"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node29.html b/doc/sdccman.html/node29.html
new file mode 100644 (file)
index 0000000..b3549b5
--- /dev/null
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.10 Functions using private banks</TITLE>
+<META NAME="description" CONTENT="3.10 Functions using private banks">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node30.html">
+<LINK REL="previous" HREF="node28.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node30.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html682"
+ HREF="node30.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html676"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html670"
+ HREF="node28.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html678"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html680"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html683"
+ HREF="node30.html">3.11 Absolute Addressing</A>
+<B> Up:</B> <A NAME="tex2html677"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html671"
+ HREF="node28.html">3.9 Naked Functions</A>
+ &nbsp <B>  <A NAME="tex2html679"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html681"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION000410000000000000000">
+3.10 Functions using private banks</A>
+</H2>
+
+<P>
+The <I>using</I> attribute (which tells the compiler to use a register
+bank other than the default bank zero) should only be applied to <I>interrupt</I>
+functions (see note 1 below). This will in most circumstances make
+the generated ISR code more efficient since it will not have to save
+registers on the stack.
+
+<P>
+The <I>using</I> attribute will have no effect on the generated code
+for a <I>non-interrupt</I> function (but may occasionally be useful
+anyway<A NAME="tex2html1"
+ HREF="footnode.html#foot531"><SUP>1</SUP></A>).
+<BR>
+<I>(pending: I don't think this has been done yet)</I>
+
+<P>
+An <I>interrupt</I> function using a non-zero bank will assume that
+it can trash that register bank, and will not save it. Since high-priority
+interrupts can interrupt low-priority ones on the 8051 and friends,
+this means that if a high-priority ISR <I>using</I> a particular bank
+occurs while processing a low-priority ISR <I>using</I> the same bank,
+terrible and bad things can happen. To prevent this, no single register
+bank should be <I>used</I> by both a high priority and a low priority
+ISR. This is probably most easily done by having all high priority
+ISRs use one bank and all low priority ISRs use another. If you have
+an ISR which can change priority at runtime, you're on your own: I
+suggest using the default bank zero and taking the small performance
+hit.
+
+<P>
+It is most efficient if your ISR calls no other functions. If your
+ISR must call other functions, it is most efficient if those functions
+use the same bank as the ISR (see note 1 below); the next best is
+if the called functions use bank zero. It is very inefficient to call
+a function using a different, non-zero bank from an ISR. 
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html682"
+ HREF="node30.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html676"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html670"
+ HREF="node28.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html678"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html680"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html683"
+ HREF="node30.html">3.11 Absolute Addressing</A>
+<B> Up:</B> <A NAME="tex2html677"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html671"
+ HREF="node28.html">3.9 Naked Functions</A>
+ &nbsp <B>  <A NAME="tex2html679"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html681"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node3.html b/doc/sdccman.html/node3.html
new file mode 100644 (file)
index 0000000..f04dc52
--- /dev/null
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>1.1 About SDCC</TITLE>
+<META NAME="description" CONTENT="1.1 About SDCC">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node4.html">
+<LINK REL="previous" HREF="node2.html">
+<LINK REL="up" HREF="node2.html">
+<LINK REL="next" HREF="node4.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html236"
+ HREF="node4.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html230"
+ HREF="node2.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html224"
+ HREF="node2.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html232"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html234"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html237"
+ HREF="node4.html">1.2 Open Source</A>
+<B> Up:</B> <A NAME="tex2html231"
+ HREF="node2.html">1. Introduction</A>
+<B> Previous:</B> <A NAME="tex2html225"
+ HREF="node2.html">1. Introduction</A>
+ &nbsp <B>  <A NAME="tex2html233"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html235"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00021000000000000000">
+1.1 About SDCC</A>
+</H2>
+
+<P>
+<B>SDCC</B> is a Freeware, retargettable, optimizing ANSI-C compiler
+by <B>Sandeep Dutta</B> designed for 8 bit Microprocessors. The
+current version targets Intel MCS51 based Microprocessors(8051,8052,
+etc), Zilog Z80 based MCUs, and the Dallas DS80C390 variant. It can
+be retargetted for other microprocessors, support for PIC, AVR and
+186 is under development. The entire source code for the compiler
+is distributed under GPL. SDCC uses ASXXXX &amp; ASLINK, a Freeware,
+retargettable assembler &amp; linker. SDCC has extensive language extensions
+suitable for utilizing various microcontrollers and underlying hardware
+effectively. 
+<BR>
+
+<BR>
+In addition to the MCU specific optimizations SDCC also does a host
+of standard optimizations like:
+
+<P>
+
+<UL>
+<LI>global sub expression elimination, </LI>
+<LI>loop optimizations (loop invariant, strength reduction of induction
+variables and loop reversing), </LI>
+<LI>constant folding &amp; propagation, </LI>
+<LI>copy propagation, </LI>
+<LI>dead code elimination </LI>
+<LI>jumptables for <I>switch</I> statements.</LI>
+</UL>
+For the back-end SDCC uses a global register allocation scheme which
+should be well suited for other 8 bit MCUs. 
+<BR>
+
+<BR>
+The peep hole optimizer uses a rule based substitution mechanism which
+is MCU independent. 
+<BR>
+
+<BR>
+Supported data-types are:
+
+<P>
+
+<UL>
+<LI>char (8 bits, 1 byte), </LI>
+<LI>short and int (16 bits, 2 bytes), </LI>
+<LI>long (32 bit, 4 bytes)</LI>
+<LI>float (4 byte IEEE). </LI>
+</UL>
+The compiler also allows <I>inline assembler code</I> to be embedded
+anywhere in a function. In addition, routines developed in assembly
+can also be called.
+<BR>
+
+<BR>
+SDCC also provides an option (-cyclomatic) to report the relative
+complexity of a function. These functions can then be further optimized,
+or hand coded in assembly if needed. 
+<BR>
+
+<BR>
+SDCC also comes with a companion source level debugger SDCDB, the
+debugger currently uses ucSim a freeware simulator for 8051 and other
+micro-controllers. 
+<BR>
+
+<BR>
+The latest version can be downloaded from  http://sdcc.sourceforge.net/<B>.</B>
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html236"
+ HREF="node4.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html230"
+ HREF="node2.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html224"
+ HREF="node2.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html232"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html234"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html237"
+ HREF="node4.html">1.2 Open Source</A>
+<B> Up:</B> <A NAME="tex2html231"
+ HREF="node2.html">1. Introduction</A>
+<B> Previous:</B> <A NAME="tex2html225"
+ HREF="node2.html">1. Introduction</A>
+ &nbsp <B>  <A NAME="tex2html233"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html235"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node30.html b/doc/sdccman.html/node30.html
new file mode 100644 (file)
index 0000000..c400b98
--- /dev/null
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.11 Absolute Addressing</TITLE>
+<META NAME="description" CONTENT="3.11 Absolute Addressing">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node31.html">
+<LINK REL="previous" HREF="node29.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node31.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html696"
+ HREF="node31.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html690"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html684"
+ HREF="node29.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html692"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html694"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html697"
+ HREF="node31.html">3.12 Startup Code</A>
+<B> Up:</B> <A NAME="tex2html691"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html685"
+ HREF="node29.html">3.10 Functions using private</A>
+ &nbsp <B>  <A NAME="tex2html693"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html695"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION000411000000000000000">
+3.11 Absolute Addressing</A>
+</H2>
+
+<P>
+Data items can be assigned an absolute address with the <I>at &lt;address&gt;</I>
+keyword, in addition to a storage class, e.g.:
+<BR>
+
+<BR>
+<TT>xdata at 0x8000 unsigned char PORTA_8255 ;</TT>&nbsp;
+<BR>
+
+<BR>
+In the above example the PORTA_8255 will be allocated to the location
+0x8000 of the external ram. Note that this feature is provided to
+give the programmer access to <I>memory mapped</I> devices attached
+to the controller. The compiler does not actually reserve any space
+for variables declared in this way (they are implemented with an equate
+in the assembler). Thus it is left to the programmer to make sure
+there are no overlaps with other variables that are declared without
+the absolute address. The assembler listing file (.lst) and the linker
+output files (.rst) and (.map) are a good places to look for such
+overlaps.
+<BR>
+
+<BR>
+Absolute address can be specified for variables in all storage classes,
+e.g.:
+<BR>
+
+<BR>
+<TT>bit at 0x02 bvar;</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+The above example will allocate the variable at offset 0x02 in the
+bit-addressable space. There is no real advantage to assigning absolute
+addresses to variables in this manner, unless you want strict control
+over all the variables allocated.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html696"
+ HREF="node31.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html690"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html684"
+ HREF="node29.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html692"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html694"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html697"
+ HREF="node31.html">3.12 Startup Code</A>
+<B> Up:</B> <A NAME="tex2html691"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html685"
+ HREF="node29.html">3.10 Functions using private</A>
+ &nbsp <B>  <A NAME="tex2html693"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html695"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node31.html b/doc/sdccman.html/node31.html
new file mode 100644 (file)
index 0000000..eefc4a5
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.12 Startup Code</TITLE>
+<META NAME="description" CONTENT="3.12 Startup Code">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node32.html">
+<LINK REL="previous" HREF="node30.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node32.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html710"
+ HREF="node32.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html704"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html698"
+ HREF="node30.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html706"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html708"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html711"
+ HREF="node32.html">3.13 Inline Assembler Code</A>
+<B> Up:</B> <A NAME="tex2html705"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html699"
+ HREF="node30.html">3.11 Absolute Addressing</A>
+ &nbsp <B>  <A NAME="tex2html707"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html709"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION000412000000000000000">
+3.12 Startup Code</A>
+</H2>
+
+<P>
+The compiler inserts a call to the C routine <I>_sdcc__external__startup()</I>
+at the start of the CODE area. This routine is in the runtime library.
+By default this routine returns 0, if this routine returns a non-zero
+value, the static &amp; global variable initialization will be skipped
+and the function main will be invoked Other wise static &amp; global
+variables will be initialized before the function main is invoked.
+You could add a <I>_sdcc__external__startup()</I> routine to
+your program to override the default if you need to setup hardware
+or perform some other critical operation prior to static &amp; global
+variable initialization.
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node32.html b/doc/sdccman.html/node32.html
new file mode 100644 (file)
index 0000000..9edc9a0
--- /dev/null
@@ -0,0 +1,174 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.13 Inline Assembler Code</TITLE>
+<META NAME="description" CONTENT="3.13 Inline Assembler Code">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node33.html">
+<LINK REL="previous" HREF="node31.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node33.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html724"
+ HREF="node33.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html718"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html712"
+ HREF="node31.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html720"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html722"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html725"
+ HREF="node33.html">3.14 int(16 bit) and</A>
+<B> Up:</B> <A NAME="tex2html719"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html713"
+ HREF="node31.html">3.12 Startup Code</A>
+ &nbsp <B>  <A NAME="tex2html721"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html723"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION000413000000000000000">
+3.13 Inline Assembler Code</A>
+</H2>
+
+<P>
+SDCC allows the use of in-line assembler with a few restriction as
+regards labels. All labels defined within inline assembler code <I>has
+to be</I> of the form <I>nnnnn$</I> where nnnn is a number less than
+100 (which implies a limit of utmost 100 inline assembler labels <I>per
+function</I>). It is strongly recommended that each assembly
+instruction (including labels) be placed in a separate line (as the
+example shows). When the <I>-peep-asm</I> command line option is
+used, the inline assembler code will be passed through the peephole
+optimizer. This might cause some unexpected changes in the inline
+assembler code. Please go throught the peephole optimizer rules defined
+in file <I>SDCCpeeph.def</I> carefully before using this option.
+<BR>
+
+<BR>
+<TT>_asm </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b,#10 </TT>&nbsp;
+<BR>
+<TT>00001$: </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;djnz&nbsp;&nbsp;&nbsp;&nbsp;b,00001$ </TT>&nbsp;
+<BR>
+<TT>_endasm ;</TT>
+<BR>
+
+<BR>
+The inline assembler code can contain any valid code understood by
+the assembler, this includes any assembler directives and comment
+lines. The compiler does not do any validation of the code within
+the <TT>_asm ... _endasm;</TT> keyword pair. 
+<BR>
+
+<BR>
+Inline assembler code cannot reference any C-Labels, however it can
+reference labels defined by the inline assembler, e.g.:
+<BR>
+
+<BR>
+<TT>foo() { </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;/* some c code */ </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;_asm </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; some assembler code </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ljmp $0003 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;_endasm; </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;/* some more c code */ </TT>&nbsp;
+<BR>
+<TT>clabel:&nbsp;&nbsp;/* inline assembler cannot reference this label
+*/ </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;_asm</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;$0003: ;label (can be reference by inline assembler
+only) </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;_endasm ; </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;/* some more c code */</TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+In other words inline assembly code can access labels defined in inline
+assembly within the scope of the funtion. 
+
+<P>
+The same goes the other way, ie. labels defines in inline assembly
+CANNOT be accessed by C statements.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html724"
+ HREF="node33.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html718"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html712"
+ HREF="node31.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html720"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html722"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html725"
+ HREF="node33.html">3.14 int(16 bit) and</A>
+<B> Up:</B> <A NAME="tex2html719"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html713"
+ HREF="node31.html">3.12 Startup Code</A>
+ &nbsp <B>  <A NAME="tex2html721"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html723"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node33.html b/doc/sdccman.html/node33.html
new file mode 100644 (file)
index 0000000..874f367
--- /dev/null
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.14 int(16 bit) and long (32 bit) Support</TITLE>
+<META NAME="description" CONTENT="3.14 int(16 bit) and long (32 bit) Support">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node34.html">
+<LINK REL="previous" HREF="node32.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node34.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html738"
+ HREF="node34.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html732"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html726"
+ HREF="node32.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html734"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html736"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html739"
+ HREF="node34.html">3.15 Floating Point Support</A>
+<B> Up:</B> <A NAME="tex2html733"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html727"
+ HREF="node32.html">3.13 Inline Assembler Code</A>
+ &nbsp <B>  <A NAME="tex2html735"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html737"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION000414000000000000000">
+3.14 int(16 bit) and long (32 bit) Support</A>
+</H2>
+
+<P>
+For signed &amp; unsigned int (16 bit) and long (32 bit) variables, division,
+multiplication and modulus operations are implemented by support routines.
+These support routines are all developed in ANSI-C to facilitate porting
+to other MCUs, although some model specific assembler optimations
+are used. The following files contain the described routine, all of
+them can be found in &lt;installdir&gt;/share/sdcc/lib.
+<BR>
+
+<BR>
+<I>&lt;pending: tabularise this&gt;</I>
+<BR>
+
+<BR>
+_mulsint.c - signed 16 bit multiplication (calls _muluint)
+<BR>
+_muluint.c - unsigned 16 bit multiplication
+<BR>
+_divsint.c - signed 16 bit division (calls _divuint)
+<BR>
+_divuint.c - unsigned 16 bit division
+<BR>
+_modsint.c - signed 16 bit modulus (call _moduint)
+<BR>
+_moduint.c - unsigned 16 bit modulus
+<BR>
+_mulslong.c - signed 32 bit multiplication (calls _mululong)
+<BR>
+_mululong.c - unsigned32 bit multiplication
+<BR>
+_divslong.c - signed 32 division (calls _divulong)
+<BR>
+_divulong.c - unsigned 32 division
+<BR>
+_modslong.c - signed 32 bit modulus (calls _modulong)
+<BR>
+_modulong.c - unsigned 32 bit modulus 
+<BR>
+
+<BR>
+Since they are compiled as <I>non-reentrant</I>, interrupt service
+routines should not do any of the above operations. If this is unavoidable
+then the above routines will need to be compiled with the <I>-stack-auto</I>
+option, after which the source program will have to be compiled with
+<I>-int-long-rent</I> option.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html738"
+ HREF="node34.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html732"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html726"
+ HREF="node32.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html734"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html736"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html739"
+ HREF="node34.html">3.15 Floating Point Support</A>
+<B> Up:</B> <A NAME="tex2html733"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html727"
+ HREF="node32.html">3.13 Inline Assembler Code</A>
+ &nbsp <B>  <A NAME="tex2html735"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html737"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node34.html b/doc/sdccman.html/node34.html
new file mode 100644 (file)
index 0000000..4da6203
--- /dev/null
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.15 Floating Point Support</TITLE>
+<META NAME="description" CONTENT="3.15 Floating Point Support">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node35.html">
+<LINK REL="previous" HREF="node33.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node35.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html752"
+ HREF="node35.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html746"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html740"
+ HREF="node33.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html748"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html750"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html753"
+ HREF="node35.html">3.16 MCS51 Memory Models</A>
+<B> Up:</B> <A NAME="tex2html747"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html741"
+ HREF="node33.html">3.14 int(16 bit) and</A>
+ &nbsp <B>  <A NAME="tex2html749"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html751"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION000415000000000000000">
+3.15 Floating Point Support</A>
+</H2>
+
+<P>
+SDCC supports IEEE (single precision 4bytes) floating point numbers.The
+floating point support routines are derived from gcc's floatlib.c
+and consists of the following routines:
+<BR>
+
+<BR>
+<I>&lt;pending: tabularise this&gt;</I>
+<BR>
+
+<BR>
+_fsadd.c - add floating point numbers
+<BR>
+_fssub.c - subtract floating point numbers
+<BR>
+_fsdiv.c - divide floating point numbers
+<BR>
+_fsmul.c - multiply floating point numbers
+<BR>
+_fs2uchar.c - convert floating point to unsigned char
+<BR>
+_fs2char.c - convert floating point to signed char
+<BR>
+_fs2uint.c - convert floating point to unsigned int
+<BR>
+_fs2int.c - convert floating point to signed int
+<BR>
+_fs2ulong.c - convert floating point to unsigned long
+<BR>
+_fs2long.c - convert floating point to signed long
+<BR>
+_uchar2fs.c - convert unsigned char to floating point
+<BR>
+_char2fs.c - convert char to floating point number
+<BR>
+_uint2fs.c - convert unsigned int to floating point
+<BR>
+_int2fs.c - convert int to floating point numbers
+<BR>
+_ulong2fs.c - convert unsigned long to floating point number
+<BR>
+_long2fs.c - convert long to floating point number
+<BR>
+
+<BR>
+Note if all these routines are used simultaneously the data space
+might overflow. For serious floating point usage it is strongly recommended
+that the large model be used.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html752"
+ HREF="node35.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html746"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html740"
+ HREF="node33.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html748"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html750"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html753"
+ HREF="node35.html">3.16 MCS51 Memory Models</A>
+<B> Up:</B> <A NAME="tex2html747"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html741"
+ HREF="node33.html">3.14 int(16 bit) and</A>
+ &nbsp <B>  <A NAME="tex2html749"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html751"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node35.html b/doc/sdccman.html/node35.html
new file mode 100644 (file)
index 0000000..bfd4fc6
--- /dev/null
@@ -0,0 +1,121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.16 MCS51 Memory Models</TITLE>
+<META NAME="description" CONTENT="3.16 MCS51 Memory Models">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node36.html">
+<LINK REL="previous" HREF="node34.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node36.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html766"
+ HREF="node36.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html760"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html754"
+ HREF="node34.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html762"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html764"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html767"
+ HREF="node36.html">3.17 DS390 Memory Models</A>
+<B> Up:</B> <A NAME="tex2html761"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html755"
+ HREF="node34.html">3.15 Floating Point Support</A>
+ &nbsp <B>  <A NAME="tex2html763"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html765"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION000416000000000000000">
+3.16 MCS51 Memory Models</A>
+</H2>
+
+<P>
+SDCC allows two memory models for MCS51 code, small and large. Modules
+compiled with different memory models should <I>never</I> be combined
+together or the results would be unpredictable. The library routines
+supplied with the compiler are compiled as both small and large. The
+compiled library modules are contained in seperate directories as
+small and large so that you can link to either set. 
+
+<P>
+When the large model is used all variables declared without a storage
+class will be allocated into the external ram, this includes all parameters
+and local variables (for non-reentrant functions). When the small
+model is used variables without storage class are allocated in the
+internal ram.
+
+<P>
+Judicious usage of the processor specific storage classes and the
+'reentrant' function type will yield much more efficient code, than
+using the large model. Several optimizations are disabled when the
+program is compiled using the large model, it is therefore strongly
+recommdended that the small model be used unless absolutely required.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html766"
+ HREF="node36.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html760"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html754"
+ HREF="node34.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html762"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html764"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html767"
+ HREF="node36.html">3.17 DS390 Memory Models</A>
+<B> Up:</B> <A NAME="tex2html761"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html755"
+ HREF="node34.html">3.15 Floating Point Support</A>
+ &nbsp <B>  <A NAME="tex2html763"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html765"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node36.html b/doc/sdccman.html/node36.html
new file mode 100644 (file)
index 0000000..0cd5465
--- /dev/null
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.17 DS390 Memory Models</TITLE>
+<META NAME="description" CONTENT="3.17 DS390 Memory Models">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node37.html">
+<LINK REL="previous" HREF="node35.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node37.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html780"
+ HREF="node37.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html774"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html768"
+ HREF="node35.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html776"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html778"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html781"
+ HREF="node37.html">3.18 Defines Created by</A>
+<B> Up:</B> <A NAME="tex2html775"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html769"
+ HREF="node35.html">3.16 MCS51 Memory Models</A>
+ &nbsp <B>  <A NAME="tex2html777"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html779"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION000417000000000000000">
+3.17 DS390 Memory Models</A>
+</H2>
+
+<P>
+The only model supported is Flat 24. This generates code for the 24
+bit contiguous addressing mode of the Dallas DS80C390 part. In this
+mode, up to four meg of external RAM or code space can be directly
+addressed. See the data sheets at www.dalsemi.com for further information
+on this part.
+<BR>
+
+<BR>
+In older versions of the compiler, this option was used with the MCS51
+code generator (<I>-mmcs51</I>). Now, however, the '390 has it's own
+code generator, selected by the <I>-mds390</I> switch. 
+<BR>
+
+<BR>
+Note that the compiler does not generate any code to place the processor
+into 24 bitmode (although <I>tinibios</I> in the ds390 libraries will
+do that for you). If you don't use <I>tinibios</I>, the boot loader
+or similar code must ensure that the processor is in 24 bit contiguous
+addressing mode before calling the SDCC startup code.
+<BR>
+
+<BR>
+Like the <I>-model-large</I> option, variables will by default be
+placed into the XDATA segment. 
+<BR>
+
+<BR>
+Segments may be placed anywhere in the 4 meg address space using the
+usual -*-loc options. Note that if any segments are located above
+64K, the -r flag must be passed to the linker to generate the proper
+segment relocations, and the Intel HEX output format must be used.
+The -r flag can be passed to the linker by using the option <I>-Wl-r</I>
+on the sdcc command line. However, currently the linker can not handle
+code segments &gt; 64k.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html780"
+ HREF="node37.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html774"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html768"
+ HREF="node35.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html776"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html778"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html781"
+ HREF="node37.html">3.18 Defines Created by</A>
+<B> Up:</B> <A NAME="tex2html775"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html769"
+ HREF="node35.html">3.16 MCS51 Memory Models</A>
+ &nbsp <B>  <A NAME="tex2html777"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html779"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node37.html b/doc/sdccman.html/node37.html
new file mode 100644 (file)
index 0000000..984d3a2
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3.18 Defines Created by the Compiler</TITLE>
+<META NAME="description" CONTENT="3.18 Defines Created by the Compiler">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="previous" HREF="node36.html">
+<LINK REL="up" HREF="node19.html">
+<LINK REL="next" HREF="node38.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html792"
+ HREF="node38.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html786"
+ HREF="node19.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html782"
+ HREF="node36.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html788"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html790"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html793"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Up:</B> <A NAME="tex2html787"
+ HREF="node19.html">3. Using SDCC</A>
+<B> Previous:</B> <A NAME="tex2html783"
+ HREF="node36.html">3.17 DS390 Memory Models</A>
+ &nbsp <B>  <A NAME="tex2html789"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html791"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION000418000000000000000">
+3.18 Defines Created by the Compiler</A>
+</H2>
+
+<P>
+The compiler creates the following #defines.
+
+<P>
+
+<UL>
+<LI>SDCC - this Symbol is always defined.</LI>
+<LI>SDCC_mcs51 or SDCC_ds390 or SDCC_z80, etc - depending on the model
+used (e.g.: -mds390)</LI>
+<LI>__mcs51 or __ds390 or __z80, etc - depending on the model used
+(e.g. -mz80)</LI>
+<LI>SDCC_STACK_AUTO - this symbol is defined when <I>-stack-auto</I>
+option is used.</LI>
+<LI>SDCC_MODEL_SMALL - when <I>-model-small</I> is used.</LI>
+<LI>SDCC_MODEL_LARGE - when <I>-model-large</I> is used.</LI>
+<LI>SDCC_USE_XSTACK - when <I>-xstack</I> option is used.</LI>
+<LI>SDCC_STACK_TENBIT - when <I>-mds390</I> is used</LI>
+<LI>SDCC_MODEL_FLAT24 - when <I>-mds390</I> is used</LI>
+</UL>
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node38.html b/doc/sdccman.html/node38.html
new file mode 100644 (file)
index 0000000..a9efd93
--- /dev/null
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>4. SDCC Technical Data</TITLE>
+<META NAME="description" CONTENT="4. SDCC Technical Data">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node46.html">
+<LINK REL="previous" HREF="node19.html">
+<LINK REL="up" HREF="sdccman.html">
+<LINK REL="next" HREF="node39.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html806"
+ HREF="node39.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html800"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html794"
+ HREF="node37.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html802"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html804"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html807"
+ HREF="node39.html">4.1 Optimizations</A>
+<B> Up:</B> <A NAME="tex2html801"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html795"
+ HREF="node37.html">3.18 Defines Created by</A>
+ &nbsp <B>  <A NAME="tex2html803"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html805"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00050000000000000000">
+4. SDCC Technical Data</A>
+</H1>
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html808"
+ HREF="node39.html">4.1 Optimizations</A>
+<UL>
+<LI><A NAME="tex2html809"
+ HREF="node39.html#SECTION00051100000000000000">4.1.1 Sub-expression Elimination</A>
+<LI><A NAME="tex2html810"
+ HREF="node39.html#SECTION00051200000000000000">4.1.2 Dead-Code Elimination</A>
+<LI><A NAME="tex2html811"
+ HREF="node39.html#SECTION00051300000000000000">4.1.3 Copy-Propagation</A>
+<LI><A NAME="tex2html812"
+ HREF="node39.html#SECTION00051400000000000000">4.1.4 Loop Optimizations</A>
+<LI><A NAME="tex2html813"
+ HREF="node39.html#SECTION00051500000000000000">4.1.5 Loop Reversing</A>
+<LI><A NAME="tex2html814"
+ HREF="node39.html#SECTION00051600000000000000">4.1.6 Algebraic Simplifications</A>
+<LI><A NAME="tex2html815"
+ HREF="node39.html#SECTION00051700000000000000">4.1.7 'switch' Statements</A>
+<LI><A NAME="tex2html816"
+ HREF="node39.html#SECTION00051800000000000000">4.1.8 Bit-shifting Operations.</A>
+<LI><A NAME="tex2html817"
+ HREF="node39.html#SECTION00051900000000000000">4.1.9 Bit-rotation</A>
+<LI><A NAME="tex2html818"
+ HREF="node39.html#SECTION000511000000000000000">4.1.10 Highest Order Bit</A>
+<LI><A NAME="tex2html819"
+ HREF="node39.html#SECTION000511100000000000000">4.1.11 Peep-hole Optimizer</A>
+</UL>
+<LI><A NAME="tex2html820"
+ HREF="node40.html">4.2 Pragmas</A>
+<LI><A NAME="tex2html821"
+ HREF="node41.html">4.3 <I>&lt;pending: this is messy and incomplete&gt;</I> Library Routines</A>
+<LI><A NAME="tex2html822"
+ HREF="node42.html">4.4 Interfacing with Assembly Routines</A>
+<UL>
+<LI><A NAME="tex2html823"
+ HREF="node42.html#SECTION00054100000000000000">4.4.1 Global Registers used for Parameter Passing</A>
+<LI><A NAME="tex2html824"
+ HREF="node42.html#SECTION00054200000000000000">4.4.2 Assembler Routine(non-reentrant)</A>
+<LI><A NAME="tex2html825"
+ HREF="node42.html#SECTION00054300000000000000">4.4.3 Assembler Routine(reentrant)</A>
+</UL>
+<LI><A NAME="tex2html826"
+ HREF="node43.html">4.5 External Stack</A>
+<LI><A NAME="tex2html827"
+ HREF="node44.html">4.6 ANSI-Compliance</A>
+<LI><A NAME="tex2html828"
+ HREF="node45.html">4.7 Cyclomatic Complexity</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node39.html b/doc/sdccman.html/node39.html
new file mode 100644 (file)
index 0000000..2596e8e
--- /dev/null
@@ -0,0 +1,903 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>4.1 Optimizations</TITLE>
+<META NAME="description" CONTENT="4.1 Optimizations">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node40.html">
+<LINK REL="previous" HREF="node38.html">
+<LINK REL="up" HREF="node38.html">
+<LINK REL="next" HREF="node40.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html841"
+ HREF="node40.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html835"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html829"
+ HREF="node38.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html837"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html839"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html842"
+ HREF="node40.html">4.2 Pragmas</A>
+<B> Up:</B> <A NAME="tex2html836"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html830"
+ HREF="node38.html">4. SDCC Technical Data</A>
+ &nbsp <B>  <A NAME="tex2html838"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html840"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html843"
+ HREF="node39.html#SECTION00051100000000000000">4.1.1 Sub-expression Elimination</A>
+<LI><A NAME="tex2html844"
+ HREF="node39.html#SECTION00051200000000000000">4.1.2 Dead-Code Elimination</A>
+<LI><A NAME="tex2html845"
+ HREF="node39.html#SECTION00051300000000000000">4.1.3 Copy-Propagation</A>
+<LI><A NAME="tex2html846"
+ HREF="node39.html#SECTION00051400000000000000">4.1.4 Loop Optimizations</A>
+<LI><A NAME="tex2html847"
+ HREF="node39.html#SECTION00051500000000000000">4.1.5 Loop Reversing</A>
+<LI><A NAME="tex2html848"
+ HREF="node39.html#SECTION00051600000000000000">4.1.6 Algebraic Simplifications</A>
+<LI><A NAME="tex2html849"
+ HREF="node39.html#SECTION00051700000000000000">4.1.7 'switch' Statements</A>
+<LI><A NAME="tex2html850"
+ HREF="node39.html#SECTION00051800000000000000">4.1.8 Bit-shifting Operations.</A>
+<LI><A NAME="tex2html851"
+ HREF="node39.html#SECTION00051900000000000000">4.1.9 Bit-rotation</A>
+<LI><A NAME="tex2html852"
+ HREF="node39.html#SECTION000511000000000000000">4.1.10 Highest Order Bit</A>
+<LI><A NAME="tex2html853"
+ HREF="node39.html#SECTION000511100000000000000">4.1.11 Peep-hole Optimizer</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H2><A NAME="SECTION00051000000000000000">
+4.1 Optimizations</A>
+</H2>
+
+<P>
+SDCC performs a host of standard optimizations in addition to some
+MCU specific optimizations. 
+
+<P>
+
+<H3><A NAME="SECTION00051100000000000000">
+4.1.1 Sub-expression Elimination</A>
+</H3>
+
+<P>
+The compiler does local and global common subexpression elimination,
+e.g.: 
+<BR>
+
+<BR>
+<TT>i = x + y + 1; </TT>&nbsp;
+<BR>
+<TT>j = x + y;</TT>
+<BR>
+
+<BR>
+will be translated to
+<BR>
+
+<BR>
+<TT>iTemp = x + y </TT>&nbsp;
+<BR>
+<TT>i = iTemp + 1 </TT>&nbsp;
+<BR>
+<TT>j = iTemp</TT>&nbsp;
+<BR>
+
+<BR>
+Some subexpressions are not as obvious as the above example, e.g.:
+<BR>
+
+<BR>
+<TT>a-&gt;b[i].c = 10; </TT>&nbsp;
+<BR>
+<TT>a-&gt;b[i].d = 11;</TT>
+<BR>
+
+<BR>
+In this case the address arithmetic a-&gt;b[i] will be computed only
+once; the equivalent code in C would be.
+<BR>
+
+<BR>
+<TT>iTemp = a-&gt;b[i]; </TT>&nbsp;
+<BR>
+<TT>iTemp.c = 10; </TT>&nbsp;
+<BR>
+<TT>iTemp.d = 11;</TT>
+<BR>
+
+<BR>
+The compiler will try to keep these temporary variables in registers.
+
+<P>
+
+<H3><A NAME="SECTION00051200000000000000">
+4.1.2 Dead-Code Elimination</A>
+</H3>
+
+<P>
+<TT>int global; </TT>&nbsp;
+<BR>
+<TT>void f () { </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;int i; </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;i = 1; &nbsp;/* dead store */ </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;global = 1;&nbsp;/* dead store */ </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;global = 2; </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;return; </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;global = 3;&nbsp;/* unreachable */ </TT>&nbsp;
+<BR>
+<TT>}</TT>
+<BR>
+
+<BR>
+will be changed to
+<BR>
+
+<BR>
+<TT>int global; void f () </TT>&nbsp;
+<BR>
+<TT>{</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;global = 2; </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;return; </TT>&nbsp;
+<BR>
+<TT>}</TT>
+
+<P>
+
+<H3><A NAME="SECTION00051300000000000000">
+4.1.3 Copy-Propagation</A>
+</H3>
+
+<P>
+<TT>int f() { </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;int i, j; </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;i = 10; </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;j = i; </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;return j; </TT>&nbsp;
+<BR>
+<TT>}</TT>
+<BR>
+
+<BR>
+will be changed to 
+<BR>
+
+<BR>
+<TT>int f() { </TT>&nbsp;
+<BR>
+<TT>&nbsp; &nbsp; int i,j; </TT>&nbsp;
+<BR>
+<TT>&nbsp; &nbsp; i = 10; </TT>&nbsp;
+<BR>
+<TT>&nbsp; &nbsp; j = 10; </TT>&nbsp;
+<BR>
+<TT>&nbsp; &nbsp; return 10; </TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+Note: the dead stores created by this copy propagation will be eliminated
+by dead-code elimination.
+
+<P>
+
+<H3><A NAME="SECTION00051400000000000000">
+4.1.4 Loop Optimizations</A>
+</H3>
+
+<P>
+Two types of loop optimizations are done by SDCC loop invariant lifting
+and strength reduction of loop induction variables. In addition to
+the strength reduction the optimizer marks the induction variables
+and the register allocator tries to keep the induction variables in
+registers for the duration of the loop. Because of this preference
+of the register allocator, loop induction optimization causes an increase
+in register pressure, which may cause unwanted spilling of other temporary
+variables into the stack / data space. The compiler will generate
+a warning message when it is forced to allocate extra space either
+on the stack or data space. If this extra space allocation is undesirable
+then induction optimization can be eliminated either for the entire
+source file (with -noinduction option) or for a given function only
+using #pragma&nbsp;NOINDUCTION.
+<BR>
+
+<BR>
+Loop Invariant:
+<BR>
+
+<BR>
+<TT>for (i = 0 ; i &lt; 100 ; i ++) </TT>&nbsp;
+<BR>
+ <TT>&nbsp; &nbsp;f += k + l;</TT>
+<BR>
+
+<BR>
+changed to
+<BR>
+
+<BR>
+<TT>itemp = k + l; </TT>&nbsp;
+<BR>
+<TT>for (i = 0; i &lt; 100; i++) </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;f += itemp;</TT>
+<BR>
+
+<BR>
+As mentioned previously some loop invariants are not as apparent,
+all static address computations are also moved out of the loop.
+<BR>
+
+<BR>
+Strength Reduction, this optimization substitutes an expression by
+a cheaper expression:
+<BR>
+
+<BR>
+<TT>for (i=0;i &lt; 100; i++)</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;ar[i*5] = i*3;</TT>
+<BR>
+
+<BR>
+changed to
+<BR>
+
+<BR>
+<TT>itemp1 = 0; </TT>&nbsp;
+<BR>
+<TT>itemp2 = 0; </TT>&nbsp;
+<BR>
+<TT>for (i=0;i&lt; 100;i++) { </TT>&nbsp;
+<BR>
+ <TT>&nbsp; &nbsp;ar[itemp1] = itemp2; </TT>&nbsp;
+<BR>
+ <TT>&nbsp; &nbsp;itemp1 += 5; </TT>&nbsp;
+<BR>
+ <TT>&nbsp; &nbsp;itemp2 += 3; </TT>&nbsp;
+<BR>
+<TT>}</TT>
+<BR>
+
+<BR>
+The more expensive multiplication is changed to a less expensive addition.
+
+<P>
+
+<H3><A NAME="SECTION00051500000000000000">
+4.1.5 Loop Reversing</A>
+</H3>
+
+<P>
+This optimization is done to reduce the overhead of checking loop
+boundaries for every iteration. Some simple loops can be reversed
+and implemented using a ``decrement and jump if not zero'' instruction.
+SDCC checks for the following criterion to determine if a loop is
+reversible (note: more sophisticated compilers use data-dependency
+analysis to make this determination, SDCC uses a more simple minded
+analysis).
+
+<P>
+
+<UL>
+<LI>The 'for' loop is of the form 
+<BR>
+
+<BR>
+<TT>for (&lt;symbol&gt; = &lt;expression&gt; ; &lt;sym&gt; [&lt; | &lt;=] &lt;expression&gt;
+; [&lt;sym&gt;++ | &lt;sym&gt; += 1])</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&lt;for body&gt;</TT></LI>
+<LI>The &lt;for body&gt; does not contain ``continue'' or 'break''.</LI>
+<LI>All goto's are contained within the loop.</LI>
+<LI>No function calls within the loop.</LI>
+<LI>The loop control variable &lt;sym&gt; is not assigned any value within the
+loop</LI>
+<LI>The loop control variable does NOT participate in any arithmetic operation
+within the loop.</LI>
+<LI>There are NO switch statements in the loop.</LI>
+</UL>
+Note djnz instruction can be used for 8-bit values <I>only</I>, therefore
+it is advantageous to declare loop control symbols as <I>char</I>.
+Ofcourse this may not be possible on all situations.
+
+<P>
+
+<H3><A NAME="SECTION00051600000000000000">
+4.1.6 Algebraic Simplifications</A>
+</H3>
+
+<P>
+SDCC does numerous algebraic simplifications, the following is a small
+sub-set of these optimizations.
+<BR>
+
+<BR>
+<TT>i = j + 0 ; /* changed to */ i = j; </TT>&nbsp;
+<BR>
+<TT>i /= 2; /* changed to */ i &gt;&gt;= 1; </TT>&nbsp;
+<BR>
+<TT>i = j - j ; /* changed to */ i = 0; </TT>&nbsp;
+<BR>
+<TT>i = j / 1 ; /* changed to */ i = j;</TT>
+<BR>
+
+<BR>
+Note the subexpressions given above are generally introduced by macro
+expansions or as a result of copy/constant propagation.
+
+<P>
+
+<H3><A NAME="SECTION00051700000000000000">
+4.1.7 'switch' Statements</A>
+</H3>
+
+<P>
+SDCC changes switch statements to jump tables when the following conditions
+are true. 
+
+<P>
+
+<UL>
+<LI>The case labels are in numerical sequence, the labels need not be
+in order, and the starting number need not be one or zero.
+<BR>
+
+<BR>
+<TT>switch(i) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;switch (i)
+{ </TT>&nbsp;
+<BR>
+<TT>case 4:... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case 1: ... </TT>&nbsp;
+<BR>
+<TT>case 5:... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case 2: ... </TT>&nbsp;
+<BR>
+<TT>case 3:... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case 3: ... </TT>&nbsp;
+<BR>
+<TT>case 6:... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case 4: ... </TT>&nbsp;
+<BR>
+<TT>}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+Both the above switch statements will be implemented using a jump-table.</LI>
+<LI>The number of case labels is at least three, since it takes two conditional
+statements to handle the boundary conditions.</LI>
+<LI>The number of case labels is less than 84, since each label takes
+3 bytes and a jump-table can be utmost 256 bytes long. </LI>
+</UL>
+Switch statements which have gaps in the numeric sequence or those
+that have more that 84 case labels can be split into more than one
+switch statement for efficient code generation, e.g.:
+<BR>
+
+<BR>
+<TT>switch (i) { </TT>&nbsp;
+<BR>
+<TT>case 1: ... </TT>&nbsp;
+<BR>
+<TT>case 2: ... </TT>&nbsp;
+<BR>
+<TT>case 3: ... </TT>&nbsp;
+<BR>
+<TT>case 4: ... </TT>&nbsp;
+<BR>
+<TT>case 9: ... </TT>&nbsp;
+<BR>
+<TT>case 10: ... </TT>&nbsp;
+<BR>
+<TT>case 11: ... </TT>&nbsp;
+<BR>
+<TT>case 12: ... </TT>&nbsp;
+<BR>
+<TT>}</TT>
+<BR>
+
+<BR>
+If the above switch statement is broken down into two switch statements
+<BR>
+
+<BR>
+<TT>switch (i) { </TT>&nbsp;
+<BR>
+<TT>case 1: ... </TT>&nbsp;
+<BR>
+<TT>case 2: ... </TT>&nbsp;
+<BR>
+<TT>case 3: ... </TT>&nbsp;
+<BR>
+<TT>case 4: ... </TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+and&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>switch (i) { </TT>&nbsp;
+<BR>
+<TT>case 9: &nbsp;... </TT>&nbsp;
+<BR>
+<TT>case 10: ... </TT>&nbsp;
+<BR>
+<TT>case 11: ... </TT>&nbsp;
+<BR>
+<TT>case 12:&nbsp;... </TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+then both the switch statements will be implemented using jump-tables
+whereas the unmodified switch statement will not be.
+
+<P>
+
+<H3><A NAME="SECTION00051800000000000000">
+4.1.8 Bit-shifting Operations.</A>
+</H3>
+
+<P>
+Bit shifting is one of the most frequently used operation in embedded
+programming. SDCC tries to implement bit-shift operations in the most
+efficient way possible, e.g.:
+<BR>&nbsp;
+<BR>
+<TT>unsigned char i;</TT>&nbsp;
+<BR>
+<TT>... </TT>&nbsp;
+<BR>
+<TT>i&gt;&gt;= 4; </TT>&nbsp;
+<BR>
+<TT>...</TT>&nbsp;
+<BR>
+
+<BR>
+generates the following code:
+<BR>&nbsp;
+<BR>
+<TT>mov a,_i </TT>&nbsp;
+<BR>
+<TT>swap a </TT>&nbsp;
+<BR>
+<TT>anl a,#0x0f </TT>&nbsp;
+<BR>
+<TT>mov _i,a</TT>
+<BR>
+
+<BR>
+In general SDCC will never setup a loop if the shift count is known.
+Another example:
+<BR>
+
+<BR>
+<TT>unsigned int i; </TT>&nbsp;
+<BR>
+<TT>... </TT>&nbsp;
+<BR>
+<TT>i &gt;&gt;= 9; </TT>&nbsp;
+<BR>
+<TT>...</TT>
+<BR>
+
+<BR>
+will generate:
+<BR>
+
+<BR>
+<TT>mov a,(_i + 1) </TT>&nbsp;
+<BR>
+<TT>mov (_i + 1),#0x00 </TT>&nbsp;
+<BR>
+<TT>clr c </TT>&nbsp;
+<BR>
+<TT>rrc a </TT>&nbsp;
+<BR>
+<TT>mov _i,a</TT>
+<BR>
+
+<BR>
+Note that SDCC stores numbers in little-endian format (i.e. lowest
+order first).
+
+<P>
+
+<H3><A NAME="SECTION00051900000000000000">
+4.1.9 Bit-rotation</A>
+</H3>
+
+<P>
+A special case of the bit-shift operation is bit rotation, SDCC recognizes
+the following expression to be a left bit-rotation:
+<BR>
+
+<BR>
+<TT>unsigned char i; </TT>&nbsp;
+<BR>
+<TT>... </TT>&nbsp;
+<BR>
+<TT>i = ((i &lt;&lt; 1) | (i &gt;&gt;
+7));</TT> 
+<BR>
+...
+<BR>
+
+<BR>
+will generate the following code:
+<BR>
+
+<BR>
+<TT>mov a,_i </TT>&nbsp;
+<BR>
+<TT>rl a </TT>&nbsp;
+<BR>
+<TT>mov _i,a</TT>
+<BR>
+
+<BR>
+SDCC uses pattern matching on the parse tree to determine this operation.Variations
+of this case will also be recognized as bit-rotation, i.e.: 
+<BR>
+
+<BR>
+<TT>i = ((i &gt;&gt; 7) | (i &lt;&lt;
+1)); /* left-bit rotation */</TT>
+
+<P>
+
+<H3><A NAME="SECTION000511000000000000000">
+4.1.10 Highest Order Bit</A>
+</H3>
+
+<P>
+It is frequently required to obtain the highest order bit of an integral
+type (long, int, short or char types). SDCC recognizes the following
+expression to yield the highest order bit and generates optimized
+code for it, e.g.:
+<BR>
+
+<BR>
+ <TT>unsigned int gint; </TT>&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>foo () { </TT>&nbsp;
+<BR>
+<TT>unsigned char hob; </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;... </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;hob = (gint &gt;&gt; 15) &amp; 1; </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;.. </TT>&nbsp;
+<BR>
+<TT>}</TT>
+<BR>
+
+<BR>
+will generate the following code:
+<BR>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 61
+;&nbsp; hob.c 7 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp; 000A E5*01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 62&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+mov&nbsp; a,(_gint + 1) </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp; 000C 33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 63&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+rlc&nbsp; a </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp; 000D E4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+clr&nbsp; a </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp; 000E 13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+rrc&nbsp; a </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp; 000F F5*02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 66&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+mov&nbsp; _foo_hob_1_1,a</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+Variations of this case however will <I>not</I> be recognized. It
+is a standard C expression, so I heartily recommend this be the only
+way to get the highest order bit, (it is portable). Of course it will
+be recognized even if it is embedded in other expressions, e.g.:
+<BR>
+
+<BR>
+<TT>xyz = gint + ((gint &gt;&gt; 15) &amp; 1);</TT>
+<BR>
+
+<BR>
+will still be recognized.
+
+<P>
+
+<H3><A NAME="SECTION000511100000000000000">
+4.1.11 Peep-hole Optimizer</A>
+</H3>
+
+<P>
+The compiler uses a rule based, pattern matching and re-writing mechanism
+for peep-hole optimization. It is inspired by <I>copt</I> a peep-hole
+optimizer by Christopher W. Fraser (cwfraser@microsoft.com). A default
+set of rules are compiled into the compiler, additional rules may
+be added with the <I>-peep-file &lt;filename&gt;</I> option. The rule language
+is best illustrated with examples.
+<BR>
+
+<BR>
+<TT>replace { </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;mov %1,a </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;mov a,%1</TT>&nbsp;
+<BR>
+<TT>} by {</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;mov %1,a</TT>&nbsp;
+<BR>
+<TT>}</TT>
+<BR>
+
+<BR>
+The above rule will change the following assembly sequence:
+<BR>
+
+<BR>
+<TT>&nbsp;&nbsp;mov r1,a </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;mov a,r1</TT>
+<BR>
+
+<BR>
+to
+<BR>
+
+<BR>
+<TT>mov r1,a</TT>
+<BR>
+
+<BR>
+Note: All occurrences of a <I>%n</I> (pattern variable) must denote
+the same string. With the above rule, the assembly sequence:
+<BR>
+
+<BR>
+<TT>&nbsp;&nbsp;mov r1,a </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;mov a,r2</TT>
+<BR>
+
+<BR>
+will remain unmodified.
+<BR>
+
+<BR>
+Other special case optimizations may be added by the user (via <I>-peep-file
+option</I>). E.g. some variants of the 8051 MCU allow only <TT>ajmp</TT>
+and <TT>acall</TT>. The following two rules will change all <TT>ljmp</TT>
+and <TT>lcall</TT> to <TT>ajmp</TT> and <TT>acall</TT>
+<BR>
+
+<BR>
+<TT>replace { lcall %1 } by { acall %1 } </TT>&nbsp;
+<BR>
+<TT>replace { ljmp %1 } by { ajmp %1 }</TT>
+<BR>
+
+<BR>
+The <I>inline-assembler code</I> is also passed through the peep hole
+optimizer, thus the peephole optimizer can also be used as an assembly
+level macro expander. The rules themselves are MCU dependent whereas
+the rule language infra-structure is MCU independent. Peephole optimization
+rules for other MCU can be easily programmed using the rule language.
+<BR>
+
+<BR>
+The syntax for a rule is as follows:
+<BR>
+
+<BR>
+<TT>rule := replace [ restart ] '{' &lt;assembly sequence&gt; '&#92;n'
+</TT>&nbsp;
+<BR>
+<TT>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '}' by '{' '&#92;n'
+</TT>&nbsp;
+<BR>
+<TT>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;assembly
+sequence&gt; '&#92;n' </TT>&nbsp;
+<BR>
+<TT>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '}' [if &lt;functionName&gt;
+] '&#92;n' </TT>&nbsp;
+<BR>
+
+<BR>
+&lt;assembly sequence&gt; := assembly instruction (each instruction including
+labels must be on a separate line).
+<BR>
+
+<BR>
+The optimizer will apply to the rules one by one from the top in the
+sequence of their appearance, it will terminate when all rules are
+exhausted. If the 'restart' option is specified, then the optimizer
+will start matching the rules again from the top, this option for
+a rule is expensive (performance), it is intended to be used in situations
+where a transformation will trigger the same rule again. A good example
+of this the following rule:
+<BR>
+
+<BR>
+<TT>replace restart { </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;pop %1 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;push %1 } by { </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;; nop </TT>&nbsp;
+<BR>
+<TT>}</TT>
+<BR>
+
+<BR>
+Note that the replace pattern cannot be a blank, but can be a comment
+line. Without the 'restart' option only the inner most 'pop' 'push'
+pair would be eliminated, i.e.:
+<BR>
+
+<BR>
+<TT>&nbsp;&nbsp;pop ar1 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;pop ar2 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;push ar2 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;push ar1</TT>
+<BR>
+
+<BR>
+would result in:
+<BR>
+
+<BR>
+<TT>&nbsp;&nbsp;pop ar1 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;; nop </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;push ar1</TT>
+<BR>
+
+<BR>
+<I>with</I> the restart option the rule will be applied again to the
+resulting code and then all the pop-push pairs will be eliminated
+to yield:
+<BR>
+
+<BR>
+<TT>&nbsp;&nbsp;; nop </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;; nop</TT>
+<BR>
+
+<BR>
+A conditional function can be attached to a rule. Attaching rules
+are somewhat more involved, let me illustrate this with an example.
+<BR>
+
+<BR>
+<TT>replace { </TT>&nbsp;
+<BR>
+<TT>&nbsp; &nbsp; &nbsp;ljmp %5 </TT>&nbsp;
+<BR>
+<TT>%2:</TT>&nbsp;
+<BR>
+<TT>} by { </TT>&nbsp;
+<BR>
+<TT>&nbsp; &nbsp; &nbsp;sjmp %5 </TT>&nbsp;
+<BR>
+<TT>%2:</TT>&nbsp;
+<BR>
+<TT>} if labelInRange</TT>
+<BR>
+
+<BR>
+The optimizer does a look-up of a function name table defined in function
+<I>callFuncByName</I> in the source file SDCCpeeph.c, with the name
+<I>labelInRange</I>. If it finds a corresponding entry the function
+is called. Note there can be no parameters specified for these functions,
+in this case the use of <I>%5</I> is crucial, since the function
+<I>labelInRange</I> expects to find the label in that particular variable
+(the hash table containing the variable bindings is passed as a parameter).
+If you want to code more such functions, take a close look at the
+function labelInRange and the calling mechanism in source file SDCCpeeph.c.
+I know this whole thing is a little kludgey, but maybe some day we
+will have some better means. If you are looking at this file, you
+will also see the default rules that are compiled into the compiler,
+you can add your own rules in the default set there if you get tired
+of specifying the -peep-file option.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html841"
+ HREF="node40.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html835"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html829"
+ HREF="node38.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html837"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html839"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html842"
+ HREF="node40.html">4.2 Pragmas</A>
+<B> Up:</B> <A NAME="tex2html836"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html830"
+ HREF="node38.html">4. SDCC Technical Data</A>
+ &nbsp <B>  <A NAME="tex2html838"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html840"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node4.html b/doc/sdccman.html/node4.html
new file mode 100644 (file)
index 0000000..41554e8
--- /dev/null
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>1.2 Open Source</TITLE>
+<META NAME="description" CONTENT="1.2 Open Source">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node5.html">
+<LINK REL="previous" HREF="node3.html">
+<LINK REL="up" HREF="node2.html">
+<LINK REL="next" HREF="node5.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html250"
+ HREF="node5.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html244"
+ HREF="node2.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html238"
+ HREF="node3.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html246"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html248"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html251"
+ HREF="node5.html">1.3 Typographic conventions</A>
+<B> Up:</B> <A NAME="tex2html245"
+ HREF="node2.html">1. Introduction</A>
+<B> Previous:</B> <A NAME="tex2html239"
+ HREF="node3.html">1.1 About SDCC</A>
+ &nbsp <B>  <A NAME="tex2html247"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html249"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00022000000000000000">
+1.2 Open Source</A>
+</H2>
+
+<P>
+All packages used in this compiler system are <I>opensource</I> and
+<I>freeware</I>; source code for all the sub-packages (asxxxx assembler/linker,
+pre-processor) is distributed with the package. This documentation
+is maintained using a freeware word processor (LYX). 
+
+<P>
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published
+by the Free Software Foundation; either version 2, or (at your option)
+any later version. This program is distributed in the hope that it
+will be useful, but WITHOUT ANY WARRANTY; without even the implied
+warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+the GNU General Public License for more details. You should have received
+a copy of the GNU General Public License along with this program;
+if not, write to the Free Software Foundation, 59 Temple Place - Suite
+330, Boston, MA 02111-1307, USA. In other words, you are welcome to
+use, share and improve this program. You are forbidden to forbid anyone
+else to use, share and improve what you give them. Help stamp out
+software-hoarding! 
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html250"
+ HREF="node5.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html244"
+ HREF="node2.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html238"
+ HREF="node3.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html246"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html248"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html251"
+ HREF="node5.html">1.3 Typographic conventions</A>
+<B> Up:</B> <A NAME="tex2html245"
+ HREF="node2.html">1. Introduction</A>
+<B> Previous:</B> <A NAME="tex2html239"
+ HREF="node3.html">1.1 About SDCC</A>
+ &nbsp <B>  <A NAME="tex2html247"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html249"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node40.html b/doc/sdccman.html/node40.html
new file mode 100644 (file)
index 0000000..933af37
--- /dev/null
@@ -0,0 +1,177 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>4.2 Pragmas</TITLE>
+<META NAME="description" CONTENT="4.2 Pragmas">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node41.html">
+<LINK REL="previous" HREF="node39.html">
+<LINK REL="up" HREF="node38.html">
+<LINK REL="next" HREF="node41.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html866"
+ HREF="node41.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html860"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html854"
+ HREF="node39.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html862"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html864"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html867"
+ HREF="node41.html">4.3 &lt;pending: this is</A>
+<B> Up:</B> <A NAME="tex2html861"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html855"
+ HREF="node39.html">4.1 Optimizations</A>
+ &nbsp <B>  <A NAME="tex2html863"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html865"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00052000000000000000">
+4.2 Pragmas</A>
+</H2>
+
+<P>
+SDCC supports the following #pragma directives. This directives are
+applicable only at a function level.
+
+<P>
+
+<UL>
+<LI>SAVE - this will save all the current options.</LI>
+<LI>RESTORE - will restore the saved options from the last save. Note
+that SAVES &amp; RESTOREs cannot be nested. SDCC uses the same buffer
+to save the options each time a SAVE is called.</LI>
+<LI>NOGCSE - will stop global subexpression elimination.</LI>
+<LI>NOINDUCTION - will stop loop induction optimizations.</LI>
+<LI>NOJTBOUND - will not generate code for boundary value checking, when
+switch statements are turned into jump-tables.</LI>
+<LI>NOOVERLAY - the compiler will not overlay the parameters and local
+variables of a function.</LI>
+<LI>NOLOOPREVERSE - Will not do loop reversal optimization</LI>
+<LI>EXCLUDE NONE | {acc[,b[,dpl[,dph]]] - The exclude pragma
+disables generation of pair of push/pop instruction in ISR function
+(using interrupt keyword). The directive should be placed immediately
+before the ISR function definition and it affects ALL ISR functions
+following it. To enable the normal register saving for ISR functions
+use #pragma&nbsp;EXCLUDE&nbsp;none.</LI>
+<LI>CALLEE-SAVES function1[,function2[,function3...]] - The compiler
+by default uses a caller saves convention for register saving across
+function calls, however this can cause unneccessary register pushing
+&amp; popping when calling small functions from larger functions. This
+option can be used to switch the register saving convention for the
+function names specified. The compiler will not save registers when
+calling these functions, extra code will be generated at the entry
+&amp; exit for these functions to save &amp; restore the registers used
+by these functions, this can SUBSTANTIALLY reduce code &amp; improve
+run time performance of the generated code. In future the compiler
+(with interprocedural analysis) will be able to determine the appropriate
+scheme to use for each function call. If -callee-saves command line
+option is used, the function names specified in #pragma&nbsp;CALLEE-SAVES
+is appended to the list of functions specified inthe command line.</LI>
+</UL>
+The pragma's are intended to be used to turn-off certain optimizations
+which might cause the compiler to generate extra stack / data space
+to store compiler generated temporary variables. This usually happens
+in large functions. Pragma directives should be used as shown in the
+following example, they are used to control options &amp; optimizations
+for a given function; pragmas should be placed before and/or after
+a function, placing pragma's inside a function body could have unpredictable
+results.
+<BR>
+
+<BR>
+<TT>#pragma SAVE /* save the current settings */ </TT>&nbsp;
+<BR>
+<TT>#pragma NOGCSE /* turnoff global subexpression elimination
+*/ </TT>&nbsp;
+<BR>
+<TT>#pragma NOINDUCTION /* turn off induction optimizations
+*/ </TT>&nbsp;
+<BR>
+<TT>int foo () </TT>&nbsp;
+<BR>
+<TT>{ </TT>&nbsp;
+<BR>
+<TT>&nbsp; &nbsp; ... </TT>&nbsp;
+<BR>
+<TT>&nbsp; &nbsp; /* large code */ </TT>&nbsp;
+<BR>
+<TT>&nbsp; &nbsp; ... </TT>&nbsp;
+<BR>
+<TT>} </TT>&nbsp;
+<BR>
+<TT>#pragma RESTORE /* turn the optimizations back on */</TT>
+<BR>
+
+<BR>
+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 changing options for a function.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html866"
+ HREF="node41.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html860"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html854"
+ HREF="node39.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html862"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html864"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html867"
+ HREF="node41.html">4.3 &lt;pending: this is</A>
+<B> Up:</B> <A NAME="tex2html861"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html855"
+ HREF="node39.html">4.1 Optimizations</A>
+ &nbsp <B>  <A NAME="tex2html863"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html865"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node41.html b/doc/sdccman.html/node41.html
new file mode 100644 (file)
index 0000000..476720c
--- /dev/null
@@ -0,0 +1,319 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>4.3 &lt;pending: this is messy and incomplete&gt; Library Routines</TITLE>
+<META NAME="description" CONTENT="4.3 &lt;pending: this is messy and incomplete&gt; Library Routines">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node42.html">
+<LINK REL="previous" HREF="node40.html">
+<LINK REL="up" HREF="node38.html">
+<LINK REL="next" HREF="node42.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html880"
+ HREF="node42.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html874"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html868"
+ HREF="node40.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html876"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html878"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html881"
+ HREF="node42.html">4.4 Interfacing with Assembly</A>
+<B> Up:</B> <A NAME="tex2html875"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html869"
+ HREF="node40.html">4.2 Pragmas</A>
+ &nbsp <B>  <A NAME="tex2html877"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html879"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00053000000000000000">
+4.3 <I>&lt;pending: this is messy and incomplete&gt;</I> Library Routines</A>
+</H2>
+
+<P>
+The following library routines are provided for your convenience.
+
+<P>
+stdio.h - Contains the following functions printf &amp; sprintf these
+routines are developed by Martijn van Balen &lt;balen@natlab.research.philips.com&gt;. 
+
+<P>
+%[flags][width][b|B|l|L]type
+
+<P>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flags: -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; left justify output in
+specified field width 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefix output with
++/- sign if output is signed type 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; space&nbsp;&nbsp;&nbsp; prefix output with a
+blank if it's a signed positive value 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; specifies minimum number
+of characters outputted for numbers 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or strings. 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - For numbers,
+spaces are added on the left when needed. 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If width starts
+with a zero character, zeroes and used 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; instead of
+spaces. 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - For strings,
+spaces are are added on the left or right (when 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flag '-' is
+used) when needed. 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b/B:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte argument (used
+by d, u, o, x, X) 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l/L:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long argument (used
+by d, u, o, x, X)
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type:&nbsp; d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; decimal number 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned decimal
+number 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned octal number
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned hexadecimal
+number (0-9, a-f) 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned hexadecimal
+number (0-9, A-F) 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; character 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string (generic pointer)
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; generic pointer (I:data/idata,
+C:code, X:xdata, P:paged) 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float (still to be
+implemented)
+
+<P>
+Also contains a very simple version of printf (printf_small). This
+simplified version of printf supports only the following formats.
+
+<P>
+format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argument-type 
+<BR>
+%d &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decimal &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short/int 
+<BR>
+%ld&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decimal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long 
+<BR>
+%hd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decimal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char 
+<BR>
+%x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hexadecimal&nbsp;&nbsp;&nbsp;&nbsp;short/int 
+<BR>
+%lx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hexadecimal&nbsp;&nbsp;&nbsp;&nbsp;long 
+<BR>
+%hx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hexadecimal&nbsp;&nbsp;&nbsp;&nbsp;char 
+<BR>
+%o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;octal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short/int 
+<BR>
+%lo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;octal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long 
+<BR>
+%ho&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;octal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char 
+<BR>
+%c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char 
+<BR>
+%s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_generic pointer
+
+<P>
+The routine is very stack intesive, -stack-after-data parameter should
+be used when using this routine, the routine also takes about 1K of
+code space. It also expects an external function named putchar(char)
+to be present (this can be changed). When using the %s format the
+string / pointer should be cast to a generic pointer. eg.
+
+<P>
+printf_small(``my str %s, my int %d&#92;n'',(char
+_generic *)mystr,myint);
+
+<P>
+
+<UL>
+<LI>stdarg.h - contains definition for the following macros to be used
+for variable parameter list, note that a function can have a variable
+parameter list if and only if it is 'reentrant'
+
+<P>
+va_list, va_start, va_arg, va_end.
+
+<P>
+ </LI>
+<LI>setjmp.h - contains defintion for ANSI setjmp &amp; longjmp routines.
+Note in this case setjmp &amp; longjmp can be used between functions
+executing within the same register bank, if long jmp is executed from
+a function that is using a different register bank from the function
+issuing the setjmp function, the results may be unpredictable. The
+jump buffer requires 3 bytes of data (the stack pointer &amp; a 16 byte
+return address), and can be placed in any address space.</LI>
+<LI>stdlib.h - contains the following functions.
+
+<P>
+atoi, atol.
+
+<P>
+ </LI>
+<LI>string.h - contains the following functions.
+
+<P>
+strcpy, strncpy, strcat, strncat, strcmp, strncmp, strchr, strrchr,
+strspn, strcspn, strpbrk, strstr, strlen, strtok, memcpy, memcmp,
+memset.
+
+<P>
+ </LI>
+<LI>ctype.h - contains the following routines.
+
+<P>
+iscntrl, isdigit, isgraph, islower, isupper, isprint, ispunct, isspace,
+isxdigit, isalnum, isalpha.
+
+<P>
+ </LI>
+<LI>malloc.h - The malloc routines are developed by Dmitry S. Obukhov
+(dso@usa.net). These routines will allocate memory from the external
+ram. Here is a description on how to use them (as described by the
+author).
+
+<P>
+//Example: 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; #define DYNAMIC_MEMORY_SIZE 0x2000 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; ..... 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; unsigned char xdata dynamic_memory_pool[DYNAMIC_MEMORY_SIZE];
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; unsigned char xdata * current_buffer; 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; ..... 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; void main(void) 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; { 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; init_dynamic_memory(dynamic_memory_pool,DYNAMIC_MEMORY_SIZE);
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Now it's possible to use malloc. 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; current_buffer = malloc(0x100); 
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp; //
+
+<P>
+ </LI>
+<LI>serial.h - Serial IO routines are also developed by Dmitry S. Obukhov
+(dso@usa.net). These routines are interrupt driven with a 256 byte
+circular buffer, they also expect external ram to be present. Please
+see documentation in file SDCCDIR/sdcc51lib/serial.c. Note the header
+file ``serial.h'' MUST be included in the file containing the
+'main' function.</LI>
+<LI>ser.h - Alternate serial routine provided by Wolfgang Esslinger &lt;wolfgang@WiredMinds.com&gt;
+these routines are more compact and faster. Please see documentation
+in file SDCCDIR/sdcc51lib/ser.c</LI>
+<LI>ser_ir.h - Another alternate set of serial routines provided by Josef
+Wolf &lt;jw@raven.inka.de&gt;, these routines do not use the external ram.</LI>
+<LI>reg51.h - contains register definitions for a standard 8051</LI>
+<LI>float.h - contains min, max and other floating point related stuff.</LI>
+</UL>
+All library routines are compiled as -model-small, they are all non-reentrant,
+if you plan to use the large model or want to make these routines
+reentrant, then they will have to be recompiled with the appropriate
+compiler option.
+
+<P>
+Have not had time to do the more involved routines like printf, will
+get to them shortly.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html880"
+ HREF="node42.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html874"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html868"
+ HREF="node40.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html876"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html878"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html881"
+ HREF="node42.html">4.4 Interfacing with Assembly</A>
+<B> Up:</B> <A NAME="tex2html875"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html869"
+ HREF="node40.html">4.2 Pragmas</A>
+ &nbsp <B>  <A NAME="tex2html877"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html879"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node42.html b/doc/sdccman.html/node42.html
new file mode 100644 (file)
index 0000000..e1433df
--- /dev/null
@@ -0,0 +1,297 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>4.4 Interfacing with Assembly Routines</TITLE>
+<META NAME="description" CONTENT="4.4 Interfacing with Assembly Routines">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node43.html">
+<LINK REL="previous" HREF="node41.html">
+<LINK REL="up" HREF="node38.html">
+<LINK REL="next" HREF="node43.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html894"
+ HREF="node43.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html888"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html882"
+ HREF="node41.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html890"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html892"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html895"
+ HREF="node43.html">4.5 External Stack</A>
+<B> Up:</B> <A NAME="tex2html889"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html883"
+ HREF="node41.html">4.3 &lt;pending: this is</A>
+ &nbsp <B>  <A NAME="tex2html891"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html893"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html896"
+ HREF="node42.html#SECTION00054100000000000000">4.4.1 Global Registers used for Parameter Passing</A>
+<LI><A NAME="tex2html897"
+ HREF="node42.html#SECTION00054200000000000000">4.4.2 Assembler Routine(non-reentrant)</A>
+<LI><A NAME="tex2html898"
+ HREF="node42.html#SECTION00054300000000000000">4.4.3 Assembler Routine(reentrant)</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H2><A NAME="SECTION00054000000000000000">
+4.4 Interfacing with Assembly Routines</A>
+</H2>
+
+<P>
+
+<H3><A NAME="SECTION00054100000000000000">
+4.4.1 Global Registers used for Parameter Passing</A>
+</H3>
+
+<P>
+The compiler always uses the global registers <I>DPL,DPH,B</I> and
+<I>ACC</I> to pass the first parameter to a routine. The second parameter
+onwards is either allocated on the stack (for reentrant routines or
+if -stack-auto is used) or in the internal / external ram (depending
+on the memory model). 
+
+<P>
+
+<H3><A NAME="SECTION00054200000000000000">
+4.4.2 Assembler Routine(non-reentrant)</A>
+</H3>
+
+<P>
+In the following example the function cfunc calls an assembler routine
+asm_func, which takes two parameters.
+<BR>
+
+<BR>
+<TT>extern int asm_func(unsigned char, unsigned char);</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>int c_func (unsigned char i, unsigned char j)</TT>&nbsp;
+<BR>
+<TT>{</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;return asm_func(i,j);</TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>int main()</TT>&nbsp;
+<BR>
+<TT>{</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;return c_func(10,9);</TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+The corresponding assembler function is:
+<BR>
+
+<BR>
+<TT>.globl _asm_func_PARM_2 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.globl _asm_func </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.area OSEG </TT>&nbsp;
+<BR>
+<TT>_asm_func_PARM_2:</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ds      1 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.area CSEG </TT>&nbsp;
+<BR>
+<TT>_asm_func: </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov     a,dpl </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add     a,_asm_func_PARM_2 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov     dpl,a </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov     dpl,#0x00 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+Note here that the return values are placed in 'dpl' - One byte return
+value, 'dpl' LSB &amp; 'dph' MSB for two byte values. 'dpl', 'dph' and
+'b' for three byte values (generic pointers) and 'dpl','dph','b' &amp;
+'acc' for four byte values.
+
+<P>
+The parameter naming convention is _&lt;function_name&gt;_PARM_&lt;n&gt;,
+where n is the parameter number starting from 1, and counting from
+the left. The first parameter is passed in ``dpl'' for One bye
+parameter, ``dptr'' if two bytes, ``b,dptr'' for three bytes
+and ``acc,b,dptr'' for four bytes, the varible name for the second
+parameter will be _&lt;function_name&gt;_PARM_2.
+<BR>
+
+<BR>
+Assemble the assembler routine with the following command:
+<BR>
+
+<BR>
+<I><B>asx8051 -losg asmfunc.asm</B></I>
+<BR>
+<BR>
+Then compile and link the assembler routine to the C source file with
+the following command:
+<BR>
+
+<BR>
+<I><B>sdcc cfunc.c asmfunc.rel</B></I>
+
+<P>
+
+<H3><A NAME="SECTION00054300000000000000">
+4.4.3 Assembler Routine(reentrant)</A>
+</H3>
+
+<P>
+In this case the second parameter onwards will be passed on the stack,
+the parameters are pushed from right to left i.e. after the call the
+left most parameter will be on the top of the stack. Here is an example:
+<BR>
+
+<BR>
+<TT>extern int asm_func(unsigned char, unsigned char);</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>int c_func (unsigned char i, unsigned char j) reentrant </TT>&nbsp;
+<BR>
+<TT>{ </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;return asm_func(i,j); </TT>&nbsp;
+<BR>
+<TT>} </TT>&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>int main() </TT>&nbsp;
+<BR>
+<TT>{ </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;return c_func(10,9); </TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>
+
+<BR>
+The corresponding assembler routine is:
+<BR>
+
+<BR>
+<TT>.globl _asm_func </TT>&nbsp;
+<BR>
+<TT>_asm_func: </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;push  _bp </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;mov  _bp,sp </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;mov  r2,dpl</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;mov  a,_bp </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;clr  c </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;add  a,#0xfd </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;mov  r0,a </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;add  a,#0xfc</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;mov  r1,a </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;mov  a,@r0 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;add  a,r2</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;mov  dpl,a </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;mov  dph,#0x00 </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;mov  sp,_bp </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;pop  _bp </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;ret</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+The compiling and linking procedure remains the same, however note
+the extra entry &amp; exit linkage required for the assembler code, _bp
+is the stack frame pointer and is used to compute the offset into
+the stack for parameters and local variables.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html894"
+ HREF="node43.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html888"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html882"
+ HREF="node41.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html890"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html892"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html895"
+ HREF="node43.html">4.5 External Stack</A>
+<B> Up:</B> <A NAME="tex2html889"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html883"
+ HREF="node41.html">4.3 &lt;pending: this is</A>
+ &nbsp <B>  <A NAME="tex2html891"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html893"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node43.html b/doc/sdccman.html/node43.html
new file mode 100644 (file)
index 0000000..a17a592
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>4.5 External Stack</TITLE>
+<META NAME="description" CONTENT="4.5 External Stack">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node44.html">
+<LINK REL="previous" HREF="node42.html">
+<LINK REL="up" HREF="node38.html">
+<LINK REL="next" HREF="node44.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html911"
+ HREF="node44.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html905"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html899"
+ HREF="node42.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html907"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html909"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html912"
+ HREF="node44.html">4.6 ANSI-Compliance</A>
+<B> Up:</B> <A NAME="tex2html906"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html900"
+ HREF="node42.html">4.4 Interfacing with Assembly</A>
+ &nbsp <B>  <A NAME="tex2html908"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html910"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00055000000000000000">
+4.5 External Stack</A>
+</H2>
+
+<P>
+The external stack is located at the start of the external ram segment,
+and is 256 bytes in size. When -xstack option is used to compile
+the program, the parameters and local variables of all reentrant functions
+are allocated in this area. This option is provided for programs with
+large stack space requirements. When used with the -stack-auto option,
+all parameters and local variables are allocated on the external stack
+(note support libraries will need to be recompiled with the same options).
+
+<P>
+The compiler outputs the higher order address byte of the external
+ram segment into PORT P2, therefore when using the External Stack
+option, this port MAY NOT be used by the application program.
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node44.html b/doc/sdccman.html/node44.html
new file mode 100644 (file)
index 0000000..e4fe86a
--- /dev/null
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>4.6 ANSI-Compliance</TITLE>
+<META NAME="description" CONTENT="4.6 ANSI-Compliance">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node45.html">
+<LINK REL="previous" HREF="node43.html">
+<LINK REL="up" HREF="node38.html">
+<LINK REL="next" HREF="node45.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html925"
+ HREF="node45.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html919"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html913"
+ HREF="node43.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html921"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html923"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html926"
+ HREF="node45.html">4.7 Cyclomatic Complexity</A>
+<B> Up:</B> <A NAME="tex2html920"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html914"
+ HREF="node43.html">4.5 External Stack</A>
+ &nbsp <B>  <A NAME="tex2html922"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html924"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00056000000000000000">
+4.6 ANSI-Compliance</A>
+</H2>
+
+<P>
+Deviations from the compliancy.
+
+<P>
+
+<UL>
+<LI>functions are not always reentrant.</LI>
+<LI>structures cannot be assigned values directly, cannot be passed as
+function parameters or assigned to each other and cannot be a return
+value from a function, e.g.:&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>struct s { ... }; </TT>&nbsp;
+<BR>
+<TT>struct s s1, s2; </TT>&nbsp;
+<BR>
+<TT>foo() </TT>&nbsp;
+<BR>
+<TT>{ </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;... </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;s1 = s2 ; /* is invalid in SDCC although allowed
+in ANSI */ </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;... </TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>
+<TT>struct s foo1 (struct s parms) /* is invalid in SDCC although
+allowed in ANSI */ </TT>&nbsp;
+<BR>
+<TT>{ </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;struct s rets; </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;... </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;return rets;/* is invalid in SDCC although allowed
+in ANSI */ </TT>&nbsp;
+<BR>
+<TT>}</TT></LI>
+<LI>'long long' (64 bit integers) not supported.</LI>
+<LI>'double' precision floating point not supported.</LI>
+<LI>No support for setjmp and longjmp (for now).</LI>
+<LI>Old K&amp;R style function declarations are NOT allowed.
+<BR>&nbsp;
+<BR>
+<TT>foo(i,j) /* this old style of function declarations */
+</TT>&nbsp;
+<BR>
+<TT>int i,j; /* are valid in ANSI but not valid in SDCC */
+</TT>&nbsp;
+<BR>
+<TT>{ </TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;... </TT>&nbsp;
+<BR>
+<TT>}</TT></LI>
+<LI>functions declared as pointers must be dereferenced during the call.
+<BR>&nbsp;
+<BR>
+<TT>int (*foo)();</TT>&nbsp;
+<BR>
+<TT>... </TT>&nbsp;
+<BR>
+<TT>/* has to be called like this */ </TT>&nbsp;
+<BR>
+<TT>(*foo)(); /* ansi standard allows calls to be made like
+'foo()' */</TT></LI>
+</UL>
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html925"
+ HREF="node45.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html919"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html913"
+ HREF="node43.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html921"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html923"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html926"
+ HREF="node45.html">4.7 Cyclomatic Complexity</A>
+<B> Up:</B> <A NAME="tex2html920"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html914"
+ HREF="node43.html">4.5 External Stack</A>
+ &nbsp <B>  <A NAME="tex2html922"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html924"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node45.html b/doc/sdccman.html/node45.html
new file mode 100644 (file)
index 0000000..18b68c6
--- /dev/null
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>4.7 Cyclomatic Complexity</TITLE>
+<META NAME="description" CONTENT="4.7 Cyclomatic Complexity">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="previous" HREF="node44.html">
+<LINK REL="up" HREF="node38.html">
+<LINK REL="next" HREF="node46.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html937"
+ HREF="node46.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html931"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html927"
+ HREF="node44.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html933"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html935"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html938"
+ HREF="node46.html">5. TIPS</A>
+<B> Up:</B> <A NAME="tex2html932"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html928"
+ HREF="node44.html">4.6 ANSI-Compliance</A>
+ &nbsp <B>  <A NAME="tex2html934"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html936"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00057000000000000000">
+4.7 Cyclomatic Complexity</A>
+</H2>
+
+<P>
+Cyclomatic complexity of a function is defined as the number of independent
+paths the program can take during execution of the function. This
+is an important number since it defines the number test cases you
+have to generate to validate the function. The accepted industry standard
+for complexity number is 10, if the cyclomatic complexity reported
+by SDCC exceeds 10 you should think about simplification of the function
+logic. Note that the complexity level is not related to the number
+of lines of code in a function. Large functions can have low complexity,
+and small functions can have large complexity levels. 
+<BR>
+
+<BR>
+SDCC uses the following formula to compute the complexity:
+<BR>
+
+<P>
+complexity = (number of edges in control flow graph) - (number of
+nodes in control flow graph) + 2;
+<BR>
+
+<BR>
+Having said that the industry standard is 10, you should be aware
+that in some cases it be may unavoidable to have a complexity level
+of less than 10. For example if you have switch statement with more
+than 10 case labels, each case label adds one to the complexity level.
+The complexity level is by no means an absolute measure of the algorithmic
+complexity of the function, it does however provide a good starting
+point for which functions you might look at for further optimization.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html937"
+ HREF="node46.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html931"
+ HREF="node38.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html927"
+ HREF="node44.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html933"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html935"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html938"
+ HREF="node46.html">5. TIPS</A>
+<B> Up:</B> <A NAME="tex2html932"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<B> Previous:</B> <A NAME="tex2html928"
+ HREF="node44.html">4.6 ANSI-Compliance</A>
+ &nbsp <B>  <A NAME="tex2html934"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html936"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node46.html b/doc/sdccman.html/node46.html
new file mode 100644 (file)
index 0000000..d9d04ed
--- /dev/null
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>5. TIPS</TITLE>
+<META NAME="description" CONTENT="5. TIPS">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node48.html">
+<LINK REL="previous" HREF="node38.html">
+<LINK REL="up" HREF="sdccman.html">
+<LINK REL="next" HREF="node47.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html951"
+ HREF="node47.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html945"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html939"
+ HREF="node45.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html947"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html949"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html952"
+ HREF="node47.html">5.1 Notes on MCS51</A>
+<B> Up:</B> <A NAME="tex2html946"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html940"
+ HREF="node45.html">4.7 Cyclomatic Complexity</A>
+ &nbsp <B>  <A NAME="tex2html948"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html950"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00060000000000000000">
+5. TIPS</A>
+</H1>
+
+<P>
+Here are a few guidelines that will help the compiler generate more
+efficient code, some of the tips are specific to this compiler others
+are generally good programming practice.
+
+<P>
+
+<UL>
+<LI>Use the smallest data type to represent your data-value. If it is
+known in advance that the value is going to be less than 256 then
+use a 'char' instead of a 'short' or 'int'.</LI>
+<LI>Use unsigned when it is known in advance that the value is not going
+to be negative. This helps especially if you are doing division or
+multiplication.</LI>
+<LI>NEVER jump into a LOOP.</LI>
+<LI>Declare the variables to be local whenever possible, especially loop
+control variables (induction).</LI>
+<LI>Since the compiler does not do implicit integral promotion, the programmer
+should do an explicit cast when integral promotion is required.</LI>
+<LI>Reducing the size of division, multiplication &amp; modulus operations
+can reduce code size substantially. Take the following code for example.&nbsp;
+<BR>&nbsp;
+<BR>
+<TT>foobar(unsigned int p1, unsigned char ch)</TT>&nbsp;
+<BR>
+<TT>{</TT>&nbsp;
+<BR>
+ <TT>   unsigned char ch1 = p1 % ch ;</TT>&nbsp;
+<BR>
+ <TT>   ....    </TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>
+
+<BR>
+For the modulus operation the variable ch will be promoted to unsigned
+int first then the modulus operation will be performed (this will
+lead to a call to support routine _muduint()), and the result will
+be casted to an int. If the code is changed to 
+<BR>&nbsp;
+<BR>
+<TT>foobar(unsigned int p1, unsigned char ch)</TT>&nbsp;
+<BR>
+<TT>{</TT>&nbsp;
+<BR>
+ <TT>   unsigned char ch1 = (unsigned char)p1 % ch ;</TT>&nbsp;
+<BR>
+ <TT>   ....    </TT>&nbsp;
+<BR>
+<TT>}</TT>&nbsp;
+<BR>
+
+<BR>
+It would substantially reduce the code generated (future versions
+of the compiler will be smart enough to detect such optimization oppurtunities).</LI>
+</UL>
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html953"
+ HREF="node47.html">5.1 Notes on MCS51 memory layout</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html951"
+ HREF="node47.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html945"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html939"
+ HREF="node45.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html947"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html949"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html952"
+ HREF="node47.html">5.1 Notes on MCS51</A>
+<B> Up:</B> <A NAME="tex2html946"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html940"
+ HREF="node45.html">4.7 Cyclomatic Complexity</A>
+ &nbsp <B>  <A NAME="tex2html948"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html950"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node47.html b/doc/sdccman.html/node47.html
new file mode 100644 (file)
index 0000000..4b60038
--- /dev/null
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>5.1 Notes on MCS51 memory layout</TITLE>
+<META NAME="description" CONTENT="5.1 Notes on MCS51 memory layout">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="previous" HREF="node46.html">
+<LINK REL="up" HREF="node46.html">
+<LINK REL="next" HREF="node48.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html964"
+ HREF="node48.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html958"
+ HREF="node46.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html954"
+ HREF="node46.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html960"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html962"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html965"
+ HREF="node48.html">6. Retargetting for other</A>
+<B> Up:</B> <A NAME="tex2html959"
+ HREF="node46.html">5. TIPS</A>
+<B> Previous:</B> <A NAME="tex2html955"
+ HREF="node46.html">5. TIPS</A>
+ &nbsp <B>  <A NAME="tex2html961"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html963"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00061000000000000000">
+5.1 Notes on MCS51 memory layout</A>
+</H2>
+
+<P>
+The 8051 family of micro controller have a minimum of 128 bytes of
+internal memory which is structured as follows
+<BR>
+
+<BR>
+- Bytes 00-1F - 32 bytes to hold up to 4 banks of the registers R7
+to R7 
+<BR>
+- Bytes 20-2F - 16 bytes to hold 128 bit variables and 
+<BR>
+- Bytes 30-7F - 60 bytes for general purpose use.
+<BR>
+
+<BR>
+Normally the SDCC compiler will only utilise the first bank of registers,
+but it is possible to specify that other banks of registers should
+be used in interrupt routines. By default, the compiler will place
+the stack after the last bank of used registers, i.e. if the first
+2 banks of registers are used, it will position the base of the internal
+stack at address 16 (0X10). This implies that as the stack grows,
+it will use up the remaining register banks, and the 16 bytes used
+by the 128 bit variables, and 60 bytes for general purpose use.
+
+<P>
+By default, the compiler uses the 60 general purpose bytes to hold
+&#34;near data&#34;. The compiler/optimiser may also declare
+some Local Variables in this area to hold local data. 
+
+<P>
+If any of the 128 bit variables are used, or near data is being used
+then care needs to be taken to ensure that the stack does not grow
+so much that it starts to over write either your bit variables or
+&#34;near data&#34;. There is no runtime checking to prevent
+this from happening.
+
+<P>
+The amount of stack being used is affected by the use of the &#34;internal
+stack&#34; to save registers before a subroutine call is made
+(-stack-auto will declare parameters and local variables on the stack)
+and the number of nested subroutines.
+
+<P>
+If you detect that the stack is over writing you data, then the following
+can be done. -xstack will cause an external stack to be used for
+saving registers and (if -stack-auto is being used) storing parameters
+and local variables. However this will produce more code which will
+be slower to execute. 
+
+<P>
+-stack-loc will allow you specify the start of the stack, i.e. you
+could start it after any data in the general purpose area. However
+this may waste the memory not used by the register banks and if the
+size of the &#34;near data&#34; increases, it may creep
+into the bottom of the stack.
+
+<P>
+-stack-after-data, similar to the -stack-loc, but it automatically
+places the stack after the end of the &#34;near data&#34;.
+Again this could waste any spare register space.
+
+<P>
+-data-loc allows you to specify the start address of the near data.
+This could be used to move the &#34;near data&#34; further
+away from the stack giving it more room to grow. This will only work
+if no bit variables are being used and the stack can grow to use the
+bit variable space.
+<BR>
+
+<BR>
+Conclusion.
+<BR>
+
+<BR>
+If you find that the stack is over writing your bit variables or &#34;near
+data&#34; then the approach which best utilised the internal
+memory is to position the &#34;near data&#34; after the
+last bank of used registers or, if you use bit variables, after the
+last bit variable by using the -data-loc, e.g. if two register banks
+are being used and no bit variables, -data-loc 16, and use the -stack-after-data
+option.
+
+<P>
+If bit variables are being used, another method would be to try and
+squeeze the data area in the unused register banks if it will fit,
+and start the stack after the last bit variable.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html964"
+ HREF="node48.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html958"
+ HREF="node46.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html954"
+ HREF="node46.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html960"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html962"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html965"
+ HREF="node48.html">6. Retargetting for other</A>
+<B> Up:</B> <A NAME="tex2html959"
+ HREF="node46.html">5. TIPS</A>
+<B> Previous:</B> <A NAME="tex2html955"
+ HREF="node46.html">5. TIPS</A>
+ &nbsp <B>  <A NAME="tex2html961"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html963"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node48.html b/doc/sdccman.html/node48.html
new file mode 100644 (file)
index 0000000..5cf45b1
--- /dev/null
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>6. Retargetting for other MCUs.</TITLE>
+<META NAME="description" CONTENT="6. Retargetting for other MCUs.">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node49.html">
+<LINK REL="previous" HREF="node46.html">
+<LINK REL="up" HREF="sdccman.html">
+<LINK REL="next" HREF="node49.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html978"
+ HREF="node49.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html972"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html966"
+ HREF="node47.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html974"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html976"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html979"
+ HREF="node49.html">7. SDCDB - Source</A>
+<B> Up:</B> <A NAME="tex2html973"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html967"
+ HREF="node47.html">5.1 Notes on MCS51</A>
+ &nbsp <B>  <A NAME="tex2html975"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html977"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00070000000000000000">
+6. Retargetting for other MCUs.</A>
+</H1>
+
+<P>
+The issues for retargetting the compiler are far too numerous to be
+covered by this document. What follows is a brief description of each
+of the seven phases of the compiler and its MCU dependency.
+
+<P>
+
+<UL>
+<LI>Parsing the source and building the annotated parse tree. This phase
+is largely MCU independent (except for the language extensions). Syntax
+&amp; semantic checks are also done in this phase, along with some initial
+optimizations like back patching labels and the pattern matching optimizations
+like bit-rotation etc.</LI>
+<LI>The second phase involves generating an intermediate code which can
+be easy manipulated during the later phases. This phase is entirely
+MCU independent. The intermediate code generation assumes the target
+machine has unlimited number of registers, and designates them with
+the name iTemp. The compiler can be made to dump a human readable
+form of the code generated by using the -dumpraw option.</LI>
+<LI>This phase does the bulk of the standard optimizations and is also
+MCU independent. This phase can be broken down into several sub-phases:
+<BR>
+
+<BR>
+Break down intermediate code (iCode) into basic blocks.
+<BR>
+Do control flow &amp; data flow analysis on the basic blocks.
+<BR>
+Do local common subexpression elimination, then global subexpression
+elimination
+<BR>
+Dead code elimination
+<BR>
+Loop optimizations
+<BR>
+If loop optimizations caused any changes then do 'global subexpression
+elimination' and 'dead code elimination' again.</LI>
+<LI>This phase determines the live-ranges; by live range I mean those
+iTemp variables defined by the compiler that still survive after all
+the optimizations. Live range analysis is essential for register allocation,
+since these computation determines which of these iTemps will be assigned
+to registers, and for how long.</LI>
+<LI>Phase five is register allocation. There are two parts to this process.
+<BR>
+
+<BR>
+The first part I call 'register packing' (for lack of a better term).
+In this case several MCU specific expression folding is done to reduce
+register pressure.
+<BR>
+
+<BR>
+The second part is more MCU independent and deals with allocating
+registers to the remaining live ranges. A lot of MCU specific code
+does creep into this phase because of the limited number of index
+registers available in the 8051.</LI>
+<LI>The Code generation phase is (unhappily), entirely MCU dependent and
+very little (if any at all) of this code can be reused for other MCU.
+However the scheme for allocating a homogenized assembler operand
+for each iCode operand may be reused.</LI>
+<LI>As mentioned in the optimization section the peep-hole optimizer is
+rule based system, which can reprogrammed for other MCUs.</LI>
+</UL>
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html978"
+ HREF="node49.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html972"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html966"
+ HREF="node47.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html974"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html976"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html979"
+ HREF="node49.html">7. SDCDB - Source</A>
+<B> Up:</B> <A NAME="tex2html973"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html967"
+ HREF="node47.html">5.1 Notes on MCS51</A>
+ &nbsp <B>  <A NAME="tex2html975"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html977"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node49.html b/doc/sdccman.html/node49.html
new file mode 100644 (file)
index 0000000..58b95f1
--- /dev/null
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>7. SDCDB - Source Level Debugger</TITLE>
+<META NAME="description" CONTENT="7. SDCDB - Source Level Debugger">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node56.html">
+<LINK REL="previous" HREF="node48.html">
+<LINK REL="up" HREF="sdccman.html">
+<LINK REL="next" HREF="node50.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html992"
+ HREF="node50.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html986"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html980"
+ HREF="node48.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html988"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html990"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html993"
+ HREF="node50.html">7.1 Compiling for Debugging</A>
+<B> Up:</B> <A NAME="tex2html987"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html981"
+ HREF="node48.html">6. Retargetting for other</A>
+ &nbsp <B>  <A NAME="tex2html989"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html991"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00080000000000000000">
+7. SDCDB - Source Level Debugger</A>
+</H1>
+
+<P>
+SDCC is distributed with a source level debugger. The debugger uses
+a command line interface, the command repertoire of the debugger has
+been kept as close to gdb (the GNU debugger) as possible. The configuration
+and build process is part of the standard compiler installation, which
+also builds and installs the debugger in the target directory specified
+during configuration. The debugger allows you debug BOTH at the C
+source and at the ASM source level.
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html994"
+ HREF="node50.html">7.1 Compiling for Debugging</A>
+<LI><A NAME="tex2html995"
+ HREF="node51.html">7.2 How the Debugger Works</A>
+<LI><A NAME="tex2html996"
+ HREF="node52.html">7.3 Starting the Debugger</A>
+<LI><A NAME="tex2html997"
+ HREF="node53.html">7.4 Command Line Options.</A>
+<LI><A NAME="tex2html998"
+ HREF="node54.html">7.5 Debugger Commands.</A>
+<UL>
+<LI><A NAME="tex2html999"
+ HREF="node54.html#SECTION00085100000000000000">7.5.1 break [line | file:line | function | file:function]</A>
+<LI><A NAME="tex2html1000"
+ HREF="node54.html#SECTION00085200000000000000">7.5.2 clear [line | file:line | function | file:function ]</A>
+<LI><A NAME="tex2html1001"
+ HREF="node54.html#SECTION00085300000000000000">7.5.3 continue</A>
+<LI><A NAME="tex2html1002"
+ HREF="node54.html#SECTION00085400000000000000">7.5.4 finish</A>
+<LI><A NAME="tex2html1003"
+ HREF="node54.html#SECTION00085500000000000000">7.5.5 delete [n]</A>
+<LI><A NAME="tex2html1004"
+ HREF="node54.html#SECTION00085600000000000000">7.5.6 info [break | stack | frame | registers ]</A>
+<LI><A NAME="tex2html1005"
+ HREF="node54.html#SECTION00085700000000000000">7.5.7 step</A>
+<LI><A NAME="tex2html1006"
+ HREF="node54.html#SECTION00085800000000000000">7.5.8 next</A>
+<LI><A NAME="tex2html1007"
+ HREF="node54.html#SECTION00085900000000000000">7.5.9 run</A>
+<LI><A NAME="tex2html1008"
+ HREF="node54.html#SECTION000851000000000000000">7.5.10 ptype variable </A>
+<LI><A NAME="tex2html1009"
+ HREF="node54.html#SECTION000851100000000000000">7.5.11 print variable</A>
+<LI><A NAME="tex2html1010"
+ HREF="node54.html#SECTION000851200000000000000">7.5.12 file filename</A>
+<LI><A NAME="tex2html1011"
+ HREF="node54.html#SECTION000851300000000000000">7.5.13 frame</A>
+<LI><A NAME="tex2html1012"
+ HREF="node54.html#SECTION000851400000000000000">7.5.14 set srcmode</A>
+<LI><A NAME="tex2html1013"
+ HREF="node54.html#SECTION000851500000000000000">7.5.15 ! simulator command</A>
+<LI><A NAME="tex2html1014"
+ HREF="node54.html#SECTION000851600000000000000">7.5.16 quit.</A>
+</UL>
+<LI><A NAME="tex2html1015"
+ HREF="node55.html">7.6 Interfacing with XEmacs.</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node5.html b/doc/sdccman.html/node5.html
new file mode 100644 (file)
index 0000000..4012007
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>1.3 Typographic conventions</TITLE>
+<META NAME="description" CONTENT="1.3 Typographic conventions">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node6.html">
+<LINK REL="previous" HREF="node4.html">
+<LINK REL="up" HREF="node2.html">
+<LINK REL="next" HREF="node6.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html264"
+ HREF="node6.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html258"
+ HREF="node2.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html252"
+ HREF="node4.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html260"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html262"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html265"
+ HREF="node6.html">1.4 Compatibility with previous</A>
+<B> Up:</B> <A NAME="tex2html259"
+ HREF="node2.html">1. Introduction</A>
+<B> Previous:</B> <A NAME="tex2html253"
+ HREF="node4.html">1.2 Open Source</A>
+ &nbsp <B>  <A NAME="tex2html261"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html263"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00023000000000000000">
+1.3 Typographic conventions</A>
+</H2>
+
+<P>
+Throughout this manual, we will use the following convention. Commands
+you have to type in are printed in <I><B>&#34;sans
+serif&#34;</B></I><I>.</I> Code samples are printed in <TT>typewriter
+font.</TT> Interesting items and new terms are printed in <I>italicised
+type.</I>
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node50.html b/doc/sdccman.html/node50.html
new file mode 100644 (file)
index 0000000..be9844d
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>7.1 Compiling for Debugging</TITLE>
+<META NAME="description" CONTENT="7.1 Compiling for Debugging">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node51.html">
+<LINK REL="previous" HREF="node49.html">
+<LINK REL="up" HREF="node49.html">
+<LINK REL="next" HREF="node51.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html1028"
+ HREF="node51.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1022"
+ HREF="node49.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1016"
+ HREF="node49.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1024"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1026"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1029"
+ HREF="node51.html">7.2 How the Debugger</A>
+<B> Up:</B> <A NAME="tex2html1023"
+ HREF="node49.html">7. SDCDB - Source</A>
+<B> Previous:</B> <A NAME="tex2html1017"
+ HREF="node49.html">7. SDCDB - Source</A>
+ &nbsp <B>  <A NAME="tex2html1025"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1027"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00081000000000000000">
+7.1 Compiling for Debugging</A>
+</H2>
+
+<P>
+The debug option must be specified for all files for which debug
+information is to be generated. The complier generates a .cdb file
+for each of these files. The linker updates the .cdb file with the
+address information. This .cdb is used by the debugger.
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node51.html b/doc/sdccman.html/node51.html
new file mode 100644 (file)
index 0000000..3f715cc
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>7.2 How the Debugger Works</TITLE>
+<META NAME="description" CONTENT="7.2 How the Debugger Works">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node52.html">
+<LINK REL="previous" HREF="node50.html">
+<LINK REL="up" HREF="node49.html">
+<LINK REL="next" HREF="node52.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html1042"
+ HREF="node52.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1036"
+ HREF="node49.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1030"
+ HREF="node50.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1038"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1040"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1043"
+ HREF="node52.html">7.3 Starting the Debugger</A>
+<B> Up:</B> <A NAME="tex2html1037"
+ HREF="node49.html">7. SDCDB - Source</A>
+<B> Previous:</B> <A NAME="tex2html1031"
+ HREF="node50.html">7.1 Compiling for Debugging</A>
+ &nbsp <B>  <A NAME="tex2html1039"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1041"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00082000000000000000">
+7.2 How the Debugger Works</A>
+</H2>
+
+<P>
+When the -debug option is specified the compiler generates extra
+symbol information some of which are put into the the assembler source
+and some are put into the .cdb file, the linker updates the .cdb file
+with the address information for the symbols. The debugger reads the
+symbolic information generated by the compiler &amp; the address information
+generated by the linker. It uses the SIMULATOR (Daniel's S51) to execute
+the program, the program execution is controlled by the debugger.
+When a command is issued for the debugger, it translates it into appropriate
+commands for the simulator.
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node52.html b/doc/sdccman.html/node52.html
new file mode 100644 (file)
index 0000000..4a9dc91
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>7.3 Starting the Debugger</TITLE>
+<META NAME="description" CONTENT="7.3 Starting the Debugger">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node53.html">
+<LINK REL="previous" HREF="node51.html">
+<LINK REL="up" HREF="node49.html">
+<LINK REL="next" HREF="node53.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html1056"
+ HREF="node53.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1050"
+ HREF="node49.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1044"
+ HREF="node51.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1052"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1054"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1057"
+ HREF="node53.html">7.4 Command Line Options.</A>
+<B> Up:</B> <A NAME="tex2html1051"
+ HREF="node49.html">7. SDCDB - Source</A>
+<B> Previous:</B> <A NAME="tex2html1045"
+ HREF="node51.html">7.2 How the Debugger</A>
+ &nbsp <B>  <A NAME="tex2html1053"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1055"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00083000000000000000">
+7.3 Starting the Debugger</A>
+</H2>
+
+<P>
+The debugger can be started using the following command line. (Assume
+the file you are debugging has the file name foo).
+<BR>
+
+<BR>
+<I><B>sdcdb foo</B></I>
+<BR>
+
+<BR>
+The debugger will look for the following files.
+
+<P>
+
+<UL>
+<LI>foo.c - the source file.</LI>
+<LI>foo.cdb - the debugger symbol information file.</LI>
+<LI>foo.ihx - the intel hex format object file.</LI>
+</UL>
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node53.html b/doc/sdccman.html/node53.html
new file mode 100644 (file)
index 0000000..0b8d0fc
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>7.4 Command Line Options.</TITLE>
+<META NAME="description" CONTENT="7.4 Command Line Options.">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node54.html">
+<LINK REL="previous" HREF="node52.html">
+<LINK REL="up" HREF="node49.html">
+<LINK REL="next" HREF="node54.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html1070"
+ HREF="node54.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1064"
+ HREF="node49.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1058"
+ HREF="node52.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1066"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1068"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1071"
+ HREF="node54.html">7.5 Debugger Commands.</A>
+<B> Up:</B> <A NAME="tex2html1065"
+ HREF="node49.html">7. SDCDB - Source</A>
+<B> Previous:</B> <A NAME="tex2html1059"
+ HREF="node52.html">7.3 Starting the Debugger</A>
+ &nbsp <B>  <A NAME="tex2html1067"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1069"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00084000000000000000">
+7.4 Command Line Options.</A>
+</H2>
+
+<P>
+
+<UL>
+<LI>-directory=&lt;source file directory&gt; this option can used to specify
+the directory search list. The debugger will look into the directory
+list specified for source, cdb &amp; ihx files. The items in the directory
+list must be separated by ':', e.g. if the source files can be in
+the directories /home/src1 and /home/src2, the -directory option
+should be -directory=/home/src1:/home/src2. Note there can be no
+spaces in the option. </LI>
+<LI>-cd &lt;directory&gt; - change to the &lt;directory&gt;.</LI>
+<LI>-fullname - used by GUI front ends.</LI>
+<LI>-cpu &lt;cpu-type&gt; - this argument is passed to the simulator please
+see the simulator docs for details.</LI>
+<LI>-X &lt;Clock frequency &gt; this options is passed to the simulator please
+see the simulator docs for details.</LI>
+<LI>-s &lt;serial port file&gt; passed to simulator see the simulator docs for
+details.</LI>
+<LI>-S &lt;serial in,out&gt; passed to simulator see the simulator docs for
+details.</LI>
+</UL>
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node54.html b/doc/sdccman.html/node54.html
new file mode 100644 (file)
index 0000000..0f64c68
--- /dev/null
@@ -0,0 +1,320 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>7.5 Debugger Commands.</TITLE>
+<META NAME="description" CONTENT="7.5 Debugger Commands.">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node55.html">
+<LINK REL="previous" HREF="node53.html">
+<LINK REL="up" HREF="node49.html">
+<LINK REL="next" HREF="node55.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html1084"
+ HREF="node55.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1078"
+ HREF="node49.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1072"
+ HREF="node53.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1080"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1082"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1085"
+ HREF="node55.html">7.6 Interfacing with XEmacs.</A>
+<B> Up:</B> <A NAME="tex2html1079"
+ HREF="node49.html">7. SDCDB - Source</A>
+<B> Previous:</B> <A NAME="tex2html1073"
+ HREF="node53.html">7.4 Command Line Options.</A>
+ &nbsp <B>  <A NAME="tex2html1081"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1083"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html1086"
+ HREF="node54.html#SECTION00085100000000000000">7.5.1 break [line | file:line | function | file:function]</A>
+<LI><A NAME="tex2html1087"
+ HREF="node54.html#SECTION00085200000000000000">7.5.2 clear [line | file:line | function | file:function ]</A>
+<LI><A NAME="tex2html1088"
+ HREF="node54.html#SECTION00085300000000000000">7.5.3 continue</A>
+<LI><A NAME="tex2html1089"
+ HREF="node54.html#SECTION00085400000000000000">7.5.4 finish</A>
+<LI><A NAME="tex2html1090"
+ HREF="node54.html#SECTION00085500000000000000">7.5.5 delete [n]</A>
+<LI><A NAME="tex2html1091"
+ HREF="node54.html#SECTION00085600000000000000">7.5.6 info [break | stack | frame | registers ]</A>
+<LI><A NAME="tex2html1092"
+ HREF="node54.html#SECTION00085700000000000000">7.5.7 step</A>
+<LI><A NAME="tex2html1093"
+ HREF="node54.html#SECTION00085800000000000000">7.5.8 next</A>
+<LI><A NAME="tex2html1094"
+ HREF="node54.html#SECTION00085900000000000000">7.5.9 run</A>
+<LI><A NAME="tex2html1095"
+ HREF="node54.html#SECTION000851000000000000000">7.5.10 ptype variable </A>
+<LI><A NAME="tex2html1096"
+ HREF="node54.html#SECTION000851100000000000000">7.5.11 print variable</A>
+<LI><A NAME="tex2html1097"
+ HREF="node54.html#SECTION000851200000000000000">7.5.12 file filename</A>
+<LI><A NAME="tex2html1098"
+ HREF="node54.html#SECTION000851300000000000000">7.5.13 frame</A>
+<LI><A NAME="tex2html1099"
+ HREF="node54.html#SECTION000851400000000000000">7.5.14 set srcmode</A>
+<LI><A NAME="tex2html1100"
+ HREF="node54.html#SECTION000851500000000000000">7.5.15 ! simulator command</A>
+<LI><A NAME="tex2html1101"
+ HREF="node54.html#SECTION000851600000000000000">7.5.16 quit.</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H2><A NAME="SECTION00085000000000000000">
+7.5 Debugger Commands.</A>
+</H2>
+
+<P>
+As mention earlier the command interface for the debugger has been
+deliberately kept as close the GNU debugger gdb, as possible. This
+will help the integration with existing graphical user interfaces
+(like ddd, xxgdb or xemacs) existing for the GNU debugger.
+
+<P>
+
+<H3><A NAME="SECTION00085100000000000000">
+7.5.1 break [line | file:line | function | file:function]</A>
+</H3>
+
+<P>
+Set breakpoint at specified line or function:
+<BR>
+
+<BR>
+<I><B>sdcdb&gt;break 100 </B></I>
+<BR>
+<I><B>sdcdb&gt;break foo.c:100</B></I>
+<BR>
+<I><B>sdcdb&gt;break funcfoo</B></I>
+<BR>
+<I><B>sdcdb&gt;break foo.c:funcfoo</B></I>
+
+<P>
+
+<H3><A NAME="SECTION00085200000000000000">
+7.5.2 clear [line | file:line | function | file:function ]</A>
+</H3>
+
+<P>
+Clear breakpoint at specified line or function:
+<BR>
+
+<BR>
+<I><B>sdcdb&gt;clear 100</B></I>
+<BR>
+<I><B>sdcdb&gt;clear foo.c:100</B></I>
+<BR>
+<I><B>sdcdb&gt;clear funcfoo</B></I>
+<BR>
+<I><B>sdcdb&gt;clear foo.c:funcfoo</B></I>
+
+<P>
+
+<H3><A NAME="SECTION00085300000000000000">
+7.5.3 continue</A>
+</H3>
+
+<P>
+Continue program being debugged, after breakpoint.
+
+<P>
+
+<H3><A NAME="SECTION00085400000000000000">
+7.5.4 finish</A>
+</H3>
+
+<P>
+Execute till the end of the current function.
+
+<P>
+
+<H3><A NAME="SECTION00085500000000000000">
+7.5.5 delete [n]</A>
+</H3>
+
+<P>
+Delete breakpoint number 'n'. If used without any option clear ALL
+user defined break points.
+
+<P>
+
+<H3><A NAME="SECTION00085600000000000000">
+7.5.6 info [break | stack | frame | registers ]</A>
+</H3>
+
+<P>
+
+<UL>
+<LI>info break - list all breakpoints</LI>
+<LI>info stack - show the function call stack.</LI>
+<LI>info frame - show information about the current execution frame.</LI>
+<LI>info registers - show content of all registers.</LI>
+</UL>
+
+<P>
+
+<H3><A NAME="SECTION00085700000000000000">
+7.5.7 step</A>
+</H3>
+
+<P>
+Step program until it reaches a different source line.
+
+<P>
+
+<H3><A NAME="SECTION00085800000000000000">
+7.5.8 next</A>
+</H3>
+
+<P>
+Step program, proceeding through subroutine calls.
+
+<P>
+
+<H3><A NAME="SECTION00085900000000000000">
+7.5.9 run</A>
+</H3>
+
+<P>
+Start debugged program.
+
+<P>
+
+<H3><A NAME="SECTION000851000000000000000">
+7.5.10 ptype variable </A>
+</H3>
+
+<P>
+Print type information of the variable.
+
+<P>
+
+<H3><A NAME="SECTION000851100000000000000">
+7.5.11 print variable</A>
+</H3>
+
+<P>
+print value of variable.
+
+<P>
+
+<H3><A NAME="SECTION000851200000000000000">
+7.5.12 file filename</A>
+</H3>
+
+<P>
+load the given file name. Note this is an alternate method of loading
+file for debugging.
+
+<P>
+
+<H3><A NAME="SECTION000851300000000000000">
+7.5.13 frame</A>
+</H3>
+
+<P>
+print information about current frame.
+
+<P>
+
+<H3><A NAME="SECTION000851400000000000000">
+7.5.14 set srcmode</A>
+</H3>
+
+<P>
+Toggle between C source &amp; assembly source.
+
+<P>
+
+<H3><A NAME="SECTION000851500000000000000">
+7.5.15 ! simulator command</A>
+</H3>
+
+<P>
+Send the string following '!' to the simulator, the simulator response
+is displayed. Note the debugger does not interpret the command being
+sent to the simulator, so if a command like 'go' is sent the debugger
+can loose its execution context and may display incorrect values.
+
+<P>
+
+<H3><A NAME="SECTION000851600000000000000">
+7.5.16 quit.</A>
+</H3>
+
+<P>
+&#34;Watch me now. Iam going Down. My name is Bobby Brown&#34;
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html1084"
+ HREF="node55.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1078"
+ HREF="node49.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1072"
+ HREF="node53.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1080"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1082"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1085"
+ HREF="node55.html">7.6 Interfacing with XEmacs.</A>
+<B> Up:</B> <A NAME="tex2html1079"
+ HREF="node49.html">7. SDCDB - Source</A>
+<B> Previous:</B> <A NAME="tex2html1073"
+ HREF="node53.html">7.4 Command Line Options.</A>
+ &nbsp <B>  <A NAME="tex2html1081"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1083"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node55.html b/doc/sdccman.html/node55.html
new file mode 100644 (file)
index 0000000..d67d29e
--- /dev/null
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>7.6 Interfacing with XEmacs.</TITLE>
+<META NAME="description" CONTENT="7.6 Interfacing with XEmacs.">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="previous" HREF="node54.html">
+<LINK REL="up" HREF="node49.html">
+<LINK REL="next" HREF="node56.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html1112"
+ HREF="node56.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1106"
+ HREF="node49.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1102"
+ HREF="node54.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1108"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1110"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1113"
+ HREF="node56.html">8. Other Processors</A>
+<B> Up:</B> <A NAME="tex2html1107"
+ HREF="node49.html">7. SDCDB - Source</A>
+<B> Previous:</B> <A NAME="tex2html1103"
+ HREF="node54.html">7.5 Debugger Commands.</A>
+ &nbsp <B>  <A NAME="tex2html1109"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1111"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00086000000000000000">
+7.6 Interfacing with XEmacs.</A>
+</H2>
+
+<P>
+Two files (in emacs lisp) are provided for the interfacing with XEmacs,
+sdcdb.el and sdcdbsrc.el. These two files can be found in the $(prefix)/bin
+directory after the installation is complete. These files need to
+be loaded into XEmacs for the interface to work. This can be done
+at XEmacs startup time by inserting the following into your '.xemacs'
+file (which can be found in your HOME directory): 
+<BR>
+
+<BR>
+<TT>(load-file sdcdbsrc.el)</TT> 
+<BR>
+
+<BR>
+.xemacs is a lisp file so the () around the command is REQUIRED. The
+files can also be loaded dynamically while XEmacs is running, set
+the environment variable 'EMACSLOADPATH' to the installation bin directory
+(&lt;installdir&gt;/bin), then enter the following command ESC-x load-file
+sdcdbsrc. To start the interface enter the following command: 
+<BR>
+
+<BR>
+<I><B>ESC-x sdcdbsrc</B></I>
+<BR>
+
+<BR>
+You will prompted to enter the file name to be debugged. 
+<BR>
+
+<BR>
+The command line options that are passed to the simulator directly
+are bound to default values in the file sdcdbsrc.el. The variables
+are listed below, these values maybe changed as required.
+
+<P>
+
+<UL>
+<LI>sdcdbsrc-cpu-type '51</LI>
+<LI>sdcdbsrc-frequency '11059200</LI>
+<LI>sdcdbsrc-serial nil</LI>
+</UL>
+The following is a list of key mapping for the debugger interface.
+
+<P>
+&nbsp;&nbsp;
+<BR>
+<TT>;; Current Listing :: </TT>&nbsp;
+<BR>
+<TT>;;key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;binding&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comment
+</TT>&nbsp;
+<BR>
+<TT>;;--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----
+</TT>&nbsp;
+<BR>
+<TT>;; </TT>&nbsp;
+<BR>
+<TT>;; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdb-next-from-src&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDCDB
+next command </TT>&nbsp;
+<BR>
+<TT>;; b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdb-back-from-src&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDCDB
+back command </TT>&nbsp;
+<BR>
+<TT>;; c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdb-cont-from-src&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDCDB
+continue command</TT>&nbsp;
+<BR>
+<TT>;; s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdb-step-from-src&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDCDB
+step command </TT>&nbsp;
+<BR>
+<TT>;; ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdb-whatis-c-sexp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDCDB
+ptypecommand for data at </TT>&nbsp;
+<BR>
+<TT>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+buffer point </TT>&nbsp;
+<BR>
+<TT>;; x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdbsrc-delete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDCDB
+Delete all breakpoints if no arg </TT>&nbsp;
+<BR>
+<TT>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;given
+or delete arg (C-u arg x) </TT>&nbsp;
+<BR>
+<TT>;; m&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdbsrc-frame&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDCDB
+Display current frame if no arg, </TT>&nbsp;
+<BR>
+<TT>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;given
+or display frame arg </TT>&nbsp;
+<BR>
+<TT>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer
+point </TT>&nbsp;
+<BR>
+<TT>;; !&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdbsrc-goto-sdcdb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Goto
+the SDCDB output buffer </TT>&nbsp;
+<BR>
+<TT>;; p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdb-print-c-sexp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDCDB
+print command for data at </TT>&nbsp;
+<BR>
+<TT>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+buffer point </TT>&nbsp;
+<BR>
+<TT>;; g&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdbsrc-goto-sdcdb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Goto
+the SDCDB output buffer </TT>&nbsp;
+<BR>
+<TT>;; t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdbsrc-mode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toggles
+Sdcdbsrc mode (turns it off) </TT>&nbsp;
+<BR>
+<TT>;; </TT>&nbsp;
+<BR>
+<TT>;; C-c C-f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdb-finish-from-src&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDCDB
+finish command </TT>&nbsp;
+<BR>
+<TT>;; </TT>&nbsp;
+<BR>
+<TT>;; C-x SPC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdb-break&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set
+break for line with point </TT>&nbsp;
+<BR>
+<TT>;; ESC t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdbsrc-mode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toggle
+Sdcdbsrc mode </TT>&nbsp;
+<BR>
+<TT>;; ESC m&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sdcdbsrc-srcmode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Toggle list mode </TT>&nbsp;
+<BR>
+<TT>;;</TT> 
+<BR>
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html1112"
+ HREF="node56.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1106"
+ HREF="node49.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1102"
+ HREF="node54.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1108"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1110"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1113"
+ HREF="node56.html">8. Other Processors</A>
+<B> Up:</B> <A NAME="tex2html1107"
+ HREF="node49.html">7. SDCDB - Source</A>
+<B> Previous:</B> <A NAME="tex2html1103"
+ HREF="node54.html">7.5 Debugger Commands.</A>
+ &nbsp <B>  <A NAME="tex2html1109"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1111"
+ HREF="node61.html">Index</A></B> 
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node56.html b/doc/sdccman.html/node56.html
new file mode 100644 (file)
index 0000000..021d2ca
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>8. Other Processors</TITLE>
+<META NAME="description" CONTENT="8. Other Processors">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node58.html">
+<LINK REL="previous" HREF="node49.html">
+<LINK REL="up" HREF="sdccman.html">
+<LINK REL="next" HREF="node57.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html1126"
+ HREF="node57.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1120"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1114"
+ HREF="node55.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1122"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1124"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1127"
+ HREF="node57.html">8.1 The Z80 and</A>
+<B> Up:</B> <A NAME="tex2html1121"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html1115"
+ HREF="node55.html">7.6 Interfacing with XEmacs.</A>
+ &nbsp <B>  <A NAME="tex2html1123"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1125"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00090000000000000000">
+8. Other Processors</A>
+</H1>
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html1128"
+ HREF="node57.html">8.1 The Z80 and gbz80 port</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node57.html b/doc/sdccman.html/node57.html
new file mode 100644 (file)
index 0000000..2a25ab2
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>8.1 The Z80 and gbz80 port</TITLE>
+<META NAME="description" CONTENT="8.1 The Z80 and gbz80 port">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="previous" HREF="node56.html">
+<LINK REL="up" HREF="node56.html">
+<LINK REL="next" HREF="node58.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html1139"
+ HREF="node58.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1133"
+ HREF="node56.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1129"
+ HREF="node56.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1135"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1137"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1140"
+ HREF="node58.html">9. Support</A>
+<B> Up:</B> <A NAME="tex2html1134"
+ HREF="node56.html">8. Other Processors</A>
+<B> Previous:</B> <A NAME="tex2html1130"
+ HREF="node56.html">8. Other Processors</A>
+ &nbsp <B>  <A NAME="tex2html1136"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1138"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00091000000000000000">
+8.1 The Z80 and gbz80 port</A>
+</H2>
+
+<P>
+SDCC can target both the Zilog Z80 and the Nintendo Gameboy's Z80-like
+gbz80. The port is incomplete - long support is incomplete (mul, div
+and mod are unimplimented), and both float and bitfield support is
+missing. Apart from that the code generated is correct.
+
+<P>
+As always, the code is the authoritave reference - see z80/ralloc.c
+and z80/gen.c. The stack frame is similar to that generated by the
+IAR Z80 compiler. IX is used as the base pointer, HL is used as a
+temporary register, and BC and DE are available for holding varibles.
+IY is currently unusued. Return values are stored in HL. One bad side
+effect of using IX as the base pointer is that a functions stack frame
+is limited to 127 bytes - this will be fixed in a later version.
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node58.html b/doc/sdccman.html/node58.html
new file mode 100644 (file)
index 0000000..72fe3f1
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>9. Support</TITLE>
+<META NAME="description" CONTENT="9. Support">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node60.html">
+<LINK REL="previous" HREF="node56.html">
+<LINK REL="up" HREF="sdccman.html">
+<LINK REL="next" HREF="node59.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html1153"
+ HREF="node59.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1147"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1141"
+ HREF="node57.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1149"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1151"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1154"
+ HREF="node59.html">9.1 Reporting Bugs</A>
+<B> Up:</B> <A NAME="tex2html1148"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html1142"
+ HREF="node57.html">8.1 The Z80 and</A>
+ &nbsp <B>  <A NAME="tex2html1150"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1152"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION000100000000000000000">
+9. Support</A>
+</H1>
+
+<P>
+SDCC has grown to be a large project. The compiler alone (without
+the preprocessor, assembler and linker) is about 40,000 lines of code
+(blank stripped). The open source nature of this project is a key
+to its continued growth and support. You gain the benefit and support
+of many active software developers and end users. Is SDCC perfect?
+No, that's why we need your help. The developers take pride in fixing
+reported bugs. You can help by reporting the bugs and helping other
+SDCC users. There are lots of ways to contribute, and we encourage
+you to take part in making SDCC a great software package.
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html1155"
+ HREF="node59.html">9.1 Reporting Bugs</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node59.html b/doc/sdccman.html/node59.html
new file mode 100644 (file)
index 0000000..7733b3b
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>9.1 Reporting Bugs</TITLE>
+<META NAME="description" CONTENT="9.1 Reporting Bugs">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="previous" HREF="node58.html">
+<LINK REL="up" HREF="node58.html">
+<LINK REL="next" HREF="node60.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html1166"
+ HREF="node60.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1160"
+ HREF="node58.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1156"
+ HREF="node58.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1162"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1164"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1167"
+ HREF="node60.html">10. Acknowledgments</A>
+<B> Up:</B> <A NAME="tex2html1161"
+ HREF="node58.html">9. Support</A>
+<B> Previous:</B> <A NAME="tex2html1157"
+ HREF="node58.html">9. Support</A>
+ &nbsp <B>  <A NAME="tex2html1163"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1165"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION000101000000000000000">
+9.1 Reporting Bugs</A>
+</H2>
+
+<P>
+Send an email to the mailing list at 'user-sdcc@sdcc.sourceforge.net'
+or 'devel-sdcc@sdcc.sourceforge.net'. Bugs will be fixed ASAP. When
+reporting a bug, it is very useful to include a small test program
+which reproduces the problem. If you can isolate the problem by looking
+at the generated assembly code, this can be very helpful. Compiling
+your program with the -dumpall option can sometimes be useful in
+locating optimization problems.
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node6.html b/doc/sdccman.html/node6.html
new file mode 100644 (file)
index 0000000..e29c673
--- /dev/null
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>1.4 Compatibility with previous versions</TITLE>
+<META NAME="description" CONTENT="1.4 Compatibility with previous versions">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node7.html">
+<LINK REL="previous" HREF="node5.html">
+<LINK REL="up" HREF="node2.html">
+<LINK REL="next" HREF="node7.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html278"
+ HREF="node7.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html272"
+ HREF="node2.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html266"
+ HREF="node5.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html274"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html276"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html279"
+ HREF="node7.html">1.5 System Requirements</A>
+<B> Up:</B> <A NAME="tex2html273"
+ HREF="node2.html">1. Introduction</A>
+<B> Previous:</B> <A NAME="tex2html267"
+ HREF="node5.html">1.3 Typographic conventions</A>
+ &nbsp <B>  <A NAME="tex2html275"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html277"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00024000000000000000">
+1.4 Compatibility with previous versions</A>
+</H2>
+
+<P>
+This version has numerous bug fixes compared with the previous version.
+But we also introduced some incompatibilities with older versions.
+Not just for the fun of it, but to make the compiler more stable,
+efficient and ANSI compliant. 
+<BR>
+
+<P>
+
+<UL>
+<LI>short is now equivalent to int (16 bits), it used to be equivalent
+to char (8 bits)</LI>
+<LI>the default directory where include, library and documention files
+are stored is no in /usr/local/share</LI>
+<LI>char type parameters to vararg functions are casted to int unless
+explicitly casted, e.g.: 
+<BR>
+<TT>&nbsp;&nbsp;char a=3;</TT>&nbsp;
+<BR>
+<TT>&nbsp;&nbsp;printf (&#34;%d %c&#92;n&#34;,
+a, (char)a);</TT>
+<BR>
+will push a as an int and as a char resp.</LI>
+<LI>option -regextend has been removed</LI>
+<LI>option -noreparms has been removed</LI>
+</UL>
+<I>&lt;pending: more incompatibilities?&gt;</I>
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node60.html b/doc/sdccman.html/node60.html
new file mode 100644 (file)
index 0000000..8851f35
--- /dev/null
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>10. Acknowledgments</TITLE>
+<META NAME="description" CONTENT="10. Acknowledgments">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node61.html">
+<LINK REL="previous" HREF="node58.html">
+<LINK REL="up" HREF="sdccman.html">
+<LINK REL="next" HREF="node61.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html1180"
+ HREF="node61.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1174"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1168"
+ HREF="node59.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1176"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1178"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html1181"
+ HREF="node61.html">Index</A>
+<B> Up:</B> <A NAME="tex2html1175"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html1169"
+ HREF="node59.html">9.1 Reporting Bugs</A>
+ &nbsp <B>  <A NAME="tex2html1177"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1179"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION000110000000000000000">
+10. Acknowledgments</A>
+</H1>
+
+<P>
+Sandeep Dutta (sandeep.dutta@usa.net) - SDCC, the compiler, MCS51
+code generator, Debugger, AVR port
+<BR>
+Alan Baldwin (baldwin@shop-pdp.kent.edu) - Initial version of ASXXXX
+&amp; ASLINK. 
+<BR>
+John Hartman (jhartman@compuserve.com) - Porting ASXXX &amp; ASLINK for
+8051
+<BR>
+Dmitry S. Obukhov (dso@usa.net) - malloc &amp; serial i/o routines. 
+<BR>
+Daniel Drotos (drdani@mazsola.iit.uni-miskolc.hu) - for his Freeware
+simulator
+<BR>
+Malini Dutta(malini_dutta@hotmail.com) - my wife for her patience
+and support.
+<BR>
+Unknown - for the GNU C - preprocessor.
+<BR>
+Michael Hope - The Z80 and Z80GB port, 186 development
+<BR>
+Kevin Vigor - The DS390 port.
+<BR>
+Johan Knol - Lots of fixes and enhancements, DS390/TINI libs.
+<BR>
+Scott Datallo - The PIC port.
+<BR>
+
+<BR>
+<I>Thanks to all the other volunteer developers who have helped
+with coding, testing, web-page creation, distribution sets, etc. You
+know who you are :-)</I>
+<BR>
+
+<P>
+This document was initially written by Sandeep Dutta
+
+<P>
+All product names mentioned herein may be trademarks of their respective
+companies. 
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node61.html b/doc/sdccman.html/node61.html
new file mode 100644 (file)
index 0000000..a1da729
--- /dev/null
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Index</TITLE>
+<META NAME="description" CONTENT="Index">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node62.html">
+<LINK REL="previous" HREF="node60.html">
+<LINK REL="up" HREF="sdccman.html">
+<LINK REL="next" HREF="node62.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html1192"
+ HREF="node62.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html1188"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1182"
+ HREF="node60.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1190"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A>  
+<BR>
+<B> Next:</B> <A NAME="tex2html1193"
+ HREF="node62.html">About this document ...</A>
+<B> Up:</B> <A NAME="tex2html1189"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html1183"
+ HREF="node60.html">10. Acknowledgments</A>
+ &nbsp <B>  <A NAME="tex2html1191"
+ HREF="node1.html">Contents</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<BR>
+
+<H2><A NAME="SECTION000120000000000000000">
+Index</A>
+</H2><DL COMPACT>
+<DT><STRONG>index</STRONG>
+<DD><A HREF="node9.html#68">1.7 Wishes for the</A>
+
+</DL>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node62.html b/doc/sdccman.html/node62.html
new file mode 100644 (file)
index 0000000..7bbeb77
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>About this document ...</TITLE>
+<META NAME="description" CONTENT="About this document ...">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="previous" HREF="node61.html">
+<LINK REL="up" HREF="sdccman.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif_gr.gif"> 
+<A NAME="tex2html1198"
+ HREF="sdccman.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html1194"
+ HREF="node61.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html1200"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html1202"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Up:</B> <A NAME="tex2html1199"
+ HREF="sdccman.html">SDCC Compiler User Guide</A>
+<B> Previous:</B> <A NAME="tex2html1195"
+ HREF="node61.html">Index</A>
+ &nbsp <B>  <A NAME="tex2html1201"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html1203"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION000130000000000000000">
+About this document ...</A>
+</H1>
+ <STRONG>SDCC Compiler User Guide</STRONG><P>
+This document was generated using the
+<A HREF="http://www-dsed.llnl.gov/files/programs/unix/latex2html/manual/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 99.1 release (March 30, 1999)
+<P>
+Copyright &#169; 1993, 1994, 1995, 1996,
+<A HREF="http://cbl.leeds.ac.uk/nikos/personal.html">Nikos Drakos</A>, 
+Computer Based Learning Unit, University of Leeds.
+<BR>
+Copyright &#169; 1997, 1998, 1999,
+<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>, 
+Mathematics Department, Macquarie University, Sydney.
+<P>
+The command line arguments were: <BR>
+ <STRONG>latex2html</STRONG> <TT>-split 5 -show_section_numbers -dir sdccman.html sdccman</TT>
+<P>
+The translation was initiated by Johan Knol on 2001-07-13
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node7.html b/doc/sdccman.html/node7.html
new file mode 100644 (file)
index 0000000..fb89791
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>1.5 System Requirements</TITLE>
+<META NAME="description" CONTENT="1.5 System Requirements">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node8.html">
+<LINK REL="previous" HREF="node6.html">
+<LINK REL="up" HREF="node2.html">
+<LINK REL="next" HREF="node8.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html292"
+ HREF="node8.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html286"
+ HREF="node2.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html280"
+ HREF="node6.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html288"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html290"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html293"
+ HREF="node8.html">1.6 Other Resources</A>
+<B> Up:</B> <A NAME="tex2html287"
+ HREF="node2.html">1. Introduction</A>
+<B> Previous:</B> <A NAME="tex2html281"
+ HREF="node6.html">1.4 Compatibility with previous</A>
+ &nbsp <B>  <A NAME="tex2html289"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html291"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00025000000000000000">
+1.5 System Requirements</A>
+</H2>
+
+<P>
+What do you need before you start installation of SDCC? A computer,
+and a desire to compute. The preferred method of installation is to
+compile SDCC from source using GNU gcc and make. For Windows some
+pre-compiled binary distributions are available for your convenience.
+You should have some experience with command line tools and compiler
+use.
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node8.html b/doc/sdccman.html/node8.html
new file mode 100644 (file)
index 0000000..28cb201
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>1.6 Other Resources</TITLE>
+<META NAME="description" CONTENT="1.6 Other Resources">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node9.html">
+<LINK REL="previous" HREF="node7.html">
+<LINK REL="up" HREF="node2.html">
+<LINK REL="next" HREF="node9.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html306"
+ HREF="node9.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html300"
+ HREF="node2.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html294"
+ HREF="node7.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html302"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html304"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html307"
+ HREF="node9.html">1.7 Wishes for the</A>
+<B> Up:</B> <A NAME="tex2html301"
+ HREF="node2.html">1. Introduction</A>
+<B> Previous:</B> <A NAME="tex2html295"
+ HREF="node7.html">1.5 System Requirements</A>
+ &nbsp <B>  <A NAME="tex2html303"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html305"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00026000000000000000">
+1.6 Other Resources</A>
+</H2>
+
+<P>
+The SDCC home page at  http://sdcc.sourceforge.net/ is a great
+place to find distribution sets. You can also find links to the user
+mailing lists that offer help or discuss SDCC with other SDCC users.
+Web links to other SDCC related sites can also be found here. This
+document can be found in the DOC directory of the source package as
+a text or HTML file. Some of the other tools (simulator and assembler)
+included with SDCC contain their own documentation and can be found
+in the source distribution. If you want the latest unreleased software,
+the complete source package is available directly by anonymous CVS
+on cvs.sdcc.sourceforge.net.
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/node9.html b/doc/sdccman.html/node9.html
new file mode 100644 (file)
index 0000000..8ce4696
--- /dev/null
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>1.7 Wishes for the future</TITLE>
+<META NAME="description" CONTENT="1.7 Wishes for the future">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="previous" HREF="node8.html">
+<LINK REL="up" HREF="node2.html">
+<LINK REL="next" HREF="node10.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html318"
+ HREF="node10.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<A NAME="tex2html312"
+ HREF="node2.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif.gif"></A> 
+<A NAME="tex2html308"
+ HREF="node8.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif.gif"></A> 
+<A NAME="tex2html314"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html316"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html319"
+ HREF="node10.html">2. Installation</A>
+<B> Up:</B> <A NAME="tex2html313"
+ HREF="node2.html">1. Introduction</A>
+<B> Previous:</B> <A NAME="tex2html309"
+ HREF="node8.html">1.6 Other Resources</A>
+ &nbsp <B>  <A NAME="tex2html315"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html317"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00027000000000000000">
+1.7 Wishes for the future</A>
+</H2>
+
+<P>
+There are (and always will be) some things that could be done. Here
+are some I can think of:
+<BR>
+
+<P>
+<I><B>sdcc -c -model-large -o large _atoi.c</B></I> (where large
+could be a different basename or a directory)
+<BR>
+
+<P>
+<TT>char KernelFunction3(char p) at 0x340;</TT>&nbsp;
+<BR>&nbsp;
+<BR>
+If you can think of some more, please send them to the list.
+<BR>
+
+<BR>
+<I>&lt;pending: And then of course a proper index-table<A NAME="68"></A>&gt;</I>
+
+<P>
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/previous_motif.gif b/doc/sdccman.html/previous_motif.gif
new file mode 100644 (file)
index 0000000..c38778c
Binary files /dev/null and b/doc/sdccman.html/previous_motif.gif differ
diff --git a/doc/sdccman.html/previous_motif_gr.gif b/doc/sdccman.html/previous_motif_gr.gif
new file mode 100644 (file)
index 0000000..d5398b3
Binary files /dev/null and b/doc/sdccman.html/previous_motif_gr.gif differ
diff --git a/doc/sdccman.html/sdccman.html b/doc/sdccman.html/sdccman.html
new file mode 100644 (file)
index 0000000..de73f32
--- /dev/null
@@ -0,0 +1,348 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>SDCC Compiler User Guide</TITLE>
+<META NAME="description" CONTENT="SDCC Compiler User Guide">
+<META NAME="keywords" CONTENT="sdccman">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="sdccman.css">
+
+<LINK REL="next" HREF="node1.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html6"
+ HREF="node1.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_motif.gif"></A> 
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif_gr.gif"> 
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif_gr.gif"> 
+<A NAME="tex2html2"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents_motif.gif"></A> 
+<A NAME="tex2html4"
+ HREF="node61.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index_motif.gif"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html7"
+ HREF="node1.html">Contents</A>
+ &nbsp <B>  <A NAME="tex2html3"
+ HREF="node1.html">Contents</A></B> 
+ &nbsp <B>  <A NAME="tex2html5"
+ HREF="node61.html">Index</A></B> 
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<P>
+
+<P>
+<H1 ALIGN="CENTER">SDCC Compiler User Guide</H1>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"></A>
+
+<UL>
+<LI><A NAME="tex2html8"
+ HREF="node1.html">Contents</A>
+<LI><A NAME="tex2html9"
+ HREF="node2.html">1. Introduction</A>
+<UL>
+<LI><A NAME="tex2html10"
+ HREF="node3.html">1.1 About SDCC</A>
+<LI><A NAME="tex2html11"
+ HREF="node4.html">1.2 Open Source</A>
+<LI><A NAME="tex2html12"
+ HREF="node5.html">1.3 Typographic conventions</A>
+<LI><A NAME="tex2html13"
+ HREF="node6.html">1.4 Compatibility with previous versions</A>
+<LI><A NAME="tex2html14"
+ HREF="node7.html">1.5 System Requirements</A>
+<LI><A NAME="tex2html15"
+ HREF="node8.html">1.6 Other Resources</A>
+<LI><A NAME="tex2html16"
+ HREF="node9.html">1.7 Wishes for the future</A>
+</UL>
+<LI><A NAME="tex2html17"
+ HREF="node10.html">2. Installation</A>
+<UL>
+<LI><A NAME="tex2html18"
+ HREF="node11.html">2.1 Linux/Unix Installation</A>
+<LI><A NAME="tex2html19"
+ HREF="node12.html">2.2 Windows Installation</A>
+<UL>
+<LI><A NAME="tex2html20"
+ HREF="node12.html#SECTION00032100000000000000">2.2.1 Windows Install Using a Binary Package</A>
+<LI><A NAME="tex2html21"
+ HREF="node12.html#SECTION00032200000000000000">2.2.2 Windows Install Using Cygwin</A>
+</UL>
+<LI><A NAME="tex2html22"
+ HREF="node13.html">2.3 Testing out the SDCC Compiler</A>
+<LI><A NAME="tex2html23"
+ HREF="node14.html">2.4 Install Trouble-shooting</A>
+<UL>
+<LI><A NAME="tex2html24"
+ HREF="node14.html#SECTION00034100000000000000">2.4.1 SDCC cannot find libraries or header files.</A>
+<LI><A NAME="tex2html25"
+ HREF="node14.html#SECTION00034200000000000000">2.4.2 SDCC does not compile correctly.</A>
+<LI><A NAME="tex2html26"
+ HREF="node14.html#SECTION00034300000000000000">2.4.3 What the ''./configure'' does</A>
+<LI><A NAME="tex2html27"
+ HREF="node14.html#SECTION00034400000000000000">2.4.4 What the ''make'' does.</A>
+<LI><A NAME="tex2html28"
+ HREF="node14.html#SECTION00034500000000000000">2.4.5 What the ''make install'' command does.</A>
+</UL>
+<LI><A NAME="tex2html29"
+ HREF="node15.html">2.5 Additional Information for Windows Users</A>
+<UL>
+<LI><A NAME="tex2html30"
+ HREF="node15.html#SECTION00035100000000000000">2.5.1 Getting started with Cygwin</A>
+<LI><A NAME="tex2html31"
+ HREF="node15.html#SECTION00035200000000000000">2.5.2 Running SDCC as Native Compiled Executables</A>
+</UL>
+<LI><A NAME="tex2html32"
+ HREF="node16.html">2.6 SDCC on Other Platforms</A>
+<LI><A NAME="tex2html33"
+ HREF="node17.html">2.7 Advanced Install Options</A>
+<LI><A NAME="tex2html34"
+ HREF="node18.html">2.8 Components of SDCC</A>
+<UL>
+<LI><A NAME="tex2html35"
+ HREF="node18.html#SECTION00038100000000000000">2.8.1 sdcc - The Compiler</A>
+<LI><A NAME="tex2html36"
+ HREF="node18.html#SECTION00038200000000000000">2.8.2 sdcpp (C-Preprocessor)</A>
+<LI><A NAME="tex2html37"
+ HREF="node18.html#SECTION00038300000000000000">2.8.3 asx8051, as-z80, as-gbz80, aslink, link-z80, link-gbz80 (The Assemblers
+and Linkage Editors)</A>
+<LI><A NAME="tex2html38"
+ HREF="node18.html#SECTION00038400000000000000">2.8.4 s51 - Simulator</A>
+<LI><A NAME="tex2html39"
+ HREF="node18.html#SECTION00038500000000000000">2.8.5 sdcdb - Source Level Debugger</A>
+</UL>
+</UL>
+<LI><A NAME="tex2html40"
+ HREF="node19.html">3. Using SDCC</A>
+<UL>
+<LI><A NAME="tex2html41"
+ HREF="node20.html">3.1 Compiling</A>
+<UL>
+<LI><A NAME="tex2html42"
+ HREF="node20.html#SECTION00041100000000000000">3.1.1 Single Source File Projects</A>
+<LI><A NAME="tex2html43"
+ HREF="node20.html#SECTION00041200000000000000">3.1.2 Projects with Multiple Source Files</A>
+<LI><A NAME="tex2html44"
+ HREF="node20.html#SECTION00041300000000000000">3.1.3 Projects with Additional Libraries</A>
+</UL>
+<LI><A NAME="tex2html45"
+ HREF="node21.html">3.2 Command Line Options</A>
+<UL>
+<LI><A NAME="tex2html46"
+ HREF="node21.html#SECTION00042100000000000000">3.2.1 Processor Selection Options</A>
+<LI><A NAME="tex2html47"
+ HREF="node21.html#SECTION00042200000000000000">3.2.2 Preprocessor Options</A>
+<LI><A NAME="tex2html48"
+ HREF="node21.html#SECTION00042300000000000000">3.2.3 Linker Options</A>
+<LI><A NAME="tex2html49"
+ HREF="node21.html#SECTION00042400000000000000">3.2.4 MCS51 Options</A>
+<LI><A NAME="tex2html50"
+ HREF="node21.html#SECTION00042500000000000000">3.2.5 DS390 Options</A>
+<LI><A NAME="tex2html51"
+ HREF="node21.html#SECTION00042600000000000000">3.2.6 Optimization Options</A>
+<LI><A NAME="tex2html52"
+ HREF="node21.html#SECTION00042700000000000000">3.2.7 Other Options</A>
+<LI><A NAME="tex2html53"
+ HREF="node21.html#SECTION00042800000000000000">3.2.8 Intermediate Dump Options</A>
+</UL>
+<LI><A NAME="tex2html54"
+ HREF="node22.html">3.3 MCS51/DS390 Storage Class Language Extensions</A>
+<UL>
+<LI><A NAME="tex2html55"
+ HREF="node22.html#SECTION00043100000000000000">3.3.1 xdata</A>
+<LI><A NAME="tex2html56"
+ HREF="node22.html#SECTION00043200000000000000">3.3.2 data</A>
+<LI><A NAME="tex2html57"
+ HREF="node22.html#SECTION00043300000000000000">3.3.3 idata</A>
+<LI><A NAME="tex2html58"
+ HREF="node22.html#SECTION00043400000000000000">3.3.4 bit</A>
+<LI><A NAME="tex2html59"
+ HREF="node22.html#SECTION00043500000000000000">3.3.5 sfr / sbit</A>
+</UL>
+<LI><A NAME="tex2html60"
+ HREF="node23.html">3.4 Pointers</A>
+<LI><A NAME="tex2html61"
+ HREF="node24.html">3.5 Parameters &amp; Local Variables</A>
+<LI><A NAME="tex2html62"
+ HREF="node25.html">3.6 Overlaying</A>
+<LI><A NAME="tex2html63"
+ HREF="node26.html">3.7 Interrupt Service Routines</A>
+<LI><A NAME="tex2html64"
+ HREF="node27.html">3.8 Critical Functions</A>
+<LI><A NAME="tex2html65"
+ HREF="node28.html">3.9 Naked Functions</A>
+<LI><A NAME="tex2html66"
+ HREF="node29.html">3.10 Functions using private banks</A>
+<LI><A NAME="tex2html67"
+ HREF="node30.html">3.11 Absolute Addressing</A>
+<LI><A NAME="tex2html68"
+ HREF="node31.html">3.12 Startup Code</A>
+<LI><A NAME="tex2html69"
+ HREF="node32.html">3.13 Inline Assembler Code</A>
+<LI><A NAME="tex2html70"
+ HREF="node33.html">3.14 int(16 bit) and long (32 bit) Support</A>
+<LI><A NAME="tex2html71"
+ HREF="node34.html">3.15 Floating Point Support</A>
+<LI><A NAME="tex2html72"
+ HREF="node35.html">3.16 MCS51 Memory Models</A>
+<LI><A NAME="tex2html73"
+ HREF="node36.html">3.17 DS390 Memory Models</A>
+<LI><A NAME="tex2html74"
+ HREF="node37.html">3.18 Defines Created by the Compiler</A>
+</UL>
+<LI><A NAME="tex2html75"
+ HREF="node38.html">4. SDCC Technical Data</A>
+<UL>
+<LI><A NAME="tex2html76"
+ HREF="node39.html">4.1 Optimizations</A>
+<UL>
+<LI><A NAME="tex2html77"
+ HREF="node39.html#SECTION00051100000000000000">4.1.1 Sub-expression Elimination</A>
+<LI><A NAME="tex2html78"
+ HREF="node39.html#SECTION00051200000000000000">4.1.2 Dead-Code Elimination</A>
+<LI><A NAME="tex2html79"
+ HREF="node39.html#SECTION00051300000000000000">4.1.3 Copy-Propagation</A>
+<LI><A NAME="tex2html80"
+ HREF="node39.html#SECTION00051400000000000000">4.1.4 Loop Optimizations</A>
+<LI><A NAME="tex2html81"
+ HREF="node39.html#SECTION00051500000000000000">4.1.5 Loop Reversing</A>
+<LI><A NAME="tex2html82"
+ HREF="node39.html#SECTION00051600000000000000">4.1.6 Algebraic Simplifications</A>
+<LI><A NAME="tex2html83"
+ HREF="node39.html#SECTION00051700000000000000">4.1.7 'switch' Statements</A>
+<LI><A NAME="tex2html84"
+ HREF="node39.html#SECTION00051800000000000000">4.1.8 Bit-shifting Operations.</A>
+<LI><A NAME="tex2html85"
+ HREF="node39.html#SECTION00051900000000000000">4.1.9 Bit-rotation</A>
+<LI><A NAME="tex2html86"
+ HREF="node39.html#SECTION000511000000000000000">4.1.10 Highest Order Bit</A>
+<LI><A NAME="tex2html87"
+ HREF="node39.html#SECTION000511100000000000000">4.1.11 Peep-hole Optimizer</A>
+</UL>
+<LI><A NAME="tex2html88"
+ HREF="node40.html">4.2 Pragmas</A>
+<LI><A NAME="tex2html89"
+ HREF="node41.html">4.3 <I>&lt;pending: this is messy and incomplete&gt;</I> Library Routines</A>
+<LI><A NAME="tex2html90"
+ HREF="node42.html">4.4 Interfacing with Assembly Routines</A>
+<UL>
+<LI><A NAME="tex2html91"
+ HREF="node42.html#SECTION00054100000000000000">4.4.1 Global Registers used for Parameter Passing</A>
+<LI><A NAME="tex2html92"
+ HREF="node42.html#SECTION00054200000000000000">4.4.2 Assembler Routine(non-reentrant)</A>
+<LI><A NAME="tex2html93"
+ HREF="node42.html#SECTION00054300000000000000">4.4.3 Assembler Routine(reentrant)</A>
+</UL>
+<LI><A NAME="tex2html94"
+ HREF="node43.html">4.5 External Stack</A>
+<LI><A NAME="tex2html95"
+ HREF="node44.html">4.6 ANSI-Compliance</A>
+<LI><A NAME="tex2html96"
+ HREF="node45.html">4.7 Cyclomatic Complexity</A>
+</UL>
+<LI><A NAME="tex2html97"
+ HREF="node46.html">5. TIPS</A>
+<UL>
+<LI><A NAME="tex2html98"
+ HREF="node47.html">5.1 Notes on MCS51 memory layout</A>
+</UL>
+<LI><A NAME="tex2html99"
+ HREF="node48.html">6. Retargetting for other MCUs.</A>
+<LI><A NAME="tex2html100"
+ HREF="node49.html">7. SDCDB - Source Level Debugger</A>
+<UL>
+<LI><A NAME="tex2html101"
+ HREF="node50.html">7.1 Compiling for Debugging</A>
+<LI><A NAME="tex2html102"
+ HREF="node51.html">7.2 How the Debugger Works</A>
+<LI><A NAME="tex2html103"
+ HREF="node52.html">7.3 Starting the Debugger</A>
+<LI><A NAME="tex2html104"
+ HREF="node53.html">7.4 Command Line Options.</A>
+<LI><A NAME="tex2html105"
+ HREF="node54.html">7.5 Debugger Commands.</A>
+<UL>
+<LI><A NAME="tex2html106"
+ HREF="node54.html#SECTION00085100000000000000">7.5.1 break [line | file:line | function | file:function]</A>
+<LI><A NAME="tex2html107"
+ HREF="node54.html#SECTION00085200000000000000">7.5.2 clear [line | file:line | function | file:function ]</A>
+<LI><A NAME="tex2html108"
+ HREF="node54.html#SECTION00085300000000000000">7.5.3 continue</A>
+<LI><A NAME="tex2html109"
+ HREF="node54.html#SECTION00085400000000000000">7.5.4 finish</A>
+<LI><A NAME="tex2html110"
+ HREF="node54.html#SECTION00085500000000000000">7.5.5 delete [n]</A>
+<LI><A NAME="tex2html111"
+ HREF="node54.html#SECTION00085600000000000000">7.5.6 info [break | stack | frame | registers ]</A>
+<LI><A NAME="tex2html112"
+ HREF="node54.html#SECTION00085700000000000000">7.5.7 step</A>
+<LI><A NAME="tex2html113"
+ HREF="node54.html#SECTION00085800000000000000">7.5.8 next</A>
+<LI><A NAME="tex2html114"
+ HREF="node54.html#SECTION00085900000000000000">7.5.9 run</A>
+<LI><A NAME="tex2html115"
+ HREF="node54.html#SECTION000851000000000000000">7.5.10 ptype variable </A>
+<LI><A NAME="tex2html116"
+ HREF="node54.html#SECTION000851100000000000000">7.5.11 print variable</A>
+<LI><A NAME="tex2html117"
+ HREF="node54.html#SECTION000851200000000000000">7.5.12 file filename</A>
+<LI><A NAME="tex2html118"
+ HREF="node54.html#SECTION000851300000000000000">7.5.13 frame</A>
+<LI><A NAME="tex2html119"
+ HREF="node54.html#SECTION000851400000000000000">7.5.14 set srcmode</A>
+<LI><A NAME="tex2html120"
+ HREF="node54.html#SECTION000851500000000000000">7.5.15 ! simulator command</A>
+<LI><A NAME="tex2html121"
+ HREF="node54.html#SECTION000851600000000000000">7.5.16 quit.</A>
+</UL>
+<LI><A NAME="tex2html122"
+ HREF="node55.html">7.6 Interfacing with XEmacs.</A>
+</UL>
+<LI><A NAME="tex2html123"
+ HREF="node56.html">8. Other Processors</A>
+<UL>
+<LI><A NAME="tex2html124"
+ HREF="node57.html">8.1 The Z80 and gbz80 port</A>
+</UL>
+<LI><A NAME="tex2html125"
+ HREF="node58.html">9. Support</A>
+<UL>
+<LI><A NAME="tex2html126"
+ HREF="node59.html">9.1 Reporting Bugs</A>
+</UL>
+<LI><A NAME="tex2html127"
+ HREF="node60.html">10. Acknowledgments</A>
+<LI><A NAME="tex2html128"
+ HREF="node61.html">Index</A>
+<LI><A NAME="tex2html129"
+ HREF="node62.html">About this document ...</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/sdccman.html/up_motif.gif b/doc/sdccman.html/up_motif.gif
new file mode 100644 (file)
index 0000000..c7c9cf7
Binary files /dev/null and b/doc/sdccman.html/up_motif.gif differ
diff --git a/doc/sdccman.html/up_motif_gr.gif b/doc/sdccman.html/up_motif_gr.gif
new file mode 100644 (file)
index 0000000..6aeb675
Binary files /dev/null and b/doc/sdccman.html/up_motif_gr.gif differ
diff --git a/doc/sdccman.lyx b/doc/sdccman.lyx
new file mode 100644 (file)
index 0000000..d8ec772
--- /dev/null
@@ -0,0 +1,8640 @@
+#LyX 1.1 created this file. For more info see http://www.lyx.org/
+\lyxformat 218
+\textclass article
+\language english
+\inputencoding default
+\fontscheme times
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language swedish
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle fancy
+
+\layout Title
+
+SDCC Compiler User Guide
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents{}
+
+\end_inset 
+
+
+\layout Section
+
+Introduction
+\layout Subsection
+
+About SDCC
+\layout Standard
+
+
+\series bold 
+SDCC
+\series default 
+ is a Freeware, retargettable, optimizing ANSI-C compiler by 
+\series bold 
+Sandeep Dutta
+\series default 
+ designed for 8 bit Microprocessors.
+ The current version targets Intel MCS51 based Microprocessors(8051,8052,
+ etc), Zilog Z80 based MCUs, and the Dallas DS80C390 variant.
+ It can be retargetted for other microprocessors, support for PIC, AVR and
+ 186 is under development.
+ The entire source code for the compiler is distributed under GPL.
+ SDCC uses ASXXXX & ASLINK, a Freeware, retargettable assembler & linker.
+ SDCC has extensive language extensions suitable for utilizing various microcont
+rollers and underlying hardware effectively.
+\newline 
+
+\newline 
+In addition to the MCU specific optimizations SDCC also does a host of standard
+ optimizations like:
+\layout Itemize
+
+global sub expression elimination, 
+\layout Itemize
+
+loop optimizations (loop invariant, strength reduction of induction variables
+ and loop reversing), 
+\layout Itemize
+
+constant folding & propagation, 
+\layout Itemize
+
+copy propagation, 
+\layout Itemize
+
+dead code elimination 
+\layout Itemize
+
+jumptables for 
+\emph on 
+switch
+\emph default 
+ statements.
+\layout Standard
+
+For the back-end SDCC uses a global register allocation scheme which should
+ be well suited for other 8 bit MCUs.
+\newline 
+
+\newline 
+The peep hole optimizer uses a rule based substitution mechanism which is
+ MCU independent.
+\newline 
+
+\newline 
+Supported data-types are:
+\layout Itemize
+
+char (8 bits, 1 byte), 
+\layout Itemize
+
+short and int (16 bits, 2 bytes), 
+\layout Itemize
+
+long (32 bit, 4 bytes)
+\layout Itemize
+
+float (4 byte IEEE).
+\layout Standard
+
+The compiler also allows 
+\emph on 
+inline assembler code
+\emph default 
+ to be embedded anywhere in a function.
+ In addition, routines developed in assembly can also be called.
+\newline 
+
+\newline 
+SDCC also provides an option (--cyclomatic) to report the relative complexity
+ of a function.
+ These functions can then be further optimized, or hand coded in assembly
+ if needed.
+\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.
+\newline 
+
+\newline 
+The latest version can be downloaded from 
+\begin_inset LatexCommand \htmlurl{http://sdcc.sourceforge.net/}
+
+\end_inset 
+
+
+\series bold 
+.
+\layout Subsection
+
+Open Source
+\layout Standard
+
+All packages used in this compiler system are 
+\emph on 
+opensource
+\emph default 
+ and 
+\emph on 
+freeware
+\emph default 
+; source code for all the sub-packages (asxxxx assembler/linker, pre-processor)
+ is distributed with the package.
+ This documentation is maintained using a freeware word processor (LyX).
+\layout Standard
+
+This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2, or (at your option) any later version.
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, 59 Temple
+ Place - Suite 330, Boston, MA 02111-1307, USA.
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve what
+ you give them.
+ Help stamp out software-hoarding! 
+\layout Subsection
+
+Typographic conventions
+\layout Standard
+
+Throughout this manual, we will use the following convention.
+ Commands you have to type in are printed in 
+\family sans 
+\series bold 
+"sans serif"
+\series default 
+.
+
+\family default 
+ Code samples are printed in 
+\family typewriter 
+typewriter font.
+
+\family default 
+ Interesting items and new terms are printed in 
+\emph on 
+italicised type.
+\layout Subsection
+
+Compatibility with previous versions
+\layout Standard
+
+This version has numerous bug fixes compared with the previous version.
+ But we also introduced some incompatibilities with older versions.
+ Not just for the fun of it, but to make the compiler more stable, efficient
+ and ANSI compliant.
+\newline 
+
+\layout Itemize
+
+short is now equivalent to int (16 bits), it used to be equivalent to char
+ (8 bits)
+\layout Itemize
+
+the default directory where include, library and documention files are stored
+ is no in /usr/local/share
+\layout Itemize
+
+char type parameters to vararg functions are casted to int unless explicitly
+ casted, e.g.: 
+\newline 
+
+\family typewriter 
+\SpecialChar ~
+\SpecialChar ~
+char a=3;
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+printf ("%d %c
+\backslash 
+n", a, (char)a);
+\family default 
+
+\newline 
+ will push a as an int and as a char resp.
+\layout Itemize
+
+option --regextend has been removed
+\layout Itemize
+
+option --noreparms has been removed
+\layout Standard
+
+
+\emph on 
+<pending: more incompatibilities?>
+\layout Subsection
+
+System Requirements
+\layout Standard
+
+What do you need before you start installation of SDCC? A computer, and
+ a desire to compute.
+ The preferred method of installation is to compile SDCC from source using
+ GNU gcc and make.
+ For Windows some pre-compiled binary distributions are available for your
+ convenience.
+ You should have some experience with command line tools and compiler use.
+\layout Subsection
+
+Other Resources
+\layout Standard
+
+The SDCC home page at 
+\begin_inset LatexCommand \htmlurl{http://sdcc.sourceforge.net/}
+
+\end_inset 
+
+ is a great place to find distribution sets.
+ You can also find links to the user mailing lists that offer help or discuss
+ SDCC with other SDCC users.
+ Web links to other SDCC related sites can also be found here.
+ This document can be found in the DOC directory of the source package as
+ a text or HTML file.
+ Some of the other tools (simulator and assembler) included with SDCC contain
+ their own documentation and can be found in the source distribution.
+ If you want the latest unreleased software, the complete source package
+ is available directly by anonymous CVS on cvs.sdcc.sourceforge.net.
+\layout Subsection
+
+Wishes for the future
+\layout Standard
+
+There are (and always will be) some things that could be done.
+ Here are some I can think of:
+\newline 
+
+\layout Standard
+
+
+\family sans 
+\series bold 
+sdcc -c --model-large -o large _atoi.c
+\family default 
+\series default 
+ (where large could be a different basename or a directory)
+\newline 
+
+\layout Standard
+
+
+\family typewriter 
+char KernelFunction3(char p) at 0x340;
+\newline 
+
+\newline 
+
+\family default 
+If you can think of some more, please send them to the list.
+\newline 
+
+\newline 
+
+\emph on 
+<pending: And then of course a proper index-table
+\begin_inset LatexCommand \index{index}
+
+\end_inset 
+
+>
+\layout Section
+
+Installation
+\layout Subsection
+
+Linux/Unix Installation
+\layout Enumerate
+
+
+\series medium 
+Download the source package, it will be named something like sdcc-2.x.x.tgz.
+\layout Enumerate
+
+
+\series medium 
+Bring up a command line terminal, such as xterm.
+\layout Enumerate
+
+
+\series medium 
+Unpack the file using a command like: 
+\family sans 
+\series bold 
+"tar -xzf sdcc-2.x.x.tgz
+\family default 
+\series default 
+"
+\series medium 
+, this will create a sub-directory called sdcc with all of the sources.
+\layout Enumerate
+
+Change directory into the main SDCC directory, for example type: 
+\family sans 
+\series bold 
+"cd sdcc
+\series default 
+".
+\layout Enumerate
+
+
+\series medium 
+Type 
+\family sans 
+\series bold 
+"./configure
+\family default 
+\series default 
+".
+ This configures the package for compilation on your system.
+\layout Enumerate
+
+
+\series medium 
+Type 
+\family sans 
+\series bold 
+"make
+\family default 
+\series default 
+"
+\series medium 
+.
+
+\series default 
+ All of the source packages will compile, this can take a while.
+\layout Enumerate
+
+
+\series medium 
+Type 
+\family sans 
+\series bold 
+"make install"
+\family default 
+\series default 
+ as root
+\series medium 
+.
+
+\series default 
+ This copies the binary executables, the include files, the libraries and
+ the documentation to the install directories.
+\layout Subsection
+
+Windows Installation
+\layout Standard
+
+
+\emph on 
+<pending: is this complete? where is borland, mingw>
+\newline 
+
+\newline 
+
+\emph default 
+For installation under Windows you first need to pick between a pre-compiled
+ binary package, or installing the source package along with the Cygwin
+ package.
+ The binary package is the quickest to install, while the Cygwin package
+ includes all of the open source power tools used to compile the complete
+ SDCC source package in the Windows environment.
+ If you are not familiar with the Unix command line environment, you may
+ want to read the section on additional information for Windows users prior
+ to your initial installation.
+\layout Subsubsection
+
+Windows Install Using a Binary Package
+\layout Enumerate
+
+Download the binary package and unpack it using your favorite unpacking
+ tool (gunzip, WinZip, etc).
+ This should unpack to a group of sub-directories.
+ An example directory structure after unpacking is: c:
+\backslash 
+usr
+\backslash 
+local
+\backslash 
+bin for the executables, c:
+\backslash 
+usr
+\backslash 
+local
+\backslash 
+share
+\backslash 
+sdcc
+\backslash 
+include and c:
+\backslash 
+usr
+\backslash 
+local
+\backslash 
+share
+\backslash 
+sdcc
+\backslash 
+lib for the include and libraries.
+\layout Enumerate
+
+Adjust your environment PATH to include the location of the bin directory.
+ For example, make a setsdcc.bat file with the following: set PATH=c:
+\backslash 
+usr
+\backslash 
+local
+\backslash 
+bin;%PATH%
+\layout Enumerate
+
+When you compile with sdcc, you may need to specify the location of the
+ lib and include folders.
+ For example, sdcc -I c:
+\backslash 
+usr
+\backslash 
+local
+\backslash 
+share
+\backslash 
+sdcc
+\backslash 
+include -L c:
+\backslash 
+usr
+\backslash 
+local
+\backslash 
+share
+\backslash 
+sdcc
+\backslash 
+lib
+\backslash 
+small test.c
+\layout Subsubsection
+
+Windows Install Using Cygwin
+\layout Enumerate
+
+
+\series medium 
+Download and install the cygwin package from the redhat site
+\series default 
+
+\begin_inset LatexCommand \htmlurl{http://sources.redhat.com/cygwin/}
+
+\end_inset 
+
+
+\series medium 
+.
+ Currently, this involved downloading a small install program which then
+ automates downloading and installing 
+\series default 
+selected parts of
+\series medium 
+ the package
+\series default 
+ (a large 80M byte sized dowload for the whole thing)
+\series medium 
+.
+
+\series default 
+\layout Enumerate
+
+
+\series medium 
+Bring up a 
+\series default 
+Unix/Bash 
+\series medium 
+command line terminal from the Cygwin menu.
+\layout Enumerate
+
+
+\series medium 
+Follow the instructions in the preceding Linux/Unix installation section.
+\layout Subsection
+
+Testing out the SDCC Compiler
+\layout Standard
+
+The first thing you should do after installing your SDCC compiler is to
+ see if it runs.
+ Type 
+\family sans 
+\series bold 
+"sdcc --version"
+\family default 
+\series default 
+ at the prompt, and the program should run and tell you the version.
+ If it doesn't run, or gives a message about not finding sdcc program, then
+ you need to check over your installation.
+ Make sure that the sdcc bin directory is in your executable search path
+ defined by the PATH environment setting (see the Trouble-shooting section
+ for suggestions).
+ Make sure that the sdcc program is in the bin folder, if not perhaps something
+ did not install correctly.
+\newline 
+
+\newline 
+
+\series medium 
+SDCC binaries are commonly installed in a directory arrangement like this:
+\series default 
+
+\newline 
+
+\newline 
+
+\begin_inset  Tabular
+<lyxtabular version="2" rows="3" columns="2">
+<features rotate="false" islongtable="false" endhead="0" endfirsthead="0" endfoot="0" endlastfoot="0">
+<column alignment="left" valignment="top" leftline="true" rightline="false" width="" special="">
+<column alignment="left" valignment="top" leftline="true" rightline="true" width="" special="">
+<row topline="true" bottomline="true" newpage="false">
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+/
+\series medium 
+usr/local/bin
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="true" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+
+\series medium 
+Holds executables(sdcc, s51, aslink, 
+\series default 
+...
+\series medium 
+)
+\end_inset 
+</cell>
+</row>
+<row topline="true" bottomline="false" newpage="false">
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+/
+\series medium 
+usr/local/share/sdcc/lib 
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="true" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+
+\series medium 
+Holds common C 
+\series default 
+libraries
+\end_inset 
+</cell>
+</row>
+<row topline="true" bottomline="true" newpage="false">
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+/
+\series medium 
+usr/local/share/sdcc/include
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="true" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+
+\series medium 
+Holds common C header files
+\end_inset 
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset 
+
+
+\newline 
+
+\newline 
+
+\series medium 
+Make sure the compiler works on a very simple example.
+ Type in the following test.c program using your favorite editor:
+\series default 
+
+\newline 
+
+\emph on 
+
+\newline 
+
+\family typewriter 
+\emph default 
+int test(int t) {
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+return t+3;
+\newline 
+}
+\family default 
+
+\newline 
+
+\emph on 
+
+\newline 
+
+\series medium 
+\emph default 
+Compile this using the following command: 
+\family sans 
+\series bold 
+"sdcc -c test.c".
+
+\family default 
+\series default 
+\series medium 
+If all goes well, the compiler will generate a test.asm and test.rel file.
+ Congratulations, you've just compiled your first program with SDCC.
+ We used the -c option to tell SDCC not to link the generated code, just
+ to keep things simple for this step.
+\series default 
+
+\newline 
+
+\newline 
+
+\series medium 
+The next step is to try it with the linker.
+ Type in 
+\family sans 
+\series bold 
+"sdcc test.c
+\family default 
+\series default 
+"
+\series medium 
+.
+ If all goes well the compiler will link with the libraries and produce
+ a test.ihx output file.
+ If this step fails
+\series default 
+\series medium 
+(no test.ihx, and the linker generates warnings), then the problem is most
+ likely that sdcc cannot find the 
+\series default 
+/
+\series medium 
+usr/local/share/sdcc/lib directory
+\series default 
+\series medium 
+(see the Install trouble-shooting section for suggestions).
+\series default 
+
+\newline 
+
+\newline 
+
+\series medium 
+The final test is to ensure sdcc can use the 
+\series default 
+standard
+\series medium 
+ header files and libraries.
+ Edit test.c and change it to the following:
+\series default 
+
+\newline 
+
+\newline 
+#include <string.h>
+\newline 
+main() {
+\newline 
+
+\family typewriter 
+char str1[10];
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+strcpy(str1, "testing");
+\newline 
+}
+\newline 
+
+\newline 
+
+\family default 
+\series medium 
+Compile this by typing 
+\family sans 
+\series bold 
+"sdcc test.c"
+\family default 
+\series medium 
+.
+ This should generate a test.ihx output file, and it should give no warnings
+ such as not finding the string.h file.
+ If it cannot find the string.h file, then the problem is that sdcc cannot
+ find the /usr/local/share/sdcc/include directory
+\series default 
+\series medium 
+(see the Install trouble-shooting section for suggestions).
+\layout Subsection
+
+Install Trouble-shooting
+\layout Subsubsection
+
+SDCC cannot find libraries or header files.
+\layout Standard
+
+The default installation assumes the libraries and header files are located
+ at 
+\begin_inset Quotes eld
+\end_inset 
+
+/usr/local/share/sdcc/lib
+\begin_inset Quotes erd
+\end_inset 
+
+ and 
+\begin_inset Quotes eld
+\end_inset 
+
+/usr/local/share/sdcc/include
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ An alternative is to specify these locations as compiler options like this:
+\family sans 
+\series bold 
+"sdcc\SpecialChar ~
+-L\SpecialChar ~
+/usr/local/sdcc/lib/small\SpecialChar ~
+-I\SpecialChar ~
+/usr/local/sdcc/include\SpecialChar ~
+test.c"
+\family default 
+\series default 
+.
+\layout Subsubsection
+
+SDCC does not compile correctly.
+\layout Standard
+
+A thing to try is starting from scratch by unpacking the .tgz source package
+ again in an empty directory.
+ Confure it again and build like:
+\newline 
+
+\newline 
+
+\family sans 
+\series bold 
+make 2&>1 | tee make.log
+\family default 
+\series default 
+
+\newline 
+
+\newline 
+After this you can review the make.log file to locate the problem.
+ Or a relevant part of this be attached to an email that could be helpful
+ when requesting help from the mailing list.
+\layout Subsubsection
+
+What the 
+\begin_inset Quotes sld
+\end_inset 
+
+./configure
+\begin_inset Quotes srd
+\end_inset 
+
+ does
+\layout Standard
+
+The 
+\begin_inset Quotes sld
+\end_inset 
+
+./configure
+\begin_inset Quotes srd
+\end_inset 
+
+ command is a script that analyzes your system and performs some configuration
+ to ensure the source package compiles on your system.
+ It will take a few minutes to run, and will compile a few tests to determine
+ what compiler features are installed.
+\layout Subsubsection
+
+What the 
+\begin_inset Quotes sld
+\end_inset 
+
+make
+\begin_inset Quotes srd
+\end_inset 
+
+ does.
+\layout Standard
+
+This runs the GNU make tool, which automatically compiles all the source
+ packages into the final installed binary executables.
+\layout Subsubsection
+
+What the 
+\begin_inset Quotes sld
+\end_inset 
+
+make install
+\begin_inset Quotes erd
+\end_inset 
+
+ command does.
+\layout Standard
+
+This will install the compiler, other executables and libraries in to the
+ appropriate system directories.
+ The default is to copy the executables to /usr/local/bin and the libraries
+ and header files to /usr/local/share/sdcc/lib and /usr/local/share/sdcc/include.
+\layout Subsection
+
+Additional Information for Windows Users
+\layout Standard
+
+
+\emph on 
+<pending: is this up to date?>
+\newline 
+
+\newline 
+
+\emph default 
+The standard method of installing on a Unix system involves compiling the
+ source package.
+ This is easily done under Unix, but under Windows it can be a more difficult
+ process.
+ The Cygwin is a large package to download, and the compilation runs considerabl
+y slower under Windows due to the overhead of the Cygwin tool set.
+ An alternative is to install a pre-compiled Windows binary package.
+ There are various trade-offs between each of these methods.
+\layout Standard
+
+The Cygwin package allows a Windows user to run a Unix command line interface
+ (bash shell) and also implements a Unix like file system on top of Windows.
+ Included are many of the famous GNU software development tools which can
+ augment the SDCC compiler.This is great if you have some experience with
+ Unix command line tools and file system conventions, if not you may find
+ it easier to start by installing a binary Windows package.
+ The binary packages work with the Windows file system conventions.
+\layout Subsubsection
+
+Getting started with Cygwin
+\layout Standard
+
+SDCC is typically distributed as a tarred/gzipped file (.tgz).
+ This is a packed file similar to a .zip file.
+ Cygwin includes the tools you will need to unpack the SDCC distribution
+ (tar and gzip).
+ To unpack it, simply follow the instructions under the Linux/Unix install
+ section.
+ Before you do this you need to learn how to start a cygwin shell and some
+ of the basic commands used to move files, change directory, run commands
+ and so on.
+ The change directory command is 
+\family sans 
+\series bold 
+
+\begin_inset Quotes eld
+\end_inset 
+
+cd
+\begin_inset Quotes erd
+\end_inset 
+
+
+\family default 
+\series default 
+, the move command is 
+\family sans 
+\series bold 
+
+\begin_inset Quotes eld
+\end_inset 
+
+mv
+\begin_inset Quotes erd
+\end_inset 
+
+
+\family default 
+\series default 
+.
+ To print the current working directory, type 
+\family sans 
+\series bold 
+
+\begin_inset Quotes eld
+\end_inset 
+
+pwd
+\begin_inset Quotes erd
+\end_inset 
+
+
+\family default 
+\series default 
+.
+ To make a directory, use 
+\family sans 
+\series bold 
+
+\begin_inset Quotes eld
+\end_inset 
+
+mkdir
+\begin_inset Quotes erd
+\end_inset 
+
+
+\family default 
+\series default 
+.
+\layout Standard
+
+There are some basic differences between Unix and Windows file systems you
+ should understand.
+ When you type in directory paths, Unix and the Cygwin bash prompt uses
+ forward slashes '/' between directories while Windows traditionally uses
+ '
+\backslash 
+' backward slashes.
+ So when you work at the Cygwin bash prompt, you will need to use the forward
+ '/' slashes.
+ Unix does not have a concept of drive letters, such as 
+\begin_inset Quotes eld
+\end_inset 
+
+c:
+\begin_inset Quotes eld
+\end_inset 
+
+, instead all files systems attach and appear as directories.
+\layout Subsubsection
+
+Running SDCC as Native Compiled Executables
+\layout Standard
+
+If you use the pre-compiled binaries, the install directories for the libraries
+ and header files may need to be specified on the sdcc command line like
+ this: 
+\family sans 
+\series bold 
+"sdcc -L c:
+\backslash 
+usr
+\backslash 
+local
+\backslash 
+sdcc
+\backslash 
+lib
+\backslash 
+small -I c:
+\backslash 
+usr
+\backslash 
+local
+\backslash 
+sdcc
+\backslash 
+include test.c"
+\family default 
+\series default 
+ if you are running outside of a Unix bash shell.
+\layout Standard
+
+If you have successfully installed and compiled SDCC with the Cygwin package,
+ it is possible to compile into native .exe files by using the additional
+ makefiles included for this purpose.
+ For example, with the Borland 32-bit compiler you would run 
+\family sans 
+\series bold 
+"make -f Makefile.bcc"
+\family default 
+\series default 
+.
+ A command line version of the Borland 32-bit compiler can be downloaded
+ from the Inprise web site.
+\layout Subsection
+
+SDCC on Other Platforms
+\layout Itemize
+
+
+\series bold 
+FreeBSD and other non-GNU Unixes 
+\series default 
+- Make sure the GNU make is installed as the default make tool.
+\layout Itemize
+
+SDCC has been ported to run under a variety of operating systems and processors.
+ If you can run GNU GCC/make then chances are good SDCC can be compiled
+ and run on your system.
+\layout Subsection
+
+Advanced Install Options
+\layout Standard
+
+The 
+\begin_inset Quotes eld
+\end_inset 
+
+configure
+\begin_inset Quotes erd
+\end_inset 
+
+ command has several options.
+ The most commonly used option is --prefix=<directory name>, where <directory
+ name> is the final location for the sdcc executables and libraries, (default
+ location is /usr/local).
+ The installation process will create the following directory structure
+ under the <directory name> specified (if they do not already exist).
+\newline 
+
+\newline 
+bin/ - binary exectables (add to PATH environment variable)
+\newline 
+bin/share/
+\newline 
+bin/share/sdcc/include/ - include header files
+\newline 
+bin/share/sdcc/lib/
+\newline 
+bin/share/sdcc/lib/small/ - Object & library files for small model library
+\newline 
+bin/share/sdcc/lib/large/ - Object & library files for large model library
+\newline 
+bin/share/sdcc/lib/ds390/ - Object & library files forDS80C390 library
+\newline 
+
+\newline 
+The command 
+\family sans 
+\series bold 
+
+\begin_inset Quotes sld
+\end_inset 
+
+./configure --prefix=/usr/local
+\begin_inset Quotes erd
+\end_inset 
+
+\family default 
+\series default 
+will configure the compiler to be installed in directory /usr/local.
+\layout Subsection
+
+Components of SDCC
+\layout Standard
+
+SDCC is not just a compiler, but a collection of tools by various developers.
+ These include linkers, assemblers, simulators and other components.
+ Here is a summary of some of the components.
+ Note that the included simulator and assembler have separate documentation
+ which you can find in the source package in their respective directories.
+ As SDCC grows to include support for other processors, other packages from
+ various developers are included and may have their own sets of documentation.
+\newline 
+
+\newline 
+You might want to look at the files which are installed in <installdir>.
+ At the time of this writing, we find the following programs:
+\newline 
+\newline 
+In <installdir>/bin:
+\layout Itemize
+
+sdcc - The compiler.
+\layout Itemize
+
+sdcpp - The C preprocessor.
+\layout Itemize
+
+asx8051 - The assembler for 8051 type processors.
+\layout Itemize
+
+as-z80
+\series bold 
+, 
+\series default 
+as-gbz80 - The Z80 and GameBoy Z80 assemblers.
+\layout Itemize
+
+aslink -The linker for 8051 type processors.
+\layout Itemize
+
+link-z80
+\series bold 
+, 
+\series default 
+link-gbz80 - The Z80 and GameBoy Z80 linkers.
+\layout Itemize
+
+s51 - The ucSim 8051 simulator.
+\layout Itemize
+
+sdcdb - The source debugger.
+\layout Itemize
+
+packihx - A tool to pack Intel hex files.
+\layout Standard
+
+In <installdir>/share/sdcc/include
+\layout Itemize
+
+the include files
+\layout Standard
+
+In <installdir>/share/sdcc/lib
+\layout Itemize
+
+the sources of the runtime library and the subdirs small large and ds390
+ with the precompiled relocatables.
+\layout Standard
+
+In <installdir>/share/sdcc/doc
+\layout Itemize
+
+the documentation
+\layout Standard
+
+As development for other processors proceeds, this list will expand to include
+ executables to support processors like AVR, PIC, etc.
+\layout Subsubsection
+
+sdcc - The Compiler
+\layout Standard
+
+This is the actual compiler, it in turn uses the c-preprocessor and invokes
+ the assembler and linkage editor.
+\layout Subsubsection
+
+sdcpp (C-Preprocessor)
+\layout Standard
+
+The preprocessor is a modified version of the GNU preprocessor.
+ The C preprocessor is used to pull in #include sources, process #ifdef
+ statements, #defines and so on.
+\layout Subsubsection
+
+asx8051, as-z80, as-gbz80, aslink, link-z80, link-gbz80 (The Assemblers
+ and Linkage Editors)
+\layout Standard
+
+This is retargettable assembler & linkage editor, it was developed by Alan
+ Baldwin.
+ John Hartman created the version for 8051, and I (Sandeep) have made some
+ enhancements and bug fixes for it to work properly with the SDCC.
+\layout Subsubsection
+
+s51 - Simulator
+\layout Standard
+
+S51 is a freeware, opensource simulator developed by Daniel Drotos (
+\begin_inset LatexCommand \url{mailto:drdani@mazsola.iit.uni-miskolc.hu}
+
+\end_inset 
+
+).
+ The simulator is built as part of the build process.
+ For more information visit Daniel's website at: 
+\begin_inset LatexCommand \url{http://mazsola.iit.uni-miskolc.hu/~drdani/embedded/s51}
+
+\end_inset 
+
+ .
+\layout Subsubsection
+
+sdcdb - Source Level Debugger
+\layout Standard
+
+Sdcdb is the companion source level debugger.
+ The current version of the debugger uses Daniel's Simulator S51, but can
+ be easily changed to use other simulators.
+\layout Section
+
+Using SDCC
+\layout Subsection
+
+Compiling
+\layout Subsubsection
+
+Single Source File Projects
+\layout Standard
+
+For single source file 8051 projects the process is very simple.
+ Compile your programs with the following command 
+\family sans 
+\series bold 
+"sdcc sourcefile.c".
+
+\family default 
+\series default 
+ This will compile, assemble and link your source file.
+ Output files are as follows
+\newline 
+
+\newline 
+sourcefile.asm - Assembler source file created by the compiler
+\newline 
+sourcefile.lst - Assembler listing file created by the Assembler
+\newline 
+sourcefile.rst - Assembler listing file updated with linkedit information,
+ created by linkage editor
+\newline 
+sourcefile.sym - symbol listing for the sourcefile, created by the assembler
+\newline 
+sourcefile.rel - Object file created by the assembler, input to Linkage editor
+\newline 
+sourcefile.map - The memory map for the load module, created by the Linker
+\newline 
+sourcefile.ihx - The load module in Intel hex format (you can select the
+ Motorola S19 format with --out-fmt-s19)
+\newline 
+sourcefile.cdb - An optional file (with --debug) containing debug information
+\newline 
+
+\layout Subsubsection
+
+Projects with Multiple Source Files
+\layout Standard
+
+SDCC can compile only ONE file at a time.
+ Let us for example assume that you have a project containing the following
+ files:
+\newline 
+
+\newline 
+foo1.c (contains some functions)
+\newline 
+foo2.c (contains some more functions)
+\newline 
+foomain.c (contains more functions and the function main)
+\newline 
+
+\size footnotesize 
+
+\newline 
+
+\size default 
+The first two files will need to be compiled separately with the commands:
+\size footnotesize 
+\size default 
+
+\newline 
+
+\newline 
+
+\family sans 
+\series bold 
+sdcc\SpecialChar ~
+-c\SpecialChar ~
+foo1.c
+\family default 
+\series default 
+\size footnotesize 
+
+\newline 
+
+\family sans 
+\series bold 
+\size default 
+sdcc\SpecialChar ~
+-c\SpecialChar ~
+foo2.c
+\family default 
+\series default 
+
+\newline 
+
+\newline 
+Then compile the source file containing the 
+\emph on 
+main()
+\emph default 
+ function and link the files together with the following command: 
+\newline 
+
+\newline 
+
+\family sans 
+\series bold 
+sdcc\SpecialChar ~
+foomain.c\SpecialChar ~
+foo1.rel\SpecialChar ~
+foo2.rel
+\family default 
+\series default 
+
+\newline 
+
+\newline 
+Alternatively, 
+\emph on 
+foomain.c 
+\emph default 
+can be separately compiled as well: 
+\family sans 
+\series bold 
+
+\newline 
+
+\newline 
+sdcc\SpecialChar ~
+-c\SpecialChar ~
+foomain.c
+\newline 
+sdcc foomain.rel foo1.rel foo2.rel
+\newline 
+
+\newline 
+
+\family default 
+\series default 
+The file containing the 
+\emph on 
+main()
+\emph default 
+ function
+\emph on 
+\emph default 
+\noun on 
+must
+\noun default 
+ be the 
+\noun on 
+first
+\noun default 
+ file specified in the command line, since the linkage editor processes
+ file in the order they are presented to it.
+\layout Subsubsection
+
+Projects with Additional Libraries
+\layout Standard
+
+Some reusable routines may be compiled into a library, see the documentation
+ for the assembler and linkage editor (which are in <installdir>/share/sdcc/doc)
+ for how to create a 
+\emph on 
+.lib
+\emph default 
+ library file.
+ Libraries created in this manner can be included in the command line.
+ Make sure you include the -L <library-path> option to tell the linker where
+ to look for these files if they are not in the current directory.
+ Here is an example, assuming you have the source file 
+\emph on 
+foomain.c
+\emph default 
+ and a library
+\emph on 
+ foolib.lib
+\emph default 
+ in the directory 
+\emph on 
+mylib
+\emph default 
+ (if that is not the same as your current project):
+\newline 
+
+\newline 
+
+\family sans 
+\series bold 
+sdcc foomain.c foolib.lib -L mylib
+\newline 
+
+\newline 
+
+\family default 
+\series default 
+Note here that
+\emph on 
+ mylib
+\emph default 
+ must be an absolute path name.
+\newline 
+
+\newline 
+The most efficient way to use libraries is to keep seperate modules in seperate
+ source files.
+ The lib file now should name all the modules.rel files.
+ For an example see the standard library file 
+\emph on 
+libsdcc.lib
+\emph default 
+ in the directory <installdir>/share/lib/small.
+\layout Subsection
+
+Command Line Options
+\layout Subsubsection
+
+Processor Selection Options
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-mmcs51
+\series default 
+ Generate code for the MCS51 (8051) family of processors.
+ This is the default processor target.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-mds390
+\series default 
+ Generate code for the DS80C390 processor.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-mz80
+\series default 
+ Generate code for the Z80 family of processors.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-mgbz80
+\series default 
+ Generate code for the GameBoy Z80 processor.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-mavr
+\series default 
+ Generate code for the Atmel AVR processor(In development, not complete).
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-mpic14
+\series default 
+ Generate code for the PIC 14-bit processors(In development, not complete).
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-mtlcs900h
+\series default 
+ Generate code for the Toshiba TLCS-900H processor(In development, not complete).
+\layout Subsubsection
+
+Preprocessor Options
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-I<path>
+\series default 
+ The additional location where the pre processor will look for <..h> or 
+\begin_inset Quotes eld
+\end_inset 
+
+..h
+\begin_inset Quotes erd
+\end_inset 
+
+ files.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-D<macro[=value]>
+\series default 
+ Command line definition of macros.
+ Passed to the pre processor.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-M
+\series default 
+ Tell the preprocessor to output a rule suitable for make describing the
+ dependencies of each object file.
+ For each source file, the preprocessor outputs one make-rule whose target
+ is the object file name for that source file and whose dependencies are
+ all the files `#include'd in it.
+ This rule may be a single line or may be continued with `
+\backslash 
+'-newline if it is long.
+ The list of rules is printed on standard output instead of the preprocessed
+ C program.
+ `-M' implies `-E'.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-C
+\series default 
+ Tell the preprocessor not to discard comments.
+ Used with the `-E' option.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-MM
+\size large 
+\bar under 
+\series default 
+\size default 
+\bar default 
+Like `-M' but the output mentions only the user header files included with
+ `#include 
+\begin_inset Quotes eld
+\end_inset 
+
+file"'.
+ System header files included with `#include <file>' are omitted.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-Aquestion(answer)
+\series default 
+ Assert the answer answer for question, in case it is tested with a preprocessor
+ conditional such as `#if #question(answer)'.
+ `-A-' disables the standard assertions that normally describe the target
+ machine.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-Aquestion
+\series default 
+ (answer) Assert the answer answer for question, in case it is tested with
+ a preprocessor conditional such as `#if #question(answer)'.
+ `-A-' disables the standard assertions that normally describe the target
+ machine.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-Umacro
+\series default 
+ Undefine macro macro.
+ `-U' options are evaluated after all `-D' options, but before any `-include'
+ and `-imacros' options.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-dM
+\series default 
+ Tell the preprocessor to output only a list of the macro definitions that
+ are in effect at the end of preprocessing.
+ Used with the `-E' option.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-dD
+\series default 
+ Tell the preprocessor to pass all macro definitions into the output, in
+ their proper sequence in the rest of the output.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-dN
+\size large 
+\bar under 
+\series default 
+\size default 
+\bar default 
+Like `-dD' except that the macro arguments and contents are omitted.
+ Only `#define name' is included in the output.
+\layout Subsubsection
+
+Linker Options
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-L\SpecialChar ~
+--lib-path
+\bar under 
+\series default 
+\bar default 
+<absolute path to additional libraries> This option is passed to the linkage
+ editor's additional libraries search path.
+ The path name must be absolute.
+ Additional library files may be specified in the command line.
+ See section Compiling programs for more details.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--xram-loc
+\series default 
+<Value> The start location of the external ram, default value is 0.
+ The value entered can be in Hexadecimal or Decimal format, e.g.: --xram-loc
+ 0x8000 or --xram-loc 32768.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--code-loc
+\series default 
+<Value> The start location of the code segment, default value 0.
+ Note when this option is used the interrupt vector table is also relocated
+ to the given address.
+ The value entered can be in Hexadecimal or Decimal format, e.g.: --code-loc
+ 0x8000 or --code-loc 32768.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--stack-loc
+\series default 
+<Value> The initial value of the stack pointer.
+ The default value of the stack pointer is 0x07 if only register bank 0
+ is used, if other register banks are used then the stack pointer is initialized
+ to the location above the highest register bank used.
+ eg.
+ if register banks 1 & 2 are used the stack pointer will default to location
+ 0x18.
+ The value entered can be in Hexadecimal or Decimal format, eg.
+ --stack-loc 0x20 or --stack-loc 32.
+ If all four register banks are used the stack will be placed after the
+ data segment (equivalent to --stack-after-data)
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--stack-after-data
+\series default 
+ This option will cause the stack to be located in the internal ram after
+ the data segment.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--data-loc
+\series default 
+<Value> The start location of the internal ram data segment, the default
+ value is 0x30.The value entered can be in Hexadecimal or Decimal format,
+ eg.
+ --data-loc 0x20 or --data-loc 32.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--idata-loc
+\series default 
+<Value> The start location of the indirectly addressable internal ram, default
+ value is 0x80.
+ The value entered can be in Hexadecimal or Decimal format, eg.
+ --idata-loc 0x88 or --idata-loc 136.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--out-fmt-ihx
+\bar under 
+\series default 
+\bar default 
+The linker output (final object code) is in Intel Hex format.
+ (This is the default option).
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--out-fmt-s19
+\bar under 
+\series default 
+\bar default 
+The linker output (final object code) is in Motorola S19 format.
+\layout Subsubsection
+
+MCS51 Options
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--model-large
+\series default 
+ Generate code for Large model programs see section Memory Models for more
+ details.
+ If this option is used all source files in the project should be compiled
+ with this option.
+ In addition the standard library routines are compiled with small model,
+ they will need to be recompiled.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--model-small
+\series default 
+\size large 
+\emph on 
+\size default 
+\emph default 
+Generate code for Small Model programs see section Memory Models for more
+ details.
+ This is the default model.
+\layout Subsubsection
+
+DS390 Options
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--model-flat24
+\series default 
+\size large 
+\emph on 
+\size default 
+\emph default 
+Generate 24-bit flat mode code.
+ This is the one and only that the ds390 code generator supports right now
+ and is default when using 
+\emph on 
+-mds390
+\emph default 
+.
+ See section Memory Models for more details.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--stack-10bit
+\series default 
+ Generate code for the 10 bit stack mode of the Dallas DS80C390 part.
+ This is the one and only that the ds390 code generator supports right now
+ and is default when using 
+\emph on 
+-mds390
+\emph default 
+.
+ In this mode, the stack is located in the lower 1K of the internal RAM,
+ which is mapped to 0x400000.
+ Note that the support is incomplete, since it still uses a single byte
+ as the stack pointer.
+ This means that only the lower 256 bytes of the potential 1K stack space
+ will actually be used.
+ However, this does allow you to reclaim the precious 256 bytes of low RAM
+ for use for the DATA and IDATA segments.
+ The compiler will not generate any code to put the processor into 10 bit
+ stack mode.
+ It is important to ensure that the processor is in this mode before calling
+ any re-entrant functions compiled with this option.
+ In principle, this should work with the 
+\emph on 
+--stack-auto
+\emph default 
+ option, but that has not been tested.
+ It is incompatible with the 
+\emph on 
+--xstack
+\emph default 
+ option.
+ It also only makes sense if the processor is in 24 bit contiguous addressing
+ mode (see the 
+\emph on 
+--model-flat24 option
+\emph default 
+).
+\layout Subsubsection
+
+Optimization Options
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--nogcse
+\series default 
+ Will not do global subexpression elimination, this option may be used when
+ the compiler creates undesirably large stack/data spaces to store compiler
+ temporaries.
+ A warning message will be generated when this happens and the compiler
+ will indicate the number of extra bytes it allocated.
+ It recommended that this option NOT be used, #pragma\SpecialChar ~
+NOGCSE can be used
+ to turn off global subexpression elimination for a given function only.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--noinvariant
+\series default 
+ Will not do loop invariant optimizations, this may be turned off for reasons
+ explained for the previous option.
+ For more details of loop optimizations performed see section Loop Invariants.It
+ recommended that this option NOT be used, #pragma\SpecialChar ~
+NOINVARIANT can be used
+ to turn off invariant optimizations for a given function only.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--noinduction
+\series default 
+ Will not do loop induction optimizations, see section strength reduction
+ for more details.It is recommended that this option is NOT used, #pragma\SpecialChar ~
+NOINDUCT
+ION can be used to turn off induction optimizations for a given function
+ only.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--nojtbound
+\size large 
+\bar under 
+\series default 
+\size default 
+\bar default 
+ Will not generate boundary condition check when switch statements are implement
+ed using jump-tables.
+ See section Switch Statements for more details.
+ It is recommended that this option is NOT used, #pragma\SpecialChar ~
+NOJTBOUND can be
+ used to turn off boundary checking for jump tables for a given function
+ only.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--noloopreverse
+\series default 
+\size large 
+\size default 
+Will not do loop reversal optimization.
+\layout Subsubsection
+
+Other Options
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-c\SpecialChar ~
+--compile-only
+\series default 
+ will compile and assemble the source, but will not call the linkage editor.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-E
+\series default 
+ Run only the C preprocessor.
+ Preprocess all the C source files specified and output the results to standard
+ output.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--stack-auto
+\series default 
+\size large 
+\emph on 
+\size default 
+\emph default 
+All functions in the source file will be compiled as 
+\emph on 
+reentrant
+\emph default 
+, i.e.
+ the parameters and local variables will be allocated on the stack.
+ see section Parameters and Local Variables for more details.
+ If this option is used all source files in the project should be compiled
+ with this option.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--xstack
+\series default 
+ Uses a pseudo stack in the first 256 bytes in the external ram for allocating
+ variables and passing parameters.
+ See section on external stack for more details.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--callee-saves function1[,function2][,function3]....
+
+\series default 
+ The compiler by default uses a caller saves convention for register saving
+ across function calls, however this can cause unneccessary register pushing
+ & popping when calling small functions from larger functions.
+ This option can be used to switch the register saving convention for the
+ function names specified.
+ The compiler will not save registers when calling these functions, no extra
+ code will be generated at the entry & exit for these functions to save
+ & restore the registers used by these functions, this can SUBSTANTIALLY
+ reduce code & improve run time performance of the generated code.
+ In the future the compiler (with interprocedural analysis) will be able
+ to determine the appropriate scheme to use for each function call.
+ DO NOT use this option for built-in functions such as _muluint..., if this
+ option is used for a library function the appropriate library function
+ needs to be recompiled with the same option.
+ If the project consists of multiple source files then all the source file
+ should be compiled with the same --callee-saves option string.
+ Also see #pragma\SpecialChar ~
+CALLEE-SAVES.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--debug
+\bar under 
+\series default 
+\bar default 
+When this option is used the compiler will generate debug information, that
+ can be used with the SDCDB.
+ The debug information is collected in a file with .cdb extension.
+ For more information see documentation for SDCDB.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+\emph on 
+--regextend
+\bar under 
+\series default 
+\bar default 
+ This option is obsolete and isn't supported anymore.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+\emph on 
+--noregparms
+\series default 
+ This option is obsolete and isn't supported anymore.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--peep-file
+\series default 
+<filename> This option can be used to use additional rules to be used by
+ the peep hole optimizer.
+ See section Peep Hole optimizations for details on how to write these rules.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-S
+\size large 
+\bar under 
+\series default 
+\size default 
+\bar default 
+Stop after the stage of compilation proper; do not assemble.
+ The output is an assembler code file for the input file specified.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-Wa_asmOption[,asmOption]
+\series default 
+...
+ Pass the asmOption to the assembler.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-Wl_linkOption[,linkOption]
+\series default 
+...
+ Pass the linkOption to the linker.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--int-long-reent
+\series default 
+\size large 
+\size default 
+ Integer (16 bit) and long (32 bit) libraries have been compiled as reentrant.
+ Note by default these libraries are compiled as non-reentrant.
+ See section Installation for more details.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--cyclomatic
+\bar under 
+\series default 
+\bar default 
+This option will cause the compiler to generate an information message for
+ each function in the source file.
+ The message contains some 
+\emph on 
+important
+\emph default 
+ information about the function.
+ The number of edges and nodes the compiler detected in the control flow
+ graph of the function, and most importantly the 
+\emph on 
+cyclomatic complexity
+\emph default 
+ see section on Cyclomatic Complexity for more details.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--float-reent
+\bar under 
+\series default 
+\bar default 
+ Floating point library is compiled as reentrant.See section Installation
+ for more details.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--nooverlay
+\series default 
+  The compiler will not overlay parameters and local variables of any function,
+ see section Parameters and local variables for more details.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--main-return
+\series default 
+ This option can be used when the code generated is called by a monitor
+ program.
+ The compiler will generate a 'ret' upon return from the 'main' function.
+ The default option is to lock up i.e.
+ generate a 'ljmp '.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--no-peep
+\series default 
+  Disable peep-hole optimization.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--peep-asm
+\series default 
+  Pass the inline assembler code through the peep hole optimizer.
+ This can cause unexpected changes to inline assembler code, please go through
+ the peephole optimizer rules defined in the source file tree '<target>/peeph.def
+' before using this option.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--iram-size
+\series default 
+<Value> Causes the linker to check if the interal ram usage is within limits
+ of the given value.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--nostdincl
+\series default 
+ This will prevent the compiler from passing on the default include path
+ to the preprocessor.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--nostdlib
+\series default 
+ This will prevent the compiler from passing on the default library path
+ to the linker.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--verbose
+\series default 
+ Shows the various actions the compiler is performing.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+-V
+\series default 
+ Shows the actual commands the compiler is executing.
+\layout Subsubsection
+
+Intermediate Dump Options
+\layout Standard
+
+The following options are provided for the purpose of retargetting and debugging
+ the compiler.
+ These provided a means to dump the intermediate code (iCode) generated
+ by the compiler in human readable form at various stages of the compilation
+ process.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--dumpraw
+\series default 
+ This option will cause the compiler to dump the intermediate code into
+ a file of named 
+\emph on 
+<source filename>.dumpraw
+\emph default 
+ just after the intermediate code has been generated for a function, i.e.
+ before any optimizations are done.
+ The basic blocks at this stage ordered in the depth first number, so they
+ may not be in sequence of execution.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--dumpgcse
+\series default 
+ Will create a dump of iCode's, after global subexpression elimination,
+ into a file named 
+\emph on 
+<source filename>.dumpgcse.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--dumpdeadcode
+\series default 
+ Will create a dump of iCode's, after deadcode elimination, into a file
+ named 
+\emph on 
+<source filename>.dumpdeadcode.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--dumploop
+\series default 
+\size large 
+\size default 
+Will create a dump of iCode's, after loop optimizations, into a file named
+\emph on 
+<source filename>.dumploop.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--dumprange
+\series default 
+\size large 
+\size default 
+Will create a dump of iCode's, after live range analysis, into a file named
+\emph on 
+<source filename>.dumprange.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--dumlrange
+\series default 
+ Will dump the life ranges for all symbols.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--dumpregassign
+\bar under 
+\series default 
+\bar default 
+Will create a dump of iCode's, after register assignment, into a file named
+\emph on 
+<source filename>.dumprassgn.
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--dumplrange
+\series default 
+ Will create a dump of the live ranges of iTemp's
+\layout List
+\labelwidthstring 00.00.0000
+
+
+\series bold 
+--dumpall
+\size large 
+\bar under 
+\series default 
+\size default 
+\bar default 
+Will cause all the above mentioned dumps to be created.
+\layout Subsection
+
+MCS51/DS390 Storage Class Language Extensions
+\layout Standard
+
+In addition to the ANSI storage classes SDCC allows the following MCS51
+ specific storage classes.
+\layout Subsubsection
+
+xdata
+\layout Standard
+
+Variables declared with this storage class will be placed in the extern
+ RAM.
+ This is the 
+\series bold 
+default
+\series default 
+ storage class for Large Memory model, e.g.:
+\newline 
+
+\newline 
+
+\family typewriter 
+xdata unsigned char xduc;
+\layout Subsubsection
+
+data
+\layout Standard
+
+This is the 
+\series bold 
+default
+\series default 
+ storage class for Small Memory model.
+ Variables declared with this storage class will be allocated in the internal
+ RAM, e.g.:
+\newline 
+
+\newline 
+
+\family typewriter 
+data int iramdata;
+\layout Subsubsection
+
+idata
+\layout Standard
+
+Variables declared with this storage class will be allocated into the indirectly
+ addressable portion of the internal ram of a 8051, e.g.:
+\newline 
+
+\newline 
+
+\family typewriter 
+idata int idi;
+\layout Subsubsection
+
+bit
+\layout Standard
+
+This is a data-type and a storage class specifier.
+ When a variable is declared as a bit, it is allocated into the bit addressable
+ memory of 8051, e.g.:
+\newline 
+
+\newline 
+
+\family typewriter 
+bit iFlag;
+\layout Subsubsection
+
+sfr / sbit
+\layout Standard
+
+Like the bit keyword, 
+\emph on 
+sfr / sbit 
+\emph default 
+signifies both a data-type and storage class, they are used to describe
+ the special function registers and special bit variables of a 8051, eg:
+\newline 
+
+\newline 
+
+\family typewriter 
+sfr at 0x80 P0; /* special function register P0 at location 0x80 */
+\newline 
+sbit at 0xd7 CY; /* CY (Carry Flag) */
+\layout Subsection
+
+Pointers
+\layout Standard
+
+SDCC allows (via language extensions) pointers to explicitly point to any
+ of the memory spaces of the 8051.
+ In addition to the explicit pointers, the compiler also allows a 
+\emph on 
+_generic
+\emph default 
+ class of pointers which can be used to point to any of the memory spaces.
+\newline 
+
+\newline 
+Pointer declaration examples:
+\newline 
+
+\size small 
+
+\newline 
+
+\family typewriter 
+\size default 
+/* pointer physically in xternal ram pointing to object in internal ram
+ */ 
+\newline 
+data unsigned char * xdata p;
+\newline 
+
+\newline 
+/* pointer physically in code rom pointing to data in xdata space */ 
+\newline 
+xdata unsigned char * code p;
+\newline 
+
+\newline 
+/* pointer physically in code space pointing to data in code space */ 
+\newline 
+code unsigned char * code p;
+\newline 
+
+\newline 
+/* the folowing is a generic pointer physically located in xdata space */
+\newline 
+char * xdata p;
+\family default 
+\size small 
+
+\newline 
+
+\newline 
+
+\size default 
+Well you get the idea.
+\newline 
+
+\newline 
+
+\emph on 
+For compatibility with the previous version of the compiler, the following
+ syntax for pointer declaration is still supported but will disappear int
+ the near future.
+\newline 
+
+\newline 
+
+\family typewriter 
+unsigned char _xdata *ucxdp; /* pointer to data in external ram */ 
+\newline 
+unsigned char _data \SpecialChar ~
+*ucdp ; /* pointer to data in internal ram */ 
+\newline 
+unsigned char _code \SpecialChar ~
+*uccp ; /* pointer to data in R/O code space */
+\newline 
+unsigned char _idata *uccp; \SpecialChar ~
+/* pointer to upper 128 bytes of ram */
+\family default 
+\size small 
+\emph default 
+
+\newline 
+
+\newline 
+
+\size default 
+All unqualified pointers are treated as 3-byte (4-byte for the ds390) 
+\emph on 
+generic
+\emph default 
+ pointers.
+ These type of pointers can also to be explicitly declared.
+\newline 
+
+\newline 
+
+\family typewriter 
+unsigned char _generic *ucgp;
+\family default 
+\size small 
+
+\newline 
+
+\newline 
+
+\size default 
+The highest order byte of the 
+\emph on 
+generic
+\emph default 
+ pointers contains the data space information.
+ Assembler support routines are called whenever data is stored or retrieved
+ using 
+\emph on 
+generic
+\emph default 
+ pointers.
+ These are useful for developing reusable library routines.
+ Explicitly specifying the pointer type will generate the most efficient
+ code.
+ Pointers declared using a mixture of OLD and NEW style could have unpredictable
+ results.
+\layout Subsection
+
+Parameters & Local Variables
+\layout Standard
+
+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).
+ This in fact makes them 
+\emph on 
+static
+\emph default 
+ so by default functions are non-reentrant.
+\layout Standard
+
+They can be placed on the stack either by using the
+\emph on 
+ --stack-auto
+\emph default 
+ compiler option or by using the 
+\emph on 
+reentrant
+\emph default 
+ keyword in the function declaration, e.g.:
+\newline 
+
+\size small 
+
+\newline 
+
+\family typewriter 
+\size default 
+unsigned char foo(char i) reentrant 
+\newline 
+{ 
+\newline 
+...
+\newline 
+}
+\newline 
+
+\family default 
+
+\newline 
+Since stack space on 8051 is limited, the 
+\emph on 
+reentrant 
+\emph default 
+keyword or the
+\emph on 
+ --stack-auto
+\emph default 
+ option should be used sparingly.
+ Note that the reentrant keyword just means that the parameters & local
+ variables will be allocated to the stack, it 
+\emph on 
+does not
+\emph default 
+ mean that the function is register bank independent.
+\newline 
+
+\newline 
+Local variables can be assigned storage classes and absolute addresses,
+ e.g.: 
+\newline 
+
+\newline 
+
+\family typewriter 
+unsigned char foo() {
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+xdata unsigned char i;
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+bit bvar;
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+data at 0x31 unsiged char j;
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+...
+\newline 
+}
+\newline 
+
+\newline 
+
+\family default 
+In the above example the variable 
+\emph on 
+i
+\emph default 
+ will be allocated in the external ram, 
+\emph on 
+bvar
+\emph default 
+ in bit addressable space and
+\emph on 
+ j
+\emph default 
+ in internal ram.
+ When compiled with 
+\emph on 
+--stack-auto
+\emph default 
+ or when a function is declared as 
+\emph on 
+reentrant
+\emph default 
+ this can only be done for static variables.
+\layout Standard
+
+Parameters however are not allowed any storage class, (storage classes for
+ parameters will be ignored), their allocation is governed by the memory
+ model in use, and the reentrancy options.
+\layout Subsection
+
+Overlaying
+\layout Standard
+
+For non-reentrant functions SDCC will try to reduce internal ram space usage
+ by overlaying parameters and local variables of a function (if possible).
+ Parameters and local variables of a function will be allocated to an overlayabl
+e segment if the function has 
+\emph on 
+no other function calls and the function is non-reentrant and the memory
+ model is small.
+
+\emph default 
+ If an explicit storage class is specified for a local variable, it will
+ NOT be overlayed.
+\layout Standard
+
+Note that the compiler (not the linkage editor) makes the decision for overlayin
+g the data items.
+ Functions that are called from an interrupt service routine should be preceded
+ by a #pragma\SpecialChar ~
+NOOVERLAY if they are not reentrant.
+\layout Standard
+
+Also note that the compiler does not do any processing of inline assembler
+ code, so the compiler might incorrectly assign local variables and parameters
+ of a function into the overlay segment if the inline assembler code calls
+ other c-functions that might use the overlay.
+ In that case the #pragma\SpecialChar ~
+NOOVERLAY should be used.
+\layout Standard
+
+Parameters and Local variables of functions that contain 16 or 32 bit multiplica
+tion or division will NOT be overlayed since these are implemented using
+ external functions, e.g.:
+\newline 
+
+\newline 
+
+\family typewriter 
+#pragma SAVE 
+\newline 
+#pragma NOOVERLAY 
+\newline 
+void set_error(unsigned char errcd) 
+\newline 
+{
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+P3 = errcd;
+\newline 
+} 
+\newline 
+#pragma RESTORE 
+\newline 
+
+\newline 
+void some_isr () interrupt 2 using 1 
+\newline 
+{
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+...
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+set_error(10);
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+...
+\newline 
+}
+\newline 
+
+\newline 
+
+\family default 
+In the above example the parameter 
+\emph on 
+errcd
+\emph default 
+ for the function 
+\emph on 
+set_error
+\emph default 
+ would be assigned to the overlayable segment if the #pragma\SpecialChar ~
+NOOVERLAY was
+ not present, this could cause unpredictable runtime behavior when called
+ from an ISR.
+ The #pragma\SpecialChar ~
+NOOVERLAY ensures that the parameters and local variables for
+ the function are NOT overlayed.
+\layout Subsection
+
+Interrupt Service Routines
+\layout Standard
+
+SDCC allows interrupt service routines to be coded in C, with some extended
+ keywords.
+\newline 
+
+\newline 
+
+\family typewriter 
+void timer_isr (void) interrupt 2 using 1 
+\newline 
+{ 
+\newline 
+..
+\newline 
+}
+\newline 
+
+\newline 
+
+\family default 
+The number following the 
+\emph on 
+interrupt
+\emph default 
+ keyword is the interrupt number this routine will service.
+ The compiler will insert a call to this routine in the interrupt vector
+ table for the interrupt number specified.
+ The 
+\emph on 
+using
+\emph default 
+ keyword is used to tell the compiler to use the specified register bank
+ (8051 specific) when generating code for this function.
+ Note that when some function is called from an interrupt service routine
+ it should be preceded by a #pragma\SpecialChar ~
+NOOVERLAY if it is not reentrant.
+ A special note here, int (16 bit) and long (32 bit) integer division, multiplic
+ation & modulus operations are implemented using external support routines
+ developed in ANSI-C, if an interrupt service routine needs to do any of
+ these operations then the support routines (as mentioned in a following
+ section) will have to be recompiled using the
+\emph on 
+ --stack-auto
+\emph default 
+ option and the source file will need to be compiled using the 
+\emph on 
+--int-long-ren
+\emph default 
+t compiler option.
+\layout Standard
+
+If you have multiple source files in your project, interrupt service routines
+ can be present in any of them, but a prototype of the isr MUST be present
+ or included in the file that contains the function 
+\emph on 
+main
+\emph default 
+.
+\layout Standard
+
+Interrupt Numbers and the corresponding address & descriptions for the Standard
+ 8051 are listed below.
+ SDCC will automatically adjust the interrupt vector table to the maximum
+ interrupt number specified.
+\newline 
+
+\layout Standard
+
+
+\begin_inset  Tabular
+<lyxtabular version="2" rows="6" columns="3">
+<features rotate="false" islongtable="false" endhead="0" endfirsthead="0" endfoot="0" endlastfoot="0">
+<column alignment="center" valignment="top" leftline="true" rightline="false" width="" special="">
+<column alignment="center" valignment="top" leftline="true" rightline="false" width="" special="">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="" special="">
+<row topline="true" bottomline="true" newpage="false">
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+Interrupt #
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+Description
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="true" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+Vector Address
+\end_inset 
+</cell>
+</row>
+<row topline="true" bottomline="false" newpage="false">
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+0
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+External 0
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="true" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+0x0003
+\end_inset 
+</cell>
+</row>
+<row topline="true" bottomline="false" newpage="false">
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+1
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+Timer 0
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="true" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+0x000B
+\end_inset 
+</cell>
+</row>
+<row topline="true" bottomline="false" newpage="false">
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+2
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+External 1
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="true" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+0x0013
+\end_inset 
+</cell>
+</row>
+<row topline="true" bottomline="false" newpage="false">
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+3
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+Timer 1
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="true" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+0x001B
+\end_inset 
+</cell>
+</row>
+<row topline="true" bottomline="true" newpage="false">
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+4
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="false" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+Serial
+\end_inset 
+</cell>
+<cell multicolumn="0" alignment="center" valignment="top" topline="true" bottomline="false" leftline="true" rightline="true" rotate="false" usebox="none" width="" special="">
+\begin_inset Text
+
+\layout Standard
+
+0x0023
+\end_inset 
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset 
+
+
+\newline 
+
+\newline 
+If the interrupt service routine is defined without 
+\emph on 
+using
+\emph default 
+ a register bank or with register bank 0 (using 0), the compiler will save
+ the registers used by itself on the stack upon entry and restore them at
+ exit, however if such an interrupt service routine calls another function
+ then the entire register bank will be saved on the stack.
+ This scheme may be advantageous for small interrupt service routines which
+ have low register usage.
+\layout Standard
+
+If the interrupt service routine is defined to be using a specific register
+ bank then only 
+\emph on 
+a, b & dptr
+\emph default 
+ are save and restored, if such an interrupt service routine calls another
+ function (using another register bank) then the entire register bank of
+ the called function will be saved on the stack.
+ This scheme is recommended for larger interrupt service routines.
+\layout Standard
+
+Calling other functions from an interrupt service routine is not recommended,
+ avoid it if possible.
+\newline 
+
+\newline 
+Also see the _naked modifier.
+\layout Subsection
+
+Critical Functions
+\layout Standard
+
+A special keyword may be associated with a function declaring it as 
+\emph on 
+critical
+\emph default 
+.
+ SDCC will generate code to disable all interrupts upon entry to a critical
+ function and enable them back before returning.
+ Note that nesting critical functions may cause unpredictable results.
+\newline 
+
+\size small 
+
+\newline 
+
+\family typewriter 
+\size default 
+int foo () critical 
+\newline 
+{ 
+\newline 
+...
+\newline 
+...
+\newline 
+}
+\newline 
+
+\family default 
+
+\newline 
+The critical attribute maybe used with other attributes like 
+\emph on 
+reentrant.
+\layout Subsection
+
+Naked Functions
+\layout Standard
+
+A special keyword may be associated with a function declaring it as 
+\emph on 
+_naked.
+\emph default 
+The 
+\emph on 
+_naked
+\emph default 
+ function modifier attribute prevents the compiler from generating prologue
+ and epilogue code for that function.
+ This means that the user is entirely responsible for such things as saving
+ any registers that may need to be preserved, selecting the proper register
+ bank, generating the 
+\emph on 
+return
+\emph default 
+ instruction at the end, etc.
+ Practically, this means that the contents of the function must be written
+ in inline assembler.
+ This is particularly useful for interrupt functions, which can have a large
+ (and often unnecessary) prologue/epilogue.
+ For example, compare the code generated by these two functions:
+\newline 
+
+\newline 
+
+\family typewriter 
+data unsigned char counter;
+\newline 
+void simpleInterrupt(void) interrupt 1
+\newline 
+{
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+counter++;
+\newline 
+}
+\newline 
+
+\newline 
+void nakedInterrupt(void) interrupt 2 _naked
+\newline 
+{
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+_asm
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+inc\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+_counter
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+reti\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+; MUST explicitly include ret in _naked function.
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+_endasm;
+\newline 
+}
+\family default 
+
+\newline 
+
+\newline 
+For an 8051 target, the generated simpleInterrupt looks like:
+\newline 
+
+\newline 
+
+\family typewriter 
+_simpleIterrupt:
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+push\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+acc
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+push\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+b
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+push\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+dpl
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+push\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+dph
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+push\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+psw
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+psw,#0x00
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+inc\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+_counter
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+pop\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+psw
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+pop\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+dph
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+pop\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+dpl
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+pop\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+b
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+pop\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+acc
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+reti
+\family default 
+
+\newline 
+
+\newline 
+whereas nakedInterrupt looks like:
+\newline 
+
+\newline 
+
+\family typewriter 
+_nakedInterrupt:
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+inc\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+_counter
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+reti\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+; MUST explicitly include ret(i) in _naked function.
+\family default 
+
+\newline 
+
+\newline 
+While there is nothing preventing you from writing C code inside a _naked
+ function, there are many ways to shoot yourself in the foot doing this,
+ and is is recommended that you stick to inline assembler.
+\layout Subsection
+
+Functions using private banks
+\layout Standard
+
+The 
+\emph on 
+using
+\emph default 
+ attribute (which tells the compiler to use a register bank other than the
+ default bank zero) should only be applied to 
+\emph on 
+interrupt
+\emph default 
+ functions (see note 1 below).
+ This will in most circumstances make the generated ISR code more efficient
+ since it will not have to save registers on the stack.
+\layout Standard
+
+The 
+\emph on 
+using
+\emph default 
+ attribute will have no effect on the generated code for a 
+\emph on 
+non-interrupt
+\emph default 
+ function (but may occasionally be useful anyway
+\begin_float footnote 
+\layout Standard
+
+possible exception: if a function is called ONLY from 'interrupt' functions
+ using a particular bank, it can be declared with the same 'using' attribute
+ as the calling 'interrupt' functions.
+ For instance, if you have several ISRs using bank one, and all of them
+ call memcpy(), it might make sense to create a specialized version of memcpy()
+ 'using 1', since this would prevent the ISR from having to save bank zero
+ to the stack on entry and switch to bank zero before calling the function
+\end_float 
+).
+\newline 
+
+\emph on 
+(pending: I don't think this has been done yet)
+\layout Standard
+
+An 
+\emph on 
+interrupt
+\emph default 
+ function using a non-zero bank will assume that it can trash that register
+ bank, and will not save it.
+ Since high-priority interrupts can interrupt low-priority ones on the 8051
+ and friends, this means that if a high-priority ISR 
+\emph on 
+using
+\emph default 
+ a particular bank occurs while processing a low-priority ISR 
+\emph on 
+using
+\emph default 
+ the same bank, terrible and bad things can happen.
+ To prevent this, no single register bank should be 
+\emph on 
+used
+\emph default 
+ by both a high priority and a low priority ISR.
+ This is probably most easily done by having all high priority ISRs use
+ one bank and all low priority ISRs use another.
+ If you have an ISR which can change priority at runtime, you're on your
+ own: I suggest using the default bank zero and taking the small performance
+ hit.
+\layout Standard
+
+It is most efficient if your ISR calls no other functions.
+ If your ISR must call other functions, it is most efficient if those functions
+ use the same bank as the ISR (see note 1 below); the next best is if the
+ called functions use bank zero.
+ It is very inefficient to call a function using a different, non-zero bank
+ from an ISR.
+\layout Subsection
+
+Absolute Addressing
+\layout Standard
+
+Data items can be assigned an absolute address with the 
+\emph on 
+at <address>
+\emph default 
+ keyword, in addition to a storage class, e.g.:
+\newline 
+
+\newline 
+
+\family typewriter 
+xdata at 0x8000 unsigned char PORTA_8255 ;
+\newline 
+
+\family default 
+
+\newline 
+In the above example the PORTA_8255 will be allocated to the location 0x8000
+ of the external ram.
+ Note that this feature is provided to give the programmer access to 
+\emph on 
+memory mapped
+\emph default 
+ devices attached to the controller.
+ The compiler does not actually reserve any space for variables declared
+ in this way (they are implemented with an equate in the assembler).
+ Thus it is left to the programmer to make sure there are no overlaps with
+ other variables that are declared without the absolute address.
+ The assembler listing file (.lst) and the linker output files (.rst) and
+ (.map) are a good places to look for such overlaps.
+\newline 
+
+\newline 
+Absolute address can be specified for variables in all storage classes,
+ e.g.:
+\newline 
+
+\newline 
+
+\family typewriter 
+bit at 0x02 bvar;
+\newline 
+
+\newline 
+
+\family default 
+The above example will allocate the variable at offset 0x02 in the bit-addressab
+le space.
+ There is no real advantage to assigning absolute addresses to variables
+ in this manner, unless you want strict control over all the variables allocated.
+\layout Subsection
+
+Startup Code
+\layout Standard
+
+The compiler inserts a call to the C routine 
+\emph on 
+_sdcc__external__startup()
+\series bold 
+\emph default 
+\series default 
+at the start of the CODE area.
+ This routine is in the runtime library.
+ By default this routine returns 0, if this routine returns a non-zero value,
+ the static & global variable initialization will be skipped and the function
+ main will be invoked Other wise static & global variables will be initialized
+ before the function main is invoked.
+ You could add a 
+\emph on 
+_sdcc__external__startup()
+\emph default 
+ routine to your program to override the default if you need to setup hardware
+ or perform some other critical operation prior to static & global variable
+ initialization.
+\layout Subsection
+
+Inline Assembler Code
+\layout Standard
+
+SDCC allows the use of in-line assembler with a few restriction as regards
+ labels.
+ All labels defined within inline assembler code 
+\emph on 
+has to be
+\emph default 
+ of the form 
+\emph on 
+nnnnn$
+\emph default 
+ where nnnn is a number less than 100 (which implies a limit of utmost 100
+ inline assembler labels 
+\emph on 
+per function
+\emph default 
+\noun on 
+)
+\noun default 
+.
+ It is strongly recommended that each assembly instruction (including labels)
+ be placed in a separate line (as the example shows).
+ When the 
+\emph on 
+--peep-asm
+\emph default 
+ command line option is used, the inline assembler code will be passed through
+ the peephole optimizer.
+ This might cause some unexpected changes in the inline assembler code.
+ Please go throught the peephole optimizer rules defined in file 
+\emph on 
+SDCCpeeph.def
+\emph default 
+ carefully before using this option.
+\newline 
+
+\newline 
+
+\family typewriter 
+_asm 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+b,#10 
+\newline 
+00001$: 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+djnz\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+b,00001$ 
+\newline 
+_endasm ;
+\family default 
+\size small 
+
+\newline 
+
+\newline 
+
+\size default 
+The inline assembler code can contain any valid code understood by the assembler
+, this includes any assembler directives and comment lines.
+ The compiler does not do any validation of the code within the 
+\family typewriter 
+_asm ...
+ _endasm;
+\family default 
+ keyword pair.
+\newline 
+
+\newline 
+Inline assembler code cannot reference any C-Labels, however it can reference
+ labels defined by the inline assembler, e.g.:
+\newline 
+
+\newline 
+
+\family typewriter 
+foo() { 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+/* some c code */ 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+_asm 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+; some assembler code 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ljmp $0003 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+_endasm; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+/* some more c code */ 
+\newline 
+clabel:\SpecialChar ~
+\SpecialChar ~
+/* inline assembler cannot reference this label */ 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+_asm
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+$0003: ;label (can be reference by inline assembler only) 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+_endasm ; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+/* some more c code */
+\newline 
+}
+\newline 
+
+\newline 
+
+\family default 
+In other words inline assembly code can access labels defined in inline
+ assembly within the scope of the funtion.
+\layout Standard
+
+The same goes the other way, ie.
+ labels defines in inline assembly CANNOT be accessed by C statements.
+\layout Subsection
+
+int(16 bit) and long (32 bit) Support
+\layout Standard
+
+For signed & unsigned int (16 bit) and long (32 bit) variables, division,
+ multiplication and modulus operations are implemented by support routines.
+ These support routines are all developed in ANSI-C to facilitate porting
+ to other MCUs, although some model specific assembler optimations are used.
+ The following files contain the described routine, all of them can be found
+ in <installdir>/share/sdcc/lib.
+\newline 
+
+\newline 
+
+\emph on 
+<pending: tabularise this>
+\emph default 
+
+\newline 
+
+\newline 
+_mulsint.c - signed 16 bit multiplication (calls _muluint)
+\newline 
+_muluint.c - unsigned 16 bit multiplication
+\newline 
+_divsint.c - signed 16 bit division (calls _divuint)
+\newline 
+_divuint.c - unsigned 16 bit division
+\newline 
+_modsint.c - signed 16 bit modulus (call _moduint)
+\newline 
+_moduint.c - unsigned 16 bit modulus
+\newline 
+_mulslong.c - signed 32 bit multiplication (calls _mululong)
+\newline 
+_mululong.c - unsigned32 bit multiplication
+\newline 
+_divslong.c - signed 32 division (calls _divulong)
+\newline 
+_divulong.c - unsigned 32 division
+\newline 
+_modslong.c - signed 32 bit modulus (calls _modulong)
+\newline 
+_modulong.c - unsigned 32 bit modulus 
+\size footnotesize 
+
+\newline 
+
+\newline 
+
+\size default 
+Since they are compiled as 
+\emph on 
+non-reentrant
+\emph default 
+, interrupt service routines should not do any of the above operations.
+ If this is unavoidable then the above routines will need to be compiled
+ with the 
+\emph on 
+--stack-auto
+\emph default 
+ option, after which the source program will have to be compiled with 
+\emph on 
+--int-long-rent
+\emph default 
+ option.
+\layout Subsection
+
+Floating Point Support
+\layout Standard
+
+SDCC supports IEEE (single precision 4bytes) floating point numbers.The floating
+ point support routines are derived from gcc's floatlib.c and consists of
+ the following routines:
+\newline 
+
+\newline 
+
+\emph on 
+<pending: tabularise this>
+\emph default 
+
+\newline 
+
+\newline 
+_fsadd.c - add floating point numbers
+\newline 
+_fssub.c - subtract floating point numbers
+\newline 
+_fsdiv.c - divide floating point numbers
+\newline 
+_fsmul.c - multiply floating point numbers
+\newline 
+_fs2uchar.c - convert floating point to unsigned char
+\newline 
+_fs2char.c - convert floating point to signed char
+\newline 
+_fs2uint.c - convert floating point to unsigned int
+\newline 
+_fs2int.c - convert floating point to signed int
+\newline 
+_fs2ulong.c - convert floating point to unsigned long
+\newline 
+_fs2long.c - convert floating point to signed long
+\newline 
+_uchar2fs.c - convert unsigned char to floating point
+\newline 
+_char2fs.c - convert char to floating point number
+\newline 
+_uint2fs.c - convert unsigned int to floating point
+\newline 
+_int2fs.c - convert int to floating point numbers
+\newline 
+_ulong2fs.c - convert unsigned long to floating point number
+\newline 
+_long2fs.c - convert long to floating point number
+\size footnotesize 
+
+\newline 
+
+\newline 
+
+\size default 
+Note if all these routines are used simultaneously the data space might
+ overflow.
+ For serious floating point usage it is strongly recommended that the large
+ model be used.
+\layout Subsection
+
+MCS51 Memory Models
+\layout Standard
+
+SDCC allows two memory models for MCS51 code, small and large.
+ Modules compiled with different memory models should 
+\emph on 
+never
+\emph default 
+ be combined together or the results would be unpredictable.
+ The library routines supplied with the compiler are compiled as both small
+ and large.
+ The compiled library modules are contained in seperate directories as small
+ and large so that you can link to either set.
+\layout Standard
+
+When the large model is used all variables declared without a storage class
+ will be allocated into the external ram, this includes all parameters and
+ local variables (for non-reentrant functions).
+ When the small model is used variables without storage class are allocated
+ in the internal ram.
+\layout Standard
+
+Judicious usage of the processor specific storage classes and the 'reentrant'
+ function type will yield much more efficient code, than using the large
+ model.
+ Several optimizations are disabled when the program is compiled using the
+ large model, it is therefore strongly recommdended that the small model
+ be used unless absolutely required.
+\layout Subsection
+
+DS390 Memory Models
+\layout Standard
+
+The only model supported is Flat 24.
+ This generates code for the 24 bit contiguous addressing mode of the Dallas
+ DS80C390 part.
+ In this mode, up to four meg of external RAM or code space can be directly
+ addressed.
+ See the data sheets at www.dalsemi.com for further information on this part.
+\newline 
+
+\newline 
+In older versions of the compiler, this option was used with the MCS51 code
+ generator (
+\emph on 
+-mmcs51
+\emph default 
+).
+ Now, however, the '390 has it's own code generator, selected by the 
+\emph on 
+-mds390
+\emph default 
+ switch.
+\newline 
+
+\newline 
+Note that the compiler does not generate any code to place the processor
+ into 24 bitmode (although 
+\emph on 
+tinibios
+\emph default 
+ in the ds390 libraries will do that for you).
+ If you don't use 
+\emph on 
+tinibios
+\emph default 
+, the boot loader or similar code must ensure that the processor is in 24
+ bit contiguous addressing mode before calling the SDCC startup code.
+\newline 
+
+\newline 
+Like the 
+\emph on 
+--model-large
+\emph default 
+ option, variables will by default be placed into the XDATA segment.
+\newline 
+
+\newline 
+Segments may be placed anywhere in the 4 meg address space using the usual
+ --*-loc options.
+ Note that if any segments are located above 64K, the -r flag must be passed
+ to the linker to generate the proper segment relocations, and the Intel
+ HEX output format must be used.
+ The -r flag can be passed to the linker by using the option 
+\emph on 
+-Wl-r
+\emph default 
+ on the sdcc command line.
+ However, currently the linker can not handle code segments > 64k.
+\layout Subsection
+
+Defines Created by the Compiler
+\layout Standard
+
+The compiler creates the following #defines.
+\layout Itemize
+
+SDCC - this Symbol is always defined.
+\layout Itemize
+
+SDCC_mcs51 or SDCC_ds390 or SDCC_z80, etc - depending on the model used
+ (e.g.: -mds390)
+\layout Itemize
+
+__mcs51 or __ds390 or __z80, etc - depending on the model used (e.g.
+ -mz80)
+\layout Itemize
+
+SDCC_STACK_AUTO - this symbol is defined when 
+\emph on 
+--stack-auto
+\emph default 
+ option is used.
+\layout Itemize
+
+SDCC_MODEL_SMALL - when 
+\emph on 
+--model-small
+\emph default 
+ is used.
+\layout Itemize
+
+SDCC_MODEL_LARGE - when 
+\emph on 
+--model-large
+\emph default 
+ is used.
+\layout Itemize
+
+SDCC_USE_XSTACK - when 
+\emph on 
+--xstack
+\emph default 
+ option is used.
+\layout Itemize
+
+SDCC_STACK_TENBIT - when 
+\emph on 
+-mds390
+\emph default 
+ is used
+\layout Itemize
+
+SDCC_MODEL_FLAT24 - when 
+\emph on 
+-mds390
+\emph default 
+ is used
+\layout Section
+
+SDCC Technical Data
+\layout Subsection
+
+Optimizations
+\layout Standard
+
+SDCC performs a host of standard optimizations in addition to some MCU specific
+ optimizations.
+\layout Subsubsection
+
+Sub-expression Elimination
+\layout Standard
+
+The compiler does local and global common subexpression elimination, e.g.:
+\newline 
+
+\newline 
+
+\family typewriter 
+i = x + y + 1; 
+\newline 
+j = x + y;
+\family default 
+
+\newline 
+
+\newline 
+will be translated to
+\newline 
+
+\newline 
+
+\family typewriter 
+iTemp = x + y 
+\newline 
+i = iTemp + 1 
+\newline 
+j = iTemp
+\newline 
+
+\family default 
+
+\newline 
+Some subexpressions are not as obvious as the above example, e.g.:
+\newline 
+
+\newline 
+
+\family typewriter 
+a->b[i].c = 10; 
+\newline 
+a->b[i].d = 11;
+\family default 
+
+\newline 
+
+\newline 
+In this case the address arithmetic a->b[i] will be computed only once;
+ the equivalent code in C would be.
+\newline 
+
+\newline 
+
+\family typewriter 
+iTemp = a->b[i]; 
+\newline 
+iTemp.c = 10; 
+\newline 
+iTemp.d = 11;
+\family default 
+
+\newline 
+
+\newline 
+The compiler will try to keep these temporary variables in registers.
+\layout Subsubsection
+
+Dead-Code Elimination
+\layout Standard
+
+
+\family typewriter 
+int global; 
+\newline 
+void f () { 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+int i; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+i = 1; \SpecialChar ~
+/* dead store */ 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+global = 1;\SpecialChar ~
+/* dead store */ 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+global = 2; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+return; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+global = 3;\SpecialChar ~
+/* unreachable */ 
+\newline 
+}
+\family default 
+
+\newline 
+
+\newline 
+will be changed to
+\newline 
+
+\newline 
+
+\family typewriter 
+int global; void f () 
+\newline 
+{
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+global = 2; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+return; 
+\newline 
+}
+\layout Subsubsection
+
+Copy-Propagation
+\layout Standard
+
+
+\family typewriter 
+int f() { 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+int i, j; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+i = 10; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+j = i; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+return j; 
+\newline 
+}
+\family default 
+
+\newline 
+
+\newline 
+will be changed to 
+\newline 
+
+\newline 
+
+\family typewriter 
+int f() { 
+\newline 
+\SpecialChar ~
+ \SpecialChar ~
+ int i,j; 
+\newline 
+\SpecialChar ~
+ \SpecialChar ~
+ i = 10; 
+\newline 
+\SpecialChar ~
+ \SpecialChar ~
+ j = 10; 
+\newline 
+\SpecialChar ~
+ \SpecialChar ~
+ return 10; 
+\newline 
+}
+\newline 
+
+\newline 
+
+\family default 
+Note: the dead stores created by this copy propagation will be eliminated
+ by dead-code elimination.
+\layout Subsubsection
+
+Loop Optimizations
+\layout Standard
+
+Two types of loop optimizations are done by SDCC loop invariant lifting
+ and strength reduction of loop induction variables.
+ In addition to the strength reduction the optimizer marks the induction
+ variables and the register allocator tries to keep the induction variables
+ in registers for the duration of the loop.
+ Because of this preference of the register allocator, loop induction optimizati
+on causes an increase in register pressure, which may cause unwanted spilling
+ of other temporary variables into the stack / data space.
+ The compiler will generate a warning message when it is forced to allocate
+ extra space either on the stack or data space.
+ If this extra space allocation is undesirable then induction optimization
+ can be eliminated either for the entire source file (with --noinduction
+ option) or for a given function only using #pragma\SpecialChar ~
+NOINDUCTION.
+\newline 
+
+\newline 
+Loop Invariant:
+\newline 
+
+\newline 
+
+\family typewriter 
+for (i = 0 ; i < 100 ; i ++) 
+\newline 
+ \SpecialChar ~
+ \SpecialChar ~
+f += k + l;
+\family default 
+
+\newline 
+
+\newline 
+changed to
+\newline 
+
+\newline 
+
+\family typewriter 
+itemp = k + l; 
+\newline 
+for (i = 0; i < 100; i++) 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+f += itemp;
+\family default 
+
+\newline 
+
+\newline 
+As mentioned previously some loop invariants are not as apparent, all static
+ address computations are also moved out of the loop.
+\newline 
+
+\newline 
+Strength Reduction, this optimization substitutes an expression by a cheaper
+ expression:
+\newline 
+
+\newline 
+
+\family typewriter 
+for (i=0;i < 100; i++)
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+ar[i*5] = i*3;
+\family default 
+
+\newline 
+
+\newline 
+changed to
+\newline 
+
+\newline 
+
+\family typewriter 
+itemp1 = 0; 
+\newline 
+itemp2 = 0; 
+\newline 
+for (i=0;i< 100;i++) { 
+\newline 
+ \SpecialChar ~
+ \SpecialChar ~
+ar[itemp1] = itemp2; 
+\newline 
+ \SpecialChar ~
+ \SpecialChar ~
+itemp1 += 5; 
+\newline 
+ \SpecialChar ~
+ \SpecialChar ~
+itemp2 += 3; 
+\newline 
+}
+\family default 
+
+\newline 
+
+\newline 
+The more expensive multiplication is changed to a less expensive addition.
+\layout Subsubsection
+
+Loop Reversing
+\layout Standard
+
+This optimization is done to reduce the overhead of checking loop boundaries
+ for every iteration.
+ Some simple loops can be reversed and implemented using a 
+\begin_inset Quotes eld
+\end_inset 
+
+decrement and jump if not zero
+\begin_inset Quotes erd
+\end_inset 
+
+ instruction.
+ SDCC checks for the following criterion to determine if a loop is reversible
+ (note: more sophisticated compilers use data-dependency analysis to make
+ this determination, SDCC uses a more simple minded analysis).
+\layout Itemize
+
+The 'for' loop is of the form 
+\newline 
+
+\newline 
+
+\family typewriter 
+for (<symbol> = <expression> ; <sym> [< | <=] <expression> ; [<sym>++ |
+ <sym> += 1])
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+<for body>
+\layout Itemize
+
+The <for body> does not contain 
+\begin_inset Quotes eld
+\end_inset 
+
+continue
+\begin_inset Quotes erd
+\end_inset 
+
+ or 'break
+\begin_inset Quotes erd
+\end_inset 
+
+.
+\layout Itemize
+
+All goto's are contained within the loop.
+\layout Itemize
+
+No function calls within the loop.
+\layout Itemize
+
+The loop control variable <sym> is not assigned any value within the loop
+\layout Itemize
+
+The loop control variable does NOT participate in any arithmetic operation
+ within the loop.
+\layout Itemize
+
+There are NO switch statements in the loop.
+\layout Standard
+
+Note djnz instruction can be used for 8-bit values 
+\emph on 
+only
+\emph default 
+, therefore it is advantageous to declare loop control symbols as 
+\emph on 
+char
+\emph default 
+.
+ Ofcourse this may not be possible on all situations.
+\layout Subsubsection
+
+Algebraic Simplifications
+\layout Standard
+
+SDCC does numerous algebraic simplifications, the following is a small sub-set
+ of these optimizations.
+\newline 
+
+\newline 
+
+\family typewriter 
+i = j + 0 ; /* changed to */ i = j; 
+\newline 
+i /= 2; /* changed to */ i >>= 1; 
+\newline 
+i = j - j ; /* changed to */ i = 0; 
+\newline 
+i = j / 1 ; /* changed to */ i = j;
+\family default 
+
+\newline 
+
+\newline 
+Note the subexpressions given above are generally introduced by macro expansions
+ or as a result of copy/constant propagation.
+\layout Subsubsection
+
+'switch' Statements
+\layout Standard
+
+SDCC changes switch statements to jump tables when the following conditions
+ are true.
+\layout Itemize
+
+The case labels are in numerical sequence, the labels need not be in order,
+ and the starting number need not be one or zero.
+\newline 
+
+\newline 
+
+\family typewriter 
+switch(i) {\SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+switch (i) { 
+\newline 
+case 4:...
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+case 1: ...
+\newline 
+case 5:...
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+case 2: ...
+\newline 
+case 3:...
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+case 3: ...
+\newline 
+case 6:...
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+case 4: ...
+\newline 
+}\SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+}
+\newline 
+
+\newline 
+
+\family default 
+Both the above switch statements will be implemented using a jump-table.
+\layout Itemize
+
+The number of case labels is at least three, since it takes two conditional
+ statements to handle the boundary conditions.
+\layout Itemize
+
+The number of case labels is less than 84, since each label takes 3 bytes
+ and a jump-table can be utmost 256 bytes long.
+\layout Standard
+
+Switch statements which have gaps in the numeric sequence or those that
+ have more that 84 case labels can be split into more than one switch statement
+ for efficient code generation, e.g.:
+\newline 
+
+\newline 
+
+\family typewriter 
+switch (i) { 
+\newline 
+case 1: ...
+\newline 
+case 2: ...
+\newline 
+case 3: ...
+\newline 
+case 4: ...
+\newline 
+case 9: ...
+\newline 
+case 10: ...
+\newline 
+case 11: ...
+\newline 
+case 12: ...
+\newline 
+}
+\family default 
+
+\newline 
+
+\newline 
+If the above switch statement is broken down into two switch statements
+\newline 
+
+\newline 
+
+\family typewriter 
+switch (i) { 
+\newline 
+case 1: ...
+\newline 
+case 2: ...
+\newline 
+case 3: ...
+\newline 
+case 4: ...
+\newline 
+}
+\newline 
+
+\newline 
+
+\family default 
+and
+\family typewriter 
+
+\newline 
+
+\newline 
+switch (i) { 
+\newline 
+case 9: \SpecialChar ~
+...
+\newline 
+case 10: ...
+\newline 
+case 11: ...
+\newline 
+case 12:\SpecialChar ~
+...
+\newline 
+}
+\newline 
+
+\newline 
+
+\family default 
+then both the switch statements will be implemented using jump-tables whereas
+ the unmodified switch statement will not be.
+\layout Subsubsection
+
+Bit-shifting Operations.
+\layout Standard
+
+Bit shifting is one of the most frequently used operation in embedded programmin
+g.
+ SDCC tries to implement bit-shift operations in the most efficient way
+ possible, e.g.:
+\newline 
+
+\family typewriter 
+
+\newline 
+unsigned char i;
+\newline 
+...
+\newline 
+i>>= 4; 
+\newline 
+...
+\newline 
+
+\family default 
+
+\newline 
+generates the following code:
+\newline 
+
+\family typewriter 
+
+\newline 
+mov a,_i 
+\newline 
+swap a 
+\newline 
+anl a,#0x0f 
+\newline 
+mov _i,a
+\family default 
+
+\newline 
+
+\newline 
+In general SDCC will never setup a loop if the shift count is known.
+ Another example:
+\newline 
+
+\newline 
+
+\family typewriter 
+unsigned int i; 
+\newline 
+...
+\newline 
+i >>= 9; 
+\newline 
+...
+\family default 
+
+\newline 
+
+\newline 
+will generate:
+\newline 
+
+\newline 
+
+\family typewriter 
+mov a,(_i + 1) 
+\newline 
+mov (_i + 1),#0x00 
+\newline 
+clr c 
+\newline 
+rrc a 
+\newline 
+mov _i,a
+\family default 
+
+\newline 
+
+\newline 
+Note that SDCC stores numbers in little-endian format (i.e.
+ lowest order first).
+\layout Subsubsection
+
+Bit-rotation
+\layout Standard
+
+A special case of the bit-shift operation is bit rotation, SDCC recognizes
+ the following expression to be a left bit-rotation:
+\newline 
+
+\newline 
+
+\family typewriter 
+unsigned char i; 
+\newline 
+...
+\newline 
+i = ((i << 1) | (i >> 7)); 
+\family default 
+
+\newline 
+...
+\newline 
+
+\newline 
+will generate the following code:
+\newline 
+
+\newline 
+
+\family typewriter 
+mov a,_i 
+\newline 
+rl a 
+\newline 
+mov _i,a
+\family default 
+
+\newline 
+
+\newline 
+SDCC uses pattern matching on the parse tree to determine this operation.Variatio
+ns of this case will also be recognized as bit-rotation, i.e.: 
+\newline 
+
+\newline 
+
+\family typewriter 
+i = ((i >> 7) | (i << 1)); /* left-bit rotation */
+\layout Subsubsection
+
+Highest Order Bit
+\layout Standard
+
+It is frequently required to obtain the highest order bit of an integral
+ type (long, int, short or char types).
+ SDCC recognizes the following expression to yield the highest order bit
+ and generates optimized code for it, e.g.:
+\newline 
+
+\newline 
+\family typewriter 
+unsigned int gint; 
+\newline 
+
+\newline 
+foo () { 
+\newline 
+unsigned char hob; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+...
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+hob = (gint >> 15) & 1; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+..
+\newline 
+}
+\family default 
+
+\newline 
+
+\newline 
+will generate the following code:
+\newline 
+
+\family typewriter 
+
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ 61 ;\SpecialChar ~
+ hob.c 7 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+ 000A E5*01\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ 62\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ mov\SpecialChar ~
+ a,(_gint + 1) 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+ 000C 33\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ 63\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ rlc\SpecialChar ~
+ a 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+ 000D E4\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ 64\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ clr\SpecialChar ~
+ a 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+ 000E 13\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ 65\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ rrc\SpecialChar ~
+ a 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+ 000F F5*02\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ 66\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ mov\SpecialChar ~
+ _foo_hob_1_1,a
+\newline 
+
+\newline 
+
+\family default 
+Variations of this case however will 
+\emph on 
+not
+\emph default 
+ be recognized.
+ It is a standard C expression, so I heartily recommend this be the only
+ way to get the highest order bit, (it is portable).
+ Of course it will be recognized even if it is embedded in other expressions,
+ e.g.:
+\newline 
+
+\newline 
+
+\family typewriter 
+xyz = gint + ((gint >> 15) & 1);
+\family default 
+
+\newline 
+
+\newline 
+will still be recognized.
+\layout Subsubsection
+
+Peep-hole Optimizer
+\layout Standard
+
+The compiler uses a rule based, pattern matching and re-writing mechanism
+ for peep-hole optimization.
+ It is inspired by 
+\emph on 
+copt
+\emph default 
+ a peep-hole optimizer by Christopher W.
+ Fraser (cwfraser@microsoft.com).
+ A default set of rules are compiled into the compiler, additional rules
+ may be added with the 
+\emph on 
+--peep-file <filename>
+\emph default 
+ option.
+ The rule language is best illustrated with examples.
+\newline 
+
+\newline 
+
+\family typewriter 
+replace { 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+mov %1,a 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+mov a,%1
+\newline 
+} by {
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+mov %1,a
+\newline 
+}
+\family default 
+
+\newline 
+
+\newline 
+The above rule will change the following assembly sequence:
+\newline 
+
+\newline 
+
+\family typewriter 
+\SpecialChar ~
+\SpecialChar ~
+mov r1,a 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+mov a,r1
+\family default 
+
+\newline 
+
+\newline 
+to
+\newline 
+
+\newline 
+
+\family typewriter 
+mov r1,a
+\family default 
+
+\newline 
+
+\newline 
+Note: All occurrences of a 
+\emph on 
+%n
+\emph default 
+ (pattern variable) must denote the same string.
+ With the above rule, the assembly sequence:
+\newline 
+
+\newline 
+
+\family typewriter 
+\SpecialChar ~
+\SpecialChar ~
+mov r1,a 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+mov a,r2
+\family default 
+
+\newline 
+
+\newline 
+will remain unmodified.
+\newline 
+
+\newline 
+Other special case optimizations may be added by the user (via 
+\emph on 
+--peep-file option
+\emph default 
+).
+ E.g.
+ some variants of the 8051 MCU allow only 
+\family typewriter 
+ajmp
+\family default 
+ and 
+\family typewriter 
+acall
+\family default 
+.
+ The following two rules will change all 
+\family typewriter 
+ljmp
+\family default 
+ and 
+\family typewriter 
+lcall
+\family default 
+ to 
+\family typewriter 
+ajmp
+\family default 
+ and 
+\family typewriter 
+acall
+\family default 
+
+\newline 
+
+\newline 
+
+\family typewriter 
+replace { lcall %1 } by { acall %1 } 
+\newline 
+replace { ljmp %1 } by { ajmp %1 }
+\family default 
+
+\newline 
+
+\newline 
+The 
+\emph on 
+inline-assembler code
+\emph default 
+ is also passed through the peep hole optimizer, thus the peephole optimizer
+ can also be used as an assembly level macro expander.
+ The rules themselves are MCU dependent whereas the rule language infra-structur
+e is MCU independent.
+ Peephole optimization rules for other MCU can be easily programmed using
+ the rule language.
+\newline 
+
+\newline 
+The syntax for a rule is as follows:
+\newline 
+
+\newline 
+
+\family typewriter 
+rule := replace [ restart ] '{' <assembly sequence> '
+\backslash 
+n' 
+\newline 
+\SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ '}' by '{' '
+\backslash 
+n' 
+\newline 
+\SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ <assembly sequence> '
+\backslash 
+n' 
+\newline 
+\SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ '}' [if <functionName> ] '
+\backslash 
+n' 
+\newline 
+
+\family default 
+
+\newline 
+<assembly sequence> := assembly instruction (each instruction including
+ labels must be on a separate line).
+\newline 
+
+\newline 
+The optimizer will apply to the rules one by one from the top in the sequence
+ of their appearance, it will terminate when all rules are exhausted.
+ If the 'restart' option is specified, then the optimizer will start matching
+ the rules again from the top, this option for a rule is expensive (performance)
+, it is intended to be used in situations where a transformation will trigger
+ the same rule again.
+ A good example of this the following rule:
+\newline 
+
+\newline 
+
+\family typewriter 
+replace restart { 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+pop %1 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+push %1 } by { 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+; nop 
+\newline 
+}
+\family default 
+
+\newline 
+
+\newline 
+Note that the replace pattern cannot be a blank, but can be a comment line.
+ Without the 'restart' option only the inner most 'pop' 'push' pair would
+ be eliminated, i.e.:
+\newline 
+
+\newline 
+
+\family typewriter 
+\SpecialChar ~
+\SpecialChar ~
+pop ar1 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+pop ar2 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+push ar2 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+push ar1
+\family default 
+
+\newline 
+
+\newline 
+would result in:
+\newline 
+
+\newline 
+
+\family typewriter 
+\SpecialChar ~
+\SpecialChar ~
+pop ar1 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+; nop 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+push ar1
+\family default 
+
+\newline 
+
+\newline 
+
+\emph on 
+with
+\emph default 
+ the restart option the rule will be applied again to the resulting code
+ and then all the pop-push pairs will be eliminated to yield:
+\newline 
+
+\newline 
+
+\family typewriter 
+\SpecialChar ~
+\SpecialChar ~
+; nop 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+; nop
+\family default 
+
+\newline 
+
+\newline 
+A conditional function can be attached to a rule.
+ Attaching rules are somewhat more involved, let me illustrate this with
+ an example.
+\newline 
+
+\newline 
+
+\family typewriter 
+replace { 
+\newline 
+\SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+ljmp %5 
+\newline 
+%2:
+\newline 
+} by { 
+\newline 
+\SpecialChar ~
+ \SpecialChar ~
+ \SpecialChar ~
+sjmp %5 
+\newline 
+%2:
+\newline 
+} if labelInRange
+\family default 
+
+\newline 
+
+\newline 
+The optimizer does a look-up of a function name table defined in function
+\emph on 
+callFuncByName
+\emph default 
+ in the source file SDCCpeeph.c, with the name 
+\emph on 
+labelInRange
+\emph default 
+.
+ If it finds a corresponding entry the function is called.
+ Note there can be no parameters specified for these functions, in this
+ case the use of 
+\emph on 
+%5
+\emph default 
+ is crucial, since the function 
+\emph on 
+labelInRange
+\emph default 
+ expects to find the label in that particular variable (the hash table containin
+g the variable bindings is passed as a parameter).
+ If you want to code more such functions, take a close look at the function
+ labelInRange and the calling mechanism in source file SDCCpeeph.c.
+ I know this whole thing is a little kludgey, but maybe some day we will
+ have some better means.
+ If you are looking at this file, you will also see the default rules that
+ are compiled into the compiler, you can add your own rules in the default
+ set there if you get tired of specifying the --peep-file option.
+\layout Subsection
+
+Pragmas
+\layout Standard
+
+SDCC supports the following #pragma directives.
+ This directives are applicable only at a function level.
+\layout Itemize
+
+SAVE - this will save all the current options.
+\layout Itemize
+
+RESTORE - will restore the saved options from the last save.
+ Note that SAVES & RESTOREs cannot be nested.
+ SDCC uses the same buffer to save the options each time a SAVE is called.
+\layout Itemize
+
+NOGCSE - will stop global subexpression elimination.
+\layout Itemize
+
+NOINDUCTION - will stop loop induction optimizations.
+\layout Itemize
+
+NOJTBOUND - will not generate code for boundary value checking, when switch
+ statements are turned into jump-tables.
+\layout Itemize
+
+NOOVERLAY - the compiler will not overlay the parameters and local variables
+ of a function.
+\layout Itemize
+
+NOLOOPREVERSE - Will not do loop reversal optimization
+\layout Itemize
+
+EXCLUDE NONE | {acc[,b[,dpl[,dph]]] - The exclude pragma disables generation
+ of pair of push/pop instruction in ISR function (using interrupt keyword).
+ The directive should be placed immediately before the ISR function definition
+ and it affects ALL ISR functions following it.
+ To enable the normal register saving for ISR functions use #pragma\SpecialChar ~
+EXCLUDE\SpecialChar ~
+none.
+\layout Itemize
+
+CALLEE-SAVES function1[,function2[,function3...]] - The compiler by default
+ uses a caller saves convention for register saving across function calls,
+ however this can cause unneccessary register pushing & popping when calling
+ small functions from larger functions.
+ This option can be used to switch the register saving convention for the
+ function names specified.
+ The compiler will not save registers when calling these functions, extra
+ code will be generated at the entry & exit for these functions to save
+ & restore the registers used by these functions, this can SUBSTANTIALLY
+ reduce code & improve run time performance of the generated code.
+ In future the compiler (with interprocedural analysis) will be able to
+ determine the appropriate scheme to use for each function call.
+ If --callee-saves command line option is used, the function names specified
+ in #pragma\SpecialChar ~
+CALLEE-SAVES is appended to the list of functions specified inthe
+ command line.
+\layout Standard
+
+The pragma's are intended to be used to turn-off certain optimizations which
+ might cause the compiler to generate extra stack / data space to store
+ compiler generated temporary variables.
+ This usually happens in large functions.
+ Pragma directives should be used as shown in the following example, they
+ are used to control options & optimizations for a given function; pragmas
+ should be placed before and/or after a function, placing pragma's inside
+ a function body could have unpredictable results.
+\newline 
+
+\newline 
+
+\family typewriter 
+#pragma SAVE /* save the current settings */ 
+\newline 
+#pragma NOGCSE /* turnoff global subexpression elimination */ 
+\newline 
+#pragma NOINDUCTION /* turn off induction optimizations */ 
+\newline 
+int foo () 
+\newline 
+{ 
+\newline 
+\SpecialChar ~
+ \SpecialChar ~
+ ...
+\newline 
+\SpecialChar ~
+ \SpecialChar ~
+ /* large code */ 
+\newline 
+\SpecialChar ~
+ \SpecialChar ~
+ ...
+\newline 
+} 
+\newline 
+#pragma RESTORE /* turn the optimizations back on */
+\family default 
+
+\newline 
+
+\newline 
+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
+ changing options for a function.
+\layout Subsection
+
+
+\emph on 
+<pending: this is messy and incomplete>
+\emph default 
+ Library Routines
+\layout Standard
+
+The following library routines are provided for your convenience.
+\layout Standard
+
+stdio.h - Contains the following functions printf & sprintf these routines
+ are developed by Martijn van Balen <balen@natlab.research.philips.com>.
+\layout Standard
+
+%[flags][width][b|B|l|L]type
+\layout Standard
+
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ flags: -\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ left justify output in specified field width 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ +\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ prefix output with +/- sign if output is signed type 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ space\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ prefix output with a blank if it's a signed positive value 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ width:\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ specifies minimum number of characters outputted for numbers 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ or strings.
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ - For numbers, spaces are added on the left when needed.
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ If width starts with a zero character, zeroes and used 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ instead of spaces.
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ - For strings, spaces are are added on the left or right (when 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ flag '-' is used) when needed.
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ b/B:\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ byte argument (used by d, u, o, x, X) 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ l/L:\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ long argument (used by d, u, o, x, X)
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ type:\SpecialChar ~
+ d\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ decimal number 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ u\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ unsigned decimal number 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ o\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ unsigned octal number 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ x\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ unsigned hexadecimal number (0-9, a-f) 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ X\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ unsigned hexadecimal number (0-9, A-F) 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ c\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ character 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ s\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ string (generic pointer) 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ p\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ generic pointer (I:data/idata, C:code, X:xdata, P:paged) 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ f\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ float (still to be implemented)
+\layout Standard
+
+Also contains a very simple version of printf (printf_small).
+ This simplified version of printf supports only the following formats.
+\layout Standard
+
+format\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+output\SpecialChar ~
+type\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+argument-type 
+\newline 
+%d \SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+decimal \SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ short/int 
+\newline 
+%ld\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+decimal\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+long 
+\newline 
+%hd\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+decimal\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+char 
+\newline 
+%x\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+hexadecimal\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+short/int 
+\newline 
+%lx\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+hexadecimal\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+long 
+\newline 
+%hx\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+hexadecimal\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+char 
+\newline 
+%o\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+octal\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+short/int 
+\newline 
+%lo\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+octal\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+long 
+\newline 
+%ho\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+octal\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+char 
+\newline 
+%c\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+character\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+char 
+\newline 
+%s\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+character\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+_generic pointer
+\layout Standard
+
+The routine is very stack intesive, --stack-after-data parameter should
+ be used when using this routine, the routine also takes about 1K of code
+ space.
+ It also expects an external function named putchar(char) to be present
+ (this can be changed).
+ When using the %s format the string / pointer should be cast to a generic
+ pointer.
+ eg.
+\layout Standard
+
+printf_small(
+\begin_inset Quotes eld
+\end_inset 
+
+my str %s, my int %d
+\backslash 
+n
+\begin_inset Quotes erd
+\end_inset 
+
+,(char _generic *)mystr,myint);
+\layout Itemize
+
+stdarg.h - contains definition for the following macros to be used for variable
+ parameter list, note that a function can have a variable parameter list
+ if and only if it is 'reentrant'
+\begin_deeper 
+\layout Standard
+
+va_list, va_start, va_arg, va_end.
+\end_deeper 
+\layout Itemize
+
+setjmp.h - contains defintion for ANSI setjmp & longjmp routines.
+ Note in this case setjmp & longjmp can be used between functions executing
+ within the same register bank, if long jmp is executed from a function
+ that is using a different register bank from the function issuing the setjmp
+ function, the results may be unpredictable.
+ The jump buffer requires 3 bytes of data (the stack pointer & a 16 byte
+ return address), and can be placed in any address space.
+\layout Itemize
+
+stdlib.h - contains the following functions.
+\begin_deeper 
+\layout Standard
+
+atoi, atol.
+\end_deeper 
+\layout Itemize
+
+string.h - contains the following functions.
+\begin_deeper 
+\layout Standard
+
+strcpy, strncpy, strcat, strncat, strcmp, strncmp, strchr, strrchr, strspn,
+ strcspn, strpbrk, strstr, strlen, strtok, memcpy, memcmp, memset.
+\end_deeper 
+\layout Itemize
+
+ctype.h - contains the following routines.
+\begin_deeper 
+\layout Standard
+
+iscntrl, isdigit, isgraph, islower, isupper, isprint, ispunct, isspace,
+ isxdigit, isalnum, isalpha.
+\end_deeper 
+\layout Itemize
+
+malloc.h - The malloc routines are developed by Dmitry S.
+ Obukhov (dso@usa.net).
+ These routines will allocate memory from the external ram.
+ Here is a description on how to use them (as described by the author).
+\begin_deeper 
+\layout Standard
+
+//Example: 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ #define DYNAMIC_MEMORY_SIZE 0x2000 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ .....
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ unsigned char xdata dynamic_memory_pool[DYNAMIC_MEMORY_SIZE]; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ unsigned char xdata * current_buffer; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ .....
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ void main(void) 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ { 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ ...
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+//\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ init_dynamic_memory(dynamic_memory_pool,DYNAMIC_MEMORY_SIZE); 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //Now it's possible to use malloc.
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ ...
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ current_buffer = malloc(0x100); 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ //
+\end_deeper 
+\layout Itemize
+
+serial.h - Serial IO routines are also developed by Dmitry S.
+ Obukhov (dso@usa.net).
+ These routines are interrupt driven with a 256 byte circular buffer, they
+ also expect external ram to be present.
+ Please see documentation in file SDCCDIR/sdcc51lib/serial.c.
+ Note the header file 
+\begin_inset Quotes eld
+\end_inset 
+
+serial.h
+\begin_inset Quotes erd
+\end_inset 
+
+ MUST be included in the file containing the 'main' function.
+\layout Itemize
+
+ser.h - Alternate serial routine provided by Wolfgang Esslinger <wolfgang@WiredMi
+nds.com> these routines are more compact and faster.
+ Please see documentation in file SDCCDIR/sdcc51lib/ser.c
+\layout Itemize
+
+ser_ir.h - Another alternate set of serial routines provided by Josef Wolf
+ <jw@raven.inka.de>, these routines do not use the external ram.
+\layout Itemize
+
+reg51.h - contains register definitions for a standard 8051
+\layout Itemize
+
+float.h - contains min, max and other floating point related stuff.
+\layout Standard
+
+All library routines are compiled as --model-small, they are all non-reentrant,
+ if you plan to use the large model or want to make these routines reentrant,
+ then they will have to be recompiled with the appropriate compiler option.
+\layout Standard
+
+Have not had time to do the more involved routines like printf, will get
+ to them shortly.
+\layout Subsection
+
+Interfacing with Assembly Routines
+\layout Subsubsection
+
+Global Registers used for Parameter Passing
+\layout Standard
+
+The compiler always uses the global registers 
+\emph on 
+DPL,DPH,B 
+\emph default 
+and
+\emph on 
+ ACC
+\emph default 
+ to pass the first parameter to a routine.
+ The second parameter onwards is either allocated on the stack (for reentrant
+ routines or if --stack-auto is used) or in the internal / external ram
+ (depending on the memory model).
+\layout Subsubsection
+
+Assembler Routine(non-reentrant)
+\layout Standard
+
+In the following example the function cfunc calls an assembler routine asm_func,
+ which takes two parameters.
+\newline 
+
+\newline 
+
+\family typewriter 
+extern int asm_func(unsigned char, unsigned char);
+\newline 
+
+\newline 
+int c_func (unsigned char i, unsigned char j)
+\newline 
+{
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+return asm_func(i,j);
+\newline 
+}
+\newline 
+
+\newline 
+int main()
+\newline 
+{
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+return c_func(10,9);
+\newline 
+}
+\newline 
+
+\newline 
+
+\family default 
+The corresponding assembler function is:
+\newline 
+
+\newline 
+
+\family typewriter 
+.globl _asm_func_PARM_2 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+.globl _asm_func 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+.area OSEG 
+\newline 
+_asm_func_PARM_2:
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+.ds      1 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+.area CSEG 
+\newline 
+_asm_func: 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov     a,dpl 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+add     a,_asm_func_PARM_2 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov     dpl,a 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov     dpl,#0x00 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ret
+\newline 
+
+\newline 
+
+\family default 
+Note here that the return values are placed in 'dpl' - One byte return value,
+ 'dpl' LSB & 'dph' MSB for two byte values.
+ 'dpl', 'dph' and 'b' for three byte values (generic pointers) and 'dpl','dph','
+b' & 'acc' for four byte values.
+\layout Standard
+
+The parameter naming convention is _<function_name>_PARM_<n>, where n is
+ the parameter number starting from 1, and counting from the left.
+ The first parameter is passed in 
+\begin_inset Quotes eld
+\end_inset 
+
+dpl
+\begin_inset Quotes erd
+\end_inset 
+
+ for One bye parameter, 
+\begin_inset Quotes eld
+\end_inset 
+
+dptr
+\begin_inset Quotes erd
+\end_inset 
+
+ if two bytes, 
+\begin_inset Quotes eld
+\end_inset 
+
+b,dptr
+\begin_inset Quotes erd
+\end_inset 
+
+ for three bytes and 
+\begin_inset Quotes eld
+\end_inset 
+
+acc,b,dptr
+\begin_inset Quotes erd
+\end_inset 
+
+ for four bytes, the varible name for the second parameter will be _<function_na
+me>_PARM_2.
+\newline 
+
+\newline 
+Assemble the assembler routine with the following command:
+\newline 
+
+\newline 
+
+\family sans 
+\series bold 
+asx8051 -losg asmfunc.asm
+\newline 
+
+\newline 
+
+\family default 
+\series default 
+Then compile and link the assembler routine to the C source file with the
+ following command:
+\newline 
+
+\newline 
+
+\family sans 
+\series bold 
+sdcc cfunc.c asmfunc.rel
+\layout Subsubsection
+
+Assembler Routine(reentrant)
+\layout Standard
+
+In this case the second parameter onwards will be passed on the stack, the
+ parameters are pushed from right to left i.e.
+ after the call the left most parameter will be on the top of the stack.
+ Here is an example:
+\newline 
+
+\newline 
+
+\family typewriter 
+extern int asm_func(unsigned char, unsigned char);
+\newline 
+
+\newline 
+int c_func (unsigned char i, unsigned char j) reentrant 
+\newline 
+{ 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+return asm_func(i,j); 
+\newline 
+} 
+\newline 
+
+\newline 
+int main() 
+\newline 
+{ 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+return c_func(10,9); 
+\newline 
+}
+\newline 
+
+\family default 
+
+\newline 
+The corresponding assembler routine is:
+\newline 
+
+\newline 
+
+\family typewriter 
+.globl _asm_func 
+\newline 
+_asm_func: 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+push  _bp 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov  _bp,sp 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov  r2,dpl
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov  a,_bp 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+clr  c 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+add  a,#0xfd 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov  r0,a 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+add  a,#0xfc
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov  r1,a 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov  a,@r0 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+add  a,r2
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov  dpl,a 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov  dph,#0x00 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+mov  sp,_bp 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+pop  _bp 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ret
+\newline 
+
+\newline 
+
+\family default 
+The compiling and linking procedure remains the same, however note the extra
+ entry & exit linkage required for the assembler code, _bp is the stack
+ frame pointer and is used to compute the offset into the stack for parameters
+ and local variables.
+\layout Subsection
+
+External Stack
+\layout Standard
+
+The external stack is located at the start of the external ram segment,
+ and is 256 bytes in size.
+ When --xstack option is used to compile the program, the parameters and
+ local variables of all reentrant functions are allocated in this area.
+ This option is provided for programs with large stack space requirements.
+ When used with the --stack-auto option, all parameters and local variables
+ are allocated on the external stack (note support libraries will need to
+ be recompiled with the same options).
+\layout Standard
+
+The compiler outputs the higher order address byte of the external ram segment
+ into PORT P2, therefore when using the External Stack option, this port
+ MAY NOT be used by the application program.
+\layout Subsection
+
+ANSI-Compliance
+\layout Standard
+
+Deviations from the compliancy.
+\layout Itemize
+
+functions are not always reentrant.
+\layout Itemize
+
+structures cannot be assigned values directly, cannot be passed as function
+ parameters or assigned to each other and cannot be a return value from
+ a function, e.g.:
+\family typewriter 
+
+\newline 
+
+\newline 
+struct s { ...
+ }; 
+\newline 
+struct s s1, s2; 
+\newline 
+foo() 
+\newline 
+{ 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+...
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+s1 = s2 ; /* is invalid in SDCC although allowed in ANSI */ 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+...
+\newline 
+}
+\newline 
+struct s foo1 (struct s parms) /* is invalid in SDCC although allowed in
+ ANSI */ 
+\newline 
+{ 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+struct s rets; 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+...
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+return rets;/* is invalid in SDCC although allowed in ANSI */ 
+\newline 
+}
+\layout Itemize
+
+'long long' (64 bit integers) not supported.
+\layout Itemize
+
+'double' precision floating point not supported.
+\layout Itemize
+
+No support for setjmp and longjmp (for now).
+\layout Itemize
+
+Old K&R style function declarations are NOT allowed.
+\newline 
+
+\family typewriter 
+
+\newline 
+foo(i,j) /* this old style of function declarations */ 
+\newline 
+int i,j; /* are valid in ANSI but not valid in SDCC */ 
+\newline 
+{ 
+\newline 
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+...
+\newline 
+}
+\layout Itemize
+
+functions declared as pointers must be dereferenced during the call.
+\newline 
+
+\family typewriter 
+
+\newline 
+int (*foo)();
+\newline 
+...
+\newline 
+/* has to be called like this */ 
+\newline 
+(*foo)(); /* ansi standard allows calls to be made like 'foo()' */
+\layout Subsection
+
+Cyclomatic Complexity
+\layout Standard
+
+Cyclomatic complexity of a function is defined as the number of independent
+ paths the program can take during execution of the function.
+ This is an important number since it defines the number test cases you
+ have to generate to validate the function.
+ The accepted industry standard for complexity number is 10, if the cyclomatic
+ complexity reported by SDCC exceeds 10 you should think about simplification
+ of the function logic.
+ Note that the complexity level is not related to the number of lines of
+ code in a function.
+ Large functions can have low complexity, and small functions can have large
+ complexity levels.
+\newline 
+
+\newline 
+SDCC uses the following formula to compute the complexity:
+\newline 
+
+\layout Standard
+
+complexity = (number of edges in control flow graph) - (number of nodes
+ in control flow graph) + 2;
+\newline 
+
+\newline 
+Having said that the industry standard is 10, you should be aware that in
+ some cases it be may unavoidable to have a complexity level of less than
+ 10.
+ For example if you have switch statement with more than 10 case labels,
+ each case label adds one to the complexity level.
+ The complexity level is by no means an absolute measure of the algorithmic
+ complexity of the function, it does however provide a good starting point
+ for which functions you might look at for further optimization.
+\layout Section
+
+TIPS
+\layout Standard
+
+Here are a few guidelines that will help the compiler generate more efficient
+ code, some of the tips are specific to this compiler others are generally
+ good programming practice.
+\layout Itemize
+
+Use the smallest data type to represent your data-value.
+ If it is known in advance that the value is going to be less than 256 then
+ use a 'char' instead of a 'short' or 'int'.
+\layout Itemize
+
+Use unsigned when it is known in advance that the value is not going to
+ be negative.
+ This helps especially if you are doing division or multiplication.
+\layout Itemize
+
+NEVER jump into a LOOP.
+\layout Itemize
+
+Declare the variables to be local whenever possible, especially loop control
+ variables (induction).
+\layout Itemize
+
+Since the compiler does not do implicit integral promotion, the programmer
+ should do an explicit cast when integral promotion is required.
+\layout Itemize
+
+Reducing the size of division, multiplication & modulus operations can reduce
+ code size substantially.
+ Take the following code for example.
+\family typewriter 
+
+\newline 
+
+\newline 
+foobar(unsigned int p1, unsigned char ch)
+\newline 
+{
+\newline 
+    unsigned char ch1 = p1 % ch ;
+\newline 
+    ....
+    
+\newline 
+}
+\newline 
+
+\family default 
+
+\newline 
+For the modulus operation the variable ch will be promoted to unsigned int
+ first then the modulus operation will be performed (this will lead to a
+ call to support routine _muduint()), and the result will be casted to an
+ int.
+ If the code is changed to 
+\newline 
+
+\family typewriter 
+
+\newline 
+foobar(unsigned int p1, unsigned char ch)
+\newline 
+{
+\newline 
+    unsigned char ch1 = (unsigned char)p1 % ch ;
+\newline 
+    ....
+    
+\newline 
+}
+\newline 
+
+\family default 
+
+\newline 
+It would substantially reduce the code generated (future versions of the
+ compiler will be smart enough to detect such optimization oppurtunities).
+\layout Subsection
+
+Notes on MCS51 memory layout
+\layout Standard
+
+The 8051 family of micro controller have a minimum of 128 bytes of internal
+ memory which is structured as follows
+\newline 
+
+\newline 
+- Bytes 00-1F - 32 bytes to hold up to 4 banks of the registers R7 to R7
+\newline 
+- Bytes 20-2F - 16 bytes to hold 128 bit variables and 
+\newline 
+- Bytes 30-7F - 60 bytes for general purpose use.
+\newline 
+
+\newline 
+Normally the SDCC compiler will only utilise the first bank of registers,
+ but it is possible to specify that other banks of registers should be used
+ in interrupt routines.
+ By default, the compiler will place the stack after the last bank of used
+ registers, i.e.
+ if the first 2 banks of registers are used, it will position the base of
+ the internal stack at address 16 (0X10).
+ This implies that as the stack grows, it will use up the remaining register
+ banks, and the 16 bytes used by the 128 bit variables, and 60 bytes for
+ general purpose use.
+\layout Standard
+
+By default, the compiler uses the 60 general purpose bytes to hold "near
+ data".
+ The compiler/optimiser may also declare some Local Variables in this area
+ to hold local data.
+\layout Standard
+
+If any of the 128 bit variables are used, or near data is being used then
+ care needs to be taken to ensure that the stack does not grow so much that
+ it starts to over write either your bit variables or "near data".
+ There is no runtime checking to prevent this from happening.
+\layout Standard
+
+The amount of stack being used is affected by the use of the "internal stack"
+ to save registers before a subroutine call is made (--stack-auto will declare
+ parameters and local variables on the stack) and the number of nested subroutin
+es.
+\layout Standard
+
+If you detect that the stack is over writing you data, then the following
+ can be done.
+ --xstack will cause an external stack to be used for saving registers and
+ (if --stack-auto is being used) storing parameters and local variables.
+ However this will produce more code which will be slower to execute.
+\layout Standard
+
+--stack-loc will allow you specify the start of the stack, i.e.
+ you could start it after any data in the general purpose area.
+ However this may waste the memory not used by the register banks and if
+ the size of the "near data" increases, it may creep into the bottom of
+ the stack.
+\layout Standard
+
+--stack-after-data, similar to the --stack-loc, but it automatically places
+ the stack after the end of the "near data".
+ Again this could waste any spare register space.
+\layout Standard
+
+--data-loc allows you to specify the start address of the near data.
+ This could be used to move the "near data" further away from the stack
+ giving it more room to grow.
+ This will only work if no bit variables are being used and the stack can
+ grow to use the bit variable space.
+\newline 
+
+\newline 
+Conclusion.
+\newline 
+
+\newline 
+If you find that the stack is over writing your bit variables or "near data"
+ then the approach which best utilised the internal memory is to position
+ the "near data" after the last bank of used registers or, if you use bit
+ variables, after the last bit variable by using the --data-loc, e.g.
+ if two register banks are being used and no bit variables, --data-loc 16,
+ and use the --stack-after-data option.
+\layout Standard
+
+If bit variables are being used, another method would be to try and squeeze
+ the data area in the unused register banks if it will fit, and start the
+ stack after the last bit variable.
+\layout Section
+
+Retargetting for other MCUs.
+\layout Standard
+
+The issues for retargetting the compiler are far too numerous to be covered
+ by this document.
+ What follows is a brief description of each of the seven phases of the
+ compiler and its MCU dependency.
+\layout Itemize
+
+Parsing the source and building the annotated parse tree.
+ This phase is largely MCU independent (except for the language extensions).
+ Syntax & semantic checks are also done in this phase, along with some initial
+ optimizations like back patching labels and the pattern matching optimizations
+ like bit-rotation etc.
+\layout Itemize
+
+The second phase involves generating an intermediate code which can be easy
+ manipulated during the later phases.
+ This phase is entirely MCU independent.
+ The intermediate code generation assumes the target machine has unlimited
+ number of registers, and designates them with the name iTemp.
+ The compiler can be made to dump a human readable form of the code generated
+ by using the --dumpraw option.
+\layout Itemize
+
+This phase does the bulk of the standard optimizations and is also MCU independe
+nt.
+ This phase can be broken down into several sub-phases:
+\newline 
+
+\newline 
+Break down intermediate code (iCode) into basic blocks.
+\newline 
+Do control flow & data flow analysis on the basic blocks.
+\newline 
+Do local common subexpression elimination, then global subexpression elimination
+\newline 
+Dead code elimination
+\newline 
+Loop optimizations
+\newline 
+If loop optimizations caused any changes then do 'global subexpression eliminati
+on' and 'dead code elimination' again.
+\layout Itemize
+
+This phase determines the live-ranges; by live range I mean those iTemp
+ variables defined by the compiler that still survive after all the optimization
+s.
+ Live range analysis is essential for register allocation, since these computati
+on determines which of these iTemps will be assigned to registers, and for
+ how long.
+\layout Itemize
+
+Phase five is register allocation.
+ There are two parts to this process.
+\newline 
+
+\newline 
+The first part I call 'register packing' (for lack of a better term).
+ In this case several MCU specific expression folding is done to reduce
+ register pressure.
+\newline 
+
+\newline 
+The second part is more MCU independent and deals with allocating registers
+ to the remaining live ranges.
+ A lot of MCU specific code does creep into this phase because of the limited
+ number of index registers available in the 8051.
+\layout Itemize
+
+The Code generation phase is (unhappily), entirely MCU dependent and very
+ little (if any at all) of this code can be reused for other MCU.
+ However the scheme for allocating a homogenized assembler operand for each
+ iCode operand may be reused.
+\layout Itemize
+
+As mentioned in the optimization section the peep-hole optimizer is rule
+ based system, which can reprogrammed for other MCUs.
+\layout Section
+
+SDCDB - Source Level Debugger
+\layout Standard
+
+SDCC is distributed with a source level debugger.
+ The debugger uses a command line interface, the command repertoire of the
+ debugger has been kept as close to gdb (the GNU debugger) as possible.
+ The configuration and build process is part of the standard compiler installati
+on, which also builds and installs the debugger in the target directory
+ specified during configuration.
+ The debugger allows you debug BOTH at the C source and at the ASM source
+ level.
+\layout Subsection
+
+Compiling for Debugging
+\layout Standard
+
+The \SpecialChar \-
+\SpecialChar \-
+debug option must be specified for all files for which debug information
+ is to be generated.
+ The complier generates a .cdb file for each of these files.
+ The linker updates the .cdb file with the address information.
+ This .cdb is used by the debugger.
+\layout Subsection
+
+How the Debugger Works
+\layout Standard
+
+When the --debug option is specified the compiler generates extra symbol
+ information some of which are put into the the assembler source and some
+ are put into the .cdb file, the linker updates the .cdb file with the address
+ information for the symbols.
+ The debugger reads the symbolic information generated by the compiler &
+ the address information generated by the linker.
+ It uses the SIMULATOR (Daniel's S51) to execute the program, the program
+ execution is controlled by the debugger.
+ When a command is issued for the debugger, it translates it into appropriate
+ commands for the simulator.
+\layout Subsection
+
+Starting the Debugger
+\layout Standard
+
+The debugger can be started using the following command line.
+ (Assume the file you are debugging has the file name foo).
+\newline 
+
+\newline 
+
+\family sans 
+\series bold 
+sdcdb foo
+\newline 
+
+\family default 
+\series default 
+
+\newline 
+The debugger will look for the following files.
+\layout Itemize
+
+foo.c - the source file.
+\layout Itemize
+
+foo.cdb - the debugger symbol information file.
+\layout Itemize
+
+foo.ihx - the intel hex format object file.
+\layout Subsection
+
+Command Line Options.
+\layout Itemize
+
+--directory=<source file directory> this option can used to specify the
+ directory search list.
+ The debugger will look into the directory list specified for source, cdb
+ & ihx files.
+ The items in the directory list must be separated by ':', e.g.
+ if the source files can be in the directories /home/src1 and /home/src2,
+ the --directory option should be --directory=/home/src1:/home/src2.
+ Note there can be no spaces in the option.
+\layout Itemize
+
+-cd <directory> - change to the <directory>.
+\layout Itemize
+
+-fullname - used by GUI front ends.
+\layout Itemize
+
+-cpu <cpu-type> - this argument is passed to the simulator please see the
+ simulator docs for details.
+\layout Itemize
+
+-X <Clock frequency > this options is passed to the simulator please see
+ the simulator docs for details.
+\layout Itemize
+
+-s <serial port file> passed to simulator see the simulator docs for details.
+\layout Itemize
+
+-S <serial in,out> passed to simulator see the simulator docs for details.
+\layout Subsection
+
+Debugger Commands.
+\layout Standard
+
+As mention earlier the command interface for the debugger has been deliberately
+ kept as close the GNU debugger gdb, as possible.
+ This will help the integration with existing graphical user interfaces
+ (like ddd, xxgdb or xemacs) existing for the GNU debugger.
+\layout Subsubsection
+
+break [line | file:line | function | file:function]
+\layout Standard
+
+Set breakpoint at specified line or function:
+\newline 
+
+\newline 
+
+\family sans 
+\series bold 
+sdcdb>break 100 
+\newline 
+sdcdb>break foo.c:100
+\newline 
+sdcdb>break funcfoo
+\newline 
+sdcdb>break foo.c:funcfoo
+\layout Subsubsection
+
+clear [line | file:line | function | file:function ]
+\layout Standard
+
+Clear breakpoint at specified line or function:
+\newline 
+
+\newline 
+
+\family sans 
+\series bold 
+sdcdb>clear 100
+\newline 
+sdcdb>clear foo.c:100
+\newline 
+sdcdb>clear funcfoo
+\newline 
+sdcdb>clear foo.c:funcfoo
+\layout Subsubsection
+
+continue
+\layout Standard
+
+Continue program being debugged, after breakpoint.
+\layout Subsubsection
+
+finish
+\layout Standard
+
+Execute till the end of the current function.
+\layout Subsubsection
+
+delete [n]
+\layout Standard
+
+Delete breakpoint number 'n'.
+ If used without any option clear ALL user defined break points.
+\layout Subsubsection
+
+info [break | stack | frame | registers ]
+\layout Itemize
+
+info break - list all breakpoints
+\layout Itemize
+
+info stack - show the function call stack.
+\layout Itemize
+
+info frame - show information about the current execution frame.
+\layout Itemize
+
+info registers - show content of all registers.
+\layout Subsubsection
+
+step
+\layout Standard
+
+Step program until it reaches a different source line.
+\layout Subsubsection
+
+next
+\layout Standard
+
+Step program, proceeding through subroutine calls.
+\layout Subsubsection
+
+run
+\layout Standard
+
+Start debugged program.
+\layout Subsubsection
+
+ptype variable 
+\layout Standard
+
+Print type information of the variable.
+\layout Subsubsection
+
+print variable
+\layout Standard
+
+print value of variable.
+\layout Subsubsection
+
+file filename
+\layout Standard
+
+load the given file name.
+ Note this is an alternate method of loading file for debugging.
+\layout Subsubsection
+
+frame
+\layout Standard
+
+print information about current frame.
+\layout Subsubsection
+
+set srcmode
+\layout Standard
+
+Toggle between C source & assembly source.
+\layout Subsubsection
+
+! simulator command
+\layout Standard
+
+Send the string following '!' to the simulator, the simulator response is
+ displayed.
+ Note the debugger does not interpret the command being sent to the simulator,
+ so if a command like 'go' is sent the debugger can loose its execution
+ context and may display incorrect values.
+\layout Subsubsection
+
+quit.
+\layout Standard
+
+"Watch me now.
+ Iam going Down.
+ My name is Bobby Brown"
+\layout Subsection
+
+Interfacing with XEmacs.
+\layout Standard
+
+Two files (in emacs lisp) are provided for the interfacing with XEmacs,
+ sdcdb.el and sdcdbsrc.el.
+ These two files can be found in the $(prefix)/bin directory after the installat
+ion is complete.
+ These files need to be loaded into XEmacs for the interface to work.
+ This can be done at XEmacs startup time by inserting the following into
+ your '.xemacs' file (which can be found in your HOME directory): 
+\newline 
+
+\newline 
+
+\family typewriter 
+(load-file sdcdbsrc.el) 
+\family default 
+
+\newline 
+
+\newline 
+.xemacs is a lisp file so the () around the command is REQUIRED.
+ The files can also be loaded dynamically while XEmacs is running, set the
+ environment variable 'EMACSLOADPATH' to the installation bin directory
+ (<installdir>/bin), then enter the following command ESC-x load-file sdcdbsrc.
+ To start the interface enter the following command: 
+\newline 
+
+\newline 
+
+\family sans 
+\series bold 
+ESC-x sdcdbsrc
+\family default 
+\series default 
+
+\newline 
+
+\newline 
+You will prompted to enter the file name to be debugged.
+\newline 
+
+\newline 
+The command line options that are passed to the simulator directly are bound
+ to default values in the file sdcdbsrc.el.
+ The variables are listed below, these values maybe changed as required.
+\layout Itemize
+
+sdcdbsrc-cpu-type '51
+\layout Itemize
+
+sdcdbsrc-frequency '11059200
+\layout Itemize
+
+sdcdbsrc-serial nil
+\layout Standard
+
+The following is a list of key mapping for the debugger interface.
+\layout Standard
+
+\SpecialChar ~
+
+\family typewriter 
+
+\newline 
+;; Current Listing :: 
+\newline 
+;;key\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+binding\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+Comment 
+\newline 
+;;---\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+-------\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+------- 
+\newline 
+;; 
+\newline 
+;; n\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdb-next-from-src\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+SDCDB next command 
+\newline 
+;; b\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdb-back-from-src\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+SDCDB back command 
+\newline 
+;; c\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdb-cont-from-src\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+SDCDB continue command
+\newline 
+;; s\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdb-step-from-src\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+SDCDB step command 
+\newline 
+;; ?\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdb-whatis-c-sexp\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+SDCDB ptypecommand for data at 
+\newline 
+;;\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ buffer point 
+\newline 
+;; x\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdbsrc-delete\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+SDCDB Delete all breakpoints if no arg 
+\newline 
+;;\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+given or delete arg (C-u arg x) 
+\newline 
+;; m\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdbsrc-frame\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+SDCDB Display current frame if no arg, 
+\newline 
+;;\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+given or display frame arg 
+\newline 
+;;\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+buffer point 
+\newline 
+;; !\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdbsrc-goto-sdcdb\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+Goto the SDCDB output buffer 
+\newline 
+;; p\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdb-print-c-sexp\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+SDCDB print command for data at 
+\newline 
+;;\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ buffer point 
+\newline 
+;; g\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdbsrc-goto-sdcdb\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+Goto the SDCDB output buffer 
+\newline 
+;; t\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdbsrc-mode\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+Toggles Sdcdbsrc mode (turns it off) 
+\newline 
+;; 
+\newline 
+;; C-c C-f\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdb-finish-from-src\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+SDCDB finish command 
+\newline 
+;; 
+\newline 
+;; C-x SPC\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdb-break\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+Set break for line with point 
+\newline 
+;; ESC t\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdbsrc-mode\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+Toggle Sdcdbsrc mode 
+\newline 
+;; ESC m\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ sdcdbsrc-srcmode\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+ Toggle list mode 
+\newline 
+;; 
+\family default 
+
+\newline 
+
+\layout Section
+
+Other Processors
+\layout Subsection
+
+The Z80 and gbz80 port
+\layout Standard
+
+SDCC can target both the Zilog Z80 and the Nintendo Gameboy's Z80-like gbz80.
+ The port is incomplete - long support is incomplete (mul, div and mod are
+ unimplimented), and both float and bitfield support is missing.
+ Apart from that the code generated is correct.
+\layout Standard
+
+As always, the code is the authoritave reference - see z80/ralloc.c and z80/gen.c.
+ The stack frame is similar to that generated by the IAR Z80 compiler.
+ IX is used as the base pointer, HL is used as a temporary register, and
+ BC and DE are available for holding varibles.
+ IY is currently unusued.
+ Return values are stored in HL.
+ One bad side effect of using IX as the base pointer is that a functions
+ stack frame is limited to 127 bytes - this will be fixed in a later version.
+\layout Section
+
+Support
+\layout Standard
+
+SDCC has grown to be a large project.
+ The compiler alone (without the preprocessor, assembler and linker) is
+ about 40,000 lines of code (blank stripped).
+ The open source nature of this project is a key to its continued growth
+ and support.
+ You gain the benefit and support of many active software developers and
+ end users.
+ Is SDCC perfect? No, that's why we need your help.
+ The developers take pride in fixing reported bugs.
+ You can help by reporting the bugs and helping other SDCC users.
+ There are lots of ways to contribute, and we encourage you to take part
+ in making SDCC a great software package.
+\layout Subsection
+
+Reporting Bugs
+\layout Standard
+
+Send an email to the mailing list at 'user-sdcc@sdcc.sourceforge.net' or 'devel-sd
+cc@sdcc.sourceforge.net'.
+ Bugs will be fixed ASAP.
+ When reporting a bug, it is very useful to include a small test program
+ which reproduces the problem.
+ If you can isolate the problem by looking at the generated assembly code,
+ this can be very helpful.
+ Compiling your program with the --dumpall option can sometimes be useful
+ in locating optimization problems.
+\layout Section
+
+Acknowledgments
+\layout Standard
+
+Sandeep Dutta (sandeep.dutta@usa.net) - SDCC, the compiler, MCS51 code generator,
+ Debugger, AVR port
+\newline 
+Alan Baldwin (baldwin@shop-pdp.kent.edu) - Initial version of ASXXXX & ASLINK.
+\newline 
+John Hartman (jhartman@compuserve.com) - Porting ASXXX & ASLINK for 8051
+\newline 
+Dmitry S.
+ Obukhov (dso@usa.net) - malloc & serial i/o routines.
+\newline 
+Daniel Drotos (drdani@mazsola.iit.uni-miskolc.hu) - for his Freeware simulator
+\newline 
+Malini Dutta(malini_dutta@hotmail.com) - my wife for her patience and support.
+\newline 
+Unknown - for the GNU C - preprocessor.
+\newline 
+Michael Hope - The Z80 and Z80GB port, 186 development
+\newline 
+Kevin Vigor - The DS390 port.
+\newline 
+Johan Knol - Lots of fixes and enhancements, DS390/TINI libs.
+\newline 
+Scott Datallo - The PIC port.
+\newline 
+
+\newline 
+
+\emph on 
+Thanks to all the other volunteer developers who have helped with coding,
+ testing, web-page creation, distribution sets, etc.
+ You know who you are :-)
+\emph default 
+
+\newline 
+
+\layout Standard
+
+This document was initially written by Sandeep Dutta
+\layout Standard
+
+All product names mentioned herein may be trademarks of their respective
+ companies.
+\layout Standard
+
+
+\begin_inset LatexCommand \printindex{}
+
+\end_inset 
+
+
+\the_end
diff --git a/doc/test_suite_spec.html/WARNINGS b/doc/test_suite_spec.html/WARNINGS
new file mode 100644 (file)
index 0000000..caf4aef
--- /dev/null
@@ -0,0 +1,2 @@
+No implementation found for style `fontenc'
+No implementation found for style `url'
diff --git a/doc/test_suite_spec.html/index.html b/doc/test_suite_spec.html/index.html
new file mode 100644 (file)
index 0000000..e4309cf
--- /dev/null
@@ -0,0 +1,478 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Proposed Test Suite Design</TITLE>
+<META NAME="description" CONTENT="Proposed Test Suite Design">
+<META NAME="keywords" CONTENT="test_suite_spec">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="test_suite_spec.css">
+
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<IMG WIDTH="81" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next_group" SRC="next_group_motif_gr.gif"> 
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif_gr.gif"> 
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif_gr.gif">   
+<BR>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<P>
+
+<P>
+
+<P>
+
+<P>
+<H1 ALIGN="CENTER">Proposed Test Suite Design</H1>
+<P ALIGN="CENTER"><STRONG>Michael Hope (michaelh@juju.net.nz)</STRONG></P>
+<P ALIGN="CENTER"><STRONG>13 July 2001</STRONG></P>
+
+<H3>Abstract:</H3>
+<DIV>
+This article describes the goals, requirements, and suggested specification
+for a test suite for the output of the Small Device C Compiler (sdcc).
+Also included is a short list of existing works. 
+</DIV>
+<P>
+
+<P>
+
+<H1><A NAME="SECTION00010000000000000000">
+Goals</A>
+</H1>
+
+<P>
+The main goals of a test suite for sdcc are 
+
+<P>
+
+<OL>
+<LI>To allow developers to run regression tests to check that core changes
+do not break any of the many ports. </LI>
+<LI>To verify the core. </LI>
+<LI>To allow developers to verify individual ports. </LI>
+<LI>To allow developers to test port changes. </LI>
+</OL>
+This design only covers the generated code. It does not cover a test/unit
+test framework for the sdcc application itself, which may be useful.
+
+<P>
+One side effect of (1) is that it requires that the individual ports
+pass the tests originally. This may be too hard. See the section on
+Exceptions below.
+
+<P>
+
+<H1><A NAME="SECTION00020000000000000000">
+Requirements</A>
+</H1>
+
+<P>
+
+<H2><A NAME="SECTION00021000000000000000">
+Coverage</A>
+</H2>
+
+<P>
+The suite is intended to cover language features only. Hardware specific
+libraries are explicitly not covered.
+
+<P>
+
+<H2><A NAME="SECTION00022000000000000000">
+Permutations</A>
+</H2>
+
+<P>
+The ports often generate different code for handling different types
+(Byte, Word, DWord, and the signed forms). Meta information could
+be used to permute the different test cases across the different types.
+
+<P>
+
+<H2><A NAME="SECTION00023000000000000000">
+Exceptions</A>
+</H2>
+
+<P>
+The different ports are all at different levels of development. Test
+cases must be able to be disabled on a per port basis. Permutations
+also must be able to be disabled on a port level for unsupported cases.
+Disabling, as opposed to enabling, on a per port basis seems more
+maintainable.
+
+<P>
+
+<H2><A NAME="SECTION00024000000000000000">
+Running</A>
+</H2>
+
+<P>
+The tests must be able to run unaided. The test suite must run on
+all platforms that sdcc runs on. A good minimum may be a subset of
+Unix command set and common tools, provided by default on a Unix host
+and provided through cygwin on a Windows host.
+
+<P>
+The tests suits should be able to be sub-divided, so that the failing
+or interesting tests may be run separately.
+
+<P>
+
+<H2><A NAME="SECTION00025000000000000000">
+Artifcats</A>
+</H2>
+
+<P>
+The test code within the test cases should not generate artifacts.
+An artifact occurs when the test code itself interferes with the test
+and generates an erroneous result.
+
+<P>
+
+<H2><A NAME="SECTION00026000000000000000">
+Emulators</A>
+</H2>
+
+<P>
+sdcc is a cross compiling compiler. As such, an emulator is needed
+for each port to run the tests.
+
+<P>
+
+<H1><A NAME="SECTION00030000000000000000">
+Existing works</A>
+</H1>
+
+<P>
+
+<H2><A NAME="SECTION00031000000000000000">
+DejaGnu</A>
+</H2>
+
+<P>
+DejaGnu is a toolkit written in Expect designed to test an interactive
+program. It provides a way of specifying an interface to the program,
+and given that interface a way of stimulating the program and interpreting
+the results. It was originally written by Cygnus Solutions for running
+against development boards. I believe the gcc test suite is written
+against DejaGnu, perhaps partly to test the Cygnus ports of gcc on
+target systems.
+
+<P>
+
+<H2><A NAME="SECTION00032000000000000000">
+gcc test suite</A>
+</H2>
+
+<P>
+I don't know much about the gcc test suite. It was recently removed
+from the gcc distribution due to issues with copyright ownership.
+The code I saw from older distributions seemed more concerned with
+esoteric features of the language.
+
+<P>
+
+<H2><A NAME="SECTION00033000000000000000">
+xUnit</A>
+</H2>
+
+<P>
+The xUnit family, in particular JUnit, is a library of in test assertions,
+test wrappers, and test suite wrappers designed mainly for unit testing.
+PENDING: More.
+
+<P>
+
+<H2><A NAME="SECTION00034000000000000000">
+CoreLinux++ Assertion framework</A>
+</H2>
+
+<P>
+While not a test suite system, the assertion framework is an interesting
+model for the types of assertions that could be used. They include
+pre-condition, post-condition, invariants, conditional assertions,
+unconditional assertions, and methods for checking conditions.
+
+<P>
+
+<H1><A NAME="SECTION00040000000000000000">
+Specification</A>
+</H1>
+
+<P>
+This specification borrows from the JUnit style of unit testing and
+the CoreLinux++ style of assertions. The emphasis is on maintainability
+and ease of writing the test cases.
+
+<P>
+
+<H2><A NAME="SECTION00041000000000000000">
+Terms</A>
+</H2>
+
+<P>
+PENDING: Align these terms with the rest of the world.
+
+<P>
+
+<UL>
+<LI>An <I>assertion</I> is a statement of how things should be. PENDING:
+Better description, an example. </LI>
+<LI>A <I>test point</I> is the smallest unit of a test suite, and consists
+of a single assertion that passes if the test passes. </LI>
+<LI>A <I>test case</I> is a set of test points that test a certain feature. </LI>
+<LI>A <I>test suite</I> is a set of test cases that test a certain set
+of features. </LI>
+</UL>
+
+<P>
+
+<H2><A NAME="SECTION00042000000000000000">
+Test cases</A>
+</H2>
+
+<P>
+Test cases shall be contained in their own C file, along with the
+meta data on the test. Test cases shall be contained within functions
+whose names start with 'test' and which are descriptive of the test
+case. Any function that starts with 'test' will be automatically run
+in the test suite.
+
+<P>
+To make the automatic code generation easier, the C code shall have
+this format 
+
+<P>
+
+<UL>
+<LI>Test functions shall start with 'test' to allow automatic detection. </LI>
+<LI>Test functions shall follow the K&amp;R intention style for ease of detection.
+i.e. the function name shall start in the left column on a new line
+below the return specification. </LI>
+</UL>
+
+<P>
+
+<H2><A NAME="SECTION00043000000000000000">
+Assertions</A>
+</H2>
+
+<P>
+All assertions shall log the line number, function name, and test
+case file when they fail. Most assertions can have a more descriptive
+message attached to them. Assertions will be implemented through macros
+to get at the line information. This may cause trouble with artifacts.
+
+<P>
+The following definitions use C++ style default arguments where optional
+messages may be inserted. All assertions use double opening and closing
+brackets in the macros to allow them to be compiled out without any
+side effects. While this is not required for a test suite, they are
+there in case any of this code is incorporated into the main product.
+
+<P>
+Borrowing from JUnit, the assertions shall include 
+
+<P>
+
+<UL>
+<LI>FAIL((String msg = ``Failed'')). Used when execution should not
+get here. </LI>
+<LI>ASSERT((Boolean cond, String msg = ``Assertion failed''). Fails
+if cond is false. Parent to REQUIRE and ENSURE. </LI>
+</UL>
+JUnit also includes may sub-cases of ASSERT, such as assertNotNull,
+assertEquals, and assertSame.
+
+<P>
+CoreLinux++ includes the extra assertions 
+
+<P>
+
+<UL>
+<LI>REQUIRE((Boolean cond, String msg = ``Precondition failed'').
+Checks preconditions. </LI>
+<LI>ENSURE((Boolean cond, String msg = ``Postcondition failed'').
+Checks post conditions. </LI>
+<LI>CHECK((Boolean cond, String msg = ``Check failed'')). Used to
+call a function and to check that the return value is as expected.
+i.e. CHECK((fread(in, buf, 10) != -1)). Very similar to ASSERT, but
+the function still gets called in a release build. </LI>
+<LI>FORALL and EXISTS. Used to check conditions within part of the code.
+For example, can be used to check that a list is still sorted inside
+each loop of a sort routine. </LI>
+</UL>
+All of FAIL, ASSERT, REQUIRE, ENSURE, and CHECK shall be available.
+
+<P>
+
+<H2><A NAME="SECTION00044000000000000000">
+Meta data</A>
+</H2>
+
+<P>
+PENDING: It's not really meta data.
+
+<P>
+Meta data includes permutation information, exception information,
+and permutation exceptions.
+
+<P>
+Meta data shall be global to the file. Meta data names consist of
+the lower case alphanumerics. Test case specific meta data (fields)
+shall be stored in a comment block at the start of the file. This
+is only due to style.
+
+<P>
+A field definition shall consist of 
+
+<P>
+
+<UL>
+<LI>The field name </LI>
+<LI>A colon. </LI>
+<LI>A comma separated list of values. </LI>
+</UL>
+The values shall be stripped of leading and trailing white space.
+
+<P>
+Permutation exceptions are by port only. Exceptions to a field are
+specified by a modified field definition. An exception definition
+consists of
+
+<P>
+
+<UL>
+<LI>The field name. </LI>
+<LI>An opening square bracket. </LI>
+<LI>A comma separated list of ports the exception applies for. </LI>
+<LI>A closing square bracket. </LI>
+<LI>A colon. </LI>
+<LI>The values to use for this field for these ports. </LI>
+</UL>
+An instance of the test case shall be generated for each permutation
+of the test case specific meta data fields.
+
+<P>
+The runtime meta fields are 
+
+<P>
+
+<UL>
+<LI>port - The port this test is running on. </LI>
+<LI>testcase - The name of this test case. </LI>
+<LI>function - The name of the current function. </LI>
+</UL>
+Most of the runtime fields are not very usable. They are there for
+completeness.
+
+<P>
+Meta fields may be accessed inside the test case by enclosing them
+in curly brackets. The curly brackets will be interpreted anywhere
+inside the test case, including inside quoted strings. Field names
+that are not recognised will be passed through including the brackets.
+Note that it is therefore impossible to use some strings within the
+test case.
+
+<P>
+Test case function names should include the permuted fields in the
+name to reduce name collisions.
+
+<P>
+
+<H2><A NAME="SECTION00045000000000000000">
+An example</A>
+</H2>
+
+<P>
+I don't know how to do pre-formatted text in L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X . Sigh.
+
+<P>
+The following code generates a simple increment test for all combinations
+of the storage classes and all combinations of the data sizes. This
+is a bad example as the optimiser will often remove most of this code.
+
+<P>
+<TT>/** Test for increment. </TT>
+
+<P>
+<TT>type: char, int, long</TT>
+
+<P>
+<TT>Z80 port does not fully support longs (4 byte)</TT>
+
+<P>
+<TT>type[z80]: char, int</TT>
+
+<P>
+<TT>class: ``'', register, static */</TT>
+
+<P>
+<TT>static void</TT>
+
+<P>
+<TT>testInc{class}{types}(void)</TT>
+
+<P>
+<TT>{</TT>
+
+<P>
+<TT>{class} {type} i = 0; </TT>
+
+<P>
+<TT>i = i + 1;</TT>
+
+<P>
+<TT>ASSERT((i == 1));</TT>
+
+<P>
+<TT>}</TT>
+
+<H1><A NAME="SECTION00050000000000000000">
+About this document ...</A>
+</H1>
+ <STRONG>Proposed Test Suite Design</STRONG><P>
+This document was generated using the
+<A HREF="http://www-dsed.llnl.gov/files/programs/unix/latex2html/manual/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 99.1 release (March 30, 1999)
+<P>
+Copyright &#169; 1993, 1994, 1995, 1996,
+<A HREF="http://cbl.leeds.ac.uk/nikos/personal.html">Nikos Drakos</A>, 
+Computer Based Learning Unit, University of Leeds.
+<BR>
+Copyright &#169; 1997, 1998, 1999,
+<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>, 
+Mathematics Department, Macquarie University, Sydney.
+<P>
+The command line arguments were: <BR>
+ <STRONG>latex2html</STRONG> <TT>-split 0 -dir test_suite_spec.html test_suite_spec</TT>
+<P>
+The translation was initiated by Johan Knol on 2001-07-13<HR>
+<!--Navigation Panel-->
+<IMG WIDTH="81" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next_group" SRC="next_group_motif_gr.gif"> 
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif_gr.gif"> 
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif_gr.gif">   
+<BR>
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/test_suite_spec.html/next_group_motif_gr.gif b/doc/test_suite_spec.html/next_group_motif_gr.gif
new file mode 100644 (file)
index 0000000..a5888d7
Binary files /dev/null and b/doc/test_suite_spec.html/next_group_motif_gr.gif differ
diff --git a/doc/test_suite_spec.html/previous_motif_gr.gif b/doc/test_suite_spec.html/previous_motif_gr.gif
new file mode 100644 (file)
index 0000000..d5398b3
Binary files /dev/null and b/doc/test_suite_spec.html/previous_motif_gr.gif differ
diff --git a/doc/test_suite_spec.html/test_suite_spec.html b/doc/test_suite_spec.html/test_suite_spec.html
new file mode 100644 (file)
index 0000000..e4309cf
--- /dev/null
@@ -0,0 +1,478 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 99.1 release (March 30, 1999)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Proposed Test Suite Design</TITLE>
+<META NAME="description" CONTENT="Proposed Test Suite Design">
+<META NAME="keywords" CONTENT="test_suite_spec">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v99.1 release">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="test_suite_spec.css">
+
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<IMG WIDTH="81" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next_group" SRC="next_group_motif_gr.gif"> 
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif_gr.gif"> 
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif_gr.gif">   
+<BR>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<P>
+
+<P>
+
+<P>
+
+<P>
+<H1 ALIGN="CENTER">Proposed Test Suite Design</H1>
+<P ALIGN="CENTER"><STRONG>Michael Hope (michaelh@juju.net.nz)</STRONG></P>
+<P ALIGN="CENTER"><STRONG>13 July 2001</STRONG></P>
+
+<H3>Abstract:</H3>
+<DIV>
+This article describes the goals, requirements, and suggested specification
+for a test suite for the output of the Small Device C Compiler (sdcc).
+Also included is a short list of existing works. 
+</DIV>
+<P>
+
+<P>
+
+<H1><A NAME="SECTION00010000000000000000">
+Goals</A>
+</H1>
+
+<P>
+The main goals of a test suite for sdcc are 
+
+<P>
+
+<OL>
+<LI>To allow developers to run regression tests to check that core changes
+do not break any of the many ports. </LI>
+<LI>To verify the core. </LI>
+<LI>To allow developers to verify individual ports. </LI>
+<LI>To allow developers to test port changes. </LI>
+</OL>
+This design only covers the generated code. It does not cover a test/unit
+test framework for the sdcc application itself, which may be useful.
+
+<P>
+One side effect of (1) is that it requires that the individual ports
+pass the tests originally. This may be too hard. See the section on
+Exceptions below.
+
+<P>
+
+<H1><A NAME="SECTION00020000000000000000">
+Requirements</A>
+</H1>
+
+<P>
+
+<H2><A NAME="SECTION00021000000000000000">
+Coverage</A>
+</H2>
+
+<P>
+The suite is intended to cover language features only. Hardware specific
+libraries are explicitly not covered.
+
+<P>
+
+<H2><A NAME="SECTION00022000000000000000">
+Permutations</A>
+</H2>
+
+<P>
+The ports often generate different code for handling different types
+(Byte, Word, DWord, and the signed forms). Meta information could
+be used to permute the different test cases across the different types.
+
+<P>
+
+<H2><A NAME="SECTION00023000000000000000">
+Exceptions</A>
+</H2>
+
+<P>
+The different ports are all at different levels of development. Test
+cases must be able to be disabled on a per port basis. Permutations
+also must be able to be disabled on a port level for unsupported cases.
+Disabling, as opposed to enabling, on a per port basis seems more
+maintainable.
+
+<P>
+
+<H2><A NAME="SECTION00024000000000000000">
+Running</A>
+</H2>
+
+<P>
+The tests must be able to run unaided. The test suite must run on
+all platforms that sdcc runs on. A good minimum may be a subset of
+Unix command set and common tools, provided by default on a Unix host
+and provided through cygwin on a Windows host.
+
+<P>
+The tests suits should be able to be sub-divided, so that the failing
+or interesting tests may be run separately.
+
+<P>
+
+<H2><A NAME="SECTION00025000000000000000">
+Artifcats</A>
+</H2>
+
+<P>
+The test code within the test cases should not generate artifacts.
+An artifact occurs when the test code itself interferes with the test
+and generates an erroneous result.
+
+<P>
+
+<H2><A NAME="SECTION00026000000000000000">
+Emulators</A>
+</H2>
+
+<P>
+sdcc is a cross compiling compiler. As such, an emulator is needed
+for each port to run the tests.
+
+<P>
+
+<H1><A NAME="SECTION00030000000000000000">
+Existing works</A>
+</H1>
+
+<P>
+
+<H2><A NAME="SECTION00031000000000000000">
+DejaGnu</A>
+</H2>
+
+<P>
+DejaGnu is a toolkit written in Expect designed to test an interactive
+program. It provides a way of specifying an interface to the program,
+and given that interface a way of stimulating the program and interpreting
+the results. It was originally written by Cygnus Solutions for running
+against development boards. I believe the gcc test suite is written
+against DejaGnu, perhaps partly to test the Cygnus ports of gcc on
+target systems.
+
+<P>
+
+<H2><A NAME="SECTION00032000000000000000">
+gcc test suite</A>
+</H2>
+
+<P>
+I don't know much about the gcc test suite. It was recently removed
+from the gcc distribution due to issues with copyright ownership.
+The code I saw from older distributions seemed more concerned with
+esoteric features of the language.
+
+<P>
+
+<H2><A NAME="SECTION00033000000000000000">
+xUnit</A>
+</H2>
+
+<P>
+The xUnit family, in particular JUnit, is a library of in test assertions,
+test wrappers, and test suite wrappers designed mainly for unit testing.
+PENDING: More.
+
+<P>
+
+<H2><A NAME="SECTION00034000000000000000">
+CoreLinux++ Assertion framework</A>
+</H2>
+
+<P>
+While not a test suite system, the assertion framework is an interesting
+model for the types of assertions that could be used. They include
+pre-condition, post-condition, invariants, conditional assertions,
+unconditional assertions, and methods for checking conditions.
+
+<P>
+
+<H1><A NAME="SECTION00040000000000000000">
+Specification</A>
+</H1>
+
+<P>
+This specification borrows from the JUnit style of unit testing and
+the CoreLinux++ style of assertions. The emphasis is on maintainability
+and ease of writing the test cases.
+
+<P>
+
+<H2><A NAME="SECTION00041000000000000000">
+Terms</A>
+</H2>
+
+<P>
+PENDING: Align these terms with the rest of the world.
+
+<P>
+
+<UL>
+<LI>An <I>assertion</I> is a statement of how things should be. PENDING:
+Better description, an example. </LI>
+<LI>A <I>test point</I> is the smallest unit of a test suite, and consists
+of a single assertion that passes if the test passes. </LI>
+<LI>A <I>test case</I> is a set of test points that test a certain feature. </LI>
+<LI>A <I>test suite</I> is a set of test cases that test a certain set
+of features. </LI>
+</UL>
+
+<P>
+
+<H2><A NAME="SECTION00042000000000000000">
+Test cases</A>
+</H2>
+
+<P>
+Test cases shall be contained in their own C file, along with the
+meta data on the test. Test cases shall be contained within functions
+whose names start with 'test' and which are descriptive of the test
+case. Any function that starts with 'test' will be automatically run
+in the test suite.
+
+<P>
+To make the automatic code generation easier, the C code shall have
+this format 
+
+<P>
+
+<UL>
+<LI>Test functions shall start with 'test' to allow automatic detection. </LI>
+<LI>Test functions shall follow the K&amp;R intention style for ease of detection.
+i.e. the function name shall start in the left column on a new line
+below the return specification. </LI>
+</UL>
+
+<P>
+
+<H2><A NAME="SECTION00043000000000000000">
+Assertions</A>
+</H2>
+
+<P>
+All assertions shall log the line number, function name, and test
+case file when they fail. Most assertions can have a more descriptive
+message attached to them. Assertions will be implemented through macros
+to get at the line information. This may cause trouble with artifacts.
+
+<P>
+The following definitions use C++ style default arguments where optional
+messages may be inserted. All assertions use double opening and closing
+brackets in the macros to allow them to be compiled out without any
+side effects. While this is not required for a test suite, they are
+there in case any of this code is incorporated into the main product.
+
+<P>
+Borrowing from JUnit, the assertions shall include 
+
+<P>
+
+<UL>
+<LI>FAIL((String msg = ``Failed'')). Used when execution should not
+get here. </LI>
+<LI>ASSERT((Boolean cond, String msg = ``Assertion failed''). Fails
+if cond is false. Parent to REQUIRE and ENSURE. </LI>
+</UL>
+JUnit also includes may sub-cases of ASSERT, such as assertNotNull,
+assertEquals, and assertSame.
+
+<P>
+CoreLinux++ includes the extra assertions 
+
+<P>
+
+<UL>
+<LI>REQUIRE((Boolean cond, String msg = ``Precondition failed'').
+Checks preconditions. </LI>
+<LI>ENSURE((Boolean cond, String msg = ``Postcondition failed'').
+Checks post conditions. </LI>
+<LI>CHECK((Boolean cond, String msg = ``Check failed'')). Used to
+call a function and to check that the return value is as expected.
+i.e. CHECK((fread(in, buf, 10) != -1)). Very similar to ASSERT, but
+the function still gets called in a release build. </LI>
+<LI>FORALL and EXISTS. Used to check conditions within part of the code.
+For example, can be used to check that a list is still sorted inside
+each loop of a sort routine. </LI>
+</UL>
+All of FAIL, ASSERT, REQUIRE, ENSURE, and CHECK shall be available.
+
+<P>
+
+<H2><A NAME="SECTION00044000000000000000">
+Meta data</A>
+</H2>
+
+<P>
+PENDING: It's not really meta data.
+
+<P>
+Meta data includes permutation information, exception information,
+and permutation exceptions.
+
+<P>
+Meta data shall be global to the file. Meta data names consist of
+the lower case alphanumerics. Test case specific meta data (fields)
+shall be stored in a comment block at the start of the file. This
+is only due to style.
+
+<P>
+A field definition shall consist of 
+
+<P>
+
+<UL>
+<LI>The field name </LI>
+<LI>A colon. </LI>
+<LI>A comma separated list of values. </LI>
+</UL>
+The values shall be stripped of leading and trailing white space.
+
+<P>
+Permutation exceptions are by port only. Exceptions to a field are
+specified by a modified field definition. An exception definition
+consists of
+
+<P>
+
+<UL>
+<LI>The field name. </LI>
+<LI>An opening square bracket. </LI>
+<LI>A comma separated list of ports the exception applies for. </LI>
+<LI>A closing square bracket. </LI>
+<LI>A colon. </LI>
+<LI>The values to use for this field for these ports. </LI>
+</UL>
+An instance of the test case shall be generated for each permutation
+of the test case specific meta data fields.
+
+<P>
+The runtime meta fields are 
+
+<P>
+
+<UL>
+<LI>port - The port this test is running on. </LI>
+<LI>testcase - The name of this test case. </LI>
+<LI>function - The name of the current function. </LI>
+</UL>
+Most of the runtime fields are not very usable. They are there for
+completeness.
+
+<P>
+Meta fields may be accessed inside the test case by enclosing them
+in curly brackets. The curly brackets will be interpreted anywhere
+inside the test case, including inside quoted strings. Field names
+that are not recognised will be passed through including the brackets.
+Note that it is therefore impossible to use some strings within the
+test case.
+
+<P>
+Test case function names should include the permuted fields in the
+name to reduce name collisions.
+
+<P>
+
+<H2><A NAME="SECTION00045000000000000000">
+An example</A>
+</H2>
+
+<P>
+I don't know how to do pre-formatted text in L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X . Sigh.
+
+<P>
+The following code generates a simple increment test for all combinations
+of the storage classes and all combinations of the data sizes. This
+is a bad example as the optimiser will often remove most of this code.
+
+<P>
+<TT>/** Test for increment. </TT>
+
+<P>
+<TT>type: char, int, long</TT>
+
+<P>
+<TT>Z80 port does not fully support longs (4 byte)</TT>
+
+<P>
+<TT>type[z80]: char, int</TT>
+
+<P>
+<TT>class: ``'', register, static */</TT>
+
+<P>
+<TT>static void</TT>
+
+<P>
+<TT>testInc{class}{types}(void)</TT>
+
+<P>
+<TT>{</TT>
+
+<P>
+<TT>{class} {type} i = 0; </TT>
+
+<P>
+<TT>i = i + 1;</TT>
+
+<P>
+<TT>ASSERT((i == 1));</TT>
+
+<P>
+<TT>}</TT>
+
+<H1><A NAME="SECTION00050000000000000000">
+About this document ...</A>
+</H1>
+ <STRONG>Proposed Test Suite Design</STRONG><P>
+This document was generated using the
+<A HREF="http://www-dsed.llnl.gov/files/programs/unix/latex2html/manual/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 99.1 release (March 30, 1999)
+<P>
+Copyright &#169; 1993, 1994, 1995, 1996,
+<A HREF="http://cbl.leeds.ac.uk/nikos/personal.html">Nikos Drakos</A>, 
+Computer Based Learning Unit, University of Leeds.
+<BR>
+Copyright &#169; 1997, 1998, 1999,
+<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>, 
+Mathematics Department, Macquarie University, Sydney.
+<P>
+The command line arguments were: <BR>
+ <STRONG>latex2html</STRONG> <TT>-split 0 -dir test_suite_spec.html test_suite_spec</TT>
+<P>
+The translation was initiated by Johan Knol on 2001-07-13<HR>
+<!--Navigation Panel-->
+<IMG WIDTH="81" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next_group" SRC="next_group_motif_gr.gif"> 
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_motif_gr.gif"> 
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="previous_motif_gr.gif">   
+<BR>
+<!--End of Navigation Panel-->
+<ADDRESS>
+<I>Johan Knol</I>
+<BR><I>2001-07-13</I>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/doc/test_suite_spec.html/up_motif_gr.gif b/doc/test_suite_spec.html/up_motif_gr.gif
new file mode 100644 (file)
index 0000000..6aeb675
Binary files /dev/null and b/doc/test_suite_spec.html/up_motif_gr.gif differ
diff --git a/doc/test_suite_spec.lyx b/doc/test_suite_spec.lyx
new file mode 100644 (file)
index 0000000..3b20b1f
--- /dev/null
@@ -0,0 +1,543 @@
+#LyX 1.1 created this file. For more info see http://www.lyx.org/
+\lyxformat 218
+\textclass article
+\begin_preamble
+\usepackage{url}
+\end_preamble
+\language english
+\inputencoding auto
+\fontscheme times
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Proposed Test Suite Design
+\layout Author
+
+Michael Hope (michaelh@juju.net.nz)
+\layout Date
+
+
+\latex latex 
+
+\backslash 
+today{}
+\layout Abstract
+
+This article describes the goals, requirements, and suggested specification
+ for a test suite for the output of the Small Device C Compiler (sdcc).
+ Also included is a short list of existing works.
+\layout Section
+
+Goals
+\layout Standard
+
+The main goals of a test suite for sdcc are 
+\layout Enumerate
+
+To allow developers to run regression tests to check that core changes do
+ not break any of the many ports.
+\layout Enumerate
+
+To verify the core.
+\layout Enumerate
+
+To allow developers to verify individual ports.
+\layout Enumerate
+
+To allow developers to test port changes.
+\layout Standard
+
+This design only covers the generated code.
+ It does not cover a test/unit test framework for the sdcc application itself,
+ which may be useful.
+\layout Standard
+
+One side effect of (1) is that it requires that the individual ports pass
+ the tests originally.
+ This may be too hard.
+ See the section on Exceptions below.
+\layout Section
+
+Requirements
+\layout Subsection
+
+Coverage
+\layout Standard
+
+The suite is intended to cover language features only.
+ Hardware specific libraries are explicitly not covered.
+\layout Subsection
+
+Permutations
+\layout Standard
+
+The ports often generate different code for handling different types (Byte,
+ Word, DWord, and the signed forms).
+ Meta information could be used to permute the different test cases across
+ the different types.
+\layout Subsection
+
+Exceptions
+\layout Standard
+
+The different ports are all at different levels of development.
+ Test cases must be able to be disabled on a per port basis.
+ Permutations also must be able to be disabled on a port level for unsupported
+ cases.
+ Disabling, as opposed to enabling, on a per port basis seems more maintainable.
+\layout Subsection
+
+Running
+\layout Standard
+
+The tests must be able to run unaided.
+ The test suite must run on all platforms that sdcc runs on.
+ A good minimum may be a subset of Unix command set and common tools, provided
+ by default on a Unix host and provided through cygwin on a Windows host.
+\layout Standard
+
+The tests suits should be able to be sub-divided, so that the failing or
+ interesting tests may be run separately.
+\layout Subsection
+
+Artifcats
+\layout Standard
+
+The test code within the test cases should not generate artifacts.
+ An artifact occurs when the test code itself interferes with the test and
+ generates an erroneous result.
+\layout Subsection
+
+Emulators
+\layout Standard
+
+sdcc is a cross compiling compiler.
+ As such, an emulator is needed for each port to run the tests.
+\layout Section
+
+Existing works
+\layout Subsection
+
+DejaGnu
+\layout Standard
+
+DejaGnu is a toolkit written in Expect designed to test an interactive program.
+ It provides a way of specifying an interface to the program, and given
+ that interface a way of stimulating the program and interpreting the results.
+ It was originally written by Cygnus Solutions for running against development
+ boards.
+ I believe the gcc test suite is written against DejaGnu, perhaps partly
+ to test the Cygnus ports of gcc on target systems.
+\layout Subsection
+
+gcc test suite
+\layout Standard
+
+I don't know much about the gcc test suite.
+ It was recently removed from the gcc distribution due to issues with copyright
+ ownership.
+ The code I saw from older distributions seemed more concerned with esoteric
+ features of the language.
+\layout Subsection
+
+xUnit
+\layout Standard
+
+The xUnit family, in particular JUnit, is a library of in test assertions,
+ test wrappers, and test suite wrappers designed mainly for unit testing.
+ PENDING: More.
+\layout Subsection
+
+CoreLinux++ Assertion framework
+\layout Standard
+
+While not a test suite system, the assertion framework is an interesting
+ model for the types of assertions that could be used.
+ They include pre-condition, post-condition, invariants, conditional assertions,
+ unconditional assertions, and methods for checking conditions.
+\layout Section
+
+Specification
+\layout Standard
+
+This specification borrows from the JUnit style of unit testing and the
+ CoreLinux++ style of assertions.
+ The emphasis is on maintainability and ease of writing the test cases.
+\layout Subsection
+
+Terms
+\layout Standard
+
+PENDING: Align these terms with the rest of the world.
+\layout Itemize
+
+An 
+\emph on 
+assertion
+\emph default 
+ is a statement of how things should be.
+ PENDING: Better description, an example.
+\layout Itemize
+
+A 
+\emph on 
+test point
+\emph default 
+ is the smallest unit of a test suite, and consists of a single assertion
+ that passes if the test passes.
+\layout Itemize
+
+A 
+\emph on 
+test case
+\emph default 
+ is a set of test points that test a certain feature.
+\layout Itemize
+
+A 
+\emph on 
+test suite
+\emph default 
+ is a set of test cases that test a certain set of features.
+\layout Subsection
+
+Test cases
+\layout Standard
+
+Test cases shall be contained in their own C file, along with the meta data
+ on the test.
+ Test cases shall be contained within functions whose names start with 'test'
+ and which are descriptive of the test case.
+ Any function that starts with 'test' will be automatically run in the test
+ suite.
+\layout Standard
+
+To make the automatic code generation easier, the C code shall have this
+ format 
+\layout Itemize
+
+Test functions shall start with 'test' to allow automatic detection.
+\layout Itemize
+
+Test functions shall follow the K&R intention style for ease of detection.
+ i.e.
+ the function name shall start in the left column on a new line below the
+ return specification.
+\layout Subsection
+
+Assertions
+\layout Standard
+
+All assertions shall log the line number, function name, and test case file
+ when they fail.
+ Most assertions can have a more descriptive message attached to them.
+ Assertions will be implemented through macros to get at the line information.
+ This may cause trouble with artifacts.
+\layout Standard
+
+The following definitions use C++ style default arguments where optional
+ messages may be inserted.
+ All assertions use double opening and closing brackets in the macros to
+ allow them to be compiled out without any side effects.
+ While this is not required for a test suite, they are there in case any
+ of this code is incorporated into the main product.
+\layout Standard
+
+Borrowing from JUnit, the assertions shall include 
+\layout Itemize
+
+FAIL((String msg = 
+\begin_inset Quotes eld
+\end_inset 
+
+Failed
+\begin_inset Quotes erd
+\end_inset 
+
+)).
+ Used when execution should not get here.
+\layout Itemize
+
+ASSERT((Boolean cond, String msg = 
+\begin_inset Quotes eld
+\end_inset 
+
+Assertion failed
+\begin_inset Quotes erd
+\end_inset 
+
+).
+ Fails if cond is false.
+ Parent to REQUIRE and ENSURE.
+\layout Standard
+
+JUnit also includes may sub-cases of ASSERT, such as assertNotNull, assertEquals
+, and assertSame.
+\layout Standard
+
+CoreLinux++ includes the extra assertions 
+\layout Itemize
+
+REQUIRE((Boolean cond, String msg = 
+\begin_inset Quotes eld
+\end_inset 
+
+Precondition failed
+\begin_inset Quotes erd
+\end_inset 
+
+).
+ Checks preconditions.
+\layout Itemize
+
+ENSURE((Boolean cond, String msg = 
+\begin_inset Quotes eld
+\end_inset 
+
+Postcondition failed
+\begin_inset Quotes erd
+\end_inset 
+
+).
+ Checks post conditions.
+\layout Itemize
+
+CHECK((Boolean cond, String msg = 
+\begin_inset Quotes eld
+\end_inset 
+
+Check failed
+\begin_inset Quotes erd
+\end_inset 
+
+)).
+ Used to call a function and to check that the return value is as expected.
+ i.e.
+ CHECK((fread(in, buf, 10) != -1)).
+ Very similar to ASSERT, but the function still gets called in a release
+ build.
+\layout Itemize
+
+FORALL and EXISTS.
+ Used to check conditions within part of the code.
+ For example, can be used to check that a list is still sorted inside each
+ loop of a sort routine.
+\layout Standard
+
+All of FAIL, ASSERT, REQUIRE, ENSURE, and CHECK shall be available.
+\layout Subsection
+
+Meta data
+\layout Standard
+
+PENDING: It's not really meta data.
+\layout Standard
+
+Meta data includes permutation information, exception information, and permutati
+on exceptions.
+\layout Standard
+
+Meta data shall be global to the file.
+ Meta data names consist of the lower case alphanumerics.
+ Test case specific meta data (fields) shall be stored in a comment block
+ at the start of the file.
+ This is only due to style.
+\layout Standard
+
+A field definition shall consist of 
+\layout Itemize
+
+The field name 
+\layout Itemize
+
+A colon.
+\layout Itemize
+
+A comma separated list of values.
+\layout Standard
+
+The values shall be stripped of leading and trailing white space.
+\layout Standard
+
+Permutation exceptions are by port only.
+ Exceptions to a field are specified by a modified field definition.
+ An exception definition consists of
+\layout Itemize
+
+The field name.
+\layout Itemize
+
+An opening square bracket.
+\layout Itemize
+
+A comma separated list of ports the exception applies for.
+\layout Itemize
+
+A closing square bracket.
+\layout Itemize
+
+A colon.
+\layout Itemize
+
+The values to use for this field for these ports.
+\layout Standard
+
+An instance of the test case shall be generated for each permutation of
+ the test case specific meta data fields.
+\layout Standard
+
+The runtime meta fields are 
+\layout Itemize
+
+port - The port this test is running on.
+\layout Itemize
+
+testcase - The name of this test case.
+\layout Itemize
+
+function - The name of the current function.
+\layout Standard
+
+Most of the runtime fields are not very usable.
+ They are there for completeness.
+\layout Standard
+
+Meta fields may be accessed inside the test case by enclosing them in curly
+ brackets.
+ The curly brackets will be interpreted anywhere inside the test case, including
+ inside quoted strings.
+ Field names that are not recognised will be passed through including the
+ brackets.
+ Note that it is therefore impossible to use some strings within the test
+ case.
+\layout Standard
+
+Test case function names should include the permuted fields in the name
+ to reduce name collisions.
+\layout Subsection
+
+An example
+\layout Standard
+
+I don't know how to do pre-formatted text in LaTeX.
+ Sigh.
+\layout Standard
+
+The following code generates a simple increment test for all combinations
+ of the storage classes and all combinations of the data sizes.
+ This is a bad example as the optimiser will often remove most of this code.
+\layout Standard
+
+
+\family typewriter 
+/** Test for increment.
+\layout Standard
+
+
+\family typewriter 
+type: char, int, long
+\layout Standard
+
+
+\family typewriter 
+Z80 port does not fully support longs (4 byte)
+\layout Standard
+
+
+\family typewriter 
+type[z80]: char, int
+\layout Standard
+
+
+\family typewriter 
+class: 
+\begin_inset Quotes eld
+\end_inset 
+
+
+\begin_inset Quotes erd
+\end_inset 
+
+, register, static */
+\layout Standard
+
+
+\family typewriter 
+static void
+\layout Standard
+
+
+\family typewriter 
+testInc{class}{types}(void)
+\layout Standard
+
+
+\family typewriter 
+{
+\layout Standard
+
+
+\family typewriter 
+{class} {type} i = 0; 
+\layout Standard
+
+
+\family typewriter 
+i = i + 1;
+\layout Standard
+
+
+\family typewriter 
+ASSERT((i == 1));
+\layout Standard
+
+
+\family typewriter 
+}
+\the_end
diff --git a/doc/test_suite_spec.tex b/doc/test_suite_spec.tex
deleted file mode 100644 (file)
index 3b4676e..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-% ``Test Suite Design''
-% $Id$
-\documentclass{widearticle}
-\usepackage{url}
-
-\begin{document}
-\title{Proposed Test Suite Design}
-\author{Michael Hope (michaelh@juju.net.nz)}
-\date{\today}
-\maketitle
-
-\begin{abstract}
-This article describes the goals, requirements, and suggested
-specification for a test suite for the output of the Small Device C
-Compiler (sdcc).  Also included is a short list of existing works.
-\end{abstract}
-
-\section{Goals}
-The main goals of a test suite for sdcc are
-\begin{enumerate}
-    \item To allow developers to run regression tests to check that
-core changes do not break any of the many ports.
-    \item To verify the core.
-    \item To allow developers to verify individual ports.
-    \item To allow developers to test port changes.
-\end{enumerate}
-
-This design only covers the generated code.  It does not cover a
-test/unit test framework for the sdcc application itself, which may be
-useful.
-
-One side effect of (1) is that it requires that the individual ports
-pass the tests originally.  This may be too hard.  See the section on
-Exceptions below.
-
-\section{Requirements}
-\subsection{Coverage}
-The suite is intended to cover language features only.  Hardware
-specific libraries are explicitly not covered.
-
-\subsection{Permutations}
-The ports often generate different code for handling different types
-(Byte, Word, DWord, and the signed forms).  Meta information
-could be used to permute the different test cases across the different
-types.
-
-\subsection{Exceptions}
-The different ports are all at different levels of development.  Test
-cases must be able to be disabled on a per port basis.  Permutations
-also must be able to be disabled on a port level for unsupported
-cases.  Disabling, as opposed to enabling, on a per port basis seems
-more maintainable.
-
-\subsection{Running}
-The tests must be able to run unaided.  The test suite must run on all
-platforms that sdcc runs on.  A good minimum may be a subset of Unix
-command set and common tools, provided by default on a Unix host and
-provided through cygwin on a Windows host.
-
-The tests suits should be able to be sub-divided, so that the failing
-or interesting tests may be run separately.
-
-\subsection{Artifcats}
-The test code within the test cases should not generate artifacts.  An
-artifact occurs when the test code itself interferes with the test and
-generates an erroneous result.
-
-\subsection{Emulators}
-sdcc is a cross compiling compiler.  As such, an emulator is needed
-for each port to run the tests.
-
-\section{Existing works}
-\subsection{DejaGnu}
-DejaGnu is a toolkit written in Expect designed to test an interactive
-program.  It provides a way of specifying an interface to the program,
-and given that interface a way of stimulating the program and
-interpreting the results.  It was originally written by Cygnus
-Solutions for running against development boards.  I believe the gcc
-test suite is written against DejaGnu, perhaps partly to test the
-Cygnus ports of gcc on target systems.
-
-\subsection{gcc test suite}
-I don't know much about the gcc test suite.  It was recently removed
-from the gcc distribution due to issues with copyright ownership.  The
-code I saw from older distributions seemed more concerned with
-esoteric features of the language.
-
-\subsection{xUnit}
-The xUnit family, in particular JUnit, is a library of in test
-assertions, test wrappers, and test suite wrappers designed mainly for
-unit testing.  PENDING: More.
-
-\subsection{CoreLinux++ Assertion framework}
-While not a test suite system, the assertion framework is an
-interesting model for the types of assertions that could be used.
-They include pre-condition, post-condition, invariants, conditional
-assertions, unconditional assertions, and methods for checking
-conditions.
-
-\section{Specification}
-This specification borrows from the JUnit style of unit testing and
-the CoreLinux++ style of assertions.  The emphasis is on
-maintainability and ease of writing the test cases.
-
-\subsection{Terms}
-PENDING: Align these terms with the rest of the world.
-
-\begin{itemize}
-    \item An \emph{assertion} is a statement of how things should be.
-PENDING: Better description, an example.
-    \item A \emph{test point} is the smallest unit of a test suite,
-and consists of a single assertion that passes if the test passes.
-    \item A \emph{test case} is a set of test points that test a
-certain feature.
-    \item A \emph{test suite} is a set of test cases that test a
-certain set of features.
-\end{itemize}
-
-\subsection{Test cases}
-Test cases shall be contained in their own C file, along with the meta
-data on the test.  Test cases shall be contained within functions
-whose names start with 'test' and which are descriptive of the test
-case.  Any function that starts with 'test' will be automatically run in
-the test suite.
-
-To make the automatic code generation easier, the C code shall have
-this format
-\begin{itemize}
-    \item Test functions shall start with 'test' to allow
-automatic detection.
-    \item Test functions shall follow the K\&R intention style for ease
-of detection.  i.e. the function name shall start in the left
-column on a new line below the return specification.
-\end{itemize}
-
-\subsection{Assertions}
-All assertions shall log the line number, function name, and test
-case file when they fail.  Most assertions can have a more descriptive
-message attached to them.  Assertions will be implemented through
-macros to get at the line information.  This may cause trouble with
-artifacts.
-
-The following definitions use C++ style default arguments where
-optional messages may be inserted.  All assertions use double opening
-and closing brackets in the macros to allow them to be compiled out
-without any side effects.  While this is not required for a test
-suite, they are there in case any of this code is incorporated into the
-main product.
-
-Borrowing from JUnit, the assertions shall include
-\begin{itemize}
-    \item FAIL((String msg = ``Failed'')).  Used when execution should
-not get here.
-    \item ASSERT((Boolean cond, String msg = ``Assertion failed'').
-Fails if cond is false.  Parent to REQUIRE and ENSURE.
-\end{itemize}
-
-JUnit also includes may sub-cases of ASSERT, such as assertNotNull,
-assertEquals, and assertSame.
-
-CoreLinux++ includes the extra assertions
-\begin{itemize}
-    \item REQUIRE((Boolean cond, String msg = ``Precondition
-failed'').  Checks preconditions.
-    \item ENSURE((Boolean cond, String msg = ``Postcondition
-failed'').  Checks post conditions.
-    \item CHECK((Boolean cond, String msg = ``Check failed'')).  Used
-to call a function and to check that the return value is as expected.
-i.e.  CHECK((fread(in, buf, 10) != -1)).  Very similar to ASSERT, but
-the function still gets called in a release build.
-    \item FORALL and EXISTS.  Used to check conditions within part of
-the code.  For example, can be used to check that a list is still
-sorted inside each loop of a sort routine.
-\end{itemize}
-
-All of FAIL, ASSERT, REQUIRE, ENSURE, and CHECK shall be available.
-
-\subsection{Meta data}
-PENDING:  It's not really meta data.
-
-Meta data includes permutation information, exception information, and
-permutation exceptions.
-
-Meta data shall be global to the file.  Meta data names consist of the
-lower case alphanumerics.  Test case specific meta data (fields) shall
-be stored in a comment block at the start of the file.  This is only
-due to style.  
-
-A field definition shall consist of
-\begin{itemize}
-    \item The field name
-    \item A colon.
-    \item A comma separated list of values.
-\end{itemize}
-
-The values shall be stripped of leading and trailing white space.
-
-Permutation exceptions are by port only.  Exceptions to a field are
-specified by a modified field definition.  An exception definition
-consists of 
-
-\begin{itemize}
-    \item The field name.
-    \item An opening square bracket.
-    \item A comma separated list of ports the exception applies for.
-    \item A closing square bracket.
-    \item A colon.
-    \item The values to use for this field for these ports.
-\end{itemize}
-
-An instance of the test case shall be generated for each permutation
-of the test case specific meta data fields.
-
-The runtime meta fields are
-\begin{itemize}
-    \item port - The port this test is running on.
-    \item testcase - The name of this test case.
-    \item function - The name of the current function.
-\end{itemize}
-
-Most of the runtime fields are not very usable.  They are there for
-completeness.
-
-Meta fields may be accessed inside the test case by enclosing them in
-curly brackets.  The curly brackets will be interpreted anywhere
-inside the test case, including inside quoted strings.  Field names that
-are not recognised will be passed through including the brackets.
-Note that it is therefore impossible to use some strings within the
-test case.
-
-Test case function names should include the permuted fields in the
-name to reduce name collisions.
-
-\subsection{An example}
-I don't know how to do pre-formatted text in \LaTeX.  Sigh.
-
-The following code generates a simple increment test for all combinations of the
-storage classes and all combinations of the data sizes.  This is a
-bad example as the optimiser will often remove most of this code.
-
-\tt{
-/** Test for increment. 
-    type: char, int, long
-
-    Z80 port does not fully support longs (4 byte)
-
-    type[z80]: char, int   
-
-
-    class: ``'', register, static
-*/
-
-static void
-
-testInc\{class\}\{types\}(void)
-
-\{
-
-    \{class\} \{type\} i = 0;
-    
-    i = i + 1;
-
-    ASSERT((i == 1));
-
-\}
-
-}
-
-\end{document}