X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fds390%2Fmain.c;h=94fd18d4aa71f0aeebe559c7c8930829ea16a186;hb=b1176539b41432fec283cb2d21b77efda04b3780;hp=f22ce997e82d50a725d33571a4f16d1f41614896;hpb=0e52d476cf4c4e4100cff4a7c02ee67c3944b56d;p=fw%2Fsdcc diff --git a/src/ds390/main.c b/src/ds390/main.c index f22ce997..94fd18d4 100644 --- a/src/ds390/main.c +++ b/src/ds390/main.c @@ -39,6 +39,7 @@ static char *_ds390_keywords[] = "_xdata", "_pdata", "_idata", + "_naked", NULL }; @@ -86,37 +87,47 @@ _ds390_finaliseOptions (void) /* Hack-o-matic: if we are using the flat24 model, * adjust pointer sizes. */ - if (options.model != MODEL_FLAT24) - { + if (options.model != MODEL_FLAT24) { fprintf (stderr, - "*** error: ds390 port only supports the flat24 model.\n"); - exit (1); - } - port->s.fptr_size = 3; - port->s.gptr_size = 4; - port->stack.isr_overhead++; /* Will save dpx on ISR entry. */ -#if 1 - port->stack.call_overhead++; /* This acounts for the extra byte + "*** warning: ds390 port small and large model experimental.\n"); + if (options.model == MODEL_LARGE) + { + port->mem.default_local_map = xdata; + port->mem.default_globl_map = xdata; + } + else + { + port->mem.default_local_map = data; + port->mem.default_globl_map = data; + } + } + else { + port->s.fptr_size = 3; + port->s.gptr_size = 4; + + port->stack.isr_overhead++; /* Will save dpx on ISR entry. */ + + port->stack.call_overhead++; /* This acounts for the extra byte * of return addres on the stack. * but is ugly. There must be a * better way. */ -#endif - port->mem.default_local_map = xdata; - port->mem.default_globl_map = xdata; + port->mem.default_local_map = xdata; + port->mem.default_globl_map = xdata; - if (!options.stack10bit) + if (!options.stack10bit) { fprintf (stderr, "*** error: ds390 port only supports the 10 bit stack mode.\n"); } - /* Fixup the memory map for the stack; it is now in - * far space and requires a FPOINTER to access it. - */ - istack->fmap = 1; - istack->ptrType = FPOINTER; + /* Fixup the memory map for the stack; it is now in + * far space and requires a FPOINTER to access it. + */ + istack->fmap = 1; + istack->ptrType = FPOINTER; + } /* MODEL_FLAT24 */ } static void @@ -137,16 +148,15 @@ _ds390_getRegName (struct regs *reg) static void _ds390_genAssemblerPreamble (FILE * of) { - if (options.model == MODEL_FLAT24) - { - fputs (".flat24 on\t\t; 24 bit flat addressing\n", of); + if (options.model == MODEL_FLAT24) + fputs (".flat24 on\t\t; 24 bit flat addressing\n", of); + fputs ("dpx = 0x93\t\t; dpx register unknown to assembler\n", of); fputs ("dps = 0x86\t\t; dps register unknown to assembler\n", of); fputs ("dpl1 = 0x84\t\t; dpl1 register unknown to assembler\n", of); fputs ("dph1 = 0x85\t\t; dph1 register unknown to assembler\n", of); fputs ("dpx1 = 0x95\t\t; dpx1 register unknown to assembler\n", of); fputs ("ap = 0x9C\t\t; ap register unknown to assembler\n", of); - } } /* Generate interrupt vector table. */ @@ -190,9 +200,9 @@ static const char *_linkCmd[] = "aslink", "-nf", "$1", NULL }; -static const char *_asmCmd[] = +/* $3 is replaced by assembler.debug_opts resp. port->assembler.plain_opts */ static const char *_asmCmd[] = { - "asx8051", "$l", "-plosgff", "$1.asm", NULL + "asx8051", "$l", "$3", "$1.asm", NULL }; /* Globals */ @@ -208,13 +218,16 @@ PORT ds390_port = }, { _asmCmd, + NULL, "-plosgffc", /* Options with debug */ "-plosgff", /* Options without debug */ - 0 + 0, + ".asm" }, { _linkCmd, NULL, + NULL, ".rel" }, { @@ -222,7 +235,7 @@ PORT ds390_port = }, { /* Sizes: char, short, int, long, ptr, fptr, gptr, bit, float, max */ - 1, 1, 2, 4, 1, 2, 3, 1, 4, 4 + 1, 2, 2, 4, 1, 2, 3, 1, 4, 4 }, { "XSEG (XDATA)", @@ -246,7 +259,7 @@ PORT ds390_port = }, /* ds390 has an 8 bit mul */ { - 1, 0 + 1, -1 }, "_", _ds390_init, @@ -261,6 +274,8 @@ PORT ds390_port = _ds390_reset_regparm, _ds390_regparm, NULL, + NULL, + NULL, FALSE, 0, /* leave lt */ 0, /* leave gt */ @@ -268,5 +283,6 @@ PORT ds390_port = 1, /* transform >= to ! < */ 1, /* transform != to !(a == b) */ 0, /* leave == */ + TRUE, /* we support array initializers. */ PORT_MAGIC };