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, 2017 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
16 int kwnum = 1; /* current op# for kwgen output */
17 FILE * kfp; /* keyword file */
20 // Function prototypes
21 void error(char *, char *);
22 void procln(int, char **);
25 int main(int argc, char ** argv)
32 if ((argc == 2) && ((kfp = fopen(argv[1], "w")) == NULL))
33 error("Cannot create: %s", argv[1]);
35 while (fgets(ln, 256, stdin) != NULL)
37 lineno++; /* bump line# */
39 if (*ln == '#') /* ignore comments */
43 * Tokenize line (like the way "argc, argv" works)
44 * and pass it to the parser.
57 while (*s && !isspace(*s))
76 void procln(int namc, char ** namv)
81 // alias for previous entry
84 fprintf(kfp, "%s\t%d\n", namv[0], kwnum-1+1000);
90 fprintf(stderr, "%d: missing fields\n", lineno);
94 // output keyword name
96 fprintf(kfp, "%s\t%d\n", namv[0], kwnum + 1000);
98 printf("/*%4d %-6s*/ {", kwnum, namv[0]);
102 else for (s = namv[1], i=0; *s; ++s)
103 printf("%sSIZ%c", (i++ ? "|" : ""), *s);
105 printf(", %s, %s, ", namv[2], namv[3]);
107 // enforce little fascist percent signs
110 for(i=1, j=0; i<17; ++i)
114 if (namv[4][i] == '1' || isupper(namv[4][i]))
118 printf("0x%04x, ", j);
121 printf("%s, ", namv[4]);
123 if (namc == 7 && *namv[6] == '+')
124 printf("%d, ", kwnum+1);
128 printf("%s},\n", namv[5]);
134 void error(char * s, char * s1)
136 fprintf(stderr, s, s1);
137 fprintf(stderr, "\n");