* src/SDCCmain.c (linkEdit): modifications only for pic16 port,
[fw/sdcc] / src / pic16 / device.h
index 62c5fef2503ad906f0f7f0358bdcde6604d0e4f7..8c387a82bda910c34348119f30660da5abba1d00 100644 (file)
 #define STRCASECMP strcasecmp
 #endif
 
+#define CONFIGURATION_WORDS    20
+#define IDLOCATION_BYTES       20
+
+typedef struct {
+       int sfrLoAddr;
+       int sfrHiAddr;
+} sfrRangeInfo_t;
+       
+
+typedef struct {
+       int mask;
+       int emit;
+       int value;
+} configRegInfo_t;
+
+typedef struct {
+       int confAddrStart;      /* starting address */
+       int confAddrEnd;        /* ending address */
+       configRegInfo_t crInfo[ CONFIGURATION_WORDS ];
+} configWordsInfo_t;
+
+typedef struct {
+       unsigned char emit;
+       unsigned char value;
+} idRegInfo_t;
+
+typedef struct {
+       int idAddrStart;        /* starting ID address */
+       int idAddrEnd;          /* ending ID address */
+       idRegInfo_t irInfo[ IDLOCATION_BYTES ];
+} idBytesInfo_t;
+
 
 #define PROCESSOR_NAMES    4
 /* Processor unique attributes */
 typedef struct PIC16_device {
   char *name[PROCESSOR_NAMES];/* aliases for the processor name */
 
-  int maxRAMaddress;          /* maximum value for a data address */
-  int bankMask;               /* Bitmask that is ANDed with address to extract banking bits */
-  int RAMsize;               /* size of Data RAM - VR 031120 */
-  int extMIface;               /* device has external memory interface */
+  int maxRAMaddress;           /* maximum value for a data address */
+  int RAMsize;                 /* size of Data RAM - VR 031120 */
+  int acsSplitOfs;             /* access bank split offset */
+  int extMIface;               /* device has external memory interface */
+  sfrRangeInfo_t sfrRange;     /* SFR range */
+  configWordsInfo_t cwInfo;    /* configuration words info */
+  idBytesInfo_t idInfo;                /* ID Locations info */
 } PIC16_device;
 
 /* Given a pointer to a register, this macro returns the bank that it is in */
@@ -56,28 +91,35 @@ typedef struct PIC16_device {
 
 
 typedef struct {
-       int gen_banksel;
+       int no_banksel;
        int opt_banksel;
        int omit_configw;
        int omit_ivt;
        int leave_reset;
        int stack_model;
+       int ivt_loc;
+       int nodefaultlibs;
+       int dumpcalltree;
 } pic16_options_t;
 
 #define STACK_MODEL_SMALL      (pic16_options.stack_model == 0)
 #define STACK_MODEL_LARGE      (pic16_options.stack_model == 1)
 
-extern set *idataSymSet;
+extern set *fix_idataSymSet;
+extern set *rel_idataSymSet;
 
 extern pic16_options_t pic16_options;
 extern PIC16_device *pic16;
 
 /****************************************/
 void pic16_assignConfigWordValue(int address, int value);
-int pic16_getConfigWord(int address);
+void pic16_assignIdByteValue(int address, char value);
 int pic16_isREGinBank(regs *reg, int bank);
 int pic16_REGallBanks(regs *reg);
 void pic16_setMaxRAM(int size);
+int PIC16_IS_CONFIG_ADDRESS(int address);
+int PIC16_IS_IDLOC_ADDRESS(int address);
+int PIC16_IS_HWREG_ADDRESS(int address);
 
 int checkAddReg(set **set, regs *reg);
 int checkAddSym(set **set, symbol *reg);