1 NOTES file for SDCC pic16 port
4 Current pic16 port status is: Development
6 Some things may change without notification between port updates. The latest
7 CVS snapshot is guarenteed to compile without problems, but does not
8 guarantee backwards compatibility.
10 For any questions please ask the current port
14 Vangelis Rokas <vrokas AT otenet.gr>
16 Other people to contact:
17 Scott Dattalo <scott AT dattalo.com>
19 ======================================================================
20 ======================================================================
21 2004-Oct-29 Vangelis Rokas
22 1. Function parameters are passed now all via stack. This might
23 lower performance, but some issues are solved this way. Later
24 we can enable passing through WREG,PRODL,PRODH,FSR0L by implementing
28 2004-Sep-27 Vangelis Rokas
29 1. Function parameters have been extended to cover functions with
30 variable arguments. Now function parameters follow the rules below:
32 a) void foo(long a, int b, char c)
33 void foo(long a, int b, char c) reentrant
35 Stack layout: c, b+1, b, a+3, a+2, a+1 and WREG = a
37 b) prototype: void foo(long a, int b, ...)
39 example: foo(0xaaffeedd, 0xbbcc, 0x4455, 0x7788);
41 Stack layout: 0x77, 0x88, 0x44, 0x55, 0xbb, 0xcc, 0xaa, 0xff, 0xee, 0xdd
43 WREG is not used in functions with variable arguments so that the address
44 of the first parameter can be taken.
49 2004-Sep-24 Vangelis Rokas
50 1. Began implementation of generic pointers, current specs are:
51 0x0 xxxxxxx -> code pointer
52 0x8 xxxxxxx -> data pointer
53 0x4 xxxxxxx -> eeprom pointer (currently unimplemented)
56 2004-Aug-30 Vangelis Rokas
57 1. A few months ago Hans Dorn had the idea to support general pointer
58 for accessing all code, eeprom data and data ram memory. These pointers
59 would have 3 bytes of size (24-bits), of which only the 21 lower bits
60 would be useful. The rest of them could be used to indicate the pointer
62 0x4xxxxxxx would mean code pointer
63 0x8xxxxxxx would mean eeprom pointer
64 0xcxxxxxxx would mean data ram pointer
66 The implementatio of such pointers needs a lot of work and general
67 reform of pointer access, data initializing functions and the writing
68 of support functions for decoding their type.
70 The implementation of such pointers along with the implementation of
71 a more SDCC like stack access system will allow the writing of variable
72 arguments functions like printf etc... Also one set of functions will be
73 able to handle all data types without having to worry about where they
77 2004-May-23 Vangelis Rokas
79 1. The improvement of the port has been stalled a bit. But, struct/union
80 SFR headers are ready for the PIC18F[45][45][28] chips along with their
83 2. The genCmp function should be rewritten from scratch.
85 3. The internal helper functions for char/int/long/float arithmetic
86 now compile and will be placed in the appropriate directory under device/
90 2004-Feb-20 Vangelis Rokas
91 Major update with many bugfixes.
93 1. The most of the pic16 regression tests (former pic regression tests) pass
94 successfully. Many thanks to Hans Dorn who did a great job with the
95 arithmetic, shift and pointer functions.
97 2. Bit fields now work properly.
99 3. Stack is permanently enabled. Command argument -pstack-enable is deleted
100 and no more recognized by the port.
103 2004-Feb-07 Vangelis Rokas
105 1. Fixed a bug so that compiler allocated internal registered, will
106 be shared along multiple sources via '.registers' section placed
107 in absolute data memory address 0x0000. Registers 0x00 to 0x7f are
108 considered as internal since they can be used for fast access.
112 2004-Jan-11 Vangelis Rokas
115 The current release of the port can produce object code which is not
116 completely bug free. To use the new features the user should enable them via
117 command line arguments. A sane set of command arguments that I use to test
121 --debug enable sdcc debug information
122 --debug-xtra enable pic16 port debug information (most useful)
123 --debug-ralloc enable register allocator debug messages
124 --pcode-verbose enable verbose pcode generator messages
127 --pno-banksel disable banksel directives for the assembler
128 --pomit-config-words does not emit configuration instruction in
129 the translation This is useful when copmiling
130 multiple sources, when you do not want multiple
131 config instructions in the end file
132 --pomit-ivt disables the dumping of the interrupt vector tables
133 in the translation for the same reasons as above
134 --penable-stack enables stack support. This option uses stack to
135 pass function arguments, and reuses registers between
136 functions by saving the registers used in the function
140 --all-callee-saves you may omit this options as the port
141 enables it by default, all functions are currently
142 compiled as reentrant and they are marked as
144 --no-peep peephole optimizer is better to be switched off,
145 because it behaves strangely in some cases
146 --fommit-frame-pointer this omits frame pointer in functions that
147 don't use registers (maybe changed later, not
152 The current implementation puts every function in its own code section in
153 PIC's program memory. This may not be the standard, but I think its more
157 Since SDCC is goind for a release, its better to document pragmas available.
160 The 'code' pragma emits a function's code at a specific address in program
161 memory. Currently it is only used for functions.
163 #pragma code [function_name] [address]
166 The 'stack' pragma initializes the stack/frame pointer at an address of the
167 data ram other than the default (which is the end of the available data ram)
169 #pragma stack [address]
172 The 'maxram' pragma sets maximum data ram of the device. Currently is not
173 used at all, but it may be useful in the future when devices with external
174 memory will be supported.
176 #pragma maxram [max_address]
179 4. Internal compiler functions
180 Internal SDCC functions like, __fsmul, etc... are currently supported by the
181 port, but the libraries for the pic16 port are not yet ready. So one cannot
182 use long and float variables.
185 5. Special Function Registers (SFRs)
186 The processor SFRs are not anymore declared in any header file. The user can
187 define by himself all the needed SFR's. The code to that is:
189 sfr at [sfr_address] [sfr_name];
191 Where sfr_address is the SFR address in the data ram, and sfr_name is the
192 name of the SFR. i.e.: