ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
tiles.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
57/* <usermanual>
58@keyword TILES AT
59
60@english
61Set the starting address, in memory, for the tiles (for textual mode).
62The input parameter is decoded and declined according to the hardware
63limits. So it is not said that exactly the given address is set.
64
65@italian
66Imposta l'indirizzo di partenza, in memoria, per le tile (per
67la modalità testuale). Il parametro di input viene decodificato e
68declinato in base all'hardware. Quindi non è detto che sia impostato
69esattamente all'indirizzo specificato.
70
71@syntax TILES AT # [integer]
72
73@example TILES AT #$8400
74
75@target c128
76</usermanual> */
77void tiles_at( Environment * _environment, int _address ) {
78
79
80
81 // Let's define the special variable bitmapAddress, and update
82 // it with the requested value.
83 // TODO: tile_address should be retrieved via function!
84 Variable * tiles_address = variable_retrieve_or_define( _environment, "tiles_address", VT_ADDRESS, _address );
85 variable_store( _environment, tiles_address->name, ( ( _address >> 11 ) & 0x07 ) * 0x8400 );
86
87 char addressString[MAX_TEMPORARY_STORAGE]; sprintf(addressString, "#$%2.2x", ( _address >> 8 ) & 0xff );
88
89 vic2_tiles_at( _environment, addressString );
90
91}
92
109/* <usermanual>
110@keyword TILES AT
111
112@syntax TILES AT [expression]
113
114@example TILES AT tilesAddress
115
116@target c128
117</usermanual> */
118void tiles_at_var( Environment * _environment, char * _address ) {
119
120
121
122 Variable * address = variable_retrieve( _environment, _address );
123
124 Variable * temp = variable_temporary( _environment, VT_ADDRESS, "(temporary storage)" );
125
126 // Let's define the special variable bitmapAddress, and update
127 // it with the requested value.
128 Variable * tiles_address = variable_define( _environment, "tiles_address", VT_ADDRESS, 0x0800 );
129
130 char addressString[MAX_TEMPORARY_STORAGE]; sprintf(addressString, "%s", address_displacement(_environment, address->realName, "1") );
131
132 vic2_tiles_at( _environment, addressString );
133
134}
135
Variable * variable_retrieve(Environment *_environment, char *_name)
Variable * variable_retrieve_or_define(Environment *_environment, char *_name, VariableType _type, int _value)
Variable * variable_define(Environment *_environment, char *_name, VariableType _type, int _value)
Define a variable for the program.
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
Variable * variable_store(Environment *_environment, char *_destination, unsigned int _value)
Store a direct value to a variable.
char * address_displacement(Environment *_environment, char *_address, char *_displacement)
void tiles_at_var(Environment *_environment, char *_address)
Emit ASM code for TILES AT [expression].
Definition tiles.c:83
void tiles_at(Environment *_environment, int _address)
Emit ASM code for TILES AT [int]xx.
Definition tiles.c:60
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_ADDRESS
Definition ugbc.h:465
void vic2_tiles_at(Environment *_environment, char *_address)
Definition vic2.c:1991