From 8db7e089655f682339fabbff6ddd7fdd18d132da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= Date: Sat, 25 Jun 2016 23:57:45 +0200 Subject: [PATCH] Fancy video output with font. --- prototypes/video/Makefile | 6 +- prototypes/video/boot.img | Bin 1474560 -> 1474560 bytes prototypes/video/init.cpp | 143 +++++++++++++++++++++++-- prototypes/video/pixelschrift.h | 179 ++++++++++++++++++++++++++++++++ 4 files changed, 315 insertions(+), 13 deletions(-) create mode 100644 prototypes/video/pixelschrift.h diff --git a/prototypes/video/Makefile b/prototypes/video/Makefile index ca509cb..65900a1 100644 --- a/prototypes/video/Makefile +++ b/prototypes/video/Makefile @@ -51,9 +51,9 @@ video.ker: $(OBJS) boot: image qemu-system-i386 \ -fda boot.img \ - -m 64 \ - -d cpu_reset,int \ - -serial stdio + -m 64 +# -serial stdio +# -d cpu_reset,int \ # -no-reboot \ # -no-shutdown \ diff --git a/prototypes/video/boot.img b/prototypes/video/boot.img index 55bc2036fa04471e8a662090f80dd0e8ca6d8d9d..03b7189186da85ed3a85530eb2c0645dbe3a4c2b 100644 GIT binary patch delta 16176 zcmch8d3;pW+5frsPI8A3G6N(KAmD|BfPl$_eXSD^3|kqAtS(_oAgp6D!C=8V5~4F= zZ0M-amO5x{&98MqQJ|<8p+>N7ul99m>#u0lg1F$)66M8tzu$A`PG%5){qJ}AJoj18 z^E~G{%RTo_2nH7igNvI7ImED^*X|hlx$^41K1vT|fT8Al)qzXYK|%G>J?hX_^|BLc zvCv8kZG=}FbtV@3>ArIHtfJnM8=2)8uYM7Wgd7pI`{YR9v^*8c32CF1erLB9e{+BF zxg*8r-!G1-9wpzSP4T2H_vj6tPQUi-yCMCCE8kCyAUPXM?p@)MD^n=vqHf7&?g_rb+ zd{;VP$V)4%9*q=+(8OTTO}K6$Q?wX_-LorfF`V%%*ACK#rzqxj=bDm`2lTPt#3f8ouom{@8WpTjQ=R$PHcHFBWh#w${B9 ze)qpV4djQpl*jYjgAy;kP>yc#4y+ zE!~5(ZF$pvh(y!VnD#;-H3!miHk(aP6jA_}uKi`Ph9kVrW$s3-k{EJ02h|hFhump1*ku{;;c;Tg>lSe#<8zBzs?GE@q=o zJ-7(TpoEd=++OCkg56Ms`%<^vJ8QdpdwuryvSHyI!Ij{1gePTlF&v16y9@)-7z^h( zq{bP}aY`aHoRcXDcQ{8bA78HPK$mV1g>!PHA}^eiCkZ2*V@RSPoKqkPbFk}x*Avd+ zimUpy2lv37#^d4a0@r~wIt!F?m6Uvn@%(Iic0tKspZmz^I`D5fOh+4zDs8Ihbf)2m zBQ*KD=T169lh2R)Q{9IR&nuV{4rOG)xbt-{96GNFQPuoOixD_?s2%h{ZjGNwaZ}{Z z@*$>c|78LTHGFbgYhc7-l25TsN1@vkIpxBCp_6aIC#9RuT>FdIr0#^}YNL=L!kGnD zlnh2W$j#|c8;0Sj$8bA&)j6!9%z~zE1tAWCoEWA+M_l{MV;srXLq5!m#^bKW$=J1; zt}Sr3VGen4>m-`)lC4gw;Ui6x6*)KlRnjVJk*S3;RXG#tzO&>LEH<_1tG_RpY;1jSnHo)Lxp9obD7~bpIh>yr%|x z8vZ60vxXiON}67ip^Q(j_?)mN#HJsRE0vMm<^9an8Lk7b916lH{Psys(S@h3#7?+6 z!Gc?-gC%@4PghmT>y#0J@? z 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 wK?)QCa)3fXVIU_c925a^fg(W$C<-(P> 0) & 0xFF; + fb[mib.pitch * y + 4 * x + 1] = (color >> 8) & 0xFF; + fb[mib.pitch * y + 4 * x + 0] = (color >> 16) & 0xFF; +} + +static char getDigit(uint32_t i) +{ + if(i >= 0 && i <= 9) { + return '0' + i; + } + return 'A' + (i-10); +} + +static void print_str(int x, int y, const char *text) +{ + const unsigned char *base = &MagickImage[10]; // HACKS! + int cx = x; + int cy = y; + while(*text) + { + char c = *text++; + + int gx = c % 32; + int gy = 8 * (c / 32); + + for(int py = 0; py < 8; py++) + { + unsigned char row = base[32 * (gy+py) + gx]; + for(int px = 0; px < 8; px++) + { + if((row & (1< 0) + { + buffer[len++] = getDigit(number % radix); + if(len >= length) + break; + number /= radix; + } + + int half = len / 2; + for(int i = 0; i < half; i++) + { + char c = buffer[i]; + buffer[i] = buffer[len - i - 1]; + buffer[len - i - 1] = c; + } + + buffer[len] = 0; + + return len; +} + +void strcpy(char *dst, const char *src) +{ + while((*dst++ = *src++)); +} + +void strcat(char *buffer, const char *text) +{ + while(*buffer++); // scroll to buffer end + buffer--; + while((*(buffer++) = *text++)); // copy text +} + extern "C" void init(multiboot_info_t const & data) { const char *msg = "You should not see this."; @@ -58,21 +157,17 @@ extern "C" void init(multiboot_info_t const & data) *(video++) = *msg++ | 0x0700; } - ModeInfoBlock *modeInfo = (ModeInfoBlock*)data.vbe_mode_info; + mib = *(ModeInfoBlock*)data.vbe_mode_info; - uint8_t *fb = (uint8_t*)modeInfo->physbase; - - for(int y = 0; y < modeInfo->Yres; y++) + for(int y = 0; y < mib.Yres; y++) { - for(int x = 0; x < modeInfo->Xres; x++) + for(int x = 0; x < mib.Xres; x++) { - uint32_t r = (x * 384 / modeInfo->Xres); - uint32_t g = (y * 384 / modeInfo->Yres); + uint32_t r = x % 256; + uint32_t g = y % 256; uint32_t b = 0x00; - fb[modeInfo->pitch * y + 4 * x + 2] = r; - fb[modeInfo->pitch * y + 4 * x + 1] = g; - fb[modeInfo->pitch * y + 4 * x + 0] = b; + setpixel(x, y, r | (g << 8) | (b << 16)); } } @@ -80,5 +175,33 @@ extern "C" void init(multiboot_info_t const & data) write_com(0x3F8, 'i'); write_com(0x3F8, '\n'); + const char *str = (const char*)MagickImage; + while(*str) { + write_com(0x3F8, *str++); + } + write_com(0x3F8, '\n'); + + print_str(16, 16, "Hello World!"); + + char buffer[256]; + char temp[128]; + strcpy(buffer, "X: "); + toString(temp, 128, mib.Xres, 10); strcat(buffer, temp); + strcat(buffer, " Y: "); + toString(temp, 128, mib.Yres, 10); strcat(buffer, temp); + print_str(16, 24, buffer); + + strcpy(buffer, "Pitch: "); + toString(temp, 128, mib.pitch, 10); strcat(buffer, temp); + strcat(buffer, " / "); + toString(temp, 128, mib.pitch / 4, 10); strcat(buffer, temp); + print_str(16, 32, buffer); + + write_com(0x3F8, 'B'); + write_com(0x3F8, 'y'); + write_com(0x3F8, 'e'); + write_com(0x3F8, '\n'); + + while(true); } diff --git a/prototypes/video/pixelschrift.h b/prototypes/video/pixelschrift.h new file mode 100644 index 0000000..749125d --- /dev/null +++ b/prototypes/video/pixelschrift.h @@ -0,0 +1,179 @@ +/* + pixelschrift.h (PNM). +*/ +static unsigned char + MagickImage[] = + { + 0x50, 0x34, 0x0A, 0x32, 0x35, 0x36, 0x20, 0x36, 0x34, 0x0A, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x50, 0x50, 0x20, 0xC0, 0x40, 0x20, 0x10, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x70, 0x20, 0x70, 0x70, 0x88, 0xF8, + 0x70, 0xF8, 0x70, 0x70, 0x00, 0x00, 0x10, 0x00, 0x40, 0x70, 0x00, 0x20, + 0x50, 0x50, 0x70, 0xC8, 0xA0, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x88, 0x60, 0x88, 0x88, 0x88, 0x80, 0x88, 0x08, 0x88, 0x88, + 0x30, 0x30, 0x20, 0x00, 0x20, 0x88, 0x00, 0x20, 0x00, 0xF8, 0xA0, 0x10, + 0xA0, 0x00, 0x40, 0x10, 0x50, 0x20, 0x00, 0x00, 0x00, 0x20, 0x98, 0x20, + 0x08, 0x08, 0x88, 0x80, 0x80, 0x10, 0x88, 0x88, 0x30, 0x30, 0x40, 0x70, + 0x10, 0x08, 0x00, 0x20, 0x00, 0x50, 0x70, 0x20, 0x40, 0x00, 0x40, 0x10, + 0x20, 0x70, 0x00, 0x70, 0x00, 0x20, 0xA8, 0x20, 0x10, 0x30, 0xF8, 0xF0, + 0xF0, 0x20, 0x70, 0x78, 0x00, 0x00, 0x80, 0x00, 0x08, 0x10, 0x00, 0x00, + 0x00, 0xF8, 0x28, 0x40, 0xA8, 0x00, 0x40, 0x10, 0x50, 0x20, 0x00, 0x00, + 0x00, 0x20, 0xC8, 0x20, 0x20, 0x08, 0x08, 0x08, 0x88, 0x40, 0x88, 0x08, + 0x00, 0x00, 0x40, 0x70, 0x10, 0x20, 0x00, 0x20, 0x00, 0x50, 0x70, 0x98, + 0x90, 0x00, 0x20, 0x20, 0x00, 0x00, 0x30, 0x00, 0x30, 0x40, 0x88, 0x20, + 0x40, 0x88, 0x08, 0x08, 0x88, 0x40, 0x88, 0x88, 0x30, 0x30, 0x20, 0x00, + 0x20, 0x00, 0x00, 0x20, 0x00, 0x50, 0x20, 0x18, 0x68, 0x00, 0x10, 0x40, + 0x00, 0x00, 0x10, 0x00, 0x30, 0x40, 0x70, 0x70, 0xF8, 0x70, 0x08, 0xF0, + 0x70, 0x40, 0x70, 0x70, 0x30, 0x10, 0x10, 0x00, 0x40, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0xF0, 0x70, 0xF0, 0xF8, + 0xF8, 0x70, 0x88, 0x70, 0x38, 0x88, 0x80, 0x88, 0x88, 0x70, 0xF0, 0x70, + 0xF0, 0x78, 0xF8, 0x88, 0x88, 0x88, 0x88, 0x88, 0xF8, 0x30, 0x40, 0x30, + 0x20, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x80, 0x88, 0x88, 0x20, + 0x08, 0x90, 0x80, 0xD8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x20, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x08, 0x20, 0x40, 0x10, 0x50, 0x00, 0xA8, 0x88, + 0x88, 0x80, 0x88, 0x80, 0x80, 0x80, 0x88, 0x20, 0x08, 0xA0, 0x80, 0xA8, + 0xC8, 0x88, 0x88, 0x88, 0x88, 0x80, 0x20, 0x88, 0x88, 0x88, 0x50, 0x88, + 0x10, 0x20, 0x20, 0x10, 0x00, 0x00, 0xB8, 0xF8, 0xF0, 0x80, 0x88, 0xF0, + 0xF0, 0x80, 0xF8, 0x20, 0x08, 0xC0, 0x80, 0xA8, 0xA8, 0x88, 0xF0, 0x88, + 0xF0, 0x70, 0x20, 0x88, 0x50, 0x88, 0x20, 0x50, 0x20, 0x20, 0x20, 0x10, + 0x00, 0x00, 0xA0, 0x88, 0x88, 0x80, 0x88, 0x80, 0x80, 0x98, 0x88, 0x20, + 0x88, 0xA0, 0x80, 0x88, 0x98, 0x88, 0x80, 0xA8, 0xA0, 0x08, 0x20, 0x88, + 0x50, 0xA8, 0x50, 0x20, 0x40, 0x20, 0x20, 0x10, 0x00, 0x00, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x80, 0x80, 0x88, 0x88, 0x20, 0x88, 0x90, 0x80, 0x88, + 0x88, 0x88, 0x80, 0x90, 0x90, 0x08, 0x20, 0x88, 0x20, 0xA8, 0x88, 0x20, + 0x80, 0x20, 0x10, 0x10, 0x00, 0x00, 0x70, 0x88, 0xF0, 0x70, 0xF0, 0xF8, + 0x80, 0x78, 0x88, 0x70, 0x70, 0x88, 0xF8, 0x88, 0x88, 0x70, 0x80, 0x68, + 0x88, 0xF0, 0x20, 0x70, 0x20, 0x50, 0x88, 0x20, 0xF8, 0x30, 0x10, 0x30, + 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x80, 0x00, 0x08, 0x00, 0x30, 0x00, 0x80, 0x00, 0x00, 0x80, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x20, 0xC0, 0x00, 0xA8, 0x10, 0x70, 0x80, 0x00, 0x08, 0x00, + 0x48, 0x00, 0x80, 0x20, 0x20, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, + 0x00, 0x50, 0x00, 0x08, 0xB0, 0x70, 0x68, 0x70, 0x40, 0x70, 0x80, 0x00, + 0x00, 0x90, 0x20, 0x50, 0xB0, 0x70, 0xF0, 0x78, 0xB0, 0x78, 0xE0, 0x88, + 0x88, 0x88, 0x88, 0x88, 0xF8, 0x20, 0x20, 0x20, 0x00, 0xA8, 0x00, 0x78, + 0xC8, 0x80, 0x98, 0x88, 0xE0, 0x88, 0xB0, 0x20, 0x20, 0xA0, 0x20, 0xA8, + 0xC8, 0x88, 0x88, 0x88, 0xC8, 0x80, 0x40, 0x88, 0x88, 0x88, 0x50, 0x88, + 0x10, 0x40, 0x20, 0x10, 0x50, 0x50, 0x00, 0x88, 0x88, 0x80, 0x88, 0xF8, + 0x40, 0x88, 0xC8, 0x20, 0x20, 0xC0, 0x20, 0xA8, 0x88, 0x88, 0x88, 0x88, + 0x80, 0x70, 0x40, 0x88, 0x50, 0xA8, 0x20, 0x88, 0x20, 0x20, 0x20, 0x20, + 0xA0, 0xA8, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x40, 0x78, 0x88, 0x20, + 0x20, 0xA0, 0x20, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x08, 0x40, 0x88, + 0x50, 0xA8, 0x50, 0x78, 0x40, 0x20, 0x20, 0x20, 0x00, 0x50, 0x00, 0x78, + 0xF0, 0x70, 0x78, 0x70, 0x40, 0x08, 0x88, 0x20, 0x20, 0x90, 0x70, 0x88, + 0x88, 0x70, 0xF0, 0x78, 0x80, 0xF0, 0x30, 0x70, 0x20, 0x50, 0x88, 0x08, + 0xF8, 0x18, 0x20, 0xC0, 0x00, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + };