ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
rot.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
41/* <usermanual>
42@keyword ROT
43
44@english
45
46The ''ROT'' command is used to set the starting ''angle'' and ''step'' for subsequent
47drawing operations with the DRAW command.
48
49The ''angle'' corresponds to the quadrant of interest, starting towards north (0) with an angle
50of 0 degree, and then proceeding clockwise: 1 = 45 degrees, 2 = 90 degrees and so on.
51
52@italian
53
54Il comando ''ROT'' ha lo scopo di impostare l'angolo di partenza (''angle'') e lo ''step'' per
55le successive operazioni di disegno con il comando DRAW.
56
57L'angolo (''angle'') corrisponde al quadrante di interesse, partendo verso nord (0) con angolo di 0 gradi, e
58poi procedendo in senso orario: 1 = 45 gradi, 2 = 90 gradi e così via.
59
60@syntax ROT angle[, step]
61
62@example INK WHITE
63@example PLOT 100, 100
64@example i = 0
65@example DO
66@example ROT i
67@example DRAW "U10BD10"
68@example INC i
69@example EXIT IF i > 8
70@example WAIT KEY
71@example LOOP
72
73@usedInExample graphics_draw_01.bas
74
75@seeAlso DRAW (program)
76
77</usermanual> */
78void rot( Environment * _environment, char * _angle, char * _step ) {
79
81
82 if ( _angle ) {
83
84 char rotate0CommandLabel[MAX_TEMPORARY_STORAGE]; sprintf( rotate0CommandLabel, "%sr000", label );
85 char rotate45CommandLabel[MAX_TEMPORARY_STORAGE]; sprintf( rotate45CommandLabel, "%sr045", label );
86 char rotate90CommandLabel[MAX_TEMPORARY_STORAGE]; sprintf( rotate90CommandLabel, "%sr090", label );
87 char rotate135CommandLabel[MAX_TEMPORARY_STORAGE]; sprintf( rotate135CommandLabel, "%sr135", label );
88 char rotate180CommandLabel[MAX_TEMPORARY_STORAGE]; sprintf( rotate180CommandLabel, "%sr180", label );
89 char rotate225CommandLabel[MAX_TEMPORARY_STORAGE]; sprintf( rotate225CommandLabel, "%sr225", label );
90 char rotate270CommandLabel[MAX_TEMPORARY_STORAGE]; sprintf( rotate270CommandLabel, "%sr270", label );
91 char rotate315CommandLabel[MAX_TEMPORARY_STORAGE]; sprintf( rotate315CommandLabel, "%sr315", label );
92 char done2CommandLabel[MAX_TEMPORARY_STORAGE]; sprintf( done2CommandLabel, "%srdon", label );
93
94 Variable * drawUCommandLetter = variable_retrieve( _environment, "DRAWUCOMMAND" );
95 Variable * drawDCommandLetter = variable_retrieve( _environment, "DRAWDCOMMAND" );
96 Variable * drawLCommandLetter = variable_retrieve( _environment, "DRAWLCOMMAND" );
97 Variable * drawRCommandLetter = variable_retrieve( _environment, "DRAWRCOMMAND" );
98 Variable * drawECommandLetter = variable_retrieve( _environment, "DRAWECOMMAND" );
99 Variable * drawFCommandLetter = variable_retrieve( _environment, "DRAWFCOMMAND" );
100 Variable * drawGCommandLetter = variable_retrieve( _environment, "DRAWGCOMMAND" );
101 Variable * drawHCommandLetter = variable_retrieve( _environment, "DRAWHCOMMAND" );
102
103 Variable * drawUDCommandLetter = variable_retrieve( _environment, "DRAWUDCOMMAND" );
104 Variable * drawDDCommandLetter = variable_retrieve( _environment, "DRAWDDCOMMAND" );
105 Variable * drawLDCommandLetter = variable_retrieve( _environment, "DRAWLDCOMMAND" );
106 Variable * drawRDCommandLetter = variable_retrieve( _environment, "DRAWRDCOMMAND" );
107 Variable * drawEDCommandLetter = variable_retrieve( _environment, "DRAWEDCOMMAND" );
108 Variable * drawFDCommandLetter = variable_retrieve( _environment, "DRAWFDCOMMAND" );
109 Variable * drawGDCommandLetter = variable_retrieve( _environment, "DRAWGDCOMMAND" );
110 Variable * drawHDCommandLetter = variable_retrieve( _environment, "DRAWHDCOMMAND" );
111
112 Variable * angle = variable_retrieve_or_define( _environment, _angle, VT_BYTE, 0 );
113
114 cpu_compare_and_branch_8bit_const( _environment, angle->realName, 0, rotate0CommandLabel, 1 );
115 cpu_compare_and_branch_8bit_const( _environment, angle->realName, 1, rotate45CommandLabel, 1 );
116 cpu_compare_and_branch_8bit_const( _environment, angle->realName, 2, rotate90CommandLabel, 1 );
117 cpu_compare_and_branch_8bit_const( _environment, angle->realName, 3, rotate135CommandLabel, 1 );
118 cpu_compare_and_branch_8bit_const( _environment, angle->realName, 4, rotate180CommandLabel, 1 );
119 cpu_compare_and_branch_8bit_const( _environment, angle->realName, 5, rotate225CommandLabel, 1 );
120 cpu_compare_and_branch_8bit_const( _environment, angle->realName, 6, rotate270CommandLabel, 1 );
121 cpu_compare_and_branch_8bit_const( _environment, angle->realName, 7, rotate315CommandLabel, 1 );
122
123 cpu_label( _environment, rotate0CommandLabel );
124 if ( _environment->drawUsingTsbSyntax ) {
125 cpu_store_char( _environment, drawUCommandLetter->realName, '1' );
126 cpu_store_char( _environment, drawDCommandLetter->realName, '2' );
127 cpu_store_char( _environment, drawLCommandLetter->realName, '3' );
128 cpu_store_char( _environment, drawRCommandLetter->realName, '0' );
129 cpu_store_char( _environment, drawFCommandLetter->realName, 'x' );
130 cpu_store_char( _environment, drawGCommandLetter->realName, 'x' );
131 cpu_store_char( _environment, drawECommandLetter->realName, 'x' );
132 cpu_store_char( _environment, drawHCommandLetter->realName, 'x' );
133 cpu_store_char( _environment, drawUDCommandLetter->realName, '6' );
134 cpu_store_char( _environment, drawDDCommandLetter->realName, '7' );
135 cpu_store_char( _environment, drawLDCommandLetter->realName, '8' );
136 cpu_store_char( _environment, drawRDCommandLetter->realName, '5' );
137 cpu_store_char( _environment, drawFDCommandLetter->realName, 'x' );
138 cpu_store_char( _environment, drawGDCommandLetter->realName, 'x' );
139 cpu_store_char( _environment, drawEDCommandLetter->realName, 'x' );
140 cpu_store_char( _environment, drawHDCommandLetter->realName, 'x' );
141 } else {
142 cpu_store_char( _environment, drawUCommandLetter->realName, 'U' );
143 cpu_store_char( _environment, drawDCommandLetter->realName, 'D' );
144 cpu_store_char( _environment, drawLCommandLetter->realName, 'L' );
145 cpu_store_char( _environment, drawRCommandLetter->realName, 'R' );
146 cpu_store_char( _environment, drawECommandLetter->realName, 'E' );
147 cpu_store_char( _environment, drawFCommandLetter->realName, 'F' );
148 cpu_store_char( _environment, drawGCommandLetter->realName, 'G' );
149 cpu_store_char( _environment, drawHCommandLetter->realName, 'H' );
150 cpu_store_char( _environment, drawUDCommandLetter->realName, 'x' );
151 cpu_store_char( _environment, drawDDCommandLetter->realName, 'x' );
152 cpu_store_char( _environment, drawLDCommandLetter->realName, 'x' );
153 cpu_store_char( _environment, drawRDCommandLetter->realName, 'x' );
154 cpu_store_char( _environment, drawFDCommandLetter->realName, 'x' );
155 cpu_store_char( _environment, drawGDCommandLetter->realName, 'x' );
156 cpu_store_char( _environment, drawEDCommandLetter->realName, 'x' );
157 cpu_store_char( _environment, drawHDCommandLetter->realName, 'x' );
158 }
159
160 cpu_jump( _environment, done2CommandLabel );
161
162 cpu_label( _environment, rotate45CommandLabel );
163 if ( _environment->drawUsingTsbSyntax ) {
164 cpu_store_char( _environment, drawUCommandLetter->realName, 'x' );
165 cpu_store_char( _environment, drawDCommandLetter->realName, 'x' );
166 cpu_store_char( _environment, drawLCommandLetter->realName, 'x' );
167 cpu_store_char( _environment, drawRCommandLetter->realName, 'x' );
168 cpu_store_char( _environment, drawFCommandLetter->realName, '1' );
169 cpu_store_char( _environment, drawGCommandLetter->realName, '2' );
170 cpu_store_char( _environment, drawECommandLetter->realName, '3' );
171 cpu_store_char( _environment, drawHCommandLetter->realName, '0' );
172 cpu_store_char( _environment, drawUDCommandLetter->realName, 'x' );
173 cpu_store_char( _environment, drawDDCommandLetter->realName, 'x' );
174 cpu_store_char( _environment, drawLDCommandLetter->realName, 'x' );
175 cpu_store_char( _environment, drawRDCommandLetter->realName, 'x' );
176 cpu_store_char( _environment, drawFDCommandLetter->realName, '6' );
177 cpu_store_char( _environment, drawGDCommandLetter->realName, '7' );
178 cpu_store_char( _environment, drawEDCommandLetter->realName, '8' );
179 cpu_store_char( _environment, drawHDCommandLetter->realName, '5' );
180 } else {
181 cpu_store_char( _environment, drawUCommandLetter->realName, 'H' );
182 cpu_store_char( _environment, drawDCommandLetter->realName, 'F' );
183 cpu_store_char( _environment, drawLCommandLetter->realName, 'G' );
184 cpu_store_char( _environment, drawRCommandLetter->realName, 'E' );
185 cpu_store_char( _environment, drawECommandLetter->realName, 'U' );
186 cpu_store_char( _environment, drawFCommandLetter->realName, 'R' );
187 cpu_store_char( _environment, drawGCommandLetter->realName, 'D' );
188 cpu_store_char( _environment, drawHCommandLetter->realName, 'L' );
189 cpu_store_char( _environment, drawUDCommandLetter->realName, 'x' );
190 cpu_store_char( _environment, drawDDCommandLetter->realName, 'x' );
191 cpu_store_char( _environment, drawLDCommandLetter->realName, 'x' );
192 cpu_store_char( _environment, drawRDCommandLetter->realName, 'x' );
193 cpu_store_char( _environment, drawFDCommandLetter->realName, 'x' );
194 cpu_store_char( _environment, drawGDCommandLetter->realName, 'x' );
195 cpu_store_char( _environment, drawEDCommandLetter->realName, 'x' );
196 cpu_store_char( _environment, drawHDCommandLetter->realName, 'x' );
197 }
198 cpu_jump( _environment, done2CommandLabel );
199
200 cpu_label( _environment, rotate90CommandLabel );
201 if ( _environment->drawUsingTsbSyntax ) {
202 cpu_store_char( _environment, drawUCommandLetter->realName, '3' );
203 cpu_store_char( _environment, drawDCommandLetter->realName, '0' );
204 cpu_store_char( _environment, drawLCommandLetter->realName, '2' );
205 cpu_store_char( _environment, drawRCommandLetter->realName, '1' );
206 cpu_store_char( _environment, drawFCommandLetter->realName, 'x' );
207 cpu_store_char( _environment, drawGCommandLetter->realName, 'x' );
208 cpu_store_char( _environment, drawECommandLetter->realName, 'x' );
209 cpu_store_char( _environment, drawHCommandLetter->realName, 'x' );
210 cpu_store_char( _environment, drawUDCommandLetter->realName, '8' );
211 cpu_store_char( _environment, drawDDCommandLetter->realName, '5' );
212 cpu_store_char( _environment, drawLDCommandLetter->realName, '7' );
213 cpu_store_char( _environment, drawRDCommandLetter->realName, '6' );
214 cpu_store_char( _environment, drawFDCommandLetter->realName, 'x' );
215 cpu_store_char( _environment, drawGDCommandLetter->realName, 'x' );
216 cpu_store_char( _environment, drawEDCommandLetter->realName, 'x' );
217 cpu_store_char( _environment, drawHDCommandLetter->realName, 'x' );
218 } else {
219 cpu_store_char( _environment, drawUCommandLetter->realName, 'L' );
220 cpu_store_char( _environment, drawDCommandLetter->realName, 'R' );
221 cpu_store_char( _environment, drawLCommandLetter->realName, 'D' );
222 cpu_store_char( _environment, drawRCommandLetter->realName, 'U' );
223 cpu_store_char( _environment, drawECommandLetter->realName, 'H' );
224 cpu_store_char( _environment, drawFCommandLetter->realName, 'E' );
225 cpu_store_char( _environment, drawGCommandLetter->realName, 'F' );
226 cpu_store_char( _environment, drawHCommandLetter->realName, 'G' );
227 cpu_store_char( _environment, drawUDCommandLetter->realName, 'x' );
228 cpu_store_char( _environment, drawDDCommandLetter->realName, 'x' );
229 cpu_store_char( _environment, drawLDCommandLetter->realName, 'x' );
230 cpu_store_char( _environment, drawRDCommandLetter->realName, 'x' );
231 cpu_store_char( _environment, drawFDCommandLetter->realName, 'x' );
232 cpu_store_char( _environment, drawGDCommandLetter->realName, 'x' );
233 cpu_store_char( _environment, drawEDCommandLetter->realName, 'x' );
234 cpu_store_char( _environment, drawHDCommandLetter->realName, 'x' );
235 }
236 cpu_jump( _environment, done2CommandLabel );
237
238 cpu_label( _environment, rotate135CommandLabel );
239 if ( _environment->drawUsingTsbSyntax ) {
240 cpu_store_char( _environment, drawUCommandLetter->realName, 'x' );
241 cpu_store_char( _environment, drawDCommandLetter->realName, 'x' );
242 cpu_store_char( _environment, drawLCommandLetter->realName, 'x' );
243 cpu_store_char( _environment, drawRCommandLetter->realName, 'x' );
244 cpu_store_char( _environment, drawFCommandLetter->realName, '3' );
245 cpu_store_char( _environment, drawGCommandLetter->realName, '0' );
246 cpu_store_char( _environment, drawECommandLetter->realName, '2' );
247 cpu_store_char( _environment, drawHCommandLetter->realName, '1' );
248 cpu_store_char( _environment, drawUDCommandLetter->realName, 'x' );
249 cpu_store_char( _environment, drawDDCommandLetter->realName, 'x' );
250 cpu_store_char( _environment, drawLDCommandLetter->realName, 'x' );
251 cpu_store_char( _environment, drawRDCommandLetter->realName, 'x' );
252 cpu_store_char( _environment, drawFDCommandLetter->realName, '8' );
253 cpu_store_char( _environment, drawGDCommandLetter->realName, '5' );
254 cpu_store_char( _environment, drawEDCommandLetter->realName, '7' );
255 cpu_store_char( _environment, drawHDCommandLetter->realName, '6' );
256 } else {
257 cpu_store_char( _environment, drawUCommandLetter->realName, 'G' );
258 cpu_store_char( _environment, drawDCommandLetter->realName, 'E' );
259 cpu_store_char( _environment, drawLCommandLetter->realName, 'F' );
260 cpu_store_char( _environment, drawRCommandLetter->realName, 'H' );
261 cpu_store_char( _environment, drawECommandLetter->realName, 'L' );
262 cpu_store_char( _environment, drawFCommandLetter->realName, 'U' );
263 cpu_store_char( _environment, drawGCommandLetter->realName, 'R' );
264 cpu_store_char( _environment, drawHCommandLetter->realName, 'D' );
265 cpu_store_char( _environment, drawUDCommandLetter->realName, 'x' );
266 cpu_store_char( _environment, drawDDCommandLetter->realName, 'x' );
267 cpu_store_char( _environment, drawLDCommandLetter->realName, 'x' );
268 cpu_store_char( _environment, drawRDCommandLetter->realName, 'x' );
269 cpu_store_char( _environment, drawFDCommandLetter->realName, 'x' );
270 cpu_store_char( _environment, drawGDCommandLetter->realName, 'x' );
271 cpu_store_char( _environment, drawEDCommandLetter->realName, 'x' );
272 cpu_store_char( _environment, drawHDCommandLetter->realName, 'x' );
273 }
274 cpu_jump( _environment, done2CommandLabel );
275
276 cpu_label( _environment, rotate180CommandLabel );
277 if ( _environment->drawUsingTsbSyntax ) {
278 cpu_store_char( _environment, drawUCommandLetter->realName, '2' );
279 cpu_store_char( _environment, drawDCommandLetter->realName, '1' );
280 cpu_store_char( _environment, drawLCommandLetter->realName, '0' );
281 cpu_store_char( _environment, drawRCommandLetter->realName, '3' );
282 cpu_store_char( _environment, drawFCommandLetter->realName, 'x' );
283 cpu_store_char( _environment, drawGCommandLetter->realName, 'x' );
284 cpu_store_char( _environment, drawECommandLetter->realName, 'x' );
285 cpu_store_char( _environment, drawHCommandLetter->realName, 'x' );
286 cpu_store_char( _environment, drawUDCommandLetter->realName, '7' );
287 cpu_store_char( _environment, drawDDCommandLetter->realName, '6' );
288 cpu_store_char( _environment, drawLDCommandLetter->realName, '5' );
289 cpu_store_char( _environment, drawRDCommandLetter->realName, '8' );
290 cpu_store_char( _environment, drawFDCommandLetter->realName, 'x' );
291 cpu_store_char( _environment, drawGDCommandLetter->realName, 'x' );
292 cpu_store_char( _environment, drawEDCommandLetter->realName, 'x' );
293 cpu_store_char( _environment, drawHDCommandLetter->realName, 'x' );
294 } else {
295 cpu_store_char( _environment, drawUCommandLetter->realName, 'D' );
296 cpu_store_char( _environment, drawDCommandLetter->realName, 'U' );
297 cpu_store_char( _environment, drawLCommandLetter->realName, 'R' );
298 cpu_store_char( _environment, drawRCommandLetter->realName, 'L' );
299 cpu_store_char( _environment, drawECommandLetter->realName, 'G' );
300 cpu_store_char( _environment, drawFCommandLetter->realName, 'H' );
301 cpu_store_char( _environment, drawGCommandLetter->realName, 'E' );
302 cpu_store_char( _environment, drawHCommandLetter->realName, 'F' );
303 cpu_store_char( _environment, drawUDCommandLetter->realName, 'x' );
304 cpu_store_char( _environment, drawDDCommandLetter->realName, 'x' );
305 cpu_store_char( _environment, drawLDCommandLetter->realName, 'x' );
306 cpu_store_char( _environment, drawRDCommandLetter->realName, 'x' );
307 cpu_store_char( _environment, drawFDCommandLetter->realName, 'x' );
308 cpu_store_char( _environment, drawGDCommandLetter->realName, 'x' );
309 cpu_store_char( _environment, drawEDCommandLetter->realName, 'x' );
310 cpu_store_char( _environment, drawHDCommandLetter->realName, 'x' );
311 }
312 cpu_jump( _environment, done2CommandLabel );
313
314 cpu_label( _environment, rotate225CommandLabel );
315 if ( _environment->drawUsingTsbSyntax ) {
316 cpu_store_char( _environment, drawUCommandLetter->realName, 'x' );
317 cpu_store_char( _environment, drawDCommandLetter->realName, 'x' );
318 cpu_store_char( _environment, drawLCommandLetter->realName, 'x' );
319 cpu_store_char( _environment, drawRCommandLetter->realName, 'x' );
320 cpu_store_char( _environment, drawFCommandLetter->realName, '2' );
321 cpu_store_char( _environment, drawGCommandLetter->realName, '1' );
322 cpu_store_char( _environment, drawECommandLetter->realName, '0' );
323 cpu_store_char( _environment, drawHCommandLetter->realName, '3' );
324 cpu_store_char( _environment, drawUDCommandLetter->realName, 'x' );
325 cpu_store_char( _environment, drawDDCommandLetter->realName, 'x' );
326 cpu_store_char( _environment, drawLDCommandLetter->realName, 'x' );
327 cpu_store_char( _environment, drawRDCommandLetter->realName, 'x' );
328 cpu_store_char( _environment, drawFDCommandLetter->realName, '7' );
329 cpu_store_char( _environment, drawGDCommandLetter->realName, '8' );
330 cpu_store_char( _environment, drawEDCommandLetter->realName, '5' );
331 cpu_store_char( _environment, drawHDCommandLetter->realName, '8' );
332 } else {
333 cpu_store_char( _environment, drawUCommandLetter->realName, 'F' );
334 cpu_store_char( _environment, drawDCommandLetter->realName, 'H' );
335 cpu_store_char( _environment, drawLCommandLetter->realName, 'E' );
336 cpu_store_char( _environment, drawRCommandLetter->realName, 'G' );
337 cpu_store_char( _environment, drawECommandLetter->realName, 'D' );
338 cpu_store_char( _environment, drawFCommandLetter->realName, 'L' );
339 cpu_store_char( _environment, drawGCommandLetter->realName, 'U' );
340 cpu_store_char( _environment, drawHCommandLetter->realName, 'R' );
341 cpu_store_char( _environment, drawUDCommandLetter->realName, 'x' );
342 cpu_store_char( _environment, drawDDCommandLetter->realName, 'x' );
343 cpu_store_char( _environment, drawLDCommandLetter->realName, 'x' );
344 cpu_store_char( _environment, drawRDCommandLetter->realName, 'x' );
345 cpu_store_char( _environment, drawFDCommandLetter->realName, 'x' );
346 cpu_store_char( _environment, drawGDCommandLetter->realName, 'x' );
347 cpu_store_char( _environment, drawEDCommandLetter->realName, 'x' );
348 cpu_store_char( _environment, drawHDCommandLetter->realName, 'x' );
349 }
350 cpu_jump( _environment, done2CommandLabel );
351
352 cpu_label( _environment, rotate270CommandLabel );
353 if ( _environment->drawUsingTsbSyntax ) {
354 cpu_store_char( _environment, drawUCommandLetter->realName, '0' );
355 cpu_store_char( _environment, drawDCommandLetter->realName, '3' );
356 cpu_store_char( _environment, drawLCommandLetter->realName, '1' );
357 cpu_store_char( _environment, drawRCommandLetter->realName, '2' );
358 cpu_store_char( _environment, drawFCommandLetter->realName, 'x' );
359 cpu_store_char( _environment, drawGCommandLetter->realName, 'x' );
360 cpu_store_char( _environment, drawECommandLetter->realName, 'x' );
361 cpu_store_char( _environment, drawHCommandLetter->realName, 'x' );
362 cpu_store_char( _environment, drawUDCommandLetter->realName, '5' );
363 cpu_store_char( _environment, drawDDCommandLetter->realName, '8' );
364 cpu_store_char( _environment, drawLDCommandLetter->realName, '6' );
365 cpu_store_char( _environment, drawRDCommandLetter->realName, '7' );
366 cpu_store_char( _environment, drawFDCommandLetter->realName, 'x' );
367 cpu_store_char( _environment, drawGDCommandLetter->realName, 'x' );
368 cpu_store_char( _environment, drawEDCommandLetter->realName, 'x' );
369 cpu_store_char( _environment, drawHDCommandLetter->realName, 'x' );
370 } else {
371 cpu_store_char( _environment, drawUCommandLetter->realName, 'R' );
372 cpu_store_char( _environment, drawDCommandLetter->realName, 'L' );
373 cpu_store_char( _environment, drawLCommandLetter->realName, 'U' );
374 cpu_store_char( _environment, drawRCommandLetter->realName, 'D' );
375 cpu_store_char( _environment, drawECommandLetter->realName, 'F' );
376 cpu_store_char( _environment, drawFCommandLetter->realName, 'G' );
377 cpu_store_char( _environment, drawGCommandLetter->realName, 'H' );
378 cpu_store_char( _environment, drawHCommandLetter->realName, 'E' );
379 cpu_store_char( _environment, drawUDCommandLetter->realName, 'x' );
380 cpu_store_char( _environment, drawDDCommandLetter->realName, 'x' );
381 cpu_store_char( _environment, drawLDCommandLetter->realName, 'x' );
382 cpu_store_char( _environment, drawRDCommandLetter->realName, 'x' );
383 cpu_store_char( _environment, drawFDCommandLetter->realName, 'x' );
384 cpu_store_char( _environment, drawGDCommandLetter->realName, 'x' );
385 cpu_store_char( _environment, drawEDCommandLetter->realName, 'x' );
386 cpu_store_char( _environment, drawHDCommandLetter->realName, 'x' );
387 }
388 cpu_jump( _environment, done2CommandLabel );
389
390 cpu_label( _environment, rotate315CommandLabel );
391 if ( _environment->drawUsingTsbSyntax ) {
392 cpu_store_char( _environment, drawUCommandLetter->realName, 'x' );
393 cpu_store_char( _environment, drawDCommandLetter->realName, 'x' );
394 cpu_store_char( _environment, drawLCommandLetter->realName, 'x' );
395 cpu_store_char( _environment, drawRCommandLetter->realName, 'x' );
396 cpu_store_char( _environment, drawFCommandLetter->realName, '0' );
397 cpu_store_char( _environment, drawGCommandLetter->realName, '3' );
398 cpu_store_char( _environment, drawECommandLetter->realName, '1' );
399 cpu_store_char( _environment, drawHCommandLetter->realName, '2' );
400 cpu_store_char( _environment, drawUDCommandLetter->realName, 'x' );
401 cpu_store_char( _environment, drawDDCommandLetter->realName, 'x' );
402 cpu_store_char( _environment, drawLDCommandLetter->realName, 'x' );
403 cpu_store_char( _environment, drawRDCommandLetter->realName, 'x' );
404 cpu_store_char( _environment, drawFDCommandLetter->realName, '5' );
405 cpu_store_char( _environment, drawGDCommandLetter->realName, '8' );
406 cpu_store_char( _environment, drawEDCommandLetter->realName, '6' );
407 cpu_store_char( _environment, drawHDCommandLetter->realName, '7' );
408 } else {
409 cpu_store_char( _environment, drawUCommandLetter->realName, 'E' );
410 cpu_store_char( _environment, drawDCommandLetter->realName, 'G' );
411 cpu_store_char( _environment, drawLCommandLetter->realName, 'H' );
412 cpu_store_char( _environment, drawRCommandLetter->realName, 'F' );
413 cpu_store_char( _environment, drawECommandLetter->realName, 'R' );
414 cpu_store_char( _environment, drawFCommandLetter->realName, 'D' );
415 cpu_store_char( _environment, drawGCommandLetter->realName, 'L' );
416 cpu_store_char( _environment, drawHCommandLetter->realName, 'U' );
417 cpu_store_char( _environment, drawUDCommandLetter->realName, 'x' );
418 cpu_store_char( _environment, drawDDCommandLetter->realName, 'x' );
419 cpu_store_char( _environment, drawLDCommandLetter->realName, 'x' );
420 cpu_store_char( _environment, drawRDCommandLetter->realName, 'x' );
421 cpu_store_char( _environment, drawFDCommandLetter->realName, 'x' );
422 cpu_store_char( _environment, drawGDCommandLetter->realName, 'x' );
423 cpu_store_char( _environment, drawEDCommandLetter->realName, 'x' );
424 cpu_store_char( _environment, drawHDCommandLetter->realName, 'x' );
425 }
426 cpu_jump( _environment, done2CommandLabel );
427
428 cpu_label( _environment, done2CommandLabel );
429
430 }
431
432 if ( _step ) {
433
434 Variable * step = variable_retrieve_or_define( _environment, _step, VT_BYTE, 0 );
435 variable_move( _environment, step->name, "DRAWSCALE" );
436
437 }
438
439}
void cpu_store_char(Environment *_environment, char *_destination, int _value)
CPU 6309: emit code to store 8 bit
Definition 6309.c:785
void cpu_label(Environment *_environment, char *_label)
Definition 6309.c:356
void cpu_jump(Environment *_environment, char *_label)
Definition 6309.c:3739
void cpu_compare_and_branch_8bit_const(Environment *_environment, char *_source, int _destination, char *_label, int _positive)
CPU 6309: emit code to compare two 8 bit values and jump if they are equal/different
Definition 6309.c:876
Variable * variable_retrieve(Environment *_environment, char *_name)
Variable * variable_retrieve_or_define(Environment *_environment, char *_name, VariableType _type, int _value)
Variable * variable_move(Environment *_environment, char *_source, char *_destination)
Store the value of a variable inside another variable by converting it.
void rot(Environment *_environment, char *_angle, char *_step)
Definition rot.c:78
int drawUsingTsbSyntax
Definition ugbc.h:3242
char * name
Definition ugbc.h:979
char * realName
Definition ugbc.h:982
#define MAX_TEMPORARY_STORAGE
Definition ugbc.h:563
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
@ VT_BYTE
Definition ugbc.h:450
#define MAKE_LABEL
Definition ugbc.h:3351