ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
c128z.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 __c128z__
43
44void c128z_inkey( Environment * _environment, char * _key ) {
45
46 _environment->bitmaskNeeded = 1;
47
48 deploy( keyboard, src_hw_c128z_keyboard_asm);
49
50 outline0("CALL INKEY");
51 outline1("LD (%s), A", _key);
52
53}
54
55void c128z_wait_key( Environment * _environment, int _release ) {
56
57 _environment->bitmaskNeeded = 1;
58
59 deploy( keyboard, src_hw_c128z_keyboard_asm );
60
61 if ( _release ) {
62 outline0("CALL WAITKEYRELEASE");
63 } else {
64 outline0("CALL WAITKEY");
65 }
66
67}
68
69void c128z_wait_key_or_fire( Environment * _environment, int _port, int _release ) {
70
71 _environment->bitmaskNeeded = 1;
72
73 deploy( joystick, src_hw_c128z_joystick_asm );
74 deploy( keyboard, src_hw_c128z_keyboard_asm );
75 deploy( wait_key_or_fire, src_hw_c128z_wait_key_or_fire_asm );
76
77 if ( _port == -1 ) {
78 outline0("CALL WAITKEYFIRE");
79 } else {
80 outline1("LD A, (%d)", _port );
81 outline0("CALL WAITKEYFIREA");
82 }
83
84}
85
86void c128z_wait_key_or_fire_semivar( Environment * _environment, char * _port, int _release ) {
87
88 _environment->bitmaskNeeded = 1;
89
90 deploy( joystick, src_hw_c128z_joystick_asm );
91 deploy( keyboard, src_hw_c128z_keyboard_asm );
92 deploy( wait_key_or_fire, src_hw_c128z_wait_key_or_fire_asm );
93
94 if ( ! _port ) {
95 outline0("CALL WAITKEYFIRE");
96 } else {
97 outline1("LD A, (%s)", _port );
98 outline0("CALL WAITKEYFIREA");
99 }
100
101}
102
103
104void c128z_wait_fire( Environment * _environment, int _port, int _release ) {
105
106 _environment->bitmaskNeeded = 1;
107
108 deploy( joystick, src_hw_c128z_joystick_asm );
109
110 switch( _port ) {
111 case -1:
112 outline0("CALL WAITFIRE");
113 break;
114 case 0:
115 outline0("CALL WAITFIRE0");
116 break;
117 case 1:
118 outline0("CALL WAITFIRE1");
119 break;
120 }
121
122}
123
124void c128z_wait_fire_semivar( Environment * _environment, char * _port, int _release ) {
125
126 _environment->bitmaskNeeded = 1;
127
128 deploy( joystick, src_hw_c128z_joystick_asm );
129
130 if ( ! _port ) {
131 outline0("CALL WAITFIRE");
132 } else {
133 outline1("LD A, (%s)", _port );
134 outline0("CALL WAITFIREA");
135 }
136
137}
138
139void c128z_key_state( Environment * _environment, char *_scancode, char * _result ) {
140
141 _environment->bitmaskNeeded = 1;
142
144
145 deploy( keyboard, src_hw_c128z_keyboard_asm );
146
147 outline1("LD A, (%s)", _scancode);
148 outline0("CALL KEYSTATE");
149 cpu_ctoa( _environment );
150 outline1("LD (%s), A", _result);
151
152}
153
154void c128z_scancode( Environment * _environment, char * _result ) {
155
156 _environment->bitmaskNeeded = 1;
157
158 deploy( keyboard, src_hw_c128z_keyboard_asm);
159
160 outline0("CALL SCANCODE");
161 if ( _environment->vestigialConfig.rchack_falling_balls_1163 ) {
163 outline0("CP $FF");
164 outline1("JR NZ, %s", label );
165 outline0("LD A, 0");
166 outhead1("%s:", label );
167 }
168 outline1("LD (%s), A", _result );
169
170}
171
172void c128z_asciicode( Environment * _environment, char * _result ) {
173
174 _environment->bitmaskNeeded = 1;
175
176 deploy( keyboard, src_hw_c128z_keyboard_asm);
177
178 outline0("CALL ASCIICODE");
179 outline1("LD A, (%s)", _result );
180
181}
182
183void c128z_key_pressed( Environment * _environment, char *_scancode, char * _result ) {
184
185 _environment->bitmaskNeeded = 1;
186
188
189 deploy( keyboard, src_hw_c128z_keyboard_asm );
190
191 outline1("LD A, (%s)", _scancode);
192 outline0("CALL KEYPRESSED");
193 cpu_ctoa( _environment );
194 outline1("LD (%s), A", _result);
195
196}
197
198void c128z_scanshift( Environment * _environment, char * _shifts ) {
199
201
202 outline0("LD A, 0");
203 outline1("LD (%s), A", _shifts);
204 outline0("LD A, $10");
205 outline0("LD BC, $DC00");
206 outline0("OUT (C), A");
207 outline0("INC BC");
208 outline0("IN A, (C)");
209 outline0("AND $80");
210 outline0("CP 0");
211 outline1("JR NZ, %snoleft", label);
212 outline0("LD A, 1");
213 outline1("LD A, (%s)", _shifts);
214 outhead1("%snoleft:", label );
215
216 outline0("LD A, $20");
217 outline0("LD BC, $DC00");
218 outline0("OUT (C), A");
219 outline0("INC BC");
220 outline0("IN A, (C)");
221 outline0("AND $10");
222 outline1("JR NZ, %snoright", label);
223 outline1("LD A, (%s)", _shifts);
224 outline0("OR 2");
225 outline1("LD (%s), A", _shifts);
226 outhead1("%snoright:", label );
227
228}
229
230void c128z_keyshift( Environment * _environment, char * _shifts ) {
231
232 _environment->bitmaskNeeded = 1;
233
234 deploy( keyboard, src_hw_c128z_keyboard_asm );
235
236 outline0("CALL KEYSHIFT" );
237 outline1("LD (%s), A", _shifts );
238
239}
240
241void c128z_clear_key( Environment * _environment ) {
242
243 _environment->bitmaskNeeded = 1;
244
245 deploy( keyboard, src_hw_c128z_keyboard_asm );
246
247 outline0("CALL CLEARKEY" );
248
249}
250
251void c128z_joy_vars( Environment * _environment, char * _port, char * _value ) {
252
253}
254
255void c128z_joy( Environment * _environment, int _port, char * _value ) {
256
257}
258
259void c128z_sys_call( Environment * _environment, int _destination ) {
260
261 _environment->sysCallUsed = 1;
262
263 outline0("PUSH HL" );
264 outline0("LD HL, SYSCALL0" );
265 outline0("INC HL" );
266 outline1("LD (HL), $%2.2x", (_destination & 0xff ) );
267 outline0("INC HL" );
268 outline1("LD (HL), $%2.2x", ((_destination>>8) & 0xff ) );
269 outline0("POP HL" );
270 outline0("CALL SYSCALL");
271
272}
273
274/****************************************************************************
275 * CODE SECTION
276 ****************************************************************************/
277
278void c128z_timer_set_status_on( Environment * _environment, char * _timer ) {
279
280}
281
282void c128z_timer_set_status_off( Environment * _environment, char * _timer ) {
283
284}
285
286void c128z_timer_set_counter( Environment * _environment, char * _timer, char * _counter ) {
287
288}
289
290void c128z_timer_set_init( Environment * _environment, char * _timer, char * _init ) {
291
292}
293
294void c128z_timer_set_address( Environment * _environment, char * _timer, char * _address ) {
295
296}
297
298void c128z_put_key( Environment * _environment, char *_string, char * _size ) {
299
300 _environment->bitmaskNeeded = 1;
301
302 deploy( keyboard, src_hw_c128z_keyboard_asm);
303
304 outline1("LD HL, (%s)", _string );
305 outline1("LD A, (%s)", _size );
306 outline0("LD C, A" );
307 outline0("CALL PUTKEY" );
308
309}
310
311#endif
void cpu_ctoa(Environment *_environment)
Definition 6309.c:279
void wait_key_or_fire(Environment *_environment, int _port, int _release)
void c128z_clear_key(Environment *_environment)
Definition c128z.c:241
void c128z_key_pressed(Environment *_environment, char *_scancode, char *_result)
Definition c128z.c:183
void c128z_wait_key_or_fire(Environment *_environment, int _port, int _release)
Definition c128z.c:69
void c128z_inkey(Environment *_environment, char *_key)
Definition c128z.c:44
void c128z_timer_set_init(Environment *_environment, char *_timer, char *_init)
Definition c128z.c:290
void c128z_timer_set_counter(Environment *_environment, char *_timer, char *_counter)
Definition c128z.c:286
void c128z_wait_fire_semivar(Environment *_environment, char *_port, int _release)
Definition c128z.c:124
void c128z_joy(Environment *_environment, int _port, char *_value)
Definition c128z.c:255
void c128z_scanshift(Environment *_environment, char *_shifts)
Definition c128z.c:198
void c128z_asciicode(Environment *_environment, char *_result)
Definition c128z.c:172
void c128z_wait_key_or_fire_semivar(Environment *_environment, char *_port, int _release)
Definition c128z.c:86
void c128z_put_key(Environment *_environment, char *_string, char *_size)
Definition c128z.c:298
void c128z_keyshift(Environment *_environment, char *_shifts)
Definition c128z.c:230
void c128z_scancode(Environment *_environment, char *_result)
Definition c128z.c:154
void c128z_wait_fire(Environment *_environment, int _port, int _release)
Definition c128z.c:104
void c128z_timer_set_address(Environment *_environment, char *_timer, char *_address)
Definition c128z.c:294
void c128z_key_state(Environment *_environment, char *_scancode, char *_result)
Definition c128z.c:139
void c128z_timer_set_status_off(Environment *_environment, char *_timer)
Definition c128z.c:282
void c128z_timer_set_status_on(Environment *_environment, char *_timer)
Definition c128z.c:278
void c128z_sys_call(Environment *_environment, int _destination)
Definition c128z.c:259
void c128z_wait_key(Environment *_environment, int _release)
Definition c128z.c:55
void c128z_joy_vars(Environment *_environment, char *_port, char *_value)
Definition c128z.c:251
int bitmaskNeeded
Definition ugbc.h:2659
int sysCallUsed
Definition ugbc.h:3162
VestigialConfig vestigialConfig
Definition ugbc.h:2442
char rchack_falling_balls_1163
Definition ugbc.h:2052
struct _Environment Environment
Structure of compilation environment.
#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