From 984ec3a2c5f811a4240925e74093f915e786023a Mon Sep 17 00:00:00 2001 From: michaelh Date: Thu, 6 Apr 2000 04:12:09 +0000 Subject: [PATCH] * Fixed up multi bank support * 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 | 2 +- src/SDCCmain.c | 8 +++++--- src/SDCCmem.c | 2 -- src/z80/main.c | 40 +++++++++++++++++++++++++++++++++++++++- 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/link/z80/lkmain.c b/link/z80/lkmain.c index 76fa29f7..c2294e08 100644 --- a/link/z80/lkmain.c +++ b/link/z80/lkmain.c @@ -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 */ diff --git a/src/SDCCmain.c b/src/SDCCmain.c index 8f958818..c47d9109 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -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(); diff --git a/src/SDCCmem.c b/src/SDCCmem.c index 5527c010..c7de4c64 100644 --- a/src/SDCCmem.c +++ b/src/SDCCmem.c @@ -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); } diff --git a/src/z80/main.c b/src/z80/main.c index 6ad0e012..e836d4aa 100644 --- a/src/z80/main.c +++ b/src/z80/main.c @@ -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) -- 2.30.2