// Huffman tree generated by ColecoVision huffman_analyzer. // Nodes below HUFFMAN_LS are inner nodes. // Nodes from HUFFMAN_LS to HUFFMAN_BS - 1 only have a right child node. // Nodes from HUFFMAN_BS to HUFFMAN_RS - 1 do not have child nodes. // Nodes from HUFFMAN_RS onward only have a left child node. #include #include #define RLE_ESCAPE (const uint8_t)(253) #define PATTERN ((const cv_vmemp)0x0000) #define COLOR ((const cv_vmemp)0x2000) #define IMAGE ((const cv_vmemp)0x1c00) #define SPRITES ((const cv_vmemp)0x3c00) extern const unsigned char color[]; extern const unsigned char pattern[]; extern const uint8_t HUFFMAN_ROOT; extern const uint8_t HUFFMAN_LS, HUFFMAN_BS, HUFFMAN_RS; extern const struct cvu_huffman_node huffman_tree[255]; void main(void) { unsigned int i; struct cvu_compression_state state; cv_set_screen_active(false); cv_set_image_table(IMAGE); cv_set_color_table(0x3fff); cv_set_character_pattern_t(0x1fff); cv_set_screen_mode(CV_SCREENMODE_BITMAP); // Make all sprites transparent. cv_set_sprite_attribute_table(SPRITES); for(i = 0; i < 32; i++) { struct cvu_sprite s; cvu_set_sprite_color(&s, CV_COLOR_TRANSPARENT); cvu_set_sprite(SPRITES, i, &s); } // Decompress image data to video memory. cvu_init_compression(pattern, &state, huffman_tree, HUFFMAN_ROOT, HUFFMAN_LS, HUFFMAN_BS, HUFFMAN_RS, RLE_ESCAPE); cvu_memtovmemcpy_compression(PATTERN,& state, 6144); cvu_init_compression(color, &state, huffman_tree, HUFFMAN_ROOT, HUFFMAN_LS, HUFFMAN_BS, HUFFMAN_RS, RLE_ESCAPE); cvu_memtovmemcpy_compression(COLOR, &state, 6144); for(i = 0; i < 768; i++) cvu_voutb(i % 256, IMAGE + i); cv_set_screen_active(true); for(;;); } const uint8_t HUFFMAN_ROOT = 108; const uint8_t HUFFMAN_LS = 109, HUFFMAN_BS = 124, HUFFMAN_RS = 234; const struct cvu_huffman_node huffman_tree[255] = { /* Node 0 */ {125, 126}, /* Node 1 */ {127, 128}, /* Node 2 */ {129, 130}, /* Node 3 */ {131, 132}, /* Node 4 */ {133, 134}, /* Node 5 */ {135, 136}, /* Node 6 */ {137, 138}, /* Node 7 */ {139, 140}, /* Node 8 */ {141, 142}, /* Node 9 */ {143, 144}, /* Node 10 */ {145, 146}, /* Node 11 */ {147, 148}, /* Node 12 */ {149, 150}, /* Node 13 */ {151, 152}, /* Node 14 */ {153, 154}, /* Node 15 */ {155, 156}, /* Node 16 */ {157, 158}, /* Node 17 */ {159, 160}, /* Node 18 */ {161, 162}, /* Node 19 */ {163, 164}, /* Node 20 */ {165, 166}, /* Node 21 */ {167, 168}, /* Node 22 */ {169, 170}, /* Node 23 */ {171, 172}, /* Node 24 */ {173, 174}, /* Node 25 */ {175, 176}, /* Node 26 */ {177, 178}, /* Node 27 */ {179, 180}, /* Node 28 */ {181, 182}, /* Node 29 */ {183, 184}, /* Node 30 */ {109, 0}, /* Node 31 */ {1, 2}, /* Node 32 */ {3, 4}, /* Node 33 */ {5, 6}, /* Node 34 */ {7, 8}, /* Node 35 */ {9, 10}, /* Node 36 */ {11, 12}, /* Node 37 */ {13, 14}, /* Node 38 */ {15, 16}, /* Node 39 */ {17, 18}, /* Node 40 */ {19, 20}, /* Node 41 */ {21, 22}, /* Node 42 */ {23, 24}, /* Node 43 */ {25, 26}, /* Node 44 */ {27, 28}, /* Node 45 */ {29, 30}, /* Node 46 */ {31, 32}, /* Node 47 */ {33, 34}, /* Node 48 */ {35, 36}, /* Node 49 */ {37, 38}, /* Node 50 */ {39, 40}, /* Node 51 */ {41, 42}, /* Node 52 */ {43, 44}, /* Node 53 */ {45, 46}, /* Node 54 */ {47, 48}, /* Node 55 */ {49, 50}, /* Node 56 */ {51, 52}, /* Node 57 */ {53, 54}, /* Node 58 */ {55, 56}, /* Node 59 */ {57, 58}, /* Node 60 */ {185, 186}, /* Node 61 */ {187, 188}, /* Node 62 */ {189, 190}, /* Node 63 */ {191, 192}, /* Node 64 */ {193, 194}, /* Node 65 */ {195, 196}, /* Node 66 */ {197, 198}, /* Node 67 */ {199, 200}, /* Node 68 */ {201, 202}, /* Node 69 */ {203, 204}, /* Node 70 */ {205, 206}, /* Node 71 */ {207, 208}, /* Node 72 */ {209, 210}, /* Node 73 */ {60, 61}, /* Node 74 */ {62, 63}, /* Node 75 */ {64, 65}, /* Node 76 */ {66, 67}, /* Node 77 */ {212, 213}, /* Node 78 */ {214, 215}, /* Node 79 */ {216, 217}, /* Node 80 */ {218, 219}, /* Node 81 */ {220, 221}, /* Node 82 */ {68, 69}, /* Node 83 */ {70, 71}, /* Node 84 */ {72, 73}, /* Node 85 */ {74, 75}, /* Node 86 */ {223, 224}, /* Node 87 */ {226, 110}, /* Node 88 */ {77, 78}, /* Node 89 */ {81, 82}, /* Node 90 */ {83, 84}, /* Node 91 */ {87, 88}, /* Node 92 */ {239, 230}, /* Node 93 */ {89, 90}, /* Node 94 */ {244, 117}, /* Node 95 */ {91, 231}, /* Node 96 */ {118, 93}, /* Node 97 */ {119, 232}, /* Node 98 */ {248, 233}, /* Node 99 */ {249, 250}, /* Node 100 */ {95, 120}, /* Node 101 */ {121, 251}, /* Node 102 */ {122, 97}, /* Node 103 */ {98, 99}, /* Node 104 */ {252, 100}, /* Node 105 */ {123, 102}, /* Node 106 */ {104, 253}, /* Node 107 */ {105, 254}, /* Node 108 */ {106, 107}, /* Node 109 */ {250, 124}, /* Node 110 */ {247, 211}, /* Node 111 */ {243, 222}, /* Node 112 */ {60, 225}, /* Node 113 */ {249, 237}, /* Node 114 */ {8, 80}, /* Node 115 */ {241, 228}, /* Node 116 */ {227, 111}, /* Node 117 */ {135, 112}, /* Node 118 */ {240, 114}, /* Node 119 */ {254, 242}, /* Node 120 */ {4, 92}, /* Node 121 */ {31, 245}, /* Node 122 */ {127, 247}, /* Node 123 */ {3, 96}, /* Node 124 */ {10, 32}, /* Node 125 */ {33, 36}, /* Node 126 */ {37, 38}, /* Node 127 */ {41, 42}, /* Node 128 */ {43, 44}, /* Node 129 */ {50, 52}, /* Node 130 */ {54, 58}, /* Node 131 */ {64, 67}, /* Node 132 */ {68, 69}, /* Node 133 */ {70, 71}, /* Node 134 */ {72, 73}, /* Node 135 */ {74, 75}, /* Node 136 */ {76, 77}, /* Node 137 */ {78, 80}, /* Node 138 */ {81, 82}, /* Node 139 */ {83, 84}, /* Node 140 */ {85, 86}, /* Node 141 */ {87, 88}, /* Node 142 */ {90, 91}, /* Node 143 */ {92, 93}, /* Node 144 */ {94, 95}, /* Node 145 */ {96, 97}, /* Node 146 */ {98, 100}, /* Node 147 */ {101, 102}, /* Node 148 */ {104, 105}, /* Node 149 */ {106, 107}, /* Node 150 */ {108, 109}, /* Node 151 */ {110, 114}, /* Node 152 */ {117, 122}, /* Node 153 */ {125, 130}, /* Node 154 */ {137, 141}, /* Node 155 */ {144, 146}, /* Node 156 */ {147, 148}, /* Node 157 */ {149, 150}, /* Node 158 */ {151, 154}, /* Node 159 */ {160, 161}, /* Node 160 */ {162, 163}, /* Node 161 */ {164, 165}, /* Node 162 */ {166, 167}, /* Node 163 */ {168, 169}, /* Node 164 */ {170, 171}, /* Node 165 */ {172, 173}, /* Node 166 */ {174, 175}, /* Node 167 */ {176, 177}, /* Node 168 */ {178, 179}, /* Node 169 */ {180, 181}, /* Node 170 */ {182, 183}, /* Node 171 */ {184, 186}, /* Node 172 */ {187, 188}, /* Node 173 */ {194, 200}, /* Node 174 */ {201, 202}, /* Node 175 */ {209, 210}, /* Node 176 */ {211, 212}, /* Node 177 */ {213, 214}, /* Node 178 */ {215, 216}, /* Node 179 */ {217, 218}, /* Node 180 */ {219, 221}, /* Node 181 */ {228, 229}, /* Node 182 */ {233, 234}, /* Node 183 */ {235, 237}, /* Node 184 */ {244, 245}, /* Node 185 */ {13, 35}, /* Node 186 */ {39, 40}, /* Node 187 */ {45, 46}, /* Node 188 */ {48, 49}, /* Node 189 */ {53, 66}, /* Node 190 */ {79, 89}, /* Node 191 */ {103, 111}, /* Node 192 */ {116, 133}, /* Node 193 */ {134, 138}, /* Node 194 */ {139, 145}, /* Node 195 */ {153, 155}, /* Node 196 */ {158, 185}, /* Node 197 */ {189, 190}, /* Node 198 */ {191, 196}, /* Node 199 */ {198, 205}, /* Node 200 */ {208, 236}, /* Node 201 */ {11, 14}, /* Node 202 */ {17, 19}, /* Node 203 */ {20, 34}, /* Node 204 */ {59, 61}, /* Node 205 */ {65, 99}, /* Node 206 */ {112, 113}, /* Node 207 */ {120, 140}, /* Node 208 */ {157, 203}, /* Node 209 */ {204, 220}, /* Node 210 */ {226, 238}, /* Node 211 */ {26, 47}, /* Node 212 */ {56, 119}, /* Node 213 */ {123, 129}, /* Node 214 */ {132, 136}, /* Node 215 */ {152, 197}, /* Node 216 */ {223, 232}, /* Node 217 */ {246, 251}, /* Node 218 */ {22, 25}, /* Node 219 */ {27, 51}, /* Node 220 */ {55, 118}, /* Node 221 */ {222, 242}, /* Node 222 */ {12, 21}, /* Node 223 */ {29, 57}, /* Node 224 */ {156, 239}, /* Node 225 */ {16, 23}, /* Node 226 */ {28, 131}, /* Node 227 */ {124, 206}, /* Node 228 */ {121, 142}, /* Node 229 */ {230, 30}, /* Node 230 */ {115, 126}, /* Node 231 */ {6, 195}, /* Node 232 */ {224, 252}, /* Node 233 */ {15, 143}, /* Node 234 */ {59, 2}, /* Node 235 */ {234, 9}, /* Node 236 */ {235, 18}, /* Node 237 */ {236, 193}, /* Node 238 */ {76, 24}, /* Node 239 */ {79, 62}, /* Node 240 */ {227, 1}, /* Node 241 */ {85, 225}, /* Node 242 */ {238, 231}, /* Node 243 */ {229, 207}, /* Node 244 */ {86, 159}, /* Node 245 */ {240, 0}, /* Node 246 */ {113, 199}, /* Node 247 */ {241, 128}, /* Node 248 */ {115, 192}, /* Node 249 */ {243, 248}, /* Node 250 */ {116, 5}, /* Node 251 */ {246, 63}, /* Node 252 */ {94, 7}, /* Node 253 */ {101, 255}, /* Node 254 */ {103, 253}}; // Huffman-encoded data encoded by ColecoVision huffman encoder. const uint8_t color[] = { 151, 179, 58, 64, 86, 231, 40, 158, 15, 165, 207, 91, 28, 149, 102, 253, 148, 210, 39, 226, 112, 89, 127, 32, 14, 159, 205, 57, 138, 71, 54, 223, 183, 159, 229, 240, 109, 219, 207, 177, 245, 251, 246, 71, 154, 83, 219, 79, 165, 121, 203, 91, 143, 105, 224, 159, 239, 52, 111, 89, 235, 101, 120, 248, 203, 173, 173, 173, 223, 211, 158, 145, 190, 34, 237, 131, 216, 169, 180, 87, 16, 75, 247, 149, 216, 229, 116, 233, 46, 19, 16, 16, 124, 7, 56, 83, 190, 2, 224, 177, 120, 10, 224, 138, 69, 241, 117, 241, 178, 184, 44, 46, 139, 203, 226, 178, 0}; const uint8_t pattern[] = { 151, 125, 0, 247, 9, 253, 221, 40, 77, 190, 155, 3, 40, 190, 221, 227, 184, 126, 247, 163, 188, 2, 78, 146, 254, 187, 101, 25, 191, 187, 239, 79, 89, 150, 241, 148, 7, 201, 23, 173, 210, 207, 222, 221, 88, 159, 114, 209, 118, 211, 244, 253, 186, 206, 66, 104, 253, 40, 125, 115, 202, 226, 49, 205, 243, 114, 121, 244, 122, 180, 126, 106, 125, 170, 28, 157, 28, 93, 142, 110, 142, 158, 62, 25, 155, 230, 148, 31, 19, 66, 16, 33, 125, 116, 51, 207, 15, 80, 235, 146, 12, 190, 91, 250, 201, 113, 52, 140, 86, 191, 27, 63, 25, 143, 94, 143, 206, 242, 104, 60, 156, 207, 234, 177, 115, 119, 166, 203, 195, 79, 173, 79, 149, 103, 233, 70, 178, 163, 161, 105, 122, 136, 9, 162, 55, 103, 213, 167, 214, 179, 194, 231, 75, 72, 140, 208, 36, 132, 214, 178, 152, 85, 154, 222, 208, 210, 53, 169, 62, 104, 8, 138, 179, 234, 192, 238, 215, 164, 90, 221, 208, 180, 52, 167, 245, 123, 111, 151, 114, 166, 149, 171, 213, 46, 73, 214, 181, 105, 250, 94, 49, 52, 196, 43, 229, 148, 165, 199, 106, 223, 63, 20, 107, 223, 200, 107, 99, 23, 148, 97, 103, 250, 97, 60, 66, 253, 154, 84, 171, 27, 154, 150, 230, 180, 126, 239, 87, 151, 114, 166, 183, 41, 25, 120, 54, 133, 114, 247, 61, 57, 156, 199, 239, 245, 216, 149, 239, 186, 120, 237, 251, 230, 204, 165, 104, 45, 38, 186, 251, 238, 102, 149, 37, 37, 103, 80, 232, 226, 135, 152, 166, 89, 237, 206, 170, 27, 26, 154, 78, 173, 201, 248, 144, 224, 243, 75, 153, 100, 173, 133, 152, 176, 150, 62, 172, 216, 82, 39, 8, 34, 164, 105, 229, 46, 57, 115, 175, 24, 4, 77, 111, 170, 213, 193, 122, 170, 95, 19, 233, 153, 46, 197, 126, 244, 77, 243, 112, 250, 124, 33, 62, 38, 241, 148, 79, 85, 149, 107, 91, 161, 120, 172, 173, 245, 250, 112, 225, 202, 90, 139, 7, 168, 249, 167, 32, 148, 105, 122, 83, 173, 14, 86, 137, 239, 253, 154, 72, 207, 116, 41, 94, 143, 147, 244, 152, 212, 71, 139, 43, 233, 110, 252, 94, 219, 229, 187, 126, 202, 253, 209, 248, 201, 235, 209, 250, 232, 241, 232, 233, 232, 228, 104, 125, 116, 127, 244, 244, 201, 120, 120, 131, 159, 92, 31, 157, 246, 232, 250, 232, 230, 104, 249, 232, 114, 52, 30, 189, 30, 45, 61, 186, 62, 90, 124, 242, 216, 185, 27, 207, 234, 135, 92, 30, 250, 41, 139, 7, 88, 233, 92, 115, 5, 50, 17, 81, 123, 124, 180, 13, 12, 188, 36, 253, 88, 158, 57, 85, 137, 225, 225, 51, 19, 145, 44, 5, 24, 88, 50, 83, 166, 71, 11, 30, 197, 100, 36, 219, 11, 103, 206, 150, 71, 50, 195, 153, 225, 0, 115, 35, 119, 102, 178, 121, 100, 202, 116, 230, 10, 182, 73, 230, 120, 102, 173, 249, 252, 51, 67, 233, 51, 242, 155, 135, 103, 30, 143, 212, 119, 205, 133, 193, 206, 44, 42, 186, 176, 112, 102, 40, 125, 70, 254, 153, 135, 121, 60, 82, 103, 134, 203, 62, 183, 202, 182, 219, 246, 252, 88, 158, 185, 146, 233, 179, 19, 32, 104, 107, 46, 12, 118, 102, 130, 133, 5, 78, 103, 206, 177, 194, 128, 128, 167, 220, 52, 103, 30, 206, 192, 227, 157, 153, 196, 3, 118, 56, 215, 245, 216, 185, 27, 107, 173, 203, 195, 69, 159, 185, 121, 248, 12, 72, 126, 184, 221, 94, 200, 43, 255, 15, 47, 151, 45, 37, 191, 121, 248, 108, 184, 126, 204, 143, 146, 145, 211, 195, 15, 82, 68, 68, 15, 231, 53, 24, 40, 56, 63, 76, 156, 248, 12, 130, 15, 147, 109, 113, 75, 22, 242, 126, 184, 133, 45, 210, 165, 60, 156, 173, 210, 214, 202, 84, 254, 225, 71, 35, 185, 124, 248, 193, 207, 48, 61, 60, 52, 196, 227, 145, 121, 248, 12, 54, 61, 76, 53, 77, 198, 233, 225, 7, 63, 195, 244, 240, 208, 16, 143, 7, 61, 156, 123, 238, 106, 27, 248, 225, 179, 37, 233, 135, 9, 7, 67, 128, 74, 124, 248, 1, 227, 226, 195, 153, 51, 47, 44, 108, 123, 248, 49, 68, 66, 126, 248, 209, 72, 86, 232, 225, 40, 37, 59, 232, 225, 7, 140, 28, 153, 163, 203, 179, 240, 89, 61, 118, 238, 206, 116, 121, 62, 29, 95, 122, 252, 94, 143, 93, 249, 174, 203, 51, 187, 27, 191, 215, 118, 249, 174, 159, 120, 236, 220, 141, 103, 245, 67, 46, 15, 253, 196, 117, 61, 118, 238, 198, 90, 235, 242, 112, 209, 79, 124, 86, 143, 157, 187, 51, 93, 190, 229, 241, 123, 61, 118, 229, 187, 46, 207, 236, 110, 252, 94, 219, 229, 187, 126, 226, 177, 115, 55, 158, 213, 15, 185, 60, 244, 19, 215, 245, 216, 185, 27, 107, 173, 203, 195, 69, 63, 241, 89, 61, 118, 238, 206, 116, 249, 150, 199, 239, 245, 216, 149, 239, 186, 156, 147, 123, 197, 214, 153, 99, 109, 190, 27, 124, 136, 87, 204, 224, 12, 62, 63, 110, 142, 198, 135, 122, 18, 110, 183, 85, 117, 249, 152, 159, 178, 120, 128, 118, 211, 63, 172, 76, 192, 45, 229, 225, 181, 225, 115, 23, 31, 206, 95, 126, 23, 181, 126, 120, 173, 8, 113, 33, 30, 230, 11, 49, 207, 15, 111, 171, 20, 52, 207, 15, 235, 121, 169, 182, 31, 166, 42, 254, 160, 31, 22, 149, 27, 6, 90, 31, 38, 4, 148, 232, 251, 135, 27, 133, 98, 40, 231, 135, 211, 109, 182, 56, 115, 126, 56, 121, 44, 231, 135, 243, 92, 4, 57, 112, 120, 248, 76, 44, 62, 220, 13, 131, 90, 63, 220, 23, 13, 206, 15, 183, 194, 79, 66, 60, 92, 132, 152, 231, 103, 225, 68, 93, 206, 243, 153, 138, 144, 170, 62, 188, 110, 218, 203, 249, 97, 13, 46, 85, 245, 97, 138, 60, 173, 170, 15, 139, 60, 200, 111, 54, 15, 79, 155, 205, 96, 240, 112, 63, 216, 106, 171, 15, 139, 101, 123, 107, 48, 47, 85, 181, 189, 25, 244, 167, 220, 60, 250, 60, 129, 128, 184, 92, 159, 42, 92, 130, 239, 139, 92, 174, 196, 81, 115, 159, 18, 199, 121, 58, 53, 67, 132, 223, 55, 170, 58, 31, 85, 232, 251, 218, 247, 77, 47, 63, 92, 248, 176, 92, 114, 105, 188, 197, 203, 57, 17, 33, 85, 126, 40, 6, 227, 152, 52, 32, 56, 67, 22, 211, 244, 88, 14, 127, 95, 124, 136, 83, 90, 12, 127, 159, 65, 161, 159, 18, 79, 205, 79, 249, 187, 152, 231, 163, 10, 225, 92, 63, 102, 85, 221, 168, 248, 48, 81, 123, 121, 84, 161, 227, 134, 62, 14, 170, 223, 213, 246, 230, 212, 96, 107, 163, 62, 101, 233, 39, 43, 31, 189, 30, 189, 237, 104, 234, 232, 248, 238, 198, 100, 191, 207, 82, 235, 163, 229, 79, 38, 60, 122, 235, 104, 60, 154, 220, 209, 220, 163, 227, 232, 238, 232, 254, 104, 234, 232, 248, 228, 228, 232, 28, 142, 94, 143, 214, 71, 75, 143, 174, 143, 30, 143, 150, 56, 90, 28, 13};