ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
every_gosub.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
50/* <usermanual>
51@keyword EVERY...GOSUB
52
53@english
54Define the call of a sub-routine at regular intervals, without
55interfering with the main program. You must specifying the length of time
56between every call, measured in TICKS.
57
58Note that the subroutine execution
59time should be less than the interval time, or the main program timings
60will be affected. After a subroutine has been entered, the
61''EVERY'' system is automatically disabled. This means that,
62in order to call this feature continuously, an ''EVERY ON'' command
63must be inserted into a subroutine before the final RETURN statement.
64
65@italian
66Definisce una chiamata a una sottoprogramma a intervalli regolari, senza
67interferire con il programma principale. È necessario specificare il
68periodo di tempo tra ogni chiamata, misurata in TICKS.
69
70Si fa notare che la durata dell'esecuzione della subroutine dovrebbe essere
71inferiore al tempo dell'intervallo indicato, altrimenti le temporizzazioni
72del programma principale ne risentiranno.
73
74Dopo essere entrati nella subroutine, il sistema disabilita la chiamata
75periodica. Ciò significa che, per richiamare questa funzione in modo continuo,
76è necessario invocare il comando ''EVERY ON'' prima dell'istruzione ''RETURN'' finale.
77
78@syntax EVERY value TICKS GOSUB identifier
79
80@example EVERY 50 TICKS GOSUB changeBorderColor
81@usedInExample control_periodic_01.bas
82
83@target c128
84</usermanual> */
85void every_ticks_gosub( Environment * _environment, char * _timing, char * _label, char * _timer ) {
86
87 Variable * timing = variable_retrieve_or_define( _environment, _timing, VT_WORD, 0 );
88 Variable * timer = NULL;
89 char * timerRealName = NULL;
90 if ( _timer ) {
91 timer = variable_retrieve_or_define( _environment, _timer, VT_BYTE, 0 );
92 timerRealName = timer->realName;
93 }
94
95 c128_timer_set_address( _environment, timerRealName, _label );
96 c128_timer_set_counter( _environment, timerRealName, timing->realName );
97 c128_timer_set_init( _environment, timerRealName, timing->realName );
98
99}
Variable * variable_retrieve_or_define(Environment *_environment, char *_name, VariableType _type, int _value)
void every_ticks_gosub(Environment *_environment, char *_timing, char *_label, char *_timer)
Emit ASM code for EVERY ... TICKS GOSUB ....
Definition every_gosub.c:54
void c128_timer_set_address(Environment *_environment, char *_timer, char *_address)
Definition c128.c:153
void c128_timer_set_init(Environment *_environment, char *_timer, char *_init)
Definition c128.c:136
void c128_timer_set_counter(Environment *_environment, char *_timer, char *_counter)
Definition c128.c:113
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