(memRange *)NULL,
(memRange *)NULL,
0,
- 0xcf,
+ 0x4f, /* 68 register available 0x0C to 0x4F (0x8C to 0xCF mapped to bank 0) */
0x80,
},
static int num_of_supported_PICS = sizeof(Pics)/sizeof(PIC_device);
-#define DEFAULT_PIC "f877"
-
static PIC_device *pic=NULL;
AssignedMemory *finalMapping=NULL;
static unsigned int config_word = DEFAULT_CONFIG_WORD;
+extern void emitSymbolToFile (FILE *of, const char *name, int size);
+
void addMemRange(memRange *r, int type)
{
int i;
for(i=0; i<=pic->maxRAMaddress; i++) {
finalMapping[i].reg = NULL;
finalMapping[i].isValid = 0;
+ finalMapping[i].bank = (i>>7);
}
}
} else {
if(start>=0) {
- /* clear the lower 7-bits of the start address of the first
- * variable declared in this bank. The upper bits for the mid
- * range pics are the bank select bits.
+ /* clear the lower 7-bits of the start address of the first
+ * variable declared in this bank. The upper bits for the mid
+ * range pics are the bank select bits.
*/
bank_base = start & 0xfff8;
finalMapping[start].reg->address+i);
}
} else {
+ emitSymbolToFile (of, finalMapping[start].reg->name, finalMapping[start].reg->size);
+#if 0
fprintf(of,"%s\tres\t%i\n",
finalMapping[start].reg->name,
finalMapping[start].reg->size);
+#endif
}
finalMapping[start].reg->isEmitted = 1;
}
for (reg = setFirstItem(regset) ; reg ;
reg = setNextItem(regset)) {
- //fprintf(stdout,"assigning %s isFixed=%d, wasUsed=%d\n",reg->name,reg->isFixed,reg->wasUsed);
+ //fprintf(stdout,"assigning %s (%d) isFixed=%d, wasUsed=%d\n",reg->name,reg->size,reg->isFixed,reg->wasUsed);
- if((!reg->isFixed) && ( used || reg->wasUsed)) {
+ if((!reg->isExtern) && (!reg->isFixed) && ( used || reg->wasUsed)) {
/* If register have been reused then shall not print it a second time. */
set *s;
int done = 0;
*-----------------------------------------------------------------*/
void setDefMaxRam(void)
{
- setMaxRAM(pic->defMaxRAMaddrs); // Max RAM has not been included, so use default setting
+ unsigned i;
+ setMaxRAM(pic->defMaxRAMaddrs); /* Max RAM has not been included, so use default setting */
+ /* Validate full memory range for use by general purpose RAM */
+ for (i=pic->defMaxRAMaddrs; i--; ) {
+ finalMapping[i].bank = (i>>7);
+ finalMapping[i].isValid = 1;
+ }
+}
+
+/*-----------------------------------------------------------------*
+*
+*-----------------------------------------------------------------*/
+unsigned getMaxRam(void)
+{
+ return pic->defMaxRAMaddrs;
}