ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
tms9918.h
Go to the documentation of this file.
1#ifndef __UGBC_TMS9918__
2#define __UGBC_TMS9918__
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 VDP_R0 0x80
37#define VDP_R1 0x81
38#define VDP_RNAME 0x82
39#define VDP_RCOLORTABLE 0x83
40#define VDP_RPATTERN 0x84
41#define VDP_RSPRITEA 0x85
42#define VDP_RSPRITEP 0x86
43#define VDP_RCOLOR 0x87
44
45#define WVDP( r, v ) \
46 outline1("LD A, $%2.2x", ( r & 0xff ) ); \
47 outline0("LD E, A" ); \
48 outline1("LD A, $%2.2x", ( v & 0xff ) ); \
49 outline0("CALL VDPSETREG" );
50#define WVDP_R0( v ) WVDP( VDP_R0, v )
51#define WVDP_R1( v ) WVDP( VDP_R1, v )
52#define WVDP_RNAME( v ) WVDP( VDP_RNAME, v )
53#define WVDP_RCOLORTABLE( v ) WVDP( VDP_RCOLORTABLE, v )
54#define WVDP_RPATTERN( v ) WVDP( VDP_RPATTERN, v )
55#define WVDP_RSPRITEA( v ) WVDP( VDP_RSPRITEA, v )
56#define WVDP_RSPRITEP( v ) WVDP( VDP_RSPRITEP, v )
57#define WVDP_RCOLOR( v ) WVDP( VDP_RCOLOR, v )
58
59#define COLOR_TRANSPARENT 0x00
60#define COLOR_BLACK 0x01
61#define COLOR_DARK_WHITE 0x0e // GREY
62#define COLOR_WHITE 0x0f
63#define COLOR_LIGHT_WHITE COLOR_WHITE
64#define COLOR_DARK_RED 0x06 // BROWN
65#define COLOR_RED 0x08
66#define COLOR_LIGHT_RED 0x09
67#define COLOR_CYAN 0x07
68#define COLOR_VIOLET 0x0d
69#define COLOR_DARK_GREEN 0x02 // GREEN
70#define COLOR_GREEN 0x02
71#define COLOR_LIGHT_GREEN 0x03
72#define COLOR_DARK_BLUE 0x04
73#define COLOR_BLUE 0x07
74#define COLOR_LIGHT_BLUE 0x05
75#define COLOR_YELLOW 0x0b
76#define COLOR_ORANGE 0x09
77#define COLOR_BROWN 0x06
78#define COLOR_DARK_GREY 0x0e
79#define COLOR_GREY 0x0e
80#define COLOR_LIGHT_GREY 0x0e
81#define COLOR_MAGENTA 0x0d
82#define COLOR_PURPLE COLOR_VIOLET
83#define COLOR_LAVENDER COLOR_VIOLET
84#define COLOR_GOLD 0x0a
85#define COLOR_TURQUOISE COLOR_LIGHT_BLUE
86#define COLOR_TAN COLOR_BROWN
87#define COLOR_YELLOW_GREEN 0x03
88#define COLOR_OLIVE_GREEN 0x0c
89#define COLOR_PINK COLOR_LIGHT_RED
90#define COLOR_PEACH COLOR_PINK
91#define COLOR_COUNT 16
92
93#define DEFAULT_PEN_COLOR COLOR_WHITE
94#define DEFAULT_PAPER_COLOR COLOR_BLACK
95
96#define TEXT_COLUMNS_COUNT 40
97#define TEXT_ROWS_COUNT 25
98
99#define TILEMAP_MODE_STANDARD 0 // Text Mode
100#define TILEMAP_MODE_GRAPHIC1 1 // Graphics I Mode
101#define BITMAP_MODE_GRAPHIC2 2 // Graphics II Mode
102#define BITMAP_MODE_MULTICOLOR 3 // Multicolor Mode
103#define BITMAP_MODE_STANDARD BITMAP_MODE_GRAPHIC2
104
105#define BITMAP_MODE_DEFAULT BITMAP_MODE_GRAPHIC2
106
107#define SPRITE_COUNT 32
108#define SPRITE_WIDTH 8
109#define SPRITE_HEIGHT 8
110#define SPRITE_X_MIN 0
111#define SPRITE_Y_MIN 0
112#define SPRITE_X_MAX 264
113#define SPRITE_Y_MAX 200
114
115#define SCREEN_SPRITE_RATIO_X 100
116#define SCREEN_SPRITE_RATIO_Y 100
117#define SCREEN_BORDER_X 0
118#define SCREEN_BORDER_Y 0
119
120#define IMAGE_WIDTH_SIZE 2
121#define IMAGE_WIDTH_OFFSET 0
122#define IMAGE_HEIGHT_SIZE 1
123#define IMAGE_HEIGHT_OFFSET 2
124
125#define DOUBLE_BUFFER_PAGE_0 0
126#define DOUBLE_BUFFER_PAGE_1 1
127
128// #define TILES_PADDING 8
129
130int tms9918_screen_mode_enable( Environment * _environment, ScreenMode * _screen_mode );
131
132void tms9918_initialization( Environment * _environment );
133void tms9918_finalization( Environment * _environment );
134
135void tms9918_back( Environment * _environment );
136void tms9918_background_color( Environment * _environment, int _index, int _background_color );
137void tms9918_background_color_vars( Environment * _environment, char * _index, char * _background_color );
138void tms9918_background_color_semivars( Environment * _environment, int _index, char * _background_color );
139void tms9918_colors_vars( Environment * _environment, char * _foreground_color, char * _background_color );
140void tms9918_background_color_get_vars( Environment * _environment, char * _index, char * _background_color );
141void tms9918_border_color( Environment * _environment, char * _border_color );
142Variable * tms9918_collision( Environment * _environment, char * _sprite );
143void tms9918_hit( Environment * _environment, char * _sprite_mask, char * _result );
144void tms9918_next_raster( Environment * _environment );
145void tms9918_next_raster_at( Environment * _environment, char * _label, char * _positionlo, char * _positionhi );
146void tms9918_raster_at( Environment * _environment, char * _label, char * _positionlo, char * _positionhi );
147void tms9918_sprite_common_color( Environment * _environment, char * _index, char * _common_color );
148void tms9918_bitmap_enable( Environment * _environment, int _width, int _height, int _colors );
149void tms9918_bitmap_disable( Environment * _environment );
150void tms9918_bitmap_at( Environment * _environment, char * _address );
151void tms9918_colormap_at( Environment * _environment, char * _address );
152void tms9918_textmap_at( Environment * _environment, char * _address );
153void tms9918_tiles_at( Environment * _environment, char * _address );
154void tms9918_tilemap_enable( Environment * _environment, int _width, int _height, int _colors, int _tile_width, int _tile_height );
155
156void tms9918_bank_select( Environment * _environment, int _bank );
157void tms9918_screen_on( Environment * _environment );
158void tms9918_screen_off( Environment * _environment );
159void tms9918_screen_rows( Environment * _environment, char * _rows );
160void tms9918_screen_columns( Environment * _environment, char * _columns );
161
162void tms9918_sprite_data_from( Environment * _environment, char * _sprite, char * _image );
163void tms9918_sprite_data_set( Environment * _environment, char * _sprite, char * _image );
164void tms9918_sprite_enable( Environment * _environment, char *_sprite );
165void tms9918_sprite_disable( Environment * _environment, char * _sprite );
166void tms9918_sprite_at( Environment * _environment, char * _sprite, char * _x, char * _y );
167void tms9918_sprite_expand_vertical( Environment * _environment, char * _sprite );
168void tms9918_sprite_expand_horizontal( Environment * _environment, char * _sprite );
169void tms9918_sprite_compress_vertical( Environment * _environment, char * _sprite );
170void tms9918_sprite_compress_horizontal( Environment * _environment, char * _sprite );
171void tms9918_sprite_multicolor( Environment * _environment, char * _sprite );
172void tms9918_sprite_monocolor( Environment * _environment, char * _sprite );
173void tms9918_sprite_color( Environment * _environment, char * _sprite, char * _color );
174void tms9918_sprite_priority( Environment * _environment, char * _sprite, char * _priority );
175void tms9918_vertical_scroll( Environment * _environment, char * _displacement );
176void tms9918_horizontal_scroll( Environment * _environment, char * _displacement );
177void tms9918_busy_wait( Environment * _environment, char * _timing );
178
179void tms9918_tiles_get( Environment * _environment, char * _result );
180void tms9918_get_width( Environment * _environment, char * _result );
181void tms9918_get_height( Environment * _environment, char * _result );
182
183void tms9918_pset_int( Environment * _environment, int _x, int _y, int *_c );
184void tms9918_pset_vars( Environment * _environment, char *_x, char *_y, char *_c );
185void tms9918_pget_color_vars( Environment * _environment, char *_x, char *_y, char * _result );
186void tms9918_cls( Environment * _environment );
187void tms9918_cls_box( Environment * _environment, char * _x1, char * _y1, char * _w, char * _h );
188void tms9918_scroll_text( Environment * _environment, int _direction, int _overlap );
189void tms9918_hscroll_line( Environment * _environment, int _direction, int _overlap );
190void tms9918_hscroll_screen( Environment * _environment, int _direction, int _overlap );
191void tms9918_text( Environment * _environment, char * _text, char * _text_size, int _raw );
192void tms9918_cline( Environment * _environment, char * _characters );
193void tms9918_scroll( Environment * _environment, int _dx, int _dy );
194
195void tms9918_calculate_sequence_frame_offset( Environment * _environment, char * _offset, char * _sequence, char * _frame, int _frame_size, int _frame_count );
196
198
199int tms9918_image_size( Environment * _environment, int _width, int _height, int _mode );
200Variable * tms9918_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 );
201Variable * tms9918_sprite_converter( Environment * _environment, char * _data, int _width, int _height, int _depth, RGBi * _color, int _x_slot, int _y_slot );
202void tms9918_put_image( Environment * _environment, Resource * _image, char * _x, char * _y, char * _frame, char * _sequence, int _frame_size, int _frame_count, char * _flags );
203void tms9918_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 );
204void tms9918_wait_vbl( Environment * _environment );
205Variable * tms9918_new_image( Environment * _environment, int _width, int _height, int _mode );
206Variable * tms9918_new_images( Environment * _environment, int _frames, int _width, int _height, int _mode );
207Variable * tms9918_new_sequence( Environment * _environment, int _sequences, int _frames, int _width, int _height, int _mode );
208void tms9918_get_image( Environment * _environment, char * _image, char * _x, char * _y, char * _frame, char * _sequence, int _frame_size, int _frame_count, int _palette );
209
210void tms9918_put_tile( Environment * _environment, char * _image, char * _x, char * _y );
211void tms9918_put_tiles( Environment * _environment, char * _image, char * _x, char * _y, char *_w, char *_h );
212void tms9918_move_tiles( Environment * _environment, char * _image, char * _x, char * _y );
213void tms9918_use_tileset( Environment * _environment, char * _tileset );
214void tms9918_tile_at( Environment * _environment, char * _x, char * _y, char *_result );
215
216void tms9918_move_memory_video( Environment * _environment, char * _from, char * _to, char * _size );
217void tms9918_move_video_memory( Environment * _environment, char * _from, char * _to, char * _size );
218void tms9918_move_video_video( Environment * _environment, char * _from, char * _to, char * _size );
219
220typedef void (*Tms9918SliceImageFunction)(Environment *, char *, char *, char *, int, int, char *);
221
222void tms9918_slice_image_copy( Environment * _environment, char * _image, char * _frame, char * _sequence, int _frame_size, int _frame_count, char * _destination );
223void tms9918_slice_image_extract( Environment * _environment, char * _image, char * _frame, char * _sequence, int _frame_size, int _frame_count, char * _destination );
224int tms9918_palette_extract( Environment * _environment, char * _data, int _width, int _height, int _depth, int _flags, RGBi * _palette );
225void tms9918_flip_image( Environment * _environment, Resource * _image, char * _frame, char * _sequence, int _frame_size, int _frame_count, char * _direction );
226
227void tms9918_screen( Environment * _environment, char * _x, char * _y, char * _c );
228
229#endif
void(* Tms9918SliceImageFunction)(Environment *, char *, char *, char *, int, int, char *)
Definition cga.h:202
void tms9918_cline(Environment *_environment, char *_characters)
Definition tms9918.c:1741
void tms9918_finalization(Environment *_environment)
Definition tms9918.c:1684
void tms9918_calculate_sequence_frame_offset(Environment *_environment, char *_offset, char *_sequence, char *_frame, int _frame_size, int _frame_count)
Definition tms9918.c:2752
Variable * tms9918_new_images(Environment *_environment, int _frames, int _width, int _height, int _mode)
Definition tms9918.c:2377
void tms9918_sprite_multicolor(Environment *_environment, char *_sprite)
Definition tms9918.c:1286
void tms9918_hit(Environment *_environment, char *_sprite_mask, char *_result)
TMS9918: emit code to check for collision
Definition tms9918.c:328
void tms9918_background_color(Environment *_environment, int _index, int _background_color)
TMS9918: emit code to change background color
Definition tms9918.c:384
Variable * tms9918_new_sequence(Environment *_environment, int _sequences, int _frames, int _width, int _height, int _mode)
Definition tms9918.c:2411
void tms9918_put_tile(Environment *_environment, char *_image, char *_x, char *_y)
Definition tms9918.c:2488
void tms9918_background_color_vars(Environment *_environment, char *_index, char *_background_color)
TMS9918: emit code to change background color
Definition tms9918.c:402
Variable * tms9918_collision(Environment *_environment, char *_sprite)
TMS9918: emit code to check for collision
Definition tms9918.c:298
void tms9918_background_color_get_vars(Environment *_environment, char *_index, char *_background_color)
TMS9918: emit code to retrieve background color
Definition tms9918.c:459
void tms9918_bitmap_disable(Environment *_environment)
Definition tms9918.c:948
void tms9918_sprite_common_color(Environment *_environment, char *_index, char *_common_color)
TMS9918: emit code to change common sprite's color
Definition tms9918.c:482
void tms9918_pset_int(Environment *_environment, int _x, int _y, int *_c)
Definition tms9918.c:993
void tms9918_use_tileset(Environment *_environment, char *_tileset)
Definition tms9918.c:2612
void tms9918_text(Environment *_environment, char *_text, char *_text_size, int _raw)
Definition tms9918.c:1425
void tms9918_screen(Environment *_environment, char *_x, char *_y, char *_c)
Definition tms9918.c:2824
void tms9918_vertical_scroll(Environment *_environment, char *_displacement)
Definition tms9918.c:1321
void tms9918_get_image(Environment *_environment, char *_image, char *_x, char *_y, char *_frame, char *_sequence, int _frame_size, int _frame_count, int _palette)
Definition tms9918.c:2446
void tms9918_tiles_at(Environment *_environment, char *_address)
Definition tms9918.c:1317
void tms9918_hscroll_line(Environment *_environment, int _direction, int _overlap)
Definition tms9918.c:1701
void tms9918_move_video_memory(Environment *_environment, char *_from, char *_to, char *_size)
Definition tms9918.c:2646
Variable * tms9918_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 tms9918.c:2092
void tms9918_next_raster_at(Environment *_environment, char *_label, char *_positionlo, char *_positionhi)
TMS9918: emit code to wait for next raster irq at different position
Definition tms9918.c:565
void tms9918_move_video_video(Environment *_environment, char *_from, char *_to, char *_size)
void tms9918_get_width(Environment *_environment, char *_result)
Definition tms9918.c:1344
void tms9918_slice_image_extract(Environment *_environment, char *_image, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_destination)
Definition tms9918.c:2712
void tms9918_bitmap_enable(Environment *_environment, int _width, int _height, int _colors)
Definition tms9918.c:926
void tms9918_scroll_text(Environment *_environment, int _direction, int _overlap)
Definition tms9918.c:1405
void tms9918_border_color(Environment *_environment, char *_border_color)
TMS9918: emit code to change border color
Definition tms9918.c:343
void tms9918_sprite_expand_vertical(Environment *_environment, char *_sprite)
Definition tms9918.c:1230
void tms9918_sprite_compress_horizontal(Environment *_environment, char *_sprite)
Definition tms9918.c:1272
void tms9918_pset_vars(Environment *_environment, char *_x, char *_y, char *_c)
Definition tms9918.c:1021
void tms9918_tile_at(Environment *_environment, char *_x, char *_y, char *_result)
Definition tms9918.c:2591
Variable * tms9918_sprite_converter(Environment *_environment, char *_data, int _width, int _height, int _depth, RGBi *_color, int _x_slot, int _y_slot)
Definition tms9918.c:1919
void tms9918_get_height(Environment *_environment, char *_result)
Definition tms9918.c:1358
void tms9918_put_tiles(Environment *_environment, char *_image, char *_x, char *_y, char *_w, char *_h)
Definition tms9918.c:2559
void tms9918_pget_color_vars(Environment *_environment, char *_x, char *_y, char *_result)
Definition tms9918.c:1054
void tms9918_screen_rows(Environment *_environment, char *_rows)
Definition tms9918.c:1132
void tms9918_move_tiles(Environment *_environment, char *_image, char *_x, char *_y)
Definition tms9918.c:2513
void tms9918_horizontal_scroll(Environment *_environment, char *_displacement)
Definition tms9918.c:1325
void tms9918_move_memory_video(Environment *_environment, char *_from, char *_to, char *_size)
Definition tms9918.c:2637
void tms9918_tiles_get(Environment *_environment, char *_result)
Definition tms9918.c:1351
void tms9918_bitmap_at(Environment *_environment, char *_address)
Definition tms9918.c:981
void tms9918_cls(Environment *_environment)
Definition tms9918.c:1365
void tms9918_raster_at(Environment *_environment, char *_label, char *_positionlo, char *_positionhi)
TMS9918: emit code to set raster irq
Definition tms9918.c:534
void tms9918_sprite_data_from(Environment *_environment, char *_sprite, char *_image)
Definition tms9918.c:1158
void tms9918_colormap_at(Environment *_environment, char *_address)
Definition tms9918.c:985
void tms9918_sprite_color(Environment *_environment, char *_sprite, char *_color)
Definition tms9918.c:1294
void tms9918_cls_box(Environment *_environment, char *_x1, char *_y1, char *_w, char *_h)
Definition tms9918.c:1385
void tms9918_screen_on(Environment *_environment)
Definition tms9918.c:1080
int tms9918_palette_extract(Environment *_environment, char *_data, int _width, int _height, int _depth, int _flags, RGBi *_palette)
Definition tms9918.c:2738
Variable * tms9918_get_raster_line(Environment *_environment)
Definition tms9918.c:2627
void tms9918_flip_image(Environment *_environment, Resource *_image, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_direction)
Definition tms9918.c:2803
void tms9918_bank_select(Environment *_environment, int _bank)
Definition tms9918.c:569
void tms9918_sprite_priority(Environment *_environment, char *_sprite, char *_priority)
Definition tms9918.c:1313
void tms9918_background_color_semivars(Environment *_environment, int _index, char *_background_color)
TMS9918: emit code to change background color
Definition tms9918.c:432
void tms9918_next_raster(Environment *_environment)
TMS9918: emit code to wait for next raster irq
Definition tms9918.c:548
void tms9918_scroll(Environment *_environment, int _dx, int _dy)
Definition tms9918.c:2472
Variable * tms9918_new_image(Environment *_environment, int _width, int _height, int _mode)
Definition tms9918.c:2351
int tms9918_image_size(Environment *_environment, int _width, int _height, int _mode)
Definition tms9918.c:1779
void tms9918_sprite_disable(Environment *_environment, char *_sprite)
Definition tms9918.c:1192
void tms9918_screen_off(Environment *_environment)
Definition tms9918.c:1106
void tms9918_sprite_monocolor(Environment *_environment, char *_sprite)
Definition tms9918.c:1290
void tms9918_screen_columns(Environment *_environment, char *_columns)
Definition tms9918.c:1136
void tms9918_busy_wait(Environment *_environment, char *_timing)
Definition tms9918.c:1329
void tms9918_colors_vars(Environment *_environment, char *_foreground_color, char *_background_color)
Definition tms9918.c:2655
void tms9918_sprite_at(Environment *_environment, char *_sprite, char *_x, char *_y)
Definition tms9918.c:1208
void tms9918_back(Environment *_environment)
Definition tms9918.c:1729
int tms9918_screen_mode_enable(Environment *_environment, ScreenMode *_screen_mode)
Definition tms9918.c:596
void tms9918_sprite_expand_horizontal(Environment *_environment, char *_sprite)
Definition tms9918.c:1244
void tms9918_slice_image_copy(Environment *_environment, char *_image, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_destination)
Definition tms9918.c:2692
void tms9918_put_image(Environment *_environment, Resource *_image, char *_x, char *_y, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_flags)
Definition tms9918.c:2313
void tms9918_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 tms9918.c:2254
void tms9918_initialization(Environment *_environment)
Definition tms9918.c:1491
void tms9918_sprite_data_set(Environment *_environment, char *_sprite, char *_image)
Definition tms9918.c:1140
void tms9918_hscroll_screen(Environment *_environment, int _direction, int _overlap)
Definition tms9918.c:1716
void tms9918_textmap_at(Environment *_environment, char *_address)
Definition tms9918.c:989
void tms9918_tilemap_enable(Environment *_environment, int _width, int _height, int _colors, int _tile_width, int _tile_height)
Definition tms9918.c:954
void tms9918_wait_vbl(Environment *_environment)
Definition tms9918.c:2342
void tms9918_sprite_enable(Environment *_environment, char *_sprite)
Definition tms9918.c:1176
void tms9918_sprite_compress_vertical(Environment *_environment, char *_sprite)
Definition tms9918.c:1258
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.