ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
new_images.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
49/* <usermanual>
50@keyword NEW ATLAS
51
52@english
53
54The ''NEW ATLAS'' command allows you to define a memory area where you can
55store a set of images coming from the screen (with the ''GET IMAGE'' command), or
56from another graphic resource.
57
58The area must be defined by (constant) number of frames, (constant) width and
59(constant) height, expressed in pixels. The actual size,
60in terms of bytes of RAM, will depend on the graphics mode selected at the time. If it is
61not possible to define an image in that screen mode, a specific error will be issued.
62
63Generally speaking, it is not advisable to do a ''PUT IMAGE'' of a ''NEW ATLAS'' that has not
64been initialized, at least once, by a ''GET IMAGE''. Infact, the ''PUT IMAGE'' tries to draw
65the contents of an uninitialized frame (i.e.: all zeros), including the palette. So it
66could draw everything empty in terms of bitmap, and then overwrites the entire palette
67with zeros, giving rise to unexpected result. So you have to use a preliminary ''GET IMAGE''
68on any ''NEW ATLAS''.
69
70If you want to use the ''PUT IMAGE'' without
71side effects on palette, you can opt for the ''PUT BITMAP''. In this case, ugBASIC
72will draw only the component related to the pixels, leaving the palette component
73unchanged.
74
75@italian
76
77Il comando ''NEW ATLAS'' permette di definire un'area di memoria dove poter
78memorizzare un insieme di immagini provenienti dallo schermo (con il comando ''GET IMAGE''),
79oppure da un'altra risorsa grafica.
80
81L'area deve essere definita per mezzo del numero di fotogrammi (costante),
82della larghezza (costante) e dell'altezza (costante), espressa in pixel.
83
84La dimensione effettiva, in termini di bytes in memoria, dipenderà dalla modalità grafica
85selezionata in quel momento. Se non è possibile definire una immagine in quella modalità,
86sarà emesso uno specifico errore.
87
88In generale, non è consigliabile eseguire un ''PUT IMAGE'' di una ''NEW ATLAS'' che non
89sia stata inizializzata, almeno una volta, da un ''GET IMAGE''. Infatti, il ''PUT IMAGE''
90tenta di disegnare il contenuto di un frame non inizializzato (ad esempio: tutti zeri),
91inclusa la palette. Quindi potrebbe disegnare tutto vuoto in termini di bitmap e quindi
92sovrascrivere l'intera palette con zeri, con un risultato inaspettato. Quindi devi usare
93un ''GET IMAGE'' preliminare su qualsiasi ''NEW ATLAS''.
94
95Se vuoi usare ''PUT IMAGE'' senza effetti collaterali sulla palette, puoi optare per
96''PUT BITMAP''. In questo caso, ugBASIC disegnerà solo il componente pixel, lasciando
97intatto il componente palette.
98
99@syntax = NEW ATLAS( frames, width, height )
100
101@example background = NEW ATLAS(16, 32,32)
102
103@alias NEW IMAGES
104
105</usermanual> */
106
107/* <usermanual>
108@keyword NEW IMAGES
109@alias NEW ATLAS
110</usermanual> */
111
112Variable * new_images( Environment * _environment, int _frames, int _width, int _height, int _mode ) {
113
114 Variable * result = vic2_new_images( _environment, _frames, _width, _height, _mode );
115
116 result->offsettingFrames = offsetting_size_count( _environment, result->frameSize, _frames );
117 offsetting_add_variable_reference( _environment, result->offsettingFrames, result, 0 );
118
119 return result;
120
121}
void offsetting_add_variable_reference(Environment *_environment, Offsetting *_first, Variable *_var, int _sequence)
Offsetting * offsetting_size_count(Environment *_environment, int _size, int _count)
Variable * new_images(Environment *_environment, int _frames, int _width, int _height, int _mode)
Emit code for NEW IMAGE(...).
Definition new_images.c:49
Offsetting * offsettingFrames
Definition ugbc.h:1206
int frameSize
Definition ugbc.h:1134
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
Variable * vic2_new_images(Environment *_environment, int _frames, int _width, int _height, int _mode)
Definition vic2.c:4126