ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
mmove.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
41extern char DATATYPE_AS_STRING[][16];
42
53/* <usermanual>
54@keyword MMOVE
55
56@english
57
58This command moves a block of memory of ''size'' bytes between two memory
59locations. In particular, it is possible to indicate whether the destination
60or source of the movement is the computer's resident memory or the memory
61dedicated to the video card, which on some targets is separate from the
62main memory.
63
64@italian
65
66Questo comando sposta un blocco di memoria di ''size'' byte tra due posizioni
67di memoria. In particolare, è possibile indicare se la destinazione o la
68sorgente dello spostamento è la memoria residente del computer o la memoria
69dedicata alla scheda video, che su alcuni target è separata dalla memoria
70principale.
71
72@syntax MMOVE [MEMORY] address1 TO [MEMORY] address2 SIZE size
73@syntax MMOVE [MEMORY] address1 TO VIDEO address2 SIZE size
74@syntax MMOVE VIDEO address1 TO [MEMORY] address2 SIZE size
75
76@example MMOVE MEMORY &Hc000 TO VIDEO &H8000 SIZE 100
77
78</usermanual> */
79
80void mmove_memory_memory( Environment * _environment, char * _from, char * _to, char * _size ) {
81
82 Variable * from = variable_retrieve_or_define( _environment, _from, VT_ADDRESS, 0 );
83 Variable * to = variable_retrieve_or_define( _environment, _to, VT_ADDRESS, 0 );
84 Variable * size = variable_retrieve_or_define( _environment, _size, VT_WORD, 0 );
85
86 if ( VT_BITWIDTH( size->type ) != 16 ) {
88 }
89
90 cpu_mem_move_16bit( _environment, from->realName, to->realName, size->realName );
91
92}
93
104void mmove_memory_video( Environment * _environment, char * _from, char * _to, char * _size ) {
105
106 Variable * from = variable_retrieve_or_define( _environment, _from, VT_ADDRESS, 0 );
107 Variable * to = variable_retrieve_or_define( _environment, _to, VT_ADDRESS, 0 );
108 Variable * size = variable_retrieve_or_define( _environment, _size, VT_WORD, 0 );
109
110 if ( VT_BITWIDTH( size->type ) != 16 ) {
112 }
113
114 cpu_mem_move_16bit( _environment, from->realName, to->realName, size->realName );
115
116}
117
128void mmove_video_memory( Environment * _environment, char * _from, char * _to, char * _size ) {
129
130 Variable * from = variable_retrieve_or_define( _environment, _from, VT_ADDRESS, 0 );
131 Variable * to = variable_retrieve_or_define( _environment, _to, VT_ADDRESS, 0 );
132 Variable * size = variable_retrieve_or_define( _environment, _size, VT_WORD, 0 );
133
134 if ( VT_BITWIDTH( size->type ) != 16 ) {
136 }
137
138 cpu_mem_move_16bit( _environment, from->realName, to->realName, size->realName );
139
140}
141
void cpu_mem_move_16bit(Environment *_environment, char *_source, char *_destination, char *_size)
Definition 6309.c:4711
Variable * variable_retrieve_or_define(Environment *_environment, char *_name, VariableType _type, int _value)
int size
Definition _optimizer.c:678
void mmove_memory_video(Environment *_environment, char *_from, char *_to, char *_size)
Emit ASM code for MMOVE {VIDEO} [expr] TO {VIDEO} [expr] SIZE [expr].
Definition mmove.c:77
void mmove_video_memory(Environment *_environment, char *_from, char *_to, char *_size)
Emit ASM code for MMOVE {VIDEO} [expr] TO {VIDEO} [expr] SIZE [expr].
Definition mmove.c:101
void mmove_memory_memory(Environment *_environment, char *_from, char *_to, char *_size)
Emit ASM code for MMOVE [expr] TO [expr] SIZE [expr].
Definition mmove.c:53
char * realName
Definition ugbc.h:982
struct _Variable Variable
Structure of a single variable.
#define CRITICAL_CANNOT_MMOVE_INVALID_SIZE(v)
Definition ugbc.h:3566
struct _Environment Environment
Structure of compilation environment.
@ VT_WORD
Definition ugbc.h:455
@ VT_ADDRESS
Definition ugbc.h:465
#define VT_BITWIDTH(t)
Definition ugbc.h:595
char DATATYPE_AS_STRING[][16]