Infrastructure stuff for AVR
authorsandeep <sandeep@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 5 Mar 2000 23:06:51 +0000 (23:06 +0000)
committersandeep <sandeep@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 5 Mar 2000 23:06:51 +0000 (23:06 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@161 4a8a32a2-be11-0410-ad9d-d568d2c75423

13 files changed:
src/SDCC.lex
src/SDCC.y
src/SDCCast.c
src/SDCCglue.c
src/SDCCmain.c
src/SDCCmem.c
src/SDCCsymt.c
src/SDCCsymt.h
src/SDCCval.c
src/mcs51/main.c
src/mcs51/ralloc.c
src/port.h
src/z80/main.c

index 04001590a76fa7b633c83fb1a450cbfaff5e877a..821cff05c1b0b8d7b10067561f4a0c3ed3d79fa6 100644 (file)
@@ -108,7 +108,7 @@ struct options  save_options  ;
 "enum"         { count(); return(ENUM); }
 "extern"       { count(); return(EXTERN); }
 "far"          { count(); TKEYWORD(XDATA);  }
 "enum"         { count(); return(ENUM); }
 "extern"       { count(); return(EXTERN); }
 "far"          { count(); TKEYWORD(XDATA);  }
-"flash"        { count(); TKEYWORD(FLASH);  }
+"eeprom"       { count(); TKEYWORD(EEPROM);  }
 "float"        { count(); return(FLOAT); }
 "for"          { count(); return(FOR); }
 "goto"        { count(); return(GOTO); }
 "float"        { count(); return(FLOAT); }
 "for"          { count(); return(FOR); }
 "goto"        { count(); return(GOTO); }
@@ -140,7 +140,7 @@ struct options  save_options  ;
 "xdata"        { count(); TKEYWORD(XDATA); }
 "_data"               { count(); TKEYWORD(_NEAR); }
 "_code"               { count(); TKEYWORD(_CODE); }
 "xdata"        { count(); TKEYWORD(XDATA); }
 "_data"               { count(); TKEYWORD(_NEAR); }
 "_code"               { count(); TKEYWORD(_CODE); }
-"_flash"       { count(); TKEYWORD(_FLASH); }
+"_eeprom"      { count(); TKEYWORD(_EEPROM); }
 "_generic"     { count(); TKEYWORD(_GENERIC); }
 "_near"               { count(); TKEYWORD(_NEAR); }
 "_xdata"       { count(); TKEYWORD(_XDATA);}
 "_generic"     { count(); TKEYWORD(_GENERIC); }
 "_near"               { count(); TKEYWORD(_NEAR); }
 "_xdata"       { count(); TKEYWORD(_XDATA);}
index b9385b6898a63b8d6a4d32915ed91b6413799c51..ed7e2a2a171178d0f91906a665c2461c85b9e057 100644 (file)
@@ -75,10 +75,10 @@ value *cenum = NULL  ;  /* current enumeration  type chain*/
 %token <yyint> MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN ADD_ASSIGN
 %token <yyint> SUB_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN
 %token <yyint> XOR_ASSIGN OR_ASSIGN
 %token <yyint> MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN ADD_ASSIGN
 %token <yyint> SUB_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN
 %token <yyint> XOR_ASSIGN OR_ASSIGN
-%token TYPEDEF EXTERN STATIC AUTO REGISTER CODE FLASH INTERRUPT SFR AT SBIT
+%token TYPEDEF EXTERN STATIC AUTO REGISTER CODE EEPROM INTERRUPT SFR AT SBIT
 %token REENTRANT USING  XDATA DATA IDATA PDATA VAR_ARGS CRITICAL
 %token CHAR SHORT INT LONG SIGNED UNSIGNED FLOAT DOUBLE CONST VOLATILE VOID BIT
 %token REENTRANT USING  XDATA DATA IDATA PDATA VAR_ARGS CRITICAL
 %token CHAR SHORT INT LONG SIGNED UNSIGNED FLOAT DOUBLE CONST VOLATILE VOID BIT
-%token STRUCT UNION ENUM ELIPSIS RANGE FAR _XDATA _CODE _GENERIC _NEAR _PDATA _IDATA _FLASH
+%token STRUCT UNION ENUM ELIPSIS RANGE FAR _XDATA _CODE _GENERIC _NEAR _PDATA _IDATA _EEPROM
 %token CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN 
 %token <yyinline> INLINEASM
 %token IFX ADDRESS_OF GET_VALUE_AT_ADDRESS SPIL UNSPIL GETHBIT
 %token CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN 
 %token <yyinline> INLINEASM
 %token IFX ADDRESS_OF GET_VALUE_AT_ADDRESS SPIL UNSPIL GETHBIT
@@ -576,10 +576,10 @@ type_specifier2
                   $$->class = SPECIFIER  ;
                   SPEC_SCLS($$) = S_CODE ;                 
                }
                   $$->class = SPECIFIER  ;
                   SPEC_SCLS($$) = S_CODE ;                 
                }
-   | FLASH      {
+   | EEPROM      {
                   $$ = newLink () ;
                   $$->class = SPECIFIER  ;
                   $$ = newLink () ;
                   $$->class = SPECIFIER  ;
-                  SPEC_SCLS($$) = S_FLASH ;
+                  SPEC_SCLS($$) = S_EEPROM ;
                }
    | DATA      {
                   $$ = newLink ();
                }
    | DATA      {
                   $$ = newLink ();
@@ -919,8 +919,8 @@ pointer
                 case S_CODE:
                     DCL_PTR_CONST($3) = 1;
                     DCL_TYPE($3) = CPOINTER ;
                 case S_CODE:
                     DCL_PTR_CONST($3) = 1;
                     DCL_TYPE($3) = CPOINTER ;
-                case S_FLASH:
-                    DCL_TYPE($3) = FLPOINTER;
+                case S_EEPROM:
+                    DCL_TYPE($3) = EEPPOINTER;
                     break;
                 }
             }
                     break;
                 }
             }
@@ -948,7 +948,7 @@ far_near
    | _IDATA    { $$ = newLink() ; DCL_TYPE($$) = IPOINTER ; }
    | _NEAR     { $$ = NULL ; }
    | _GENERIC  { $$ = newLink() ; DCL_TYPE($$) = GPOINTER ; } 
    | _IDATA    { $$ = newLink() ; DCL_TYPE($$) = IPOINTER ; }
    | _NEAR     { $$ = NULL ; }
    | _GENERIC  { $$ = newLink() ; DCL_TYPE($$) = GPOINTER ; } 
-   | _FLASH    { $$ = newLink() ; DCL_TYPE($$) = FLPOINTER ;} 
+   | _EEPROM   { $$ = newLink() ; DCL_TYPE($$) = EEPPOINTER ;} 
    |           { $$ = newLink() ; DCL_TYPE($$) = UPOINTER ; }
    ;
 
    |           { $$ = newLink() ; DCL_TYPE($$) = UPOINTER ; }
    ;
 
index 0f1ad90b54a62ec9c2b67403a8d1684a18d9d8c1..e4f1baa3bc11b0cbd5e6fd56c2dd9fa5fad51539 100644 (file)
@@ -1768,8 +1768,8 @@ ast *decorateType (ast *tree)
                    if (SPEC_SCLS(tree->left->etype) == S_IDATA)
                        DCL_TYPE(p) = IPOINTER ;
                    else
                    if (SPEC_SCLS(tree->left->etype) == S_IDATA)
                        DCL_TYPE(p) = IPOINTER ;
                    else
-                       if (SPEC_SCLS(tree->left->etype) == S_FLASH)
-                           DCL_TYPE(p) = FLPOINTER ;
+                       if (SPEC_SCLS(tree->left->etype) == S_EEPROM)
+                           DCL_TYPE(p) = EEPPOINTER ;
                        else
                            DCL_TYPE(p) = POINTER ;
 
                        else
                            DCL_TYPE(p) = POINTER ;
 
index 877798738991f2adaa3030f1032e5f6114ec255a..e512b0ed1f61e9912e83ba25c750f9c3dcb9568b 100644 (file)
@@ -226,8 +226,8 @@ value *initPointer (initList *ilist)
                        if (SPEC_SCLS(expr->left->etype) == S_IDATA)
                            DCL_TYPE(val->type) = IPOINTER ;
                        else
                        if (SPEC_SCLS(expr->left->etype) == S_IDATA)
                            DCL_TYPE(val->type) = IPOINTER ;
                        else
-                           if (SPEC_SCLS(expr->left->etype) == S_FLASH)
-                               DCL_TYPE(val->type) = FLPOINTER ;
+                           if (SPEC_SCLS(expr->left->etype) == S_EEPROM)
+                               DCL_TYPE(val->type) = EEPPOINTER ;
                            else
                                DCL_TYPE(val->type) = POINTER ;
            val->type->next = expr->left->ftype;
                            else
                                DCL_TYPE(val->type) = POINTER ;
            val->type->next = expr->left->ftype;
index 2a5064a42ee86d8b3714808236d50f17748af81a..9ed723065b55bc755dfbab91f2b6a7f4c1192110 100644 (file)
@@ -1274,6 +1274,7 @@ int main ( int argc, char **argv , char **envp)
     if (port->init)
        port->init();
     
     if (port->init)
        port->init();
     
+    initMem();
     setDefaultOptions();
     parseCmdLine(argc,argv);
 
     setDefaultOptions();
     parseCmdLine(argc,argv);
 
@@ -1290,7 +1291,6 @@ int main ( int argc, char **argv , char **envp)
     if (srcFileName) {
 
        initSymt();
     if (srcFileName) {
 
        initSymt();
-       initMem();                  
        initiCode();
        initCSupport ();
        initPeepHole();
        initiCode();
        initCSupport ();
        initPeepHole();
index d2d9ed37b6ec7db171a00d3f7c1c0339cedfd2e7..435c317181f057cb17d75a1a39ac5491002fa029 100644 (file)
@@ -223,6 +223,18 @@ void initMem ()
        */
        sfrbit     = allocMap (1,0, 0, 1, 1, 0,0, REG_NAME,'J',0);
 
        */
        sfrbit     = allocMap (1,0, 0, 1, 1, 0,0, REG_NAME,'J',0);
 
+       /* EEPROM bit space 
+                  SFRSPACE       -   NO
+                  FAR-SPACE      -   YES
+                  PAGED          -   NO
+                  DIRECT-ACCESS  -   NO
+                  BIT-ACCESS     -   NO
+                  CODE-ACESS     -   NO 
+                  DEBUG-NAME     -   'K'
+                  POINTER-TYPE   -   EEPPOINTER
+       */
+       eeprom     = allocMap (0,1, 0, 0, 0, 0,0, REG_NAME,'K',EEPPOINTER);
+
        /* the unknown map */
        generic     = allocMap (1,0, 0, 1, 1, 0,0, REG_NAME,' ',GPOINTER);
        
        /* the unknown map */
        generic     = allocMap (1,0, 0, 1, 1, 0,0, REG_NAME,' ',GPOINTER);
        
@@ -332,7 +344,7 @@ void allocGlobal ( symbol *sym )
     if ( SPEC_SCLS(sym->etype) == S_FIXED  ||
         SPEC_SCLS(sym->etype) == S_AUTO   ) {
        /* set the output class */
     if ( SPEC_SCLS(sym->etype) == S_FIXED  ||
         SPEC_SCLS(sym->etype) == S_AUTO   ) {
        /* set the output class */
-       SPEC_OCLS(sym->etype) = ( options.model  ? xdata : data ) ;
+       SPEC_OCLS(sym->etype) = port->mem.default_globl_map ;
        /* generate the symbol  */
        allocIntoSeg  (sym) ;
        return   ;
        /* generate the symbol  */
        allocIntoSeg  (sym) ;
        return   ;
@@ -375,12 +387,6 @@ void allocParms ( value  *val )
        /* check the declaration */
        checkDecl (lval->sym);
        
        /* check the declaration */
        checkDecl (lval->sym);
        
-       //      /* if this is a literal e.g. enumerated type */
-       //      if (IS_LITERAL(lval->etype)) {
-       //    SPEC_OCLS(lval->etype) = SPEC_OCLS(lval->sym->etype) = 
-       //      ( options.model  ? xdata : data );
-       //    continue;
-       //}
        /* if this a register parm then allocate
           it as a local variable by adding it
           to the first block we see in the body */
        /* if this a register parm then allocate
           it as a local variable by adding it
           to the first block we see in the body */
@@ -439,7 +445,9 @@ void allocParms ( value  *val )
                   first, we will remove it from the overlay segment
                   after the overlay determination has been done */
                SPEC_OCLS(lval->etype) = SPEC_OCLS(lval->sym->etype) = 
                   first, we will remove it from the overlay segment
                   after the overlay determination has been done */
                SPEC_OCLS(lval->etype) = SPEC_OCLS(lval->sym->etype) = 
-                   ( options.model  ? xdata : (options.noOverlay ? data :overlay ));
+                   ( options.model  ? port->mem.default_local_map : 
+                     (options.noOverlay ? port->mem.default_local_map
+                      :overlay ));
            
            allocIntoSeg(lval->sym);
        }
            
            allocIntoSeg(lval->sym);
        }
@@ -504,7 +512,8 @@ void allocLocal ( symbol *sym  )
 
     /* if this is a static variable */
     if ( IS_STATIC (sym->etype)) {
 
     /* if this is a static variable */
     if ( IS_STATIC (sym->etype)) {
-       SPEC_OCLS(sym->etype) = (options.model ? xdata : data );
+/*     SPEC_OCLS(sym->etype) = (options.model ? xdata : data ); */
+       SPEC_OCLS(sym->etype) = port->mem.default_local_map;
        allocIntoSeg (sym);
         sym->allocreq = 1;
        return   ;
        allocIntoSeg (sym);
         sym->allocreq = 1;
        return   ;
@@ -604,8 +613,9 @@ void allocLocal ( symbol *sym  )
     /* again note that we have put it into the overlay segment
        will remove and put into the 'data' segment if required after 
        overlay  analysis has been done */   
     /* again note that we have put it into the overlay segment
        will remove and put into the 'data' segment if required after 
        overlay  analysis has been done */   
-    SPEC_OCLS(sym->etype) = ( options.model  ? xdata : 
-                             (options.noOverlay ? data : overlay )) ;
+    SPEC_OCLS(sym->etype) = ( options.model  ? port->mem.default_local_map : 
+                             (options.noOverlay ? port->mem.default_local_map
+                              : overlay )) ;
     allocIntoSeg (sym); 
 }
 
     allocIntoSeg (sym); 
 }
 
index 54c4616b72eaf689bd1392e0f13bed344df78d03..3f93c9236a3dae7fef082d9544b011990d92ea75 100644 (file)
@@ -296,8 +296,8 @@ void pointerTypes (link *ptr, link *type)
            DCL_PTR_CONST(ptr) = 1;
            DCL_TYPE(ptr) = CPOINTER ;
            break;
            DCL_PTR_CONST(ptr) = 1;
            DCL_TYPE(ptr) = CPOINTER ;
            break;
-       case S_FLASH:
-           DCL_TYPE(ptr) = FLPOINTER;
+       case S_EEPROM:
+           DCL_TYPE(ptr) = EEPPOINTER;
            break;
        default:
            DCL_TYPE(ptr) = GPOINTER;
            break;
        default:
            DCL_TYPE(ptr) = GPOINTER;
@@ -565,7 +565,7 @@ unsigned int   getSize ( link *p )
     case PPOINTER:
     case POINTER:
        return ( PTRSIZE ) ;
     case PPOINTER:
     case POINTER:
        return ( PTRSIZE ) ;
-    case FLPOINTER:
+    case EEPPOINTER:
     case FPOINTER:
     case CPOINTER:
        return ( FPTRSIZE );
     case FPOINTER:
     case CPOINTER:
        return ( FPTRSIZE );
@@ -620,7 +620,7 @@ unsigned int   bitsForType ( link *p )
     case PPOINTER:
     case POINTER:
        return ( PTRSIZE * 8) ;
     case PPOINTER:
     case POINTER:
        return ( PTRSIZE * 8) ;
-    case FLPOINTER:
+    case EEPPOINTER:
     case FPOINTER:
     case CPOINTER:
        return ( FPTRSIZE * 8);
     case FPOINTER:
     case CPOINTER:
        return ( FPTRSIZE * 8);
@@ -1442,8 +1442,8 @@ void  processFuncArgs   (symbol *func, int ignoreName)
            case S_XDATA:
                DCL_TYPE(val->type) = FPOINTER;
                break;
            case S_XDATA:
                DCL_TYPE(val->type) = FPOINTER;
                break;
-           case S_FLASH:
-               DCL_TYPE(val->type) = FLPOINTER;
+           case S_EEPROM:
+               DCL_TYPE(val->type) = EEPPOINTER;
                break;
            default :
                DCL_TYPE(val->type) = GPOINTER;
                break;
            default :
                DCL_TYPE(val->type) = GPOINTER;
@@ -1554,8 +1554,8 @@ void printTypeChain (link *type, FILE *of)
                if (DCL_PTR_CONST(type))
                    fprintf(of,"const ");
                break;
                if (DCL_PTR_CONST(type))
                    fprintf(of,"const ");
                break;
-           case FLPOINTER:
-               fprintf (of,"_flash * ");
+           case EEPPOINTER:
+               fprintf (of,"_eeprom * ");
                if (DCL_PTR_CONST(type))
                    fprintf(of,"const ");
                break;
                if (DCL_PTR_CONST(type))
                    fprintf(of,"const ");
                break;
@@ -1663,7 +1663,7 @@ void cdbTypeInfo (link *type,FILE *of)
            case PPOINTER:
                fprintf (of,"DP,");
                break;
            case PPOINTER:
                fprintf (of,"DP,");
                break;
-           case FLPOINTER:
+           case EEPPOINTER:
                fprintf (of,"DA,");
                break;
            case ARRAY :
                fprintf (of,"DA,");
                break;
            case ARRAY :
index 73346afd20210799962a97759d0e776a767d3d05..d25cd4180a741ff9aceb159ecd3305a3ec78035e 100644 (file)
@@ -75,7 +75,7 @@ enum  { S_FIXED  =  0,
         S_STACK      ,
         S_XSTACK     ,
         S_BIT        ,
         S_STACK      ,
         S_XSTACK     ,
         S_BIT        ,
-        S_FLASH      };
+        S_EEPROM      };
 
 /* specifier is the last in the type-chain */
 typedef struct specifier {
 
 /* specifier is the last in the type-chain */
 typedef struct specifier {
@@ -124,7 +124,7 @@ enum {  POINTER   = 0,       /* pointer to near data */
         PPOINTER     ,       /* paged area pointer   */
         IPOINTER     ,       /* pointer to upper 128 bytes */
        UPOINTER     ,       /* unknown pointer used only when parsing */
         PPOINTER     ,       /* paged area pointer   */
         IPOINTER     ,       /* pointer to upper 128 bytes */
        UPOINTER     ,       /* unknown pointer used only when parsing */
-       FLPOINTER    ,       /* pointer to flash     */
+       EEPPOINTER   ,       /* pointer to eeprom     */
         ARRAY        ,
         FUNCTION     };
 
         ARRAY        ,
         FUNCTION     };
 
@@ -278,7 +278,7 @@ typedef struct symbol {
                                     DCL_TYPE(x) == GPOINTER   ||    \
                                     DCL_TYPE(x) == IPOINTER   ||    \
                                     DCL_TYPE(x) == PPOINTER   ||    \
                                     DCL_TYPE(x) == GPOINTER   ||    \
                                     DCL_TYPE(x) == IPOINTER   ||    \
                                     DCL_TYPE(x) == PPOINTER   ||    \
-                                    DCL_TYPE(x) == FLPOINTER  ||    \
+                                    DCL_TYPE(x) == EEPPOINTER ||    \
                                      DCL_TYPE(x) == CPOINTER   ||    \
                                      DCL_TYPE(x) == UPOINTER  ))
 #define IS_PTR_CONST(x) (IS_PTR(x) && DCL_PTR_CONST(x))
                                      DCL_TYPE(x) == CPOINTER   ||    \
                                      DCL_TYPE(x) == UPOINTER  ))
 #define IS_PTR_CONST(x) (IS_PTR(x) && DCL_PTR_CONST(x))
index 1da5f3eca83145517f20462138a1926a804405e9..c1dff7198a18a9aeaf2581cb8c2cbf812c849d50 100644 (file)
@@ -1213,8 +1213,8 @@ value *valForArray (ast *arrExpr)
                if (SPEC_SCLS(arrExpr->left->etype) == S_IDATA)
                    DCL_TYPE(val->type) = IPOINTER ;
                else
                if (SPEC_SCLS(arrExpr->left->etype) == S_IDATA)
                    DCL_TYPE(val->type) = IPOINTER ;
                else
-                   if (SPEC_SCLS(arrExpr->left->etype) == S_FLASH)
-                       DCL_TYPE(val->type) = FLPOINTER ;
+                   if (SPEC_SCLS(arrExpr->left->etype) == S_EEPROM)
+                       DCL_TYPE(val->type) = EEPPOINTER ;
                    else
                        DCL_TYPE(val->type) = POINTER ;
     val->type->next = arrExpr->left->ftype;
                    else
                        DCL_TYPE(val->type) = POINTER ;
     val->type->next = arrExpr->left->ftype;
@@ -1282,8 +1282,8 @@ value *valForStructElem(ast *structT, ast *elemT)
                if (SPEC_SCLS(structT->etype) == S_IDATA)
                    DCL_TYPE(val->type) = IPOINTER ;
                else
                if (SPEC_SCLS(structT->etype) == S_IDATA)
                    DCL_TYPE(val->type) = IPOINTER ;
                else
-                   if (SPEC_SCLS(structT->etype) == S_FLASH)
-                       DCL_TYPE(val->type) = FLPOINTER ;
+                   if (SPEC_SCLS(structT->etype) == S_EEPROM)
+                       DCL_TYPE(val->type) = EEPPOINTER ;
                    else
                        DCL_TYPE(val->type) = POINTER ;
     val->type->next = sym->type;
                    else
                        DCL_TYPE(val->type) = POINTER ;
     val->type->next = sym->type;
index e7b3f4121ca9c2cb432e7457936e8092d083803f..04c158b0f495995ac191971b225698ad0321a428 100644 (file)
@@ -72,6 +72,14 @@ static void _mcs51_finaliseOptions(void)
         fReturn = fReturn390;
         fReturnSize = 5;
     } 
         fReturn = fReturn390;
         fReturnSize = 5;
     } 
+
+    if (options.model) {
+       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;
+    }
 }
 
 static void _mcs51_setDefaultOptions(void)
 }
 
 static void _mcs51_setDefaultOptions(void)
@@ -171,7 +179,9 @@ PORT mcs51_port = {
        "RSEG    (DATA)",
        "GSINIT  (CODE)",
        "OSEG    (OVR,DATA)",
        "RSEG    (DATA)",
        "GSINIT  (CODE)",
        "OSEG    (OVR,DATA)",
-       "GSFINAL (CODE)"
+       "GSFINAL (CODE)",
+       NULL,
+       NULL
     },
     { 
        +1, 1, 4, 1, 1
     },
     { 
        +1, 1, 4, 1, 1
index 80573d3a1debb0070b37f3c1b11ee2f2fb91dca7..4acaf3bf2fd4b1e9928234b4ee5f5ca279215e13 100644 (file)
@@ -441,7 +441,6 @@ static symbol *createStackSpil (symbol *sym)
 {
     symbol *sloc= NULL;
     int useXstack, model, noOverlay;
 {
     symbol *sloc= NULL;
     int useXstack, model, noOverlay;
-    int stackAuto;
 
     char slocBuffer[30];
 
 
     char slocBuffer[30];
 
@@ -472,7 +471,7 @@ static symbol *createStackSpil (symbol *sym)
     /* set the type to the spilling symbol */
     sloc->type = copyLinkChain(sym->type);
     sloc->etype = getSpec(sloc->type);
     /* set the type to the spilling symbol */
     sloc->type = copyLinkChain(sym->type);
     sloc->etype = getSpec(sloc->type);
-    SPEC_SCLS(sloc->etype) = S_AUTO ;    
+    SPEC_SCLS(sloc->etype) = S_DATA ;
     SPEC_EXTR(sloc->etype) = 0;
 
     /* we don't allow it to be allocated`
     SPEC_EXTR(sloc->etype) = 0;
 
     /* we don't allow it to be allocated`
@@ -486,7 +485,6 @@ static symbol *createStackSpil (symbol *sym)
     useXstack = options.useXstack;
     model = options.model;
     noOverlay = options.noOverlay;
     useXstack = options.useXstack;
     model = options.model;
     noOverlay = options.noOverlay;
-    stackAuto = options.stackAuto;
     options.noOverlay = 1;
     options.model = options.useXstack = 0;
 
     options.noOverlay = 1;
     options.model = options.useXstack = 0;
 
@@ -495,7 +493,6 @@ static symbol *createStackSpil (symbol *sym)
     options.useXstack = useXstack;
     options.model     = model;
     options.noOverlay = noOverlay;
     options.useXstack = useXstack;
     options.model     = model;
     options.noOverlay = noOverlay;
-    options.stackAuto = stackAuto;
     sloc->isref = 1; /* to prevent compiler warning */
     
     /* if it is on the stack then update the stack */
     sloc->isref = 1; /* to prevent compiler warning */
     
     /* if it is on the stack then update the stack */
index 6582283221860d32bda4e78e92f1fab7493f999f..8b036313d3c21aee5ce5380a19492c35aa255c84 100644 (file)
@@ -57,7 +57,7 @@ typedef struct {
        int max_base_size;
     } s;
 
        int max_base_size;
     } s;
 
-    /** Names for all the memory regions */
+    /** memory regions related stuff */
     struct {
        const char *xstack_name;
        const char *istack_name;
     struct {
        const char *xstack_name;
        const char *istack_name;
@@ -70,6 +70,8 @@ typedef struct {
        const char *static_name;
        const char *overlay_name;
        const char *post_static_name;
        const char *static_name;
        const char *overlay_name;
        const char *post_static_name;
+       struct memmap *default_local_map ; /* default location for auto vars */
+       struct memmap *default_globl_map ; /* default location for globl vars*/
     } mem;
     
     /* stack related information */
     } mem;
     
     /* stack related information */
index dca80167512afcaff0c88052a10ee479f9466489..b7c4f76b2973d7c6646acbdf6b7f970c23f5f626 100644 (file)
@@ -22,6 +22,8 @@ static bool _z80_parseOptions(int *pargc, char **argv, int *i)
 
 static void _z80_finaliseOptions(void)
 {
 
 static void _z80_finaliseOptions(void)
 {
+    port->mem.default_local_map = data;
+    port->mem.default_globl_map = data;
 }
 
 static void _z80_setDefaultOptions(void)
 }
 
 static void _z80_setDefaultOptions(void)
@@ -98,7 +100,9 @@ PORT z80_port = {
        "_RSEG",
        "_GSINIT",
        "_OVERLAY",
        "_RSEG",
        "_GSINIT",
        "_OVERLAY",
-       "_GSFINAL"
+       "_GSFINAL",
+       NULL,
+       NULL
     },
     { 
        -1, 0, 0, 8, 0
     },
     { 
        -1, 0, 0, 8, 0