ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
memdef.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 MEMDEF
43
44@english
45
46The ''MEMDEF'' is a collective command for all expansion memory settings
47required for a transfer. First you specify the number of ''bytes'' to be transferred
48(see ''MEMLEN''), then the ''address'' in the target computer (see ''MEMOR''). This is
49followed by the expansion memory address (''eaddress'), including the ''bank'' (''MEMPOS'').
50
51@italian
52
53Il comando ''MEMDEF'' è un comando collettivo per tutte le impostazioni di memoria di
54espansione richieste per un trasferimento. Per prima cosa si specifica il numero di ''byte''
55da trasferire (vedere ''MEMLEN''), quindi l''address'' nel computer di destinazione (vedere
56''MEMOR''). Questo è seguito dall'indirizzo di memoria di espansione (''eaddress'), incluso il
57''bank'' (''MEMPOS'').
58
59@syntax MEMDEF bytes[, address[, eaddress, bank]]
60
61@example MEMDEF 128, &HC000
62
63@usedInExample tsb_memload.bas
64
65@seeAlso MEMLEN
66@seeAlso MEMPOS
67@seeAlso MEMCONT
68@seeAlso MEMRESTORE
69@seeAlso MEMLOAD
70@seeAlso MEMSAVE
71
72</usermanual> */
73
74void memdef( Environment * _environment, char * _size, char * _address, char * _eaddress, char * _bank ) {
75
76 Variable * membank = variable_retrieve_or_define( _environment, "MEMBANK", VT_BYTE, 0 );
77 Variable * mempos = variable_retrieve_or_define( _environment, "MEMPOS", VT_ADDRESS, 0 );
78 Variable * memor = variable_retrieve_or_define( _environment, "MEMOR", VT_ADDRESS, 0 );
79 Variable * memlen = variable_retrieve_or_define( _environment, "MEMLEN", VT_WORD, 0 );
80
81 Variable * size = variable_retrieve_or_define( _environment, _size, VT_ADDRESS, 0 );
82
83 variable_move( _environment, size->name, memlen->name );
84
85 if ( _address ) {
86 Variable * address = variable_retrieve_or_define( _environment, _address, VT_ADDRESS, 0 );
87 variable_move( _environment, address->name, memor->name );
88 }
89
90 if ( _eaddress ) {
91 Variable * eaddress = variable_retrieve_or_define( _environment, _eaddress, VT_ADDRESS, 0 );
92 variable_move( _environment, eaddress->name, mempos->name );
93 }
94
95 if ( _bank ) {
96 Variable * bank = variable_retrieve_or_define( _environment, _bank, VT_ADDRESS, 0 );
97 variable_move( _environment, bank->name, membank->name );
98 }
99
100}
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.
int size
Definition _optimizer.c:678
void memdef(Environment *_environment, char *_size, char *_address, char *_eaddress, char *_bank)
Definition memdef.c:74
void memlen(Environment *_environment, char *_size)
Definition memlen.c:66
void memor(Environment *_environment, char *_address, char *_eaddress, char *_bank)
Definition memor.c:75
void mempos(Environment *_environment, char *_address, char *_bank)
Definition mempos.c:72
char * name
Definition ugbc.h:979
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
@ VT_WORD
Definition ugbc.h:455
@ VT_BYTE
Definition ugbc.h:450
@ VT_ADDRESS
Definition ugbc.h:465