do {
for (i=r->start_address; i<= r->end_address; i++) {
- if (i <= pic->maxRAMaddress) {
+ if ((i|alias) <= pic->maxRAMaddress) {
finalMapping[i | alias].isValid = 1;
finalMapping[i | alias].alias = r->alias;
finalMapping[i | alias].bank = r->bank;
} else {
finalMapping[i | alias].isSFR = 0;
}
+ } else {
+ fprintf(stderr, "WARNING: %s:%s memory at 0x%x is beyond max ram = 0x%x\n",
+ __FILE__,__FUNCTION__,(i|alias), pic->maxRAMaddress);
}
}
}
-void dump_cblock(FILE *of)
+void dump_sfr(FILE *of)
{
+
int start=-1;
int addr=0;
int bank_base;
+ static int udata_flag=0;
//dump_map(); /* display the register map */
-
+ //fprintf(stdout,";dump_sfr \n");
if (pic->maxRAMaddress < 0) {
fprintf(stderr, "missing \"#pragma maxram\" setting\n");
return;
* assumes that the first register in the contiguous group
* of registers represents the bank for the whole group */
- fprintf(of," cblock 0X%04X\t; Bank %d\n",start,finalMapping[start].bank);
+ if ( (start != addr) && (!udata_flag) ) {
+ udata_flag = 1;
+ //fprintf(of,"\tudata\n");
+ }
for( ; start < addr; start++) {
- if((finalMapping[start].reg) && !finalMapping[start].reg->isEmitted ) {
- fprintf(of,"\t%s",finalMapping[start].reg->name);
-
- /* If this register is aliased in multiple banks, then
- * mangle the variable name with the alias address: */
- if(finalMapping[start].alias & start)
- fprintf(of,"_%x",bank_base);
+ if((finalMapping[start].reg) &&
+ (!finalMapping[start].reg->isEmitted) &&
+ (!finalMapping[start].instance) &&
+ (!finalMapping[start].isSFR)) {
- if(finalMapping[start].instance)
- fprintf(of,"_%d",finalMapping[start].instance);
+ fprintf(of,"%s\tres\t%i\n",
+ finalMapping[start].reg->name,
+ finalMapping[start].reg->size);
-
- fputc('\n',of);
-
- //finalMapping[start].reg->isEmitted = 1;
+ finalMapping[start].reg->isEmitted = 1;
}
}
- fprintf(of," endc\n");
-
start = -1;
}
}
+/*-----------------------------------------------------------------*
+ *-----------------------------------------------------------------*/
int validAddress(int address, int reg_size)
{
int i;
fprintf(stderr, "missing \"#pragma maxram\" setting\n");
return 0;
}
-
+ // fprintf(stderr, "validAddress: Checking 0x%04x\n",address);
if(address > pic->maxRAMaddress)
return 0;
return 1;
}
+/*-----------------------------------------------------------------*
+ *-----------------------------------------------------------------*/
void mapRegister(regs *reg)
{
} while (alias>=0);
}
- // fprintf(stderr,"%s - %s addr = 0x%03x, size %d\n",__FUNCTION__,reg->name, reg->address,reg->size);
+ //fprintf(stderr,"%s - %s addr = 0x%03x, size %d\n",__FUNCTION__,reg->name, reg->address,reg->size);
reg->isMapped = 1;
}
+/*-----------------------------------------------------------------*
+ *-----------------------------------------------------------------*/
int assignRegister(regs *reg, int start_address)
{
int i;
if(reg->isFixed) {
if (validAddress(reg->address,reg->size)) {
- fprintf(stderr,"%s - %s address = 0x%03x\n",__FUNCTION__,reg->name, reg->address);
+ //fprintf(stderr,"%s - %s address = 0x%03x\n",__FUNCTION__,reg->name, reg->address);
mapRegister(reg);
return reg->address;
}
mapRegister(reg);
return reg->address;
}
- fprintf(stderr, "WARNING: Ignoring Out of Range register assignment at fixed address %d, %s\n",
- reg->address, reg->name);
+
+ //fprintf(stderr, "WARNING: Ignoring Out of Range register assignment at fixed address %d, %s\n",
+ // reg->address, reg->name);
} else {
}
}
- fprintf(stderr, "WARNING: No more RAM available\n");
+ fprintf(stderr, "WARNING: No more RAM available for %s\n",reg->name);
}
return -1;
}
+/*-----------------------------------------------------------------*
+ *-----------------------------------------------------------------*/
void assignFixedRegisters(set *regset)
{
regs *reg;
}
+/*-----------------------------------------------------------------*
+ *-----------------------------------------------------------------*/
void assignRelocatableRegisters(set *regset, int used)
{