annotate ringtools/fc-e1gen.c @ 427:19cabe7c8e08

doc/Deep-sleep-support article written
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 28 Oct 2018 23:20:00 +0000
parents 2133c475f5bd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This program is an experimental compiler for TI's Melody E1 format
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * based on the description given in the L1M_AS001_1.pdf document
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * found in the Peek/FGW drop.
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 */
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <sys/types.h>
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdio.h>
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <stdlib.h>
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <ctype.h>
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <string.h>
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <strings.h>
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13
177
2133c475f5bd fc-e1gen: MAX_FIELDS needed to be bumped for the optional bit0 field
Mychaela Falconia <falcon@freecalypso.org>
parents: 175
diff changeset
14 #define MAX_FIELDS 17
33
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 char *infname, *outfname;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 FILE *inf, *outf;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 char linebuf[512], *fields[MAX_FIELDS+1];
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 int lineno, nfields;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20
172
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
21 int global_osc_set;
33
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 int start_time, osc_mask;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 u_short osc_words[8][4];
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 get_input_line()
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 char *cp;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 int n;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 if (!fgets(linebuf, sizeof linebuf, inf)) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 fprintf(stderr, "%s: unexpected EOF\n", infname);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 cp = index(linebuf, '\n');
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 if (!cp) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 fprintf(stderr, "%s line %d: too long or missing newline\n",
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 infname, lineno);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 *cp = '\0';
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 /* parse it into fields */
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 cp = linebuf;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 n = 0;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 for (;;) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 while (isspace(*cp))
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 cp++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 if (*cp == '\0' || *cp == '#')
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 break;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 if (n >= MAX_FIELDS) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 fprintf(stderr, "%s line %d: too many fields\n",
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 infname, lineno);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 fields[n++] = cp;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 while (*cp && !isspace(*cp))
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 cp++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 if (*cp)
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 *cp++ = '\0';
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 fields[n] = 0;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 nfields = n;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 input_number(str, min, max)
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 char *str;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 char *endp;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 long val;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 val = strtol(str, &endp, 10);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 if (*endp) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 fprintf(stderr,
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 "%s line %d: \"%s\" is not a valid decimal number\n",
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 infname, lineno, str);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 if (val < min || val > max) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 fprintf(stderr, "%s line %d: number %ld is out of range\n",
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 infname, lineno, val);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 return val;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84
175
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
85 input_paren_number(str, min, max)
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
86 char *str;
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
87 {
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
88 char *cp;
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
89
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
90 if (str[0] != '(') {
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
91 badparen: fprintf(stderr,
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
92 "%s line %d: bad parenthesized argument \"%s\"\n",
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
93 infname, lineno, str);
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
94 exit(1);
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
95 }
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
96 cp = index(str, ')');
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
97 if (!cp || cp[1])
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
98 goto badparen;
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
99 *cp = '\0';
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
100 return input_number(str + 1, min, max);
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
101 }
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
102
33
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 handle_time_line()
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 if (nfields != 2) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 fprintf(stderr, "%s line %d: time header takes 1 argument\n",
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 infname, lineno);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 start_time = input_number(fields[1], 1, 255);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 check_req_field(n)
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 if (n >= nfields) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 fprintf(stderr, "%s line %d: too few fields\n",
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 infname, lineno);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 process_osc_line()
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 int p = 1;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 int oscn, osc_bit;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 u_short word0, word1, word2, word3;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 int amp, freq, length;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 int tremT0, tremFreq;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 int sustain, t1, t2, t3, t5;
175
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
130 int bit0;
33
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 oscn = input_number(fields[p], 0, 7);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 osc_bit = 1 << oscn;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 if (osc_mask & osc_bit) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 fprintf(stderr, "%s line %d: osc %d defined more than once\n",
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 infname, lineno, oscn);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 osc_mask |= osc_bit;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 /* basic part */
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 check_req_field(p);
175
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
145 if (fields[p][0] == '(') {
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
146 bit0 = input_paren_number(fields[p], 0, 1);
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
147 p++;
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
148 check_req_field(p);
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
149 } else
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
150 bit0 = 0;
33
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 if (!strcmp(fields[p], "df")) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 freq = input_number(fields[p], -8192, 8191) & 0x3FFF;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157 amp = input_number(fields[p], 0, 1023);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 p++;
175
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
159 word0 = freq << 2 | 2 | bit0;
33
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160 word1 = amp << 6;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 } else {
175
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
162 word0 = bit0;
33
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 if (!strcmp(fields[p], "sq1")) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 word0 |= 4;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 if (!strcmp(fields[p], "sq2")) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170 word0 |= 8;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 amp = input_number(fields[p], 0, 63);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 freq = input_number(fields[p], 0, 63);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 word0 |= (freq << 10) | (amp << 4);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180 length = input_number(fields[p], 0, 1023);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182 word1 = length << 6;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 /* optional 3rd word */
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186 if (p < nfields && !strcmp(fields[p], "trem")) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 word1 |= 0x10;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 tremT0 = input_number(fields[p], 0, 7);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 tremFreq = input_number(fields[p], -16, 15) & 31;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195 word2 = (tremFreq << 11) | (tremT0 << 8);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 /* optional 4th word */
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199 if (p < nfields && !strcmp(fields[p], "env")) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
200 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201 word1 |= 0x20;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203 sustain = input_number(fields[p], 0, 15);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206 t1 = input_number(fields[p], 0, 7);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 t2 = input_number(fields[p], 0, 7);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
210 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212 t3 = input_number(fields[p], 0, 7);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
213 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
214 check_req_field(p);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
215 t5 = input_number(fields[p], 0, 7);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 p++;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 word3 = (t1 << 13) | (t2 << 10) | (t3 << 7) | (t5 << 4) |
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
218 sustain;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
219 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
221 if (p != nfields) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
222 fprintf(stderr, "%s line %d: unexpected extra fields\n",
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
223 infname, lineno);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
224 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
225 osc_words[oscn][0] = word0;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
226 osc_words[oscn][1] = word1;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
227 osc_words[oscn][2] = word2;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
228 osc_words[oscn][3] = word3;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
229 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
230
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
231 read_osc_lines()
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
232 {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
233 osc_mask = 0;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
234 for (;;) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
235 get_input_line();
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
236 if (!nfields)
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
237 break;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
238 if (!strcmp(fields[0], "osc")) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
239 process_osc_line();
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
240 continue;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
241 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
242 fprintf(stderr, "%s line %d: osc line expected\n",
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
243 infname, lineno);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
244 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
245 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
246 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
247
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
248 emit_16bit_word(word)
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
249 u_short word;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
250 {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
251 putc(word & 0xFF, outf);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
252 putc(word >> 8, outf);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
253 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
254
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
255 emit_record()
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
256 {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
257 int oscn, osc_bit;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
258
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
259 putc(start_time, outf);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
260 putc(osc_mask, outf);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
261 for (oscn = 0; oscn < 8; oscn++) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
262 osc_bit = 1 << oscn;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
263 if (!(osc_mask & osc_bit))
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
264 continue;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
265 emit_16bit_word(osc_words[oscn][0]);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
266 emit_16bit_word(osc_words[oscn][1]);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
267 if (osc_words[oscn][1] & 0x10)
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
268 emit_16bit_word(osc_words[oscn][2]);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
269 if (osc_words[oscn][1] & 0x20)
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
270 emit_16bit_word(osc_words[oscn][3]);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
271 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
272 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
273
172
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
274 handle_global_osc_set()
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
275 {
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
276 int p;
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
277 int oscn, osc_bit;
175
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
278 int dummy_time_byte;
172
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
279
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
280 do
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
281 get_input_line();
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
282 while (!nfields);
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
283 if (strcmp(fields[0], "osc-set")) {
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
284 fprintf(stderr, "%s line %d: osc-set line expected\n",
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
285 infname, lineno);
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
286 exit(1);
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
287 }
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
288 if (nfields < 2) {
175
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
289 emptyerr: fprintf(stderr, "%s line %d: osc-set must be non-empty\n",
172
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
290 infname, lineno);
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
291 exit(1);
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
292 }
175
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
293 p = 1;
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
294 if (fields[p][0] == '(') {
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
295 dummy_time_byte = input_paren_number(fields[p], 0, 255);
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
296 p++;
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
297 if (nfields < 3)
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
298 goto emptyerr;
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
299 } else
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
300 dummy_time_byte = 0;
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
301 for (; p < nfields; p++) {
172
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
302 oscn = input_number(fields[p], 0, 7);
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
303 osc_bit = 1 << oscn;
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
304 global_osc_set |= osc_bit;
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
305 }
175
b002c7cf5d03 fc-e1gen: support parenthesized options for bit0 and dummy time byte
Mychaela Falconia <falcon@freecalypso.org>
parents: 172
diff changeset
306 putc(dummy_time_byte, outf);
172
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
307 putc(global_osc_set, outf);
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
308 }
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
309
33
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
310 main(argc, argv)
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
311 char **argv;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
312 {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
313 if (argc != 3) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
314 fprintf(stderr, "usage: %s src-file e1-bin-file\n", argv[0]);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
315 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
316 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
317 if (strcmp(argv[1], "-")) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
318 infname = argv[1];
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
319 inf = fopen(infname, "r");
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
320 if (!inf) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
321 perror(infname);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
322 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
323 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
324 } else {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
325 infname = "stdin";
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
326 inf = stdin;
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
327 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
328 outfname = argv[2];
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
329 outf = fopen(outfname, "w");
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
330 if (!outf) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
331 perror(outfname);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
332 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
333 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
334
172
c138906889f7 fc-e1gen & e1-experiments: added global oscillator set header word
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
335 handle_global_osc_set();
33
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
336 /* main loop */
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
337 for (;;) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
338 do
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
339 get_input_line();
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
340 while (!nfields);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
341 if (!strcmp(fields[0], "time")) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
342 handle_time_line();
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
343 read_osc_lines();
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
344 emit_record();
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
345 } else if (!strcmp(fields[0], "end")) {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
346 emit_16bit_word(0);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
347 exit(0);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
348 } else {
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
349 fprintf(stderr, "%s line %d: expected time or end\n",
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
350 infname, lineno);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
351 exit(1);
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
352 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
353 }
cefdc6623322 fc-e1gen utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
354 }