+ if (argv[*i][0] == '-')
+ {
+ if (IS_GB)
+ {
+ if (!strncmp (argv[*i], OPTION_BO, sizeof (OPTION_BO) - 1))
+ {
+ /* ROM bank */
+ int bank = getIntArg (OPTION_BO, argv, i, *pargc);
+ struct dbuf_s buffer;
+
+ dbuf_init (&buffer, 16);
+ dbuf_printf (&buffer, "CODE_%u", bank);
+ dbuf_c_str (&buffer);
+ /* ugly, see comment in src/port.h (borutr) */
+ gbz80_port.mem.code_name = dbuf_detach (&buffer);
+ options.code_seg = (char *)gbz80_port.mem.code_name;
+ return TRUE;
+ }
+ else if (!strncmp (argv[*i], OPTION_BA, sizeof (OPTION_BA) - 1))
+ {
+ /* RAM bank */
+ int bank = getIntArg (OPTION_BA, argv, i, *pargc);
+ struct dbuf_s buffer;
+
+ dbuf_init (&buffer, 16);
+ dbuf_printf (&buffer, "DATA_%u", bank);
+ dbuf_c_str (&buffer);
+ /* ugly, see comment in src/port.h (borutr) */
+ gbz80_port.mem.data_name = dbuf_detach (&buffer);
+ return TRUE;
+ }
+ }
+ else if (!strncmp (argv[*i], OPTION_ASM, sizeof (OPTION_ASM) - 1))
+ {
+ char *asmblr = getStringArg (OPTION_ASM, argv, i, *pargc);
+
+ if (!strcmp (asmblr, "rgbds"))
+ {
+ asm_addTree (&_rgbds_gb);
+ gbz80_port.assembler.cmd = _gbz80_rgbasmCmd;
+ gbz80_port.linker.cmd = _gbz80_rgblinkCmd;
+ gbz80_port.linker.do_link = _gbz80_rgblink;
+ _G.asmType = ASM_TYPE_RGBDS;
+ return TRUE;
+ }
+ else if (!strcmp (asmblr, "asxxxx"))
+ {
+ _G.asmType = ASM_TYPE_ASXXXX;
+ return TRUE;
+ }
+ else if (!strcmp (asmblr, "isas"))
+ {
+ asm_addTree (&_isas_gb);
+ /* Munge the function prefix */
+ gbz80_port.fun_prefix = "";
+ _G.asmType = ASM_TYPE_ISAS;
+ return TRUE;
+ }
+ else if (!strcmp (asmblr, "z80asm"))
+ {
+ port->assembler.externGlobal = TRUE;
+ asm_addTree (&_z80asm_z80);
+ _G.asmType = ASM_TYPE_ISAS;
+ return TRUE;
+ }
+ }
+ else if (!strncmp (argv[*i], OPTION_PORTMODE, sizeof (OPTION_PORTMODE) - 1))
+ {
+ char *portmode = getStringArg (OPTION_ASM, argv, i, *pargc);
+
+ if (!strcmp (portmode, "z80"))
+ {
+ z80_opts.port_mode = 80;
+ return TRUE;
+ }
+ else if (!strcmp (portmode, "z180"))
+ {
+ z80_opts.port_mode = 180;
+ return TRUE;
+ }
+ }
+ else if (!strcmp (argv[*i], OPTION_CODE_SEG))
+ {
+ if (options.code_seg) Safe_free(options.code_seg);
+ options.code_seg = Safe_strdup(getStringArg (OPTION_CODE_SEG, argv, i, *pargc));
+ return TRUE;
+ }
+ else if (!strcmp (argv[*i], OPTION_CONST_SEG))
+ {
+ if (options.const_seg) Safe_free(options.const_seg);
+ options.const_seg = Safe_strdup(getStringArg (OPTION_CONST_SEG, argv, i, *pargc));
+ return TRUE;
+ }
+ }
+ return FALSE;