40static RGBi SYSTEM_PALETTE_ALTERNATE[][4] = {
42 { 0x00, 0xcc, 0x55, 0xff, 0,
"GREEN" },
43 { 0xee, 0xee, 0x77, 0xff, 1,
"YELLOW" },
44 { 0x00, 0x00, 0xaa, 0xff, 2,
"BLUE" },
45 { 0x88, 0x00, 0x00, 0xff, 3,
"RED" }
49 { 0xf0, 0xf0, 0xf0, 0xff, 0,
"BUFF" },
50 { 0xaa, 0xff, 0xe6, 0xff, 1,
"CYAN" },
51 { 0xcc, 0x44, 0xcc, 0xff, 2,
"MAGENTA" },
52 { 0xa1, 0x68, 0x3c, 0xff, 3,
"ORANGE" }
56static RGBi * SYSTEM_PALETTE = &SYSTEM_PALETTE_ALTERNATE[1][0];
58static RGBi * commonPalette;
110 outline1(
"LD A, (%s)", _border_color );
144 outline1(
"LD A, (%s)", _background_color );
230#define SET_VIDEOAT_400 SAM_F0_CLR; SAM_F1_CLR; SAM_F2_CLR; SAM_F3_CLR; SAM_F4_CLR; SAM_F5_CLR; SAM_F6_CLR; SAM_F1_SET;
231#define SET_VIDEOAT_600 SAM_F0_CLR; SAM_F1_CLR; SAM_F2_CLR; SAM_F3_CLR; SAM_F4_CLR; SAM_F5_CLR; SAM_F6_CLR; SAM_F0_SET; SAM_F1_SET;
232#define SET_VIDEOAT_C00 SAM_F0_CLR; SAM_F1_CLR; SAM_F2_CLR; SAM_F3_CLR; SAM_F4_CLR; SAM_F5_CLR; SAM_F6_CLR; SAM_F1_SET; SAM_F2_SET;
304 switch( _screen_mode->
id ) {
447 outline1(
"LD A, 0x%2.2x", ( _y & 0xff ) );
449 outline1(
"LD A, 0x%2.2x", ( _x & 0xff ) );
452 outline1(
"LD A, 0x%2.2x", ( *_c & 0xff ) );
663 deploy( clsText, src_hw_6847z_cls_text_asm );
666 deploy( clsGraphic, src_hw_6847z_cls_graphic_asm );
695 deploy( textEncodedAt, src_hw_6847z_text_at_asm );
703 deploy( clsText, src_hw_6847z_cls_text_asm );
705 deploy( textEncodedAtTextRaw, src_hw_6847z_text_at_text_raw_asm );
715 deploy( clsText, src_hw_6847z_cls_text_asm );
717 deploy( textEncodedAtText, src_hw_6847z_text_at_text_asm );
732 deploy( c6847startup, src_hw_6847z_startup_asm );
836 deploy( clsText, src_hw_6847z_cls_text_asm );
844 copperList = copperList->
next;
915 return 3 + ( ( _width >> 2 ) * _height );
923static int calculate_images_size(
Environment * _environment,
int _frames,
int _width,
int _height,
int _mode ) {
929 return 3 + ( 3 + ( ( _width >> 2 ) * _height ) ) * _frames;
937static int calculate_sequence_size(
Environment * _environment,
int _sequences,
int _frames,
int _width,
int _height,
int _mode ) {
943 return 3 + ( ( 3 + ( ( _width >> 2 ) * _height ) ) * _frames ) * _sequences;
951static Variable * c6847z_image_converter_multicolor_mode_standard(
Environment * _environment,
char * _source,
int _width,
int _height,
int _depth,
int _offset_x,
int _offset_y,
int _frame_width,
int _frame_height,
int _transparent_color,
int _flags ) {
953 RGBi white = { 0xff, 0xff, 0xff, 0xff };
954 RGBi black = { 0x00, 0x00, 0x00, 0x00 };
957 (void)!_transparent_color;
963 _width = ( ( ( _width - 1 ) / 8 ) - 1 ) * 8;
965 if ( _frame_width % 8 ) {
966 _frame_width = ( ( ( _frame_width - 1 ) / 8 ) - 1 ) * 8;
974 if (paletteColorCount > 4) {
980 SYSTEM_PALETTE = &SYSTEM_PALETTE_ALTERNATE[_environment->
paletteSelected][0];
982 commonPalette =
palette_match( palette, paletteColorCount, SYSTEM_PALETTE,
sizeof(SYSTEM_PALETTE_ALTERNATE[0]) /
sizeof(
RGBi) );
987 adilinepalette(
"CPMS:%d", (
int)(
sizeof(SYSTEM_PALETTE_ALTERNATE[0]) /
sizeof(
RGBi)), SYSTEM_PALETTE );
997 char * buffer =
malloc ( bufferSize );
998 memset( buffer, 0, bufferSize );
1001 int image_x, image_y;
1007 int offset, offsetc, bitmask;
1012 *(buffer) = _frame_width;
1013 *(buffer+1) = _frame_height;
1016 _source += ( ( _offset_y * _width ) + _offset_x ) * _depth;
1021 for (image_y = 0; image_y < _frame_height; ++image_y) {
1022 for (image_x = 0; image_x < _frame_width; ++image_x) {
1026 rgb.
green = *(_source + 1);
1027 rgb.
blue = *(_source + 2);
1029 rgb.
alpha = *(_source + 3);
1033 if ( rgb.
alpha == 0 ) {
1039 offset = ( image_y * ( _frame_width >> 2 ) ) + ( image_x >> 2 );
1043 if ( rgb.
alpha < 255 ) {
1046 int minDistance = 9999;
1051 colorIndex = commonPalette[i].index;
1060 bitmask = colorIndex << (6 - ((image_x & 0x3) * 2));
1062 *(buffer + 3 +
offset) |= bitmask;
1068 _source += ( _width - _frame_width ) * _depth;
1088Variable *
c6847z_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 ) {
1095 return c6847z_image_converter_multicolor_mode_standard( _environment, _data, _width, _height, _depth, _offset_x, _offset_y, _frame_width, _frame_height, _transparent_color, _flags );
1107static void c6847z_load_image_address_to_register(
Environment * _environment,
char * _register,
Resource * _source,
char * _sequence,
char * _frame,
int _frame_size,
int _frame_count ) {
1156void c6847z_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 ) {
1210 deploy( putimage, src_hw_6847z_put_image_asm );
1218 if ( _frame_size ) {
1219 if ( !_sequence && !_frame ) {
1224 if ( strlen(_sequence) == 0 ) {
1226 outline1(
"LD A, (%s)", _sequence );
1232 if ( strlen(_frame) == 0 ) {
1244 if ( strlen(_frame) == 0 ) {
1285 memset( buffer, 0,
size );
1288 *(buffer+1) = _height;
1300 int size = calculate_images_size( _environment, _frames, _width, _height, _mode );
1310 memset( buffer, 0,
size );
1312 *(buffer) = _frames;
1313 *(buffer+1) = ( _width & 0xff );
1314 *(buffer+2) = ( _width >> 8 ) & 0xff;
1315 for(
int i=0; i<_frames; ++i ) {
1316 *(buffer+3+(i*frameSize)) = _width;
1317 *(buffer+3+(i*frameSize)+1) = _height;
1331 int size2 = calculate_sequence_size( _environment, _sequences, _frames, _width, _height, _mode );
1332 int size = calculate_images_size( _environment, _frames, _width, _height, _mode );
1341 char * buffer =
malloc ( size2 );
1342 memset( buffer, 0, size2 );
1344 *(buffer) = _frames;
1345 *(buffer+1) = _width;
1346 *(buffer+2) = _sequences;
1347 for(
int i=0; i<(_frames * _sequences); ++i ) {
1348 *(buffer+3+(i*frameSize)) = _width;
1349 *(buffer+3+(i*frameSize)+1) = _height;
1354 result->
size = size2;
1361void c6847z_get_image(
Environment * _environment,
char * _image,
char * _x,
char * _y,
char * _frame,
char * _sequence,
int _frame_size,
int _frame_count,
int _palette ) {
void cpu_store_16bit(Environment *_environment, char *_destination, int _value)
CPU 6309: emit code to store 16 bit
void cpu_move_16bit(Environment *_environment, char *_source, char *_destination)
CPU 6309: emit code to move 16 bit
void cpu_store_8bit(Environment *_environment, char *_destination, int _value)
CPU 6309: emit code to store 8 bit
int lastUsedSlotInCommonPalette
#define BITMAP_MODE_COLOR2
#define TILEMAP_MODE_INTERNAL
void c6847z_screen_rows(Environment *_environment, char *_rows)
void c6847z_sprite_expand_vertical(Environment *_environment, char *_sprite)
Variable * c6847z_new_images(Environment *_environment, int _frames, int _width, int _height, int _mode)
void c6847z_get_image(Environment *_environment, char *_image, char *_x, char *_y, char *_frame, char *_sequence, int _frame_size, int _frame_count, int _palette)
void c6847z_hscroll_screen(Environment *_environment, int _direction, int _overlap)
void c6847z_get_height(Environment *_environment, char *_result)
void c6847z_bitmap_enable(Environment *_environment, int _width, int _height, int _colors)
void c6847z_border_color(Environment *_environment, char *_border_color)
VIC-II: emit code to change border color
void c6847z_pget_color_vars(Environment *_environment, char *_x, char *_y, char *_result)
void c6847z_textmap_at(Environment *_environment, char *_address)
void c6847z_sprite_at(Environment *_environment, char *_sprite, char *_x, char *_y)
void c6847z_hscroll_line(Environment *_environment, int _direction, int _overlap)
void c6847z_get_width(Environment *_environment, char *_result)
void c6847z_pset_int(Environment *_environment, int _x, int _y, int *_c)
void c6847z_background_color(Environment *_environment, char *_index, char *_background_color)
VIC-II: emit code to change background color
Variable * c6847z_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)
void c6847z_collision(Environment *_environment, char *_sprite_mask, char *_result)
VIC-II: emit code to check for collision
void c6847z_colormap_at(Environment *_environment, char *_address)
void c6847z_next_raster_at(Environment *_environment, char *_label, char *_positionlo, char *_positionhi)
VIC-II: emit code to wait for next raster irq at different position
void c6847z_sprite_compress_vertical(Environment *_environment, char *_sprite)
void c6847z_vertical_scroll(Environment *_environment, char *_displacement)
void c6847z_sprite_common_color(Environment *_environment, char *_index, char *_common_color)
VIC-II: emit code to change common sprite's color
void c6847z_bitmap_at(Environment *_environment, char *_address)
void c6847z_tile_at(Environment *_environment, char *_x, char *_y, char *_result)
void c6847z_sprite_compress_horizontal(Environment *_environment, char *_sprite)
Variable * c6847z_new_image(Environment *_environment, int _width, int _height, int _mode)
void c6847z_sprite_data_from(Environment *_environment, char *_sprite, char *_address)
void c6847z_next_raster(Environment *_environment)
VIC-II: emit code to wait for next raster irq
void c6847z_tiles_at(Environment *_environment, char *_address)
void c6847z_initialization(Environment *_environment)
void c6847z_sprite_data_set(Environment *_environment, char *_sprite, char *_address)
int c6847z_palette_extract(Environment *_environment, char *_data, int _width, int _height, int _depth, int _flags, RGBi *_palette)
void c6847z_bitmap_disable(Environment *_environment)
void c6847z_sprite_priority(Environment *_environment, char *_sprite, char *_priority)
void c6847z_hit(Environment *_environment, char *_sprite_mask, char *_result)
VIC-II: emit code to check for collision
void c6847z_screen_on(Environment *_environment)
void c6847z_horizontal_scroll(Environment *_environment, char *_displacement)
void c6847z_text(Environment *_environment, char *_text, char *_text_size, int _raw)
void c6847z_put_tiles(Environment *_environment, char *_tile, char *_x, char *_y, char *_w, char *_h)
void c6847z_sprite_multicolor(Environment *_environment, char *_sprite)
void c6847z_screen(Environment *_environment, char *_x, char *_y, char *_c)
void c6847z_sprite_enable(Environment *_environment, char *_sprite)
void c6847z_screen_off(Environment *_environment)
void c6847z_sprite_disable(Environment *_environment, char *_sprite)
void c6847z_cline(Environment *_environment, char *_characters)
void c6847z_cls_box(Environment *_environment, char *_x1, char *_y1, char *_w, char *_h)
void console_calculate_vars(Environment *_environment)
void c6847z_sprite_monocolor(Environment *_environment, char *_sprite)
void c6847z_use_tileset(Environment *_environment, char *_tileset)
void c6847z_screen_columns(Environment *_environment, char *_columns)
void c6847z_put_tile(Environment *_environment, char *_tile, char *_x, char *_y)
void c6847z_put_image(Environment *_environment, Resource *_source, char *_x, char *_y, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_flags)
Variable * c6847z_new_sequence(Environment *_environment, int _sequences, int _frames, int _width, int _height, int _mode)
void c6847z_scroll(Environment *_environment, int _dx, int _dy)
void c6847z_move_tiles(Environment *_environment, char *_tile, char *_x, char *_y)
void c6847z_sprite_expand_horizontal(Environment *_environment, char *_sprite)
void c6847z_sprite_color(Environment *_environment, char *_sprite, char *_color)
Variable * c6847z_get_raster_line(Environment *_environment)
void c6847z_finalization(Environment *_environment)
void c6847z_calculate_sequence_frame_offset(Environment *_environment, char *_offset, char *_sequence, char *_frame, int _frame_size, int _frame_count)
void c6847z_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)
void c6847z_bank_select(Environment *_environment, int _bank)
void c6847z_back(Environment *_environment)
void c6847z_tiles_get(Environment *_environment, char *_result)
void c6847z_raster_at(Environment *_environment, char *_label, char *_positionlo, char *_positionhi)
VIC-II: emit code to set raster irq
int c6847z_screen_mode_enable(Environment *_environment, ScreenMode *_screen_mode)
void c6847z_cls(Environment *_environment)
void c6847z_scroll_text(Environment *_environment, int _direction, int _overlap)
int c6847z_image_size(Environment *_environment, int _width, int _height, int _mode)
void c6847z_tilemap_enable(Environment *_environment, int _width, int _height, int _colors, int _tile_width, int _tile_height)
void c6847z_slice_image(Environment *_environment, char *_image, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_destination)
void c6847z_pset_vars(Environment *_environment, char *_x, char *_y, char *_c)
void console_calculate(Environment *_environment)
void c6847z_flip_image(Environment *_environment, Resource *_image, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_direction)
Variable * variable_retrieve(Environment *_environment, char *_name)
Variable * variable_retrieve_or_define(Environment *_environment, char *_name, VariableType _type, int _value)
int rgbi_distance(RGBi *_e1, RGBi *_e2)
Calculate the distance between two colors.
void image_converter_asserts_free_height(Environment *_environment, int _width, int _height, int _offset_x, int _offset_y, int *_frame_width, int *_frame_height, int _modulo_x)
Variable * variable_import(Environment *_environment, char *_name, VariableType _type, int _size_or_value)
RGBi * malloc_palette(int _size)
Allocate a palette space.
void variable_global(Environment *_environment, char *_pattern)
ScreenMode * find_screen_mode_by_suggestion(Environment *_environment, int _bitmap, int _width, int _height, int _colors, int _tile_width, int _tile_height)
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
int rgbi_extract_palette(Environment *_environment, unsigned char *_source, int _width, int _height, int _depth, RGBi _palette[], int _palette_size, int _sorted)
Extract the color palette from the given image.
RGBi * palette_remove_duplicates(RGBi *_source, int _source_size, int *_unique_size)
Remove duplicates from a palette.
void font_descriptors_init(Environment *_environment, int _embedded_present)
RGBi * palette_match(RGBi *_source, int _source_size, RGBi *_system, int _system_size)
Make a "palette match".
Variable * variable_store_buffer(Environment *_environment, char *_destination, unsigned char *_buffer, int _size, int _at)
void plot(Environment *_environment, char *_x, char *_y, char *_c, int _preserve_color)
void console_init(Environment *_environment)
Variable * distance(Environment *_environment, char *_x1, char *_y1, char *_x2, char *_y2)
Return the distance between two (screen) positions.
struct _CopperList * next
VestigialConfig vestigialConfig
unsigned char * valueBuffer
RGBi originalPalette[MAX_PALETTE]
struct _ScreenMode ScreenMode
#define CRITICAL_IMAGE_CONVERTER_TOO_COLORS(f)
struct _Resource Resource
struct _RGBi RGBi
Structure to store color components (red, green and blue).
#define adilineendbitmap()
#define WARNING_SCREEN_MODE(v1)
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
#define adiline3(s, a, b, c)
#define deploy_preferred(s, e)
#define SCREEN_MODE_DEFINE(_id, _bitmap, _width, _height, _colors, _tile_width, _tile_height, _description)
#define CRITICAL_NEW_IMAGES_UNSUPPORTED_MODE(f)
#define WARNING_IMAGE_CONVERTER_UNSUPPORTED_MODE(f)
#define adilinepalette(s, c, p)
#define FONT_SCHEMA_ASCII
#define adilinebeginbitmap(s)
struct _CopperList CopperList
#define CRITICAL_NEW_IMAGE_UNSUPPORTED_MODE(f)
char DATATYPE_AS_STRING[][16]