- 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);
- gbz80_port.assembler.cmd = _gbz80_rgbasmCmd;
- gbz80_port.linker.cmd = _gbz80_rgblinkCmd;
- gbz80_port.linker.do_link = _gbz80_rgblink;
- _G.fsetAsmType = TRUE;
- return TRUE;
- }
- else if (!strcmp(argv[*i], "--asm=asxxxx")) {
- asm_addTree(&_asxxxx_gb);
- _G.fsetAsmType = TRUE;
- return TRUE;
- }
- else if (!strcmp(argv[*i], "--asm=isas")) {
- asm_addTree(&_isas_gb);
- /* Munge the function prefix */
- gbz80_port.fun_prefix = "";
- _G.fsetAsmType = TRUE;
- return TRUE;
- }
- }
- }
- return FALSE;
+ 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;
+ }
+ }
+ }
+ return FALSE;