new option -o
[fw/sdcc] / src / pic / device.h
index 2d2a06323f4c4d1cde7bddf70d0b5c5511acf762..8ee30e43846061ab580ecf442df1db381438df56 100644 (file)
@@ -79,19 +79,25 @@ typedef struct PIC_device {
   memRange *ram;              /* RAM memory map */
   memRange *sfr;              /* SFR memory map */
 
-  int maxRAMaddress;         /* maximum value for a data address */
+  int maxRAMaddress;          /* maximum value for a data address */
+  int bankMask;               /* Bitmask that is ANDed with address to extract banking bits */
   //  int hasAliasedRAM:1;        /* True if there are bank independent registers */
 
 } PIC_device;
 
 /* Given a pointer to a register, this macro returns the bank that it is in */
-#define REG_BANK(r)        (finalMapping[(r)->address].bank)
-#define REG_isALIASED(r)   (finalMapping[(r)->address].alias != 0)
-#define REG_isVALID(r)     (finalMapping[(r)->address].isValid)
+#define REG_ADDR(r)        ((r)->isBitField ? (((r)->address)>>3) : (r)->address)
+#define REG_BANK(r)        (finalMapping[REG_ADDR(r)].bank)
+#define REG_isALIASED(r)   (finalMapping[REG_ADDR(r)].alias != 0)
+#define REG_isVALID(r)     (finalMapping[REG_ADDR(r)].isValid)
 
 
 /****************************************/
 void assignConfigWordValue(int address, int value);
 int getConfigWord(int address);
+int isREGinBank(regs *reg, int bank);
+int REGallBanks(regs *reg);
+void addMemRange(memRange *r, int type);
+void setMaxRAM(int size);
 
 #endif  /* __DEVICE_H__ */