ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
cia.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#if defined(__c128__) || defined(__c64__) || defined(__c64reu__)
42
43void cia_wait_key_or_fire( Environment * _environment, int _port, int _release ) {
44
45 _environment->bitmaskNeeded = 1;
46
50
51 if ( _port == -1 ) {
52 outline0("JSR WAITKEYFIRE");
53 } else {
54 outline1("LDX #$%2.2x", _port );
55 outline0("JSR WAITKEYFIREX");
56 }
57
58}
59
60void cia_wait_key_or_fire_semivar( Environment * _environment, char * _port, int _release ) {
61
62 _environment->bitmaskNeeded = 1;
63
67
68 outline1("LDX #$%2.2x", _release );
69 if ( !_port ) {
70 outline0("JSR WAITKEYFIRE");
71 } else {
72 outline1("LDA %s", _port );
73 outline0("JSR WAITKEYFIREA");
74 }
75
76}
77
78void cia_wait_fire( Environment * _environment, int _port, int _release ) {
79
80 _environment->bitmaskNeeded = 1;
81
83
84 outline1("LDY #$%2.2x", _release );
85 switch( _port ) {
86 case -1:
87 outline0("JSR WAITFIRE");
88 break;
89 case 0:
90 outline0("JSR WAITFIRE0");
91 break;
92 case 1:
93 outline0("JSR WAITFIRE1");
94 break;
95 }
96
97}
98
99void cia_wait_fire_semivar( Environment * _environment, char * _port, int _release ) {
100
101 _environment->bitmaskNeeded = 1;
102
103 deploy( joystick, src_hw_cia_joystick_asm );
104
105 outline1("LDY #$%2.2x", _release );
106 if ( ! _port ) {
107 outline0("JSR WAITFIRE");
108 } else {
109 outline1("LDX %s", _port );
110 outline0("JSR WAITFIREX");
111 }
112
113}
114
115void cia_inkey( Environment * _environment, char * _key ) {
116
117 _environment->bitmaskNeeded = 1;
118
120
121 outline0("JSR INKEY");
122 outline1("STA %s", _key);
123
124}
125
126void cia_wait_key( Environment * _environment, int _release ) {
127
128 _environment->bitmaskNeeded = 1;
129
130 deploy( keyboard, src_hw_cia_keyboard_asm );
131
132 if ( _release ) {
133 outline0("JSR WAITKEYRELEASE");
134 } else {
135 outline0("JSR WAITKEY");
136 }
137
138}
139
140void cia_key_state( Environment * _environment, char *_scancode, char * _result ) {
141
142 _environment->bitmaskNeeded = 1;
143
145
146 deploy( keyboard, src_hw_cia_keyboard_asm );
147
148 outline1("LDX %s", _scancode);
149 outline0("JSR KEYSTATE");
150 cpu_ctoa( _environment );
151 outline1("STA %s", _result);
152
153}
154
155void cia_scancode( Environment * _environment, char * _result ) {
156
157 _environment->bitmaskNeeded = 1;
158
160
161 outline0("JSR SCANCODE");
162 outline1("STA %s", _result );
163
164}
165
166void cia_asciicode( Environment * _environment, char * _result ) {
167
168 _environment->bitmaskNeeded = 1;
169
171
172 outline0("JSR ASCIICODE");
173 outline1("STA %s", _result );
174
175}
176
177void cia_key_pressed( Environment * _environment, char *_scancode, char * _result ) {
178
179 _environment->bitmaskNeeded = 1;
180
182
183 deploy( keyboard, src_hw_cia_keyboard_asm );
184
185 outline1("LDX %s", _scancode);
186 outline0("JSR KEYPRESSED");
187 cpu_ctoa( _environment );
188 outline1("STA %s", _result);
189
190}
191
192void cia_scanshift( Environment * _environment, char * _shifts ) {
193
195
196 outline0("LDA #0");
197 outline1("STA %s", _shifts);
198 outline0("LDA #$10");
199 outline0("STA $DC00");
200 outline0("LDA $DC01");
201 outline0("AND #$80");
202 outline1("BNE %snoleft", label);
203 outline0("LDA #1");
204 outline1("STA %s", _shifts);
205 outhead1("%snoleft:", label );
206
207 outline0("LDA #$20");
208 outline0("STA $DC00");
209 outline0("LDA $DC01");
210 outline0("AND #$10");
211 outline1("BNE %snoright", label);
212 outline1("LDA %s", _shifts);
213 outline0("ORA #2");
214 outline1("STA %s", _shifts);
215 outhead1("%snoright:", label );
216
217}
218
219void cia_keyshift( Environment * _environment, char * _shifts ) {
220
221 _environment->bitmaskNeeded = 1;
222
223 deploy( keyboard, src_hw_cia_keyboard_asm );
224
225 outline0("JSR KEYSHIFT" );
226 outline1("STA %s", _shifts );
227
228}
229
230void cia_clear_key( Environment * _environment ) {
231
232 _environment->bitmaskNeeded = 1;
233
234 deploy( keyboard, src_hw_cia_keyboard_asm );
235
236 outline0("JSR CLEARKEY");
237
238}
239
240void cia_put_key( Environment * _environment, char *_string, char * _size ) {
241
242 _environment->bitmaskNeeded = 1;
243
244 outline1("LDA %s", _string );
245 outline0("STA TMPPTR" );
246 outline1("LDA %s", address_displacement( _environment, _string, "1" ) );
247 outline0("STA TMPPTR+1" );
248 outline1("LDX %s", _size );
249 outline0("JSR PUTKEY" );
250
251}
252
253#endif
void cpu_ctoa(Environment *_environment)
Definition 6309.c:279
char * address_displacement(Environment *_environment, char *_address, char *_displacement)
void wait_key_or_fire(Environment *_environment, int _port, int _release)
void cia_wait_fire_semivar(Environment *_environment, char *_port, int _release)
Definition cia.c:99
void cia_wait_fire(Environment *_environment, int _port, int _release)
Definition cia.c:78
void cia_key_pressed(Environment *_environment, char *_scancode, char *_result)
Definition cia.c:177
void cia_scanshift(Environment *_environment, char *_shifts)
Definition cia.c:192
void cia_wait_key(Environment *_environment, int _release)
Definition cia.c:126
void cia_wait_key_or_fire(Environment *_environment, int _port, int _release)
Definition cia.c:43
void cia_clear_key(Environment *_environment)
Definition cia.c:230
void cia_put_key(Environment *_environment, char *_string, char *_size)
Definition cia.c:240
void cia_asciicode(Environment *_environment, char *_result)
Definition cia.c:166
void cia_keyshift(Environment *_environment, char *_shifts)
Definition cia.c:219
void cia_inkey(Environment *_environment, char *_key)
Definition cia.c:115
void cia_wait_key_or_fire_semivar(Environment *_environment, char *_port, int _release)
Definition cia.c:60
void cia_scancode(Environment *_environment, char *_result)
Definition cia.c:155
void cia_key_state(Environment *_environment, char *_scancode, char *_result)
Definition cia.c:140
unsigned char src_hw_cia_joystick_asm[]
Definition cia_joystick.c:1
unsigned char src_hw_cia_keyboard_asm[]
Definition cia_keyboard.c:1
unsigned char src_hw_cia_wait_key_or_fire_asm[]
int bitmaskNeeded
Definition ugbc.h:2659
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