ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
pc128op.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#include <math.h>
37
38/****************************************************************************
39 * CODE SECTION
40 ****************************************************************************/
41
42#ifdef __pc128op__
43
44void pc128op_xpen( Environment * _environment, char * _destination ) {
45
47
48 outline0("LDA $FF60");
49 outline1("STA %s", address_displacement(_environment, _destination, "1"));
50 outline0("LDA #0");
51 outline1("STA %s", _destination);
52
53}
54
55void pc128op_ypen( Environment * _environment, char * _destination ) {
56
58
59 outline0("LDA $FF61");
60 outline1("STA %s", address_displacement(_environment, _destination, "1"));
61 outline0("LDA #0");
62 outline1("STA %s", _destination);
63
64}
65
66void pc128op_color_border( Environment * _environment, char * _color ) {
67
68}
69
70void pc128op_vscroll( Environment * _environment, int _displacement ) {
71
72}
73
74void pc128op_text_at( Environment * _environment, char * _text, char * _text_size, char * _pen, char * _paper ) {
75
76}
77
78void pc128op_cls( Environment * _environment, char * _pen, char * _paper ) {
79
80}
81
82void pc128op_inkey( Environment * _environment, char * _key ) {
83
84 _environment->bitmaskNeeded = 1;
85 _environment->keyboardFullSupport = 1;
86
87 deploy_preferred( keyboard, src_hw_pc128op_keyboard_asm);
88
89 outline0("JSR INKEY");
90 outline1("STA %s", _key);
91
92}
93
94void pc128op_wait_key( Environment * _environment, int _release ) {
95
96 _environment->bitmaskNeeded = 1;
97
98 deploy_preferred( keyboard, src_hw_pc128op_keyboard_asm );
99
100 if ( _release ) {
101 outline0("JSR WAITKEYRELEASE");
102 } else {
103 outline0("JSR WAITKEY");
104 }
105
106}
107
108void pc128op_wait_key_or_fire( Environment * _environment, int _port, int _release ) {
109
110 pc128op_wait_key( _environment, _release );
111
112}
113
114void pc128op_wait_key_or_fire_semivar( Environment * _environment, char * _port, int _release ) {
115
116 pc128op_wait_key( _environment, _release );
117
118}
119
120void pc128op_wait_fire( Environment * _environment, int _port, int _release ) {
121
122 if ( _environment->joystickConfig.notEmulated ) {
123
124 } else {
125
126 _environment->bitmaskNeeded = 1;
127
128 deploy_preferred( keyboard, src_hw_pc128op_keyboard_asm );
129 deploy( joystick, src_hw_pc128op_joystick_asm );
130
131 if ( _port == -1 ) {
132 outline0("JSR WAITFIRE");
133 } else {
134 outline1("LDA #$%2.2x", (unsigned char)(_port&0xff) );
135 outline0("JSR WAITFIREX");
136 }
137 }
138
139}
140
141void pc128op_wait_fire_semivar( Environment * _environment, char * _port, int _release ) {
142
143 if ( _environment->joystickConfig.notEmulated ) {
144
145 } else {
146
147 _environment->bitmaskNeeded = 1;
148
149 deploy_preferred( keyboard, src_hw_pc128op_keyboard_asm );
150 deploy( joystick, src_hw_pc128op_joystick_asm );
151
152 if ( !_port ) {
153 outline0("JSR WAITFIRE");
154 } else {
155 outline1("LDA %s", _port );
156 outline0("JSR WAITFIREX");
157 }
158 }
159
160}
161
162void pc128op_key_state( Environment * _environment, char *_scancode, char * _result ) {
163
164 _environment->bitmaskNeeded = 1;
165
167
168 deploy_preferred( keyboard, src_hw_pc128op_keyboard_asm );
169
170 outline1("LDA %s", _scancode);
171 outline0("JSR KEYSTATE");
172 cpu_ctoa( _environment );
173 outline1("STA %s", _result);
174
175}
176
177void pc128op_scancode( Environment * _environment, char * _result ) {
178
179 _environment->bitmaskNeeded = 1;
180
181 deploy_preferred( keyboard, src_hw_pc128op_keyboard_asm);
182
183 outline0("JSR SCANCODE");
184 outline1("STA %s", _result );
185
186}
187
188void pc128op_asciicode( Environment * _environment, char * _result ) {
189
190 _environment->bitmaskNeeded = 1;
191 _environment->keyboardFullSupport = 1;
192
193 deploy_preferred( keyboard, src_hw_pc128op_keyboard_asm);
194
195 outline0("JSR ASCIICODE");
196 outline1("STA %s", _result );
197
198}
199
200void pc128op_key_pressed( Environment * _environment, char *_scancode, char * _result ) {
201
202 _environment->bitmaskNeeded = 1;
203
205
206 deploy_preferred( keyboard, src_hw_pc128op_keyboard_asm );
207
208 outline1("LDA %s", _scancode);
209 outline0("JSR KEYPRESSED");
210 cpu_ctoa( _environment );
211 outline1("STA %s", _result);
212
213}
214
215
216void pc128op_scanshift( Environment * _environment, char * _shifts ) {
217
218 pc128op_keyshift( _environment, _shifts );
219
220}
221
222void pc128op_keyshift( Environment * _environment, char * _shifts ) {
223
224 _environment->bitmaskNeeded = 1;
225 _environment->keyboardFullSupport = 1;
226
227 deploy_preferred( keyboard, src_hw_pc128op_keyboard_asm );
228
229 outline0("JSR KEYSHIFT" );
230 outline1("STA %s", _shifts );
231
232}
233
234void pc128op_clear_key( Environment * _environment ) {
235
236}
237
238void pc128op_initialization( Environment * _environment ) {
239
240}
241
242int pc128op_screen_mode_enable( Environment * _environment, ScreenMode * _screen_mode ) {
243
244}
245
246void pc128op_bitmap_enable( Environment * _environment, int _width, int _height, int _colors ) {
247
248}
249
250void pc128op_tilemap_enable( Environment * _environment, int _width, int _height, int _colors, int _tile_width, int _tile_height ) {
251
252}
253
254void pc128op_back( Environment * _environment ) {
255
256}
257
258void pc128op_busy_wait( Environment * _environment, char * _timing ) {
259
261
262 outline1("LDD %s", _timing );
263 outline0("LDX PC128TIMER");
264 outline0("LEAX D, X");
265 outhead1("%sfirst", label );
266 interleaved_instructions( _environment );
267 outline0("CMPX PC128TIMER");
268 outline1("BGT %sfirst", label);
269}
270
271void pc128op_joystick( Environment * _environment, int _joystick, char * _result ) {
272
273 if ( _environment->joystickConfig.notEmulated ) {
274 cpu_store_8bit( _environment, _result, 0 );
275 } else {
276
277 _environment->bitmaskNeeded = 1;
278
279 deploy_preferred( keyboard, src_hw_pc128op_keyboard_asm );
280 deploy( joystick, src_hw_pc128op_joystick_asm );
281
282 outline1("LDA #$%2.2x", _joystick);
283 outline0("JSR JOYSTICK");
284 outline1("STA %s", _result);
285
286 }
287
288}
289
290void pc128op_joystick_semivars( Environment * _environment, char * _joystick, char * _result ) {
291
292 if ( _environment->joystickConfig.notEmulated ) {
293 cpu_store_8bit( _environment, _result, 0 );
294 } else {
295
296 _environment->bitmaskNeeded = 1;
297
298 deploy_preferred( keyboard, src_hw_pc128op_keyboard_asm );
299 deploy( joystick, src_hw_pc128op_joystick_asm );
300
301 outline1("LDA %s", _joystick);
302 outline0("JSR JOYSTICK");
303 outline1("STA %s", _result);
304
305 }
306
307}
308
309void pc128op_sys_call( Environment * _environment, int _destination ) {
310
311 _environment->sysCallUsed = 1;
312
313 outline0("PSHS D");
314 outline1("LDD #$%4.4x", _destination );
315 outline0("STD SYSCALL0+1");
316 outline0("PULS D");
317 outline0("JSR SYSCALL");
318
319}
320
321void pc128op_timer_set_status_on( Environment * _environment, char * _timer ) {
322
323 deploy( timer, src_hw_6809_timer_asm);
324
325 if ( _timer ) {
326 outline1("LDB %s", _timer );
327 } else {
328 outline0("LDB #0" );
329 }
330 outline0("LDA #$1" );
331 outline0("STA <MATHPTR0" );
332 outline0("JSR TIMERSETSTATUS" );
333
334}
335
336void pc128op_timer_set_status_off( Environment * _environment, char * _timer ) {
337
338 deploy( timer, src_hw_6809_timer_asm);
339
340 if ( _timer ) {
341 outline1("LDB %s", _timer );
342 } else {
343 outline0("LDB #0" );
344 }
345 outline0("LDA #$0" );
346 outline0("STA <MATHPTR0" );
347 outline0("JSR TIMERSETSTATUS" );
348
349}
350
351void pc128op_timer_set_counter( Environment * _environment, char * _timer, char * _counter ) {
352
353 deploy( timer, src_hw_6809_timer_asm);
354
355 if ( _counter ) {
356 outline1("LDD %s", _counter );
357 } else {
358 outline0("LDD #0" );
359 }
360 outline0("STD <MATHPTR2");
361 if ( _timer ) {
362 outline1("LDB %s", _timer );
363 } else {
364 outline0("LDB #0" );
365 }
366 outline0("JSR TIMERSETCOUNTER" );
367
368}
369
370void pc128op_timer_set_init( Environment * _environment, char * _timer, char * _init ) {
371
372 deploy( timer, src_hw_6809_timer_asm);
373
374 outline1("LDD %s", _init );
375 outline0("STD <MATHPTR2");
376 if ( _timer ) {
377 outline1("LDB %s", _timer );
378 } else {
379 outline0("LDB #0" );
380 }
381 outline0("JSR TIMERSETINIT" );
382
383}
384
385void pc128op_timer_set_address( Environment * _environment, char * _timer, char * _address ) {
386
387 deploy( timer, src_hw_6809_timer_asm);
388
389 outline1("LDD #%s", _address );
390 outline0("STD <MATHPTR2");
391 if ( _timer ) {
392 outline1("LDB %s", _timer );
393 } else {
394 outline0("LDB #0" );
395 }
396 outline0("JSR TIMERSETADDRESS" );
397
398}
399
400void pc128op_put_key( Environment * _environment, char *_string, char * _size ) {
401
402 _environment->bitmaskNeeded = 1;
403
404 deploy_preferred( keyboard, src_hw_pc128op_keyboard_asm);
405
406 outline1("LDX %s", _string );
407 outline1("LDB %s", _size );
408 outline0("JSR PUTKEY" );
409
410}
411
412void pc128op_dload( Environment * _environment, char * _address, char * _bank, char * _size ) {
413
414 deploy_preferred( duff, src_hw_6809_duff_asm );
415 deploy_preferred( msc1, src_hw_6809_msc1_asm );
416 deploy_preferred( bank, src_hw_pc128op_bank_asm );
417 deploy( dload, src_hw_pc128op_dload_asm);
418 _environment->bankAccessOptimization.readn = 1;
419 _environment->bankAccessOptimization.writen = 1;
420
421 if ( _bank ) {
422 outline1("LDA %s", _bank );
423 } else {
424 outline0("CLRA" );
425 }
426 outline1("LDX %s", _address );
427 outline1("LDU %s", _size );
428 outline0("JSR DLOAD" );
429
430}
431
432#endif
void cpu_store_8bit(Environment *_environment, char *_destination, int _value)
CPU 6309: emit code to store 8 bit
Definition 6309.c:761
void cpu_ctoa(Environment *_environment)
Definition 6309.c:279
char * address_displacement(Environment *_environment, char *_address, char *_displacement)
void interleaved_instructions(Environment *_environment)
Definition _init.c:123
void dload(Environment *_environment, char *_filename, char *_offset, char *_address, char *_bank, char *_size)
Emit code for DLOAD(...).
Definition dload.c:60
void pc128op_asciicode(Environment *_environment, char *_result)
Definition pc128op.c:188
void pc128op_tilemap_enable(Environment *_environment, int _width, int _height, int _colors, int _tile_width, int _tile_height)
Definition pc128op.c:250
void pc128op_vscroll(Environment *_environment, int _displacement)
Definition pc128op.c:70
void pc128op_bitmap_enable(Environment *_environment, int _width, int _height, int _colors)
Definition pc128op.c:246
void pc128op_scancode(Environment *_environment, char *_result)
Definition pc128op.c:177
void pc128op_cls(Environment *_environment, char *_pen, char *_paper)
Definition pc128op.c:78
void pc128op_timer_set_address(Environment *_environment, char *_timer, char *_address)
Definition pc128op.c:385
void pc128op_wait_fire(Environment *_environment, int _port, int _release)
Definition pc128op.c:120
void pc128op_clear_key(Environment *_environment)
Definition pc128op.c:234
void pc128op_timer_set_status_off(Environment *_environment, char *_timer)
Definition pc128op.c:336
void pc128op_initialization(Environment *_environment)
Definition pc128op.c:238
void pc128op_sys_call(Environment *_environment, int _destination)
Definition pc128op.c:309
void pc128op_keyshift(Environment *_environment, char *_shifts)
Definition pc128op.c:222
void pc128op_key_state(Environment *_environment, char *_scancode, char *_result)
Definition pc128op.c:162
void pc128op_text_at(Environment *_environment, char *_text, char *_text_size, char *_pen, char *_paper)
Definition pc128op.c:74
void pc128op_joystick(Environment *_environment, int _joystick, char *_result)
Definition pc128op.c:271
void pc128op_inkey(Environment *_environment, char *_key)
Definition pc128op.c:82
void pc128op_wait_key_or_fire_semivar(Environment *_environment, char *_port, int _release)
Definition pc128op.c:114
void pc128op_wait_key(Environment *_environment, int _release)
Definition pc128op.c:94
void pc128op_back(Environment *_environment)
Definition pc128op.c:254
void pc128op_xpen(Environment *_environment, char *_destination)
Definition pc128op.c:44
void pc128op_wait_fire_semivar(Environment *_environment, char *_port, int _release)
Definition pc128op.c:141
void pc128op_put_key(Environment *_environment, char *_string, char *_size)
Definition pc128op.c:400
void pc128op_dload(Environment *_environment, char *_address, char *_bank, char *_size)
Definition pc128op.c:412
void pc128op_ypen(Environment *_environment, char *_destination)
Definition pc128op.c:55
void pc128op_timer_set_counter(Environment *_environment, char *_timer, char *_counter)
Definition pc128op.c:351
void pc128op_wait_key_or_fire(Environment *_environment, int _port, int _release)
Definition pc128op.c:108
void pc128op_scanshift(Environment *_environment, char *_shifts)
Definition pc128op.c:216
void pc128op_joystick_semivars(Environment *_environment, char *_joystick, char *_result)
Definition pc128op.c:290
void pc128op_key_pressed(Environment *_environment, char *_scancode, char *_result)
Definition pc128op.c:200
void pc128op_busy_wait(Environment *_environment, char *_timing)
Definition pc128op.c:258
void pc128op_color_border(Environment *_environment, char *_color)
Definition pc128op.c:66
int pc128op_screen_mode_enable(Environment *_environment, ScreenMode *_screen_mode)
Definition pc128op.c:242
void pc128op_timer_set_init(Environment *_environment, char *_timer, char *_init)
Definition pc128op.c:370
void pc128op_timer_set_status_on(Environment *_environment, char *_timer)
Definition pc128op.c:321
BankAccessOptimization bankAccessOptimization
Definition ugbc.h:3269
JoystickConfig joystickConfig
Definition ugbc.h:2437
int bitmaskNeeded
Definition ugbc.h:2659
int sysCallUsed
Definition ugbc.h:3162
int keyboardFullSupport
Definition ugbc.h:3187
int notEmulated
Definition ugbc.h:1998
struct _ScreenMode ScreenMode
struct _Environment Environment
Structure of compilation environment.
#define deploy_preferred(s, e)
Definition ugbc.h:4299
#define outline0(s)
Definition ugbc.h:4252
#define outline1(s, a)
Definition ugbc.h:4253
#define deploy(s, e)
Definition ugbc.h:4288
#define MAKE_LABEL
Definition ugbc.h:3351
#define outhead1(s, a)
Definition ugbc.h:4247