- 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 = Safe_strdup (buffer);
- return TRUE;
- case 'a':
- /* RAM bank */
- sprintf (buffer, "DATA_%u", bank);
- gbz80_port.mem.data_name = Safe_strdup (buffer);
- return TRUE;
- }
- }
- else if (!strncmp (argv[*i], "--asm=", 6))
- {
- if (!strcmp (argv[*i], "--asm=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 (argv[*i], "--asm=asxxxx"))
- {
- _G.asmType = ASM_TYPE_ASXXXX;
- return TRUE;
- }
- else if (!strcmp (argv[*i], "--asm=isas"))
- {
- asm_addTree (&_isas_gb);
- /* Munge the function prefix */
- gbz80_port.fun_prefix = "";
- _G.asmType = ASM_TYPE_ISAS;
- return TRUE;
- }
- else if (!strcmp (argv[*i], "--asm=z80asm"))
- {
+ 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"))
+ {