1 ////////////////////////////////////////////////////////////////////////////////////////////////////
2 // RMAC - Reboot's Macro Assembler for the Atari Jaguar Console System
3 // 68KGEN.C - Tool to Generate 68000 Opcode Table
4 // Copyright (C) 199x Landon Dyer, 2011 Reboot and Friends
5 // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
6 // Source Utilised with the Kind Permission of Landon Dyer
14 int kwnum = 1; /* current op# for kwgen output */
16 FILE *kfp; /* keyword file */
20 void error(char *, char *);
21 void procln(int, char **);
23 void main(int argc, char **argv) {
30 if ((kfp = fopen(argv[1], "w")) == NULL)
31 error("Cannot create: %s", argv[1]);
33 while (gets(ln) != NULL)
35 ++lineno; /* bump line# */
36 if (*ln == '#') /* ignore comments */
40 * Tokenize line (like the way "argc, argv" works)
41 * and pass it to the parser.
51 while (*s && !isspace(*s))
66 void procln(int namc, char **namv) {
70 if (namc == 1) /* alias for previous entry */
72 fprintf(kfp, "%s\t%d\n", namv[0], kwnum-1+1000);
78 fprintf(stderr, "%d: missing fields\n", lineno);
82 if (*namv[0] != '-') /* output keyword name */
83 fprintf(kfp, "%s\t%d\n", namv[0], kwnum + 1000);
85 printf("/*%4d %-6s*/ {", kwnum, namv[0]);
89 else for (s = namv[1], i=0; *s; ++s)
90 printf("%sSIZ%c", (i++ ? "|" : ""), *s);
91 printf(", %s, %s, ", namv[2], namv[3]);
93 if (*namv[4] == '%') /* enforce little fascist percent signs */
95 for (i=1, j=0; i < 17; ++i)
98 if (namv[4][i] == '1' ||
102 printf("0x%04x, ", j);
104 else printf("%s, ", namv[4]);
108 printf("%d, ", kwnum+1);
111 printf("%s},\n", namv[5]);
116 void error(char *s, char *s1) {
117 fprintf(stderr, s, s1);
118 fprintf(stderr, "\n");