ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
bank_read.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
49void bank_read_semi_var( Environment * _environment, int _bank, int _address1, char * _address2, int _size ) {
50
51 deploy_preferred( duff, src_hw_6309_duff_asm );
52 deploy_preferred( msc1, src_hw_6309_msc1_asm );
53 deploy_preferred( bank, src_hw_coco3b_bank_asm );
54
55 outline0("; bank_read_semi_var ");
56 outline1("LDY #$%4.4x", _address1 );
57 outline1("LDX #%s", _address2 );
58 outline1("LDA #$%2.2x", _bank );
59
60 switch( _size ) {
61 case 1:
62 outline0("JSR BANKREAD1");
63 _environment->bankAccessOptimization.read1 = 1;
64 break;
65 case 2:
66 outline0("JSR BANKREAD2");
67 _environment->bankAccessOptimization.read2 = 1;
68 break;
69 case 4:
70 outline0("JSR BANKREAD4");
71 _environment->bankAccessOptimization.read4 = 1;
72 break;
73 default:
74 outline1("LDU #$%4.4x", _size );
75 outline0("JSR BANKREAD");
76 _environment->bankAccessOptimization.readn = 1;
77 break;
78
79 }
80 outline0("; end bank read");
81
82}
83
96void bank_read_vars( Environment * _environment, char * _bank, char * _address1, char * _address2, char * _size ) {
97
98 deploy_preferred( duff, src_hw_6309_duff_asm );
99 deploy_preferred( msc1, src_hw_6309_msc1_asm );
100 deploy_preferred( bank, src_hw_coco3b_bank_asm );
101
102 Variable * bank = variable_retrieve_or_define( _environment, _bank, VT_BYTE, 0 );
103 Variable * address1 = variable_retrieve_or_define( _environment, _address1, VT_ADDRESS, 0 );
104 Variable * address2 = variable_retrieve_or_define( _environment, _address2, VT_ADDRESS, 0 );
105 Variable * size = variable_retrieve_or_define( _environment, _size, VT_WORD, 0 );
106
107 outline1("LDY %s", address1->realName );
108 outline1("LDX %s", address2->realName );
109 outline1("LDA %s", bank->realName );
110 outline1("LDU %s", size->realName );
111 outline0("JSR BANKREAD");
112 _environment->bankAccessOptimization.readn = 1;
113
114 outline0("; end bank read");
115
116}
117
118void bank_read_vars_direct( Environment * _environment, char * _bank, char * _address1, char * _address2, char * _size ) {
119
120 deploy_preferred( duff, src_hw_6309_duff_asm );
121 deploy_preferred( msc1, src_hw_6309_msc1_asm );
122 deploy_preferred( bank, src_hw_coco3b_bank_asm );
123
124 Variable * bank = variable_retrieve_or_define( _environment, _bank, VT_BYTE, 0 );
125 Variable * address1 = variable_retrieve_or_define( _environment, _address1, VT_ADDRESS, 0 );
126 Variable * address2 = variable_retrieve_or_define( _environment, _address2, VT_ADDRESS, 0 );
127 Variable * size = variable_retrieve_or_define( _environment, _size, VT_WORD, 0 );
128
129 outline1("LDY %s", address1->realName );
130 outline1("LDX #%s", address2->realName );
131 outline1("LDA %s", bank->realName );
132 outline1("LDU %s", size->realName );
133 outline0("JSR BANKREAD");
134 _environment->bankAccessOptimization.readn = 1;
135
136 outline0("; end bank read");
137
138}
139
140void bank_read_vars_direct_size( Environment * _environment, char * _bank, char * _address1, char * _address2, int _size ) {
141
142 deploy_preferred( duff, src_hw_6309_duff_asm );
143 deploy_preferred( msc1, src_hw_6309_msc1_asm );
144 deploy_preferred( bank, src_hw_coco3b_bank_asm );
145
146 Variable * bank = variable_retrieve_or_define( _environment, _bank, VT_BYTE, 0 );
147 Variable * address1 = variable_retrieve_or_define( _environment, _address1, VT_ADDRESS, 0 );
148 Variable * address2 = variable_retrieve_or_define( _environment, _address2, VT_ADDRESS, 0 );
149
150 outline1("LDY %s", address1->realName );
151 outline1("LDX #%s", address2->realName );
152 outline1("LDA %s", bank->realName );
153
154 switch( _size ) {
155 case 1:
156 outline0("JSR BANKREAD1");
157 _environment->bankAccessOptimization.read1 = 1;
158 break;
159 case 2:
160 outline0("JSR BANKREAD2");
161 _environment->bankAccessOptimization.read2 = 1;
162 break;
163 case 4:
164 outline0("JSR BANKREAD4");
165 _environment->bankAccessOptimization.read4 = 1;
166 break;
167 default:
168 outline1("LDU #$%4.4x", _size );
169 outline0("JSR BANKREAD");
170 _environment->bankAccessOptimization.readn = 1;
171 break;
172
173 }
174 outline0("; end bank read");
175
176}
177
178void bank_read_vars_bank_direct_size_vars( Environment * _environment, int _bank, char * _address1, char * _address2, int _size ) {
179
180 deploy_preferred( duff, src_hw_6309_duff_asm );
181 deploy_preferred( msc1, src_hw_6309_msc1_asm );
182 deploy_preferred( bank, src_hw_coco3b_bank_asm );
183
184 Variable * address1 = variable_retrieve_or_define( _environment, _address1, VT_ADDRESS, 0 );
185 Variable * address2 = variable_retrieve_or_define( _environment, _address2, VT_ADDRESS, 0 );
186
187 outline1("LDY %s", address1->realName );
188 outline1("LDX #%s", address2->realName );
189 outline1("LDA #$%2.2x", _bank );
190
191 switch( _size ) {
192 case 1:
193 outline0("JSR BANKREAD1");
194 _environment->bankAccessOptimization.read1 = 1;
195 break;
196 case 2:
197 outline0("JSR BANKREAD2");
198 _environment->bankAccessOptimization.read2 = 1;
199 break;
200 case 4:
201 outline0("JSR BANKREAD4");
202 _environment->bankAccessOptimization.read4 = 1;
203 break;
204 default:
205 outline1("LDU #$%4.4x", _size );
206 outline0("JSR BANKREAD");
207 _environment->bankAccessOptimization.readn = 1;
208 break;
209
210 }
211 outline0("; end bank read");
212
213}
214
215void bank_read_vars_bank_direct_size( Environment * _environment, int _bank, char * _address1, char * _address2, int _size ) {
216
217 deploy_preferred( duff, src_hw_6309_duff_asm );
218 deploy_preferred( msc1, src_hw_6309_msc1_asm );
219 deploy_preferred( bank, src_hw_coco3b_bank_asm );
220
221 Variable * address1 = variable_retrieve_or_define( _environment, _address1, VT_ADDRESS, 0 );
222 Variable * address2 = variable_retrieve_or_define( _environment, _address2, VT_ADDRESS, 0 );
223
224 outline1("LDY %s", address1->realName );
225 outline1("LDX #%s", address2->realName );
226 outline1("LDA #$%2.2x", _bank );
227
228 switch( _size ) {
229 case 1:
230 outline0("JSR BANKREAD1");
231 _environment->bankAccessOptimization.read1 = 1;
232 break;
233 case 2:
234 outline0("JSR BANKREAD2");
235 _environment->bankAccessOptimization.read2 = 1;
236 break;
237 case 4:
238 outline0("JSR BANKREAD4");
239 _environment->bankAccessOptimization.read4 = 1;
240 break;
241 default:
242 outline1("LDU #$%4.4x", _size );
243 outline0("JSR BANKREAD");
244 _environment->bankAccessOptimization.readn = 1;
245 break;
246
247 }
248 outline0("; end bank read");
249
250}
Variable * variable_retrieve_or_define(Environment *_environment, char *_name, VariableType _type, int _value)
int size
Definition _optimizer.c:678
void bank_read_semi_var(Environment *_environment, int _bank, int _address1, char *_address2, int _size)
Emit ASM code for instruction BANK READ ....
Definition bank_read.c:50
void bank_read_vars_bank_direct_size(Environment *_environment, int _bank, char *_address1, char *_address2, int _size)
Definition bank_read.c:218
void bank_read_vars_direct_size(Environment *_environment, char *_bank, char *_address1, char *_address2, int _size)
Definition bank_read.c:169
void bank_read_vars(Environment *_environment, char *_bank, char *_address1, char *_address2, char *_size)
Emit ASM code for instruction BANK READ ....
Definition bank_read.c:107
void bank_read_vars_direct(Environment *_environment, char *_bank, char *_address1, char *_address2, char *_size)
Definition bank_read.c:138
void bank_read_vars_bank_direct_size_vars(Environment *_environment, int _bank, char *_address1, char *_address2, int _size)
Definition bank_read.c:178
BankAccessOptimization bankAccessOptimization
Definition ugbc.h:3269
char * realName
Definition ugbc.h:982
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
#define deploy_preferred(s, e)
Definition ugbc.h:4299
#define outline0(s)
Definition ugbc.h:4252
#define outline1(s, a)
Definition ugbc.h:4253