ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
screen_mode.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
49/* <usermanual>
50@keyword SCREEN (instruction)
51
52@english
53
54The ''SCREEN'' command allows you to switch mode, from text mode
55(where you can display only characters) to graphics mode,
56where you can draw points, lines, and complex shapes on the screen.
57
58Most games use graphics mode to display characters, scenery, and
59animations. You can create slide shows and presentations with
60eye-catching visuals, and you will have access to canvas
61to create digital art.
62
63The ''mode'' parameter represent a specific graphic mode, different
64from target to target.
65
66@italian
67
68Il comando ''SCREEN'' ti consente di cambiare modalità, dalla
69modalità testo (dove puoi visualizzare solo caratteri) alla modalità
70grafica, dove puoi disegnare punti, linee e forme complesse sullo schermo.
71
72La maggior parte dei giochi usa la modalità grafica per visualizzare
73personaggi, scenari e animazioni. Puoi creare presentazioni e slideshow
74con immagini accattivanti e avrai accesso a canvas per creare arte digitale.
75
76Il parametro ''mode'' rappresenta una modalità grafica specifica, diversa
77da target a target.
78
79@syntax SCREEN [#]mode
80@syntax SCREEN #type, #colorset
81
82@example SCREEN #1
83@example SCREEN 12
84@example SCREEN #1, #0
85
86@seeAlso BITMAP ENABLE
87@seeAlso GRAPHICS
88
89</usermanual> */
90
91void screen_mode( Environment * _environment, int _mode ) {
92
93 ScreenMode * mode = find_screen_mode_by_id( _environment, _mode );
94
95 if ( mode ) {
96 vic2_screen_mode_enable( _environment, mode );
97
98 _environment->currentMode = mode->id;
99 _environment->currentTileMode = mode->bitmap ? 0 : 1;
100
101 cpu_store_8bit( _environment, "CURRENTMODE", _environment->currentMode );
102 cpu_store_8bit( _environment, "CURRENTTILEMODE", _environment->currentTileMode );
103
104 } else {
105 WARNING_SCREEN_MODE( _mode );
106 }
107
108}
109
110void screen_type_color_set( Environment * _environment, int _type, int _color_set ) {
111
112 if ( _type == 0 ) {
113 tilemap_enable( _environment, 0, 0, 0, 0, 0 );
114 } else {
115 bitmap_enable( _environment, 0, 0, 0 );
116 }
117
118}
void cpu_store_8bit(Environment *_environment, char *_destination, int _value)
CPU 6309: emit code to store 8 bit
Definition 6309.c:761
ScreenMode * find_screen_mode_by_id(Environment *_environment, int _id)
void bitmap_enable(Environment *_environment, int _width, int _height, int _colors)
Emit ASM implementation for BITMAP ENABLE instruction.
void screen_type_color_set(Environment *_environment, int _type, int _color_set)
void screen_mode(Environment *_environment, int _mode)
Emit ASM code for SCREEN [mode].
void tilemap_enable(Environment *_environment, int _width, int _height, int _colors, int _tile_width, int _tile_height)
Emit ASM implementation for TEXT ENABLE instruction.
int currentMode
Definition ugbc.h:2696
int currentTileMode
Definition ugbc.h:2706
int bitmap
Definition ugbc.h:1496
struct _ScreenMode ScreenMode
#define WARNING_SCREEN_MODE(v1)
Definition ugbc.h:3878
struct _Environment Environment
Structure of compilation environment.
int vic2_screen_mode_enable(Environment *_environment, ScreenMode *_screen_mode)
Definition vic2.c:930