#include "common.h"
#include "main.h"
#include "ralloc.h"
+#include "device.h"
+#include "SDCCutil.h"
//#include "gen.h"
return 1;
}
+static int
+_process_pragma(const char *sz)
+{
+ static const char *WHITE = " \t";
+ char *ptr = strtok((char *)sz, WHITE);
+
+ if (startsWith (ptr, "memmap"))
+ {
+ char *start;
+ char *end;
+ char *type;
+ char *alias;
+
+ start = strtok((char *)NULL, WHITE);
+ end = strtok((char *)NULL, WHITE);
+ type = strtok((char *)NULL, WHITE);
+ alias = strtok((char *)NULL, WHITE);
+
+ if (start != (char *)NULL
+ && end != (char *)NULL
+ && type != (char *)NULL) {
+ value *startVal = constVal(start);
+ value *endVal = constVal(end);
+ value *aliasVal;
+ memRange r;
+
+ if (alias == (char *)NULL) {
+ aliasVal = constVal(0);
+ } else {
+ aliasVal = constVal(alias);
+ }
+
+ r.start_address = (int)floatFromVal(startVal);
+ r.end_address = (int)floatFromVal(endVal);
+ r.alias = (int)floatFromVal(aliasVal);
+ r.bank = (r.start_address >> 7) & 3;
+
+ if (strcmp(type, "RAM") == 0) {
+ addMemRange(&r, 0);
+ } else if (strcmp(type, "SFR") == 0) {
+ addMemRange(&r, 1);
+ } else {
+ return 1;
+ }
+ }
+
+ return 0;
+ } else if (startsWith (ptr, "maxram")) {
+ char *maxRAM = strtok((char *)NULL, WHITE);
+
+ if (maxRAM != (char *)NULL) {
+ int maxRAMaddress;
+ value *maxRAMVal;
+
+ maxRAMVal = constVal(maxRAM);
+ maxRAMaddress = (int)floatFromVal(maxRAMVal);
+ setMaxRAM(maxRAMaddress);
+ }
+
+ return 0;
+ }
+ return 1;
+}
+
static bool
_pic14_parseOptions (int *pargc, char **argv, int *i)
{
}
fprintf (of, "\tlist\tp=%s\n",&name[1]);
- fprintf (of, "\t__config _wdt_off\n");
+ fprintf (of, "\tradix dec");
fprintf (of, "\ninclude \"%s.inc\"\n",name);
}
static bool
_hasNativeMulFor (iCode *ic, sym_link *left, sym_link *right)
{
+/*
sym_link *test = NULL;
value *val;
+*/
fprintf(stderr,"checking for native mult\n");
*/
static const char *_linkCmd[] =
{
- "aslink", "-nf", "$1", NULL
+ "gplink", "", "\"$1.o\"", NULL
};
-/* Sigh. This really is not good. For now, I recommend:
- * sdcc -S -mpic14 file.c
- * the -S option does not compile or link
- */
static const char *_asmCmd[] =
{
- "gpasm", "-c -I /usr/local/share/gpasm/header", "$1.asm", NULL
+ "gpasm", "-c", "\"$1.asm\"", NULL
};
TARGET_ID_PIC,
"pic14",
"MCU pic", /* Target name */
- "p16f877", /* Processor */
+ "", /* Processor */
{
TRUE, /* Emit glue around main */
MODEL_SMALL | MODEL_LARGE | MODEL_FLAT24,
_linkCmd,
NULL,
NULL,
- ".rel"
+ ".o"
},
{
_defaultRules
},
{
/* Sizes: char, short, int, long, ptr, fptr, gptr, bit, float, max */
- 1, 2, 2, 4, 1, 2, 1, 1, 4, 4
+ 1, 2, 2, 4, 2, 2, 2, 1, 4, 4
/* TSD - I changed the size of gptr from 3 to 1. However, it should be
2 so that we can accomodate the PIC's with 4 register banks (like the
16f877)
{
"XSEG (XDATA)",
"STACK (DATA)",
- "CSEG (CODE)",
+ "code",
"DSEG (DATA)",
"ISEG (DATA)",
"XSEG (XDATA)",
"BSEG (BIT)",
"RSEG (DATA)",
"GSINIT (CODE)",
- "OSEG (OVR,DATA)",
+ "udata_ovr",
"GSFINAL (CODE)",
"HOME (CODE)",
NULL, // xidata
NULL, // _pic14_genXINIT
_pic14_reset_regparm,
_pic14_regparm,
- NULL,
+ _process_pragma, /* process a pragma */
NULL,
_hasNativeMulFor,
FALSE,