3 static char _z80_defaultRules[] =
6 #include "peeph-z80.rul"
9 static char _gbz80_defaultRules[] =
12 #include "peeph-gbz80.rul"
32 static char *_keywords[] =
40 extern PORT gbz80_port;
48 z80_opts.sub = SUB_Z80;
49 asm_addTree (&_asxxxx_z80);
55 z80_opts.sub = SUB_GBZ80;
58 static int regParmFlg = 0; /* determine if we can register a parameter */
67 _reg_parm (sym_link * l)
77 _startsWith (const char *sz, const char *key)
79 return !strncmp (sz, key, strlen (key));
86 while ((nl = strrchr (sz, '\n')))
91 _process_pragma (const char *sz)
93 if (_startsWith (sz, "bank="))
96 strcpy (buffer, sz + 5);
98 if (isdigit (buffer[0]))
102 else if (!strcmp (buffer, "BASE"))
104 strcpy (buffer, "HOME");
106 if (isdigit (buffer[0]))
108 /* Arg was a bank number. Handle in an ASM independent
111 strcpy (num, sz + 5);
116 case ASM_TYPE_ASXXXX:
117 sprintf (buffer, "CODE_%s", num);
120 sprintf (buffer, "CODE,BANK[%s]", num);
123 /* PENDING: what to use for ISAS? */
124 sprintf (buffer, "CODE,BANK(%s)", num);
130 gbz80_port.mem.code_name = gc_strdup (buffer);
131 code->sname = gbz80_port.mem.code_name;
137 static const char *_gbz80_rgbasmCmd[] =
139 "rgbasm", "-o$1.o", "$1.asm", NULL
142 static const char *_gbz80_rgblinkCmd[] =
144 "xlink", "-tg", "-n$1.sym", "-m$1.map", "-zFF", "$1.lnk", NULL
148 _gbz80_rgblink (void)
159 /* first we need to create the <filename>.lnk file */
160 sprintf (buffer, "%s.lnk", sz);
161 if (!(lnkfile = fopen (buffer, "w")))
163 werror (E_FILE_OPEN_ERR, buffer);
167 fprintf (lnkfile, "[Objects]\n");
170 fprintf (lnkfile, "%s.o\n", sz);
172 for (i = 0; i < nrelFiles; i++)
173 fprintf (lnkfile, "%s\n", relFiles[i]);
175 fprintf (lnkfile, "\n[Libraries]\n");
176 /* additional libraries if any */
177 for (i = 0; i < nlibFiles; i++)
178 fprintf (lnkfile, "%s\n", libFiles[i]);
181 fprintf (lnkfile, "\n[Output]\n" "%s.gb", sz);
185 buildCmdLine (buffer, argv, port->linker.cmd, sz, NULL, NULL, NULL);
186 /* call the linker */
187 if (my_system (argv[0], argv))
189 perror ("Cannot exec linker");
195 _parseOptions (int *pargc, char **argv, int *i)
197 if (argv[*i][0] == '-')
199 if (argv[*i][1] == 'b' && IS_GB)
201 int bank = atoi (argv[*i] + 3);
207 sprintf (buffer, "CODE_%u", bank);
208 gbz80_port.mem.code_name = gc_strdup (buffer);
212 sprintf (buffer, "DATA_%u", bank);
213 gbz80_port.mem.data_name = gc_strdup (buffer);
217 else if (!strncmp (argv[*i], "--asm=", 6))
219 if (!strcmp (argv[*i], "--asm=rgbds"))
221 asm_addTree (&_rgbds_gb);
222 gbz80_port.assembler.cmd = _gbz80_rgbasmCmd;
223 gbz80_port.linker.cmd = _gbz80_rgblinkCmd;
224 gbz80_port.linker.do_link = _gbz80_rgblink;
225 _G.asmType = ASM_TYPE_RGBDS;
228 else if (!strcmp (argv[*i], "--asm=asxxxx"))
230 _G.asmType = ASM_TYPE_ASXXXX;
233 else if (!strcmp (argv[*i], "--asm=isas"))
235 asm_addTree (&_isas_gb);
236 /* Munge the function prefix */
237 gbz80_port.fun_prefix = "";
238 _G.asmType = ASM_TYPE_ISAS;
247 _finaliseOptions (void)
249 port->mem.default_local_map = data;
250 port->mem.default_globl_map = data;
251 if (_G.asmType == ASM_TYPE_ASXXXX && IS_GB)
252 asm_addTree (&_asxxxx_gb);
256 _setDefaultOptions (void)
258 options.genericPtr = 1; /* default on */
260 options.stackAuto = 1;
261 options.mainreturn = 1;
263 /* first the options part */
264 options.intlong_rent = 1;
266 optimize.global_cse = 1;
271 optimize.loopInvariant = 1;
272 optimize.loopInduction = 0;
276 _getRegName (struct regs *reg)
284 /** $1 is always the basename.
285 $2 is always the output file.
287 $l is the list of extra options that should be there somewhere...
288 MUST be terminated with a NULL.
290 static const char *_z80_linkCmd[] =
292 "link-z80", "-nf", "$1", NULL
295 static const char *_z80_asmCmd[] =
297 "as-z80", "-plosgff", "$1.o", "$1.asm", NULL
300 /** $1 is always the basename.
301 $2 is always the output file.
303 $l is the list of extra options that should be there somewhere...
304 MUST be terminated with a NULL.
306 static const char *_gbz80_linkCmd[] =
308 "link-gbz80", "-nf", "$1", NULL
311 static const char *_gbz80_asmCmd[] =
313 "as-gbz80", "-plosgff", "$1.o", "$1.asm", NULL
321 "Zilog Z80", /* Target name */
324 MODEL_MEDIUM | MODEL_SMALL,
329 "-plosgff", /* Options with debug */
330 "-plosgff", /* Options without debug */
343 /* Sizes: char, short, int, long, ptr, fptr, gptr, bit, float, max */
344 1, 1, 2, 4, 2, 2, 2, 1, 4, 4
366 /* Z80 has no native mul/div commands */
378 0, /* no assembler preamble */
379 0, /* no local IVT generation code */
386 1, /* transform <= to ! > */
387 1, /* transform >= to ! < */
388 1, /* transform != to !(a == b) */
398 "Gameboy Z80-like", /* Target name */
401 MODEL_MEDIUM | MODEL_SMALL,
406 "-plosgff", /* Options with debug */
407 "-plosgff", /* Options without debug */
419 /* Sizes: char, short, int, long, ptr, fptr, gptr, bit, float, max */
420 1, 1, 2, 4, 2, 2, 2, 1, 4, 4
442 /* gbZ80 has no native mul/div commands */
454 0, /* no assembler preamble */
455 0, /* no local IVT generation code */
462 1, /* transform <= to ! > */
463 1, /* transform >= to ! < */
464 1, /* transform != to !(a == b) */