ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
_init.c
Go to the documentation of this file.
1/*****************************************************************************
2 * ugBASIC - an isomorphic BASIC language compiler for retrocomputers *
3 *****************************************************************************
4 * Copyright 2021-2026 Marco Spedaletti (asimov@mclink.it)
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *----------------------------------------------------------------------------
18 * Concesso in licenza secondo i termini della Licenza Apache, versione 2.0
19 * (la "Licenza"); è proibito usare questo file se non in conformità alla
20 * Licenza. Una copia della Licenza è disponibile all'indirizzo:
21 *
22 * http://www.apache.org/licenses/LICENSE-2.0
23 *
24 * Se non richiesto dalla legislazione vigente o concordato per iscritto,
25 * il software distribuito nei termini della Licenza è distribuito
26 * "COSÌ COM'È", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o
27 * implicite. Consultare la Licenza per il testo specifico che regola le
28 * autorizzazioni e le limitazioni previste dalla medesima.
29 ****************************************************************************/
30
31/****************************************************************************
32 * INCLUDE SECTION
33 ****************************************************************************/
34
35#include "../../ugbc.h"
36
37/****************************************************************************
38 * CODE SECTION
39 ****************************************************************************/
40
41void begin_compilation( Environment * _environment ) {
42
43 _environment->asmFile = fopen( _environment->asmFileName, "wt");
44 if ( ! _environment->asmFile ) {
45 fprintf(stderr, "Unable to open output file: %s\n", _environment->asmFileName );
46 exit(EXIT_FAILURE);
47 }
48
49 if ( _environment->debuggerLabelsFileName ) {
50 _environment->debuggerLabelsFile = fopen( _environment->debuggerLabelsFileName, "wt");
51 if ( ! _environment->debuggerLabelsFile ) {
52 fprintf(stderr, "Unable to open labels file: %s\n", _environment->debuggerLabelsFileName );
53 exit(EXIT_FAILURE);
54 }
55 }
56
57 target_initialization( _environment );
58
59}
60
61void setup_text_variables( Environment * _environment ) {
62
63 variable_import( _environment, "XCURSYS", VT_SBYTE, 0 );
64 variable_global( _environment, "XCURSYS" );
65 // variable_store( _environment, "XCURSYS", 0 );
66 variable_import( _environment, "YCURSYS", VT_SBYTE, 0 );
67 variable_global( _environment, "YCURSYS" );
68 // variable_store( _environment, "YCURSYS", 0 );
69 variable_define( _environment, "PEN", VT_COLOR, _environment->defaultPenColor );
70 variable_global( _environment, "PEN" );
71 variable_define( _environment, "PAPER", VT_COLOR, _environment->defaultPaperColor );
72 variable_global( _environment, "PAPER" );
73 variable_define( _environment, "SBINK0", VT_COLOR, _environment->defaultPenColor );
74 variable_global( _environment, "SBINK0" );
75 variable_define( _environment, "SBINK1", VT_COLOR, _environment->defaultPenColor );
76 variable_global( _environment, "SBINK1" );
77 variable_define( _environment, "SBINK2", VT_COLOR, _environment->defaultPenColor );
78 variable_global( _environment, "SBINK2" );
79 variable_define( _environment, "SBINK3", VT_COLOR, _environment->defaultPenColor );
80 variable_global( _environment, "SBINK3" );
81 variable_import( _environment, "DRAWSCALE", VT_BYTE, 4 );
82 variable_global( _environment, "DRAWSCALE" );
83 variable_import( _environment, "DRAWANGLE", VT_BYTE, 0 );
84 variable_global( _environment, "DRAWANGLE" );
85
86 variable_import( _environment, "DRAWUCOMMAND", VT_CHAR, 'U' );
87 variable_global( _environment, "DRAWUCOMMAND" );
88 variable_import( _environment, "DRAWDCOMMAND", VT_CHAR, 'D' );
89 variable_global( _environment, "DRAWDCOMMAND" );
90 variable_import( _environment, "DRAWLCOMMAND", VT_CHAR, 'L' );
91 variable_global( _environment, "DRAWLCOMMAND" );
92 variable_import( _environment, "DRAWRCOMMAND", VT_CHAR, 'R' );
93 variable_global( _environment, "DRAWRCOMMAND" );
94 variable_import( _environment, "DRAWECOMMAND", VT_CHAR, 'E' );
95 variable_global( _environment, "DRAWECOMMAND" );
96 variable_import( _environment, "DRAWFCOMMAND", VT_CHAR, 'F' );
97 variable_global( _environment, "DRAWFCOMMAND" );
98 variable_import( _environment, "DRAWGCOMMAND", VT_CHAR, 'G' );
99 variable_global( _environment, "DRAWGCOMMAND" );
100 variable_import( _environment, "DRAWHCOMMAND", VT_CHAR, 'H' );
101 variable_global( _environment, "DRAWHCOMMAND" );
102
103 variable_import( _environment, "DRAWUDCOMMAND", VT_CHAR, 'x' );
104 variable_global( _environment, "DRAWUDCOMMAND" );
105 variable_import( _environment, "DRAWDDCOMMAND", VT_CHAR, 'x' );
106 variable_global( _environment, "DRAWDDCOMMAND" );
107 variable_import( _environment, "DRAWLDCOMMAND", VT_CHAR, 'x' );
108 variable_global( _environment, "DRAWLDCOMMAND" );
109 variable_import( _environment, "DRAWRDCOMMAND", VT_CHAR, 'x' );
110 variable_global( _environment, "DRAWRDCOMMAND" );
111 variable_import( _environment, "DRAWEDCOMMAND", VT_CHAR, 'x' );
112 variable_global( _environment, "DRAWEDCOMMAND" );
113 variable_import( _environment, "DRAWFDCOMMAND", VT_CHAR, 'x' );
114 variable_global( _environment, "DRAWFDCOMMAND" );
115 variable_import( _environment, "DRAWGDCOMMAND", VT_CHAR, 'x' );
116 variable_global( _environment, "DRAWGDCOMMAND" );
117 variable_import( _environment, "DRAWHDCOMMAND", VT_CHAR, 'x' );
118 variable_global( _environment, "DRAWHDCOMMAND" );
119
120 variable_define( _environment, "TAB", VT_STRING, 0 );
121 variable_store_string( _environment, "TAB", "\t");
122 variable_global( _environment, "TAB" );
123 variable_import( _environment, "PROTOTHREADCT", VT_BYTE, 0 );
124 variable_global( _environment, "PROTOTHREADCT" );
125 variable_import( _environment, "CPURANDOM_SEED", VT_DWORD, 0xffeaff42 );
126 variable_global( _environment, "CPURANDOM_SEED" );
127 variable_import( _environment, "PLAYDURATION", VT_BYTE, 2 );
128 variable_global( _environment, "PLAYDURATION" );
129 variable_import( _environment, "PLAYOCTAVE", VT_BYTE, 6 );
130 variable_global( _environment, "PLAYOCTAVE" );
131 variable_import( _environment, "PLAYTEMPO", VT_BYTE, 2 );
132 variable_global( _environment, "PLAYTEMPO" );
133 variable_import( _environment, "PLAYVOLUME", VT_BYTE, 15 );
134 variable_global( _environment, "PLAYVOLUME" );
135
136 variable_import( _environment, "XCURSYS", VT_SBYTE, 0 );
137 variable_global( _environment, "XCURSYS" );
138 variable_import( _environment, "YCURSYS", VT_SBYTE, 0 );
139 variable_global( _environment, "YCURSYS" );
140
141 variable_import( _environment, "CONSOLEID", VT_SBYTE, 0xff );
142 variable_global( _environment, "CONSOLEID" );
143
144 variable_import( _environment, "CONSOLEX1", VT_SBYTE, 0 );
145 variable_global( _environment, "CONSOLEX1" );
146 variable_import( _environment, "CONSOLEY1", VT_SBYTE, 0 );
147 variable_global( _environment, "CONSOLEY1" );
148 variable_import( _environment, "CONSOLEX2", VT_SBYTE, TEXT_COLUMNS_COUNT-1 );
149 variable_global( _environment, "CONSOLEX2" );
150 variable_import( _environment, "CONSOLEY2", VT_SBYTE, TEXT_ROWS_COUNT-1 );
151 variable_global( _environment, "CONSOLEY2" );
152 variable_import( _environment, "CONSOLEW", VT_SBYTE, TEXT_COLUMNS_COUNT );
153 variable_global( _environment, "CONSOLEW" );
154 variable_import( _environment, "CONSOLEH", VT_SBYTE, TEXT_ROWS_COUNT );
155 variable_global( _environment, "CONSOLEH" );
156 variable_import( _environment, "CONSOLESL", VT_SWORD, 0 );
157 variable_global( _environment, "CONSOLESL" );
158
159 variable_import( _environment, "CONSOLES", VT_BUFFER, MAX_CONSOLES * 8 );
160 variable_global( _environment, "CONSOLES" );
161 variable_import( _environment, "CONSOLES2", VT_BUFFER, MAX_CONSOLES * 2 );
162 variable_global( _environment, "CONSOLES2" );
163
164 variable_import( _environment, "FPSCRAP", VT_BUFFER, 16 );
165 variable_global( _environment, "FPSCRAP" );
166
167}
168
169void finalize_text_variables( Environment * _environment ) {
170
171 if ( _environment->deployed.draw_string ) {
172 variable_export( _environment, "DRAWSCALE", VT_BYTE, 4 );
173 variable_export( _environment, "DRAWANGLE", VT_BYTE, 0 );
174 variable_export( _environment, "DRAWUCOMMAND", VT_CHAR, 'U' );
175 variable_export( _environment, "DRAWDCOMMAND", VT_CHAR, 'D' );
176 variable_export( _environment, "DRAWLCOMMAND", VT_CHAR, 'L' );
177 variable_export( _environment, "DRAWRCOMMAND", VT_CHAR, 'R' );
178 variable_export( _environment, "DRAWECOMMAND", VT_CHAR, 'E' );
179 variable_export( _environment, "DRAWFCOMMAND", VT_CHAR, 'F' );
180 variable_export( _environment, "DRAWGCOMMAND", VT_CHAR, 'G' );
181 variable_export( _environment, "DRAWHCOMMAND", VT_CHAR, 'H' );
182
183 variable_export( _environment, "DRAWUDCOMMAND", VT_CHAR, 'x' );
184 variable_export( _environment, "DRAWDDCOMMAND", VT_CHAR, 'x' );
185 variable_export( _environment, "DRAWLDCOMMAND", VT_CHAR, 'x' );
186 variable_export( _environment, "DRAWRDCOMMAND", VT_CHAR, 'x' );
187 variable_export( _environment, "DRAWEDCOMMAND", VT_CHAR, 'x' );
188 variable_export( _environment, "DRAWFDCOMMAND", VT_CHAR, 'x' );
189 variable_export( _environment, "DRAWGDCOMMAND", VT_CHAR, 'x' );
190 variable_export( _environment, "DRAWHDCOMMAND", VT_CHAR, 'x' );
191
192 variable_export( _environment, "DRAWSCALE", VT_BYTE, 4 );
193 variable_export( _environment, "DRAWANGLE", VT_BYTE, 0 );
194
195 }
196
197 if ( _environment->deployed.draw_tsb_string ) {
198 variable_export( _environment, "DRAWSCALE", VT_BYTE, 4 );
199 variable_export( _environment, "DRAWANGLE", VT_BYTE, 0 );
200 variable_export( _environment, "DRAWUCOMMAND", VT_CHAR, '1' );
201 variable_store( _environment, "DRAWUCOMMAND", '1' );
202 variable_export( _environment, "DRAWDCOMMAND", VT_CHAR, '2' );
203 variable_store( _environment, "DRAWDCOMMAND", '2' );
204 variable_export( _environment, "DRAWLCOMMAND", VT_CHAR, '3' );
205 variable_store( _environment, "DRAWLCOMMAND", '3' );
206 variable_export( _environment, "DRAWRCOMMAND", VT_CHAR, '0' );
207 variable_store( _environment, "DRAWRCOMMAND", '0' );
208 variable_export( _environment, "DRAWECOMMAND", VT_CHAR, 'x' );
209 variable_store( _environment, "DRAWECOMMAND", 'x' );
210 variable_export( _environment, "DRAWFCOMMAND", VT_CHAR, 'x' );
211 variable_store( _environment, "DRAWFCOMMAND", 'x' );
212 variable_export( _environment, "DRAWGCOMMAND", VT_CHAR, 'x' );
213 variable_store( _environment, "DRAWGCOMMAND", 'x' );
214 variable_export( _environment, "DRAWHCOMMAND", VT_CHAR, 'x' );
215 variable_store( _environment, "DRAWHCOMMAND", 'x' );
216
217 variable_export( _environment, "DRAWUDCOMMAND", VT_CHAR, '6' );
218 variable_store( _environment, "DRAWUDCOMMAND", '6' );
219 variable_export( _environment, "DRAWDDCOMMAND", VT_CHAR, '7' );
220 variable_store( _environment, "DRAWDDCOMMAND", '7' );
221 variable_export( _environment, "DRAWLDCOMMAND", VT_CHAR, '8' );
222 variable_store( _environment, "DRAWLDCOMMAND", '8' );
223 variable_export( _environment, "DRAWRDCOMMAND", VT_CHAR, '5' );
224 variable_store( _environment, "DRAWRDCOMMAND", '5' );
225 variable_export( _environment, "DRAWEDCOMMAND", VT_CHAR, 'x' );
226 variable_store( _environment, "DRAWEDCOMMAND", 'x' );
227 variable_export( _environment, "DRAWFDCOMMAND", VT_CHAR, 'x' );
228 variable_store( _environment, "DRAWFDCOMMAND", 'x' );
229 variable_export( _environment, "DRAWGDCOMMAND", VT_CHAR, 'x' );
230 variable_store( _environment, "DRAWGDCOMMAND", 'x' );
231 variable_export( _environment, "DRAWHDCOMMAND", VT_CHAR, 'x' );
232 variable_store( _environment, "DRAWHDCOMMAND", 'x' );
233
234 variable_export( _environment, "DRAWSCALE", VT_BYTE, 1 );
235 variable_store( _environment, "DRAWSCALE", 1 );
236 variable_export( _environment, "DRAWANGLE", VT_BYTE, 0 );
237 variable_store( _environment, "DRAWANGLE", 0 );
238
239 }
240
241 if ( !_environment->deployed.draw_tsb_string && !_environment->deployed.draw_string ) {
242 variable_delete( _environment, "DRAWSCALE" );
243 variable_delete( _environment, "DRAWANGLE" );
244 variable_delete( _environment, "DRAWUCOMMAND" );
245 variable_delete( _environment, "DRAWDCOMMAND" );
246 variable_delete( _environment, "DRAWLCOMMAND" );
247 variable_delete( _environment, "DRAWRCOMMAND" );
248 variable_delete( _environment, "DRAWECOMMAND" );
249 variable_delete( _environment, "DRAWFCOMMAND" );
250 variable_delete( _environment, "DRAWGCOMMAND" );
251 variable_delete( _environment, "DRAWHCOMMAND" );
252
253 variable_delete( _environment, "DRAWUDCOMMAND" );
254 variable_delete( _environment, "DRAWDDCOMMAND" );
255 variable_delete( _environment, "DRAWLDCOMMAND" );
256 variable_delete( _environment, "DRAWRDCOMMAND" );
257 variable_delete( _environment, "DRAWEDCOMMAND" );
258 variable_delete( _environment, "DRAWFDCOMMAND" );
259 variable_delete( _environment, "DRAWGDCOMMAND" );
260 variable_delete( _environment, "DRAWHDCOMMAND" );
261
262 variable_delete( _environment, "DRAWSCALE" );
263 variable_delete( _environment, "DRAWANGLE" );
264 }
265
266 if ( _environment->deployed.play_string ) {
267 variable_export( _environment, "PLAYDURATION", VT_BYTE, 2 );
268 variable_export( _environment, "PLAYOCTAVE", VT_BYTE, 6 );
269 variable_export( _environment, "PLAYTEMPO", VT_BYTE, 2 );
270 variable_export( _environment, "PLAYVOLUME", VT_BYTE, 15 );
271 } else {
272 variable_delete( _environment, "PLAYDURATION" );
273 variable_delete( _environment, "PLAYOCTAVE" );
274 variable_delete( _environment, "PLAYTEMPO" );
275 variable_delete( _environment, "PLAYVOLUME" );
276 }
277
278 if ( _environment->deployed.fp_vars ) {
279 variable_export( _environment, "FPSCRAP", VT_BUFFER, 16 );
280 } else {
281 variable_delete( _environment, "FPSCRAP" );
282 }
283
284 if ( _environment->deployed.protothread ) {
285
286 } else {
287 variable_delete( _environment, "PROTOTHREADCT" );
288 }
289
290}
#define TEXT_COLUMNS_COUNT
Definition 6847.h:74
#define TEXT_ROWS_COUNT
Definition 6847.h:75
Variable * variable_import(Environment *_environment, char *_name, VariableType _type, int _size_or_value)
int variable_delete(Environment *_environment, char *_name)
void variable_global(Environment *_environment, char *_pattern)
Variable * variable_define(Environment *_environment, char *_name, VariableType _type, int _value)
Define a variable for the program.
Variable * variable_export(Environment *_environment, char *_name, VariableType _type, int _size_or_value)
Variable * variable_store_string(Environment *_environment, char *_destination, char *_value)
Store a string to a variable.
Variable * variable_store(Environment *_environment, char *_destination, unsigned int _value)
Store a direct value to a variable.
void target_initialization(Environment *_environment)
Definition _init.c:43
void begin_compilation(Environment *_environment)
Definition _init.c:41
void setup_text_variables(Environment *_environment)
Definition _init.c:61
void finalize_text_variables(Environment *_environment)
Definition _init.c:169
int protothread
Definition ugbc.h:1823
int draw_string
Definition ugbc.h:1925
int draw_tsb_string
Definition ugbc.h:1926
int play_string
Definition ugbc.h:1928
int fp_vars
Definition ugbc.h:1854
FILE * asmFile
Definition ugbc.h:3309
FILE * debuggerLabelsFile
Definition ugbc.h:3319
char * debuggerLabelsFileName
Definition ugbc.h:2300
char * asmFileName
Definition ugbc.h:2285
int defaultPaperColor
Definition ugbc.h:3226
Deployed deployed
Definition ugbc.h:2921
int defaultPenColor
Definition ugbc.h:3225
struct _Environment Environment
Structure of compilation environment.
@ VT_STRING
Definition ugbc.h:474
@ VT_SWORD
Definition ugbc.h:457
@ VT_BYTE
Definition ugbc.h:450
@ VT_DWORD
Definition ugbc.h:460
@ VT_CHAR
Definition ugbc.h:498
@ VT_BUFFER
Definition ugbc.h:477
@ VT_SBYTE
Definition ugbc.h:452
@ VT_COLOR
Definition ugbc.h:471
#define MAX_CONSOLES
Definition ugbc.h:565