* Fixed up multi bank support
authormichaelh <michaelh@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 6 Apr 2000 04:12:09 +0000 (04:12 +0000)
committermichaelh <michaelh@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 6 Apr 2000 04:12:09 +0000 (04:12 +0000)
* Changed initMem to happen later to allow name changes to come through

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@221 4a8a32a2-be11-0410-ad9d-d568d2c75423

link/z80/lkmain.c
src/SDCCmain.c
src/SDCCmem.c
src/z80/main.c

index 76fa29f7277a415cc085fef5eafe2bfbe1655aa5..c2294e08a64726654a4c82503d1a2252c60f3ac4 100644 (file)
@@ -285,7 +285,7 @@ char *argv[];
                bsp->b_base = (struct base *)new(sizeof(struct base));
                bsp = bsp->b_base;
                bsp->b_strp = (char *)malloc(18);
-               sprintf(bsp->b_strp, "_BSS_%d=0xA000", i);
+               sprintf(bsp->b_strp, "_DATA_%d=0xA000", i);
        }
 #endif /* GAMEBOY */
 
index 8f958818ad1cd6700a46f17ce8a3f85cf7e221f3..c47d9109a0a6a5dac3b8b645bb4c552afe832b81 100644 (file)
@@ -983,7 +983,6 @@ int   parseCmdLine ( int argc, char **argv )
            fprintf(cdbFile,"M:%s\n",moduleName);
        }
     }
-    port->finaliseOptions();
     return 0;
 }
 
@@ -1286,11 +1285,14 @@ int main ( int argc, char **argv , char **envp)
     /* Initalise the port. */
     if (port->init)
        port->init();
-    
-    initMem();
+
     setDefaultOptions();
     parseCmdLine(argc,argv);
 
+    initMem();
+
+    port->finaliseOptions();
+
     /* if no input then printUsage & exit */
     if ((!options.c1mode && !srcFileName && !nrelFiles) || (options.c1mode && !srcFileName && !options.out_name)) {
        printUsage();
index 5527c010ccc6557711d7cbaf080e56923373040d..c7de4c642c53150a660b3b31106774930f41a147 100644 (file)
@@ -77,7 +77,6 @@ memmap *allocMap (char rspace,     /* sfr space            */
 /*-----------------------------------------------------------------*/
 void initMem ()
 {      
-       
        /* allocate all the segments */
        /* xternal stack segment ;   
                   SFRSPACE       -   NO
@@ -246,7 +245,6 @@ void initMem ()
 void allocIntoSeg (symbol *sym) 
 {
     memmap *segment = SPEC_OCLS(sym->etype);
-
     addSet (&segment->syms,sym);
 }
 
index 6ad0e012200d8a44746dfd872d99b17770f3950c..e836d4aa9169772a61f02b9e7733c17b674dfe21 100644 (file)
@@ -14,8 +14,15 @@ static char _gbz80_defaultRules[] =
 
 Z80_OPTS z80_opts;
 
+static struct {
+    bool fsetAsmType;
+} _G;
+
 static char *_keywords[] = { NULL };
 
+extern PORT gbz80_port;
+extern PORT z80_port;
+
 #include "mappings.i"
 
 static void _z80_init(void)
@@ -27,7 +34,6 @@ static void _z80_init(void)
 static void _gbz80_init(void)
 {
     z80_opts.sub = SUB_GBZ80;
-    asm_addTree(&_asxxxx_gb);
 }
 
 static int regParmFlg = 0; /* determine if we can register a parameter */
@@ -57,6 +63,36 @@ static int _process_pragma(const char *sz)
 
 static bool _parseOptions(int *pargc, char **argv, int *i)
 {
+    if (argv[*i][0] == '-') {
+       if (argv[*i][1] == 'b' && IS_GB) {
+           int bank = atoi(argv[*i] + 3);
+           char buffer[128];
+           switch (argv[*i][2]) {
+           case 'o':
+               /* ROM bank */
+               sprintf(buffer, "_CODE_%u", bank);
+               gbz80_port.mem.code_name = gc_strdup(buffer);
+               return TRUE;
+           case 'a':
+               /* RAM bank */
+               sprintf(buffer, "_DATA_%u", bank);
+               gbz80_port.mem.data_name = gc_strdup(buffer);
+               return TRUE;
+           }
+       }
+       else if (!strncmp(argv[*i], "--asm=", 6)) {
+           if (!strcmp(argv[*i], "--asm=rgbds")) {
+               asm_addTree(&_rgbds_gb);
+               _G.fsetAsmType = TRUE;
+               return TRUE;
+           }
+           else if (!strcmp(argv[*i], "--asm=asxxxx")) {
+               asm_addTree(&_asxxxx_gb);
+               _G.fsetAsmType = TRUE;
+               return TRUE;
+           }
+       }
+    }
     return FALSE;
 }
 
@@ -64,6 +100,8 @@ static void _finaliseOptions(void)
 {
     port->mem.default_local_map = data;
     port->mem.default_globl_map = data;
+    if (!_G.fsetAsmType && IS_GB)
+       asm_addTree(&_asxxxx_gb);
 }
 
 static void _setDefaultOptions(void)