'****************************************************************************** '* tv80.spin - TV text mode with 80x20 characters '* '* This is based on ideas and code from Debug_1pinTV by "Cluso99" '* '* (c) Juergen Buchmueller '* '* $Id: yaz80_demo.spin,v 1.8 2010-03-21 12:43:11 pm Exp $ '****************************************************************************** CON _xinfreq = 5_000_000 ' Quartz is 5MHz _clkmode = xtal1 + pll16x ' System clock is 80MHz #ifndef NTSC #ifndef PAL #define PAL #endif PAL #endif NTSC #ifdef NTSC '' NTSC 80x24 using a 6x10 font ocols = 80 ' number of columns orows = 24 ' number of rows ocolsfrq = 22_478 ' Hz per active pixel oequal1 = 6 ' number of equalization pulses oserr = 6 ' number of serration pulses oequal2 = 6 ' number of equalization pulses oblank1 = 9 ' number of blank lines oactive = 24*10 ' number of active lines oblank2 = 4 ' number of blank lines otsync = 39 ' temp sync pulse ohalf = 4439 ' vscl half line obackp = 4190 ' vscl back porch (sync to active) ofrontp = 4158 ' vscl front porch (active to sync) oequal = 4121 ' vscl equalization pulse (sync/2) osync = 4146 ' vscl sync pulse osynch = 4389 ' vscl half-sync oequalh = 4414 ' vscl half-equal ovsclch = 4120 ' vscl character ictra = 12 ' CTRA with PLLdiv ifrqa = 231701456 ' required FRQA value (5MHz*16) (xfrqa replaced by start routine) ifrqb = $4924_0000 ' 40/140 << 32 = 1,227,096,064 ifrqa_80MHz = 289626816 ' required FRQA value (5MHz*16) ifrqa_96MHz = 241355680 ' required FRQA value (6MHz*16) ifrqa_100MHz = 231701456 ' required FRQA value (6.25MHz*16) ifrqa_104MHz = 222789856 ' required FRQA value (6.5MHz*16) ifrqa_108MHz = 214538384 ' required FRQA value (13.5MHz*8) #endif '-------------------------------------------------------------------------------------------------- #ifdef PAL '' PAL 80x24 using a 6x10 font ocols = 80 ' number of columns orows = 24 ' number of rows ocolsfrq = 22_321 ' Hz per active pixel oequal1 = 4 ' number of equalization pulses oserr = 5 ' number of serration pulses oequal2 = 5 ' number of equalization pulses oblank1 = 38 ' number of blank lines oactive = 24*10 ' number of active lines oblank2 = 26 ' number of blank lines otsync = 39 ' temp sync pulse ohalf = 4438 ' vscl half line obackp = 4184 ' vscl back porch (sync to active) ofrontp = 4155 ' vscl front porch (active to sync) oequal = 4120 ' vscl equalization pulse (sync/2) osync = 4145 ' vscl sync pulse osynch = 4389 ' vscl half-sync oequalh = 4414 ' vscl half-equal ovsclch = 4120 ' vscl character ictra = 12 ' CTRA with PLLdiv ifrqa = 287604888 ' required FRQA value (5MHz*16) (xfrqa replaced by start routine) ifrqb = $4924_0000 ' 40/140 << 32 = 1,227,096,064 ifrqa_80MHz = 287604888 ' required FRQA value (5MHz*16) ifrqa_96MHz = 239669904 ' required FRQA value (6MHz*16) ifrqa_100MHz = 230083104 ' required FRQA value (6.25MHz*16) ifrqa_104MHz = 221233760 ' required FRQA value (6.5MHz*16) ifrqa_108MHz = 213039920 ' required FRQA value (13.5MHz*8) #endif '-------------------------------------------------------------------------------------------------- flash = 1<<4 deccm = %00000001 ' DEC cursor mode (0: off, 1: on) decim = %00000010 ' DEC insert mode decom = %00000100 ' DEC origin mode deccr = %00001000 ' DEC send CRLF or LF (0: LF, 1: CRLF) decck = %00010000 ' DEC send cursor keys decawm = %00100000 ' DEC auto wrap mode decarm = %01000000 ' DEC auto repeat mode decrm = %10000000 ' DEC report mouse attr_highlight = %00000001 attr_underline = %00000010 attr_blinking = %00000100 attr_inverse = %00001000 attr_fg = 5 ' 3 bits attr_bg = 8 ' 3 bits VAR long cogs[2] long command long params[2] long stack[64] long tabs[4] long screen[ocols*orows/4] long vtflag ' decXXX bit flags long cur_mode ' cursor mode (24 bits) word attr ' cursor attributes + colors word cur_pos ' cursor position word cur_row ' cursor row offset byte inverse ' inverse display flag byte dspctl ' display control characters flag byte cur_chr ' character under the cursor byte cur_x ' cursor column byte cur_y ' cursor row byte scr_top ' scroll range top byte scr_bottom ' scroll range bottom byte data ' data byte sent to the terminal byte esc ' ESC decoding status byte esc_argc ' ESC argument list count byte esc_args[8] ' ESC argument list byte esc_ques ' ESC CSI? flag PUB start(tvPin) : okay | i ' bitmap is the address of the bitmap buffer * 32 + the tvPin number stop Setforxtalfreq 'set ifrqa in hub for the current clkfreq before cognew params[0] := tvPin params[1] := @screen okay := cogs[0] := COGNEW(@entry, @params) + 1 okay := cogs[1] := COGNEW(vt100(@command), @stack) + 1 PUB stop if cogs[1] COGSTOP(cogs[1] - 1) cogs[1] := 0 if cogs[0] COGSTOP(cogs[0] - 1) cogs[0] := 0 PUB chr(c) command := $100 | c repeat while command PUB str(str_ptr) | i repeat i from 0 to strsize(str_ptr) chr(byte[str_ptr][i]) PUB get_command return @command PRI Setforxtalfreq '' Set the frqa value depending on the actual clkfreq Case clkfreq 80_000_000: xfrqa := ifrqa_80MHz ' 5.00 MHz 96_000_000: xfrqa := ifrqa_96MHz ' 6.00 MHz 100_000_000: xfrqa := ifrqa_100MHz ' 6.25 MHz 104_000_000: xfrqa := ifrqa_104MHz ' 6.50 MHz 108_000_000: xfrqa := ifrqa_108MHz '13.50 MHz PRI vt100(command_ptr) | i tabs[0] := $01010100 tabs[1] := tabs[2] := tabs[3] := $01010101 repeat cur_row := cur_y * ocols cur_pos := cur_row + cur_x cur_chr := byte[@screen][cur_pos] byte[@screen][cur_pos] := $7f repeat while long[command_ptr] == 0 byte[@screen][cur_pos] := cur_chr data := long[command_ptr] & $7f long[command_ptr] := 0 if esc == 1 case data "[": ' control sequence introducer esc := 2 esc_argc := 0 bytefill(esc_args, 0, 8) other: esc := 0 elseif esc == 2 esc_ques := 0 case data "?": ' query information esc_ques := 1 ";": if esc_argc < 7 esc_argc++ esc_args[esc_argc] := 0 "0".."9": esc_args[esc_argc] *= 10 esc_args[esc_argc] += data - "0" other: esc := 0 case data "h": ' [...h - set some state to on csi_h_lc "l": ' [...l - set some state to off csi_l_lc "c": ' [...c - set cursor mode csi_c_lc "m": ' [...m - set or reset attribute(s) csi_m_lc "n": ' [...n - respond status or cursor csi_n_lc if esc_ques == 0 case data "A": ' [...A - cursor up csi_A "B","e": ' [...B - cursor down ' [...e - cursor down (variant) csi_B "C","a": ' [...C - cursor right ' [...a - cursor right (variant) csi_C "D": ' [...D - cursor left csi_D "E": ' [...D - rows down csi_E "F": ' [...D - rows up csi_F "G","`": ' [...G - set cursor column ' [...` - set cursor column (variant) csi_G "H": ' [...H - set cursor position csi_H "J": ' [...J - clear screen csi_J "K": ' [...K - clear cursor row csi_K "L": ' [...L - insert line(s) csi_L "M": ' [...M - delete line(s) csi_M "P": ' [...P - delete character(s) csi_P else case data 8: ' back space if cur_x > 0 cur_x-- else cur_x := ocols - 1 if cur_y > 0 cur_y-- else scroll_dn 9: ' tab repeat until (tabs[cur_x >> 5] >> (cur_x & 31)) & 1 emit(" ") 10: ' line feed cur_y++ if cur_y == orows scroll_up cur_y := orows -1 11: ' vertical tab cur_y-- if cur_y =< 0 scroll_dn cur_y := 0 12: ' form feed clear_range(0, orows*ocols-1) cur_x := 0 cur_y := 0 13: ' carriage return cur_x := 0 27: ' escape esc := 1 other: emit(data) PRI emit(ch) byte[@screen][cur_pos] := ch cur_x++ if cur_x == ocols cur_x := 0 cur_y++ if cur_y == orows scroll_up cur_y := orows - 1 '***************************************************************** ' gotoxy make sure the cursor coordinates are within the bounds ' PRI gotoxy cur_x := (cur_x #> 0) <# (ocols - 1) cur_y := (cur_y #> 0) <# (orows - 1) '***************************************************************** ' clear_range fill a range of the screen with spaces (blanks) ' PRI clear_range(beg, end) bytefill(@screen + beg, $20, end + 1 - beg) '***************************************************************** ' scroll_dn scroll the entire screen down by a line ' PRI scroll_dn longmove(@screen + ocols, @screen, (orows - 1) * ocols / 4) longfill(@screen, $20202020, ocols / 4) '***************************************************************** ' scroll_up scroll the entire screen up by a line ' PRI scroll_up longmove(@screen, @screen + ocols, (orows - 1) * ocols / 4) longfill(@screen + (orows - 1) * ocols, $20202020, ocols / 4) '***************************************************************** ' csi_A cursor up ' PRI csi_A cur_y -= esc_args[0] #> 1 gotoxy '***************************************************************** ' csi_B cursor down ' PRI csi_B cur_y += esc_args[0] #> 1 gotoxy '***************************************************************** ' csi_C cursor right ' PRI csi_C cur_x += esc_args[0] #> 1 gotoxy '***************************************************************** ' csi_D cursor left ' PRI csi_D cur_x -= esc_args[0] #> 1 gotoxy '***************************************************************** ' csi_E rows up ' PRI csi_E cur_x := 0 cur_y -= esc_args[0] #> 1 gotoxy '***************************************************************** ' csi_F rows down ' PRI csi_F cur_x := 0 cur_y += esc_args[0] #> 1 gotoxy '***************************************************************** ' csi_G set cursor column ' PRI csi_G cur_x := (esc_args[0] #> 1) - 1 gotoxy '***************************************************************** ' csi_H set cursor address ' PRI csi_H cur_x := (esc_args[0] #> 1) - 1 cur_y := (esc_args[1] #> 1) - 1 gotoxy '***************************************************************** ' csi_J clear a range of the screen ' PRI csi_J case esc_args[0] 0: ' clear from cursor to end of screen clear_range(cur_pos, orows*ocols-1) 1: ' clear from start of screen to cursor clear_range(0, cur_pos) 2: ' clear entire screen clear_range(0, orows*ocols-1) '***************************************************************** ' csi_L clear a range of the cursor row ' PRI csi_K case esc_args[0] 0: ' clear from cursor to end of row clear_range(cur_pos, cur_row + ocols - 1) 1: ' clear from start of row to cursor clear_range(cur_row, cur_pos) 2: ' clear entire row clear_range(cur_row, cur_row + ocols - 1) '***************************************************************** ' csi_L insert one or more empty rows at the cursor row ' PRI csi_L esc_args[0] := esc_args[0] #> 1 repeat while esc_args[0]-- if cur_y < orows - 1 longmove(@screen + cur_row + ocols, @screen + cur_row, (orows - cur_y - 1) * ocols / 4) clear_range(cur_row, cur_row + ocols - 1) '***************************************************************** ' csi_M delete one or more rows at the cursor row ' PRI csi_M esc_args[0] := esc_args[0] #> 1 repeat while esc_args[0]-- if cur_y < orows - 1 longmove(@screen + cur_row, @screen + cur_row + ocols, (orows - cur_y - 1) * ocols / 4) clear_range((orows - 1) * ocols, orows * ocols - 1) '***************************************************************** ' csi_P delete one or more characters at the cursor position ' PRI csi_P esc_args[0] := esc_args[0] #> 1 repeat while esc_args[0]-- if cur_x < ocols - 1 bytemove(@screen + cur_pos, @screen + cur_pos + 1, ocols - cur_x - 1) byte[@screen][cur_row + ocols - 1] := $20 '***************************************************************** ' csi_h set some state to on ' PRI csi_h_lc | i repeat i from 0 to esc_argc-1 if esc_ques case esc_args[i] 1: ' [?1h set cursor keys mode on vtflag |= decck 2: ' [?2h set 132 column mode ' Bwahahaha! 5: ' [?5h set screen inverse mode on inverse := 1 6: ' [?6h DEC origin mode on vtflag |= decom cur_x := 0 cur_y := scr_top 7: ' [?7h DEC auto wrap mode on vtflag |= decawm 8: ' [?8h DEC auto repeat mode on vtflag |= decarm 9: ' [?9h DEC report mouse mode on vtflag |= decrm 25: ' [?25h DEC cursor mode on vtflag |= deccm else case esc_args[i] 3: ' [3h control display mode on dspctl := 1 4: ' [4h DEC insert mode on vtflag |= decim 5: ' [5h DEC auto CR mode on vtflag |= deccr '***************************************************************** ' csi_l set some state to off ' PRI csi_l_lc | i repeat i from 0 to esc_argc-1 if esc_ques case esc_args[i] 1: ' [?1h set cursor keys mode on vtflag &= !decck 2: ' [?2h set 80 column mode ' anyway 5: ' [?5h set screen inverse mode off inverse := 0 6: ' [?6h DEC origin mode off vtflag &= !decom cur_x := 0 cur_y := 0 7: ' [?7h DEC auto wrap mode off vtflag &= !decawm 8: ' [?8h DEC auto repeat mode off vtflag &= !decarm 9: ' [?9h DEC report mouse mode off vtflag &= !decrm 25: ' [?25h DEC cursor mode off vtflag &= !deccm else case esc_args[i] 3: ' [3h control display mode off dspctl := 0 4: ' [4h DEC insert mode off vtflag &= !decim 5: ' [5h DEC auto CR mode off vtflag &= !deccr '***************************************************************** ' csi_c set cursor mode ' PRI csi_c_lc | i if esc_ques == 0 cur_mode := esc_args[0] + esc_args[1] << 8 + esc_args[2] << 16 '***************************************************************** ' csi_m set one or more mode attributes ' PRI csi_m_lc | i repeat i from 0 to esc_argc-1 case esc_args[i] 0: ' reset all attr := 0 1: ' highlight on attr |= attr_highlight 2: ' highlight off attr &= !attr_highlight 4: ' underline on attr |= attr_underline 5: ' blinking on attr |= attr_blinking 7: ' inverse on attr |= attr_inverse 10: ' primary font, no ctrl, no meta ' TODO 11: ' alternate font, ctrl chars, low half, meta off ' TODO 12: ' alternate font, ctrl chars, high half, mea on ' TODO 21..22: ' highlight on attr |= attr_highlight 24: ' underline off attr &= !attr_underline 25: ' blinking off attr &= !attr_blinking 27: ' inverse off attr &= !attr_inverse 30..37: ' foreground color 0..7 attr := (attr & !(7 << attr_fg)) | (esc_args[i] - 30) << attr_fg 38: ' default color and underline on attr := (attr & !(7 << attr_fg)) attr |= attr_underline 39: ' default color and underline off attr := (attr & !(7 << attr_fg)) attr &= !attr_underline 40: ' default background attr := (attr & !(7 << attr_bg)) 41..47: ' background color 1..7 attr := (attr & !(7 << attr_bg)) | (esc_args[i] - 40) << attr_bg 49: ' default background attr := (attr & !(7 << attr_bg)) '***************************************************************** ' csi_n respond status or cursor ' PRI csi_n_lc | i repeat i from 0 to esc_argc-1 case esc_args[i] 5: ' [5n - respond status ' TODO 6: ' [6n - respond cursor DAT org 0 entry mov t1, PAR rdlong pin_no, t1 add t1, #4 rdlong screen_ptr, t1 add screen_end, screen_ptr mov FRQB, xfrqb ' default = 40/140 movi CTRA, #ictra mov FRQA, xfrqa movs CTRB, pin_no ' set pin mov count, #1 shl count, pin_no mov DIRA, count ' set pin mask mov count, pin_no shr count, #3 movd VCFG, count ' set VGroup mov count, #1 and pin_no, #7 shl count, pin_no movs VCFG, count ' set VPins movi VCFG, #%0_01_0_0_0_000 ' VGA mode, 1 bit per pixel '************************************************************************************************** frame add framectr, #1 ' inc frame counter mov rows, #oequal1 :equalizing1 mov vscl, xequal ' equalizing pulse (short) waitvid xff00, #0 movi CTRB, #0 ' turn off blank mov vscl, xequalh ' equalizing pulse (long) waitvid xff00, #0 movi CTRB, #%0_00110_000 ' turn on blank djnz rows, #:equalizing1 '-------------------------------------------------------------------------------------------------- mov rows, #oserr ' serration pulses :serration mov vscl, xsynch ' serration pulse (long) waitvid xff00, #0 movi CTRB, #0 ' turn off blank mov vscl, xsync ' serration pulse (short) waitvid xff00, #0 movi CTRB, #%0_00110_000 ' turn on blank djnz rows, #:serration '-------------------------------------------------------------------------------------------------- mov rows, #oequal2 :equalizing2 mov vscl, xequal ' equalizing pulse (short) waitvid xff00, #0 movi CTRB, #0 ' turn off blank mov vscl, xequalh ' equalizing pulse (long) waitvid xff00, #0 movi CTRB, #%0_00110_000 ' turn on blank djnz rows, #:equalizing2 '================================================================================================== mov rows, #oblank1 :doblank1 mov vscl, xsync ' 4.7uSec @ -40 IRE waitvid xff00, #0 movi CTRB, #0 ' turn off blank mov vscl, xsynch ' blank line waitvid xff00, #0 movi CTRB, #%0_00110_000 ' turn on blank mov vscl, xhalf ' half line ??? waitvid xff00, #0 djnz rows, #:doblank1 '================================================================================================== 'display active lines mov fontindex, font_ptr mov scrptr0, screen_ptr ' initialize bitmap pointer mov rows, #oactive doactive mov vscl, xsync ' 4.7uSec @ -40 IRE waitvid xff00, #0 movi CTRB, #0 ' turn off blank mov count, #ocols/4 ' characters per line / 4, since we do 4 at a time mov vscl, xbackp ' back porch waitvid xff00, #0 movi CTRB, #%0_00110_000 ' turn on blank mov vscl, xvsclch ' 1 PLLA per pixel, 6 PLLA per frame mov scrptr, scrptr0 '-------------------------------------------------------------------------------------------------- :active rdlong ch2, scrptr ' get 4 characters add scrptr, #4 mov ch1, ch2 and ch1, #%01111111 add ch1, fontindex ' + fontindex = address of font long rdbyte bits0, ch1 ' read to bits0 ror ch2, #8 mov ch1, ch2 and ch1, #%01111111 add ch1, fontindex ' + fontindex = address of font long rdbyte bits1, ch1 ' read to bits0 shl bits1, #6 or bits0, bits1 ror ch2, #8 mov ch1, ch2 and ch1, #%01111111 add ch1, fontindex ' + fontindex = address of font long rdbyte bits1, ch1 ' read to bits0 shl bits1, #12 or bits0, bits1 ror ch2, #8 mov ch1, ch2 and ch1, #%01111111 add ch1, fontindex ' + fontindex = address of font long rdbyte bits1, ch1 ' read to bits0 shl bits1, #18 or bits0, bits1 waitvid xff00, bits0 ' output to screen djnz count, #:active ' do entire line '-------------------------------------------------------------------------------------------------- add fontindex, #128 cmp fontindex, font_end WZ if_z mov fontindex, font_ptr if_z add scrptr0, #ocols mov vscl, xfrontp ' front porch waitvid xff00, #0 ' output blank djnz rows, #doactive ' next row '================================================================================================== mov rows, #oblank2 :doblank2 mov vscl, xsync ' 4.7uSec @ -40 IRE waitvid xff00, #0 movi CTRB, #0 ' turn off blank mov vscl, xsynch ' blank line waitvid xff00, #0 movi CTRB, #%0_00110_000 ' turn on blank mov vscl, xhalf ' half line ??? waitvid xff00, #0 djnz rows, #:doblank2 '================================================================================================== jmp #frame '-------------------------------------------------------------------------------------------------- 'constants > $1FF xhalf long ohalf xbackp long obackp xfrontp long ofrontp xequal long oequal xsync long osync xsynch long osynch xequalh long oequalh xvsclch long ovsclch xfrqa long ifrqa xfrqb long ifrqb xff00 long $ff00 ' white / black low_word long $ffff x20202020 long $20202020 x7f long $7f font_ptr long @@@font font_end long @@@font + 128*10 pin_no long 0 screen_ptr long 0-0 screen_end long ocols*orows*2 t1 long 0 ch1 long 0 ch2 long 0 bits0 long 0 ' 1st bit mask bits1 long 0 ' 2nd bit mask fontindex long 0 scrptr0 long 0 ' pointer to screen data per character row scrptr long 0 ' pointer to screen data per scanline framectr long 0 count long 0 ' all purpose counter rows long 0 ' row counter '************************************************************************************************** fit $1f0 '************************************************************************************************** tabs_reset long $01010100 long $01010101 font ' scanrow 0 byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ ' scanrow 1 byte $3e ' .#####.. byte $3e ' .#####.. byte $08 ' ...#.... byte $20 ' .....#.. byte $04 ' ..#..... byte $3e ' .#####.. byte $00 ' ........ byte $1c ' ..###... byte $08 ' ...#.... byte $00 ' ........ byte $3e ' .#####.. byte $00 ' ........ byte $08 ' ...#.... byte $00 ' ........ byte $1c ' ..###... byte $1c ' ..###... byte $3e ' .#####.. byte $1c ' ..###... byte $1c ' ..###... byte $1c ' ..###... byte $1c ' ..###... byte $00 ' ........ byte $1c ' ..###... byte $20 ' .....#.. byte $3e ' .#####.. byte $08 ' ...#.... byte $1c ' ..###... byte $1c ' ..###... byte $3e ' .#####.. byte $3e ' .#####.. byte $3e ' .#####.. byte $3e ' .#####.. byte $00 ' ........ byte $08 ' ...#.... byte $14 ' ..#.#... byte $14 ' ..#.#... byte $08 ' ...#.... byte $06 ' .##..... byte $04 ' ..#..... byte $0c ' ..##.... byte $10 ' ....#... byte $04 ' ..#..... byte $08 ' ...#.... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $1c ' ..###... byte $08 ' ...#.... byte $1c ' ..###... byte $1c ' ..###... byte $10 ' ....#... byte $3e ' .#####.. byte $18 ' ...##... byte $3e ' .#####.. byte $1c ' ..###... byte $1c ' ..###... byte $00 ' ........ byte $00 ' ........ byte $10 ' ....#... byte $00 ' ........ byte $04 ' ..#..... byte $1c ' ..###... byte $1c ' ..###... byte $08 ' ...#.... byte $1e ' .####... byte $1c ' ..###... byte $1e ' .####... byte $3e ' .#####.. byte $3e ' .#####.. byte $3c ' ..####.. byte $22 ' .#...#.. byte $1c ' ..###... byte $20 ' .....#.. byte $22 ' .#...#.. byte $02 ' .#...... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $1c ' ..###... byte $1e ' .####... byte $1c ' ..###... byte $1e ' .####... byte $1c ' ..###... byte $3e ' .#####.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $3e ' .#####.. byte $08 ' ...#.... byte $08 ' ...#.... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $18 ' ...##... byte $00 ' ........ byte $02 ' .#...... byte $00 ' ........ byte $20 ' .....#.. byte $00 ' ........ byte $10 ' ....#... byte $00 ' ........ byte $02 ' .#...... byte $08 ' ...#.... byte $20 ' .....#.. byte $02 ' .#...... byte $0c ' ..##.... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $08 ' ...#.... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $10 ' ....#... byte $08 ' ...#.... byte $04 ' ..#..... byte $04 ' ..#..... byte $14 ' ..#.#... ' scanrow 2 byte $22 ' .#...#.. byte $02 ' .#...... byte $08 ' ...#.... byte $20 ' .....#.. byte $08 ' ...#.... byte $22 ' .#...#.. byte $20 ' .....#.. byte $22 ' .#...#.. byte $04 ' ..#..... byte $08 ' ...#.... byte $00 ' ........ byte $08 ' ...#.... byte $2a ' .#.#.#.. byte $08 ' ...#.... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $28 ' ...#.#.. byte $14 ' ..#.#... byte $20 ' .....#.. byte $22 ' .#...#.. byte $08 ' ...#.... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $00 ' ........ byte $08 ' ...#.... byte $14 ' ..#.#... byte $14 ' ..#.#... byte $3c ' ..####.. byte $26 ' .##..#.. byte $0a ' .#.#.... byte $0c ' ..##.... byte $08 ' ...#.... byte $08 ' ...#.... byte $2a ' .#.#.#.. byte $08 ' ...#.... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $20 ' .....#.. byte $22 ' .#...#.. byte $0c ' ..##.... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $18 ' ...##... byte $02 ' .#...... byte $04 ' ..#..... byte $20 ' .....#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $0c ' ..##.... byte $00 ' ........ byte $08 ' ...#.... byte $00 ' ........ byte $08 ' ...#.... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $14 ' ..#.#... byte $24 ' ..#..#.. byte $22 ' .#...#.. byte $24 ' ..#..#.. byte $02 ' .#...... byte $02 ' .#...... byte $02 ' .#...... byte $22 ' .#...#.. byte $08 ' ...#.... byte $20 ' .....#.. byte $12 ' .#..#... byte $02 ' .#...... byte $36 ' .##.##.. byte $26 ' .##..#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $08 ' ...#.... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $20 ' .....#.. byte $1c ' ..###... byte $08 ' ...#.... byte $08 ' ...#.... byte $08 ' ...#.... byte $00 ' ........ byte $18 ' ...##... byte $00 ' ........ byte $02 ' .#...... byte $00 ' ........ byte $20 ' .....#.. byte $00 ' ........ byte $28 ' ...#.#.. byte $00 ' ........ byte $02 ' .#...... byte $00 ' ........ byte $00 ' ........ byte $02 ' .#...... byte $08 ' ...#.... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $08 ' ...#.... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $08 ' ...#.... byte $08 ' ...#.... byte $08 ' ...#.... byte $2a ' .#.#.#.. byte $2a ' .#.#.#.. ' scanrow 3 byte $22 ' .#...#.. byte $02 ' .#...... byte $08 ' ...#.... byte $20 ' .....#.. byte $10 ' ....#... byte $36 ' .##.##.. byte $10 ' ....#... byte $22 ' .#...#.. byte $1e ' .####... byte $10 ' ....#... byte $00 ' ........ byte $08 ' ...#.... byte $1c ' ..###... byte $04 ' ..#..... byte $36 ' .##.##.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $10 ' ....#... byte $14 ' ..#.#... byte $20 ' .....#.. byte $14 ' ..#.#... byte $1c ' ..###... byte $02 ' .#...... byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $00 ' ........ byte $08 ' ...#.... byte $14 ' ..#.#... byte $3e ' .#####.. byte $0a ' .#.#.... byte $10 ' ....#... byte $0a ' .#.#.... byte $04 ' ..#..... byte $04 ' ..#..... byte $10 ' ....#... byte $1c ' ..###... byte $08 ' ...#.... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $10 ' ....#... byte $32 ' .#..##.. byte $08 ' ...#.... byte $20 ' .....#.. byte $20 ' .....#.. byte $14 ' ..#.#... byte $1e ' .####... byte $02 ' .#...... byte $10 ' ....#... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $0c ' ..##.... byte $0c ' ..##.... byte $04 ' ..#..... byte $3e ' .#####.. byte $10 ' ....#... byte $20 ' .....#.. byte $20 ' .....#.. byte $22 ' .#...#.. byte $24 ' ..#..#.. byte $02 ' .#...... byte $24 ' ..#..#.. byte $02 ' .#...... byte $02 ' .#...... byte $02 ' .#...... byte $22 ' .#...#.. byte $08 ' ...#.... byte $20 ' .....#.. byte $0a ' .#.#.... byte $02 ' .#...... byte $2a ' .#.#.#.. byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $02 ' .#...... byte $08 ' ...#.... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $14 ' ..#.#... byte $14 ' ..#.#... byte $10 ' ....#... byte $2a ' .#.#.#.. byte $08 ' ...#.... byte $04 ' ..#..... byte $10 ' ....#... byte $00 ' ........ byte $08 ' ...#.... byte $1c ' ..###... byte $1a ' .#.##... byte $1c ' ..###... byte $2c ' ..##.#.. byte $1c ' ..###... byte $08 ' ...#.... byte $2c ' ..##.#.. byte $1a ' .#.##... byte $0c ' ..##.... byte $20 ' .....#.. byte $12 ' .#..#... byte $08 ' ...#.... byte $16 ' .##.#... byte $1a ' .#.##... byte $1c ' ..###... byte $1a ' .#.##... byte $2c ' ..##.#.. byte $1a ' .#.##... byte $3c ' ..####.. byte $3e ' .#####.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $3e ' .#####.. byte $08 ' ...#.... byte $08 ' ...#.... byte $08 ' ...#.... byte $10 ' ....#... byte $14 ' ..#.#... ' scanrow 4 byte $22 ' .#...#.. byte $02 ' .#...... byte $08 ' ...#.... byte $20 ' .....#.. byte $3c ' ..####.. byte $2a ' .#.#.#.. byte $0a ' .#.#.... byte $3e ' .#####.. byte $24 ' ..#..#.. byte $3e ' .#####.. byte $3e ' .#####.. byte $2a ' .#.#.#.. byte $08 ' ...#.... byte $3e ' .#####.. byte $2a ' .#.#.#.. byte $2a ' .#.#.#.. byte $3e ' .#####.. byte $3a ' .#.###.. byte $3a ' .#.###.. byte $2e ' .###.#.. byte $2e ' .###.#.. byte $2a ' .#.#.#.. byte $14 ' ..#.#... byte $3e ' .#####.. byte $08 ' ...#.... byte $1c ' ..###... byte $04 ' ..#..... byte $3e ' .#####.. byte $2e ' .###.#.. byte $2e ' .###.#.. byte $3a ' .#.###.. byte $3a ' .#.###.. byte $00 ' ........ byte $08 ' ...#.... byte $00 ' ........ byte $14 ' ..#.#... byte $1c ' ..###... byte $08 ' ...#.... byte $04 ' ..#..... byte $02 ' .#...... byte $04 ' ..#..... byte $10 ' ....#... byte $3e ' .#####.. byte $3e ' .#####.. byte $00 ' ........ byte $3e ' .#####.. byte $00 ' ........ byte $08 ' ...#.... byte $2a ' .#.#.#.. byte $08 ' ...#.... byte $1c ' ..###... byte $18 ' ...##... byte $12 ' .#..#... byte $20 ' .....#.. byte $1e ' .####... byte $08 ' ...#.... byte $1c ' ..###... byte $3c ' ..####.. byte $00 ' ........ byte $0c ' ..##.... byte $02 ' .#...... byte $00 ' ........ byte $20 ' .....#.. byte $10 ' ....#... byte $2c ' ..##.#.. byte $22 ' .#...#.. byte $1c ' ..###... byte $02 ' .#...... byte $24 ' ..#..#.. byte $0e ' .###.... byte $0e ' .###.... byte $32 ' .#..##.. byte $3e ' .#####.. byte $08 ' ...#.... byte $20 ' .....#.. byte $06 ' .##..... byte $02 ' .#...... byte $2a ' .#.#.#.. byte $32 ' .#..##.. byte $22 ' .#...#.. byte $1e ' .####... byte $22 ' .#...#.. byte $1e ' .####... byte $1c ' ..###... byte $08 ' ...#.... byte $22 ' .#...#.. byte $14 ' ..#.#... byte $22 ' .#...#.. byte $08 ' ...#.... byte $08 ' ...#.... byte $08 ' ...#.... byte $08 ' ...#.... byte $08 ' ...#.... byte $3e ' .#####.. byte $3e ' .#####.. byte $00 ' ........ byte $10 ' ....#... byte $20 ' .....#.. byte $26 ' .##..#.. byte $22 ' .#...#.. byte $32 ' .#..##.. byte $22 ' .#...#.. byte $1c ' ..###... byte $32 ' .#..##.. byte $26 ' .##..#.. byte $08 ' ...#.... byte $20 ' .....#.. byte $0a ' .#.#.... byte $08 ' ...#.... byte $2a ' .#.#.#.. byte $26 ' .##..#.. byte $22 ' .#...#.. byte $26 ' .##..#.. byte $32 ' .#..##.. byte $26 ' .##..#.. byte $02 ' .#...... byte $08 ' ...#.... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $14 ' ..#.#... byte $22 ' .#...#.. byte $10 ' ....#... byte $04 ' ..#..... byte $00 ' ........ byte $10 ' ....#... byte $00 ' ........ byte $2a ' .#.#.#.. ' scanrow 5 byte $22 ' .#...#.. byte $02 ' .#...... byte $08 ' ...#.... byte $20 ' .....#.. byte $08 ' ...#.... byte $36 ' .##.##.. byte $06 ' .##..... byte $14 ' ..#.#... byte $28 ' ...#.#.. byte $10 ' ....#... byte $00 ' ........ byte $1c ' ..###... byte $2a ' .#.#.#.. byte $04 ' ..#..... byte $36 ' .##.##.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $06 ' .##..... byte $14 ' ..#.#... byte $20 ' .....#.. byte $14 ' ..#.#... byte $08 ' ...#.... byte $08 ' ...#.... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $00 ' ........ byte $08 ' ...#.... byte $00 ' ........ byte $3e ' .#####.. byte $28 ' ...#.#.. byte $04 ' ..#..... byte $2a ' .#.#.#.. byte $00 ' ........ byte $04 ' ..#..... byte $10 ' ....#... byte $1c ' ..###... byte $08 ' ...#.... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $04 ' ..#..... byte $26 ' .##..#.. byte $08 ' ...#.... byte $02 ' .#...... byte $20 ' .....#.. byte $3e ' .#####.. byte $20 ' .....#.. byte $22 ' .#...#.. byte $04 ' ..#..... byte $22 ' .#...#.. byte $20 ' .....#.. byte $0c ' ..##.... byte $00 ' ........ byte $04 ' ..#..... byte $3e ' .#####.. byte $10 ' ....#... byte $08 ' ...#.... byte $2a ' .#.#.#.. byte $3e ' .#####.. byte $24 ' ..#..#.. byte $02 ' .#...... byte $24 ' ..#..#.. byte $02 ' .#...... byte $02 ' .#...... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $08 ' ...#.... byte $20 ' .....#.. byte $0a ' .#.#.... byte $02 ' .#...... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $02 ' .#...... byte $2a ' .#.#.#.. byte $0a ' .#.#.... byte $20 ' .....#.. byte $08 ' ...#.... byte $22 ' .#...#.. byte $14 ' ..#.#... byte $2a ' .#.#.#.. byte $14 ' ..#.#... byte $08 ' ...#.... byte $04 ' ..#..... byte $08 ' ...#.... byte $2a ' .#.#.#.. byte $04 ' ..#..... byte $10 ' ....#... byte $00 ' ........ byte $00 ' ........ byte $3c ' ..####.. byte $22 ' .#...#.. byte $02 ' .#...... byte $22 ' .#...#.. byte $3e ' .#####.. byte $08 ' ...#.... byte $32 ' .#..##.. byte $22 ' .#...#.. byte $08 ' ...#.... byte $20 ' .....#.. byte $06 ' .##..... byte $08 ' ...#.... byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $02 ' .#...... byte $1c ' ..###... byte $08 ' ...#.... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $08 ' ...#.... byte $22 ' .#...#.. byte $08 ' ...#.... byte $08 ' ...#.... byte $08 ' ...#.... byte $08 ' ...#.... byte $00 ' ........ byte $14 ' ..#.#... ' scanrow 6 byte $22 ' .#...#.. byte $02 ' .#...... byte $08 ' ...#.... byte $20 ' .....#.. byte $10 ' ....#... byte $22 ' .#...#.. byte $02 ' .#...... byte $14 ' ..#.#... byte $20 ' .....#.. byte $08 ' ...#.... byte $00 ' ........ byte $08 ' ...#.... byte $1c ' ..###... byte $08 ' ...#.... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $02 ' .#...... byte $14 ' ..#.#... byte $20 ' .....#.. byte $22 ' .#...#.. byte $08 ' ...#.... byte $00 ' ........ byte $22 ' .#...#.. byte $22 ' .#...#.. byte $2a ' .#.#.#.. byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $14 ' ..#.#... byte $1e ' .####... byte $32 ' .#..##.. byte $12 ' .#..#... byte $00 ' ........ byte $08 ' ...#.... byte $08 ' ...#.... byte $2a ' .#.#.#.. byte $08 ' ...#.... byte $0c ' ..##.... byte $00 ' ........ byte $0c ' ..##.... byte $02 ' .#...... byte $22 ' .#...#.. byte $08 ' ...#.... byte $02 ' .#...... byte $22 ' .#...#.. byte $10 ' ....#... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $02 ' .#...... byte $22 ' .#...#.. byte $10 ' ....#... byte $0c ' ..##.... byte $0c ' ..##.... byte $08 ' ...#.... byte $00 ' ........ byte $08 ' ...#.... byte $00 ' ........ byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $24 ' ..#..#.. byte $22 ' .#...#.. byte $24 ' ..#..#.. byte $02 ' .#...... byte $02 ' .#...... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $08 ' ...#.... byte $22 ' .#...#.. byte $12 ' .#..#... byte $02 ' .#...... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $02 ' .#...... byte $12 ' .#..#... byte $12 ' .#..#... byte $22 ' .#...#.. byte $08 ' ...#.... byte $22 ' .#...#.. byte $08 ' ...#.... byte $36 ' .##.##.. byte $22 ' .#...#.. byte $08 ' ...#.... byte $02 ' .#...... byte $08 ' ...#.... byte $1c ' ..###... byte $08 ' ...#.... byte $08 ' ...#.... byte $00 ' ........ byte $00 ' ........ byte $22 ' .#...#.. byte $26 ' .##..#.. byte $22 ' .#...#.. byte $32 ' .#..##.. byte $02 ' .#...... byte $08 ' ...#.... byte $2c ' ..##.#.. byte $22 ' .#...#.. byte $08 ' ...#.... byte $22 ' .#...#.. byte $0a ' .#.#.... byte $08 ' ...#.... byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $26 ' .##..#.. byte $32 ' .#..##.. byte $02 ' .#...... byte $20 ' .....#.. byte $28 ' ...#.#.. byte $32 ' .#..##.. byte $14 ' ..#.#... byte $2a ' .#.#.#.. byte $14 ' ..#.#... byte $3c ' ..####.. byte $04 ' ..#..... byte $08 ' ...#.... byte $08 ' ...#.... byte $08 ' ...#.... byte $00 ' ........ byte $2a ' .#.#.#.. ' scanrow 7 byte $3e ' .#####.. byte $02 ' .#...... byte $3e ' .#####.. byte $3e ' .#####.. byte $20 ' .....#.. byte $3e ' .#####.. byte $00 ' ........ byte $36 ' .##.##.. byte $20 ' .....#.. byte $00 ' ........ byte $3e ' .#####.. byte $00 ' ........ byte $08 ' ...#.... byte $00 ' ........ byte $1c ' ..###... byte $1c ' ..###... byte $3e ' .#####.. byte $1c ' ..###... byte $1c ' ..###... byte $1c ' ..###... byte $1c ' ..###... byte $00 ' ........ byte $36 ' .##.##.. byte $20 ' .....#.. byte $3e ' .#####.. byte $08 ' ...#.... byte $08 ' ...#.... byte $1c ' ..###... byte $3e ' .#####.. byte $3e ' .#####.. byte $3e ' .#####.. byte $3e ' .#####.. byte $00 ' ........ byte $08 ' ...#.... byte $00 ' ........ byte $14 ' ..#.#... byte $08 ' ...#.... byte $30 ' ....##.. byte $2c ' ..##.#.. byte $00 ' ........ byte $10 ' ....#... byte $04 ' ..#..... byte $08 ' ...#.... byte $00 ' ........ byte $0c ' ..##.... byte $00 ' ........ byte $0c ' ..##.... byte $00 ' ........ byte $1c ' ..###... byte $1c ' ..###... byte $3e ' .#####.. byte $1c ' ..###... byte $10 ' ....#... byte $1c ' ..###... byte $1c ' ..###... byte $02 ' .#...... byte $1c ' ..###... byte $0c ' ..##.... byte $00 ' ........ byte $0c ' ..##.... byte $10 ' ....#... byte $00 ' ........ byte $04 ' ..#..... byte $08 ' ...#.... byte $1c ' ..###... byte $22 ' .#...#.. byte $1e ' .####... byte $1c ' ..###... byte $1e ' .####... byte $3e ' .#####.. byte $02 ' .#...... byte $3c ' ..####.. byte $22 ' .#...#.. byte $1c ' ..###... byte $1c ' ..###... byte $22 ' .#...#.. byte $3e ' .#####.. byte $22 ' .#...#.. byte $22 ' .#...#.. byte $1c ' ..###... byte $02 ' .#...... byte $2c ' ..##.#.. byte $22 ' .#...#.. byte $1c ' ..###... byte $08 ' ...#.... byte $1c ' ..###... byte $08 ' ...#.... byte $22 ' .#...#.. byte $22 ' .#...#.. byte $08 ' ...#.... byte $3e ' .#####.. byte $08 ' ...#.... byte $08 ' ...#.... byte $00 ' ........ byte $00 ' ........ byte $3e ' .#####.. byte $00 ' ........ byte $3c ' ..####.. byte $1a ' .#.##... byte $1c ' ..###... byte $2c ' ..##.#.. byte $1c ' ..###... byte $08 ' ...#.... byte $20 ' .....#.. byte $22 ' .#...#.. byte $1c ' ..###... byte $1c ' ..###... byte $12 ' .#..#... byte $1c ' ..###... byte $2a ' .#.#.#.. byte $22 ' .#...#.. byte $1c ' ..###... byte $1a ' .#.##... byte $2c ' ..##.#.. byte $02 ' .#...... byte $1e ' .####... byte $10 ' ....#... byte $2c ' ..##.#.. byte $08 ' ...#.... byte $14 ' ..#.#... byte $22 ' .#...#.. byte $20 ' .....#.. byte $3e ' .#####.. byte $10 ' ....#... byte $08 ' ...#.... byte $04 ' ..#..... byte $00 ' ........ byte $14 ' ..#.#... ' scanrow 8 byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $04 ' ..#..... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $04 ' ..#..... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $22 ' .#...#.. byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $02 ' .#...... byte $20 ' .....#.. byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $22 ' .#...#.. byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ ' scanrow 9 byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $02 ' .#...... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $02 ' .#...... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $1c ' ..###... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $02 ' .#...... byte $20 ' .....#.. byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $1c ' ..###... byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ byte $00 ' ........ '************************************************************************************************** {{ +------------------------------------------------------------------------------------------------------------------------------+ | TERMS OF USE: Parallax Object Exchange License | +------------------------------------------------------------------------------------------------------------------------------+ |Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation | |files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, | |modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software| |is furnished to do so, subject to the following conditions: | | | |The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.| | | |THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE | |WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR | |COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | +------------------------------------------------------------------------------------------------------------------------------+ }}