ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
zx.h
Go to the documentation of this file.
1#ifndef __UGBC_ZX__
2#define __UGBC_ZX__
3
4/*****************************************************************************
5 * ugBASIC - an isomorphic BASIC language compiler for retrocomputers *
6 *****************************************************************************
7 * Copyright 2021-2026 Marco Spedaletti (asimov@mclink.it)
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 *----------------------------------------------------------------------------
21 * Concesso in licenza secondo i termini della Licenza Apache, versione 2.0
22 * (la "Licenza"); è proibito usare questo file se non in conformità alla
23 * Licenza. Una copia della Licenza è disponibile all'indirizzo:
24 *
25 * http://www.apache.org/licenses/LICENSE-2.0
26 *
27 * Se non richiesto dalla legislazione vigente o concordato per iscritto,
28 * il software distribuito nei termini della Licenza è distribuito
29 * "COSì COM'è", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o
30 * implicite. Consultare la Licenza per il testo specifico che regola le
31 * autorizzazioni e le limitazioni previste dalla medesima.
32 ****************************************************************************/
33
34#include "../ugbc.h"
35
36#define COLOR_BLACK 0
37#define COLOR_WHITE 7
38#define COLOR_DARK_RED 2 // RED
39#define COLOR_RED 2
40#define COLOR_CYAN 5
41#define COLOR_VIOLET 2 /* alias */
42#define COLOR_DARK_GREEN 4 // GREEN
43#define COLOR_GREEN 4
44#define COLOR_BLUE 1 /* alias */
45#define COLOR_YELLOW 6
46#define COLOR_ORANGE 10 /* alias */
47#define COLOR_BROWN 2 /* alias */
48#define COLOR_LIGHT_RED 10 /* alias */
49#define COLOR_DARK_GREY 0 /* alias */
50#define COLOR_GREY 7 /* alias */
51#define COLOR_LIGHT_GREEN 12 /* alias */
52#define COLOR_LIGHT_BLUE 13 /* alias */
53#define COLOR_LIGHT_GREY 15 /* alias */
54#define COLOR_DARK_BLUE 3 /* alias */
55#define COLOR_MAGENTA 3
56#define COLOR_PURPLE 3 /* alias */
57#define COLOR_LAVENDER 3 /* alias */
58#define COLOR_GOLD 6 /* alias */
59#define COLOR_TURQUOISE 5 /* alias */
60#define COLOR_TAN 5 /* alias */
61#define COLOR_YELLOW_GREEN 6 /* alias */
62#define COLOR_OLIVE_GREEN 4 /* alias */
63#define COLOR_PINK 2 /* alias */
64#define COLOR_PEACH 2 /* alias */
65#define COLOR_DARK_WHITE 7 // GREY
66#define COLOR_LIGHT_WHITE COLOR_WHITE
67#define COLOR_COUNT 16
68
69#define DEFAULT_PEN_COLOR COLOR_WHITE
70#define DEFAULT_PAPER_COLOR COLOR_BLACK
71
72#define PORT_COLOR_BORDER 254
73
74#define TEXT_COLUMNS_COUNT 32
75#define TEXT_ROWS_COUNT 24
76
77#define KEY_NONE 0xff
78
79#define KEY_BS 0
80#define KEY_Z 1
81#define KEY_X 2
82#define KEY_C 3
83#define KEY_V 4
84
85#define KEY_A 5
86#define KEY_S 6
87#define KEY_D 7
88#define KEY_F 8
89#define KEY_G 9
90
91#define KEY_Q 10
92#define KEY_W 11
93#define KEY_E 12
94#define KEY_R 13
95#define KEY_T 14
96
97#define KEY_1 15
98#define KEY_2 16
99#define KEY_3 17
100#define KEY_4 18
101#define KEY_5 19
102
103#define KEY_0 20
104#define KEY_9 21
105#define KEY_8 22
106#define KEY_7 23
107#define KEY_6 24
108
109#define KEY_P 25
110#define KEY_O 26
111#define KEY_I 27
112#define KEY_U 28
113#define KEY_Y 29
114
115#define KEY_RETURN 30
116#define KEY_L 31
117#define KEY_K 32
118#define KEY_J 33
119#define KEY_H 34
120
121#define KEY_SPACE 35
122
123#define KEY_M 37
124#define KEY_N 38
125#define KEY_B 39
126
127#define KEY_ASTERISK 0
128#define KEY_AT 0
129#define KEY_CLEAR 0
130#define KEY_COLON 0
131#define KEY_COMMA 0
132#define KEY_COMMODORE 0
133#define KEY_CONTROL 0
134#define KEY_CRSR_LEFT_RIGHT 0
135#define KEY_CRSR_UP_DOWN 0
136#define KEY_DELETE 0
137#define KEY_EQUAL 0
138#define KEY_F1 0
139#define KEY_F2 0
140#define KEY_F3 0
141#define KEY_F4 0
142#define KEY_F5 0
143#define KEY_F6 0
144#define KEY_F7 0
145#define KEY_F8 0
146#define KEY_HOME 0
147#define KEY_INSERT 0
148#define KEY_LEFT_ARROW 0
149#define KEY_LEFT_SHIFT 0
150#define KEY_MINUS 0
151#define KEY_PERIOD 0
152#define KEY_PLUS 0
153#define KEY_POUND 0
154#define KEY_RIGHT_SHIFT 0
155#define KEY_RUNSTOP 0
156#define KEY_SEMICOLON 0
157#define KEY_SLASH 0
158#define KEY_UP_ARROW 0
159#define KEY_BACKSLASH 0
160#define KEY_SQUARE_OPEN 0
161#define KEY_SQUARE_CLOSED 0
162#define KEY_SEMICOMMA 0
163#define KEY_QUOTE 0
164#define KEY_APIX 0
165#define KEY_DEAD 0
166#define KEY_SHIFT 0
167#define KEY_CTRL 0
168#define KEY_GRAPH 0
169#define KEY_CAPS 0
170#define KEY_CODE 0
171#define KEY_ESC 0
172#define KEY_TAB 0
173#define KEY_STOP 0
174#define KEY_BS 0
175#define KEY_SELECT 0
176#define KEY_RET 0
177#define KEY_INS 0
178#define KEY_DEL 0
179#define KEY_LEFT KEY_A
180#define KEY_UP KEY_W
181#define KEY_DOWN KEY_S
182#define KEY_RIGHT KEY_D
183#define KEY_DIVISION 0
184
185#define KEYBOARD_CONFIG_DEFAULT_SYNC 0
186
187#define INPUT_DEFAULT_SEPARATOR ','
188#define INPUT_DEFAULT_SIZE 32
189#define INPUT_DEFAULT_CURSOR 0x5f
190
191#define SCREEN_CAPABILITIES ( ( 1<<BITMAP_NATIVE ) )
192
193#define DEFAULT_PAINT_BUCKET_SIZE 512
194
195#define BANK_COUNT 1
196#define BANK_SIZE 4096
197#define BANK_BASE_ADDRESS 0
198
199#define BITMAP_MODE_STANDARD 1 // Standard Bitmap Mode 192 x 256 x 2
200#define TILEMAP_MODE_STANDARD 0 // Standard Character Mode 32 x 25 x 8
201#define BITMAP_MODE_DEFAULT BITMAP_MODE_STANDARD
202
203#define JOY_UP 0
204#define JOY_DOWN 1
205#define JOY_LEFT 2
206#define JOY_RIGHT 3
207#define JOY_FIRE 4
208
209#define JOYSTICK_CONFIG_DEFAULT_SYNC 1
210
211#define SPRITE_COUNT 0
212#define SPRITE_WIDTH 0
213#define SPRITE_HEIGHT 0
214
215#define SPRITE_X_MIN 0
216#define SPRITE_Y_MIN 0
217#define SPRITE_X_MAX 0
218#define SPRITE_Y_MAX 0
219
220#define SCREEN_SPRITE_RATIO_X 100
221#define SCREEN_SPRITE_RATIO_Y 100
222#define SCREEN_BORDER_X 0
223#define SCREEN_BORDER_Y 0
224
225#define MAX_AUDIO_CHANNELS 1
226
227#define IMAGE_WIDTH_SIZE 2
228#define IMAGE_WIDTH_OFFSET 0
229#define IMAGE_HEIGHT_SIZE 1
230#define IMAGE_HEIGHT_OFFSET 2
231
232#define DOUBLE_BUFFER_PAGE_0 0
233#define DOUBLE_BUFFER_PAGE_1 1
234
235#define DSTRING_DEFAULT_COUNT 255
236#define DSTRING_DEFAULT_SPACE 1024
237
238int zx_screen_mode_enable( Environment * _environment, ScreenMode * _screen_mode );
239
240void zx_initialization( Environment * _environment );
241void zx_finalization( Environment * _environment );
242
243void zx_color_border( Environment * _environment, char * _color );
244void zx_bitmap_enable( Environment * _environment, int _width, int _height, int _colors );
245void zx_tilemap_enable( Environment * _environment, int _width, int _height, int _colors, int _tile_width, int _tile_height );
246void zx_vscroll( Environment * _environment, int _displacement, int _overlap );
247void zx_text( Environment * _environment, char * _text, char * _text_size, int _raw );
248void zx_cls( Environment * _environment, char * _pen, char * _paper );
249void zx_cls_box( Environment * _environment, char * _x1, char * _y1, char * _w, char * _h );
250
251void zx_wait_key( Environment * _environment, int _release );
252void zx_wait_fire( Environment * _environment, int _port, int _release );
253void zx_wait_fire_semivar( Environment * _environment, char * _port, int _release );
254void zx_wait_key_or_fire( Environment * _environment, int _port, int _release );
255void zx_wait_key_or_fire_semivar( Environment * _environment, char * _port, int _release );
256void zx_key_state( Environment * _environment, char *_scancode, char * _result );
257void zx_scancode( Environment * _environment, char * _scacode );
258void zx_asciicode( Environment * _environment, char * _asciicode );
259void zx_inkey( Environment * _environment, char * _key );
260void zx_key_pressed( Environment * _environment, char *_scancode, char * _result );
261void zx_put_key( Environment * _environment, char *_string, char * _size );
262
263void zx_scanshift( Environment * _environment, char * _shifts );
264void zx_keyshift( Environment * _environment, char * _shifts );
265void zx_clear_key( Environment * _environment );
266void zx_back( Environment * _environment );
267void zx_scroll( Environment * _environment, int _dx, int _dy );
268void zx_screen_rows( Environment * _environment, char * _rows );
269void zx_screen_columns( Environment * _environment, char * _columns );
270
271Variable * zx_get_raster_line( Environment * _environment );
272
273#define JOY_COUNT 0
274
275int zx_image_size( Environment * _environment, int _width, int _height, int _mode );
276Variable * zx_image_converter( Environment * _environment, char * _data, int _width, int _height, int _depth, int _offset_x, int _offset_y, int _frame_width, int _frame_height, int _mode, int _transparent_color, int _flags );
277void zx_put_image( Environment * _environment, Resource * _image, char * _x, char * _y, char * _frame, char * _sequence, int _frame_size, int _frame_count, char * _flags );
278void zx_blit_image( Environment * _environment, char * _sources[], int _source_count, char * _blit, char * _x, char * _y, char * _frame, char * _sequence, int _frame_size, int _frame_count, int _flags );
279Variable * zx_new_image( Environment * _environment, int _width, int _height, int _mode );
280Variable * zx_new_images( Environment * _environment, int _frames, int _width, int _height, int _mode );
281Variable * zx_new_sequence( Environment * _environment, int _sequences, int _frames, int _width, int _height, int _mode );
282void zx_get_image( Environment * _environment, char * _image, char * _x, char * _y, char * _frame, char * _sequence, int _frame_size, int _frame_count, int _palette );
283
284void zx_sprite_data_from( Environment * _environment, char * _sprite, char * _address );
285void zx_sprite_data_set( Environment * _environment, char * _sprite, char * _address );
286void zx_sprite_enable( Environment * _environment, char *_sprite );
287void zx_sprite_disable( Environment * _environment, char * _sprite );
288void zx_sprite_at( Environment * _environment, char * _sprite, char * _x, char * _y );
289void zx_sprite_expand_vertical( Environment * _environment, char * _sprite );
290void zx_sprite_expand_horizontal( Environment * _environment, char * _sprite );
291void zx_sprite_compress_vertical( Environment * _environment, char * _sprite );
292void zx_sprite_compress_horizontal( Environment * _environment, char * _sprite );
293void zx_sprite_multicolor( Environment * _environment, char * _sprite );
294void zx_sprite_monocolor( Environment * _environment, char * _sprite );
295void zx_sprite_color( Environment * _environment, char * _sprite, char * _color );
296void zx_sprite_priority( Environment * _environment, char * _sprite, char * _priority );
297void zx_vertical_scroll( Environment * _environment, char * _displacement );
298void zx_horizontal_scroll( Environment * _environment, char * _displacement );
299void zx_busy_wait( Environment * _environment, char * _timing );
300
301void zx_put_tile( Environment * _environment, char * _image, char * _x, char * _y );
302void zx_put_tiles( Environment * _environment, char * _image, char * _x, char * _y, char *_w, char *_h );
303void zx_move_tiles( Environment * _environment, char * _image, char * _x, char * _y );
304void zx_use_tileset( Environment * _environment, char * _tileset );
305void zx_tile_at( Environment * _environment, char * _x, char * _y, char * _result );
306
307void zx_slice_image( Environment * _environment, char * _image, char * _frame, char * _sequence, int _frame_size, int _frame_count, char * _destination );
308void zx_sys_call( Environment * _environment, int _destination );
309int zx_palette_extract( Environment * _environment, char * _data, int _width, int _height, int _depth, int _flags, RGBi * _palette );
310void zx_hscroll_line( Environment * _environment, int _direction, int _overlap );
311void zx_hscroll_screen( Environment * _environment, int _direction, int _overlap );
312
313void zx_timer_set_status_on( Environment * _environment, char * _timer );
314void zx_timer_set_status_off( Environment * _environment, char * _timer );
315void zx_timer_set_counter( Environment * _environment, char * _timer, char * _counter );
316void zx_timer_set_init( Environment * _environment, char * _timer, char * _init );
317void zx_timer_set_address( Environment * _environment, char * _timer, char * _address );
318void zx_calculate_sequence_frame_offset( Environment * _environment, char * _offset, char * _sequence, char * _frame, int _frame_size, int _frame_count );
319
320void zx_joystick_semivars( Environment * _environment, char * _joystick, char * _result );
321void zx_joystick( Environment * _environment, int _joystick, char * _result );
322
323void zx_wait_vbl( Environment * _environment, char * _raster_line );
324
325void zx_set_pitch( Environment * _environment, int _channel, int _pitch, int _duration );
326void zx_set_note( Environment * _environment, int _channel, int _note, int _duration );
327
328void zx_set_pitch_vars( Environment * _environment, char * _channel, char * _pitch, char * _duration );
329void zx_set_note_vars( Environment * _environment, char * _channel, char * _note, char * _duration );
330
331#endif
struct _ScreenMode ScreenMode
struct _Resource Resource
struct _RGBi RGBi
Structure to store color components (red, green and blue).
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
void zx_slice_image(Environment *_environment, char *_image, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_destination)
Definition zx.c:1510
void zx_sprite_enable(Environment *_environment, char *_sprite)
void zx_put_tiles(Environment *_environment, char *_image, char *_x, char *_y, char *_w, char *_h)
Definition zx.c:1444
void zx_horizontal_scroll(Environment *_environment, char *_displacement)
void zx_keyshift(Environment *_environment, char *_shifts)
Definition zx.c:380
Variable * zx_new_images(Environment *_environment, int _frames, int _width, int _height, int _mode)
Definition zx.c:1288
void zx_sprite_expand_vertical(Environment *_environment, char *_sprite)
void zx_sprite_color(Environment *_environment, char *_sprite, char *_color)
void zx_initialization(Environment *_environment)
Definition zx.c:424
void zx_sprite_priority(Environment *_environment, char *_sprite, char *_priority)
void zx_cls(Environment *_environment, char *_pen, char *_paper)
Definition zx.c:171
void zx_timer_set_address(Environment *_environment, char *_timer, char *_address)
Definition zx.c:1637
void zx_move_tiles(Environment *_environment, char *_image, char *_x, char *_y)
Definition zx.c:1402
void zx_set_note_vars(Environment *_environment, char *_channel, char *_note, char *_duration)
Definition zx.c:1756
void zx_sprite_at(Environment *_environment, char *_sprite, char *_x, char *_y)
void zx_sprite_data_set(Environment *_environment, char *_sprite, char *_address)
void zx_timer_set_init(Environment *_environment, char *_timer, char *_init)
Definition zx.c:1615
void zx_clear_key(Environment *_environment)
Definition zx.c:391
void zx_wait_fire_semivar(Environment *_environment, char *_port, int _release)
Definition zx.c:263
void zx_screen_rows(Environment *_environment, char *_rows)
Definition zx.c:576
void zx_joystick_semivars(Environment *_environment, char *_joystick, char *_result)
Definition zx.c:284
void zx_sprite_data_from(Environment *_environment, char *_sprite, char *_address)
Variable * zx_new_sequence(Environment *_environment, int _sequences, int _frames, int _width, int _height, int _mode)
Definition zx.c:1322
void zx_busy_wait(Environment *_environment, char *_timing)
void zx_bitmap_enable(Environment *_environment, int _width, int _height, int _colors)
Definition zx.c:620
void zx_sprite_compress_horizontal(Environment *_environment, char *_sprite)
int zx_screen_mode_enable(Environment *_environment, ScreenMode *_screen_mode)
Definition zx.c:604
void zx_sprite_expand_horizontal(Environment *_environment, char *_sprite)
void zx_timer_set_status_off(Environment *_environment, char *_timer)
Definition zx.c:1576
void zx_wait_key_or_fire(Environment *_environment, int _port, int _release)
Definition zx.c:228
void zx_screen_columns(Environment *_environment, char *_columns)
Definition zx.c:580
void zx_joystick(Environment *_environment, int _joystick, char *_result)
Definition zx.c:303
void zx_set_note(Environment *_environment, int _channel, int _note, int _duration)
Definition zx.c:1730
void zx_sys_call(Environment *_environment, int _destination)
Definition zx.c:1514
void zx_asciicode(Environment *_environment, char *_asciicode)
Definition zx.c:348
void zx_back(Environment *_environment)
Definition zx.c:630
void zx_set_pitch(Environment *_environment, int _channel, int _pitch, int _duration)
Definition zx.c:1720
void zx_scanshift(Environment *_environment, char *_shifts)
Definition zx.c:374
void zx_hscroll_line(Environment *_environment, int _direction, int _overlap)
Definition zx.c:1534
void zx_sprite_compress_vertical(Environment *_environment, char *_sprite)
Variable * zx_new_image(Environment *_environment, int _width, int _height, int _mode)
Definition zx.c:1262
void zx_tilemap_enable(Environment *_environment, int _width, int _height, int _colors, int _tile_width, int _tile_height)
Definition zx.c:626
Variable * zx_image_converter(Environment *_environment, char *_data, int _width, int _height, int _depth, int _offset_x, int _offset_y, int _frame_width, int _frame_height, int _mode, int _transparent_color, int _flags)
Definition zx.c:938
int zx_palette_extract(Environment *_environment, char *_data, int _width, int _height, int _depth, int _flags, RGBi *_palette)
Definition zx.c:1520
void zx_inkey(Environment *_environment, char *_key)
Definition zx.c:203
void zx_use_tileset(Environment *_environment, char *_tileset)
Definition zx.c:1489
void zx_text(Environment *_environment, char *_text, char *_text_size, int _raw)
Definition zx.c:147
void zx_put_key(Environment *_environment, char *_string, char *_size)
Definition zx.c:1660
void zx_vscroll(Environment *_environment, int _displacement, int _overlap)
Definition zx.c:135
void zx_vertical_scroll(Environment *_environment, char *_displacement)
void zx_put_tile(Environment *_environment, char *_image, char *_x, char *_y)
Definition zx.c:1381
void zx_timer_set_status_on(Environment *_environment, char *_timer)
Definition zx.c:1560
void zx_key_pressed(Environment *_environment, char *_scancode, char *_result)
Definition zx.c:359
void zx_finalization(Environment *_environment)
Definition zx.c:554
void zx_tile_at(Environment *_environment, char *_x, char *_y, char *_result)
Definition zx.c:1472
void zx_get_image(Environment *_environment, char *_image, char *_x, char *_y, char *_frame, char *_sequence, int _frame_size, int _frame_count, int _palette)
Definition zx.c:1357
void zx_sprite_monocolor(Environment *_environment, char *_sprite)
void zx_blit_image(Environment *_environment, char *_sources[], int _source_count, char *_blit, char *_x, char *_y, char *_frame, char *_sequence, int _frame_size, int _frame_count, int _flags)
Definition zx.c:1208
void zx_color_border(Environment *_environment, char *_color)
Definition zx.c:127
void zx_wait_key(Environment *_environment, int _release)
Definition zx.c:214
void zx_calculate_sequence_frame_offset(Environment *_environment, char *_offset, char *_sequence, char *_frame, int _frame_size, int _frame_count)
Definition zx.c:1035
void zx_wait_vbl(Environment *_environment, char *_raster_line)
Definition zx.c:1672
void zx_wait_fire(Environment *_environment, int _port, int _release)
Definition zx.c:240
void zx_hscroll_screen(Environment *_environment, int _direction, int _overlap)
Definition zx.c:1549
int zx_image_size(Environment *_environment, int _width, int _height, int _mode)
Definition zx.c:85
Variable * zx_get_raster_line(Environment *_environment)
Definition zx.c:1500
void zx_cls_box(Environment *_environment, char *_x1, char *_y1, char *_w, char *_h)
Definition zx.c:187
void zx_timer_set_counter(Environment *_environment, char *_timer, char *_counter)
Definition zx.c:1593
void zx_sprite_disable(Environment *_environment, char *_sprite)
void zx_sprite_multicolor(Environment *_environment, char *_sprite)
void zx_put_image(Environment *_environment, Resource *_image, char *_x, char *_y, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_flags)
Definition zx.c:1177
void zx_key_state(Environment *_environment, char *_scancode, char *_result)
Definition zx.c:322
void zx_wait_key_or_fire_semivar(Environment *_environment, char *_port, int _release)
Definition zx.c:234
void zx_scancode(Environment *_environment, char *_scacode)
Definition zx.c:337
void zx_scroll(Environment *_environment, int _dx, int _dy)
Definition zx.c:1377
void zx_set_pitch_vars(Environment *_environment, char *_channel, char *_pitch, char *_duration)
Definition zx.c:1736