Imported Upstream version 2.9.0
[debian/cc1111] / src / pic16 / NOTES
1 NOTES file for SDCC pic16 port
2 $Id: NOTES 4121 2006-04-24 20:29:10Z bernhardheld $
3
4 Current pic16 port status is: Development
5
6 Some things may change without notification between port updates. The latest
7 SVN snapshot is guarenteed to compile without problems, but does not
8 guarantee backwards compatibility.
9
10 For any questions please ask the current port
11 developers.
12
13 Current developer:
14 Raphael Neider  <rneider AT web.de>
15
16 Other people to contact:
17 Vangelis Rokas  <vrokas AT users.sourceforge.net>
18 Scott Dattalo   <scott AT dattalo.com>
19
20 ======================================================================
21 ======================================================================
22 2006-Mar-14 Vangelis Rokas
23 1. Added enviroment variable 'PIC16_PACKED_BITFIELDS' which agressively
24 packs bitfields in structures
25
26 2005-Mar-23 Vangelis Rokas
27 1. I have added some optimizations that are controlled via enviroment
28 variables to allow checking. Later these will be either enabled globally
29 or controlled by command line options. The variables are:
30         a. OPTIMIZE_BITFIELD_POINTER_GET : optimizes bit field pointer reads
31
32         b. NO_REG_OPT : there is no register optimization performed by pCode
33                         optimizer
34
35
36
37 2004-Oct-29 Vangelis Rokas
38 1. Function parameters are passed now all via stack. This might
39 lower performance, but some issues are solved this way. Later
40 we can enable passing through WREG,PRODL,PRODH,FSR0L by implementing
41 specific pragmas
42
43
44 2004-Sep-27 Vangelis Rokas
45 1. Function parameters have been extended to cover functions with
46 variable arguments. Now function parameters follow the rules below:
47
48   a) void foo(long a, int b, char c)
49      void foo(long a, int b, char c) reentrant
50
51 Stack layout: c, b+1, b, a+3, a+2, a+1 and WREG = a
52
53   b) prototype: void foo(long a, int b, ...)
54
55         example: foo(0xaaffeedd, 0xbbcc, 0x4455, 0x7788);
56
57 Stack layout: 0x77, 0x88, 0x44, 0x55, 0xbb, 0xcc, 0xaa, 0xff, 0xee, 0xdd
58
59 WREG is not used in functions with variable arguments so that the address
60 of the first parameter can be taken.
61
62
63
64
65 2004-Sep-24 Vangelis Rokas
66 1. Began implementation of generic pointers, current specs are:
67         0x0 xxxxxxx -> code pointer
68         0x8 xxxxxxx -> data pointer
69         0x4 xxxxxxx -> eeprom pointer (currently unimplemented)
70
71
72 2004-Aug-30 Vangelis Rokas
73 1. A few months ago Hans Dorn had the idea to support general pointer
74 for accessing all code, eeprom data and data ram memory. These pointers
75 would have 3 bytes of size (24-bits), of which only the 21 lower bits
76 would be useful. The rest of them could be used to indicate the pointer
77 type. I.e.
78 0x4xxxxxxx would mean code pointer
79 0x8xxxxxxx would mean eeprom pointer
80 0xcxxxxxxx would mean data ram pointer
81
82 The implementatio of such pointers needs a lot of work and general
83 reform of pointer access, data initializing functions and the writing
84 of support functions for decoding their type.
85
86 The implementation of such pointers along with the implementation of
87 a more SDCC like stack access system will allow the writing of variable
88 arguments functions like printf etc... Also one set of functions will be
89 able to handle all data types without having to worry about where they
90 are placed.
91
92
93 2004-May-23 Vangelis Rokas
94
95 1. The improvement of the port has been stalled a bit. But, struct/union
96 SFR headers are ready for the PIC18F[45][45][28] chips along with their
97 respective sources.
98
99 2. The genCmp function should be rewritten from scratch.
100
101 3. The internal helper functions for char/int/long/float arithmetic
102 now compile and will be placed in the appropriate directory under device/
103
104
105
106 2004-Feb-20 Vangelis Rokas
107 Major update with many bugfixes.
108
109 1. The most of the pic16 regression tests (former pic regression tests) pass
110 successfully. Many thanks to Hans Dorn who did a great job with the
111 arithmetic, shift and pointer functions.
112
113 2. Bit fields now work properly.
114
115 3. Stack is permanently enabled. Command argument -pstack-enable is deleted
116 and no more recognized by the port.
117
118
119 2004-Feb-07 Vangelis Rokas
120
121 1. Fixed a bug so that compiler allocated internal registered, will
122 be shared along multiple sources via '.registers' section placed
123 in absolute data memory address 0x0000. Registers 0x00 to 0x7f are
124 considered as internal since they can be used for fast access.
125
126
127
128 2004-Jan-11 Vangelis Rokas
129
130 1. Compiling
131 The current release of the port can produce object code which is not
132 completely bug free. To use the new features the user should enable them via
133 command line arguments. A sane set of command arguments that I use to test
134 programs is:
135
136 - debug options
137         --debug         enable sdcc debug information
138         --debug-xtra    enable pic16 port debug information (most useful)
139         --debug-ralloc  enable register allocator debug messages
140         --pcode-verbose enable verbose pcode generator messages
141
142 - port options
143         --pno-banksel   disable banksel directives for the assembler
144         --pomit-config-words    does not emit configuration instruction in
145                         the translation This is useful when copmiling
146                         multiple sources, when you do not want multiple
147                         config instructions in the end file
148         --pomit-ivt     disables the dumping of the interrupt vector tables
149                         in the translation for the same reasons as above
150         --penable-stack enables stack support. This option uses stack to
151                         pass function arguments, and reuses registers between
152                         functions by saving the registers used in the function
153                         on the stack
154
155 - compiler options
156         --all-callee-saves      you may omit this options as the port
157                         enables it by default, all functions are currently
158                         compiled as reentrant and they are marked as
159                         callee-saves
160         --no-peep       peephole optimizer is better to be switched off,
161                         because it behaves strangely in some cases
162         --fommit-frame-pointer  this omits frame pointer in functions that
163                         don't use registers (maybe changed later, not
164                         important)
165
166
167 2. Functions
168 The current implementation puts every function in its own code section in
169 PIC's program memory. This may not be the standard, but I think its more
170 flexible.
171
172 3. Pragmas
173 Since SDCC is goind for a release, its better to document pragmas available.
174
175 3.1. code
176 The 'code' pragma emits a function's code at a specific address in program
177 memory. Currently it is only used for functions.
178 Syntax:
179 #pragma code [function_name] [address]
180
181 3.2. stack
182 The 'stack' pragma initializes the stack/frame pointer at an address of the
183 data ram other than the default (which is the end of the available data ram)
184 Synatx:
185 #pragma stack [address]
186
187 3.3. maxram
188 The 'maxram' pragma sets maximum data ram of the device. Currently is not
189 used at all, but it may be useful in the future when devices with external
190 memory will be supported.
191 Syntax:
192 #pragma maxram [max_address]
193
194
195 4. Internal compiler functions
196 Internal SDCC functions like, __fsmul, etc... are currently supported by the
197 port, but the libraries for the pic16 port are not yet ready. So one cannot
198 use long and float variables.
199
200
201 5. Special Function Registers (SFRs)
202 The processor SFRs are not anymore declared in any header file. The user can
203 define by himself all the needed SFR's. The code to that is:
204
205 sfr at [sfr_address] [sfr_name];
206
207 Where sfr_address is the SFR address in the data ram, and sfr_name is the
208 name of the SFR. i.e.:
209
210 sfr at 0xf80 PORTA;