ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
mo5.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 __mo5__
43
44void mo5_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 mo5_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 mo5_color_border( Environment * _environment, char * _color ) {
67
68}
69
70void mo5_vscroll( Environment * _environment, int _displacement ) {
71
72}
73
74void mo5_text_at( Environment * _environment, char * _text, char * _text_size, char * _pen, char * _paper ) {
75
76}
77
78void mo5_cls( Environment * _environment, char * _pen, char * _paper ) {
79
80}
81
82void mo5_inkey( Environment * _environment, char * _key ) {
83
84 _environment->bitmaskNeeded = 1;
85
86 deploy_preferred( keyboard, src_hw_mo5_keyboard_asm);
87
88 outline0("JSR INKEY");
89 outline1("STA %s", _key);
90
91}
92
93void mo5_wait_key( Environment * _environment, int _release ) {
94
95 _environment->bitmaskNeeded = 1;
96
97 deploy_preferred( keyboard, src_hw_mo5_keyboard_asm );
98
99 if ( _release ) {
100 outline0("JSR WAITKEYRELEASE");
101 } else {
102 outline0("JSR WAITKEY");
103 }
104
105}
106
107void mo5_wait_key_or_fire( Environment * _environment, int _port, int _release ) {
108
109 mo5_wait_key( _environment, _release );
110
111}
112
113void mo5_wait_key_or_fire_semivar( Environment * _environment, char * _port, int _release ) {
114
115 mo5_wait_key( _environment, _release );
116
117}
118
119void mo5_wait_fire( Environment * _environment, int _port, int _release ) {
120
121 if ( _environment->joystickConfig.notEmulated ) {
122
123 } else {
124
125 _environment->bitmaskNeeded = 1;
126
127 deploy_preferred( keyboard, src_hw_mo5_keyboard_asm );
128 deploy( joystick, src_hw_mo5_joystick_asm );
129
130 if ( _port == -1 ) {
131 outline0("JSR WAITFIRE");
132 } else {
133 outline1("LDA #$%2.2x", (unsigned char)(_port&0xff) );
134 outline0("JSR WAITFIREX");
135 }
136 }
137
138}
139
140void mo5_wait_fire_semivar( Environment * _environment, char * _port, int _release ) {
141
142 if ( _environment->joystickConfig.notEmulated ) {
143
144 } else {
145
146 _environment->bitmaskNeeded = 1;
147
148 deploy_preferred( keyboard, src_hw_mo5p_keyboard_asm );
149 deploy( joystick, src_hw_mo5_joystick_asm );
150
151 if ( !_port ) {
152 outline0("JSR WAITFIRE");
153 } else {
154 outline1("LDA %s", _port );
155 outline0("JSR WAITFIREX");
156 }
157 }
158
159}
160
161void mo5_key_state( Environment * _environment, char *_scancode, char * _result ) {
162
163 _environment->bitmaskNeeded = 1;
164
166
167 deploy_preferred( keyboard, src_hw_mo5_keyboard_asm );
168
169 outline1("LDA %s", _scancode);
170 outline0("JSR KEYSTATE");
171 cpu_ctoa( _environment );
172 outline1("STA %s", _result);
173
174}
175
176void mo5_scancode( Environment * _environment, char * _result ) {
177
178 _environment->bitmaskNeeded = 1;
179
180 deploy_preferred( keyboard, src_hw_mo5_keyboard_asm);
181
182 outline0("JSR SCANCODE");
183 outline1("STA %s", _result );
184
185}
186
187void mo5_asciicode( Environment * _environment, char * _result ) {
188
189 _environment->bitmaskNeeded = 1;
190
191 deploy_preferred( keyboard, src_hw_mo5_keyboard_asm);
192
193 outline0("JSR ASCIICODE");
194 outline1("STA %s", _result );
195
196}
197
198void mo5_key_pressed( Environment * _environment, char *_scancode, char * _result ) {
199
200 _environment->bitmaskNeeded = 1;
201
203
204 deploy_preferred( keyboard, src_hw_mo5_keyboard_asm );
205
206 outline1("LDA %s", _scancode);
207 outline0("JSR KEYPRESSED");
208 cpu_ctoa( _environment );
209 outline1("STA %s", _result);
210
211}
212
213
214void mo5_scanshift( Environment * _environment, char * _shifts ) {
215
216 mo5_keyshift( _environment, _shifts );
217
218}
219
220void mo5_keyshift( Environment * _environment, char * _shifts ) {
221
222 _environment->bitmaskNeeded = 1;
223
224 deploy_preferred( keyboard, src_hw_mo5_keyboard_asm );
225
226 outline0("JSR KEYSHIFT" );
227 outline1("STA %s", _shifts );
228
229}
230
231void mo5_clear_key( Environment * _environment ) {
232
233}
234
235void mo5_initialization( Environment * _environment ) {
236
237}
238
239int mo5_screen_mode_enable( Environment * _environment, ScreenMode * _screen_mode ) {
240
241}
242
243void mo5_bitmap_enable( Environment * _environment, int _width, int _height, int _colors ) {
244
245}
246
247void mo5_tilemap_enable( Environment * _environment, int _width, int _height, int _colors, int _tile_width, int _tile_height ) {
248
249}
250
251void mo5_back( Environment * _environment ) {
252
253}
254
255void mo5_busy_wait( Environment * _environment, char * _timing ) {
256
258
259 outline1("LDD %s", _timing );
260 outline0("LDX MO5TIMER");
261 outline0("LEAX D, X");
262 outhead1("%sfirst", label );
263 outline0("CMPX MO5TIMER");
264 outline1("BGT %sfirst", label);
265}
266
267void mo5_joystick_semivars( Environment * _environment, int _joystick, char * _result ) {
268
269 if ( _environment->joystickConfig.notEmulated ) {
270 cpu_store_8bit( _environment, _result, 0 );
271 } else {
272
273 _environment->bitmaskNeeded = 1;
274
275 deploy_preferred( keyboard, src_hw_mo5_keyboard_asm );
276 deploy( joystick, src_hw_mo5_joystick_asm );
277
278 outline1("LDA #$%2.2x", _joystick);
279 outline0("JSR JOYSTICK");
280 outline1("STA %s", _result);
281
282 }
283
284}
285
286void mo5_joystick_vars( Environment * _environment, char * _joystick, char * _result ) {
287
288 if ( _environment->joystickConfig.notEmulated ) {
289 cpu_store_8bit( _environment, _result, 0 );
290 } else {
291
292 _environment->bitmaskNeeded = 1;
293
294 deploy_preferred( keyboard, src_hw_mo5_keyboard_asm );
295 deploy( joystick, src_hw_mo5_joystick_asm );
296
297 outline1("LDA %s", _joystick);
298 outline0("JSR JOYSTICK");
299 outline1("STA %s", _result);
300
301 }
302
303}
304
305void mo5_sys_call( Environment * _environment, int _destination ) {
306
307 _environment->sysCallUsed = 1;
308
309 outline0("PSHS D");
310 outline1("LDD #$%4.4x", _destination );
311 outline0("STD SYSCALL0+1");
312 outline0("PULS D");
313 outline0("JSR SYSCALL");
314
315}
316
317void mo5_timer_set_status_on( Environment * _environment, char * _timer ) {
318
319 deploy( timer, src_hw_6809_timer_asm);
320
321 if ( _timer ) {
322 outline1("LDB %s", _timer );
323 } else {
324 outline0("LDB #0" );
325 }
326 outline0("LDA #$1" );
327 outline0("STA <MATHPTR0" );
328 outline0("JSR TIMERSETSTATUS" );
329
330}
331
332void mo5_timer_set_status_off( Environment * _environment, char * _timer ) {
333
334 deploy( timer, src_hw_6809_timer_asm);
335
336 if ( _timer ) {
337 outline1("LDB %s", _timer );
338 } else {
339 outline0("LDB #0" );
340 }
341 outline0("LDA #$0" );
342 outline0("STA <MATHPTR0" );
343 outline0("JSR TIMERSETSTATUS" );
344
345}
346
347void mo5_timer_set_counter( Environment * _environment, char * _timer, char * _counter ) {
348
349 deploy( timer, src_hw_6809_timer_asm);
350
351 if ( _counter ) {
352 outline1("LDD %s", _counter );
353 } else {
354 outline0("LDD #0" );
355 }
356 outline0("STD <MATHPTR2");
357 if ( _timer ) {
358 outline1("LDB %s", _timer );
359 } else {
360 outline0("LDB #0" );
361 }
362 outline0("JSR TIMERSETCOUNTER" );
363
364}
365
366void mo5_timer_set_init( Environment * _environment, char * _timer, char * _init ) {
367
368 deploy( timer, src_hw_6809_timer_asm);
369
370 outline1("LDD %s", _init );
371 outline0("STD <MATHPTR2");
372 if ( _timer ) {
373 outline1("LDB %s", _timer );
374 } else {
375 outline0("LDB #0" );
376 }
377 outline0("JSR TIMERSETINIT" );
378
379}
380
381void mo5_timer_set_address( Environment * _environment, char * _timer, char * _address ) {
382
383 deploy( timer, src_hw_6809_timer_asm);
384
385 outline1("LDD #%s", _address );
386 outline0("STD <MATHPTR2");
387 if ( _timer ) {
388 outline1("LDB %s", _timer );
389 } else {
390 outline0("LDB #0" );
391 }
392 outline0("JSR TIMERSETADDRESS" );
393
394}
395
396void mo5_put_key( Environment * _environment, char *_string, char * _size ) {
397
398 _environment->bitmaskNeeded = 1;
399
400 deploy_preferred( keyboard, src_hw_mo5_keyboard_asm);
401
402 outline1("LDX %s", _string );
403 outline1("LDB %s", _size );
404 outline0("JSR PUTKEY" );
405
406}
407
408#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 mo5_inkey(Environment *_environment, char *_key)
Definition mo5.c:82
void mo5_timer_set_status_on(Environment *_environment, char *_timer)
Definition mo5.c:317
void mo5_keyshift(Environment *_environment, char *_shifts)
Definition mo5.c:220
void mo5_back(Environment *_environment)
Definition mo5.c:251
void mo5_scancode(Environment *_environment, char *_result)
Definition mo5.c:176
int mo5_screen_mode_enable(Environment *_environment, ScreenMode *_screen_mode)
Definition mo5.c:239
void mo5_busy_wait(Environment *_environment, char *_timing)
Definition mo5.c:255
void mo5_cls(Environment *_environment, char *_pen, char *_paper)
Definition mo5.c:78
void mo5_timer_set_address(Environment *_environment, char *_timer, char *_address)
Definition mo5.c:381
void mo5_key_pressed(Environment *_environment, char *_scancode, char *_result)
Definition mo5.c:198
void mo5_tilemap_enable(Environment *_environment, int _width, int _height, int _colors, int _tile_width, int _tile_height)
Definition mo5.c:247
void mo5_timer_set_counter(Environment *_environment, char *_timer, char *_counter)
Definition mo5.c:347
void mo5_initialization(Environment *_environment)
Definition mo5.c:235
void mo5_ypen(Environment *_environment, char *_destination)
Definition mo5.c:55
void mo5_wait_key_or_fire_semivar(Environment *_environment, char *_port, int _release)
Definition mo5.c:113
void mo5_wait_fire(Environment *_environment, int _port, int _release)
Definition mo5.c:119
void mo5_wait_fire_semivar(Environment *_environment, char *_port, int _release)
Definition mo5.c:140
void mo5_asciicode(Environment *_environment, char *_result)
Definition mo5.c:187
void mo5_joystick_vars(Environment *_environment, char *_joystick, char *_result)
Definition mo5.c:286
void mo5_color_border(Environment *_environment, char *_color)
Definition mo5.c:66
void mo5_scanshift(Environment *_environment, char *_shifts)
Definition mo5.c:214
void mo5_key_state(Environment *_environment, char *_scancode, char *_result)
Definition mo5.c:161
void mo5_sys_call(Environment *_environment, int _destination)
Definition mo5.c:305
void mo5_text_at(Environment *_environment, char *_text, char *_text_size, char *_pen, char *_paper)
Definition mo5.c:74
void mo5_xpen(Environment *_environment, char *_destination)
Definition mo5.c:44
void mo5_timer_set_init(Environment *_environment, char *_timer, char *_init)
Definition mo5.c:366
void mo5_timer_set_status_off(Environment *_environment, char *_timer)
Definition mo5.c:332
void mo5_put_key(Environment *_environment, char *_string, char *_size)
Definition mo5.c:396
void mo5_clear_key(Environment *_environment)
Definition mo5.c:231
void mo5_joystick_semivars(Environment *_environment, int _joystick, char *_result)
Definition mo5.c:267
void mo5_vscroll(Environment *_environment, int _displacement)
Definition mo5.c:70
void mo5_bitmap_enable(Environment *_environment, int _width, int _height, int _colors)
Definition mo5.c:243
void mo5_wait_key(Environment *_environment, int _release)
Definition mo5.c:93
void mo5_wait_key_or_fire(Environment *_environment, int _port, int _release)
Definition mo5.c:107
JoystickConfig joystickConfig
Definition ugbc.h:2437
int bitmaskNeeded
Definition ugbc.h:2659
int sysCallUsed
Definition ugbc.h:3162
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