ugBASIC
1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
read_data_unsafe.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
extern
char
DATATYPE_AS_STRING
[][16];
42
43
void
read_data_unsafe
(
Environment
* _environment,
char
* _variable ) {
44
45
Variable
* variable;
46
if
(
variable_exists
( _environment, _variable ) ) {
47
variable =
variable_retrieve
( _environment, _variable );
48
}
else
{
49
variable =
variable_define
( _environment, _variable, _environment->
defaultVariableType
, 0 );
50
}
51
52
if
(
VT_BITWIDTH
( variable->
type
) > 1 ) {
53
outline0
(
"LD HL, (DATAPTR)"
);
54
switch
(
VT_BITWIDTH
( variable->
type
) ) {
55
case
32:
56
outline0
(
"LD A, (HL)"
);
57
outline1
(
"LD (%s), A"
, variable->
realName
);
58
outline0
(
"INC HL"
);
59
outline0
(
"LD A, (HL)"
);
60
outline1
(
"LD (%s), A"
,
address_displacement
( _environment, variable->
realName
,
"1"
) );
61
outline0
(
"INC HL"
);
62
outline0
(
"LD A, (HL)"
);
63
outline1
(
"LD (%s), A"
,
address_displacement
( _environment, variable->
realName
,
"2"
) );
64
outline0
(
"INC HL"
);
65
outline0
(
"LD A, (HL)"
);
66
outline1
(
"LD (%s), A"
,
address_displacement
( _environment, variable->
realName
,
"3"
) );
67
outline0
(
"INC HL"
);
68
break
;
69
case
16:
70
outline0
(
"LD A, (HL)"
);
71
outline1
(
"LD (%s), A"
, variable->
realName
);
72
outline0
(
"INC HL"
);
73
outline0
(
"LD A, (HL)"
);
74
outline1
(
"LD (%s), A"
,
address_displacement
( _environment, variable->
realName
,
"1"
) );
75
outline0
(
"INC HL"
);
76
break
;
77
case
8:
78
outline0
(
"LD A, (HL)"
);
79
outline1
(
"LD (%s), A"
, variable->
realName
);
80
outline0
(
"INC HL"
);
81
break
;
82
}
83
outline0
(
"LD (DATAPTR), HL"
);
84
}
else
{
85
86
MAKE_LABEL
87
88
Variable
* dataptr =
variable_retrieve
( _environment,
"DATAPTR"
);
89
90
switch
(
VT_BITWIDTH
( variable->
type
) ) {
91
case
32:
92
cpu_inc_16bit
( _environment, dataptr->realName );
93
cpu_move_32bit_indirect2
( _environment, dataptr->realName, variable->
realName
);
94
cpu_inc_16bit
( _environment, dataptr->realName );
95
cpu_inc_16bit
( _environment, dataptr->realName );
96
cpu_inc_16bit
( _environment, dataptr->realName );
97
cpu_inc_16bit
( _environment, dataptr->realName );
98
break
;
99
case
16:
100
cpu_inc_16bit
( _environment, dataptr->realName );
101
cpu_move_16bit_indirect2
( _environment, dataptr->realName, variable->
realName
);
102
cpu_inc_16bit
( _environment, dataptr->realName );
103
cpu_inc_16bit
( _environment, dataptr->realName );
104
break
;
105
case
8:
106
cpu_inc_16bit
( _environment, dataptr->realName );
107
cpu_move_8bit_indirect2
( _environment, dataptr->realName, variable->
realName
);
108
cpu_inc_16bit
( _environment, dataptr->realName );
109
break
;
110
case
1:
111
CRITICAL_READ_DATA_TYPE_NOT_SUPPORTED
( _variable,
DATATYPE_AS_STRING
[variable->
type
] );
112
break
;
113
case
0:
114
switch
( variable->
type
) {
115
case
VT_DSTRING
: {
116
Variable
* address =
variable_temporary
( _environment,
VT_ADDRESS
,
"(address)"
);
117
Variable
*
size
=
variable_temporary
( _environment,
VT_BYTE
,
"(size)"
);
118
cpu_move_8bit_indirect2
( _environment, dataptr->realName,
size
->realName );
119
cpu_inc_16bit
( _environment, dataptr->realName );
120
cpu_dsfree
( _environment, variable->
realName
);
121
cpu_dsalloc
( _environment,
size
->realName, variable->
realName
);
122
cpu_dsdescriptor
( _environment, variable->
realName
, address->
realName
,
size
->realName );
123
cpu_mem_move
( _environment, dataptr->realName, address->
realName
,
size
->realName );
124
cpu_math_add_16bit_with_8bit
( _environment, dataptr->realName,
size
->realName, dataptr->realName );
125
break
;
126
}
127
default
:
128
CRITICAL_READ_DATA_TYPE_NOT_SUPPORTED
( _variable,
DATATYPE_AS_STRING
[variable->
type
] );
129
}
130
break
;
131
}
132
133
134
}
135
136
137
}
cpu_move_32bit_indirect2
void cpu_move_32bit_indirect2(Environment *_environment, char *_value, char *_source)
Definition
6309.c:5398
cpu_dsfree
void cpu_dsfree(Environment *_environment, char *_index)
Definition
6309.c:5917
cpu_math_add_16bit_with_8bit
void cpu_math_add_16bit_with_8bit(Environment *_environment, char *_source, char *_destination, char *_other)
Definition
6309.c:1708
cpu_mem_move
void cpu_mem_move(Environment *_environment, char *_source, char *_destination, char *_size)
Definition
6309.c:4692
cpu_move_16bit_indirect2
void cpu_move_16bit_indirect2(Environment *_environment, char *_value, char *_source)
Definition
6309.c:5352
cpu_dsalloc
void cpu_dsalloc(Environment *_environment, char *_size, char *_index)
Definition
6309.c:5895
cpu_move_8bit_indirect2
void cpu_move_8bit_indirect2(Environment *_environment, char *_value, char *_source)
Definition
6309.c:5294
cpu_inc_16bit
void cpu_inc_16bit(Environment *_environment, char *_variable)
Definition
6309.c:4565
cpu_dsdescriptor
void cpu_dsdescriptor(Environment *_environment, char *_index, char *_address, char *_size)
Definition
6309.c:5977
variable_retrieve
Variable * variable_retrieve(Environment *_environment, char *_name)
Definition
_infrastructure.c:988
variable_exists
int variable_exists(Environment *_environment, char *_name)
Definition
_infrastructure.c:994
variable_define
Variable * variable_define(Environment *_environment, char *_name, VariableType _type, int _value)
Define a variable for the program.
Definition
_infrastructure.c:718
variable_temporary
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
Definition
_infrastructure.c:1388
address_displacement
char * address_displacement(Environment *_environment, char *_address, char *_displacement)
Definition
_infrastructure.c:14516
size
int size
Definition
_optimizer.c:678
read_data_unsafe
void read_data_unsafe(Environment *_environment, char *_variable)
Definition
read_data_unsafe.c:43
_Environment::defaultVariableType
VariableType defaultVariableType
Definition
ugbc.h:2956
_Variable::type
VariableType type
Definition
ugbc.h:988
_Variable::realName
char * realName
Definition
ugbc.h:982
ugbc.h
CRITICAL_READ_DATA_TYPE_NOT_SUPPORTED
#define CRITICAL_READ_DATA_TYPE_NOT_SUPPORTED(v, t)
Definition
ugbc.h:3678
Variable
struct _Variable Variable
Structure of a single variable.
Environment
struct _Environment Environment
Structure of compilation environment.
VT_BYTE
@ VT_BYTE
Definition
ugbc.h:450
VT_ADDRESS
@ VT_ADDRESS
Definition
ugbc.h:465
VT_DSTRING
@ VT_DSTRING
Definition
ugbc.h:483
outline0
#define outline0(s)
Definition
ugbc.h:4252
outline1
#define outline1(s, a)
Definition
ugbc.h:4253
VT_BITWIDTH
#define VT_BITWIDTH(t)
Definition
ugbc.h:595
MAKE_LABEL
#define MAKE_LABEL
Definition
ugbc.h:3351
DATATYPE_AS_STRING
char DATATYPE_AS_STRING[][16]
Definition
_infrastructure.c:133
Z:
ugbasic
ugbc
src
targets
vz200
read_data_unsafe.c
Generated by
1.16.1