@@ -12,10 +12,19 @@ char stdoutfilename[256];
12
12
FILE * stdoutfilepointer ;
13
13
14
14
extern int currentdmahole ;
15
-
16
- #define BASIC_VERSION_INFO "7800basic v0.24"
17
-
18
- int main (int argc , char * argv [])
15
+ extern int numredefvars ;
16
+ extern int numconstants ;
17
+ extern char incbasepath [500 ];
18
+ extern char redefined_variables [80000 ][100 ];
19
+ extern char bannerfilenames [1000 ][100 ];
20
+ extern char palettefilenames [1000 ][100 ];
21
+ extern char currentcharset [256 ];
22
+ extern int graphicsdatawidth [16 ];
23
+ extern char charactersetchars [257 ];
24
+
25
+ #define BASIC_VERSION_INFO "7800basic v0.27"
26
+
27
+ int main (int argc , char * argv [])
19
28
{
20
29
char * * statement ;
21
30
char * * deallocate_mem ;
@@ -39,7 +48,7 @@ int main(int argc, char *argv[])
39
48
int defi = 0 ;
40
49
path = NULL ;
41
50
// get command line arguments
42
- while ((i = getopt (argc , argv , "i:r:v" )) != -1 )
51
+ while ((i = getopt (argc , argv , "i:r:v" )) != -1 )
43
52
{
44
53
switch (i )
45
54
{
@@ -50,113 +59,70 @@ int main(int argc, char *argv[])
50
59
filename = optarg ;
51
60
break ;
52
61
case 'v' :
53
- printf ("%s (%s, %s)\n" , BASIC_VERSION_INFO , __TIME__ , __DATE__ );
54
- exit (0 );
62
+ printf ("%s (%s, %s)\n" , BASIC_VERSION_INFO , __TIME__ , __DATE__ );
63
+ exit (0 );
55
64
case '?' :
56
- fprintf (stderr , "usage: %s -r <variable redefs file> -i <includes path>\n" , argv [0 ]);
57
- exit (1 );
65
+ fprintf (stderr , "usage: %s -r <variable redefs file> -i <includes path>\n" , argv [0 ]);
66
+ exit (1 );
58
67
}
59
68
}
60
69
61
70
// global variable init...
62
- condpart = 0 ;
63
- ongosub = 0 ;
64
- decimal = 0 ;
65
- romsize = 0 ;
66
- romat4k = 0 ;
67
- bankcount = 0 ;
68
- currentbank = 0 ;
69
- doublebufferused = 0 ;
70
- boxcollisionused = 0 ;
71
- dmaplain = 0 ;
72
- templabel = 0 ;
73
- doublewide = 0 ;
74
- zoneheight = 16 ;
75
- zonelocking = 0 ;
76
- superchip = 0 ;
77
- optimization = 0 ;
78
- smartbranching = 1 ;
79
- collisionwrap = 1 ;
80
- strcpy (redefined_variables [numredefvars ++ ], "collisionwrap = 1" );
81
- line = 0 ;
82
- numfixpoint44 = 0 ;
83
- numfixpoint88 = 0 ;
71
+ strcpy (redefined_variables [numredefvars ++ ], "collisionwrap = 1" );
84
72
incbasepath [0 ] = 0 ;
85
- includesfile_already_done = 0 ;
86
- tallspritemode = 1 ;
87
- multtableindex = 0 ;
88
73
bannerfilenames [0 ][0 ] = 0 ;
89
74
palettefilenames [0 ][0 ] = 0 ;
90
75
currentcharset [0 ] = 0 ;
91
- ors = 0 ;
92
- numjsrs = 0 ;
93
- numfors = 0 ;
94
- numthens = 0 ;
95
- numelses = 0 ;
96
- numredefvars = 0 ;
97
- numconstants = 0 ;
98
- branchtargetnumber = 0 ;
99
- doingfunction = 0 ;
100
- sprite_index = 0 ;
101
- multisprite = 0 ;
102
- lifekernel = 0 ;
103
- playfield_number = 0 ;
104
- playfield_index [0 ] = 0 ;
105
- extra = 0 ;
106
- extralabel = 0 ;
107
- extraactive = 0 ;
108
- macroactive = 0 ;
109
76
110
77
for (i = 0 ; i < 16 ; i ++ )
111
78
graphicsdatawidth [i ] = 0 ;
112
79
113
- strcpy (charactersetchars , " abcdefghijklmnopqrstuvwxyz.!?,\"$():" );
80
+ strcpy (charactersetchars , " abcdefghijklmnopqrstuvwxyz.!?,\"$():" );
114
81
115
- fprintf (stderr , "%s %s %s\n" , BASIC_VERSION_INFO , __DATE__ , __TIME__ );
82
+ fprintf (stderr , "%s %s %s\n" , BASIC_VERSION_INFO , __DATE__ , __TIME__ );
116
83
117
84
// redirect STDOUT to 7800.asm, overwriting if it exists...
118
- strcpy (stdoutfilename , "7800.asm" );
119
- if ((stdoutfilepointer = freopen (stdoutfilename , "w" , stdout )) == NULL )
85
+ strcpy (stdoutfilename , "7800.asm" );
86
+ if ((stdoutfilepointer = freopen (stdoutfilename , "w" , stdout )) == NULL )
120
87
{
121
- prerror ("couldn't create the 7800.asm file." );
88
+ prerror ("couldn't create the 7800.asm file." );
122
89
}
123
90
124
- printf (" ;%s %s %s\n" , BASIC_VERSION_INFO , __DATE__ , __TIME__ );
91
+ printf (" ;%s %s %s\n" , BASIC_VERSION_INFO , __DATE__ , __TIME__ );
125
92
126
- printf ("SPACEOVERFLOW SET 0\n" );
93
+ printf ("SPACEOVERFLOW SET 0\n" );
127
94
128
95
// these asm files are produced dynamically, so as to allow out-of-order
129
96
// assembly with dasm. Their mere presence will affect the compile process
130
97
// so we start off by wiping them, if they exist from a previous compile.
131
- remove ("7800hole.0.asm" );
132
- remove ("7800hole.1.asm" );
133
- remove ("7800hole.2.asm" );
134
- remove ("banksetrom.asm" );
135
- remove ("banksetstrings.asm" );
98
+ remove ("7800hole.0.asm" );
99
+ remove ("7800hole.1.asm" );
100
+ remove ("7800hole.2.asm" );
101
+ remove ("banksetrom.asm" );
102
+ remove ("banksetstrings.asm" );
136
103
137
104
char removefile [256 ];
138
105
int t ;
139
- for ( t = 0 ; t < 100 ;t ++ )
106
+ for ( t = 0 ; t < 100 ; t ++ )
140
107
{
141
- sprintf (removefile ,"dump_gfx_%02d.bin" ,t );
142
- if (remove (removefile ))
143
- break ;
144
- sprintf (removefile ,"dump_gfx_%02d.asm" ,t );
145
- remove (removefile );
108
+ sprintf (removefile , "dump_gfx_%02d.bin" , t );
109
+ if (remove (removefile ))
110
+ break ;
111
+ sprintf (removefile , "dump_gfx_%02d.asm" , t );
112
+ remove (removefile );
146
113
}
147
-
148
114
149
- create_a78info (); //wipe/create a78 parameter file
150
115
151
- printf ("game\n" ); // label for start of game
152
- header_open (header );
153
- init_includes (path );
116
+ create_a78info (); //wipe/create a78 parameter file
117
+
118
+ printf ("game\n" ); // label for start of game
119
+ init_includes (path );
154
120
155
- statement = (char * * ) malloc (sizeof (char * ) * 200 );
121
+ statement = (char * * ) malloc (sizeof (char * ) * 200 );
156
122
deallocate_mem = statement ;
157
123
for (i = 0 ; i < 200 ; ++ i )
158
124
{
159
- statement [i ] = (char * ) malloc (sizeof (char ) * 200 );
125
+ statement [i ] = (char * ) malloc (sizeof (char ) * 200 );
160
126
}
161
127
162
128
while (1 )
@@ -168,12 +134,12 @@ int main(int argc, char *argv[])
168
134
statement [i ][j ] = '\0' ;
169
135
}
170
136
}
171
- c = fgets (code , 500 , stdin ); // get next line from input
172
- incline ();
173
- strcpy (displaycode , code );
137
+ c = fgets (code , 500 , stdin ); // get next line from input
138
+ incline ();
139
+ strcpy (displaycode , code );
174
140
175
141
// look for defines and remember them
176
- strcpy (mycode , code );
142
+ strcpy (mycode , code );
177
143
for (i = 0 ; i < 495 ; ++ i )
178
144
if (code [i ] == ' ' )
179
145
break ;
@@ -193,8 +159,8 @@ int main(int argc, char *argv[])
193
159
defr [defi ][j ++ ] = code [i ]; // get the definition
194
160
}
195
161
defr [defi ][j ] = '\0' ;
196
- removeCR (defr [defi ]);
197
- printf (";.%s.%s.\n" , def [defi ], defr [defi ]);
162
+ removeCR (defr [defi ]);
163
+ printf (";.%s.%s.\n" , def [defi ], defr [defi ]);
198
164
defi ++ ;
199
165
}
200
166
else if (defi )
@@ -208,24 +174,25 @@ int main(int argc, char *argv[])
208
174
{
209
175
if (defcount ++ > 250 )
210
176
{
211
- fprintf (stderr , "(%d) Infinitely repeating definition or too many instances of a definition\n" ,
212
- bbgetline ());
213
- exit (1 );
177
+ fprintf (stderr ,
178
+ "(%d) Infinitely repeating definition or too many instances of a definition\n" ,
179
+ bbgetline ());
180
+ exit (1 );
214
181
}
215
- codeadd = strstr (mycode , def [i ]);
182
+ codeadd = strstr (mycode , def [i ]);
216
183
if (codeadd == NULL )
217
184
break ;
218
185
for (j = 0 ; j < 500 ; ++ j )
219
186
finalcode [j ] = '\0' ;
220
- strncpy (finalcode , mycode , strlen (mycode ) - strlen (codeadd ));
221
- strcat (finalcode , defr [i ]);
222
- strcat (finalcode , codeadd + strlen (def [i ]));
223
- strcpy (mycode , finalcode );
187
+ strncpy (finalcode , mycode , strlen (mycode ) - strlen (codeadd ));
188
+ strcat (finalcode , defr [i ]);
189
+ strcat (finalcode , codeadd + strlen (def [i ]));
190
+ strcpy (mycode , finalcode );
224
191
}
225
192
}
226
193
}
227
- if (strcmp (mycode , code ))
228
- strcpy (code , mycode );
194
+ if (strcmp (mycode , code ))
195
+ strcpy (code , mycode );
229
196
if (!c )
230
197
break ; //end of file
231
198
@@ -251,63 +218,63 @@ int main(int argc, char *argv[])
251
218
else
252
219
{
253
220
multiplespace = 0 ;
254
- if (k < 199 ) //REVENG - avoid overrun when users use REM with long horizontal separators
221
+ if (k < 199 ) // avoid overrun when users use REM with long horizontal separators
255
222
statement [j ][k ++ ] = single ;
256
223
}
257
224
258
225
}
259
226
if (j > 150 )
260
227
{
261
- fprintf (stderr , "(%d) Warning: long line\n" , bbgetline ());
228
+ fprintf (stderr , "(%d) Warning: long line\n" , bbgetline ());
262
229
}
263
230
if (statement [0 ][0 ] == '\0' )
264
231
{
265
- sprintf (statement [0 ], "L0%d" , unnamed ++ );
232
+ sprintf (statement [0 ], "L0%d" , unnamed ++ );
266
233
}
267
- if (strncmp (statement [0 ], "end\0" , 3 ))
268
- printf (".%s ;; %s\n" , statement [0 ], displaycode ); // printf(".%s ; %s\n",statement[0],code);
234
+ if (strncmp (statement [0 ], "end\0" , 3 ))
235
+ printf (".%s ;; %s\n" , statement [0 ], displaycode ); // printf(".%s ; %s\n",statement[0],code);
269
236
else
270
- doend ();
271
-
272
- keywords (statement );
273
- if (numconstants == (MAXCONSTANTS - 1 ))
274
- {
275
- fprintf (stderr , "(%d) Maximum number of constants exceeded.\n" , bbgetline ());
276
- exit (1 );
277
- }
237
+ doend ();
238
+
239
+ keywords (statement );
240
+ if (numconstants == (MAXCONSTANTS - 1 ))
241
+ {
242
+ fprintf (stderr , "(%d) Maximum number of constants exceeded.\n" , bbgetline ());
243
+ exit (1 );
244
+ }
278
245
}
279
246
280
- printf ("DMAHOLEEND%d SET .\n" ,currentdmahole );
247
+ printf ("DMAHOLEEND%d SET .\n" , currentdmahole );
281
248
282
249
//if stdout is redirected, change it back to 7800.asm so the gameend label goes in the right spot...
283
- if (strcmp (stdoutfilename , "7800.asm" ) != 0 )
250
+ if (strcmp (stdoutfilename , "7800.asm" ) != 0 )
284
251
{
285
- strcpy (stdoutfilename , "7800.asm" );
286
- if ((stdoutfilepointer = freopen (stdoutfilename , "a" , stdout )) == NULL )
252
+ strcpy (stdoutfilename , "7800.asm" );
253
+ if ((stdoutfilepointer = freopen (stdoutfilename , "a" , stdout )) == NULL )
287
254
{
288
- prerror ("couldn't reopen the 7800.asm file." );
255
+ prerror ("couldn't reopen the 7800.asm file." );
289
256
}
290
257
}
291
258
292
- printf ("gameend\n" );
259
+ printf ("gameend\n" );
293
260
294
- barf_graphic_file ();
261
+ barf_graphic_file ();
295
262
296
- barfmultiplicationtables ();
263
+ barfmultiplicationtables ();
297
264
298
- printf (" if SPACEOVERFLOW > 0\n" );
299
- printf ( " echo \"\"\n" );
300
- printf ( " echo \"######## ERROR: space overflow detected in\",[SPACEOVERFLOW]d,\"areas.\"\n" );
301
- printf ( " echo \"######## look above for areas with negative ROM space left.\"\n" );
302
- printf ( " echo \"######## Aborting assembly.\"\n" );
303
- printf ( " ERR\n" );
304
- printf (" endif\n" );
265
+ printf (" if SPACEOVERFLOW > 0\n" );
266
+ printf ( " echo \"\"\n" );
267
+ printf ( " echo \"######## ERROR: space overflow detected in\",[SPACEOVERFLOW]d,\"areas.\"\n" );
268
+ printf ( " echo \"######## look above for areas with negative ROM space left.\"\n" );
269
+ printf ( " echo \"######## Aborting assembly.\"\n" );
270
+ printf ( " ERR\n" );
271
+ printf (" endif\n" );
305
272
306
- printf (" \n\n" );
273
+ printf (" \n\n" );
307
274
308
- header_write (header , filename );
309
- create_includes (includes_file );
310
- fprintf (stderr , "7800basic compilation complete.\n" );
311
- freemem (deallocate_mem );
275
+ header_write (header , filename );
276
+ create_includes (includes_file );
277
+ fprintf (stderr , "7800basic compilation complete.\n" );
278
+ freemem (deallocate_mem );
312
279
return 0 ;
313
280
}
0 commit comments