ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
flash.c
Go to the documentation of this file.
1/*****************************************************************************
2 * ugBASIC - an isomorphic BASIC language compiler for retrocomputers *
3 *****************************************************************************
4 * Copyright 2021-2024 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(__c64__) || defined(__c64reu__) || defined(__c128__)
42
46
47/* <usermanual>
48@keyword FLASH
49
50@english
51
52The ''FLASH'' command is designed to create a flashing effect by automatically
53alternating color values ​​at a specific memory address, which can be a hardware
54register or a video memory cell. This command is useful for creating dynamic
55visual effects that run in parallel with program execution.
56
57The main command syntax specifies the effect number (up to 4 can be configured,
58from 0 to 3), and a sequence of pairs: number of frames and color tone, separated
59by a comma. An extended syntax allows you to specify the address to which the
60timed values ​​are to be written. If this address is omitted, the standard address
61associated with the effect number will be used, which in turn depends on the
62chipset the program is running on:
63
64 * ''atari'', ''atarixl'': 0 = &H02C4, 1 = &H02C5, 2 = &H02C6, 3 = &H02C7
65
66 * ''c64'', ''c128'', ''c64reu'': 0 = &HD021, 1 = &HD022, 2 = &HD023, 3 = &HD024
67
68 * ''vic20'': 0..3 = &H900F
69
70 * ''c128z'': 0..3 = &H900F
71
72 * ''cpc'': 0..3 = palette 0..3
73
74Note that on the VIC20, the first two effects are bound to the high and low nibbles of the address specified, respectively.
75
76@italian
77
78@syntax FLASH index, color, timer, color, timer[, color[, ...]] [ON address]
79
80@example FLASH 0, 20, RED, 10, BLUE
81@example FLASH 0, 20, RED, 10, BLUE ON $d021
82
83@target c64
84@target c128
85@target c64reu
86</usermanual> */
87
88void flash( Environment * _environment, char * _index, char * _register ) {
89
90 Variable * idx = variable_retrieve_or_define( _environment, _index, VT_BYTE, 0 );
91 Variable * reg = NULL;
92 if ( _register ) {
93 reg = variable_retrieve_or_define( _environment, _register, VT_ADDRESS, 0xd021 );
94 }
95
96 vic2_flash_begin( _environment, idx->realName, reg!=NULL?reg->realName:NULL );
97
98 int i = 0;
99
100 while( i < _environment->flashVarsIndex ) {
101 Variable * timer = variable_retrieve_or_define( _environment, _environment->flashVars[i], VT_BYTE, 0 );
102 ++i;
103 if ( !timer ) {
104 break;
105 }
106 Variable * color = variable_retrieve_or_define( _environment, _environment->flashVars[i], VT_COLOR, COLOR_BLACK );
107 if ( !color ) {
108 break;
109 }
110 ++i;
111 vic2_flash_register( _environment, idx->realName, timer->realName, color->realName );
112 }
113
114 vic2_flash_end( _environment );
115
116}
117
118void flash_off( Environment * _environment, char * _index ) {
119
120 Variable * idx = variable_retrieve_or_define( _environment, _index, VT_BYTE, 0 );
121
122 vic2_flash_off( _environment, idx->realName );
123
124}
125
126#endif
#define COLOR_BLACK
Definition 6847.h:36
Variable * variable_retrieve_or_define(Environment *_environment, char *_name, VariableType _type, int _value)
void color(Environment *_environment, int _index, int _shade)
Emit ASM code for instruction COLOR [int], [int].
Definition color.c:59
void flash(Environment *_environment, char *_index, char *_register)
Definition flash.c:44
void flash_off(Environment *_environment, char *_index)
Definition flash.c:48
char * flashVars[128]
Definition ugbc.h:3284
char * realName
Definition ugbc.h:982
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
@ VT_BYTE
Definition ugbc.h:450
@ VT_ADDRESS
Definition ugbc.h:465
@ VT_COLOR
Definition ugbc.h:471
void vic2_flash_begin(Environment *_environment, char *_index, char *_register)
Definition vic2.c:4465
void vic2_flash_register(Environment *_environment, char *_index, char *_timer, char *_color)
Definition vic2.c:4489
void vic2_flash_end(Environment *_environment)
Definition vic2.c:4500
void vic2_flash_off(Environment *_environment, char *_index)
Definition vic2.c:4508