From f4fb0cf56b7d0bd2c7884f82f5c221d3a494c5c8 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Fri, 22 Jan 2021 19:51:57 +0100 Subject: [PATCH] One demo program for vera modes. --- .../cache/fragment-cache-wdc65c02.asm | 22 + src/test/kc/examples/cx16/cx16-vera.c | 755 +++++++++++++++++- 2 files changed, 768 insertions(+), 9 deletions(-) diff --git a/src/main/fragment/cache/fragment-cache-wdc65c02.asm b/src/main/fragment/cache/fragment-cache-wdc65c02.asm index 82300cda6..edbaf31bf 100644 --- a/src/main/fragment/cache/fragment-cache-wdc65c02.asm +++ b/src/main/fragment/cache/fragment-cache-wdc65c02.asm @@ -3477,3 +3477,25 @@ NO_SYNTHESIS //FRAGMENT pbuc1_derefidx_vbuaa=vbuaa tax sta {c1},x +//FRAGMENT _deref_pwuc1=vwuz1 +lda {z1} +sta {c1} +lda {z1}+1 +sta {c1}+1 +//FRAGMENT _deref_pbuc1=_byte_vwuz1 +lda {z1} +sta {c1} +//FRAGMENT _deref_pduc1=vduz1 +lda {z1} +sta {c1} +lda {z1}+1 +sta {c1}+1 +lda {z1}+2 +sta {c1}+2 +lda {z1}+3 +sta {c1}+3 +//FRAGMENT _deref_pwuc1=vbuc2 +lda #0 +sta {c1}+1 +lda #<{c2} +sta {c1} diff --git a/src/test/kc/examples/cx16/cx16-vera.c b/src/test/kc/examples/cx16/cx16-vera.c index dab20b955..9163428ae 100644 --- a/src/test/kc/examples/cx16/cx16-vera.c +++ b/src/test/kc/examples/cx16/cx16-vera.c @@ -12,9 +12,10 @@ void main() { - // Configure the VERA card to work in text, 16x16 mode. - // The color mode is here 16 colors, indicating 16x16 color mode, (16 foreground and 16 background colors). - vera_layer_set_text_color_mode( 1, VERA_LAYER_CONFIG_16C ); + vera_layer_mode_text(1, 0x00000, 0x0f800, 64, 64, 8, 8, 4); + vera_display_set_scale_double(); + vera_layer_show(1); + screenlayer(1); do { textcolor(WHITE); @@ -22,18 +23,34 @@ void main() { clrscr(); printf( "\n *** vera demo ***\n\n" ); - printf( "1. bitmap mode - 320 x 240 - 1 bit per pixel.\n"); - printf( "2. bitmap mode - 640 x 480 - 1 bit per pixel.\n"); - printf( "3. bitmap mode - 320 x 240 - 2 bits per pixel.\n"); - printf( "4. bitmap mode - 640 x 480 - 2 bits per pixel.\n"); - printf( "5. bitmap mode - 320 x 240 - 4 bits per pixel.\n"); - printf( "6. bitmap mode - 320 x 240 - 8 bits per pixel.\n"); + printf( "1. bitmap - 320x240 - 1 bpp.\n"); + printf( "2. bitmap - 640x480 - 1 bpp.\n"); + printf( "3. bitmap - 320x240 - 2 bpp.\n"); + printf( "4. bitmap - 640x480 - 2 bpp.\n"); + printf( "5. bitmap - 320x240 - 4 bpp.\n"); + printf( "6. bitmap - 320x240 - 8 bpp.\n"); + + printf( "\na. text - 8x8 - 1 bpp, 16c.\n"); + printf( "b. text - 8x8 - 1 bpp, 256c.\n"); + + printf( "\nc. tile - 8x8 - 2 bpp.\n"); + printf( "d. tile - 16x16 - 2 bpp.\n"); + printf( "e. tile - 8x8 - 4 bpp.\n"); + printf( "f. tile - 16x16 - 4 bpp.\n"); + printf( "g. tile - 8x8 - 8 bpp.\n"); + printf( "h. tile - 16x16 - 8 bpp.\n"); + + printf( "\n0. exit.\n"); byte menu = 0; while(menu==0) { menu = fgetc(); } + textcolor(WHITE); + bgcolor(BLACK); + clrscr(); + switch( menu ) { case 49: bitmap_320_x_240_1BPP(); @@ -53,11 +70,37 @@ void main() { case 54: bitmap_320_x_240_8BPP(); break; + case 65: + text_8_x_8_1BPP_16_color(); + break; + case 66: + //text_8_x_8_1BPP_256_color(); + break; + case 67: + //tile_8_x_8_2BPP_4_color(); + break; + case 68: + //tile_16_x_16_2BPP_4_color(); + break; + case 69: + //tile_8_x_8_4BPP_16_color(); + break; + case 70: + //tile_16_x_16_4BPP_16_color(); + break; + case 71: + //tile_8_x_8_8BPP_256_color(); + break; + case 72: + //tile_16_x_16_8BPP_256_color(); + break; } vera_layer_hide(0); memcpy_in_vram(0, 0xF800, VERA_INC_1, 1, 0xF000, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. vera_layer_mode_tile(1, 0x00000, 0x0F800, 128, 64, 8, 8, 1); + + vera_layer_mode_text(1, 0x00000, 0x0f800, 64, 64, 8, 8, 4); vera_layer_show(1); screenlayer(1); @@ -69,6 +112,700 @@ void main() { } +void tile_16_x_16_8BPP_256_color() { + + byte tiles[256] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + }; + + // Before we can load the tiles into memory we need to re-arrange a few things! + // The amount of tiles is 256, the color depth is 256, so each tile is 256 bytes! + // That is 65356 bytes of memory, which is 64K. Yup! One memory bank in VRAM. + // VERA VRAM holds in bank 1 many registers that interfere loading all of this data. + // So it is better to load all in bank 0, but then there is an other issue. + // So the default CX16 character set is located in bank 0, at address 0xF800. + // So we need to move this character set to bank 1, suggested is at address 0xF000. + // The CX16 by default writes textual output to layer 1 in text mode, so we need to + // realign the moved character set to 0xf000 as the new tile base for layer 1. + // We also will need to realign for layer 1 the map base from 0x00000 to 0x10000. + // This is now all easily done with a few statements in the new kickc vera lib ... + + memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. + vera_layer_mode_tile(1, 0x10000, 0x1F000, 128, 64, 8, 8, 1); + + screenlayer(1); + textcolor(WHITE); + bgcolor(BLACK); + clrscr(); + + // Now we can use the full bank 0! + // We set the mapbase of the tile demo to output to 0x12000, + // and the tilebase is set to 0x0000! + vera_layer_mode_tile(0, 0x14000, 0x00000, 64, 64, 16, 16, 8); + + + word tilebase = 0x0000; + memcpy_to_vram(0, tilebase, tiles, 256); + tilebase+=256; + for(byte t:1..255) { + for(byte p:0..255) { + tiles[p]+=1; + } + memcpy_to_vram(0, tilebase, tiles, 256); + tilebase+=256; + } + + //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) + + vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); + + word tile = 0; + + // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. + byte row = 1; + for(byte r:0..11) { + byte column = 0; + for(byte c:0..19) { + vera_tile_area(0, tile, column, row, 1, 1, 0, 0, 0); + column+=2; + tile++; + tile &= 0xff; + } + row += 2; + } + + gotoxy(0,50); + printf("vera in tile mode 8 x 8, color depth 8 bits per pixel.\n"); + + printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); + printf("each tile can have a variation of 256 colors.\n"); + printf("the vera palette of 256 colors, can be used by setting the palette\n"); + printf("offset for each tile.\n"); + printf("here each column is displaying the same tile, but with different offsets!\n"); + printf("each offset aligns to multiples of 16 colors in the palette!.\n"); + printf("however, the first color will always be transparent (black).\n"); + + vera_layer_show(0); + + while(!fgetc()); + + vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); + + tile = 0; + row = 0; + for(byte r:0..11) { + byte column = 0; + for(byte c:0..19) { + vera_tile_area(0, tile, column, row, 2, 2, 0, 0, 0); + column+=2; + tile++; + tile &= 0xff; + } + row += 2; + } + + while(!fgetc()); +} + + +void tile_8_x_8_8BPP_256_color() { + + vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 8, 8, 8); + + byte tiles[64] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + }; + + word tilebase = 0x4000; + memcpy_to_vram(1, tilebase, tiles, 64); + tilebase+=64; + for(byte t:1..255) { + for(byte p:0..63) { + tiles[p]+=1; + } + memcpy_to_vram(1, tilebase, tiles, 64); + tilebase+=64; + } + + //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) + + vera_tile_area(0, 0, 0, 0, 80, 60, 0, 0, 0); + + word tile = 0; + + // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. + byte row = 1; + for(byte r:0..7) { + byte column = 1; + for(byte c:0..31) { + vera_tile_area(0, tile, column, row, 1, 1, 0, 0, 0); + column+=2; + tile++; + tile &= 0xff; + } + row += 2; + } + + tile = 0; + row = 20; + for(byte r:0..7) { + byte column = 1; + for(byte c:0..31) { + vera_tile_area(0, tile, column, row, 2, 2, 0, 0, 0); + column+=2; + tile++; + tile &= 0xff; + } + row += 2; + } + + vera_layer_show(0); + + gotoxy(0,50); + printf("vera in tile mode 8 x 8, color depth 8 bits per pixel.\n"); + + printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); + printf("each tile can have a variation of 256 colors.\n"); + printf("the vera palette of 256 colors, can be used by setting the palette\n"); + printf("offset for each tile.\n"); + printf("here each column is displaying the same tile, but with different offsets!\n"); + printf("each offset aligns to multiples of 16 colors in the palette!.\n"); + printf("however, the first color will always be transparent (black).\n"); + + while(!fgetc()); +} + + +void tile_16_x_16_4BPP_16_color() { + + vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 16, 16, 4); + + byte tiles[2048] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, + 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, + 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, + 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, + 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, + 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, + 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, + 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, + 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, + 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, + 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, + 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, + 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, + 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, + 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, + 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, + 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, + 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, + 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, + 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, + 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, + 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, + 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, + 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, + 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, + 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, + 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, + 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, + 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, + 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, + 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, + 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, + 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, + 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, + 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, + 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, + 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, + 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, + 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, + 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, + 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, + 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, + 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, + 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, + 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, + 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, + 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + }; + + memcpy_to_vram(1, 0x4000, tiles, 2048); + + //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) + + vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); + + word tile = 0; + + // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. + tile = 0; + byte column = 1; + for(byte c:0..7) { + vera_tile_area(0, tile, column, 1, 1, 1, 0, 0, 0); + column+=4; + tile++; + } + column = 1; + for(byte c:0..7) { + vera_tile_area(0, tile, column, 3, 1, 1, 0, 0, 0); + column+=4; + tile++; + } + + tile = 0; + column = 1; + for(byte c:0..7) { + vera_tile_area(0, tile, column, 5, 3, 3, 0, 0, 0); + column+=4; + tile++; + } + column = 1; + for(byte c:0..7) { + vera_tile_area(0, tile, column, 9, 3, 3, 0, 0, 0); + column+=4; + tile++; + } + + tile = 0; + byte offset = 0; + + byte row = 13; + + for(byte r:0..7) { + byte column = 1; + for(byte c:0..31) { + vera_tile_area(0, tile, column, row, 1, 1, 0, 0, offset); + column+=1; + tile++; + if((c & 0x0f) == 0x0f) offset++; + tile &= 0x0f; + } + row += 1; + } + + vera_layer_show(0); + + gotoxy(0,50); + printf("vera in tile mode 16 x 16, color depth 4 bits per pixel.\n"); + + printf("in this mode, tiles are 16 pixels wide and 16 pixels tall.\n"); + printf("each tile can have a variation of 16 colors.\n"); + printf("the vera palette of 256 colors, can be used by setting the palette\n"); + printf("offset for each tile.\n"); + printf("here each column is displaying the same tile, but with different offsets!\n"); + printf("each offset aligns to multiples of 16 colors in the palette!.\n"); + printf("however, the first color will always be transparent (black).\n"); + + while(!fgetc()); +} + + +void tile_8_x_8_4BPP_16_color() { + + vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 8, 8, 4); + + byte tiles[512] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, + 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, + 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, + 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, + 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, + 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, + 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, + 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, + 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, + 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, + 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + }; + + memcpy_to_vram(1, 0x4000, tiles, 512); + + vera_tile_area(0, 0, 0, 0, 80, 60, 0, 0, 0); + + word tile = 0; + + // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. + tile = 0; + byte column = 1; + for(byte c:0..7) { + vera_tile_area(0, tile, column, 1, 1, 1, 0, 0, 0); + column+=8; + tile++; + } + column = 1; + for(byte c:0..7) { + vera_tile_area(0, tile, column, 3, 1, 1, 0, 0, 0); + column+=8; + tile++; + } + + tile = 0; + column = 1; + for(byte c:0..7) { + vera_tile_area(0, tile, column, 5, 6, 6, 0, 0, 0); + column+=8; + tile++; + } + column = 1; + for(byte c:0..7) { + vera_tile_area(0, tile, column, 12, 6, 6, 0, 0, 0); + column+=8; + tile++; + } + + tile = 0; + byte offset = 0; + + byte row = 20; + + for(byte r:0..7) { + byte column = 1; + for(byte c:0..31) { + vera_tile_area(0, tile, column, row, 2, 2, 0, 0, offset); + column+=2; + tile++; + if((c & 0x0f) == 0x0f) offset++; + tile &= 0x0f; + } + row += 2; + } + + vera_layer_show(0); + + gotoxy(0,50); + printf("vera in tile mode 8 x 8, color depth 4 bits per pixel.\n"); + + printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); + printf("each tile can have a variation of 16 colors.\n"); + printf("the vera palette of 256 colors, can be used by setting the palette\n"); + printf("offset for each tile.\n"); + printf("here each column is displaying the same tile, but with different offsets!\n"); + printf("each offset aligns to multiples of 16 colors in the palette!.\n"); + printf("however, the first color will always be transparent (black).\n"); + + while(!fgetc()); +} + + +void tile_16_x_16_2BPP_4_color() { + + vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 16, 16, 2); + + byte tiles[256] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + }; + + memcpy_to_vram(1, 0x4000, tiles, 256); + + //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) + + vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); + + // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. + vera_tile_area(0, 0, 4, 2, 1, 1, 0, 0, 0); + vera_tile_area(0, 1, 10, 2, 1, 1, 0, 0, 0); + vera_tile_area(0, 2, 16, 2, 1, 1, 0, 0, 0); + vera_tile_area(0, 3, 22, 2, 1, 1, 0, 0, 0); + + // Draw 4 squares with each tile, starting from row 6, width 4, height 4, separated by 2 characters. + vera_tile_area(0, 0, 4, 4, 4, 4, 0, 0, 0); + vera_tile_area(0, 1, 10, 4, 4, 4, 0, 0, 0); + vera_tile_area(0, 2, 16, 4, 4, 4, 0, 0, 0); + vera_tile_area(0, 3, 22, 4, 4, 4, 0, 0, 0); + + word tile = 0; + byte offset = 0; + + byte row = 10; + + for(byte r:0..3) { + byte column = 4; + for(byte c:0..16) { + vera_tile_area(0, tile, column, row, 1, 1, 0, 0, offset); + column+=2; + offset++; + } + tile++; + tile &= 0x3; + row += 2; + } + + vera_layer_show(0); + + gotoxy(0,50); + printf("vera in tile mode 8 x 8, color depth 2 bits per pixel.\n"); + + printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); + printf("each tile can have a variation of 4 colors.\n"); + printf("the vera palette of 256 colors, can be used by setting the palette\n"); + printf("offset for each tile.\n"); + printf("here each column is displaying the same tile, but with different offsets!\n"); + printf("each offset aligns to multiples of 16 colors, and only the first 4 colors\n"); + printf("can be used per offset!\n"); + printf("however, the first color will always be transparent (black).\n"); + + while(!fgetc()); +} + +void tile_8_x_8_2BPP_4_color() { + + vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 8, 8, 2); + + byte tiles[64] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; + + byte map[16] = {0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x03,0x00,0x03,0x00}; + + memcpy_to_vram(1, 0x4000, tiles, 64); + + //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) + + vera_tile_area(0, 0, 0, 0, 80, 60, 0, 0, 0); + + // Draw 4 squares with each tile, staring from row 2, width 10, height 10, separated by 2 characters. + vera_tile_area(0, 0, 4, 4, 10, 10, 0, 0, 0); + vera_tile_area(0, 1, 16, 4, 10, 10, 0, 0, 0); + vera_tile_area(0, 2, 28, 4, 10, 10, 0, 0, 0); + vera_tile_area(0, 3, 40, 4, 10, 10, 0, 0, 0); + + word tile = 0; + byte offset = 0; + + byte row = 22; + + for(byte r:0..3) { + byte column = 4; + for(byte c:0..15) { + vera_tile_area(0, tile, column, row, 3, 3, 0, 0, offset); + column+=4; + offset++; + } + tile++; + tile &= 0x3; + row += 4; + } + + vera_layer_show(0); + + gotoxy(0,50); + printf("vera in tile mode 8 x 8, color depth 2 bits per pixel.\n"); + + printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); + printf("each tile can have a variation of 4 colors.\n"); + printf("the vera palette of 256 colors, can be used by setting the palette\n"); + printf("offset for each tile.\n"); + printf("here each column is displaying the same tile, but with different offsets!\n"); + printf("each offset aligns to multiples of 16 colors, and only the first 4 colors\n"); + printf("can be used per offset!\n"); + printf("however, the first color will always be transparent (black).\n"); + + while(!fgetc()); +} + + +void text_8_x_8_1BPP_256_color() { + + // Configure the VERA card to work in text, 256 mode. + // The color mode is here 256 colors, (256 foreground on a black transparent background). + vera_layer_mode_text( 1, 0x00000, 0x0F800, 128, 128, 8, 8, 256 ); + + // or you can use the below statement, but that includes setting a "mode", including + // layer, map base address, tile base address, map width, map height, tile width, tile height, color mode. + //vera_layer_mode_text(1, 0x00000, 0x0F800, 128, 128, 8, 8, 256); + + for(byte c:0..255) { + textcolor(c); + printf(" ****** "); + } + + vera_layer_show(1); + + gotoxy(0,50); + textcolor(WHITE); + bgcolor(BLACK); + printf("vera in text mode 8 x 8, color depth 1 bits per pixel.\n"); + printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); + printf("each character can have a variation of 256 foreground colors.\n"); + printf("here we display 6 stars (******) each with a different color.\n"); + printf("however, the first color will always be transparent (black).\n"); + printf("in this mode, the background color cannot be set and is always transparent.\n"); + + while(!fgetc()); +} + +void text_8_x_8_1BPP_16_color() { + + // Configure the VERA card to work in text, 16x16 mode. + // The color mode is here 16 colors, indicating 16x16 color mode, (16 foreground and 16 background colors). + vera_layer_set_text_color_mode( 1, VERA_LAYER_CONFIG_16C ); + + // or you can use the below statement, but that includes setting a "mode", including + // layer, map base address, tile base address, map width, map height, tile width, tile height, color mode. + //vera_layer_mode_text(1, 0x00000, 0x0F800, 128, 128, 8, 8, 16); + + for(byte c:0..255) { + bgcolor(c); + printf(" ****** "); + } + + vera_layer_show(1); + + gotoxy(0,50); + textcolor(WHITE); + bgcolor(BLACK); + printf("vera in text mode 8 x 8, color depth 1 bits per pixel.\n"); + printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); + printf("each character can have a variation of 16 foreground colors and 16 background colors.\n"); + printf("here we display 6 stars (******) each with a different color.\n"); + printf("however, the first color will always be transparent (black).\n"); + printf("in this mode, the background color cannot be set and is always transparent.\n"); + + while(!fgetc()); +} + + void bitmap_320_x_240_1BPP() { // Before we configure the bitmap pane into vera memory we need to re-arrange a few things!