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__ */