X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fpic%2Fdevice.h;h=81dc90eacdf60714d9000dbe49e6031cc1fd9c99;hb=0782a3ad612a677a9d907d839cfc339b926e155f;hp=2d2a06323f4c4d1cde7bddf70d0b5c5511acf762;hpb=00fd360adb7e15e6fc2642a2038c2ec611cdc799;p=fw%2Fsdcc diff --git a/src/pic/device.h b/src/pic/device.h index 2d2a0632..81dc90ea 100644 --- a/src/pic/device.h +++ b/src/pic/device.h @@ -38,60 +38,58 @@ */ typedef struct memRange { - int start_address; /* first address in range */ - int end_address; /* last */ - int alias; /* bit mask defining how/if memory range is aliased - * e.g. alias = 0x80 means start_address is identical - * to the memory location at (0x80 | start_address) */ - int bank; /* PIC memory bank this range occupies */ + int start_address; /* first address in range */ + int end_address; /* last */ + int alias; /* bit mask defining how/if memory range is aliased + * e.g. alias = 0x80 means start_address is identical + * to the memory location at (0x80 | start_address) */ + int bank; /* PIC memory bank this range occupies */ + struct memRange *next; /* linked list */ } memRange; -/* AssignedMemory - A structure to keep track of the memory that has been used. - * - * When a register gets assigned an address this struct is used to - * keep track of a few details about the register. There is one of - * these structures for each memory location in the device. - */ - -typedef struct AssignedMemory { - regs *reg; /* Pointer to the register (NULL if this is an invalid address) */ - int instance; /* the i'th byte of a multibyte register */ - int alias; /* Bit mapping of aliased addresses (see memRange) */ - int bank; /* Memory bank of this register */ - int isValid:1; /* True if the address is legal */ - int isSFR:1; /* True if the address is that of a Special Function reg */ - int isEmitted:1; /* True if the register has been written to a cBlock */ - -} AssignedMemory; - - -/* - * finalMapping - Dynamically allocated array that records the register assignments - */ - -extern AssignedMemory *finalMapping; -#define PROCESSOR_NAMES 4 /* Processor unique attributes */ typedef struct PIC_device { - char *name[PROCESSOR_NAMES];/* aliases for the processor name */ - - memRange *ram; /* RAM memory map */ - memRange *sfr; /* SFR memory map */ - - int maxRAMaddress; /* maximum value for a data address */ - // int hasAliasedRAM:1; /* True if there are bank independent registers */ + char *name; /* the processor name */ + + memRange *ram; /* RAM memory map */ + memRange *sfr; /* SFR memory map */ + + int maxRAMaddress; /* maximum value for a data address */ + int defMaxRAMaddrs; /* default 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 */ + int hasSecondConfigReg; /* True if there is a second configuration register */ + + int programMemSize; /* program memory size in words - for device listing only */ + int dataMemSize; /* data (RAM) memory size in bytes - for device listing only */ + int eepromMemSize; /* EEPROM memory size in bytes - for device listing only */ + int ioPins; /* number of I/O pins - for device listing only */ } 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) /****************************************/ 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); +void setDefMaxRam(void); + +void pic14_assignConfigWordValue(int address, int value); +int pic14_emitConfigWord (FILE * vFile); +int pic14_getConfigWord(int address); + +unsigned pic14_getMaxRam(void); +int pic14_getHasSecondConfigReg(void); +int pic14_allRAMShared(void); +int pic14_hasSharebank(int *low, int *high, int *size); +int pic14_getSharedStack(int *low, int *high, int *size); +PIC_device * pic14_getPIC(void); #endif /* __DEVICE_H__ */