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
15 int kwnum = 1; /* current op# for kwgen output */
17 FILE * kfp; /* keyword file */
21 void error(char *, char *);
22 void procln(int, char **);
24 void main(int argc, char ** argv)
32 if ((kfp = fopen(argv[1], "w")) == NULL)
33 error("Cannot create: %s", argv[1]);
35 // while (gets(ln) != NULL)
36 while (fgets(ln, 256, stdin) != NULL)
38 ++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))
74 void procln(int namc, char ** namv)
79 if (namc == 1) /* alias for previous entry */
81 fprintf(kfp, "%s\t%d\n", namv[0], kwnum-1+1000);
87 fprintf(stderr, "%d: missing fields\n", lineno);
91 if (*namv[0] != '-') /* output keyword name */
92 fprintf(kfp, "%s\t%d\n", namv[0], kwnum + 1000);
94 printf("/*%4d %-6s*/ {", kwnum, namv[0]);
98 else for (s = namv[1], i=0; *s; ++s)
99 printf("%sSIZ%c", (i++ ? "|" : ""), *s);
100 printf(", %s, %s, ", namv[2], namv[3]);
102 if (*namv[4] == '%') /* enforce little fascist percent signs */
104 for(i=1, j=0; i<17; ++i)
108 if (namv[4][i] == '1' || isupper(namv[4][i]))
112 printf("0x%04x, ", j);
115 printf("%s, ", namv[4]);
117 if (namc == 7 && *namv[6] == '+')
118 printf("%d, ", kwnum+1);
122 printf("%s},\n", namv[5]);
127 void error(char * s, char * s1)
129 fprintf(stderr, s, s1);
130 fprintf(stderr, "\n");