diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..6a3b3ee --- /dev/null +++ b/.cproject @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + make + + debug + true + true + true + + + make + + clean + true + true + true + + + make + + program + true + true + true + + + + diff --git a/FHEM/00_CUL.pm b/FHEM/00_CUL.pm deleted file mode 100644 index a42fcb4..0000000 --- a/FHEM/00_CUL.pm +++ /dev/null @@ -1,1738 +0,0 @@ -############################################## -# $Id: 00_CUL.pm 14119 2017-04-27 11:41:18Z rudolfkoenig $ -package main; - -use strict; -use warnings; -use Time::HiRes qw(gettimeofday); - -sub CUL_Attr(@); -sub CUL_Clear($); -sub CUL_HandleCurRequest($$); -sub CUL_HandleWriteQueue($); -sub CUL_Parse($$$$@); -sub CUL_Read($); -sub CUL_ReadAnswer($$$$); -sub CUL_Ready($); -sub CUL_Write($$$); - -sub CUL_SimpleWrite(@); -sub CUL_WriteInit($); - -my %gets = ( # Name, Data to send to the CUL, Regexp for the answer - "ccconf" => 1, - "version" => ["V", '^V .*'], - "raw" => ["", '.*'], - "uptime" => ["t", '^[0-9A-F]{8}[\r\n]*$' ], - "fhtbuf" => ["T03", '^[0-9A-F]+[\r\n]*$' ], - "cmds" => ["?", '.*Use one of( .)*[\r\n]*$' ], - "credit10ms" => [ "X", '^.. *\d*[\r\n]*$' ], -); - -my %sets = ( - "reopen" => "", - "hmPairForSec" => "HomeMatic", - "hmPairSerial" => "HomeMatic", - "raw" => "", - "freq" => "SlowRF", - "bWidth" => "SlowRF", - "rAmpl" => "SlowRF", - "sens" => "SlowRF", - "led" => "", - "patable" => "", - "ITClock" => "SlowRF" -); - -my @ampllist = (24, 27, 30, 33, 36, 38, 40, 42); # rAmpl(dB) - -my $sccMods = "STACKABLE_CC:TSSTACKED:STACKABLE"; -my $culNameRe = "^(CUL|TSCUL)\$"; - -my $clientsSlowRF = ":FS20:FHT.*:KS300:USF1000:BS:HMS: ". - ":CUL_EM:CUL_WS:CUL_FHTTK:CUL_HOERMANN: ". - ":ESA2000:CUL_IR:CUL_TX:Revolt:IT:UNIRoll:SOMFY: ". - ":$sccMods:CUL_RFR::CUL_TCM97001:CUL_REDIRECT:"; -my $clientsHomeMatic = ":CUL_HM:HMS:CUL_IR:$sccMods:"; -my $clientsMAX = ":CUL_MAX:HMS:CUL_IR:$sccMods:"; -my $clientsWMBus = ":WMBUS:HMS:CUL_IR:$sccMods:"; -my $clientsKOPP_FC = ":KOPP_FC:HMS:CUL_IR:$sccMods:"; -my $clientsBetty = ":Betty:HMS:CUL_IR:$sccMods:"; - -my %matchListSlowRF = ( - "1:USF1000" => "^81..(04|0c)..0101a001a5ceaa00....", - "2:BS" => "^81..(04|0c)..0101a001a5cf", - "3:FS20" => "^81..(04|0c)..0101a001", - "4:FHT" => "^81..(04|09|0d)..(0909a001|83098301|c409c401)..", - "5:KS300" => "^810d04..4027a001", - "6:CUL_WS" => "^K.....", - "7:CUL_EM" => "^E0.................\$", - "8:HMS" => "^810e04....(1|5|9).a001", - "9:CUL_FHTTK" => "^T[A-F0-9]{8}", - "A:CUL_RFR" => "^[0-9A-F]{4}U.", - "B:CUL_HOERMANN"=> "^R..........", - "C:ESA2000" => "^S................................\$", - "D:CUL_IR" => "^I............", - "E:CUL_TX" => "^TX[A-F0-9]{10}", - "F:Revolt" => "^r......................\$", - "G:IT" => "^i......", - "H:STACKABLE_CC"=>"^\\*", - "I:UNIRoll" => "^[0-9A-F]{5}(B|D|E)", - "J:SOMFY" => "^Y[r|t|s]:?[A-F0-9]+", - "K:CUL_TCM97001" => "^s[A-F0-9]+", - "L:CUL_REDIRECT" => "^o+", - "M:TSSTACKED"=>"^\\*", - "N:STACKABLE"=>"^\\*", -); - -my %matchListHomeMatic = ( - "1:CUL_HM" => "^A....................", - "8:HMS" => "^810e04....(1|5|9).a001", # CUNO OneWire HMS Emulation - "D:CUL_IR" => "^I............", - "H:STACKABLE_CC"=>"^\\*", - "M:TSSTACKED"=>"^\\*", - "N:STACKABLE"=>"^\\*", -); - -my %matchListMAX = ( - "1:CUL_MAX" => "^Z........................", - "8:HMS" => "^810e04....(1|5|9).a001", # CUNO OneWire HMS Emulation - "D:CUL_IR" => "^I............", - "H:STACKABLE_CC"=>"^\\*", - "M:TSSTACKED"=>"^\\*", - "N:STACKABLE"=>"^\\*", -); - -my %matchListWMBus = ( - "J:WMBUS" => "^b.*", - "8:HMS" => "^810e04....(1|5|9).a001", # CUNO OneWire HMS Emulation - "D:CUL_IR" => "^I............", - "H:STACKABLE_CC"=>"^\\*", - "M:TSSTACKED"=>"^\\*", - "N:STACKABLE"=>"^\\*", -); - -my %matchListKOPP_FC = ( - "1:Kopp_FC" => "^kr..................", - "8:HMS" => "^810e04....(1|5|9).a001", # CUNO OneWire HMS Emulation - "D:CUL_IR" => "^I............", - "H:STACKABLE_CC"=>"^\\*", - "M:TSSTACKED"=>"^\\*", - "N:STACKABLE"=>"^\\*", -); - -my %matchListBetty = ( - "8:HMS" => "^810e04....(1|5|9).a001", # CUNO OneWire HMS Emulation - "D:CUL_IR" => "^I............", - "H:STACKABLE_CC"=>"^\\*", - "M:TSSTACKED"=>"^\\*", - "N:STACKABLE"=>"^\\*", - "O:Betty" => "^y.*", -); - -sub -CUL_Initialize($) -{ - my ($hash) = @_; - - require "$attr{global}{modpath}/FHEM/DevIo.pm"; - -# Provider - $hash->{ReadFn} = "CUL_Read"; - $hash->{WriteFn} = "CUL_Write"; - $hash->{ReadyFn} = "CUL_Ready"; - -# Normal devices - $hash->{DefFn} = "CUL_Define"; - $hash->{FingerprintFn} = "CUL_FingerprintFn"; - $hash->{UndefFn} = "CUL_Undef"; - $hash->{GetFn} = "CUL_Get"; - $hash->{SetFn} = "CUL_Set"; - $hash->{AttrFn} = "CUL_Attr"; - no warnings 'qw'; - my @attrList = qw( - addvaltrigger - connectCommand - do_not_notify:1,0 - dummy:1,0 - hmId longids - hmProtocolEvents:0_off,1_dump,2_dumpFull,3_dumpTrigger - model:CUL,CUN,CUNO,SCC,nanoCUL - rfmode:SlowRF,HomeMatic,MAX,WMBus_T,WMBus_S,KOPP_FC,Betty - sendpool - showtime:1,0 - ); - use warnings 'qw'; - $hash->{AttrList} = join(" ", @attrList)." ".$readingFnAttributes; - $hash->{ShutdownFn} = "CUL_Shutdown"; -} - -sub -CUL_FingerprintFn($$) -{ - my ($name, $msg) = @_; - - # Store only the "relevant" part, as the CUL won't compute the checksum - $msg = substr($msg, 8) if($msg =~ m/^81/ && length($msg) > 8); - - return ($name, $msg); -} - -##################################### -sub -CUL_Define($$) -{ - my ($hash, $def) = @_; - my @a = split("[ \t][ \t]*", $def); - - if(@a < 4 || @a > 5) { - my $msg = "wrong syntax: define CUL {none | devicename[\@baudrate] ". - "| devicename\@directio | hostname:port} "; - Log3 undef, 2, $msg; - return $msg; - } - - DevIo_CloseDev($hash); - - my $name = $a[0]; - my $dev = $a[2]; - return "FHTID must be H1H2, with H1 and H2 hex and both smaller than 64" - if(uc($a[3]) !~ m/^[0-6][0-9A-F][0-6][0-9A-F]$/); - - if(uc($a[3]) =~ m/^([0-6][0-9A-F])/ && $1 ne "00") { - my $x = $1; - foreach my $d (keys %defs) { - next if($d eq $name); - if($defs{$d}{TYPE} =~ m/$culNameRe/) { - if(uc($defs{$d}{FHTID}) =~ m/^$x/) { - my $m = "$name: Cannot define multiple CULs with identical ". - "first two digits ($x)"; - Log3 $name, 1, $m; - return $m; - } - } - } - } - $hash->{FHTID} = uc($a[3]); - $hash->{initString} = "X21"; - $hash->{CMDS} = ""; - $hash->{Clients} = $clientsSlowRF; - $hash->{MatchList} = \%matchListSlowRF; - - if($dev eq "none") { - Log3 $name, 1, "$name device is none, commands will be echoed only"; - $attr{$name}{dummy} = 1; - return undef; - } - - $hash->{DeviceName} = $dev; - my $ret = DevIo_OpenDev($hash, 0, "CUL_DoInit"); - return $ret; -} - -##################################### -sub -CUL_Undef($$) -{ - my ($hash, $arg) = @_; - my $name = $hash->{NAME}; - - foreach my $d (sort keys %defs) { - if(defined($defs{$d}) && - defined($defs{$d}{IODev}) && - $defs{$d}{IODev} == $hash) - { - my $lev = ($reread_active ? 4 : 2); - Log3 $name, $lev, "deleting port for $d"; - delete $defs{$d}{IODev}; - } - } - - CUL_SimpleWrite($hash, "X00"); # Switch reception off, it may hang up the CUL - DevIo_CloseDev($hash); - return undef; -} - -##################################### -sub -CUL_Shutdown($) -{ - my ($hash) = @_; - CUL_SimpleWrite($hash, "X00"); - return undef; -} - -sub -CUL_RemoveHMPair($) -{ - my $hash = shift; - delete($hash->{hmPair}); -} - -##################################### -sub -CUL_Reopen($) -{ - my ($hash) = @_; - DevIo_CloseDev($hash); - DevIo_OpenDev($hash, 1, "CUL_DoInit"); -} - -##################################### -sub -CUL_Set($@) -{ - my ($hash, @a) = @_; - - return "\"set CUL\" needs at least one parameter" if(@a < 2); - return "Unknown argument $a[1], choose one of " . join(" ", sort keys %sets) - if(!defined($sets{$a[1]})); - - my $name = shift @a; - my $type = shift @a; - my $arg = join("", @a); - - return "This command is not valid in the current rfmode" - if($sets{$type} && $sets{$type} ne AttrVal($name, "rfmode", "SlowRF")); - - if($type eq "reopen") { - CUL_Reopen($hash); - - } elsif($type eq "hmPairForSec") { - return "Usage: set $name hmPairForSec " - if(!$arg || $arg !~ m/^\d+$/); - $hash->{hmPair} = 1; - InternalTimer(gettimeofday()+$arg, "CUL_RemoveHMPair", $hash, 1); - - } elsif($type eq "hmPairSerial") { - return "Usage: set $name hmPairSerial <10-character-serialnumber>" - if(!$arg || $arg !~ m/^.{10}$/); - - my $id = AttrVal($hash->{NAME}, "hmId", "F1".$hash->{FHTID}); - $hash->{HM_CMDNR} = $hash->{HM_CMDNR} ? ($hash->{HM_CMDNR}+1)%256 : 1; - CUL_SimpleWrite($hash, sprintf("As15%02x8401%s000000010A%s", - $hash->{HM_CMDNR}, $id, unpack('H*', $arg))); - $hash->{hmPairSerial} = $arg; - - } elsif($type eq "freq") { - - my $f = $arg/26*65536; - - my $f2 = sprintf("%02x", $f / 65536); - my $f1 = sprintf("%02x", int($f % 65536) / 256); - my $f0 = sprintf("%02x", $f % 256); - $arg = sprintf("%.3f", (hex($f2)*65536+hex($f1)*256+hex($f0))/65536*26); - Log3 $name, 3, "Setting FREQ2..0 (0D,0E,0F) to $f2 $f1 $f0 = $arg MHz"; - CUL_SimpleWrite($hash, "W0F$f2"); - CUL_SimpleWrite($hash, "W10$f1"); - CUL_SimpleWrite($hash, "W11$f0"); - CUL_WriteInit($hash); # Will reprogram the CC1101 - - } elsif($type eq "bWidth") { - my ($err, $ob); - if(!IsDummy($hash->{NAME})) { - CUL_SimpleWrite($hash, "C10"); - ($err, $ob) = CUL_ReadAnswer($hash, $type, 0, "^C10 = .*"); - return "Can't get old MDMCFG4 value" if($err || $ob !~ m,/ (.*)\r,); - $ob = $1 & 0x0f; - } - - my ($bits, $bw) = (0,0); - for (my $e = 0; $e < 4; $e++) { - for (my $m = 0; $m < 4; $m++) { - $bits = ($e<<6)+($m<<4); - $bw = int(26000/(8 * (4+$m) * (1 << $e))); # KHz - goto GOTBW if($arg >= $bw); - } - } - -GOTBW: - $ob = sprintf("%02x", $ob+$bits); - Log3 $name, 3, "Setting MDMCFG4 (10) to $ob = $bw KHz"; - CUL_SimpleWrite($hash, "W12$ob"); - CUL_WriteInit($hash); - - } elsif($type eq "rAmpl") { - return "a numerical value between 24 and 42 is expected" - if($arg !~ m/^\d+$/ || $arg < 24 || $arg > 42); - my ($v, $w); - for($v = 0; $v < @ampllist; $v++) { - last if($ampllist[$v] > $arg); - } - $v = sprintf("%02d", $v-1); - $w = $ampllist[$v]; - Log3 $name, 3, "Setting AGCCTRL2 (1B) to $v / $w dB"; - CUL_SimpleWrite($hash, "W1D$v"); - CUL_WriteInit($hash); - - } elsif($type eq "sens") { - return "a numerical value between 4 and 16 is expected" - if($arg !~ m/^\d+$/ || $arg < 4 || $arg > 16); - my $w = int($arg/4)*4; - my $v = sprintf("9%d",$arg/4-1); - Log3 $name, 3, "Setting AGCCTRL0 (1D) to $v / $w dB"; - CUL_SimpleWrite($hash, "W1F$v"); - CUL_WriteInit($hash); - - } elsif( $type eq "ITClock" ) { - my $clock = shift @a; - $clock=250 if($clock eq ""); - return "argument $arg is not numeric" if($clock !~ /^\d+$/); - Log3 $name, 3, "set $name $type $clock"; - $arg="ic$clock"; - CUL_SimpleWrite($hash, $arg); - - } else { - return "Expecting a 0-padded hex number" - if((length($arg)&1) == 1 && $type ne "raw"); - Log3 $name, 3, "set $name $type $arg"; - $arg = "l$arg" if($type eq "led"); - $arg = "x$arg" if($type eq "patable"); - CUL_SimpleWrite($hash, $arg); - - } - return undef; -} - -##################################### -sub -CUL_Get($@) -{ - my ($hash, @a) = @_; - my $type = $hash->{TYPE}; - - return "\"get $type\" needs at least one parameter" if(@a < 2); - if(!defined($gets{$a[1]})) { - my @cList = map { $_ =~ m/^(file|raw)$/ ? $_ : "$_:noArg" } sort keys %gets; - return "Unknown argument $a[1], choose one of " . join(" ", @cList); - } - - my $arg = ($a[2] ? $a[2] : ""); - my ($msg, $err); - my $name = $a[0]; - - return "No $a[1] for dummies" if(IsDummy($name)); - - if($a[1] eq "ccconf") { - - my %r = ( "0D"=>1,"0E"=>1,"0F"=>1,"10"=>1,"1B"=>1,"1D"=>1 ); - foreach my $a (sort keys %r) { - CUL_SimpleWrite($hash, "C$a"); - ($err, $msg) = CUL_ReadAnswer($hash, "C$a", 0, "^C.* = .*"); - return $err if($err); - my @answ = split(" ", $msg); - $r{$a} = $answ[4]; - } - $msg = sprintf("freq:%.3fMHz bWidth:%dKHz rAmpl:%ddB sens:%ddB", - 26*(($r{"0D"}*256+$r{"0E"})*256+$r{"0F"})/65536, #Freq - 26000/(8 * (4+(($r{"10"}>>4)&3)) * (1 << (($r{"10"}>>6)&3))), #Bw - $ampllist[$r{"1B"}&7], - 4+4*($r{"1D"}&3) #Sens - ); - - } else { - - CUL_SimpleWrite($hash, $gets{$a[1]}[0] . $arg); - my $mtch = defined($a[3]) ? $a[3] : $gets{$a[1]}[1]; # optional - ($err, $msg) = CUL_ReadAnswer($hash, $a[1], 0, $mtch); - if(!defined($msg)) { - DevIo_Disconnected($hash); - $msg = "No answer"; - - } elsif($a[1] eq "cmds") { # nice it up - $msg =~ s/.*Use one of//g; - - } elsif($a[1] eq "uptime") { # decode it - $msg =~ s/[\r\n]//g; - $msg = hex($msg)/125; - $msg = sprintf("%d %02d:%02d:%02d", - $msg/86400, ($msg%86400)/3600, ($msg%3600)/60, $msg%60); - } elsif($a[1] eq "credit10ms") { - ($msg) = ($msg =~ /^.. *(\d*)[\r\n]*$/); - } - - $msg =~ s/[\r\n]//g; - - } - - readingsSingleUpdate($hash, $a[1], $msg, 1); - - return "$a[0] $a[1] => $msg"; -} - -sub -CUL_Clear($) -{ - my $hash = shift; - - # Clear the pipe - $hash->{RA_Timeout} = 0.1; - for(;;) { - my ($err, undef) = CUL_ReadAnswer($hash, "Clear", 0, "wontmatch"); - last if($err); - } - delete($hash->{RA_Timeout}); - $hash->{PARTIAL} = ""; -} - -##################################### -sub -CUL_DoInit($) -{ - my $hash = shift; - my $name = $hash->{NAME}; - my $err; - my $msg = undef; - - CUL_Clear($hash); - my ($ver, $try) = ("", 0); - while($try++ < 3 && $ver !~ m/^V/) { - CUL_SimpleWrite($hash, "V"); - ($err, $ver) = CUL_ReadAnswer($hash, "Version", 0, "^V"); - return "$name: $err" if($err && ($err !~ m/Timeout/ || $try == 3)); - $ver = "" if(!$ver); - } - - if($ver !~ m/^V/) { - $attr{$name}{dummy} = 1; - $msg = "Not an CUL device, got for V: $ver"; - Log3 $name, 1, $msg; - return $msg; - } - $ver =~ s/[\r\n]//g; - $hash->{VERSION} = $ver; - - # Cmd-String feststellen - - my $cmds = CUL_Get($hash, $name, "cmds", 0); - $cmds =~ s/$name cmds =>//g; - $cmds =~ s/ //g; - $hash->{CMDS} = $cmds; - Log3 $name, 3, "$name: Possible commands: " . $hash->{CMDS}; - - CUL_WriteInit($hash); - - # FHTID - if(defined($hash->{FHTID})) { - my $fhtid; - CUL_SimpleWrite($hash, "T01"); - ($err, $fhtid) = CUL_ReadAnswer($hash, "FHTID", 0, undef); - return "$name: $err" if($err); - $fhtid =~ s/[\r\n]//g; - Log3 $name, 5, "GOT CUL fhtid: $fhtid"; - if(!defined($fhtid) || $fhtid ne $hash->{FHTID}) { - Log3 $name, 2, "Setting $name fhtid from $fhtid to " . $hash->{FHTID}; - CUL_SimpleWrite($hash, "T01" . $hash->{FHTID}); - } - } - - my $cc = AttrVal($name, "connectCommand", undef); - CUL_SimpleWrite($hash, $cc) if($cc); - - readingsSingleUpdate($hash, "state", "Initialized", 1); - - # Reset the counter - delete($hash->{XMIT_TIME}); - delete($hash->{NR_CMD_LAST_H}); - return undef; -} - -##################################### -# This is a direct read for commands like get -# Anydata is used by read file to get the filesize -sub -CUL_ReadAnswer($$$$) -{ - my ($hash, $arg, $anydata, $regexp) = @_; - my $ohash = $hash; - - while($hash && $hash->{TYPE} !~ m/$culNameRe/) { - $hash = $hash->{IODev}; - } - return ("No FD", undef) - if(!$hash || ($^O !~ /Win/ && !defined($hash->{FD}))); - - my ($mculdata, $rin) = ("", ''); - my $buf; - my $to = 3; # 3 seconds timeout - $mculdata = $hash->{PARTIAL} if(defined($hash->{PARTIAL})); - - $to = $ohash->{RA_Timeout} if($ohash->{RA_Timeout}); # ...or less - for(;;) { - - if($^O =~ m/Win/ && $hash->{USBDev}) { - $hash->{USBDev}->read_const_time($to*1000); # set timeout (ms) - # Read anstatt input sonst funzt read_const_time nicht. - $buf = $hash->{USBDev}->read(999); - return ("Timeout reading answer for get $arg", undef) - if(length($buf) == 0); - - } else { - return ("Device lost when reading answer for get $arg", undef) - if(!$hash->{FD}); - - vec($rin, $hash->{FD}, 1) = 1; - my $nfound = select($rin, undef, undef, $to); - if($nfound < 0) { - next if ($! == EAGAIN() || $! == EINTR() || $! == 0); - my $err = $!; - DevIo_Disconnected($hash); - return("CUL_ReadAnswer $arg: $err", undef); - } - return ("Timeout reading answer for get $arg", undef) - if($nfound == 0); - $buf = DevIo_SimpleRead($hash); - return ("No data", undef) if(!defined($buf)); - - } - - if(defined($buf)) { - Log3 $ohash->{NAME}, 5, "CUL/RAW (ReadAnswer): $buf"; - $mculdata .= $buf; - } - - # Dispatch data in the buffer before the proper answer. - while(($mculdata =~ m/^([^\n]*\n)(.*)/s) || $anydata) { - my $line = ($anydata ? $mculdata : $1); - $mculdata = $2; - $hash->{PARTIAL} = $mculdata; # for recursive calls - (undef, $line) = CUL_prefix(0, $ohash, $line); # Delete prefix - if($regexp && $line !~ m/$regexp/) { - $line =~ s/[\n\r]+//g; - CUL_Parse($ohash, $hash, $ohash->{NAME}, $line) if($init_done); - $mculdata = $hash->{PARTIAL}; - } else { - return (undef, $line); - } - } - } -} - -##################################### -# Check if the 1% limit is reached and trigger notifies -sub -CUL_XmitLimitCheck($$$) -{ - my ($hash,$fn,$now) = @_; - - if(!$hash->{XMIT_TIME}) { - $hash->{XMIT_TIME}[0] = $now; - $hash->{NR_CMD_LAST_H} = 1; - return; - } - - my $nowM1h = $now-3600; - my @b = grep { $_ > $nowM1h } @{$hash->{XMIT_TIME}}; - - # Maximum nr of transmissions per hour, but not for HM and MAX - if(@b > 163 && $fn !~ m/^[AZ]/) { - my $name = $hash->{NAME}; - Log3 $name, 2, "CUL TRANSMIT LIMIT EXCEEDED"; - DoTrigger($name, "TRANSMIT LIMIT EXCEEDED"); - - } else { - - push(@b, $now); - - } - $hash->{XMIT_TIME} = \@b; - $hash->{NR_CMD_LAST_H} = int(@b); -} - -sub -CUL_XmitDlyHM($$$) -{ - my ($hash,$fn,$now) = @_; - - my (undef,$mTy,undef,$id) = unpack 'A8A2A6A6',$fn if(length($fn)>19); - - if($id && - $modules{CUL_HM}{defptr}{$id} && - $modules{CUL_HM}{defptr}{$id}{helper}{io} && - $modules{CUL_HM}{defptr}{$id}{helper}{io}{nextSend}) { - my $dDly = $modules{CUL_HM}{defptr}{$id}{helper}{io}{nextSend} - $now; - #$dDly -= 0.04 if ($mTy eq "02");# while HM devices need a rest there are - # still some devices that need faster - # reactionfor ack. - # Mode needs to be determined - if ($dDly > 0.01){# wait less then 10 ms will not work - $dDly = 0.1 if($dDly > 0.1); - Log3 $hash->{NAME}, 5, "CUL $id dly:".int($dDly*1000)."ms"; - select(undef, undef, undef, $dDly); - } - } - shift(@{$hash->{helper}{$id}{QUEUE}}); - InternalTimer($now+0.1, "CUL_XmitDlyHMTo", "$hash->{NAME}:$id", 1) - if (scalar(@{$hash->{helper}{$id}{QUEUE}})); - return 0; -} - -sub -CUL_XmitDlyHMTo($) -{ # waited long enough - next send for this ID - my ($name,$id) = split(":",$_[0]); - CUL_SendFromQueue($defs{$name}, ${$defs{$name}{helper}{$id}{QUEUE}}[0]); -} - -##################################### -# Translate data prepared for an FHZ to CUL syntax, so we can reuse -# the FS20 and FHZ modules. -sub -CUL_WriteTranslate($$$) -{ - my ($hash,$fn,$msg) = @_; - - ################### - # Rewrite message from FHZ -> CUL - if(length($fn) <= 1) { # CUL Native - ; - - } elsif($fn eq "04" && substr($msg,0,6) eq "010101") { # FS20 - $fn = "F"; - AddDuplicate($hash->{NAME}, - "0101a001" . substr($msg, 6, 6) . "00" . substr($msg, 12)); - $msg = substr($msg,6); - - } elsif($fn eq "04" && substr($msg,0,6) eq "020183") { # FHT - $fn = "T"; - $msg = substr($msg,6,4) . substr($msg,10); - - } elsif($fn eq "cmd") { # internal command - if($msg eq "speed100") { - $fn = "AR"; - } elsif($msg eq "speed10") { - $fn = "Ar"; - } else { # by default rewrite init - $fn = $hash->{initString}; - } - $msg = ""; - - } else { - Log3 $hash, 2, "CUL cannot translate $fn $msg"; - return (undef, undef); - } - return ($fn, $msg); -} - -##################################### -sub -CUL_Write($$$) -{ - my ($hash,$fn,$msg) = @_; - - ($fn, $msg) = CUL_WriteTranslate($hash, $fn, $msg); - return if(!defined($fn)); - my $name = $hash->{NAME}; - Log3 $name, 5, "$hash->{NAME} sending $fn$msg"; - my $bstring = "$fn$msg"; - - if($fn eq "F" || # FS20 message - $bstring =~ m/^u....F/ || # FS20 messages sent over an RFR - ($fn eq "" && ($bstring =~ m/^A/ || $bstring =~ m/^Z/ ))) { # AskSin/BidCos/HomeMatic/MAX - - CUL_AddSendQueue($hash, $bstring); - - } else { - - CUL_SimpleWrite($hash, $bstring); - - } - -} - -sub -CUL_SendFromQueue($$) -{ - my ($hash, $bstring) = @_; - my $name = $hash->{NAME}; - my $hm = ($bstring =~ m/^A/); - my $to = ($hm ? 0.15 : 0.3); - my $now = gettimeofday(); - if($bstring ne "") { - my $sp = AttrVal($name, "sendpool", undef); - if($sp) { # Is one of the CUL-fellows sending data? - my @fellows = split(",", $sp); - foreach my $f (@fellows) { - if($f ne $name && - $defs{$f} && - $defs{$f}{QUEUE} && - $defs{$f}{QUEUE}->[0] ne ""){ - unshift(@{$hash->{QUEUE}}, ""); - InternalTimer($now+$to, "CUL_HandleWriteQueue", $hash, 1); - return; - } - } - } - - CUL_XmitLimitCheck($hash, $bstring, $now); - if($hm) { - CUL_SimpleWrite($hash, $bstring) if(!CUL_XmitDlyHM($hash,$bstring,$now)); - return; - } else { - CUL_SimpleWrite($hash, $bstring); - } - } - - ############## - # Write the next buffer not earlier than 0.23 seconds - # = 3* (12*0.8+1.2+1.0*5*9+0.8+10) = 226.8ms - # else it will be sent too early by the CUL, resulting in a collision - InternalTimer($now+$to, "CUL_HandleWriteQueue", $hash, 1); -} - -sub -CUL_AddSendQueue($$) -{ - my ($hash, $bstring) = @_; - my $qHash = $hash; - if ($bstring =~ m/^A/){ # HM device - my $id = substr($bstring,16,6);#get HMID destination - $qHash = $hash->{helper}{$id}; - } - if(!$qHash->{QUEUE} || 0 == scalar(@{$qHash->{QUEUE}})) { - $qHash->{QUEUE} = [ $bstring ]; - CUL_SendFromQueue($hash, $bstring); - } else { - push(@{$qHash->{QUEUE}}, $bstring); - } -} - -##################################### -sub -CUL_HandleWriteQueue($) -{ - my $hash = shift; - my $arr = $hash->{QUEUE}; - if(defined($arr) && @{$arr} > 0) { - shift(@{$arr}); - if(@{$arr} == 0) { - delete($hash->{QUEUE}); - return; - } - my $bstring = $arr->[0]; - if($bstring eq "") { - CUL_HandleWriteQueue($hash); - } else { - CUL_SendFromQueue($hash, $bstring); - } - } -} - -##################################### -# called from the global loop, when the select for hash->{FD} reports data -sub -CUL_Read($) -{ - my ($hash) = @_; - - my $buf = DevIo_SimpleRead($hash); - return "" if(!defined($buf)); - my $name = $hash->{NAME}; - - my $culdata = $hash->{PARTIAL}; - Log3 $name, 5, "CUL/RAW: $culdata/$buf"; - $culdata .= $buf; - - while($culdata =~ m/\n/) { - my $rmsg; - ($rmsg,$culdata) = split("\n", $culdata, 2); - $rmsg =~ s/\r//; - $hash->{PARTIAL} = $culdata; # for recursive calls - CUL_Parse($hash, $hash, $name, $rmsg) if($rmsg); - $culdata = $hash->{PARTIAL}; - } - $hash->{PARTIAL} = $culdata; -} - -sub -CUL_Parse($$$$@) -{ - my ($hash, $iohash, $name, $rmsg, $initstr) = @_; - - if($rmsg =~ m/^V/) { # CUN* keepalive - Log3 $name, 4, "CUL_Parse: $name $rmsg"; - return; - } - - my $rssi; - my $dmsg = $rmsg; - my $dmsgLog = (AttrVal($name,"rfmode","") eq "HomeMatic") - ? join(" ",(unpack'A1A2A2A4A6A6A*',$rmsg)) - :$dmsg; - if($dmsg =~ m/^[AFTKEHRStZriby]([A-F0-9][A-F0-9])+$/) { # RSSI - my $l = length($dmsg); - $rssi = hex(substr($dmsg, $l-2, 2)); - $dmsg = substr($dmsg, 0, $l-2); - $rssi = ($rssi>=128 ? (($rssi-256)/2-74) : ($rssi/2-74)); - Log3 $name, 4, "CUL_Parse: $name $dmsgLog $rssi"; - } else { - Log3 $name, 4, "CUL_Parse: $name $dmsgLog"; - } - - ########################################### - #Translate Message from CUL to FHZ - next if(!$dmsg || length($dmsg) < 1); # Bogus messages - - if ($dmsg eq 'SMODE' || $dmsg eq 'TMODE') { # brs/brt returns SMODE/TMODE - Log3 $name, 5, "CUL_Parse: switched to $dmsg"; - return; - } - - if($dmsg =~ m/^[0-9A-F]{4}U./) { # RF_ROUTER - Dispatch($hash, $dmsg, undef); - return; - } - - my $fn = substr($dmsg,0,1); - my $len = length($dmsg); - - if($fn eq "F" && $len >= 9) { # Reformat for 10_FS20.pm - CUL_AddSendQueue($iohash, ""); # Delay immediate replies - $dmsg = sprintf("81%02x04xx0101a001%s00%s", - $len/2+7, substr($dmsg,1,6), substr($dmsg,7)); - $dmsg = lc($dmsg); - - } elsif($fn eq "T") { - if ($len >= 11) { # Reformat for 11_FHT.pm - $dmsg = sprintf("81%02x04xx0909a001%s00%s", - $len/2+7, substr($dmsg,1,6), substr($dmsg,7)); - $dmsg = lc($dmsg); - } - - } elsif($fn eq "H" && $len >= 13) { # Reformat for 12_HMS.pm - my $type = hex(substr($dmsg,6,1)); - my $stat = $type > 1 ? hex(substr($dmsg,7,2)) : hex(substr($dmsg,5,2)); - my $prf = $type > 1 ? "02" : "05"; - my $bat = $type > 1 ? hex(substr($dmsg,5,1))+1 : 1; - my $HA = substr($dmsg,1,4); - my $values = $type > 1 ? "000000" : substr($dmsg,7); - $dmsg = sprintf("81%02x04xx%s%x%xa001%s0000%02x%s", - $len/2+8, # Packet-Length - $prf, $bat, $type, - $HA, # House-Code - $stat, - $values); # Values - $dmsg = lc($dmsg); - - } elsif($fn eq "K" && $len >= 5) { - if($len == 15) { # Reformat for 13_KS300.pm - my @a = split("", $dmsg); - $dmsg = sprintf("81%02x04xx4027a001", $len/2+6); - for(my $i = 1; $i < 14; $i+=2) { # Swap nibbles. - $dmsg .= $a[$i+1] . $a[$i]; - } - $dmsg = lc($dmsg); - } - # Other K... Messages ar sent to CUL_WS - } elsif($fn eq "r" && $len >= 23) { # Revolt - $dmsg = lc($dmsg); - } elsif($fn eq "i" && $len >= 7) { # IT - $dmsg = lc($dmsg); - } elsif($fn eq "A" && $len >= 20) { # AskSin/BidCos/HomeMatic - my $src = substr($dmsg,9,6); - if($modules{CUL_HM}{defptr}{$src}){ - $modules{CUL_HM}{defptr}{$src}{helper}{io}{nextSend} = - gettimeofday() + 0.100; - } - $dmsg .= "::$rssi:$name" if(defined($rssi)); - - } elsif($fn eq "Z" && $len >= 21) { # Moritz/Max - ; - } elsif($fn eq "b" && $len >= 24) { # Wireless M-Bus - $dmsg .= "::$rssi" if (defined($rssi)); - } elsif($fn eq "t" && $len >= 5) { # TX3 - $dmsg = "TX".substr($dmsg,1); # t.* is occupied by FHTTK - } - - $hash->{"${name}_MSGCNT"}++; - $hash->{"${name}_TIME"} = TimeNow(); - # showtime attribute - readingsSingleUpdate($hash, "state", $hash->{READINGS}{state}{VAL}, 0); - $hash->{RAWMSG} = $rmsg; - my %addvals = (RAWMSG => $dmsg); - if(defined($rssi)) { - $hash->{RSSI} = $rssi; - $addvals{RSSI} = $rssi; - } - Dispatch($hash, $dmsg, \%addvals); -} - - -##################################### -sub -CUL_Ready($) -{ - my ($hash) = @_; - - return DevIo_OpenDev($hash, 1, "CUL_DoInit") - if($hash->{STATE} eq "disconnected"); - - # This is relevant for windows/USB only - my $po = $hash->{USBDev}; - my ($BlockingFlags, $InBytes, $OutBytes, $ErrorFlags); - if($po) { - ($BlockingFlags, $InBytes, $OutBytes, $ErrorFlags) = $po->status; - } - return ($InBytes && $InBytes>0); -} - -######################## -# Needed for STACKABLE_CC -sub -CUL_WriteInit($) -{ - my ($hash) = @_; - foreach my $is (split("\n", $hash->{initString})) { - CUL_SimpleWrite($hash, $is); - } -} - -sub -CUL_SimpleWrite(@) -{ - my ($hash, $msg, $nonl) = @_; - return if(!$hash); - ($hash, $msg) = CUL_prefix(1, $hash, $msg); - DevIo_SimpleWrite($hash, $msg, 2, !$nonl); -} - -sub -CUL_Attr(@) -{ - my ($cmd,$name,$aName,$aVal) = @_; - my $hash = $defs{$name}; - - if($aName eq "rfmode") { - - - $aVal = "SlowRF" if(!$aVal || - ($aVal ne "HomeMatic" - && $aVal ne "MAX" - && $aVal ne "WMBus_T" - && $aVal ne "WMBus_S" - && $aVal ne "KOPP_FC" - && $aVal ne "Betty")); - my $msg = $hash->{NAME} . ": Mode $aVal not supported"; - - if($aVal eq "HomeMatic") { - return if($hash->{initString} =~ m/Ar/); - if($hash->{CMDS} =~ m/A/ || IsDummy($hash->{NAME}) || !$hash->{FD}) { - $hash->{Clients} = $clientsHomeMatic; - $hash->{MatchList} = \%matchListHomeMatic; - CUL_SimpleWrite($hash, "Zx") if ($hash->{CMDS} =~ m/Z/); # reset Moritz - $hash->{initString} = "X21\nAr"; # X21 is needed for RSSI reporting - CUL_WriteInit($hash); - - } else { - Log3 $name, 2, $msg; - return $msg; - } - - } elsif($aVal eq "MAX") { - return if($hash->{initString} =~ m/Zr/); - if($hash->{CMDS} =~ m/Z/ || IsDummy($hash->{NAME}) || !$hash->{FD}) { - $hash->{Clients} = $clientsMAX; - $hash->{MatchList} = \%matchListMAX; - CUL_SimpleWrite($hash, "Ax") if ($hash->{CMDS} =~ m/A/); # reset AskSin - $hash->{initString} = "X21\nZr"; # X21 is needed for RSSI reporting - CUL_WriteInit($hash); - - } else { - Log3 $name, 2, $msg; - return $msg; - } - - } elsif($aVal eq "WMBus_S") { - return if($hash->{initString} =~ m/brs/); - if($hash->{CMDS} =~ m/b/ || IsDummy($hash->{NAME}) || !$hash->{FD}) { - $hash->{Clients} = $clientsWMBus; - $hash->{MatchList} = \%matchListWMBus; - $hash->{initString} = "X21\nbrs"; # Use S-Mode - CUL_WriteInit($hash); - - } else { - Log3 $name, 2, $msg; - return $msg; - } - } elsif($aVal eq "WMBus_T") { - return if($hash->{initString} =~ m/brt/); - if($hash->{CMDS} =~ m/b/ || IsDummy($hash->{NAME}) || !$hash->{FD}) { - $hash->{Clients} = $clientsWMBus; - $hash->{MatchList} = \%matchListWMBus; - $hash->{initString} = "X21\nbrt"; # Use T-Mode - CUL_WriteInit($hash); - - } else { - Log3 $name, 2, $msg; - return $msg; - } - } elsif($aVal eq "KOPP_FC") { - if($hash->{CMDS} =~ m/k/ || IsDummy($hash->{NAME}) || !$hash->{FD}) { - $hash->{Clients} = $clientsKOPP_FC; - $hash->{MatchList} = \%matchListKOPP_FC; - $hash->{initString} = "krS"; # krS: start Kopp receive Mode - CUL_WriteInit($hash); - - } else { - Log3 $name, 2, $msg; - return $msg; - } - - } elsif($aVal eq "Betty") { - if($hash->{CMDS} =~ m/y/ || IsDummy($hash->{NAME}) || !$hash->{FD}) { - $hash->{Clients} = $clientsBetty; - $hash->{MatchList} = \%matchListBetty; - $hash->{initString} = "X21\nyr"; # krS: start Betty receive Mode - CUL_WriteInit($hash); - - } else { - Log3 $name, 2, $msg; - return $msg; - } - - } else { - return if($hash->{initString} eq "X21"); - $hash->{Clients} = $clientsSlowRF; - $hash->{MatchList} = \%matchListSlowRF; - $hash->{initString} = "X21"; - CUL_SimpleWrite($hash, "Ax") if ($hash->{CMDS} =~ m/A/); # reset AskSin - CUL_SimpleWrite($hash, "Zx") if ($hash->{CMDS} =~ m/Z/); # reset Moritz - CUL_SimpleWrite($hash, "brx") if ($hash->{CMDS} =~ m/b/); # reset WMBus - CUL_WriteInit($hash); - - } - - Log3 $name, 2, "Switched $name rfmode to $aVal"; - delete $hash->{".clientArray"}; - - } elsif($aName eq "hmId"){ - if($cmd eq "set") { - return "wrong syntax: hmId must be 6-digit-hex-code (3 byte)" - if($aVal !~ m/^[A-F0-9]{6}$/i); - } - - } elsif($aName eq "connectCommand"){ - CUL_SimpleWrite($hash, $aVal) if($cmd eq "set"); - - } - - return undef; -} - -sub -CUL_prefix($$$) -{ - my ($isadd, $hash, $msg) = @_; - while($hash && $hash->{TYPE} !~ m/$culNameRe/) { - $msg = CallFn($hash->{NAME}, $isadd ? "AddPrefix":"DelPrefix", $hash, $msg); - $hash = $hash->{IODev}; - last if(!$hash); - } - return ($hash, $msg); -} - -1; - -=pod -=item summary connect devices with the culfw Firmware, e.g. Busware CUL -=item summary_DE Anbindung von Geraeten mit dem culfw Firmware, z.Bsp. Busware CUL -=begin html - - -

CUL

-
    - - - -
    - The CUL/CUN(O) is a family of RF devices sold by busware.de. - - With the opensource firmware - culfw they are capable - to receive and send different 433/868 MHz protocols (FS20/FHT/S300/EM/HMS/MAX!). - It is even possible to use these devices as range extenders/routers, see the - CUL_RFR module for details. -

    - - Some protocols (FS20, FHT and KS300) are converted by this module so that - the same logical device can be used, irrespective if the radio telegram is - received by a CUL or an FHZ device.
    - Other protocols (S300/EM) need their - own modules. E.g. S300 devices are processed by the CUL_WS module if the - signals are received by the CUL, similarly EMWZ/EMGZ/EMEM is handled by the - CUL_EM module.

    - - It is possible to attach more than one device in order to get better - reception, FHEM will filter out duplicate messages.

    - - Note: This module may require the Device::SerialPort or - Win32::SerialPort module if you attach the device via USB - and the OS sets strange default parameters for serial devices.

    - -
    - -
    - - - Define -
      - define <name> CUL <device> <FHTID>
      -
      - USB-connected devices (CUL/CUN):
        - <device> specifies the serial port to communicate with the CUL. - The name of the serial-device depends on your distribution, under - linux the cdc_acm kernel module is responsible, and usually a - /dev/ttyACM0 device will be created. If your distribution does not have a - cdc_acm module, you can force usbserial to handle the CUL by the - following command: -
          - modprobe usbserial vendor=0x03eb product=0x204b -
        - In this case the device is most probably /dev/ttyUSB0.

        - - You can also specify a baudrate if the device name contains the @ - character, e.g.: /dev/ttyACM0@38400

        - - If the baudrate is "directio" (e.g.: /dev/ttyACM0@directio), then the - perl module Device::SerialPort is not needed, and FHEM - opens the device with simple file io. This might work if the operating - system uses sane defaults for the serial parameters, e.g. some Linux - distributions and OSX.

        - -
      - Network-connected devices (CUN(O)):
        - <device> specifies the host:port of the device, e.g. - 192.168.0.244:2323 -
      -
      - If the device is called none, then no device will be opened, so you - can experiment without hardware attached.
      - - The FHTID is a 4 digit hex number, and it is used when the CUL talks to - FHT devices or when CUL requests data. Set it to 0000 to avoid answering - any FHT80b request by the CUL. -
    -
    - - - Set -
      -
    • reopen
      - Reopens the connection to the device and reinitializes it. -

    • -
    • raw
      - Issue a CUL firmware command. See the this document - for details on CUL commands. -

    • - -
    • freq / bWidth / rAmpl / sens
      - SlowRF mode only.
      - Set the CUL frequency / bandwidth / receiver-amplitude / sensitivity
      - - Use it with care, it may destroy your hardware and it even may be - illegal to do so. Note: The parameters used for RFR transmission are - not affected.
      -
        -
      • freq sets both the reception and transmission frequency. Note: - Although the CC1101 can be set to frequencies between 315 and 915 - MHz, the antenna interface and the antenna of the CUL is tuned for - exactly one frequency. Default is 868.3 MHz (or 433 MHz)
      • -
      • bWidth can be set to values between 58 kHz and 812 kHz. Large values - are susceptible to interference, but make possible to receive - inaccurately calibrated transmitters. It affects tranmission too. - Default is 325 kHz.
      • -
      • rAmpl is receiver amplification, with values between 24 and 42 dB. - Bigger values allow reception of weak signals. Default is 42. -
      • -
      • sens is the decision boundary between the on and off values, and it - is 4, 8, 12 or 16 dB. Smaller values allow reception of less clear - signals. Default is 4 dB.
      • -
      -

    • - -
    • hmPairForSec
      - HomeMatic mode only.
      - Set the CUL in Pairing-Mode for the given seconds. Any HM device set into - pairing mode in this time will be paired with FHEM. -

    • - -
    • hmPairSerial
      - HomeMatic mode only.
      - Try to pair with the given device. The argument is a 10 character - string, usually starting with letters and ending with digits, printed on - the backside of the device. It is not necessary to put the given device - in learning mode if it is a receiver. -

    • - -
    • led
      - Set the CUL led off (00), on (01) or blinking (02). -

    • -
    • ITClock
      - Set the IT clock for Intertechno V1 protocol. Default 250. -

    • -
    - - - Get -
      -
    • version
      - returns the CUL firmware version -

    • -
    • uptime
      - returns the CUL uptime (time since CUL reset) -

    • -
    • raw
      - Issues a CUL firmware command, and waits for one line of data returned by - the CUL. See the CUL firmware README document for details on CUL - commands. -

    • -
    • fhtbuf
      - CUL has a message buffer for the FHT. If the buffer is full, then newly - issued commands will be dropped, and an "EOB" message is issued to the - FHEM log. - fhtbuf returns the free memory in this buffer (in hex), - an empty buffer in the CUL V2 is 74 bytes, in CUL V3/CUN(O) 200 Bytes. - A message occupies 3 + 2x(number of FHT commands) bytes, - this is the second reason why sending multiple FHT commands with one - set is a good idea. The first reason is, that - these FHT commands are sent at once to the FHT. -

    • - -
    • ccconf
      - Read some CUL radio-chip (cc1101) registers (frequency, bandwidth, etc.), - and display them in human readable form. -

    • - -
    • cmds
      - Depending on the firmware installed, CULs have a different set of - possible commands. Please refer to the README of the firmware of your - CUL to interpret the response of this command. See also the raw command. -

    • -
    • credit10ms
      - One may send for a duration of credit10ms*10 ms before the send limit - is reached and a LOVF is generated. -

    • -
    - - - Attributes -
      -
    • addvaltrigger
      - Create triggers for additional device values. Right now these are RSSI - and RAWMSG for the CUL family and RAWMSG for the FHZ. -

    • - -
    • connectCommand
      - raw culfw command sent to the CUL after a (re-)connect of the USB device, - and sending the usual initialization needed for the configured rfmode. -
    • - -
    • do_not_notify
    • -
    • dummy
    • -
    • hmId
      - Set the HomeMatic ID of this device. If this attribute is absent, the - ID will be F1<FHTID>. Note 1: After setting or changing this - attribute you have to relearn all your HomeMatic devices. Note 2: The - value must be a 6 digit hex number, and 000000 is not valid. FHEM - won't complain if it is not correct, but the communication won't work. -

    • - -
    • hmProtocolEvents
      - Generate events for HomeMatic protocol messages. These are normally - used for debugging, by activating "inform timer" in a telnet session, - or looking at the Event Monitor window in the FHEMWEB frontend.
      - Example: -
        - - 2012-05-17 09:44:22.515 CUL CULHM RCV L:0B N:81 CMD:A258 SRC:...... - DST:...... 0000 (TYPE=88,WAKEMEUP,BIDI,RPTEN) - -
      -

    • - -
    • longids
      - Comma separated list of device-types for CUL that should be handled - using long IDs. This additional ID allows it to differentiate some - weather sensors, if they are sending on the same channel. - Therefore a random generated id is added. If you choose to use longids, - then you'll have to define a different device after battery change. - Default is not to use long IDs.
      - Modules which are using this functionality are for e.g. : - 14_Hideki, 41_OREGON, 14_CUL_TCM97001, 14_SD_WS07.
      - - Examples:
      -
        - # Do not use any long IDs for any devices (this is default):
        - attr cul longids 0
        - # Use long IDs for all devices:
        - attr cul longids 1
        - # Use longids for SD_WS07 devices.
        - # Will generate devices names like SD_WS07_TH_3 for channel 3.
        - attr cul longids SD_WS07 -
      -

    • - -
    • model (CUL,CUN,etc)
    • -
    • sendpool
      - If using more than one CUL for covering a large area, sending - different events by the different CUL's might disturb each other. This - phenomenon is also known as the Palm-Beach-Resort effect. - Putting them in a common sendpool will serialize sending the events. - E.g. if you have three CUN's, you have to specify following - attributes:
      - attr CUN1 sendpool CUN1,CUN2,CUN3
      - attr CUN2 sendpool CUN1,CUN2,CUN3
      - attr CUN3 sendpool CUN1,CUN2,CUN3

      -

    • -
    • rfmode
      - Configure the RF Transceiver of the CUL (the CC1101). Available - arguments are: -
        -
      • SlowRF
        - To communicate with FS20/FHT/HMS/EM1010/S300/Hoermann devices @1 kHz - datarate. This is the default.
      • - -
      • HomeMatic
        - To communicate with HomeMatic type of devices @10 kHz datarate.
      • - -
      • MAX
        - To communicate with MAX! type of devices @10 kHz datarate.
      • - -
      • WMBus_S
      • -
      • WMBus_T
        - To communicate with Wireless M-Bus devices like water, gas or - electrical meters. Wireless M-Bus uses two different communication - modes, S-Mode and T-Mode. While in this mode, no reception of other - protocols like SlowRF or HomeMatic is possible. See also the WMBUS - FHEM Module. -
      • -
      -

    • -
    • showtime
    • - - -
    • readingFnAttributes
    • -
    -
    -
- -=end html - -=begin html_DE - - -

CUL

-
    - - - -
    - Der CUL/CUN(O) ist eine Familie von Funkempfängern, die von der Firma - Busware verkauft wird. - - Mit der OpenSource Firmware - culfw können sie verschiedene - 868 MHz Funkprotokolle empfangen bzw. senden (FS20/FHT/S300/EM/HMS/MAX!). - Man kann diese Geräte auch zur Reichweitenverlängerung, siehe - CUL_RFR einsetzen. -

    - - Einige Protokolle (FS20, FHT und KS300) werden von diesem Modul in das FHZ - Format konvertiert, daher kann dasselbe logische Gerät verwendet werden, - egal ob das Funktelegramm von einem CUL oder einem FHZ Gerät empfangen - wird.
    - - Andere Protokolle (S300/EM) benötigen ihre eigenen Module. S300 - Geräte werden vom Modul CUL_WS verarbeitet, wenn das Signal von einem - CUL empfangen wurde, ähnliches gilt für EMWZ/EMGZ/EMEM: diese - werden vom CUL_EM Modul verarbeitet.

    - - Es ist möglich mehr als ein Gerät zu verwenden, um einen besseren - Empfang zu erhalten, FHEM filtert doppelte Funktelegramme aus.

    - - Bemerkung: Dieses Modul benötigt unter Umständen das - Device::SerialPort bzw. Win32::SerialPort Modul, - wenn Sie das Gerät über USB anschließen und das - Betriebssystem unübliche Parameter für serielle Schnittstellen - setzt.

    - -
    - -
    - - - Define -
      - define <name> CUL <device> <FHTID>
      -
      - Geräte, die an USB angeschlossen sind (CUL/CUN):
      -
        - <device> gibt die serielle Schnittstelle an, mit der der CUL - kommuniziert. Der Name der seriellen Schnittstelle hängt von der - gewählten Distribution und USB-Treiber ab, unter Linux ist dies das - Kernel Modul cdc_acm und üblicherweise wird die Schnittstelle - /dev/ttyACM0 genannt. Wenn die Linux Distribution über kein Kernel - Modul cdc_acm verfügt, dann kann die Schnittstelle über - usbserial mit dem folgenden Befehl erzeugt werden: -
          - modprobe usbserial vendor=0x03eb product=0x204b -
        - In diesem Fall ist diese Schnittstelle dann wahrscheinlich - /dev/ttyUSB0.

        - - Wenn der Name der Schnittstelle ein @ enthält, kann nachfolgend die - verwendete Baudrate angegeben werden, z.B.: /dev/ttyACM0@38400.

        - - Wenn die Baudrate mit "directio" angegeben wird (z.B.: - /dev/ttyACM0@directio), wird das Perl Modul - Device::SerialPort nicht benötigt und FHEM öffnet - die Schnittstelle mit einfachem Dateizugriff. Dies sollte dann - funktionieren, wenn das Betriebssystem vernünftige Standardwerte - für die serielle Schnittstelle verwendet, wie z.B. einige Linux - Distributionen oder OSX.

        -
      - - Geräte, die mit dem Netzwerk verbunden sind (CUN(O)):
      -
        - <device> gibt die Hostadresse:Port des Gerätes an, z.B. - 192.168.0.244:2323 -
      -
      - - Wenn das Gerät mit none bezeichnet wird, wird keine Schnittstelle - geöffnet und man kann ohne angeschlossene Hardware - experimentieren.
      - - Die FHTID ist eine 4-stellige hexadezimale Zahl und wird verwendet, wenn - der CUL FHT Telegramme sendet bzw. Daten anfragt. Diese sollte als 0000 - gewählt werden, wenn man FHT80b Anfragen durch den CUL vermeiden will. -
    -
    - - - Set -
      -
    • reopen
      - Öffnet die Verbindung zum Gerät neu und initialisiert es. -

    • -
    • raw
      - Sendet einen CUL Firmware Befehl. Siehe auch - hier für - nähere Erläuterungen der CUL Befehle. -

    • - -
    • freq / bWidth / rAmpl / sens
      - Nur in der Betriebsart SlowRF.
      Bestimmt die - CUL Frequenz / Bandbreite / Empfänger Amplitude / - Empfindlichkeit
      - - Bitte mit Vorsicht verwenden, da es die verwendete Hardware - zerstören kann bzw. es zu illegalen Funkzuständen kommen - kann.
      Bemerkung: Die Parameter für die RFR Übermittlung - werden hierdurch nicht beeinflußt.
      -
        -
      • freq bestimmt sowohl die Empfangs- als auch die Sendefrequenz.
        - Bemerkung: Auch wenn der CC1101 zwischen den Frequenzen 315 und 915 - MHz eingestellt werden kann, ist die Antennenanbindung bzw. die - Antenne des CUL exakt auf eine Frequenz eingestellt. Standard ist - 868.3 MHz (bzw. 433 MHz).
      • - -
      • bWidth kann zwischen 58 kHz und 812 kHz variiert werden. - Große Werte sind empfindlicher gegen Interferencen, aber - machen es möglich, nicht genau kalbrierte Signale zu - empfangen. Die Einstellung beeinflusst ebenso die Übertragung. - Standardwert ist 325 kHz.
      • - -
      • rAmpl ist die Verstärkung des Empfängers mit Werten - zwischen 24 and 42 dB. Größere Werte erlauben den - Empfang von schwachen Signalen. Standardwert ist 42.
      • - -
      • sens ist die Entscheidungsgrenze zwischen "on" und "off" - Zuständen und kann 4, 8, 12 oder 16 dB sein. Kleinere Werte - erlauben den Empfang von undeutlicheren Signalen. Standard ist 4 - dB.
      • -
      -

    • - -
    • hmPairForSec
      - Nur in der Betriebsart HomeMatic.
      Versetzt den - CUL für die angegebene Zeit in Sekunden in den Anlern-Modus. Jedes - HM Gerät, das sich im Anlern-Modus befindet, wird an FHEM - angelernt.

    • - - -
    • hmPairSerial
      - Nur in der Betriebsart HomeMatic.
      - Versucht, das angegebene Gerät anzulernen (zu "pairen"). Der - Parameter ist eine 10-stellige Zeichenfolge, die normalerweise mit - Buchstaben beginnt und mit Ziffern endet; diese sind auf der - Rückseite der Geräte aufgedruckt. Wenn das Gerät ein - Empfänger ist, ist es nicht notwendig, das angegebene Gerät in - den Anlern-Modus zu versetzen.

    • - - -
    • led
      - Schaltet die LED des CUL: aus (00), an (01) oder blinkend (02). -

    • -
    • ITClock
      - Setzt die IT clock fü Intertechno V1 Protokoll. Default 250. -

    • -
    - - - Get -
      -
    • version
      - gibt die Version der CUL Firmware zurück -

    • -
    • uptime
      - gibt die Betriebszeit des CULs zurück (Zeit seit dem letzten Reset - des CULs)

    • - -
    • raw
      - Sendet einen CUL Firmware Befehl und wartet auf eine Rückgabe des - CULs. Siehe auch README der Firmware für nähere - Erläuterungen zu den CUL Befehlen.

    • - -
    • fhtbuf
      - Der CUL hat einen Puffer für Nachrichten für FHT. Wenn der - Puffer voll ist, werden neu empfangene Telegramme ignoriert und eine - "EOB" Meldung wird in die FHEM Logdatei geschrieben. - - fhtbuf gibt den freien Speicher dieses Puffers (in hex) - zurück, ein leerer Puffer im CUL V2 hat 74 Byte, im CUL V3/CUN(O) - hat 200 Byte. Eine Telegramm benötigt 3 + 2x(Anzahl der FHT - Befehle) Byte, dies ist ein Grund, warum man mehrere FHT Befehle mit - einem set senden sollte. Ein weiterer Grund ist, - dass diese FHT Befehle in einem "Paket" zum FHT Gerät gesendet werden. -

    • - -
    • ccconf
      - Liest einige CUL Register des CC1101 (Sende- und Empfängerchips) - aus (Frequenz, Bandbreite, etc.) und stellt diese in lesbarer Form dar. -

    • - -
    • cmds
      - In abhägigkeit der installierten Firmware hat der CUL/CUN(O) - unterschiedliche Befehlssätze. Nähere Informationen über - die Befehle bzw. deren Interpretation siehe README Datei der - verwendeten CUL Firmware. Siehe auch Anmerkungen beim raw Befehl. -

    • - -
    • credit10ms
      - Der Funkraum darf für eine Dauer von credit10ms*10 ms belegt - werden, bevor die gesetzliche 1% Grenze erreicht ist und eine - LOVF Meldung ausgegeben wird.

    - - - Attribute -
      -
    • addvaltrigger
      - Generiert Trigger für zusätzliche Werte. Momentan sind dies - RSSI und RAWMSG für die CUL Familie und RAWMSG für FHZ. -

    • - -
    • connectCommand
      - culfw Befehl, was nach dem Verbindungsaufbau mit dem USB-Gerät, nach - Senden der zum Initialisieren der konfigurierten rfmode benötigten - Befehle gesendet wird. -
    • - -
    • do_not_notify
    • -
    • dummy
    • - -
    • hmId
      - Setzt die HomeMatic ID des Gerätes. Wenn dieses Attribut fehlt, - wird die ID zu F1<FHTID> gesetzt. Bemerkung 1: Nach dem Setzen - bzw. Verändern dieses Attributes müssen alle HomeMatic - Geräte neu angelernt werden. Bemerkung 2: Der Wert muss - eine 6-stellige Hexadezimalzahl sein, 000000 ist ungültig. FHEM - überprüft nicht, ob die ID korrekt ist, im Zweifelsfall - funktioniert die Kommunikation nicht.

    • - -
    • hmProtocolEvents
      - Generiert Ereignisse für HomeMatic Telegramme. Diese werden - normalerweise für die Fehlersuche verwendet, z.B. durch Aktivieren - von inform timer in einer telnet Sitzung bzw. im - Event Monitor Fenster im FHEMWEB Frontend.
      - Beispiel: -
        - - 2012-05-17 09:44:22.515 CUL CULHM RCV L:0B N:81 CMD:A258 SRC:...... - DST:...... 0000 (TYPE=88,WAKEMEUP,BIDI,RPTEN) - -
      -

    • - -
    • longids
      - Durch Kommata getrennte Liste von Device-Typen für Empfang von - langen IDs mit den CUL. Diese zusätzliche ID erlaubt es - Wettersensoren, welche auf dem gleichen Kanal senden zu unterscheiden. - Hierzu wird eine zufällig generierte ID hinzugefügt. Wenn Sie - longids verwenden, dann wird in den meisten Fällen nach einem - Batteriewechsel ein neuer Sensor angelegt. - Standardmäßig werden keine langen IDs verwendet.
      - Folgende Module verwenden diese Funktionalität: - 14_Hideki, 41_OREGON, 14_CUL_TCM97001, 14_SD_WS07.
      - Beispiele: -
        - # Keine langen IDs verwenden (Default Einstellung):
        - attr cul longids 0
        - # Immer lange IDs verwenden:
        - attr cul longids 1
        - # Verwende lange IDs für SD_WS07 Devices.
        - # Device Namen sehen z.B. so aus: SD_WS07_TH_3 for channel 3.
        - attr cul longids SD_WS07 -
      -

    • - -
    • model (CUL,CUN)

    • - -
    • rfmode
      - Konfiguriert den RF Transceiver des CULs (CC1101). Verfügbare - Argumente sind: -
        -
      • SlowRF
        - Für die Kommunikation mit FS20/FHT/HMS/EM1010/S300/Hoermann - Geräten @1 kHz Datenrate (Standardeinstellung).
      • - -
      • HomeMatic
        - Für die Kommunikation mit HomeMatic Geräten @10 kHz - Datenrate.
      • - -
      • MAX
        - Für die Kommunikation mit MAX! Geräten @10 kHz - Datenrate.
      • -
      • WMBus_S
      • -
      • WMBus_T
        - Für die Kommunikation mit Wireless M-Bus Geräten wie - Wasser-, Gas- oder Elektrozählern. Wireless M-Bus verwendet - zwei unterschiedliche Kommunikationsarten, S-Mode und T-Mode. In - diesem Modus ist der Empfang von anderen Protokollen wie SlowRF - oder HomeMatic nicht möglich.
      • -
      -

    • - -
    • sendpool
      - Wenn mehr als ein CUL verwendet wird, um einen größeren - Bereich abzudecken, können diese sich gegenseitig - beeinflussen. Dieses Phänomen wird auch Palm-Beach-Resort Effekt - genannt. Wenn man diese zu einen gemeinsamen Sende"pool" - zusammenschließt, wird das Senden der einzelnen Telegramme - seriell (d.h. hintereinander) durchgeführt. - Wenn z.B. drei CUN's zur - Verfügung stehen, werden folgende Attribute gesetzt:
      - attr CUN1 sendpool CUN1,CUN2,CUN3
      - attr CUN2 sendpool CUN1,CUN2,CUN3
      - attr CUN3 sendpool CUN1,CUN2,CUN3

      -

    • - -
    • showtime
    • -
    • readingFnAttributes
    • -
    -
    -
- -=end html_DE -=cut diff --git a/FHEM/10_Betty.pm b/FHEM/10_Betty.pm deleted file mode 100644 index 9fe6b47..0000000 --- a/FHEM/10_Betty.pm +++ /dev/null @@ -1,176 +0,0 @@ -############################################## -# $Id: $ -package main; - -use strict; -use warnings; -use SetExtensions; - -my %sets = ( - "clear:noArg" => "", - "time:noArg" => "", - "raw" => "", -); - -sub -Betty_Initialize($) -{ - my ($hash) = @_; - - - $hash->{Match} = "^y.*"; - $hash->{SetFn} = "Betty_Set"; - $hash->{DefFn} = "Betty_Define"; - $hash->{ParseFn} = "Betty_Parse"; - $hash->{AttrList} = "IODev ". $readingFnAttributes; -} - - - -################################### -sub -Betty_Set($@) { - my ($hash, @a) = @_; - - return "set $hash->{NAME} needs at least one parameter" if(@a < 2); - - my $me = shift @a; - my $cmd = shift @a; - my $arg = shift @a; - my $arg2 = shift @a; - - return join(" ", sort keys %sets) if ($cmd eq "?"); - - if ($cmd eq "clear") { - my @cH = ($hash); - delete $_->{READINGS} foreach (@cH); - return undef; - - } elsif ($cmd eq "raw") { - my $msg = $arg; - #IOWrite( $hash, $msg ); - IOWrite( $hash, "y", $msg ); - return undef; - - } elsif ($cmd eq "time") { - my $address = $hash->{ADDRESS}; - - my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime; - - my $m = sprintf("%02d%02d%02d%02d",$mday,$wday,$month+1, $year-100); - my $n = sprintf("%02d%02d%02d",$sec, $min, $hour ); - - my $msg = "w".$address; - IOWrite( $hash, "y", $msg ); - $msg = "s0a".$address."0003".$m.$n; - IOWrite( $hash, "y", $msg ); - - return undef; - - } - - return "Unknown argument $cmd, choose one of ". join(" ", sort keys %sets); -} - - -############################# -sub -Betty_Define($$) -{ - my ($hash, $def) = @_; - my @a = split("[ \t][ \t]*", $def); - - return "wrong syntax: define Betty
" - if(int(@a) < 2 || int(@a) > 4); - - my $address = uc($a[2]); - $hash->{ADDRESS} = $address; - $modules{Betty}{defptr}{$address} = $hash; - AssignIoPort($hash); - - readingsSingleUpdate($hash, "state", "Initialized", 1); - - return undef; -} - - -sub -Betty_Parse($$) -{ - my ($hash,$msg) = @_; - - my ($len,$dest,$src,$service,$data) = unpack 'x1A2A2A2A2A*',$msg; - - my $def = $modules{Betty}{defptr}{$src}; - - if(!$def) { - DoTrigger("global","UNDEFINED Betty_$src Betty $src"); - $def = $modules{Betty}{defptr}{$src}; - if(!$def) { - Log3 $hash, 1, "Betty UNDEFINED, address $src"; - return "UNDEFINED Betty_$src Betty $src"; - } - } - - $hash = $def; - my $name = $hash->{NAME}; - - # packet_RFenc - if ($service eq '04') { - my ($addr,$key) = unpack 'A2A2',$data; - - if($hash->{helper}{lastkey } ne $key) { - $hash->{helper}{lastkey } = $key; - $key = sprintf "%02x", hex($key) & 0x7F; - readingsSingleUpdate($hash, "key", $addr."_".$key , 1); - } - - - # packet_test - } elsif ($service eq '01') { - - $data = latin1ToUtf8(pack("H*",$data)); - readingsSingleUpdate($hash, "test", $data , 1); - - # packet_time - } elsif ($service eq '03') { - - my ($request) = unpack 'A2',$data; - - if($request eq "FF") { - my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime; - - my $m = sprintf("%02d%02d%02d%02d",$mday,$wday,$month+1, $year-100); - my $n = sprintf("%02d%02d%02d",$sec, $min, $hour ); - - $msg = "s0a".$src."0003".$m.$n; - IOWrite( $hash, "y", $msg ); - } - - } else { - Log3 $hash, 4, "Betty UNKNOWN MESSAGE $service: $data"; - } - - return $name; -} - - - - -1; - -=pod -=item summary devices communicating with the Betty remote control -=item summary_DE Anbindung der Betty Fernbedienung -=begin html - - -

Betty

-
    - Todo -
- -=end html - - -=cut diff --git a/boop/Boop.pnproj b/boop/Boop.pnproj new file mode 100644 index 0000000..8147a2f --- /dev/null +++ b/boop/Boop.pnproj @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/boop/Make.conf b/boop/Make.conf index c8d471a..a2fb51d 100644 --- a/boop/Make.conf +++ b/boop/Make.conf @@ -1,5 +1,4 @@ SUBDIRS := adc audio cc1100 display flash games gui infrared interrupt \ keyboard rtc serial timer tools -SRCS := crt.s main.c global.c buffer.c syscalls.c - +SRCS := crt.s main.c global.c diff --git a/boop/Makefile b/boop/Makefile index 1f49ca1..f94182d 100644 --- a/boop/Makefile +++ b/boop/Makefile @@ -1,11 +1,10 @@ ############################################################### ##### -##### Makefile for boop - OpenSource firmware for Betty +##### Makefile for boop - communicate with betty ##### Created at 30.8.2007 02:26 am ##### ##### boop V0.1 by netguy - ck@mamalala.net ##### Makefile V0.1 by alterego - alteregon@gmx.net -##### Makefile v0.2 by Tobias - tobias-betty@23.gs ##### ############################################################### @@ -13,21 +12,17 @@ ##### ##### PATHS (default installation) ##### -##### You can put your path-config into Makefile.local +##### You can put your path-config into Makefile.local ##### to override these defaults ##### ############################################################### -#ARMBASE = F:/Tools/GNU_Tools_ARM_Embedded/5.4 -#INCLUDEPATH = $(ARMBASE)/arm-none-eabi/include -#LIBPATH = $(ARMBASE)/arm-none-eabi/lib -#ARMPATH = $(ARMBASE)/bin/ -TOOLPREFIX = arm-none-eabi- -LPCTOOL = lpctool -OPENOCDPATH = F:\Tools\OpenOCD_0_10 -#OPENOCD = $(OPENOCDPATH)\bin\openocd.exe -f $(OPENOCDPATH)\scripts\interface\jlink.cfg -f betty.cfg -OPENOCD = $(OPENOCDPATH)\bin\openocd.exe -f $(OPENOCDPATH)\scripts\interface\uniprog.cfg -f betty.cfg +#ARMBASE=/opt/toolchains/gcc-arm-none-eabi-4_9-2014q4 +#INCLUDEPATH=$(ARMBASE)/include +#ARMPATH=$(ARMBASE)/bin +TOOLPREFIX= arm-none-eabi- +BOOTLOADER_DEVICE=/dev/ttyUSB0 ############################################################### ##### @@ -35,32 +30,20 @@ OPENOCD = $(OPENOCDPATH)\bin\openocd.exe -f $(OPENOCDPATH)\scripts\interface\uni ##### ############################################################### -CC = $(ARMPATH)$(TOOLPREFIX)gcc -AS = $(ARMPATH)$(TOOLPREFIX)gcc -LD = $(ARMPATH)$(TOOLPREFIX)gcc -OC = $(ARMPATH)$(TOOLPREFIX)objcopy -OD = $(ARMPATH)$(TOOLPREFIX)objdump -SIZE = $(ARMPATH)$(TOOLPREFIX)size +CC=$(ARMPATH)$(TOOLPREFIX)gcc +AS=$(ARMPATH)$(TOOLPREFIX)as +#LD=$(ARMPATH)$(TOOLPREFIX)ld +LD=$(CC) +OC=$(ARMPATH)$(TOOLPREFIX)objcopy +OD=$(ARMPATH)$(TOOLPREFIX)objdump -CPUFLAGS = -mcpu=arm7tdmi-s -CFLAGS = -Wall -mthumb-interwork -g3 -c -INC = -I. -Iinterrupt -Idisplay -Ikeyboard -Iaudio -Iinfrared -Iserial -Iflash -Icc1100 -Igui -Itimer -Igames -Iadc -Irtc -Itools -ASFLAGS = -g -I. -mthumb-interwork -LDFLAGS = -mthumb-interwork -nostartfiles -Xlinker -Map -Xlinker boop.map -Tlpc2220_rom.ld -THUMBFLAGS = -mthumb +CPUFLAGS=-mcpu=arm7tdmi-s +OPTFLAGS=-Os +CFLAGS=$(CPUFLAGS) -c -Wall -mthumb-interwork -msoft-float -I$(INCLUDEPATH) -ggdb +ASFLAGS=$(CPUFLAGS) -D --gstabs -mthumb-interwork -mfpu=softfpa +LDFLAGS = -mthumb-interwork -nostartfiles -Xlinker -Map -Xlinker boop.map -Tlpc2220.ld -COMPILE = $(CC) $(CPUFLAGS) $(CFLAGS) $(INC) - -ifeq ($(MAKECMDGOALS),debug) - COMPILE += -D DEBUGMODE - OPTFLAGS = -O0 -else - OPTFLAGS = -Og -endif - -ifeq ($(MAKECMDGOALS),release) - COMPILE += -D RELEASE -endif +THUMBFLAGS=-mthumb -include Makefile.local @@ -70,88 +53,46 @@ endif ##### ############################################################### -# Recursive expansion of Makefile rules. -define expand_dir - # Reset vars for subdir for the case that Make.conf does not exist - SUBDIRS := - SRCS := - THUMBSRCS := - THUMBSRCSUNOPT := - -include $(1)Make.conf - ALLSRCS += $$(SRCS:%=$(1)%) - ALLTHUMBSRCS += $$(THUMBSRCS:%=$(1)%) - ALLTHUMBSRCSUNOPT += $$(THUMBSRCSUNOPT:%=$(1)%) - DEPS += $(1).deps - $$(foreach adir,$$(SUBDIRS),$$(eval $$(call expand_dir,$(1)$$(adir)/))) -endef +all: boop_rom.bin -ALLSRCS := -ALLTHUMBSRCS := -ALLTHUMBSRCSUNOPT := +boop_rom.bin: boop_ram.elf + $(OC) -O binary boop_ram.elf boop_ram.bin + $(OC) -O ihex boop_ram.elf boop_ram.hex -$(eval $(call expand_dir,)) +boop_ram.elf: crt.o lcd.o fonty.o main.o irq.o keyboard.o soundcore.o + $(LD) -o boop_ram.elf crt.o lcd.o fonty.o main.o irq.o keyboard.o soundcore.o $(LDFLAGS) -OBJS := $(patsubst %.s,%.o,$(ALLSRCS:.c=.o)) $(ALLTHUMBSRCS:.c=.thumb.o) $(ALLTHUMBSRCSUNOPT:.c=.thumbunopt.o) +test: boop_ram.elf + $(OD) -h boop_ram.elf -all: $(DEPS) boop_rom.bin boop_rom.hex +crt.o: crt.s + $(AS) $(ASFLAGS) -o crt.o crt.s -debug: $(DEPS) boop_rom.bin boop_rom.hex +irq.o: irq.c irq.h + $(CC) $(CFLAGS) $(OPTFLAGS) -o irq.o irq.c -release: clean version $(DEPS) boop_rom.bin boop_rom.hex - @echo -n '\n\nRelease erstellt SVN Version ++' - @cat .svn/entries | sed -n '4p' - -version: - echo -n '#define SVNVERSION ' > version.h - svnversion -n |cut -f1 -d M -n >> version.h - echo >> version.h +keyboard.o: keyboard.c keyboard.h + $(CC) $(CFLAGS) -o keyboard.o keyboard.c -version.h: - echo -n '#define SVNVERSION ' > version.h - svnversion -n|cut -f1 -d M >> version.h - echo >> version.h - -test: boop_rom.elf - $(OD) -h $< +soundcore.o: soundcore.c soundcore.h + $(CC) $(CFLAGS) -o soundcore.o soundcore.c -%.bin: %.elf - $(OC) -O binary $< $@ +lcd.o: lcd.c lcd.h + $(CC) $(CFLAGS) $(OPTFLAGS) $(THUMBFLAGS) -o lcd.o lcd.c -%.hex: %.elf - $(OC) -O ihex $< $@ +fonty.o: fonty.c fonty.h + $(CC) $(CFLAGS) $(OPTFLAGS) $(THUMBFLAGS) -o fonty.o fonty.c -boop_rom.elf: $(OBJS) - $(LD) $(LDFLAGS) -L$(LIBGCCPATH) -L$(LIBCPATH) -o $@ $^ $(LIBS) - arm-none-eabi-size $@ +main.o: main.c + $(CC) $(CFLAGS) $(OPTFLAGS) -o main.o main.c -%.o: %.s - $(CC) $(ASFLAGS) -c -o $@ $< +ramload: boop_ram.bin + lpctool -d $(BOOTLOADER_DEVICE) -r boop_ram.bin -%.o: %.c - $(COMPILE) $(OPTFLAGS) -c -MMD -MF $(dir $<).deps/$(notdir $@) -o $@ $< - -%.thumb.o: %.c - $(COMPILE) $(THUMBFLAGS) $(OPTFLAGS) -c -MMD -MF $(dir $<).deps/$(notdir $@) -o $@ $< - -%.thumbunopt.o: %.c - $(COMPILE) $(THUMBFLAGS) -c -MMD -MF $(dir $<).deps/$(notdir $@) -o $@ $< - -$(DEPS): - mkdir -p $@ - -uresident: resident -resident: boop_rom.bin - $(LPCTOOL) -i -v -e -a $< - -program: boop_rom.bin - $(OPENOCD) -c init -c 'flash_boop $<' -c shutdown +resident: boop_ram.bin + lpctool -d $(BOOTLOADER_DEVICE) -i -v -e -a boop_ram.bin clean: - -rm -Rf $(DEPS) - -rm -f $(OBJS) *.elf *.bin *.hex *.map *~ + $(RM) -v *.o *.elf *.bin *.hex *~ -clean2: - -rm -Rf $(DEPS) - -rm -f $(OBJS) *.elf *.hex *.map *~ - --include $(DEPS:=/*) +### EOF diff --git a/boop/Makefile.local.WinARM b/boop/Makefile.local.WinARM index efcfb9d..ffc96ae 100644 --- a/boop/Makefile.local.WinARM +++ b/boop/Makefile.local.WinARM @@ -16,6 +16,5 @@ LIBPATH = $(ARMBASE)/arm-elf/lib/interwork ARMPATH = $(ARMBASE)/bin TOOLPREFIX = arm-elf- LPCTOOL = lpctool.exe -OPENOCD = C:\OpenOCD\openocd.exe -f betty.cfg -f C:\OpenOCD\OpenOCD\interface\parport.cfg ######################## EOF ################################## diff --git a/boop/Makefile.local.linuxARM b/boop/Makefile.local.linuxARM index e87b3b7..8e68b7a 100644 --- a/boop/Makefile.local.linuxARM +++ b/boop/Makefile.local.linuxARM @@ -3,17 +3,23 @@ ##### Makefile.local.linuxARM for boop ##### Created in the early morninghours ##### -##### Copy this to Makefile.local and modify for your Linux -##### installation +##### Makefile.local.linuxARM ##### ############################################################### -ARMBASE = /opt/arm-elf -INCLUDEPATH = $(ARMBASE)/include -LIBPATH = $(ARMBASE)/lib/gcc/arm-elf/4.1.1/interwork -ARMPATH = $(ARMBASE)/bin -TOOLPREFIX = arm-elf- -LPCTOOL = lpctool -d /dev/ttyUSB0 -OPENOCD = openocd -f betty.cfg -f interface/parport.cfg +############################################################### +##### +##### PATHS (default installation) +##### +##### You can put your path-config into Makefile.local +##### to override these defaults +##### +############################################################### + +ARMBASE=/opt/armtool/4.1.1 +INCLUDEPATH=$(ARMBASE)/include +LIBPATH=$(ARMBASE)/arm-elf/lib/interwork +ARMPATH=$(ARMBASE)/bin +TOOLPREFIX=/arm-elf- ######################## EOF ################################## diff --git a/boop/README b/boop/README index 109a0c2..4b95612 100644 --- a/boop/README +++ b/boop/README @@ -1,3 +1,11 @@ +24.7.2009: + +boop for running in RAM. Created by telekatz for testing sound features. +Run it with +lpctool -r boop_rom.bin -d /dev/ttyUSB2 +See Thread +http://bettyhacks.com/forum/index.php?topic=215.0 + 9.11.2007: - serial console: diff --git a/boop/adc/Make.conf b/boop/adc/Make.conf deleted file mode 100644 index 26f9a6d..0000000 --- a/boop/adc/Make.conf +++ /dev/null @@ -1 +0,0 @@ -THUMBSRCS := adc.c adcirq.c diff --git a/boop/adc/adc.c b/boop/adc/adc.c deleted file mode 100644 index 1b1a838..0000000 --- a/boop/adc/adc.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - adc.c - adc readout for battery status - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "irq.h" -#include "timerfuncs.h" -#include "adc.h" -#include "adcirq.h" -#include "lcd.h" -#include "fonty.h" -#include "lpc2220.h" - -extern volatile unsigned int bat_adc; -extern volatile unsigned int bmax, bmin; -extern unsigned int is_drawing; - -static unsigned short bat_max, bat_min; -static unsigned short diffs[4]; -static unsigned short diff; -volatile unsigned char bat_state; - - - -void draw_b(unsigned char x, unsigned char y) -{ - unsigned char w; - - if(!(is_drawing)) - { - if(bat_state & BAT_DEBUG) - { - draw_block(4,0,108,24,3,DRAW_ERASE); - draw_numU(4,0,bat_min>>2,0,3,DRAW_PUT); - draw_numU(32,0,bat_max>>2,0,3,DRAW_PUT); - draw_numU(4,8,(bat_max>>2)-(bat_min>>2),0,3,DRAW_PUT); - - draw_numU(60,0,bat_min,0,3,DRAW_PUT); - draw_numU(88,0,bat_max,0,3,DRAW_PUT); - draw_numU(60,8,bat_max-bat_min,0,3,DRAW_PUT); - if((bat_state & BAT_NORMAL)) - draw_string(4,16,"Bat.Operation",3,DRAW_PUT); - if((bat_state & BAT_CHARGE)) - draw_string(4,16,"Charging",3,DRAW_PUT); - if((bat_state & BAT_CHARGE_DONE)) - draw_string(4,16,"Done Charging",3,DRAW_PUT); - } - - if (bat_min<0x320) - w = 0; - else if (bat_min>0x380) - w = 12; - else - w = (bat_min-0x320)/8; - - draw_block(x+1,y+1,12,5,3,DRAW_ERASE); - draw_rect(x,y,14,7,1,3,DRAW_PUT); - draw_vline(x+14,y+2,3,3,DRAW_PUT); - - if(w>0) - draw_block(x+1,y+1,w,5,2,DRAW_PUT); - - if(w<12) - draw_block(x+1+w,y+1,12-w,5,0,DRAW_PUT); - } -} - -void calcBat(unsigned int cb) -{ - ADCR |= ((1<<21) | (1<<24)); -// ADCR |= (1<<24); /* Start A/D Conversion (START:0=1) */ - ADINTEN = 1<<5; -} - -void showBat(unsigned int cb) -{ - static int cnt; - unsigned char x; - - bat_max = bmax; - bat_min = bmin; - - cnt &= 0x03; - diffs[cnt++] = bat_max - bat_min; - - diff = 0; - for(x=0;x<4;x++) - diff += diffs[x]; - diff >>= 2; - - if(bat_state & BAT_NORMAL) - { - if(diff > 15) - { - bat_state |= BAT_CHARGE; - bat_state &= ~BAT_NORMAL; - } - } - else if(bat_state & BAT_CHARGE) - { - if(bat_max >= 1020) - { - bat_state |= BAT_CHARGE_DONE; - bat_state &= ~BAT_CHARGE; - } - } - else if(bat_state & BAT_CHARGE_DONE) - { - if(bat_max < 1000) - { - bat_state |= BAT_CHARGE; - bat_state &= ~BAT_CHARGE_DONE; - } - } - - if((diff < 7) && (bat_min < 1000)) - { - bat_state |= BAT_NORMAL; - bat_state &= ~BAT_CHARGE; - bat_state &= ~BAT_CHARGE_DONE; - } - - draw_b(113,0); - bmin = bat_max; - bmax = bat_min; -} - -void startADC(void) -{ - ADCR = ( 1<<5 | ((15-1)<<8) /*| (1UL<<16)*/ | (1UL<<21) ); - ADCR |= (1UL<<24); /* Start A/D Conversion (START:0=1) */ - while ((ADDR & (1UL<<31)) == 0); /* Wait for the conversion to complete (DONE=1)*/ - bmin = ((ADDR >> 6) & 0x03FF); /* Extract the A/D result */ - ADCR &=~(1UL<<21); - bmax = bmin; - bat_max = bmin; - bat_min = bmin; - bat_state = BAT_NORMAL; - - diffs[0] = 0; - diffs[0] = 1; - diffs[0] = 2; - diffs[0] = 3; - - VICVectAddr14 = (unsigned long)&(adcIRQ); - VICVectCntl14 = VIC_SLOT_EN | INT_SRC_ADC; - VICIntEnable = INT_ADC; - - startCB(addTimerCB(calcBat, 6)); - startCB(addTimerCB(showBat, 220)); -} diff --git a/boop/adc/adc.h b/boop/adc/adc.h deleted file mode 100644 index 1f3fe81..0000000 --- a/boop/adc/adc.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - adc.h - adc readout for battery status - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef ADC_H -#define ADC_H - -#define BAT_NORMAL 0x01 -#define BAT_CHARGE 0x02 -#define BAT_CHARGE_DONE 0x04 -#define BAT_DEBUG 0x80 - - -void startADC(void); -void calcBat(unsigned int cb); -void showBat(unsigned int cb); - -#endif diff --git a/boop/adc/adcirq.c b/boop/adc/adcirq.c deleted file mode 100644 index 099b461..0000000 --- a/boop/adc/adcirq.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - adcirq.c - adc iinterrupt handler - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "irq.h" -#include "adcirq.h" -#include "adc.h" -#include "lpc2220.h" - -volatile unsigned int bat_adc; -volatile unsigned int bmax, bmin; - -void __attribute__ ((section(".text.fastcode"))) adcIRQ (void) -{ - ADINTEN = 0; - bat_adc = ADDR; - bat_adc >>= 6; - bat_adc &= 0x03FF; - if(bmax < bat_adc) - bmax = bat_adc; - if(bmin > bat_adc) - bmin = bat_adc; - ADCR &=~(1UL<<21); -} diff --git a/boop/adc/adcirq.h b/boop/adc/adcirq.h deleted file mode 100644 index c2e1027..0000000 --- a/boop/adc/adcirq.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - adcirq.c - adc iinterrupt handler - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef ADCIRQ_H -#define ADCIRQ_H - -void __attribute__ ((section(".text.fastcode"))) adcIRQ (void); - -#endif diff --git a/boop/audio/Make.conf b/boop/audio/Make.conf deleted file mode 100644 index ca8a4d0..0000000 --- a/boop/audio/Make.conf +++ /dev/null @@ -1,2 +0,0 @@ -THUMBSRCS := sound.c sid.c -SRCS := soundirq.c diff --git a/boop/audio/sid.c b/boop/audio/sid.c deleted file mode 100644 index 9ade33e..0000000 --- a/boop/audio/sid.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - sid.c - tone encoder routines - Copyright (C) 2008 Telekatz - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "irq.h" -#include "sid.h" -#include "sound.h" -#include "soundirq.h" -#include "lpc2220.h" -#include "timerfuncs.h" - -unsigned int playtone_cb; -unsigned char *playtone[3]; -unsigned char playstate; -unsigned char tonelen[3]; -unsigned short playcounter; -unsigned short playcountermax; - -const unsigned short AttackRate[16] = {19531,9766,2441,1628,1028,673,574,488,391,156,78,49,39,13,8,5}; -const unsigned short DecayReleaseRate[16] = {6510,1628,814,543,343,233,191,163,130,52,16,13,4,3,2}; - -const unsigned char song2[] = { note_d,2, note_e,2, note_f,2, note_e,2, note_d,2, note_g,2, note_f,2, note_e,2, - note_d,2, note_e,2, note_f,2, note_g,2, note_a,2, note_g,2, note_f,2, note_e,2, - note_d,2, note_e,2, note_f,2, note_e,2, note_d,2, note_g,2, note_f,2, note_e,2, - note_cis,2, note_d,2, note_e,2, note_f,2, note_g,2, note_a,2, note_f,2, note_e,2,0}; - -const unsigned char song3[] = { note_0,1, note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, - note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, - note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, - note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, note_c,2, note_c,1,0}; - -const unsigned short notes[] = {0,4455,4720,5001,5298,5613,5947,6301,6676,7072,7493,7939,8411,0}; - - -void SIDsetfrq(unsigned char voice, unsigned short frq) { - - if (voice < voices) { - SID.reg[(voice * 7) + REG_FREQhi] = frq>>8; - SID.reg[(voice * 7) + REG_FREQlo] = frq & 0xFF; - } -} - -void SIDsetadsr(unsigned char voice,unsigned char attack, unsigned char decay, unsigned char sustain, unsigned char release) { - - if (voice < voices) { - SID.reg[(voice * 7) + REG_AttackDecay] = (attack<<4) + (decay&0x0f); - SID.reg[(voice * 7) + REG_SustainRelease] = (sustain<<4) + (release&0x0f); - } -} - -void SIDsetwave(unsigned char voice,unsigned char wave) { - - if (voice < voices) { - SID.reg[(voice * 7)+REG_Control] &= 0x0f; - SID.reg[(voice * 7)+REG_Control] |= wave; - } -} - -void SIDplaytone(unsigned int cb) { - unsigned char tone; - unsigned char x; - - switch (playstate) { - case 0x01: - playstate++; - setCBIntervall(playtone_cb,48); - for (x=0; x<3; x++) { - if (playtone[x]) { - if (!tonelen[x]) { - tone = *playtone[x]; - if (tone) { - playtone[x]++; - tonelen[x] = *playtone[x]; - playtone[x]++; - SIDsetfrq(x,notes[tone]); - SID.reg[(x*7)+REG_Control] |= GATE; - } - else { - playstate = 0x00; - playtone[0] = 0; - playtone[1] = 0; - playtone[2] = 0; - removeTimerCB(playtone_cb); - } - } - } - } - break; - case 0x02: - playstate = 0x01; - for (x=0; x<3; x++) { - if (playtone[x]) { - tonelen[x]--; - if (!tonelen[x]) - SID.reg[(x*7)+REG_Control] &= ~GATE; - } - } - setCBIntervall(playtone_cb,2); - break; - default: - playstate = 0x00; - removeTimerCB(playtone_cb); - } -} - -void SIDplaydump(unsigned int cb) { - unsigned char x; - - if (playcounter++ < playcountermax) { - for (x=0;x<14;x++) { - SID.reg[x] = *playtone[0]; - playtone[0]++; - } - } - else { - SID.reg[REG_Control] &= ~GATE; - SID.reg[7+REG_Control] &= ~GATE; - SID.reg[14+REG_Control] &= ~GATE; - playstate = 0x00; - playtone[0] =0; - removeTimerCB(playtone_cb); - } -} - -void beepEnd(unsigned int cb) { - SID.reg[REG_Control] &= ~GATE; - SID.flags |= SID_AUTO_OFF; - removeTimerCB(cb); -} - -void beep(unsigned char n) { - - - switch(n) { - case 1: - SIDsetwave(0,TRIANGLE); - SIDsetadsr(0,0,10,0,10); - SIDsetfrq(0,8411); - break; - default: - SIDsetwave(0,SAWTOOTH); - SIDsetadsr(0,1,5,10,5); - SIDsetfrq(0,5001); - break; - } - //PWMPR = 0; - switchSound(SOUND_ON); - SID.flags |= SIDenable; - SID.reg[REG_Control] |= GATE; - startCB(addTimerCB(beepEnd, 20)); -} diff --git a/boop/audio/sid.h b/boop/audio/sid.h deleted file mode 100644 index 05833b5..0000000 --- a/boop/audio/sid.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - sid.h - tone encoder routines - Copyright (C) 2008 Telekatz - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef SID_H -#define SID_H - -// SID voice controll register bits -#define GATE (1<<0) -#define SYNC (1<<1) -#define RINGMOD (1<<2) -#define TEST (1<<3) -#define TRIANGLE (1<<4) -#define SAWTOOTH (1<<5) -#define RECTANGLE (1<<6) -#define NOISE (1<<7) - -// SID RES/FILT ( reg.23 ) -#define FILT1 (1<<0) -#define FILT2 (1<<1) -#define FILT3 (1<<2) -// SID MODE/VOL ( reg.24 ) -#define VOICE3OFF (1<<7) - -// SID registers -#define REG_FREQlo 00 -#define REG_FREQhi 01 -#define REG_PWlo 02 -#define REG_PWhi 03 -#define REG_Control 04 -#define REG_AttackDecay 05 -#define REG_SustainRelease 06 - -#define REG_FClo 21 -#define REG_FChi 22 -#define REG_ResFilt 23 -#define REG_ModeVol 24 - -#define max_sid_registers 25 -#define max_level 40000 -#define voices 3 -#define sustainstep 2666 - -//SID.flags -#define ATTACK 1 -#define SIDenable (1<<3) -#define phaseoverflow (1<<4) -#define SID_AUTO_OFF (1<<5) - - -#define note_c 1 -#define note_cis 2 -#define note_d 3 -#define note_dis 4 -#define note_e 5 -#define note_f 6 -#define note_fis 7 -#define note_g 8 -#define note_gis 9 -#define note_a 10 -#define note_ais 11 -#define note_h 12 -#define note_0 13 - -extern const unsigned char song2[]; -extern const unsigned char song3[]; -extern const unsigned char song4[]; - -extern const unsigned short notes[]; - - -const unsigned short AttackRate[16]; -const unsigned short DecayReleaseRate[16]; - -struct voice_ { - unsigned short envelope; - unsigned short phase; -}; - -struct SID_ { - struct voice_ voice[3]; - unsigned short noise; - unsigned char flags; - unsigned char reg[max_sid_registers]; - -}; - -struct SID_ SID; - -extern unsigned int playtone_cb; -extern unsigned char *playtone[3]; -extern unsigned char playstate; -extern unsigned char tonelen[3]; -extern unsigned short playcounter; -extern unsigned short playcountermax; - -void SIDsetfrq(unsigned char voice, unsigned short frq); -void SIDsetadsr(unsigned char voice,unsigned char attack, unsigned char decay, unsigned char sustain, unsigned char release); -void SIDsetwave(unsigned char voice,unsigned char wave); -void SIDplaytone(unsigned int cb); -void SIDplaydump(unsigned int cb); -void beep(unsigned char n); - -#endif diff --git a/boop/audio/sidfiles.h b/boop/audio/sidfiles.h deleted file mode 100644 index 6f10dde..0000000 --- a/boop/audio/sidfiles.h +++ /dev/null @@ -1,1006 +0,0 @@ - -const unsigned char song1[] = { -0x00,0x00,0x00,0x00,0x20,0x11,0x70,0x00,0x00,0x00,0x00,0x20,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa2,0x25,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa2,0x25,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa2,0x25,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa2,0x25,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa2,0x25,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa2,0x25,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa2,0x25,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa2,0x25,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa2,0x25,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa2,0x25,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa2,0x25,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa2,0x25,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa5,0x1f,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa5,0x1f,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa5,0x1f,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa5,0x1f,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa5,0x1f,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa5,0x1f,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa5,0x1f,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa5,0x1f,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa5,0x1f,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa5,0x1f,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa5,0x1f,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xa5,0x1f,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xa5,0x1f,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa5,0x1f,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa5,0x1f,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa5,0x1f,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa5,0x1f,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa5,0x1f,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0x1e,0x19,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0x87,0x21,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xdf,0x1d,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xdf,0x1d,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xdf,0x1d,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xdf,0x1d,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xdf,0x1d,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xdf,0x1d,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xdf,0x1d,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xdf,0x1d,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xdf,0x1d,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xdf,0x1d,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xdf,0x1d,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xdf,0x1d,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xef,0x13,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xef,0x13,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xef,0x13,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xef,0x13,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xef,0x13,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xef,0x13,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xef,0x13,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xef,0x13,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xef,0x13,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xef,0x13,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xef,0x13,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xef,0x13,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x3e,0x2a,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0xa2,0x25,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -/* -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xc3,0x10,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0xd2,0x0f,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x18,0x0e,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x87,0x21,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0xd1,0x12,0x00,0x00,0x21,0x11,0x70,0x30,0x0b,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x1f,0x15,0x00,0x00,0x21,0x11,0x70,0x8f,0x0c,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x60,0x16,0x00,0x00,0x21,0x11,0x70,0xd1,0x12,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x1e,0x19,0x00,0x00,0x21,0x11,0x70,0x1f,0x15,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0x31,0x1c,0x00,0x00,0x21,0x11,0x70,0x60,0x16,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70, -0xc1,0x2c,0x00,0x00,0x21,0x11,0x70,0x31,0x1c,0x00,0x00,0x21,0x00,0x70 -*/ -}; diff --git a/boop/audio/sound.c b/boop/audio/sound.c deleted file mode 100644 index 3eee98c..0000000 --- a/boop/audio/sound.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - sound.c - sound core routines - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "irq.h" -#include "sound.h" -#include "soundirq.h" -#include "lpc2220.h" -#include "pwm.h" - -#define AUTO_OFF_TIME 0x4000 - - -extern unsigned int tval; -extern unsigned char bl_val, cmp_val; -extern unsigned int slen; -extern unsigned char *sdata; -extern volatile unsigned char sact; -extern char out1; -extern char last_sample; -extern unsigned char sound_shutdown; - -unsigned char timeout; -unsigned int auto_timeout; - -void startSoundIRQ(void) -{/* - timeout = 0; - auto_timeout = 0; - out1 = 0; - - PWMTC = 0; -// PWMPR = 0; - PWMPR = 7; - PWMMR0 = 0x1E6; // pwm rate - PWMMR2 = 0x00; // pwm value - PWMLER = 0x05; - PWMMCR = 0x03; - PWMPCR = (1<<10); - PWMTCR = 0x03; - PWMTCR = 0x09; - - //VICVectAddr0 = (unsigned long)&(soundIRQ); - //VICVectCntl0 = VIC_SLOT_EN | INT_SRC_PWM; - VICIntSelect |= INT_PWM; - VICIntEnable = INT_PWM; - */ -} - -void initSound(void) -{ - slen = 0; - sdata = 0; - sact = 0; - tval = 0; - last_sample = 0; - bl_val = 0x3F; - timeout = 0; - auto_timeout = 0; - out1 = 0; -} - -void switchSound(unsigned char onoff) -{ - if(onoff) - { - - PWM_set_frequency(30864); - - sound_shutdown = 0; - PINSEL0 &= ~(3 << (2 * SND_PWM)); // IO - PINSEL0 |= (2 << (2 * SND_PWM)); // PWM - PINSEL0 &= ~(3 << (2 * SND_EN)); // IO - PINSEL0 &= ~(3 << (2 * SND_ON)); // IO - FIODIR0 |= (1< - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "irq.h" -#include "soundirq.h" -#include "sound.h" -#include "sid.h" -#include "lpc2220.h" -#include "pwm.h" - -#define AUTO_OFF_TIME 0x4000 - -/* -extern volatile unsigned int tval; -extern volatile unsigned char bl_val, cmp_val; -extern volatile unsigned int slen; -extern volatile unsigned char *sdata; -extern volatile unsigned char sact; -extern volatile char out1; -extern volatile char last_sample; -*/ - -unsigned int tval; -unsigned int slen; -unsigned char *sdata; -unsigned char sact; -unsigned char out1; -unsigned char last_sample; -unsigned char sound_shutdown; -unsigned char tcount; - -const unsigned char prevvoice[3] = {2,0,1}; - -void __attribute__ ((section(".text.fastcode"))) soundIRQ (void) -{ - PWMIR = 0x01; - -/* - // play sample - if(sact != 0) - { - out1++; - if(out1 == 2) // quik & dirty anti-aliasing filter - { // (2 point linear interpolated 2x upsampling) - - PWMMR2 = (sdata[tval] + last_sample) >> 1; - PWMLER = 0x04; - } - else - if(out1 == 4) // prepare next sample - { - out1 = 0; - last_sample = sdata[tval]; - PWMMR2 = last_sample; - tval++; - if(tval >= slen) - { - tval = 0; - FIOCLR0 |= (1<>6; - for (x=0; x<3; x++) { - volatile unsigned char phase8; - unsigned char tempwave; - - if ((SID.reg[(x * 7) + REG_Control] & SYNC) && (SID.flags & phaseoverflow)) - SID.voice[x].phase = 0; - - - tempphase=SID.voice[x].phase + ((SID.reg[(x * 7) + REG_FREQlo] + (SID.reg[(x * 7) + REG_FREQhi]<<8))>>4); - phase8 = (SID.voice[x].phase)>>8; - - switch (SID.reg[(x * 7) + REG_Control] & 0xf0) { - case TRIANGLE: - - tempwave = phase8<<1; - if (phase8 & 0x80) - tempwave ^= 0xff; - - if ((SID.reg[(x * 7) + REG_Control] & RINGMOD) && (SID.voice[prevvoice[x]].phase & 0x8000)) - tempwave ^= 0xff; - - wave[x] = tempwave - 128; - break; - - - case SAWTOOTH: - wave[x] = phase8 - 0x80; - break; - - case RECTANGLE: - if(phase8 > ((SID.reg[(x * 7) + REG_PWlo] + (SID.reg[(x * 7) + REG_PWhi]<<8)) >> 4)) - wave[x] = 127; - else - wave[x] = -128; - break; - - case NOISE: - if(SID.voice[x].phase & 0x4000) - wave[x]=noise8; - break; - - default: - wave[x] = 0; - } - sig[x]=((SID.voice[x].envelope)>>8) * (wave[x]); - - if (SID.voice[x].phase > tempphase) - SID.flags |= phaseoverflow; - else - SID.flags &= ~phaseoverflow; - - SID.voice[x].phase=tempphase; - - if (!PWMcounter) { - signed int envelope; - if (SID.reg[(x * 7) + REG_Control] & GATE) { - if (!(SID.flags & (ATTACK<>4]; - if (envelope > max_level) { - SID.voice[x].envelope = max_level; - SID.flags |= (ATTACK<>4))) - SID.voice[x].envelope = sustainstep * (SID.reg[(x * 7) + REG_SustainRelease]>>4); - else - SID.voice[x].envelope = envelope; - } - } - else { - SID.flags &= ~(ATTACK<>8); - - autooff |= SID.voice[x].envelope; - } - - PWMMR2 = temp; - PWMLER = 0x04; - - if (!(PWMcounter--)) - PWMcounter = 29; - - temp = SID.noise; - SID.noise=SID.noise << 1; - - temp ^= SID.noise; - if ( ( temp & 0x4000 ) == 0x4000 ) - { - SID.noise |= 1; - } - - if((SID.flags & SID_AUTO_OFF) && !autooff) { - FIOCLR0 |= (1<. +*/ + +#include "lpc2220.h" +#include "batt.h" +#include "lcd.h" + + +void initADC(void) +{ + + /* Setup A/D: 10-bit AIN0 @ 4,2MHz "Non-Burst"-Mode */ + + //PINSEL1 |= (1UL<<28); // set function P0.29 as AIN2 + + // sample AIN0 only => bit 0 = 1 + // CLKDIV = 14 (59/14 = 4.21 < 4.5 MHz) => Bits 8ff = 14-1 + // BURST = 1 => set Bit 16 - wuff: disabled below + // PDN = 1 => set Bit 21 + ADCR = ( 1<<5 | ((14-1)<<8) /*| (1UL<<16)*/ | (1UL<<21) ); + +} +unsigned int getADCvalue(void) +{ + unsigned int val=0; + ADCR = ( 1<<5 | ((14-1)<<8) /*| (1UL<<16)*/ | (1UL<<21) ); + ADCR |= (1UL<<24); /* Start A/D Conversion (START:0=1) */ + while ((ADDR & (1UL<<31)) == 0); /* Wait for the conversion to complete (DONE=1)*/ + val = ((ADDR >> 6) & 0x03FF); /* Extract the A/D result */ + ADCR &=~(1UL<<21); + return val; +} + +void draw_battery(unsigned char x, unsigned char y) +{ + unsigned int val=0; + unsigned char w=0; + + draw_rect(x,y,14,7,1,3,DRAW_PUT); + draw_vline(x+14,y+2,3,3,DRAW_PUT); + draw_block(x+1,y+1,12,5,2,DRAW_ERASE); + + val=getADCvalue(); + + if (val<0x320) + val=0x320; + if (val>0x380) + val=0x380; + + w= (val-0x320)/8; + + draw_block(x+1,y+1,w,5,2,DRAW_PUT); +} + +void draw_ant(unsigned char x, unsigned char y, unsigned char m) { + + draw_vline(x+3,y,7,3,m); + draw_pixel(x,y,3,m); + draw_pixel(x+1,y+1,3,m); + draw_pixel(x+2,y+2,3,m); + draw_pixel(x+6,y,3,m); + draw_pixel(x+5,y+1,3,m); + draw_pixel(x+4,y+2,3,m); + +} diff --git a/boop/audio/soundirq.h b/boop/batt.h similarity index 73% rename from boop/audio/soundirq.h rename to boop/batt.h index e988d29..b3646e8 100644 --- a/boop/audio/soundirq.h +++ b/boop/batt.h @@ -1,6 +1,6 @@ /* - soundirq.h - sound interrupt handler - Copyright (C) 2007 Ch. Klippel + batt.h - + Copyright (C) 2007 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,9 +16,12 @@ along with this program. If not, see . */ -#ifndef SOUNDIRQ_H -#define SOUNDIRQ_H +#ifndef BATT_H +#define BATT_H -void __attribute__ ((section(".text.fastcode"))) soundIRQ (void); +void initADC(void); +unsigned int getADCvalue(void); +void draw_battery(unsigned char x, unsigned char y); +void draw_ant(unsigned char x, unsigned char y, unsigned char m); #endif diff --git a/boop/betty.cfg b/boop/betty.cfg deleted file mode 100644 index ba49750..0000000 --- a/boop/betty.cfg +++ /dev/null @@ -1,122 +0,0 @@ -# OpenOCD config file for Betty remote control -# http://bettyhacks.com/forum/index.php?topic=160.0 - -if { [info exists CHIPNAME] } { - set _CHIPNAME $CHIPNAME -} else { - set _CHIPNAME lpc2220 -} - -if { [info exists ENDIAN] } { - set _ENDIAN $ENDIAN -} else { - set _ENDIAN little -} - -if { [info exists CPUTAPID ] } { - set _CPUTAPID $CPUTAPID -} else { - set _CPUTAPID 0x4f1f0f0f -} - -#coonfigure reset options -adapter_nsrst_delay 1 -jtag_ntrst_delay 1 - -#use combined on interfaces or targets that can't set TRST/SRST separately -reset_config srst_only srst_pulls_trst trst_push_pull srst_push_pull - -adapter_khz 1000 - -#jtag scan chain -jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID - -set _TARGETNAME $_CHIPNAME.cpu -target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME - -# Event handlers -$_TARGETNAME configure -event reset-start {adapter_khz 1000} -$_TARGETNAME configure -event reset-init {betty_init} - -$_TARGETNAME configure -event gdb-attach { - halt - } - $_TARGETNAME configure -event gdb-attach { - reset init - } - -arm7_9 dcc_downloads enable - -$_TARGETNAME configure -work-area-phys 0x40000000 -work-area-size 0x10000 -work-area-backup 0 - -#flash bank [ ] -set _FLASHNAME $_CHIPNAME.flash -flash bank $_FLASHNAME cfi 0x80000000 0x00100000 2 2 $_TARGETNAME -#flash bank $_FLASHNAME cfi 0x82000000 0x00100000 2 2 $_TARGETNAME - -arm7_9 fast_memory_access enable - -proc betty_init { } { - # setup PLL - # PLLCON: Enable PLL, connect PLL - mww 0xe01fc080 0x03 - # VBPDIV: no division - mww 0xe01fc100 0x02 - # PLLCFG: 0x42 = psel = 10 (4) = msel= 00010 (3) = 240 mhz Fcco*/ - mww 0xe01fc084 0x42 - # Activate PLL settings - mww 0xe01fc08c 0xaa - mww 0xe01fc08c 0x55 - #sleep 100 - - # Memory Bank Configuration - # BCFG0: 16bit, rble, 2wst - 30 mhz : Betty: FLASH 0 @ 0x80000000 - mww 0xffe00000 0x10001CA0 - # BCFG2: 16bit, rble, 2wst - 30 mhz : Betty: FLASH 1 @ 0x82000000 - mww 0xffe00008 0x10001CA0 - - # BCFG1: 8 bit, 3 sram wst, rble, 5 wst 3 idcy : Betty: LCD @ 0x81000000 - mww 0xffe00004 0x00000400 - - # GPIO Pin COnfiguration for Flash access - # PINSEL0: - mww 0xe002c000 0x00008005 - # PINSEL1: - mww 0xe002c004 0x00000000 - # PINSEL2: - mww 0xe002c014 0x0de049d4 - - # IO2SET: Set Outputs - mww 0xe0028024 0x1FC0000 - # IO2DIR: Set Direction - mww 0xe0028028 0x1FC0000 - - # IO0DIR: - mww 0xe0028008 0x002018D0 - - # disable watchdog - mww 0xfffffd44 0x00008000 - # enable user reset - mww 0xfffffd08 0xa5000001 - -} - -proc flash_boop {IMAGE} { - reset init - - flash erase_sector 0 0 0 - flash erase_check 0 - flash erase_sector 0 0 last - flash erase_check 0 - flash write_bank 0 $IMAGE 0 - reset run -} - -proc start_debug {} { - reset halt - mwb 0xE000C01C 0x01 - resume -} - -# For more information about the configuration files, take a look at: -# openocd.texi diff --git a/boop/betty.gdbinit b/boop/betty.gdbinit deleted file mode 100644 index 606ca2c..0000000 --- a/boop/betty.gdbinit +++ /dev/null @@ -1,47 +0,0 @@ -monitor reset 100 -monitor halt -monitor endian little - -# BCFG0: 16bit, rble, 6wst - 60 mhz : Betty: FLASH 0 @ 0x80000000 -monitor memU32 0xFFE00000 = 0x100004A0 - -#BCFG2: 16bit, rble, 6wst - 60 mhz : Betty: FLASH 1 @ 0x82000000 -monitor memU32 0xFFE00008 = 0x100004A0 - -#PINSEL0 -monitor memU32 0xE002C000 = 0x00008005 - -#PINSEL1 -monitor memU32 0xE002C004 = 0x00000000 - -#PINSEL2 -monitor memU32 0xE002C014 = 0x0de049d4 - -#IO2SET -monitor memU32 0xE0028024 = 0x1FC0000 - -#IO2DIR -monitor memU32 0xe0028028 = 0x1FC0000 - -#IO0DIR -monitor memU32 0xE0028008 = 0x002018D0 - -#PLLCON: Enable PLL, connect PLL -monitor memU32 0xe01fc080 = 0xe01fc000 - -# VBPDIV: -monitor memU32 0xe01fc100 = 0x00000000 - -#PLLCFG: -monitor memU32 0xe01fc084 = 0x00000045 - -#Activate PLL settings -monitor memU32 0xe01fc08c = 0xaa -monitor memU32 0xe01fc08c = 0x55 - - -# Enable Flash Breakpoints and Download -monitor WorkRAM = 0x40000000 - 0x2000FBFF -monitor flash CFI = 0x80000000 - 0x800FFFFF -monitor flash breakpoints = 1 -monitor flash download = 1 \ No newline at end of file diff --git a/boop/boop.pnps b/boop/boop.pnps new file mode 100644 index 0000000..8d53927 --- /dev/null +++ b/boop/boop.pnps @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/boop/boop_flash.ppg b/boop/boop_flash.ppg new file mode 100644 index 0000000..e89667c --- /dev/null +++ b/boop/boop_flash.ppg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/boop/boop_rom.bin b/boop/boop_rom.bin deleted file mode 100644 index 33ec32b..0000000 Binary files a/boop/boop_rom.bin and /dev/null differ diff --git a/boop/buffer.c b/boop/buffer.c deleted file mode 100644 index 9d13bb2..0000000 --- a/boop/buffer.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - buffer.c - functions for buffers - Copyright (C) 2008 Telekatz - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "buffer.h" -#include "global.h" -#include "irq.h" - -void cBufferInit(struct cBuffer_ *buffer, unsigned char *start, unsigned short size) { - - unsigned cpsr; - cpsr = disableIRQ(); - - buffer->data = start; - buffer->size = size; - buffer->len = 0; - buffer->index = 0; - - restoreIRQ(cpsr); -} - -void cBufferFlush(struct cBuffer_ *buffer) { - - unsigned cpsr; - cpsr = disableIRQ(); - - buffer->len = 0; - buffer->index = 0; - - restoreIRQ(cpsr); -} - -unsigned char cBufferAdd(struct cBuffer_ *buffer, unsigned char data) { - - unsigned cpsr; - cpsr = disableIRQ(); - - if(buffer->size > buffer->len) { - buffer->data[(buffer->index + buffer->len++) % buffer->size] = data; - restoreIRQ(cpsr); - return 1; - } - restoreIRQ(cpsr); - return 0; - -} - -unsigned short cBufferAddBuffer(struct cBuffer_ *buffer, unsigned char* data, unsigned short len) { - - unsigned short lenw; - unsigned short start; - unsigned short end; - - unsigned cpsr; - cpsr = disableIRQ(); - - lenw = 0; - - if(buffer->size > buffer->len) { - start = (buffer->index + buffer->len) % buffer->size; - if(buffer->index) - end = buffer->index; - else - end = buffer->size; - - if(end <= start) { - if(buffer->size - start < len) { - lenw = buffer->size - start; - memcpy(&buffer->data[start],data,lenw); - } - else { - memcpy(&buffer->data[start],data,len); - buffer->len += len; - restoreIRQ(cpsr); - return len; - } - start = 0; - } - - if(end - start < len - lenw) { - memcpy(&buffer->data[start],&data[lenw],end - start); - buffer->len = buffer->size; - restoreIRQ(cpsr); - return lenw + end - start; - } - else { - memcpy(&buffer->data[start],&data[lenw],len-lenw); - buffer->len += len; - restoreIRQ(cpsr); - return len; - } - } - restoreIRQ(cpsr); - return 0; - -} - -unsigned char cBufferGet(struct cBuffer_ *buffer) { - - unsigned char data = 0; - - unsigned cpsr; - cpsr = disableIRQ(); - - if(buffer->len) { - data = buffer->data[buffer->index++]; - buffer->index %= buffer->size; - buffer->len--; - } - restoreIRQ(cpsr); - return data; -} - -unsigned short cBufferGetBuffer(struct cBuffer_ *buffer, unsigned char* data, unsigned short len) { - - unsigned cpsr; - cpsr = disableIRQ(); - - if(buffer->len) { - if(len > buffer->len) - len = buffer->len; - - if(buffer->index + len <= buffer->size) { - memcpy(data,&buffer->data[buffer->index],len); - } - else { - memcpy(data,&buffer->data[buffer->index],buffer->size - buffer->index); - memcpy(&data[buffer->size - buffer->index],buffer->data,len - (buffer->size - buffer->index)); - } - buffer->index = (buffer->index + len) % buffer->size; - buffer->len -= len; - restoreIRQ(cpsr); - return len; - - } - restoreIRQ(cpsr); - return 0; - -} diff --git a/boop/buffer.h b/boop/buffer.h deleted file mode 100644 index da19c07..0000000 --- a/boop/buffer.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - buffer.h - functions for buffers - Copyright (C) 2008 Telekatz - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef BUFFER_H -#define BUFFER_H - -struct cBuffer_ { - unsigned char* data; - unsigned short size; - unsigned short len; - unsigned short index; -}; - -void cBufferInit(struct cBuffer_ *buffer, unsigned char *start, unsigned short size); -void cBufferFlush(struct cBuffer_ *buffer); -unsigned char cBufferAdd(struct cBuffer_ *buffer, unsigned char data); -unsigned short cBufferAddBuffer(struct cBuffer_ *buffer, unsigned char* data, unsigned short len); -unsigned char cBufferGet(struct cBuffer_ *buffer); -unsigned short cBufferGetBuffer(struct cBuffer_ *buffer, unsigned char* data, unsigned short len); -#endif diff --git a/boop/cc1100.c b/boop/cc1100.c new file mode 100644 index 0000000..51d6f36 --- /dev/null +++ b/boop/cc1100.c @@ -0,0 +1,158 @@ +/* + batt.c - + Copyright (C) 2007 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "lpc2220.h" +#include "cc1100.h" +#include "irq.h" + +const unsigned char conf[0x2F] = { 0x29 , 0x2E , 0x07 , 0x00 , 0xD3 , 0x91 , 0x3D , 0x0C , + 0x05 , 0x00 , 0x00 , 0x06 , 0x00 , 0x20 , 0x28 , 0xC5 , + 0xF5 , 0x75 , 0x83 , 0x22 , 0xE5 , 0x14 , 0x07 , 0x30 , + 0x18 , 0x16 , 0x6C , 0x03 , 0x40 , 0x91 , 0x87 , 0x6B , + 0xF8 , 0x56 , 0x10 , 0xE9 , 0x2A , 0x00 , 0x1F , 0x41 , + 0x00 , 0x59 , 0x7F , 0x3F , 0x81 , 0x35 , 0x09 }; + +volatile unsigned char cc1100rx; + + +void cc1100_init(void) { + + unsigned long xx = 0x200; + + + PINSEL1 &= ~((1<<3) | (1<<5) | (1<<7)); + PCONP &= 0xfffffbff; + PCONP |= (1<<21); + FIOSET0 = SCK1; + FIOCLR0 = MOSI1; + FIOCLR0 = CS1; + while(xx) { + asm volatile("nop" : :); + xx--; + } + FIOSET0 = CS1; + xx=0x200; + while(xx) { + asm volatile("nop" : :); + xx--; + } + FIOCLR0 = CS1; + FIOCLR0 = SCK1; + while (FIOPIN0 & MISO1); + + PINSEL1 |= 0x000002A8; //((1<<3) | (1<<5) | (1<<7)); + SSPCR0 = 0x0007; + SSPCPSR = 0x02; + SSPCR1 = 0x02; + + SSPDR = SRES; + while (FIOPIN0 & MISO1); + while (SSPSR & (1<<4)); + xx = SSPDR; + + cc1100_write((0x00 | BURST ),conf,0x2f); +} + + +unsigned char cc1100_write(unsigned char addr,unsigned char* data, unsigned char lenght) { + + unsigned short i; + unsigned char status; + unsigned char x; + + FIOCLR0 = CS1; + while (FIOPIN0 & MISO1); + SSPDR = (addr | WRITE); + while ((SSPSR & (1<<4))); + status = SSPDR; + for (i=0; i < lenght; i++) { + SSPDR = data[i]; + while ((SSPSR & (1<<4))); + x=SSPDR; + } + FIOSET0 = CS1; + + return(status); + } + +unsigned char cc1100_read(unsigned char addr, unsigned char* data, unsigned char lenght) { + + unsigned short i; + unsigned char status; + + FIOCLR0 = CS1; + while (FIOPIN0 & MISO1); + SSPDR = (addr | READ); + while ((SSPSR & (1<<4))); + status = SSPDR; + for (i=0; i < lenght; i++) { + SSPDR = 0x00; + while ((SSPSR & (1<<4))); + data[i]=SSPDR; + } + FIOSET0 = CS1; + + return(status); +} + +unsigned char cc1100_strobe(unsigned char cmd) { + + unsigned short status; + + FIOCLR0 = CS1; + while (FIOPIN0 & MISO1); + SSPDR = cmd; + while ((SSPSR & (1<<4))); + status = SSPDR; + FIOSET0 = CS1; + + return(status); +} + +void startcc1100IRQ(void) { + PINSEL1 |= 1; + EXTMODE |= 1; + EXTPOLAR |= 1; + EXTINT |= 1; + + VICVectAddr1 = (unsigned long)&(cc1100IRQ); + VICVectCntl1 = VIC_SLOT_EN | INT_SRC_EINT0; + VICIntEnable = INT_EINT0; +} + +void cc1100_getfifo(unsigned char* b) { + + unsigned char cnt; + + cc1100_read(RX_fifo, &cnt,1); + cc1100_read(RX_fifo, b,cnt+2); + b[cnt]=0; + +} + +void __attribute__ ((interrupt("IRQ"))) cc1100IRQ (void) { + + EXTINT = 0x01; + cc1100rx =1; + + + VICVectAddr = 0; +} + + + diff --git a/boop/cc1100.h b/boop/cc1100.h new file mode 100644 index 0000000..db0771b --- /dev/null +++ b/boop/cc1100.h @@ -0,0 +1,56 @@ +/* + batt.h - + Copyright (C) 2007 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef cc1100_H +#define cc1100_H + +#define MISO1 (1<<18) +#define MOSI1 (1<<19) +#define SCK1 (1<<17) +#define CS1 (1<<23) + +#define WRITE 0x00 +#define BURST 0x40 +#define READ 0x80 +#define TX_fifo 0x7F +#define RX_fifo 0xff + +#define SRES 0x30 +#define SFSTXON 0x31 +#define SXOFF 0x32 +#define SCLA 0x33 +#define SRX 0x34 +#define STX 0x35 +#define SIDLE 0x36 +#define SWOR 0x38 +#define SPWD 0x39 +#define SFRX 0x3A +#define SFTX 0x3B +#define SWORRST 0x3C +#define SNOP 0x3D + + +void cc1100_init(void); +unsigned char cc1100_write(unsigned char addr, unsigned char* data, unsigned char lenght); +unsigned char cc1100_read(unsigned char addr, unsigned char* data, unsigned char lenght); +unsigned char cc1100_strobe(unsigned char cmd); +void startcc1100IRQ(void); +void __attribute__ ((interrupt("IRQ"))) cc1100IRQ (void); +void cc1100_getfifo(unsigned char* b); + +#endif diff --git a/boop/cc1100/Make.conf b/boop/cc1100/Make.conf deleted file mode 100644 index 290d282..0000000 --- a/boop/cc1100/Make.conf +++ /dev/null @@ -1 +0,0 @@ -THUMBSRCS := cc1100.c rf.c fs20.c diff --git a/boop/cc1100/cc1100.c b/boop/cc1100/cc1100.c deleted file mode 100644 index 02b9c80..0000000 --- a/boop/cc1100/cc1100.c +++ /dev/null @@ -1,343 +0,0 @@ -/* - cc1100.c - - Copyright (C) 2007 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -// CC1100 - http://focus.ti.com/docs/prod/folders/print/cc1100.html -// 27 MHz crystal -// http://en.wikipedia.org/wiki/ISM_band http://de.wikipedia.org/wiki/ISM-Band -// http://de.wikipedia.org/wiki/Short_Range_Devices http://en.wikipedia.org/wiki/Low-power_communication_device -// 433,05 MHz ... 434,79 MHz - -#include "lpc2220.h" -#include "cc1100.h" -#include "irq.h" - -// Deviation = 21.423340 -// Base frequency = 433.254913 -// Carrier frequency = 433.254913 -// Channel number = 0 -// Carrier frequency = 433.254913 -// Modulated = true -// Modulation format = GFSK -// Manchester enable = false -// Sync word qualifier mode = 30/32 sync word bits detected -// Preamble count = 4 -// Channel spacing = 184.982300 -// Carrier frequency = 433.254913 -// Data rate = 37.4908 -// RX filter BW = 210.937500 -// Data format = Normal mode -// CRC enable = true -// Whitening = false -// Device address = 1 -// Address config = Address check and 0 (0x00) broadcast -// CRC autoflush = true -// PA ramping = false -// TX power = 0 -// Rf settings for CC1101 -const unsigned char conf[] = { - 0x29, // IOCFG2 GDO2 Output Pin Configuration - 0x2E, // IOCFG1 GDO1 Output Pin Configuration - 0x06, // IOCFG0 GDO0 Output Pin Configuration - 0x47, // FIFOTHR RX FIFO and TX FIFO Thresholds - 0xD3, // SYNC1 Sync Word, High Byte - 0x91, // SYNC0 Sync Word, Low Byte - 0x3E, // PKTLEN Packet Length - 0x1A, // PKTCTRL1 Packet Automation Control - 0x05, // PKTCTRL0 Packet Automation Control - 0x01, // ADDR Device Address - 0x00, // CHANNR Channel Number - 0x06, // FSCTRL1 Frequency Synthesizer Control - 0x00, // FSCTRL0 Frequency Synthesizer Control - 0x10, // FREQ2 Frequency Control Word, High Byte - 0x0B, // FREQ1 Frequency Control Word, Middle Byte - 0xE6, // FREQ0 Frequency Control Word, Low Byte - 0x8A, // MDMCFG4 Modem Configuration - 0x6C, // MDMCFG3 Modem Configuration - 0x13, // MDMCFG2 Modem Configuration - 0x22, // MDMCFG1 Modem Configuration - 0xC1, // MDMCFG0 Modem Configuration - 0x35, // DEVIATN Modem Deviation Setting - 0x04, // MCSM2 Main Radio Control State Machine Configuration - 0x0C, // MCSM1 Main Radio Control State Machine Configuration - 0x38, // MCSM0 Main Radio Control State Machine Configuration - 0x16, // FOCCFG Frequency Offset Compensation Configuration - 0x6C, // BSCFG Bit Synchronization Configuration - 0x43, // AGCCTRL2 AGC Control - 0x40, // AGCCTRL1 AGC Control - 0x91, // AGCCTRL0 AGC Control - 0x46, // WOREVT1 High Byte Event0 Timeout - 0x50, // WOREVT0 Low Byte Event0 Timeout - 0x78, // WORCTRL Wake On Radio Control - 0x56, // FREND1 Front End RX Configuration - 0x10, // FREND0 Front End TX Configuration - 0xE9, // FSCAL3 Frequency Synthesizer Calibration - 0x2A, // FSCAL2 Frequency Synthesizer Calibration - 0x00, // FSCAL1 Frequency Synthesizer Calibration - 0x1F, // FSCAL0 Frequency Synthesizer Calibration - 0x41, // RCCTRL1 RC Oscillator Configuration - 0x00, // RCCTRL0 RC Oscillator Configuration -}; - -const unsigned char confasync[] = { - 0x0D, // IOCFG2 - 0x0D, // IOCFG1 - 0x2E, // IOCFG0 - 0x47, // FIFOTHR - 0xD3, // SYNC1 - 0x91, // SYNC0 - 0x3E, // PKTLEN - 0x1A, // PKTCTRL1 - 0x32, // PKTCTRL0 | asynchronous serial mode - 0x00, // ADDR - 0x00, // CHANNR channel number - 0x06, // FSCTRL1 - 0x00, // FSCTRL0 - 0x10, // FREQ2 # - 0x12, // FREQ1 # - 0x34, // FREQ0 # *27e6/2^16 = 433,919861 MHz base frequency - 0x4A, // MDMCFG4 | channel bandwidth - 0x84, // MDMCFG3 - 0x30, // MDMCFG2 - // 0x00, // MDMCFG2 // 2-FSK - 0x20, // MDMCFG1 - 0xe5, // MDMCFG0 CHANSPC_M Chann 49,95kHz | DRATE_E[3:0] - 0x37, // DEVIATN - 0x07, // MCSM2 - 0x30, // MCSM1 0c - 0x18, // MCSM0 - 0x14, // FOCCFG - 0x6C, // BSCFG - 0x07, // AGCCTRL2 - 0x00, // AGCCTRL1 - 0x90, // AGCCTRL0 - 0x46, // WOREVT1 - 0x50, // WOREVT0 - 0x78, // WORCTRL - 0x56, // FREND1 - 0x11, // FREND0 - 0xE9, // FSCAL3 - 0x2A, // FSCAL2 - 0x00, // FSCAL1 - 0x1F, // FSCAL0 - 0x41, // RCCTRL1 - 0x00, // RCCTRL0 -}; - -void cc1100_init(void) { - - unsigned long xx = 0x200; - - PINSEL1 &= 0xffffff00; //GDO0 SCK1 MISO1 MOSI1 as GPIO - FIODIR0 |= (CS1 | MOSI1 | SCK1); //output - - PCONP &= 0xfffffbff; - PCONP |= (1<<21); - FIOSET0 = SCK1; - FIOCLR0 = MOSI1; - FIOCLR0 = CS1; - while(xx) { - asm volatile("nop" : :); - xx--; - } - FIOSET0 = CS1; - xx=0x200; - while(xx) { - asm volatile("nop" : :); - xx--; - } - FIOCLR0 = CS1; - FIOCLR0 = SCK1; - while (FIOPIN0 & MISO1); - - PINSEL1 |= 0x000002A8; //SCK1 MISO1 MOSI1 as SPI1 - SSPCR0 = 0x0007; - SSPCPSR = 0x02; - SSPCR1 = 0x02; - - SSPDR = SRES; - while (FIOPIN0 & MISO1); - while (SSPSR & (1<<4)); - xx = SSPDR; - - cc1100_write((0x00 | BURST ),(unsigned char*)conf,sizeof(conf)); - cc1100_write1(PATABLE,0xC0); - cc1100_strobe(SIDLE); - cc1100_strobe(SPWD); -} - -// write length bytes of data to addr in CC1100 -unsigned char cc1100_write(unsigned char addr,unsigned char* data, unsigned char length) { - - unsigned short i; - unsigned char status; - unsigned char x; - - (void)(x); - - FIOCLR0 = CS1; - while (FIOPIN0 & MISO1); - SSPDR = (addr | WRITE); - while ((SSPSR & (1<<4))); - status = SSPDR; - for (i=0; i < length; i++) { - SSPDR = data[i]; - while ((SSPSR & (1<<4))); - x=SSPDR; - } - FIOSET0 = CS1; - - return(status); -} - -// write on byte of data to addr in CC1100 -// a few instructions faster than cc1100_write(addr, data, 1) -unsigned char cc1100_write1(unsigned char addr,unsigned char data) { - - unsigned char status; - volatile unsigned char x=0; - - (void)(x); - - FIOCLR0 = CS1; - while (FIOPIN0 & MISO1); - SSPDR = (addr | WRITE); - while ((SSPSR & (1<<4))); - status = SSPDR; - - SSPDR = data; - while ((SSPSR & (1<<4))); - x=SSPDR; - - FIOSET0 = CS1; - - return(status); -} - - -unsigned char cc1100_read(unsigned char addr, unsigned char* data, unsigned char length) { - - unsigned short i; - unsigned char status; - - FIOCLR0 = CS1; - - while (FIOPIN0 & MISO1); - SSPDR = (addr | READ); - while ((SSPSR & (1<<4))); - status = SSPDR; - for (i=0; i < length; i++) { - SSPDR = 0x00; - while ((SSPSR & (1<<4))); - data[i]=SSPDR; - } - FIOSET0 = CS1; - - return(status); -} - -unsigned char cc1100_read1(unsigned char addr) { - - unsigned char r; - - FIOCLR0 = CS1; - while (FIOPIN0 & MISO1); - SSPDR = (addr | READ); - while ((SSPSR & (1<<4))); - r = SSPDR; - SSPDR = 0x00; - while ((SSPSR & (1<<4))); - r=SSPDR; - FIOSET0 = CS1; - - return(r); -} - -unsigned char cc1100_strobe(unsigned char cmd) { - - unsigned short status; - - FIOCLR0 = CS1; - while (FIOPIN0 & MISO1); - SSPDR = cmd; - while ((SSPSR & (1<<4))); - status = SSPDR; - FIOSET0 = CS1; - - return(status); -} -/* -// check that PLL has locked -unsigned char cc1100_pll_lock(void) -{ - //~ To check that the PLL is in lock the user can - //~ program register IOCFGx.GDOx_CFG to 0x0A - //~ and use the lock detector output available on - //~ the GDOx pin as an interrupt for the MCU (x = - //~ 0,1, or 2). A positive transition on the GDOx - //~ pin means that the PLL is in lock. As an - //~ alternative the user can read register FSCAL1. - //~ The PLL is in lock if the register content is - //~ different from 0x3F. Refer also to the CC1100 - //~ Errata Notes [1]. For more robust operation the - //~ source code could include a check so that the - //~ PLL is re-calibrated until PLL lock is achieved - //~ if the PLL does not lock the first time. -} -*/ -/* -// get carrier frequency -unsigned char cc1100_carrier(void) -{ - //~ f_carrier = fxosc/(2**16) * (FREQ + CHAN * (256+CHANSPC_M) * 2**(CHANSPC_E - 2)) -} - -// set intermediate frequency -unsigned char cc1100_if(void) -{ - //~ FSCTRL1.FREQ_IF - //~ f_ = fxosc/(2**10) * FREQ_IF -} - - -// set channel spacing -unsigned char cc1100_chspc(void) -{ - //~ MDMCFG0.CHANSPC_M - //~ MDMCFG1.CHANSPC_E r -} - -// set channel -unsigned char cc1100_channel(void) -{ - //~ CHANNR.CHAN -} - -// set frequency -unsigned char cc1100_frequency(void) -{ - //~ FREQ2, FREQ1, FREQ0 - //~ This word will typically be set to the centre of the lowest channel frequency that is to be used. -} - -// set modulation -unsigned char cc1100_modulation(void) -{ - //~ MDMCFG2.MOD_FORMAT - //~ MDMCFG2.MANCHESTER_EN. -} -*/ diff --git a/boop/cc1100/cc1100.h b/boop/cc1100/cc1100.h deleted file mode 100644 index f4cc27a..0000000 --- a/boop/cc1100/cc1100.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - cc1100.h - - Copyright (C) 2007 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef cc1100_H -#define cc1100_H - -#define MISO1 (1<<18) -#define MOSI1 (1<<19) -#define SCK1 (1<<17) -#define CS1 (1<<23) -#define GDO0 (1<<16) -#define GDO1 (1<<18) -#define GDO2 (1<<24) - - -#define WRITE 0x00 -#define BURST 0x40 -#define READ 0x80 -#define TX_fifo 0x7F -#define RX_fifo 0xff -#define PATABLE 0x3E - -//Command Strobes -#define SRES 0x30 -#define SFSTXON 0x31 -#define SXOFF 0x32 -#define SCAL 0x33 -#define SRX 0x34 -#define STX 0x35 -#define SIDLE 0x36 -#define SWOR 0x38 -#define SPWD 0x39 -#define SFRX 0x3A -#define SFTX 0x3B -#define SWORRST 0x3C -#define SNOP 0x3D - -//Status Registers -#define PARTNUM (0x30 | READ | BURST) -#define VERSION (0x31 | READ | BURST) -#define FREQEST (0x32 | READ | BURST) -#define LQI (0x33 | READ | BURST) -#define RSSI (0x34 | READ | BURST) -#define MARCSTATE (0x35 | READ | BURST) -#define WORTIME1 (0x36 | READ | BURST) -#define WORTIME0 (0x37 | READ | BURST) -#define PKTSTATUS (0x38 | READ | BURST) -#define VCO_VC_DAC (0x39 | READ | BURST) -#define TXBYTES (0x3A | READ | BURST) -#define RXBYTES (0x3B | READ | BURST) -#define RCCTRL1_STATUS (0x3C | READ | BURST) -#define RCCTRL0_STATUS (0x3D | READ | BURST) - -//Configuration Registers -#define IOCFG2 0x00 // GDO2 output pin configuration -#define IOCFG1 0x01 // GDO1 output pin configuration -#define IOCFG0 0x02 // GDO0 output pin configuration -#define FIFOTHR 0x03 // RX FIFO and TX FIFO thresholds -#define SYNC1 0x04 // Sync word, high byte -#define SYNC0 0x05 // Sync word, low byte -#define PKTLEN 0x06 // Packet length -#define PKTCTRL1 0x07 // Packet automation control -#define PKTCTRL0 0x08 // Packet automation control -#define ADDR_ 0x09 // Device address -#define CHANNR 0x0A // Channel number -#define FSCTRL1 0x0B // Frequency synthesizer control -#define FSCTRL0 0x0C // Frequency synthesizer control -#define FREQ2 0x0D // Frequency control word, high byte -#define FREQ1 0x0E // Frequency control word, middle byte -#define FREQ0 0x0F // Frequency control word, low byte -#define MDMCFG4 0x10 // Modem configuration -#define MDMCFG3 0x11 // Modem configuration -#define MDMCFG2 0x12 // Modem configuration -#define MDMCFG1 0x13 // Modem configuration -#define MDMCFG0 0x14 // Modem configuration -#define DEVIATN 0x15 // Modem deviation setting -#define MCSM2 0x16 // Main Radio Cntrl State Machine config -#define MCSM1 0x17 // Main Radio Cntrl State Machine config -#define MCSM0 0x18 // Main Radio Cntrl State Machine config -#define FOCCFG 0x19 // Frequency Offset Compensation config -#define BSCFG 0x1A // Bit Synchronization configuration -#define AGCCTRL2 0x1B // AGC control -#define AGCCTRL1 0x1C // AGC control -#define AGCCTRL0 0x1D // AGC control -#define WOREVT1 0x1E // High byte Event 0 timeout -#define WOREVT0 0x1F // Low byte Event 0 timeout -#define WORCTRL 0x20 // Wake On Radio control -#define FREND1 0x21 // Front end RX configuration -#define FREND0 0x22 // Front end TX configuration -#define FSCAL3 0x23 // Frequency synthesizer calibration -#define FSCAL2 0x24 // Frequency synthesizer calibration -#define FSCAL1 0x25 // Frequency synthesizer calibration -#define FSCAL0 0x26 // Frequency synthesizer calibration -#define RCCTRL1 0x27 // RC oscillator configuration -#define RCCTRL0 0x28 // RC oscillator configuration -#define FSTEST 0x29 // Frequency synthesizer cal control -#define PTEST 0x2A // Production test -#define AGCTEST 0x2B // AGC test -#define TEST2 0x2C // Various test settings -#define TEST1 0x2D // Various test settings -#define TEST0 0x2E // Various test settings - -#define MARCSTATE_IDLE 0x01 -#define MARCSTATE_RX 0x0d - -extern const unsigned char conf[]; //__attribute__((aligned(0x4))); -extern const unsigned char confasync[];// __attribute__((aligned(0x4))); - -void cc1100_init(void); -unsigned char cc1100_write(unsigned char addr, unsigned char* data, unsigned char length); -unsigned char cc1100_write1(unsigned char addr,unsigned char data); -unsigned char cc1100_read(unsigned char addr, unsigned char* data, unsigned char length); -unsigned char cc1100_read1(unsigned char addr); -unsigned char cc1100_strobe(unsigned char cmd); - -#endif diff --git a/boop/cc1100/fs20.c b/boop/cc1100/fs20.c deleted file mode 100644 index 2f4de50..0000000 --- a/boop/cc1100/fs20.c +++ /dev/null @@ -1,343 +0,0 @@ -/* - fs20.c - FS20 functions - Copyright (C) 2009 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "fs20.h" -#include "rf.h" -#include "cc1100.h" -#include "fonty.h" -#include "rtc.h" -#include "global.h" -#include "lcd.h" -#include "keyboard.h" -#include "serial.h" -#include "timerfuncs.h" - -#define FS20_BETWEEN(x, a, b) ((x >= a) && (x <= b)) - -extern const char hval[16]; - -#define PROTOCOL_UNKNOWN 0 -#define PROTOCOL_FS20 1 -#define PROTOCOL_WEATHER 2 -#define PROTOCOL_WEATHER2 3 - -void fs20_decoder(void) { - - unsigned char x; - unsigned char FS20laststate = 0; - unsigned char FS20preamble = 0; - unsigned char FS20parity = 0; - unsigned char FS20state = 0; - unsigned long FS20lasttime = 0; - unsigned char FS20bitcounter = 0; - unsigned char FS20bytecounter = 0; - unsigned char FS20inbyte[20]; - unsigned char FS20inbit = 0; - unsigned char FS20protocol = PROTOCOL_UNKNOWN; - unsigned short tempbyte = 0; -// unsigned char finish = 0; - - unsigned long pulse = 0; - unsigned long space = 0; - unsigned long now; - - lcd_fill(0); - set_font(BOLDFONT); - draw_string (0, 0, "FS20 Decoder", LCD_COLOR_B, DRAW_PUT); - draw_block (0,10,128,2, LCD_COLOR_B, DRAW_PUT); - set_font(SMALLFONT); - - RFasyncmode(true); - - cc1100_write1(FREQ2,0x20); - cc1100_write1(FREQ1,0x29); - cc1100_write1(FREQ0,0x3E); - - cc1100_write1(AGCCTRL2,0x07); - cc1100_write1(AGCCTRL1,0x00); - cc1100_write1(AGCCTRL0,0x91); - - cc1100_strobe(SFRX); - cc1100_strobe(SRX); - - serial_puts("\n\r"); - - while(KEY_Exit) {}; - while(!KEY_Exit) - { - - //internal receiver - if(FIOPIN0 & GDO2) - FS20state = 1; - else - FS20state = 0; - - /* - //external rexeiver on pin 0.14 - if(FIOPIN0 & (1<<14)) - FS20state = 1; - else - FS20state = 0; -*/ - - if(FS20state != FS20laststate) { - FS20laststate = FS20state; - - //Calculate pulse len - if(!FS20state) { - now = T0TC; - if(now > FS20lasttime) - pulse = now-FS20lasttime; - else - pulse = (now+5000)-FS20lasttime; - FS20lasttime = now; - } - //Calculate space len - else { - now = T0TC; - if(now > FS20lasttime) - space = now-FS20lasttime; - else - space = (now+5000)-FS20lasttime; - FS20lasttime = now; - } - - //Decode - if(FS20state || (FS20protocol == PROTOCOL_WEATHER2)) { - if(FS20protocol == PROTOCOL_UNKNOWN) { - if((FS20_BETWEEN(pulse, 350, 450) && FS20_BETWEEN(space, 350, 450)) || (FS20_BETWEEN(pulse, 550, 650) && FS20_BETWEEN(space, 550, 650))) { - FS20protocol = PROTOCOL_FS20; //FS20, FHT - FS20inbyte[0] = 'F'; - FS20bytecounter = 1; - FS20bitcounter = 0; - FS20preamble = PREAMBLELEN_FS20; - FS20parity = 0; - tempbyte = 0; - } - else if((FS20_BETWEEN(pulse, 200, 533) && FS20_BETWEEN(space, 685, 1020)) || (FS20_BETWEEN(pulse, 685, 1020) && FS20_BETWEEN(space, 200, 533))) { - FS20protocol = PROTOCOL_WEATHER; //KS200, KS300, S2XXX - FS20inbyte[0] = 'W'; - FS20bytecounter = 1; - FS20bitcounter = 0; - FS20preamble = PREAMBLELEN_WEATHER; - tempbyte = 0; - } - else if(FS20_BETWEEN(pulse, 200, 300) && FS20_BETWEEN(space, 200, 300)) { - FS20protocol = PROTOCOL_WEATHER2; //ASH500 - FS20inbyte[0] = 'S'; - FS20bytecounter = 1; - FS20bitcounter = 0; - FS20preamble = PREAMBLELEN_WEATHER2; - tempbyte = 0; - } - } - - if(FS20protocol == PROTOCOL_FS20) { - if(FS20_BETWEEN(pulse, 350, 450) && FS20_BETWEEN(space, 350, 450)) - FS20inbit = 0; - else if(FS20_BETWEEN(pulse, 550, 650) && FS20_BETWEEN(space, 550, 650)) - FS20inbit = 1; - else - FS20protocol = PROTOCOL_UNKNOWN; - - if(FS20protocol != PROTOCOL_UNKNOWN) { - if(FS20preamble) { - if((FS20preamble > 1) && FS20inbit) - FS20preamble = PREAMBLELEN_FS20; - else if((FS20preamble > 1) && !FS20inbit) { - FS20preamble--; - } - else if((FS20preamble == 1) && FS20inbit) { - FS20preamble = 0; - } - } - else { - if(FS20bitcounter == 8) { - if(FS20inbit == FS20parity) { - FS20bitcounter = 0; - FS20bytecounter++; - FS20parity = 0; - } - else { - FS20protocol = PROTOCOL_UNKNOWN; - } - } - else { - FS20inbyte[FS20bytecounter] = (FS20inbyte[FS20bytecounter]<<1) | FS20inbit; - FS20parity ^= FS20inbit; - FS20bitcounter++; - } - } - } - } - - if(FS20protocol == PROTOCOL_WEATHER) { - if(FS20_BETWEEN(pulse, 685, 1020) && FS20_BETWEEN(space, 200, 533)) - FS20inbit = 0; - else if(FS20_BETWEEN(pulse, 200, 533) && FS20_BETWEEN(space, 685, 1020)) - FS20inbit = (1<<3); - else - FS20protocol = PROTOCOL_UNKNOWN; - - if(FS20protocol != PROTOCOL_UNKNOWN) { - if(FS20preamble) { - if((FS20preamble > 1) && FS20inbit) - FS20preamble = PREAMBLELEN_WEATHER; - else if((FS20preamble > 1) && !FS20inbit) { - FS20preamble--; - } - else if((FS20preamble == 1) && FS20inbit) { - FS20preamble = 0; - } - } - else { - if(FS20bitcounter == 4) { - tempbyte<<=8; - FS20bitcounter++; - } - else if(FS20bitcounter == 9) { - FS20bitcounter = 0; - } - else { - //tempbyte = (tempbyte>>=1) | FS20inbit; - tempbyte>>=1; - tempbyte |= FS20inbit; - if(FS20bitcounter++ == 8) { - FS20inbyte[FS20bytecounter] = tempbyte; - tempbyte = 0; - FS20bytecounter++; - } - } - } - } - } - - if(FS20protocol == PROTOCOL_WEATHER2) { - if(FS20preamble) { - if((FS20_BETWEEN(pulse, 200, 300) && FS20_BETWEEN(space, 200, 300))) { - if (FS20preamble > 1) - FS20preamble--; - } - else if((FS20_BETWEEN(pulse, 400, 600) && FS20_BETWEEN(space, 200, 300))) { - if (FS20preamble == 1) { - FS20preamble = 0; - pulse = 0; - space = 0; - } - else - FS20protocol = PROTOCOL_UNKNOWN; - } - else - FS20protocol = PROTOCOL_UNKNOWN; - } - else { - if((FS20_BETWEEN(pulse + space, 400, 600)) ) { - if(FS20state) - FS20inbit = 1; - else - FS20inbit = 0; - - pulse = 0; - space = 0; - - if(FS20inbit) - FS20parity++; - - if(FS20bitcounter == 8) { - if(!(FS20parity & 0x01)) { - FS20bitcounter = 0; - FS20bytecounter++; - FS20parity = 0; - if(FS20bytecounter == 0x0a) { //packet full received - - for(x=9;x>1;x--) { - FS20inbyte[x] = (FS20inbyte[x-1] + 0x24) ^ FS20inbyte[x]; - } - FS20inbyte[1] = FS20inbyte[1] ^ 0x89; - - FS20protocol = PROTOCOL_UNKNOWN; - } - } - else { - FS20bytecounter = 0; - FS20protocol = PROTOCOL_UNKNOWN; - } - } - else { - FS20inbyte[FS20bytecounter] = (FS20inbyte[FS20bytecounter]<<1) | FS20inbit; - FS20bitcounter++; - } - } - else if(pulse && space) { - FS20bytecounter = 0; - FS20protocol = PROTOCOL_UNKNOWN; - } - } - } - - if((FS20protocol == PROTOCOL_UNKNOWN && FS20bytecounter > 1)) { - char msbuffer[20]; - - draw_block(0,32,128,24,3,DRAW_ERASE); - - //print time and protocol type - siprintf (msbuffer, "%02x:%02x:%02x.%02u %c ",rtc.time.hour,rtc.time.minute,rtc.time.second,(unsigned char)(T0overflow>>1) & 0xff, FS20inbyte[0]); - draw_string (0, 32, msbuffer, LCD_COLOR_B, DRAW_NORCU); - serial_puts(msbuffer); - - //print received data - for(x=1;x<(FS20bytecounter);x++) { - draw_hexC (((x-1)*14), 40, FS20inbyte[x], LCD_COLOR_B, DRAW_NORCU); - serial_putbyte (' '); - putHexC(FS20inbyte[x]); - } - - //print decoded data - if(FS20inbyte[0] == 'S') { - signed short temp; - - temp = ((FS20inbyte[6] & 0x7F)<<8) | FS20inbyte[7]; - if(temp & 0x4000) //negative - temp |=0x8000; - - serial_putbyte (' '); - serial_putbyte (' '); - - siprintf (msbuffer, "%4d °C %u%%", temp,FS20inbyte[8]); - msbuffer[4] = msbuffer[3]; - msbuffer[3] = '.'; - serial_puts(msbuffer); - msbuffer[5] = 0x15; //change °C on display - msbuffer[6] = ' '; - draw_string (0, 48, msbuffer, LCD_COLOR_B, DRAW_NORCU); - } - - serial_puts("\n\r"); - //finish = 0; - FS20bytecounter = 0; - FS20protocol = PROTOCOL_UNKNOWN; - } - } - } - } - - RFasyncmode(false); -} - - diff --git a/boop/cc1100/fs20.h b/boop/cc1100/fs20.h deleted file mode 100644 index ea60c22..0000000 --- a/boop/cc1100/fs20.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - fs20.h - FS20 functions - Copyright (C) 2009 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef FS20_H -#define FS20_H - -#define extensionbit 0x20 -#define PREAMBLELEN_FS20 10 -#define PREAMBLELEN_WEATHER 7 -#define PREAMBLELEN_WEATHER2 20 - -void fs20_decoder(void); - -#endif diff --git a/boop/cc1100/rf.c b/boop/cc1100/rf.c deleted file mode 100644 index cc93c81..0000000 --- a/boop/cc1100/rf.c +++ /dev/null @@ -1,502 +0,0 @@ -/* - rf.c - - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "rf.h" -#include "cc1100.h" -#include "timerfuncs.h" -#include "irq.h" -#include "cc1100.h" -#include "lcd.h" -#include "fonty.h" -#include "rtc.h" -#include "global.h" -#include "buffer.h" -#include "bfs.h" - -unsigned char RFbuf[64]; -struct RFendpoint_ rfendpoint[MAX_ENDPOINTS]; -struct RF_ RF; - -const struct RFsettings_ default_RFsettings = -{ - 0x01, //address - 0x01 //channel -}; - -//********************* -//* Private functions * -//********************* - -void switch_to_idle() { - cc1100_strobe(SIDLE); - while (cc1100_read1(MARCSTATE) != 01); -} - -void WORsend_timeout(unsigned int cb) { - RF.state = RFsendworend; -} - -void RF_timed_rx_timeout(unsigned int cb) { - stopCB(RF.timeout_cb); - removeTimerCB(RF.timeout_cb); - RF.timeout_cb = 0xff; - if(RF.flags & WORenabled) - RF_changestate(RFwor); - else - RF_changestate(RFidle); - -} - -void sendendpoint(struct RFendpoint_ *currentEP) { - - unsigned char* epdata = 0; - unsigned short eplen; - struct cc1100frame_ *TXframe; - - TXframe = (struct cc1100frame_ *)RFbuf; - - //write header - eplen = currentEP->bufferlen; - switch ( currentEP->flags & EPtypemask) { - case EPtypedata: - if(eplen > 6) - eplen = 6; - epdata = currentEP->data; - break; - case EPtypebuffer: - if(eplen > 59) - eplen = 59; - epdata = currentEP->buffer; - break; - case EPtypecbuffer: - if(eplen > 59) - eplen = 59; - if(eplen > currentEP->cbuffer->len) - eplen = currentEP->cbuffer->len; - break; - } - TXframe->len = eplen + 3; - TXframe->destAddr = currentEP->dest; - TXframe->srcAddr = RF.addr; - TXframe->packetType = currentEP->type; - cc1100_write(TX_fifo | BURST,(unsigned char*)TXframe,4); - - //write data - switch ( currentEP->flags & EPtypemask) { - case EPtypedata: - case EPtypebuffer: - cc1100_write(TX_fifo | BURST,epdata,eplen); - break; - case EPtypecbuffer: - - if(currentEP->cbuffer->index + eplen <= currentEP->cbuffer->size) { - cc1100_write(TX_fifo | BURST,&(currentEP->cbuffer->data[currentEP->cbuffer->index]),eplen); - } - else { - cc1100_write(TX_fifo | BURST,&(currentEP->cbuffer->data[currentEP->cbuffer->index]), currentEP->cbuffer->size - currentEP->cbuffer->index); - cc1100_write(TX_fifo | BURST,currentEP->cbuffer->data,eplen - (currentEP->cbuffer->size - currentEP->cbuffer->index)); - } - currentEP->cbuffer->index = (currentEP->cbuffer->index + eplen) % currentEP->cbuffer->size; - currentEP->cbuffer->len -= eplen; - break; - } - - cc1100_strobe(STX); - - currentEP->flags &= ~EPnewdata; - - if(currentEP->flags & EPonce) - closeEP(currentEP); -} - -void receiveendpoint(struct RFendpoint_ *currentEP) { - - unsigned short eplen; - struct cc1100frame_ *RXframe; - - RXframe = (struct cc1100frame_ *)RFbuf; - - currentEP->dest = RXframe->srcAddr; - eplen = RXframe->len-3; - - switch ( currentEP->flags & EPtypemask) { - case EPtypedata: - if(eplen > 6) { - eplen = 6; - currentEP->flags |= EPoverflow; - } - memcpy(&(currentEP->data[0]),RXframe->data,eplen); - break; - case EPtypebuffer: - if(eplen > currentEP->buffersize) { - eplen = currentEP->buffersize; - currentEP->flags |= EPoverflow; - } - memcpy(currentEP->buffer,RXframe->data,eplen); - break; - case EPtypecbuffer: - if(eplen > currentEP->cbuffer->size - currentEP->cbuffer->len) { - eplen = currentEP->cbuffer->size - currentEP->cbuffer->len; - currentEP->flags |= EPoverflow; - } - cBufferAddBuffer(currentEP->cbuffer, RXframe->data, eplen); - break; - } - - currentEP->bufferlen = eplen; - if(currentEP->flags & EPnewdata) - currentEP->flags |= EPoverwritten; - else - currentEP->flags |= EPnewdata; - if(currentEP->flags & EPonce) - closeEP(currentEP); -} - -void cc1100IRQ (void) { - - unsigned char x; - - switch_to_idle(); - - if (cc1100_read1(RXBYTES) > 0) { - cc1100_read(RX_fifo, RFbuf,1); - cc1100_read(RX_fifo, &RFbuf[1],RFbuf[0]); - - struct cc1100frame_ *RXframe; - RXframe = (struct cc1100frame_ *)RFbuf; - - if ((RXframe->len == 1) && (RF.flags & WORenabled) && ((RXframe->destAddr == RF.addr) || (RXframe->destAddr == 0x00))) { - if(RF.timeout_cb != 0xff || RF.state != RFrx) - RF_timed_rx(WORrx_time); - } - - if (RXframe->len > 3) { - if (RF.timeout_cb != 0xff) - setCBIntervall(RF.timeout_cb,WORrx_time); - switch ( RXframe->packetType) { - case packet_test: - draw_block(0,50,128,10,3,DRAW_ERASE); - draw_string(0, 50, (char*)&RXframe->data[0], 3, DRAW_PUT); - break; - case packet_ping: - if (RXframe->data[0] == 0x01) { - struct RFendpoint_* cur_ep; - cur_ep = openEP(0,0, packet_ping); - if(cur_ep) { - cur_ep->dest = RXframe->srcAddr; - cur_ep->data[0] = 2; - cur_ep->bufferlen = 1; - cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce; - RF_changestate(RFtx); - } - } - else if (RXframe->data[0] == 0x02) { - RF.flags |= PingACK; - } - break; - case packet_time: - if ((RXframe->data[0] == 0xFF) && (timeInfo & TIME_ACCURATE)) { - send_time(RXframe->srcAddr,0); - } - else if (RXframe->len == 10) { - memcpy((unsigned char *)&rtc,&RXframe->data[0],7); - timeInfo |= SETNEWTIME; - VICSoftInt = INT_EINT2; - } - break; - default: - for(x=0; xpacketType) && ((rfendpoint[x].flags & (EPoutput | EPenabled)) == EPenabled)) { - receiveendpoint(&rfendpoint[x]); - break; - } - } - } - } - } - - if(RF.state == RFtx) { - for(x=0; xdest = dest; - cur_ep->data[0] = 1; - cur_ep->bufferlen = 1; - cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce | EPsendwor; - - RF.flags &= ~PingACK; - RF_changestate(RFtx); - - RF_timed_rx(WORrx_time); - - while ((RF.timeout_cb != 0xff) && !(RF.flags & PingACK)); - - if(RF.flags & PingACK) - return(1); - } - return(0); -} - -void RF_init (void) { - cc1100_init(); - RF.flags = 0; - RF.addr = conf[0x09]; - RF.state = RFpwrdown; - RF.nextstate = RFpwrdown; - RF.timeout_cb = 0xff; -} - -void RF_changestate (unsigned char state) { - unsigned char oldstate; - - VICIntEnClr = INT_EINT0; - - if(RF.state != state) { - oldstate = RF.state; - - if((RF.state >= RFtx) && (state < RFtx)) { - RF.nextstate = state; - } - else { - switch (state) { - case RFpwrdown: - RF.state = RFpwrdown; - break; - case RFwor: - RF.state = RFwor; - RF.flags |= WORenabled; - break; - case RFidle: - RF.state = RFidle; - break; - case RFrx: - RF.state = RFrx; - break; - case RFtx: - if(RF.state < RFtx) - RF.state = RFtx; - if(oldstate == RFrx) - RF.nextstate = RFrx; - else if(RF.flags & WORenabled) - RF.nextstate = RFwor; - else - RF.nextstate = RFidle; - break; - case RFsendwor: - break; - } - } - if(oldstate != RF.state) { - VICSoftInt = INT_EINT0; - } - } - VICIntEnable = INT_EINT0; -} - -void RF_timed_rx(unsigned short timeout) { - if (RF.timeout_cb != 0xff) - setCBIntervall(RF.timeout_cb,timeout); - else { - RF.timeout_cb = addTimerCB(RF_timed_rx_timeout, timeout); - startCB(RF.timeout_cb); - RF_changestate(RFrx); - } -} - -void startRFIRQ(void) { - - PINSEL1 |= 1; //GDO0 as EINT0 - EXTMODE |= 1; //edge sensitive - EXTPOLAR |= 0; //falling edge - EXTWAKE |= 1; - EXTINT |= 1; - - VICVectAddr2 = (unsigned long)&(cc1100IRQ); - VICVectCntl2 = VIC_SLOT_EN | INT_SRC_EINT0; - VICIntEnable = INT_EINT0; -} - -void stopRFIRQ(void) { - VICIntEnClr = INT_EINT0; -} - - -struct RFendpoint_* openEP(void* buffer, unsigned short buffersize, unsigned char type) { - - int i; - struct RFendpoint_* cur_ep; - - if(!type) - return 0; - - for(i=0; itype)) { - cur_ep->buffer = buffer; - cur_ep->buffersize = buffersize; - cur_ep->type = type; - cur_ep->bufferlen = 0; - cur_ep->dest = 0; - cur_ep->flags = 0; - if(!(buffer)) - cur_ep->flags |= EPtypedata; - return cur_ep; - } - } - return 0; - -} - -void closeEP(struct RFendpoint_ *cur_ep) { - if(cur_ep) { - cur_ep->flags = 0; - cur_ep->buffer = 0; - cur_ep->type = 0; - } -} - -void RF_setRegister(unsigned char reg, unsigned char data) { - - unsigned long VICInt; - - VICInt = VICIntEnable & INT_EINT0; - VICIntEnClr = INT_EINT0; - - cc1100_write1(reg,data); - - VICIntEnable |= VICInt; -} - -void load_RF_setting(void) { - struct RFsettings_ RFsettings; - - if(BFS_LoadFile(BFS_ID_RFsettings, sizeof(struct RFsettings_), (unsigned char*) &RFsettings) != sizeof(struct RFsettings_)) { - RFsettings = default_RFsettings; - BFS_SaveFile(BFS_ID_RFsettings, sizeof(struct RFsettings_), (unsigned char*) &RFsettings); - draw_string(0, 50, "default RF load", 3, DRAW_PUT); - } - - RF_setRegister(0x09, RFsettings.address); - RF_setRegister(0x0a, RFsettings.channel); - RF.addr = RFsettings.address; -} - - -void RFasyncmode(unsigned char on) { - - if(on) { - RF_changestate(RFidle); - while(RF.state != RFidle); - stopRFIRQ(); - cc1100_write((0x00 | BURST ),(unsigned char*)confasync,sizeof((unsigned char*)confasync)); - cc1100_write1(PATABLE,0xf0); - PINSEL1 &= 0xfffffffc; // GDO0 as GPIO - FIODIR0 |= GDO0; // output - } - else { - PINSEL1 |= 1; // GDO0 as EINT0 - cc1100_write((0x00 | BURST ),(unsigned char*)conf,sizeof((unsigned char*)conf)); - cc1100_write1(PATABLE,0xC0); - cc1100_strobe(SIDLE); - load_RF_setting(); - startRFIRQ(); - RF_changestate(RFwor); - } -} diff --git a/boop/cc1100/rf.h b/boop/cc1100/rf.h deleted file mode 100644 index 31ff0c6..0000000 --- a/boop/cc1100/rf.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - rf.h - - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef RF_H -#define RF_H - -#define WORrx_time 200 - -#define packet_test 0x01 -#define packet_ping 0x02 -#define packet_time 0x03 -#define packet_RFenc 0x04 -#define packet_redirDAT 0x05 -#define packet_redirCMD 0x06 - -#define MAX_ENDPOINTS 0x0F - -struct cc1100frame_ { - unsigned char len; - unsigned char destAddr; - unsigned char srcAddr; - unsigned char packetType; - unsigned char data[]; -}; - -struct RFendpoint_ { - union { - unsigned char* buffer; - struct cBuffer_* cbuffer; - unsigned char data[4]; - }; - unsigned short buffersize; - unsigned short bufferlen; - volatile unsigned short flags; - unsigned char dest; - unsigned char type; -}; -//RFendpoints_.flags -#define EPenabled (1<<0) -#define EPoutput (1<<1) -#define EPinput 0 -#define EPtypedata (1<<2) -#define EPtypebuffer 0 -#define EPtypecbuffer (1<<3) -#define EPtypemask (1<<2 | 1<<3) -#define EPnewdata (1<<4) -#define EPoverwritten (1<<5) -#define EPoverflow (1<<6) -#define EPonce (1<<7) -#define EPsendwor (1<<8) - - -struct RFsettings_ { - unsigned char address; - unsigned char channel; -}__attribute__((aligned(0x4))); - -const struct RFsettings_ default_RFsettings; - -struct RF_ { - unsigned char addr; - volatile unsigned char flags; - volatile unsigned char state; - volatile unsigned char timeout_cb; - volatile unsigned char wortimeout_cb; - volatile unsigned char nextstate; - volatile unsigned char tag; -}__attribute__((aligned(0x4))); -struct RF_ RF; - -//RF_.state -#define RFpwrdown 0x00 -#define RFwor 0x01 -#define RFidle 0x02 -#define RFrx 0x03 -#define RFtx 0x04 -#define RFsendwor 0x05 -#define RFsendworend 0x06 - -//RF.flags -#define PingACK (1<<0) -#define WORenabled (1<<1) -#define RXueop (1<<2) //MCSM2 RX_TIME: Until end of packet - -void startRFIRQ(void); -void RF_init (void); -void RF_timed_rx(unsigned short timeout); -void RF_changestate (unsigned char state); -unsigned char RF_sendping(unsigned char dest); -struct RFendpoint_* openEP(void* buffer, unsigned short buffersize, unsigned char type); -void closeEP(struct RFendpoint_ *cur_ep); -void RF_setRegister(unsigned char reg, unsigned char data); -void load_RF_setting(void); -void RFasyncmode(unsigned char on); -#endif diff --git a/boop/cc1100/scan.c b/boop/cc1100/scan.c deleted file mode 100644 index 3ad2d71..0000000 --- a/boop/cc1100/scan.c +++ /dev/null @@ -1,151 +0,0 @@ -//~ DN508 - Frequency Scanning using CC430Fx, CC110x, and CC111xFx - -void scanFreqBands_autocal(void) { - UINT8 subBand; - UINT8 i; - UINT16 channel; - // 1) Loop through all sub bands - for (subBand = 0; subBand < NUMBER_OF_SUB_BANDS; subBand++) - { - // 1.1) Set the base freq. for the current sub band. The values for FREQ2, FREQ1, and FREQ0 can be found in - // freqSettings[subBand][n], where n = 0, 1, or 2 - // 1.2) Set TEST0 register = 0x0B - // 1.3) Loop through all channels - for (channel = 0; channel <= lastChannel[subBand]; channel++ ) - { - UINT8 pktStatus; - // 1.3.1) Set CHANNR register = channel - // 1.3.2) Change TEST0 register settings to 0x09 if freq is above 861 MHz - if (channel == limitTest0Reg[subBand]) - { - // 1.3.2.1) Set TEST0 register = 0x09 - } - // 1.3.3) Enter RX mode by issuing an SRX strobe command - // 1.3.4) Wait for radio to enter RX state (can be done by polling the MARCSTATE register) - // 1.3.5) Wait for RSSI to be valid (See DN505 [7] on how long to wait) - // 1.3.6) Read the PKTSTATUS register while the radio is in RX state (store it in pktStatus) - // 1.3.7) Enter IDLE state by issuing an SIDLE strobe command - // 1.3.8) Check if CS is asserted (use the value obtained in 1.3.6) - if (pktStatus & 0x40) - { - // CS is asserted - // 1.3.8.1) Read RSSI value and store it in rssi_dec - // 1.3.8.2) Calculate RSSI in dBm (rssi_dBm)(offset value found in rssi_offset[subBand]) - // 1.3.8.3) Store the RSSI value and the corresponding channel number - rssiTable[carrierSenseCounter] = rssi_dBm; - channelNumber[carrierSenseCounter] = channel; - carrierSenseCounter++; - } - } // End Channel Loop - // 1.4) Before moving on to the next sub band, scan through the rssiTable to find the highest RSSI value. Store - // the RSSI value in highRSSI[subBand] and the corresponding channel number in selectedChannel[subBand] - for (i = 0; i < carrierSenseCounter; i++) - { - if (rssiTable[i] > highRSSI[subBand]) - { - highRSSI[subBand] = rssiTable[i]; - selectedChannel[subBand] = channelNumber[i]; - } - } - // 1.5) Reset carrierSenseCounter - carrierSenseCounter = 0; - } // End Band Loop - // 2) When all sub bands have been scanned, find which sub band has the highest RSSI (Scan the highRSSI[subBand] - // table). Store the subBand (0, 1, or 2) and the corresponding channel in the global variables activeBand and - // activeChannel respectively - //~ { - INT16 tempRssi = -150; - for (subBand = 0; subBand < NUMBER_OF_SUB_BANDS; subBand++) - { - if (highRSSI[subBand] >= tempRssi) - { - tempRssi = highRSSI[subBand]; - activeChannel = selectedChannel[subBand]; - activeBand = subBand; - } - } -} - - -void scanFreqBands_noautocal(void) { - UINT8 subBand; - UINT8 i; - UINT16 channel; - // 1) Loop through all sub bands - for (subBand = 0; subBand < NUMBER_OF_SUB_BANDS; subBand++) - { - // 1.1) Set the base freq. for the current sub band. The values for FREQ2, FREQ1, and FREQ0 can be found in - // freqSettings[subBand][n], where n = 0, 1, or 2 - // 1.2) Set TEST0 register = 0x0B - // 1.3) Reset Calibration Counter (calibration performed when counter is 0) - calCounter = 0; - // 1.4) Loop through all channels - for (channel = 0; channel <= lastChannel[subBand]; channel++ ) - { - UINT8 pktStatus; - // 1.4.1) Set CHANNR register = channel - // 1.4.2) Change TEST0 register settings to 0x09 if freq is above 861 MHz. When TEST0 is changed to 0x09, it - // is important that FSCAL2 is set to 0x2A and that a new calibration is performed - if (channel == limitTest0Reg[subBand]) - { - // 1.4.2.1) Set TEST0 register = 0x09 - // 1.4.2.2) Set FSCAL2 register = 0x2A - // 1.4.2.3) Calibration is needed when TEST0 is changed - calCounter = 0; - } - // 1.4.3) Calibrate for every 5th ch. + at start of every sub band and every time the TEST0 reg. is changed - if (calCounter++ == 0) - { - // 1.4.3.1) Perform a manual calibration by issuing an SCAL strobe command - } - // 1.4.4)) Reset Calibration Counter (if calCounter = 5, we are 1 MHz away from the frequency where a - // calibration was performed) - if (calCounter == 5) - { - // 1.4.4.1) Calibration is performed if calCounter = 0 - calCounter = 0; - } - // 1.4.5) Enter RX mode by issuing an SRX strobe command - // 1.4.6) Wait for radio to enter RX state (can be done by polling the MARCSTATE register) - // 1.4.7) Wait for RSSI to be valid (See DN505 [7] on how long to wait) - // 1.4.8) Read the PKTSTATUS register while the radio is in RX state (store it in pktStatus) - // 1.4.9) Enter IDLE state by issuing an SIDLE strobe command - // 1.4.10) Check if CS is asserted (use the value obtained in 1.4.8) - if (pktStatus & 0x40) - { // CS is asserted - // 1.4.10.1) Read RSSI value and store it in rssi_dec - // 1.4.10.2) Calculate RSSI in dBm (rssi_dBm)(offset value found in rssi_offset[subBand]) - // 1.4.10.3) Store the RSSI value and the corresponding channel number - rssiTable[carrierSenseCounter] = rssi_dBm; - channelNumber[carrierSenseCounter] = channel; - carrierSenseCounter++; - } - } // End Channel Loop - // 1.5) Before moving on to the next sub band, scan through the rssiTable to find the highest RSSI value. Store - // the RSSI value in highRSSI[subBand] and the corresponding channel number in selectedChannel[subBand] - for (i = 0; i < carrierSenseCounter; i++) - { - if (rssiTable[i] > highRSSI[subBand]) - { - highRSSI[subBand] = rssiTable[i]; - selectedChannel[subBand] = channelNumber[i]; - } - } - // 1.6) Reset carrierSenseCounter - carrierSenseCounter = 0; - } // End Band Loop - // 2) When all sub bands have been scanned, find which sub band has the highest RSSI (Scan the highRSSI[subBand] - // table). Store the subBand (0, 1, or 2) and the corresponding channel in the global variables activeBand and - // activeChannel respectively - //~ { - INT16 tempRssi = -150; - for (subBand = 0; subBand < NUMBER_OF_SUB_BANDS; subBand++) - { - if (highRSSI[subBand] >= tempRssi) - { - tempRssi = highRSSI[subBand]; - activeChannel = selectedChannel[subBand]; - activeBand = subBand; - } - } -} diff --git a/boop/cc1100/scan.h b/boop/cc1100/scan.h deleted file mode 100644 index f3f30f8..0000000 --- a/boop/cc1100/scan.h +++ /dev/null @@ -1,39 +0,0 @@ -//~ DN508 - Frequency Scanning using CC430Fx, CC110x, and CC111xFx - - -#define NUMBER_OF_SUB_BANDS 3 - -// Variables used to calculate RSSI -UINT8 rssi_dec; -INT16 rssi_dBm; -UINT8 rssi_offset[NUMBER_OF_SUB_BANDS] = {77, 77, 77}; -// Freq. Band Range Channel -// 0 779.009766 - 829.997314 0 - 255 All 0x0B -// 1 830.196869 - 881.184418 0 - 255 <- 154 = 0x0B, 155 -> = 0x09 -// 2 881.384369 - 927.972992 0 - 233 All 0x09 -INT16 rssiTable[256]; -UINT16 channelNumber[256]; -UINT8 carrierSenseCounter = 0; // Counter used to keep track on how many time CS has been asserted in one sub band - //(i.e. how many RSSI values are stored for each band) - -// Stop Channel in each of the sub bands -UINT8 lastChannel[NUMBER_OF_SUB_BANDS] = { 255, 255, 233}; - -// Channel number for each of the sub bands where one should change from TEST0 = 0x0B to TEST0 = 0x09 -UINT16 limitTest0Reg[NUMBER_OF_SUB_BANDS] = { 256, 155, 0 }; - -// Initialized to a value lower than the RSSI threshold -INT16 highRSSI[NUMBER_OF_SUB_BANDS] = { -150, -150, -150}; - -// Initialized to a value greater than the highest channel number -UINT16 selectedChannel[NUMBER_OF_SUB_BANDS] = { 300, 300, 300}; - // {FREQ2, FREQ1, FREQ0} -UINT8 freqSettings[NUMBER_OF_SUB_BANDS][3] = { {0x1D, 0xF6, 0x40}, - {0x1F, 0xEE, 0x3F}, - {0x21, 0xE6, 0x3F}}; - -UINT8 activeBand; // After the scanFreqBands() function has run, this variable will contain the sub band where - // the strongest signal was found -UINT16 activeChannel; // After the scanFreqBands() function has run, this variable will contain the channel number - // where the strongest signal was found -UINT8 calCounter = 0; // This variable is only used when running the code shown in Figure 3 diff --git a/boop/crt.s b/boop/crt.s index 34bf0dc..820fdb1 100644 --- a/boop/crt.s +++ b/boop/crt.s @@ -25,22 +25,22 @@ .global _stack /* Stack Sizes */ -.set UND_STACK_SIZE, 0x00000004 /* stack for "undefined instruction" interrupts is 4 bytes */ -.set ABT_STACK_SIZE, 0x00000004 /* stack for "abort" interrupts is 4 bytes */ -.set FIQ_STACK_SIZE, 0x00000104 /* stack for "FIQ" interrupts is 4 bytes */ -.set IRQ_STACK_SIZE, 0X000003F0 /* stack for "IRQ" normal interrupts is 4 bytes */ -.set SVC_STACK_SIZE, 0x00000004 /* stack for "SVC" supervisor mode is 4 bytes */ +.set UND_STACK_SIZE, 0x00000004 /* stack for "undefined instruction" interrupts is 4 bytes */ +.set ABT_STACK_SIZE, 0x00000004 /* stack for "abort" interrupts is 4 bytes */ +.set FIQ_STACK_SIZE, 0x00000004 /* stack for "FIQ" interrupts is 4 bytes */ +.set IRQ_STACK_SIZE, 0X00000100 /* stack for "IRQ" normal interrupts is 4 bytes */ +.set SVC_STACK_SIZE, 0x00000004 /* stack for "SVC" supervisor mode is 4 bytes */ /* Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs */ -.set MODE_USR, 0x10 /* Normal User Mode */ -.set MODE_FIQ, 0x11 /* FIQ Processing Fast Interrupts Mode */ -.set MODE_IRQ, 0x12 /* IRQ Processing Standard Interrupts Mode */ -.set MODE_SVC, 0x13 /* Supervisor Processing Software Interrupts Mode */ -.set MODE_ABT, 0x17 /* Abort Processing memory Faults Mode */ -.set MODE_UND, 0x1B /* Undefined Processing Undefined Instructions Mode */ -.set MODE_SYS, 0x1F /* System Running Priviledged Operating System Tasks Mode */ -.set I_BIT, 0x80 /* when I bit is set, IRQ is disabled (program status registers) */ -.set F_BIT, 0x40 /* when F bit is set, FIQ is disabled (program status registers) */ +.set MODE_USR, 0x10 /* Normal User Mode */ +.set MODE_FIQ, 0x11 /* FIQ Processing Fast Interrupts Mode */ +.set MODE_IRQ, 0x12 /* IRQ Processing Standard Interrupts Mode */ +.set MODE_SVC, 0x13 /* Supervisor Processing Software Interrupts Mode */ +.set MODE_ABT, 0x17 /* Abort Processing memory Faults Mode */ +.set MODE_UND, 0x1B /* Undefined Processing Undefined Instructions Mode */ +.set MODE_SYS, 0x1F /* System Running Priviledged Operating System Tasks Mode */ +.set I_BIT, 0x80 /* when I bit is set, IRQ is disabled (program status registers) */ +.set F_BIT, 0x40 /* when F bit is set, FIQ is disabled (program status registers) */ .text @@ -48,94 +48,41 @@ .global Reset_Handler .global _startup - -.section .text.fastcode +.global _endstartup .global ramvectors .func ramvectors + ramvectors: - ldr PC, Ram_Reset_Addr - ldr PC, Ram_Undef_Addr - ldr PC, Ram_SWI_Addr - ldr PC, Ram_PAbt_Addr - ldr PC, Ram_DAbt_Addr - nop /* Reserved Vector (holds Philips ISP checksum) */ - ldr PC, do_vic_addr /* Route IRQ to VIC */ - ldr PC, Ram_FIQ_Addr + ldr PC, Ram_Reset_Addr + ldr PC, Ram_Undef_Addr + ldr PC, Ram_SWI_Addr + ldr PC, Ram_PAbt_Addr + ldr PC, Ram_DAbt_Addr + nop /* Reserved Vector (holds Philips ISP checksum) */ + ldr PC, [PC,#-0xFF0] /* Route IRQ to VIC */ + ldr PC, Ram_FIQ_Addr -Ram_Reset_Addr: .word Reset_Handler /* defined in this module below */ -Ram_Undef_Addr: .word UNDEF_Routine /* defined in main.c */ -Ram_SWI_Addr: .word SWI_Routine /* defined in main.c */ -Ram_PAbt_Addr: .word UNDEF_Routine /* defined in main.c */ -Ram_DAbt_Addr: .word UNDEF_Routine /* defined in main.c */ -do_vic_addr: .word do_vic -Ram_FIQ_Addr: .word do_fiq /* defined in main.c */ - .word 0 /* rounds vectors to 64 bytes total */ +Ram_Reset_Addr: .word Reset_Handler /* defined in this module below */ +Ram_Undef_Addr: .word UNDEF_Routine /* defined in main.c */ +Ram_SWI_Addr: .word SWI_Routine /* defined in main.c */ +Ram_PAbt_Addr: .word UNDEF_Routine /* defined in main.c */ +Ram_DAbt_Addr: .word UNDEF_Routine /* defined in main.c */ +Ram_IRQ_Addr: .word IRQ_Routine /* defined in main.c */ +Ram_FIQ_Addr: .word FIQ_Routine /* defined in main.c */ + .word 0 /* rounds vectors to 64 bytes total */ .endfunc -.global do_vic -.func do_vic -do_vic: - - stmfd sp!, { r0-r5, r12, lr } /* save work regs & spsr on stack */ - ldr r4, =VICVectAddr /* get the ISR address from VIC */ - ldr r5, [r4] - mov lr, pc /* set return to common exit of ISR */ - bx r5 /* go handle the interrupt */ -/* mov pc, r5 /* go handle the interrupt */ - str lr, [r4] /* update VICVectAddr */ - ldmfd sp!, { r0-r5, r12, lr } /* restore work regs and spsr_irq */ - subs pc, lr, #0x4 /* return, restoring CPSR from SPSR */ -/* -stmfd sp!, { lr } -mrs lr, spsr -stmfd sp!, { r4-r5, lr } - -ldr r4, =VICVectAddr -ldr r5, [r4] - -msr cpsr_c, #0x13 - -stmfd sp!, { r0-r3, r12, lr } -mov lr, pc -bx r5 -ldmfd sp!, { r0-r3, r12, lr } - -msr cpsr_c, #0x92 - -str lr, [r4] - -ldmfd sp!, { r4-r5, lr } -msr spsr_cxsf, lr -ldmfd sp!, { lr } - -subs pc, lr, #0x4 -*/ - -.endfunc - -.global do_fiq -.func do_fiq -do_fiq: - - stmfd sp!, { r0-r7, lr } - ldr r8, =FIQ_Routine - mov lr, pc - bx r8 - ldmfd sp!, { r0-r7, lr } - subs pc, lr, #0x4 -.endfunc - - .section .text .func _startup + _startup: # Exception Vectors _vectors: - ldr PC, Reset_Addr + ldr PC, Reset_Addr Reset_Addr: .word Reset_Handler @@ -143,126 +90,110 @@ Reset_Addr: .word Reset_Handler Reset_Handler: -/* Setup a stack for each mode - note that this only sets up a usable stack - for User mode. Also each mode is setup with interrupts initially disabled. */ - - ldr r0, =_stack_end - msr CPSR_c, #MODE_UND|I_BIT|F_BIT /* Undefined Instruction Mode */ - mov sp, r0 + /* Setup a stack for each mode - note that this only sets up a usable stack + for User mode. Also each mode is setup with interrupts initially disabled. */ + + ldr r0, =_stack_end + msr CPSR_c, #MODE_UND|I_BIT|F_BIT /* Undefined Instruction Mode */ + mov sp, r0 + sub r0, r0, #UND_STACK_SIZE + msr CPSR_c, #MODE_ABT|I_BIT|F_BIT /* Abort Mode */ + mov sp, r0 + sub r0, r0, #ABT_STACK_SIZE + msr CPSR_c, #MODE_FIQ|I_BIT|F_BIT /* FIQ Mode */ + mov sp, r0 + sub r0, r0, #FIQ_STACK_SIZE + msr CPSR_c, #MODE_IRQ|I_BIT|F_BIT /* IRQ Mode */ + mov sp, r0 + sub r0, r0, #IRQ_STACK_SIZE + msr CPSR_c, #MODE_SVC|I_BIT|F_BIT /* Supervisor Mode */ + mov sp, r0 + sub r0, r0, #SVC_STACK_SIZE + msr CPSR_c, #MODE_SYS|I_BIT|F_BIT /* User Mode */ + mov sp, r0 - sub r0, r0, #UND_STACK_SIZE - msr CPSR_c, #MODE_ABT|I_BIT|F_BIT /* Abort Mode */ - mov sp, r0 + /* Setup Pins and Memory */ + ldr r0,=BCFG0 + ldr r1, =0x10000420 + str r1,[r0] + str r1,[r0,#0x08] - sub r0, r0, #ABT_STACK_SIZE - msr CPSR_c, #MODE_FIQ|I_BIT|F_BIT /* FIQ Mode */ - mov sp, r0 + ldr r0, =BCFG1 + ldr r1, =0xc42 + str r1, [r0] - sub r0, r0, #FIQ_STACK_SIZE - msr CPSR_c, #MODE_IRQ|I_BIT|F_BIT /* IRQ Mode */ - mov sp, r0 + ldr r0, =PINSEL0 + ldr r1, =0x00008005 + str r1, [r0] - sub r0, r0, #IRQ_STACK_SIZE - msr CPSR_c, #MODE_SVC|I_BIT|F_BIT /* Supervisor Mode */ - mov sp, r0 + ldr r0, =PINSEL1 + ldr r1, =0x20000000 + str r1, [r0] - sub r0, r0, #SVC_STACK_SIZE - msr CPSR_c, #MODE_SYS|I_BIT|F_BIT /* User Mode */ - mov sp, r0 + ldr r0, =PINSEL2 + ldr r1, =0x0de049d4 + str r1, [r0] -/* Setup Pins and Memory */ - ldr r0,=BCFG0 - /* W B R */ - /* P S B */ - /* B W E E L */ - /* AT|MW|M|P|R|R|reserved|WST2 |E|WST1 |r|IDCY */ - /* --+--+-+-+-+-+--------+-----+-------+-+---- */ - /* 3 | 2| | | |2| 2 1| 1 | | 0 |0| 0 */ - /* 1 | 8| | | |4| 0 6| 2 | | 8 |4| 0 */ - /* --+--+-+-+-+-+--------+-----+-------+-+---- */ -/* ldr r1, =0x10000400 /* 00|01|0|0|0|0|00000000|00000|1|00000|0|0000 16bit, rble, 3wst - 10 mhz*/ -/* ldr r1, =0x10000420 /* 00|01|0|0|0|0|00000000|00000|1|00001|0|0000 16bit, rble, 4wst - 30 mhz*/ - ldr r1, =0x10001CA0 /* 00|01|0|0|0|0|00000000|00101|1|00101|0|0000 16bit, rble, 6wst - 60 mhz*/ + ldr r0, = IO2SET + ldr r1, =0x1FC0000 + str r1, [r0] + str r1, [r0,#0x04] - str r1,[r0] /* set bcfg0 (flash) */ - str r1,[r0,#0x08] /* set bcfg2 (flash) */ + ldr r0, = IO0DIR + ldr r1, =0x002018D0 + str r1, [r0] - ldr r0, =BCFG1 -/* ldr r1, =0x00000422 /* 00|00|0|0|0|0|00000000|00000|1|00001|0|0010 8 bit, 3 sram wst, rble, 5 wst 3 idcy*/ - ldr r1, =0x00000C42 /* 00|00|0|0|0|0|00000000|00001|1|00010|0|0010 8 bit, 3 sram wst, rble, 5 wst 3 idcy*/ - str r1, [r0] /* set bcfg1 (lcd) */ - ldr r0, =PINSEL0 - ldr r1, =0x00008005 - str r1, [r0] - - ldr r0, =PINSEL1 - ldr r1, =0x00000000 /* gpio 0.30 */ - str r1, [r0] - - ldr r0, =PINSEL2 - ldr r1, =0x0de049d4 - str r1, [r0] - - ldr r0, = IO2SET - ldr r1, =0x1FC0000 - str r1, [r0] - str r1, [r0,#0x04] - - ldr r0, = IO0DIR - ldr r1, =0x002018D0 - str r1, [r0] - -/* Setup PLL */ - ldr r0, =0xe01fc000 - ldr r2, =0xaa - ldr r3, =0x55 - ldr r1, =0x03 - str r1, [r0,#0x80] /* set pllcon to 0x03 = pll enable (0x01) + pll connect (0x02) */ - ldr r1, =0x0 - str r1, [r0,#0x100] /* set vbpdiv to 0x00 = 1/4th; 0x01 = 1/1, 0x02 = 1/2*/ -/* ldr r1, =0x42 */ - ldr r1, =0x45 - str r1,[r0,#0x84] /* set pllcfg to 0x42 = psel = 10 (4) = msel= 00010 (3) = 240 mhz Fcco*/ - str r2, [r0,#0x8c] - str r3, [r0,#0x8c] - -/* Copy .fastcode & .data section (Copy from ROM to RAM) */ - ldr R0, =__fastcode_load /*_etext*/ - ldr r3, entry_mask /* this and the next instruction are an workaround */ - and r0, r0, r3 /* for some ugly bug in winarm to force msb to 0x80 */ - ldr R1, =__fastcode_start /*_data*/ - ldr R2, =_edata + /* Setup PLL */ + ldr r0, =0xe01fc000 + ldr r2, =0xaa + ldr r3, =0x55 + ldr r1, =0x03 + str r1, [r0,#0x80] + ldr r1, =0x0 + str r1, [r0,#0x100] + ldr r1, =0x42 + str r1,[r0,#0x84] + str r2, [r0,#0x8c] + str r3, [r0,#0x8c] + +_endstartup: + /* Copy .fastcode & .data section (Copy from ROM to RAM) */ + ldr R0, =ramvectors /*_etext*/ + ldr r3, entry_mask /* this and the next instruction are an workaround */ + and r0, r0, r3 /* for some ugly bug in winarm to force msb to 0x80 */ + ldr R1, =0x40000000 /*_data*/ + ldr R2, =_startup 1: - cmp r1,r2 - ldmltia r0!,{r3} - stmltia r1!,{r3} - blt 1b + cmp r1,r2 + ldmltia r0!,{r3} + stmltia r1!,{r3} + blt 1b -/* Clear .bss section (Zero init) */ - mov R0, #0 - ldr R1, =_bss_start - ldr R2, =_bss_end + /* Clear .bss section (Zero init) */ + mov R0, #0 + ldr R1, =_bss_start + ldr R2, =_bss_end 2: - cmp R1, R2 - strlo R0, [R1], #4 - blo 2b + cmp R1, R2 + strlo R0, [R1], #4 + blo 2b + + ldr r0, =MEMMAP + ldr r1, =0x02 /* irq vectors in ram */ + str r1, [r0] + + mov r0,#0 + mov r1,r0 + mov r2,r0 + mov fp,r0 + mov r7,r0 + ldr r10,=main + mov lr,pc + bx r10 - ldr r0, =MEMMAP - ldr r1, =0x02 /* irq vectors in ram */ - str r1, [r0] - mov r0,#0 - mov r1,r0 - mov r2,r0 - mov fp,r0 - mov r7,r0 - ldr r10,=main - mov lr,pc - bx r10 .endfunc - -entry_mask: .word 0x8FFFFFFF /* defined in this module below */ - +entry_mask: .word 0x4FFFFFFF /* defined in this module below */ .end diff --git a/boop/display/GrayScaler.exe b/boop/display/GrayScaler.exe deleted file mode 100644 index ac8260d..0000000 Binary files a/boop/display/GrayScaler.exe and /dev/null differ diff --git a/boop/display/Hourglas_2bpp.bmp b/boop/display/Hourglas_2bpp.bmp deleted file mode 100644 index 4e67877..0000000 Binary files a/boop/display/Hourglas_2bpp.bmp and /dev/null differ diff --git a/boop/display/Hourglas_t_3bpp_t.bmp b/boop/display/Hourglas_t_3bpp_t.bmp deleted file mode 100644 index bf54175..0000000 Binary files a/boop/display/Hourglas_t_3bpp_t.bmp and /dev/null differ diff --git a/boop/display/Make.conf b/boop/display/Make.conf deleted file mode 100644 index 762aea9..0000000 --- a/boop/display/Make.conf +++ /dev/null @@ -1 +0,0 @@ -THUMBSRCS := lcd.c fonty.c drawDigit.c drawIcon.c backlight.c diff --git a/boop/display/backlight.c b/boop/display/backlight.c deleted file mode 100644 index 77886d5..0000000 --- a/boop/display/backlight.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - backlight.c - lcd backlight control - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "timerfuncs.h" -#include "backlight.h" - -// backlight PWM is done in soundirq -// backlight timing is done by timer functions - -extern volatile unsigned char bl_val; - -unsigned char bl_max; -unsigned int bl_cb; -unsigned char direction; - -unsigned char bl_speed; // n*5 ms between two steps of brightness -unsigned int bl_timeout; - -void autoBL(unsigned int cb) -{ - switch(direction) - { - case 0: - if(bl_val < bl_max) - { - bl_val++; - } - else - { - direction = 1; - setCBIntervall(bl_cb, bl_timeout); - } - break; - - case 1: - direction = 2; - setCBIntervall(bl_cb, bl_speed); - break; - - case 2: - if(bl_val > 0x00) - { - bl_val--; - } - else - { - direction = 0; - stopCB(bl_cb); - } - break; - } -} - - -// adds function autoBL to timer -// initialises parameters // TODO: vgl. load_setting (settingsmenu.c) -void initBacklight(void) -{ - direction = 1; - bl_speed = 2; - bl_timeout = 5000; - bl_max = 63; - bl_cb = addTimerCB(autoBL, bl_timeout); - startCB(bl_cb); -} - -// set new brightness and set up fading and timout -void setBacklight(unsigned char level) -{ - if(level == BL_AUTO) - { - stopCB(bl_cb); - direction = 0; - setCBIntervall(bl_cb, bl_speed); - startCB(bl_cb); - } - else if(level < BL_AUTO) - { - stopCB(bl_cb); - bl_val = level; - direction = 1; - setCBIntervall(bl_cb, bl_timeout); - startCB(bl_cb); - } -} - -void setBLSpeed(unsigned char s) -{ - if(s > 0) - bl_speed = s; -} - -void setBLTimeout(unsigned int t) -{ - if(t > 0) - bl_timeout = t; -} diff --git a/boop/display/backlight.h b/boop/display/backlight.h deleted file mode 100644 index 4b3574a..0000000 --- a/boop/display/backlight.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - backlight.h - lcd backlight control - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef BACKLIGHT_H -#define BACKLIGHT_H - -#define BL_OFF 0x00 -#define BL_AUTO 0x40 -#define BL_ON 0x80 - -void initBacklight(void); -void setBacklight(unsigned char level); - -#endif diff --git a/boop/display/boop_logo b/boop/display/boop_logo deleted file mode 100644 index aaa5389..0000000 --- a/boop/display/boop_logo +++ /dev/null @@ -1,2592 +0,0 @@ -#ifndef DEBUGMODE -const unsigned char b_w = 128; -const unsigned char b_h = 160; -const char b_data[] = { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x80, - 0x80, 0x80, - 0xc0, 0x80, - 0xc0, 0xc0, - 0xc0, 0xc0, - 0xc0, 0xe0, - 0xc0, 0xe0, - 0xe8, 0xd0, - 0xf8, 0xf8, - 0xf8, 0xf8, - 0xf0, 0xf8, - 0xe0, 0xc0, - 0xe0, 0xc0, - 0xc0, 0xe0, - 0xc0, 0xc0, - 0xc0, 0xc0, - 0xc0, 0x80, - 0x80, 0xc0, - 0x80, 0xc0, - 0xe0, 0xf0, - 0xe0, 0xc0, - 0xc0, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 1 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0xc0, - 0xe0, 0xc0, - 0xe0, 0xf0, - 0xf0, 0xa0, - 0xc0, 0xc0, - 0xe0, 0xc0, - 0xe0, 0xe0, - 0xe0, 0xf0, - 0xf0, 0xe0, - 0xf0, 0xf0, - 0xf0, 0xf0, - 0xf0, 0xf0, - 0xf0, 0xe0, - 0x20, 0xc0, - 0xf0, 0x08, - 0xfc, 0xf8, - 0xfe, 0xfc, - 0xff, 0xfe, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0x7f, - 0x7f, 0xff, - 0x7f, 0xbf, - 0x7f, 0xbf, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0x7f, 0xff, - 0x7f, 0xff, - 0xff, 0x7f, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xf8, 0xfd, - 0xe0, 0x90, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 2 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xc0, 0x20, - 0xf8, 0xf4, - 0xfe, 0xfc, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xbf, - 0xdf, 0xbf, - 0xdf, 0x2f, - 0x1f, 0xef, - 0x1f, 0xef, - 0x1f, 0xef, - 0x1f, 0xec, - 0x1f, 0xe0, - 0x0f, 0xf7, - 0x07, 0xfb, - 0x03, 0xfd, - 0x01, 0xff, - 0x01, 0xfe, - 0x00, 0xff, - 0x00, 0xff, - 0x83, 0x7c, - 0xe3, 0xde, - 0x77, 0xab, - 0x1b, 0xe7, - 0x0b, 0xf4, - 0x0c, 0xf3, - 0x08, 0xf7, - 0x0c, 0xf3, - 0x1d, 0xee, - 0x1f, 0xef, - 0xef, 0x17, - 0xe7, 0xdf, - 0xcf, 0xbf, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0x3e, 0x5c, - 0x1e, 0x1d, - 0x0f, 0x0e, - 0x00, 0x06, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 3 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x07, 0x0a, - 0x0e, 0x0f, - 0x1e, 0x0f, - 0x7f, 0xbf, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0x7f, 0xbf, - 0x7f, 0xb3, - 0x3d, 0xda, - 0x01, 0xfe, - 0x01, 0xff, - 0xc1, 0x3f, - 0x71, 0x8e, - 0x30, 0xcf, - 0x18, 0xe7, - 0x18, 0xf7, - 0x18, 0xf7, - 0x18, 0xef, - 0x08, 0xf7, - 0x00, 0xff, - 0x00, 0xff, - 0x00, 0xff, - 0x00, 0xff, - 0x00, 0xff, - 0x00, 0xff, - 0x06, 0xfb, - 0x07, 0xfb, - 0xc1, 0x3e, - 0xf0, 0x0f, - 0x78, 0x87, - 0xf8, 0x67, - 0x78, 0xe7, - 0xf8, 0xe7, - 0xf8, 0xe7, - 0xf0, 0xef, - 0xf8, 0x47, - 0x63, 0x9c, - 0xf7, 0xeb, - 0xff, 0xe3, - 0xf3, 0xef, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xef, 0xf7, - 0xe1, 0xf2, - 0x70, 0xb0, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 4 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x88, - 0x99, 0x73, - 0xff, 0x3b, - 0xff, 0x3f, - 0xfe, 0x7d, - 0xff, 0x7e, - 0x6e, 0x97, - 0x40, 0xff, - 0xe1, 0x7e, - 0xe1, 0x9e, - 0xf8, 0xe7, - 0xfe, 0xb9, - 0x9e, 0x8d, - 0x8e, 0xd9, - 0xff, 0x0c, - 0x7c, 0xfb, - 0x7c, 0xfb, - 0xfc, 0x7b, - 0x60, 0xdf, - 0xc0, 0xff, - 0xe0, 0x7f, - 0xf0, 0x2f, - 0xb0, 0x7f, - 0x30, 0xff, - 0x78, 0xff, - 0xff, 0x4c, - 0xce, 0xf5, - 0xce, 0xf4, - 0xcf, 0xf2, - 0xcb, 0x77, - 0xeb, 0x57, - 0x67, 0xeb, - 0xf7, 0xab, - 0xff, 0x1e, - 0xdf, 0x6e, - 0xcf, 0x73, - 0xe3, 0xdd, - 0x9f, 0x21, - 0x1f, 0x81, - 0x15, 0x0b, - 0x17, 0x09, - 0x09, 0x16, - 0x07, 0x08, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x18, 0x08, - 0xf8, 0x78, - 0x98, 0xf8, - 0x38, 0x10, - 0x30, 0x18, - 0x30, 0x30, - 0x30, 0x30, - 0x30, 0x30, - 0x30, 0x70, - 0x70, 0x20, - 0x60, 0x30, - 0x60, 0x60, - 0x60, 0x60, - 0x60, 0x60, - 0xf8, 0xe4, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 5 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xe0, 0x10, - 0xf8, 0x14, - 0x0e, 0xf0, - 0x03, 0xfc, - 0xff, 0x00, - 0xff, 0x02, - 0x87, 0x7b, - 0x83, 0xff, - 0xcf, 0x3f, - 0x6f, 0x1f, - 0x6f, 0xbf, - 0xbf, 0x46, - 0xff, 0x1f, - 0x7f, 0x3f, - 0x3f, 0xdf, - 0xf9, 0xde, - 0x7b, 0xd8, - 0x7b, 0xc0, - 0xf9, 0xce, - 0xed, 0xf8, - 0xec, 0xf7, - 0xf6, 0x8b, - 0x93, 0xef, - 0x98, 0xe7, - 0x8e, 0xf1, - 0x8e, 0xff, - 0xcf, 0xbe, - 0xce, 0xb7, - 0xe6, 0xd9, - 0xf6, 0xe9, - 0xfe, 0xb1, - 0x3e, 0xdf, - 0x1e, 0xef, - 0x07, 0xfa, - 0x03, 0xfd, - 0x01, 0xfe, - 0x00, 0xff, - 0x80, 0x7f, - 0x80, 0x7c, - 0x80, 0x7d, - 0x01, 0xfe, - 0x03, 0xf5, - 0x02, 0xef, - 0x06, 0xe8, - 0x0c, 0xd0, - 0x18, 0xe0, - 0x30, 0xc0, - 0x60, 0xa0, - 0xc0, 0x60, - 0x80, 0xc0, - 0x00, 0x80, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x01, - 0x01, 0x01, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x40, 0x00, - 0xe0, 0xc0, - 0xc3, 0xc1, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 6 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xf0, 0xcc, - 0x7f, 0x88, - 0x01, 0xfe, - 0x00, 0xff, - 0x00, 0xff, - 0xff, 0x02, - 0x01, 0x83, - 0x01, 0x00, - 0x00, 0x01, - 0x00, 0x00, - 0x80, 0x40, - 0xc0, 0x20, - 0x30, 0x48, - 0x1c, 0xa0, - 0x66, 0x91, - 0xfb, 0xf4, - 0x8d, 0x58, - 0x0e, 0x0d, - 0x0f, 0x06, - 0x0f, 0x07, - 0x0f, 0x07, - 0x8f, 0x07, - 0x0f, 0x87, - 0x0f, 0x07, - 0x0f, 0x07, - 0x0f, 0x07, - 0x1f, 0x2f, - 0xff, 0x7f, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xfe, - 0xfe, 0xff, - 0xfc, 0xff, - 0xfc, 0xfb, - 0xf8, 0xf7, - 0xf0, 0xff, - 0x7d, 0x32, - 0x1f, 0x04, - 0x03, 0x05, - 0x03, 0x04, - 0x06, 0x01, - 0x0c, 0x03, - 0x1c, 0x0b, - 0x30, 0x1f, - 0xf0, 0x2f, - 0xe0, 0xdf, - 0x60, 0x9f, - 0x60, 0x1f, - 0x01, 0xfe, - 0x03, 0xfd, - 0x06, 0xfb, - 0x0c, 0xf6, - 0xb8, 0x5c, - 0xe0, 0x50, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xf8, 0xf0, - 0x98, 0x1c, - 0x0c, 0x1c, - 0x0c, 0x0c, - 0x0c, 0x0c, - 0x0c, 0x0c, - 0x1c, 0x0c, - 0x1c, 0x3c, - 0xec, 0xd8, - 0x18, 0x1c, - 0x18, 0x18, - 0x30, 0x18, - 0x30, 0x20, - 0x60, 0xc0, - 0x80, 0xc0, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 7 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xfc, 0x03, - 0xff, 0x01, - 0x00, 0xff, - 0x00, 0xff, - 0x00, 0xff, - 0x00, 0xfe, - 0x03, 0xfc, - 0xff, 0x0c, - 0xfc, 0x08, - 0x06, 0xfc, - 0x03, 0xfc, - 0x01, 0xfe, - 0x80, 0x7e, - 0xc0, 0x7f, - 0x60, 0x3f, - 0x18, 0x37, - 0x0d, 0x12, - 0xc7, 0x23, - 0xff, 0x7e, - 0x00, 0xf6, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x01, 0x80, - 0x01, 0x82, - 0x02, 0x81, - 0x02, 0x80, - 0x80, 0x02, - 0x80, 0x01, - 0x03, 0xc1, - 0x47, 0x87, - 0x07, 0x4f, - 0xef, 0x37, - 0x9f, 0x6f, - 0xff, 0x07, - 0x1f, 0x6f, - 0x07, 0x0f, - 0x03, 0x01, - 0x01, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x80, 0x00, - 0xc0, 0x20, - 0x60, 0xb0, - 0x18, 0xb0, - 0x0c, 0xf2, - 0x06, 0xf3, - 0x03, 0xf9, - 0x80, 0x79, - 0xc0, 0xbe, - 0x60, 0xdf, - 0x30, 0x6f, - 0x18, 0x37, - 0x0c, 0x1b, - 0x07, 0x06, - 0x03, 0x01, - 0x00, 0x01, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x01, 0x03, - 0x03, 0x03, - 0x06, 0x03, - 0x06, 0x06, - 0x06, 0x06, - 0x06, 0x07, - 0x07, 0x03, - 0x03, 0x01, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x88, 0x00, - 0xcc, 0x86, - 0x87, 0x87, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 8 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x01, - 0x07, 0x03, - 0x0e, 0x19, - 0x18, 0x07, - 0x30, 0x0f, - 0x20, 0x5f, - 0x60, 0x1f, - 0x30, 0x0f, - 0x18, 0x17, - 0x0c, 0x13, - 0x06, 0x01, - 0x03, 0x00, - 0x01, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x04, - 0x0f, 0x06, - 0xfc, 0xff, - 0x0c, 0xf6, - 0x0c, 0xf6, - 0x0c, 0xf6, - 0x0c, 0xfc, - 0x0c, 0xfc, - 0x0c, 0x7c, - 0x6c, 0xbc, - 0xfc, 0x28, - 0xfc, 0x18, - 0xf8, 0x0c, - 0x68, 0x98, - 0xe8, 0x13, - 0x0b, 0xf0, - 0x0f, 0xf8, - 0x0f, 0xfe, - 0x09, 0xf0, - 0x08, 0xf0, - 0x08, 0xf8, - 0x08, 0xf8, - 0x0c, 0xf8, - 0x84, 0xfe, - 0xc6, 0x3b, - 0x63, 0x3c, - 0x30, 0x0f, - 0x18, 0x07, - 0x0c, 0x03, - 0x06, 0x0d, - 0x06, 0x03, - 0x03, 0x01, - 0x01, 0x03, - 0x00, 0x01, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xf0, 0xf0, - 0x18, 0x98, - 0x0c, 0x18, - 0x0c, 0x0c, - 0x0c, 0x0c, - 0x0c, 0x0c, - 0x0c, 0x1c, - 0x0c, 0x1c, - 0x1c, 0x08, - 0x18, 0x1c, - 0x18, 0x18, - 0x18, 0x30, - 0x30, 0x30, - 0x61, 0x31, - 0xc1, 0xe1, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 9 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xf8, 0xe4, - 0xfe, 0xcd, - 0xff, 0xe8, - 0xf8, 0xd7, - 0xfb, 0xc4, - 0xfb, 0xc4, - 0xf8, 0x9f, - 0xf8, 0xcf, - 0xf8, 0xef, - 0xff, 0xe9, - 0xff, 0x58, - 0xfd, 0xfe, - 0xff, 0xf0, - 0xff, 0xb8, - 0xfd, 0x73, - 0xbe, 0x79, - 0xfc, 0x1f, - 0xfe, 0x1d, - 0xfe, 0x3f, - 0xfe, 0x7f, - 0xff, 0xfe, - 0xf9, 0x1e, - 0xf9, 0x12, - 0xf1, 0x60, - 0xc0, 0xe0, - 0x00, 0x80, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x01, - 0x03, 0x01, - 0x03, 0x06, - 0x06, 0x06, - 0x06, 0x06, - 0x0e, 0x06, - 0x0e, 0x0c, - 0x0c, 0x0e, - 0x0c, 0x0c, - 0x0c, 0x0c, - 0x0c, 0x0c, - 0x0c, 0x0c, - 0x0c, 0x0c, - 0x06, 0x0c, - 0x03, 0x07, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 10 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x01, 0x07, - 0xff, 0x0f, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xf7, - 0xff, 0x8f, - 0xff, 0x1f, - 0xff, 0x3f, - 0xff, 0x7e, - 0xff, 0x3c, - 0xff, 0x39, - 0xff, 0x21, - 0xff, 0xc9, - 0xff, 0xf2, - 0xff, 0x80, - 0xff, 0xa0, - 0xff, 0xc0, - 0xff, 0x80, - 0xf9, 0xc6, - 0xff, 0x78, - 0xff, 0x60, - 0xff, 0xee, - 0xff, 0xfc, - 0xff, 0xff, - 0xff, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xf0, 0x60, - 0xf0, 0x30, - 0x30, 0x30, - 0x30, 0x30, - 0x30, 0x70, - 0x60, 0x70, - 0x60, 0x60, - 0xc0, 0x40, - 0x80, 0x80, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 11 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x01, 0x00, - 0xe7, 0xdb, - 0xff, 0xff, - 0xff, 0xf7, - 0xff, 0xff, - 0xff, 0x2f, - 0xff, 0x3e, - 0xff, 0xfc, - 0xff, 0xf8, - 0xff, 0xf3, - 0xff, 0xf7, - 0xff, 0x3f, - 0xff, 0x1f, - 0xff, 0x1b, - 0xff, 0x3b, - 0xff, 0x3b, - 0xff, 0x3f, - 0xff, 0x7f, - 0xff, 0x04, - 0xf6, 0x0d, - 0xff, 0x03, - 0xff, 0x7f, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xe0, - 0xc0, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x0c, 0x1c, - 0xbd, 0x8d, - 0x8e, 0x8e, - 0x8c, 0x9c, - 0x9c, 0x88, - 0x98, 0x98, - 0x18, 0x98, - 0x18, 0x18, - 0x19, 0x18, - 0x1f, 0x3e, - 0x30, 0x10, - 0x30, 0x30, - 0x30, 0x30, - 0x30, 0x30, - 0x30, 0x60, - 0x60, 0x30, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 12 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x01, 0xf2, - 0xff, 0xff, - 0xff, 0xfc, - 0xff, 0xf8, - 0xff, 0xc0, - 0xff, 0x00, - 0xff, 0x1f, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xfe, - 0xff, 0xf8, - 0xff, 0x80, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x80, - 0xff, 0xe0, - 0xff, 0x80, - 0xff, 0x00, - 0xff, 0x3f, - 0xff, 0x78, - 0xff, 0xe1, - 0xff, 0x36, - 0xfc, 0xe2, - 0x80, 0x40, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x1f, 0x0f, - 0x33, 0x31, - 0x61, 0x61, - 0x61, 0xe1, - 0xc1, 0xe1, - 0xc1, 0xc1, - 0xc3, 0xc1, - 0xc3, 0xc3, - 0xe6, 0x62, - 0x7c, 0x78, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 13 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x0f, - 0x0f, 0x1f, - 0xff, 0xf0, - 0xff, 0xff, - 0xff, 0x1f, - 0xff, 0xe0, - 0xff, 0xe0, - 0xff, 0xe3, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xfc, - 0xff, 0xf8, - 0xff, 0xe0, - 0xff, 0x81, - 0xff, 0x03, - 0xff, 0xdb, - 0xff, 0xe0, - 0xfe, 0x01, - 0xff, 0x00, - 0xff, 0x3f, - 0xff, 0xfc, - 0xff, 0xe0, - 0xff, 0x07, - 0xfe, 0x38, - 0xf0, 0xe8, - 0xc0, 0x80, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x7c, 0x3c, - 0xce, 0xc6, - 0x86, 0x86, - 0x86, 0x86, - 0x06, 0x86, - 0x06, 0x06, - 0x0c, 0x06, - 0x0c, 0x0c, - 0x98, 0x88, - 0xf0, 0xe0, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 14 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xc7, 0x39, - 0xff, 0x7f, - 0xff, 0x78, - 0xff, 0x78, - 0xff, 0xc0, - 0xff, 0x81, - 0xff, 0x83, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0x7f, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xe7, - 0xff, 0x9f, - 0xff, 0x7f, - 0xff, 0xfc, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x0b, - 0xff, 0x3d, - 0xff, 0xf8, - 0xff, 0xd8, - 0xff, 0x00, - 0xff, 0xff, - 0xff, 0xfe, - 0xf8, 0xfc, - 0xf0, 0xe0, - 0xc0, 0x80, - 0x00, 0x80, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xf0, 0xf0, - 0x38, 0x18, - 0x18, 0x18, - 0x18, 0x18, - 0x18, 0x18, - 0x30, 0x30, - 0x60, 0xf0, - 0xe1, 0xc1, - 0x71, 0x3b, - 0x1b, 0x3b, - 0x1b, 0x1b, - 0x1b, 0x1b, - 0x33, 0x3b, - 0x63, 0x71, - 0xc1, 0xc1, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 15 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xe0, 0x90, - 0xff, 0xff, - 0xdf, 0xe0, - 0xf1, 0x8e, - 0xf5, 0x8a, - 0xe1, 0x9e, - 0xeb, 0x94, - 0xfb, 0x04, - 0xff, 0x01, - 0xff, 0x03, - 0xff, 0x23, - 0xff, 0xb3, - 0xff, 0xa0, - 0xff, 0x80, - 0xff, 0x80, - 0xff, 0x81, - 0xff, 0xd0, - 0xff, 0xf3, - 0xff, 0xff, - 0xff, 0xfe, - 0xff, 0xf1, - 0xff, 0xc0, - 0xff, 0xc0, - 0xff, 0xc0, - 0xe7, 0x18, - 0xff, 0x03, - 0xff, 0x0f, - 0x7f, 0xbe, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xfb, - 0xff, 0xff, - 0xfe, 0xf6, - 0xfc, 0xfc, - 0xfc, 0xe8, - 0xf8, 0x90, - 0xf0, 0xb8, - 0xe0, 0x70, - 0xe0, 0x40, - 0xc0, 0x80, - 0x80, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x1f, 0x0f, - 0x06, 0x06, - 0x06, 0x06, - 0x06, 0x0e, - 0x0e, 0x04, - 0x0c, 0x06, - 0x0c, 0x0c, - 0x0f, 0x0f, - 0x0c, 0x0c, - 0x0c, 0x1c, - 0x1c, 0x08, - 0x18, 0x1c, - 0x18, 0x18, - 0x18, 0x18, - 0x3f, 0x3f, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 16 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xc0, 0x00, - 0xc0, 0xe0, - 0xe0, 0xc0, - 0xf0, 0x30, - 0xf8, 0x50, - 0xb8, 0x7c, - 0xfc, 0xf8, - 0xfc, 0xe8, - 0xfc, 0xcc, - 0xfc, 0x8c, - 0xfe, 0xf1, - 0xf3, 0xff, - 0xf3, 0xed, - 0xc3, 0xbd, - 0xcf, 0xf3, - 0xcf, 0xf3, - 0xc7, 0xff, - 0xcf, 0xf7, - 0xef, 0xdf, - 0xff, 0xf9, - 0xff, 0xff, - 0xff, 0x7f, - 0x3f, 0x1f, - 0x3f, 0x1f, - 0x1f, 0x3f, - 0x1f, 0x1f, - 0x1f, 0x1f, - 0x1f, 0x1f, - 0x1f, 0x0f, - 0x1f, 0x0f, - 0x1f, 0x0f, - 0x1f, 0x0f, - 0x7f, 0xbf, - 0xff, 0xff, - 0xf7, 0x89, - 0xfd, 0xe2, - 0xff, 0xf0, - 0xff, 0xf8, - 0xfe, 0x7d, - 0xff, 0x3e, - 0xff, 0x65, - 0xff, 0x7f, - 0x3f, 0xdf, - 0x7f, 0xbf, - 0xff, 0x3f, - 0xff, 0x7e, - 0xff, 0xfd, - 0xff, 0xfd, - 0xff, 0xff, - 0xff, 0xff, - 0x7f, 0x7e, - 0x3f, 0x3e, - 0x1f, 0x1d, - 0x0f, 0x07, - 0x02, 0x01, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 17 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x07, 0x08, - 0x1f, 0x0d, - 0x1f, 0x3f, - 0x3f, 0x1f, - 0x3f, 0x1f, - 0x3f, 0x3f, - 0x3f, 0x3f, - 0x3f, 0x1f, - 0x3f, 0x1f, - 0x3f, 0x1f, - 0x1f, 0x1f, - 0x1f, 0x1f, - 0x1f, 0x0f, - 0x0f, 0x1f, - 0x0f, 0x0f, - 0x0f, 0x0f, - 0x0f, 0x0f, - 0x0f, 0x0f, - 0x0f, 0x0f, - 0x0f, 0x0d, - 0x0f, 0x07, - 0x03, 0x04, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x0f, 0x17, - 0xbf, 0x5f, - 0xff, 0x7f, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xfe, - 0x7f, 0xb0, - 0xff, 0x71, - 0xff, 0x6e, - 0xfc, 0x73, - 0xc0, 0x80, - 0x01, 0x80, - 0x01, 0x03, - 0x07, 0x02, - 0x07, 0x03, - 0x01, 0x03, - 0x00, 0x01, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 18 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x80, - 0xe0, 0x80, - 0xf0, 0xf8, - 0xf8, 0x3c, - 0xfc, 0x7c, - 0xfc, 0x7c, - 0xfc, 0x7e, - 0xff, 0x7e, - 0xfd, 0xfa, - 0xfc, 0xfb, - 0xfc, 0xfb, - 0xf8, 0xff, - 0xf8, 0xf7, - 0xf8, 0xf7, - 0xf8, 0xff, - 0xfc, 0xfb, - 0xfc, 0xff, - 0xff, 0xff, - 0xff, 0x7f, - 0x7e, 0x01, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 19 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x07, 0x08, - 0x1f, 0x1f, - 0x3f, 0x1f, - 0x3f, 0x3f, - 0x3f, 0x3f, - 0x3f, 0x3f, - 0x3f, 0x3e, - 0x3f, 0x3e, - 0x3f, 0x1e, - 0x1f, 0x1f, - 0x1f, 0x0f, - 0x0f, 0x0f, - 0x07, 0x0f, - 0x07, 0x03, - 0x03, 0x03, - 0x01, 0x03, - 0x01, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 -}; -#else -const unsigned char b_w = 1; -const unsigned char b_h = 8; -const char b_data[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -#endif diff --git a/boop/display/drawDigit.c b/boop/display/drawDigit.c deleted file mode 100644 index ff9f521..0000000 --- a/boop/display/drawDigit.c +++ /dev/null @@ -1,127 +0,0 @@ -/********************************************************************** -@file drawDigit.c - -@brief Draw a scalable 7-segment digit - ------------------------------------------------------------------------ -@author 2010 Roman Steiger - LeoTheLoewe [at] gmx [dot] de ------------------------------------------------------------------------ -Following compile flags are usable: - - ------------------------------------------------------------------------ - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . ------------------------------------------------------------------------ -@History - -1.00 10012010 RSt Creation - -@end -***********************************************************************/ -#include "global.h" -#include "lcd.h" -#include "drawDigit.h" - - -// |<- w ->| -// | | -// |d|1| w1|1|d| -// ___ ______ -// _ |_a_| _ _2_ ^ -// | | | | | -// d | | f h1 -// |_| ___ |_| ___ h -// _ |_b_| _ 1 -// | | | | -// e | | g | -// |_| ___ |_| v -// |_c_| _2____ -// - -#define DIGIT_SEG_A _BV (0) -#define DIGIT_SEG_B _BV (1) -#define DIGIT_SEG_C _BV (2) -#define DIGIT_SEG_D _BV (3) -#define DIGIT_SEG_E _BV (4) -#define DIGIT_SEG_F _BV (5) -#define DIGIT_SEG_G _BV (6) -#define DIGIT_SEG_H _BV (7) - -const unsigned char digitSegPattern [] = -{ -/* 0 */ DIGIT_SEG_A | DIGIT_SEG_C | DIGIT_SEG_D | DIGIT_SEG_E | DIGIT_SEG_F | DIGIT_SEG_G, -/* 1 */ DIGIT_SEG_F | DIGIT_SEG_G, -/* 2 */ DIGIT_SEG_A | DIGIT_SEG_B | DIGIT_SEG_C | DIGIT_SEG_E | DIGIT_SEG_F , -/* 3 */ DIGIT_SEG_A | DIGIT_SEG_B | DIGIT_SEG_C | DIGIT_SEG_F | DIGIT_SEG_G, -/* 4 */ DIGIT_SEG_B | DIGIT_SEG_D | DIGIT_SEG_F | DIGIT_SEG_G, -/* 5 */ DIGIT_SEG_A | DIGIT_SEG_B | DIGIT_SEG_C | DIGIT_SEG_D | DIGIT_SEG_G, -/* 6 */ DIGIT_SEG_A | DIGIT_SEG_B | DIGIT_SEG_C | DIGIT_SEG_D | DIGIT_SEG_E | DIGIT_SEG_G, -/* 7 */ DIGIT_SEG_A | DIGIT_SEG_F | DIGIT_SEG_G, -/* 8 */ DIGIT_SEG_A | DIGIT_SEG_B | DIGIT_SEG_C | DIGIT_SEG_D | DIGIT_SEG_E | DIGIT_SEG_F | DIGIT_SEG_G, -/* 9 */ DIGIT_SEG_A | DIGIT_SEG_B | DIGIT_SEG_C | DIGIT_SEG_D | DIGIT_SEG_F | DIGIT_SEG_G -}; -//----------------------------------------------------------------------------- - - - -//----------------------------------------------------------------------------- -void drawDigit (unsigned char x, unsigned char y, - unsigned char w, unsigned char h, - unsigned char digit, unsigned char d, unsigned char c, unsigned char m) -{ - char w1 = w - 2*d - 2; - char h1 = (h - 5) / 2; - unsigned char i, mode, pattern; - - pattern = 0; - if (digit <= 9) - pattern = digitSegPattern [digit]; - - w1 = max (w1, 3); - h1 = max (h1, 3); - if (!d) - d = DIGIT_BAR_WIDTH; - - for (i = 0; i < 3; i++) - { - mode = DRAW_ERASE; - if (pattern & _BV (i+0)) - mode = m; - draw_block (x + d+1, y + i*(h1+1), - w1, d, - c, mode); - } - for (i = 0; i < 2; i++) - { - mode = DRAW_ERASE; - if (pattern & _BV (i+3)) - mode = m; - draw_block (x, y + d-1 + i*(h1+1), - d, h1, - c, mode); - } - for (i = 0; i < 2; i++) - { - mode = DRAW_ERASE; - if (pattern & _BV (i+5)) - mode = m; - draw_block (x + d + 1 + w1 + 1, y + d-1 + i*(h1+1), - d, h1, - c, mode); - } -} // drawDigit -//----------------------------------------------------------------------------- - - diff --git a/boop/display/drawDigit.h b/boop/display/drawDigit.h deleted file mode 100644 index 5bd96e0..0000000 --- a/boop/display/drawDigit.h +++ /dev/null @@ -1,68 +0,0 @@ -/********************************************************************** -@file drawDigit.h - -@brief Draw a scalable 7-segment digit - ------------------------------------------------------------------------ -@author 2010 Roman Steiger - LeoTheLoewe [at] gmx [dot] de ------------------------------------------------------------------------ -Following compile flags are usable: - - ------------------------------------------------------------------------ - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . ------------------------------------------------------------------------ -@History - -1.00 10012010 RSt Creation - -@end -***********************************************************************/ -#ifndef __DRAW_DIGIT_H__ -#define __DRAW_DIGIT_H__ - -#include "global.h" -#include "lcd.h" - -#ifndef DIGIT_BAR_WIDTH -#define DIGIT_BAR_WIDTH 3 -#endif - -// |<- w ->| -// | | -// |d|1| w1|1|d| -// ___ ______ -// _ |_a_| _ _2_ ^ -// | | | | | -// d | | f h1 -// |_| ___ |_| ___ h -// _ |_b_| _ 1 -// | | | | -// e | | g | -// |_| ___ |_| v -// |_c_| _2____ -// - -//----------------------------------------------------------------------------- -void drawDigit (unsigned char x, unsigned char y, - unsigned char w, unsigned char h, - unsigned char digit, unsigned char d, unsigned char c, unsigned char m); -//----------------------------------------------------------------------------- - - -#endif // #ifndef __DRAW_DIGIT_H__ - - - diff --git a/boop/display/drawIcon.c b/boop/display/drawIcon.c deleted file mode 100644 index 4467bdb..0000000 --- a/boop/display/drawIcon.c +++ /dev/null @@ -1,363 +0,0 @@ -/********************************************************************** -@file drawIcon.c - -@brief Draw Black/White and Gray scale icons with or without - Alpha channel (Transparency) - ------------------------------------------------------------------------ -@author 2010 Roman Steiger - LeoTheLoewe [at] gmx [dot] de ------------------------------------------------------------------------ -Following compile flags are usable: - - ------------------------------------------------------------------------ - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . ------------------------------------------------------------------------ -@History - -1.00 20012010 RSt Creation - -@end -***********************************************************************/ -#include "global.h" -#include "lcd.h" -#include "icon.h" - - -//----------------------------------------------------------------------------- -// Internally used functions - -static void _drawGray (unsigned char x, unsigned char y, - const unsigned char const *pData, - unsigned char width, unsigned char height, iconInfo_t iconInfo, - unsigned char m); - -static void _drawBlackWhite (unsigned char x, unsigned char y, - const unsigned char const *pData, - unsigned char width, unsigned char height, iconInfo_t iconInfo, - unsigned char c, unsigned char m); -//----------------------------------------------------------------------------- - - - -//----------------------------------------------------------------------------- -void drawIcon (unsigned char x, unsigned char y, - const icon_t const *pIcon, unsigned char c, unsigned char m) -{ - if (!pIcon) - return; - - drawIconExt (x, y, pIcon->data, - pIcon->width, pIcon->height, pIcon->info, - c, m); -} // drawIcon -//----------------------------------------------------------------------------- - - - -//----------------------------------------------------------------------------- -void drawIconExt (unsigned char x, unsigned char y, - const unsigned char const *pData, - unsigned char width, unsigned char height, iconInfo_t iconInfo, - unsigned char c, unsigned char m) -{ - switch (iconInfo) - { - case ICON_BLACK_WHITE_TRANSPARENT: /// 2 bpp - case ICON_BLACK_WHITE: /// 1 bpp - _drawBlackWhite (x, y, pData, - width, height, iconInfo, - c, m); - break; - - case ICON_GRAY_TRANSPARENT: /// 3 bpp - case ICON_GRAY: /// 2 bpp - _drawGray (x, y, pData, - width, height, iconInfo, - m); - break; - - default: - if (x + width > LCD_SIZE_X) - width = LCD_SIZE_X - x; - - if (y + height > LCD_SIZE_Y) - height = LCD_SIZE_Y - y; - - draw_rect (x, y, - width, height, - 1, LCD_COLOR_B, DRAW_XOR); - - break; - } // switch (iconInfo) -} // drawIconExt -//----------------------------------------------------------------------------- - - - -//----------------------------------------------------------------------------- -static void _drawGray (unsigned char x, unsigned char y, - const unsigned char const *pData, - unsigned char width, unsigned char height, iconInfo_t iconInfo, - unsigned char m) -{ - unsigned char alphaBuf [LCD_SIZE_X]; - unsigned short ix; - unsigned short iy; - unsigned char iconWidth = width; - unsigned char bpp; - unsigned char* alphaBuf_p; - - if(iconInfo==ICON_GRAY_TRANSPARENT) - { - alphaBuf_p = alphaBuf; - bpp=3; - } - else - { - alphaBuf_p = NULL; - bpp=2; - } - - - if (x + width > LCD_SIZE_X) - width = LCD_SIZE_X - x; - - if (y + height > LCD_SIZE_Y) - height = LCD_SIZE_Y - y; - - unsigned short idx = (width * bpp); // 3 byte per pixel - unsigned char s = y & 0x07; - is_drawing++; - if (s) - { - for (ix = 0; ix < width; ix++) - { - alphaBuf [ix] = 0; - drawbuf [1][ix] = 0; - drawbuf [0][ix] = 0; - } // for (ix = 0; ix < width; ix++) - - for (iy = 0; iy < height; iy += 8) - { - // Need to process two icon lines for one drawbuf line - if (iy) - { - for (ix = 0; ix < width; ix++) - { - idx -= bpp; - alphaBuf [ix] = pData [idx+2] >> (8-s); - drawbuf [1][ix] = pData [idx+1] >> (8-s); - drawbuf [0][ix] = pData [idx] >> (8-s); - } // for (ix = 0; ix < width; ix++) - - // go back to end of this page - idx += (width * bpp); // 3bpp - // goto next page - idx += (iconWidth * bpp); // 3bpp - } - for (ix = 0; ix < width; ix++) - { - idx -= bpp; - alphaBuf [ix] |= pData [idx+2] << s; - drawbuf [1][ix] |= pData [idx+1] << s; - drawbuf [0][ix] |= pData [idx] << s; - } - do_rcuAlpha (x, y+iy, width, m, alphaBuf_p); - - // go back to end of this page - idx += (width * bpp); // 3bpp - } // for (iy = 0; iy < height; iy += 8) - - /* Pixel in the last page: height & 0x07 - (i.e. 13 hight => 5 pixel in last page) */ - if (((height & 0x07) == 0) || - ((height & 0x07) > (8 - s))) - { - for (ix = 0; ix < width; ix++) - { - idx -= bpp; - alphaBuf [ix] = pData [idx+2] >> (8-s); - drawbuf [1][ix] = pData [idx+1] >> (8-s); - drawbuf [0][ix] = pData [idx] >> (8-s); - } // for (ix = 0; ix < width; ix++) - do_rcuAlpha (x, y+iy, width, m, alphaBuf_p); - - } - } - else - { - for (iy = 0; iy < height; iy += 8) - { - for (ix = 0; ix < width; ix++) - { - idx -= bpp; - alphaBuf [ix] = pData [idx+2]; - drawbuf [1][ix] = pData [idx+1]; - drawbuf [0][ix] = pData [idx]; - } - do_rcuAlpha (x, y+iy, width, m, alphaBuf_p); - - // go back to end of this page - idx += (width * bpp); // 3bpp - // goto next page - idx += (iconWidth * bpp); // 3bpp - } // for (iy = 0; iy < height; iy += 8) - } // else if (s) - is_drawing--; -} // _drawGrayAlpha -//----------------------------------------------------------------------------- - - -//----------------------------------------------------------------------------- -static void _drawBlackWhite (unsigned char x, unsigned char y, - const unsigned char const *pData, - unsigned char width, unsigned char height, iconInfo_t iconInfo, - unsigned char c, unsigned char m) -{ - unsigned char alphaBuf [LCD_SIZE_X]; - unsigned short ix; - unsigned short iy; - unsigned char iconWidth = width; - unsigned char bpp; - unsigned char* alphaBuf_p; - - if(iconInfo==ICON_BLACK_WHITE_TRANSPARENT) - { - alphaBuf_p = alphaBuf; - bpp=2; - } - else - { - alphaBuf_p = NULL; - bpp=1; - } - - if (x + width > LCD_SIZE_X) - width = LCD_SIZE_X - x; - - if (y + height > LCD_SIZE_Y) - height = LCD_SIZE_Y - y; - - unsigned short idx = width * bpp; // 1 byte per pixel - unsigned char s = y & 0x07; - is_drawing++; - if (s) - { - for (ix = 0; ix < width; ix++) - { - alphaBuf [ix] = 0; - drawbuf [1][ix] = 0; - drawbuf [0][ix] = 0; - } // for (ix = 0; ix < width; ix++) - - for (iy = 0; iy < height; iy += 8) - { - // Need to process two icon lines for one drawbuf line - if (iy) - { - for (ix = 0; ix < width; ix++) - { - idx -= bpp; - alphaBuf [ix] = pData [idx+1] >> (8-s); - if (c & 0x02) - drawbuf [0][ix] = pData [idx] >> (8-s); - else - drawbuf [0][ix] = 0; - - if (c & 0x01) - drawbuf [1][ix] = pData [idx] >> (8-s); - else - drawbuf [1][ix] = 0; - } // for (ix = 0; ix < width; ix++) - do_rcuAlpha (x, y+iy, width, m, alphaBuf_p); - - // go back to end of this page - idx += width * bpp; // 1bpp - // goto next page - idx += iconWidth * bpp; // 1bpp - } - for (ix = 0; ix < width; ix++) - { - idx -=bpp; - alphaBuf [ix] = pData [idx+1] << s; - if (c & 0x02) - drawbuf [0][ix] |= pData [idx] << s; - - if (c & 0x01) - drawbuf [1][ix] |= pData [idx] << s; - } - do_rcuAlpha (x, y+iy, width, m, alphaBuf_p); - - // go back to end of this page - idx += width * bpp; // 1bpp - } // for (iy = 0; iy < height; iy += 8) - - /* Pixel in the last page: height & 0x07 - (i.e. 13 hight => 5 pixel in last page) */ - if (((height & 0x07) == 0) || - ((height & 0x07) > (8 - s))) - { - for (ix = 0; ix < width; ix++) - { - idx -= bpp; - alphaBuf [ix] = pData [idx+1] >> (8-s); - if (c & 0x02) - drawbuf [0][ix] = pData [idx] >> (8-s); - else - drawbuf [0][ix] = 0; - - if (c & 0x01) - drawbuf [1][ix] = pData [idx] >> (8-s); - else - drawbuf [1][ix] = 0; - } // for (ix = 0; ix < width; ix++) - - do_rcuAlpha (x, y+iy, width, m, alphaBuf_p); - } - } - else - { - for (iy = 0; iy < height; iy += 8) - { - for (ix = 0; ix < width; ix++) - { - idx -= bpp; - alphaBuf [ix] = pData [idx+1]; - if (c & 0x02) - drawbuf [0][ix] = pData [idx]; - else - drawbuf [0][ix] = 0; - - if (c & 0x01) - drawbuf [1][ix] = pData [idx]; - else - drawbuf [1][ix] = 0; - } - do_rcuAlpha (x, y+iy, width, m, alphaBuf); - - // go back to end of this page - idx += width * bpp; // 1bpp - // goto next page - idx += iconWidth * bpp; // 1bpp - } // for (iy = 0; iy < height; iy += 8) - } // else if (s) - is_drawing--; -} // _drawBlackWhiteAlpha -//----------------------------------------------------------------------------- - - - - diff --git a/boop/display/icon.h b/boop/display/icon.h deleted file mode 100644 index 02e3da6..0000000 --- a/boop/display/icon.h +++ /dev/null @@ -1,113 +0,0 @@ -/********************************************************************** -@file icon.c - -@brief Definition of icon structure and appropriate functions - ------------------------------------------------------------------------ -@author 2010 Roman Steiger - LeoTheLoewe [at] gmx [dot] de ------------------------------------------------------------------------ -Following compile flags are usable: - - ------------------------------------------------------------------------ - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . ------------------------------------------------------------------------ -@History - -1.00 20012010 RSt Creation - -@end -***********************************************************************/ -#ifndef __ICON_H__ -#define __ICON_H__ - - -/////////////////////////////////////////////////////////////////// -// ICON can be defined in the appropriate C file before -// including that header or the related icon files to define the -// actual type of the icon structure: -// -// >> #define ICON iconElement_t -// -/////////////////////////////////////////////////////////////////// -#ifndef ICON -#define ICON icon_t -#endif - -/////////////////////////////////////////////////////////////////// -// ICON_INFO can be defined in the appropriate C file before -// including that header to save one byte in the icon structure: -// -// >> #define ICON_INFO(i) -// -/////////////////////////////////////////////////////////////////// -#ifndef ICON_INFO -#define ICON_INFO(i) /* info = */ i, -#define ICON_INFO_ELEMENT unsigned char info; // additional one byte (iconType_t might be larger) -#endif - -#ifndef ICON_INFO_ELEMENT -#define ICON_INFO_ELEMENT -//#define ICON_IS_GRAY(i) 0 -#define ICON_IS_GRAY(i) (sizeof(i.data) > (i.height/8 + (i.height%8 ? 1 : 0)) * i.width + 2); -#else -#define ICON_IS_GRAY(i) ((i)->info >= ICON_GRAY) -#endif - -typedef enum iconInfo_e -{ - ICON_BLACK_WHITE, /// 1 bpp - ICON_BLACK_WHITE_TRANSPARENT, /// 2 bpp - ICON_GRAY, /// 2 bpp - ICON_GRAY_TRANSPARENT, /// 3 bpp - - ICON_MAX -} iconInfo_t; - -typedef struct icon_s -{ - unsigned char width; - unsigned char height; - ICON_INFO_ELEMENT - unsigned char data []; -} icon_t, *icon_p; - -typedef struct iconElement_s -{ - unsigned char width; - unsigned char height; - unsigned char data []; -} iconElement_t, *iconElement_p; - -#ifdef __cplusplus -extern "C" { -#endif -//----------------------------------------------------------------------------- - -extern void drawIcon (unsigned char x, unsigned char y, - const icon_t const *pIcon, - unsigned char c, unsigned char m); - -extern void drawIconExt (unsigned char x, unsigned char y, - const unsigned char const *pData, - unsigned char width, unsigned char height, iconInfo_t iconInfo, - unsigned char c, unsigned char m); - -//----------------------------------------------------------------------------- -#ifdef __cplusplus -} -#endif - -#endif // #ifndef __ICON_H__ diff --git a/boop/display/iconHourglas.h b/boop/display/iconHourglas.h deleted file mode 100644 index 6e99e15..0000000 --- a/boop/display/iconHourglas.h +++ /dev/null @@ -1,173 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: R:\Project\GrayScaler\Icons\Hourglas.bmp -// -// ICON_GRAY - 2 bpp (Bit per Pixel) -// sizeof (iconHourglas.data) == 280 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconHourglas = -{ - /* width = */ 28, - /* height = */ 40, - /* info = */ ICON_INFO (ICON_GRAY) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - 0x0e, 0x11, - 0x3f, 0x1e, - 0x7f, 0x3a, - 0xff, 0x6a, - 0xff, 0xca, - 0xff, 0xca, - 0x3f, 0x0a, - 0x3b, 0x0e, - 0x3b, 0x0e, - 0x3b, 0x0e, - 0x3b, 0x0e, - 0x3b, 0x0e, - 0x3b, 0x0e, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0xff, 0xca, - 0xff, 0xca, - 0xff, 0x6a, - 0x7f, 0x3a, - 0x3f, 0x1e, - 0x0e, 0x11, - //--- Page 1 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0xff, - 0xff, 0xff, - 0xff, 0x0f, - 0xfe, 0xfd, - 0x70, 0xb8, - 0xe0, 0x70, - 0xc0, 0xa0, - 0x80, 0x50, - 0x30, 0x80, - 0xf0, 0x00, - 0xf0, 0x00, - 0xf0, 0x00, - 0xf0, 0x08, - 0x70, 0x88, - 0xb0, 0xc8, - 0xd8, 0x64, - 0x78, 0xe4, - 0x36, 0xf8, - 0xfe, 0xfd, - 0xff, 0x0f, - 0xff, 0xff, - 0x00, 0xff, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 2 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0xff, - 0xff, 0xff, - 0xff, 0x00, - 0xff, 0xff, - 0x00, 0xff, - 0x80, 0x80, - 0xc1, 0xc0, - 0x61, 0xb3, - 0x3f, 0x12, - 0x1c, 0x0f, - 0x07, 0x00, - 0x1d, 0x0e, - 0x3f, 0x12, - 0x63, 0xb5, - 0xc1, 0xe2, - 0x80, 0xc1, - 0x00, 0x00, - 0x00, 0xff, - 0xff, 0xff, - 0xff, 0x00, - 0xff, 0xff, - 0x00, 0xff, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 3 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0xff, - 0xff, 0xff, - 0xff, 0xfc, - 0xff, 0x0f, - 0x07, 0x0b, - 0x81, 0x03, - 0xc0, 0x01, - 0xc0, 0x20, - 0xe0, 0x10, - 0xf0, 0x00, - 0xf8, 0x00, - 0xf0, 0x00, - 0xe0, 0x10, - 0xc0, 0x20, - 0xc0, 0x01, - 0x81, 0x03, - 0x03, 0x87, - 0x0e, 0x17, - 0xff, 0x1f, - 0xff, 0xf8, - 0xff, 0xff, - 0x00, 0xff, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 4 --- - 0x70, 0x88, - 0xfc, 0x78, - 0xfe, 0x7c, - 0xff, 0x76, - 0xff, 0x77, - 0xff, 0x77, - 0xff, 0x74, - 0xfe, 0x75, - 0xff, 0x74, - 0xff, 0x74, - 0xf7, 0x7c, - 0xf7, 0x7c, - 0xf7, 0x7c, - 0xf7, 0x7c, - 0xf7, 0x7c, - 0xff, 0x74, - 0xff, 0x74, - 0xff, 0x74, - 0xff, 0x74, - 0xff, 0x74, - 0xfe, 0x75, - 0xff, 0x74, - 0xff, 0x77, - 0xff, 0x77, - 0xff, 0x76, - 0xfe, 0x7c, - 0xfc, 0x78, - 0x70, 0x88 - } -}; - - diff --git a/boop/display/iconHourglas2.h b/boop/display/iconHourglas2.h deleted file mode 100644 index 2ed6f1a..0000000 --- a/boop/display/iconHourglas2.h +++ /dev/null @@ -1,173 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: L:\Betty\Sourcecode\SVN\Betty_sourceforge\boop\trunk\display\Hourglas_2bpp.bmp -// -// ICON_BLACK_WHITE - 1 bpp (Bit per Pixel) -// sizeof (iconHourglas2.data) == 140 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconHourglas2 = -{ - /* width = */ 28, - /* height = */ 40, - /* info = */ ICON_INFO (ICON_BLACK_WHITE) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - 0x0e, - 0x3f, - 0x7f, - 0xff, - 0xff, - 0xff, - 0x3f, - 0x3b, - 0x3b, - 0x3b, - 0x3b, - 0x3b, - 0x3b, - 0x3f, - 0x3f, - 0x3f, - 0x3f, - 0x3f, - 0x3f, - 0x3f, - 0x3f, - 0x3f, - 0xff, - 0xff, - 0xff, - 0x7f, - 0x3f, - 0x0e, - //--- Page 1 --- - 0x00, - 0x00, - 0x00, - 0x00, - 0xff, - 0xff, - 0xfe, - 0x70, - 0xe0, - 0xc0, - 0x80, - 0x30, - 0xf0, - 0xf0, - 0xf0, - 0xf0, - 0x70, - 0xb0, - 0xd8, - 0x78, - 0x36, - 0xfe, - 0xff, - 0xff, - 0x00, - 0x00, - 0x00, - 0x00, - //--- Page 2 --- - 0x00, - 0x00, - 0x00, - 0x00, - 0xff, - 0xff, - 0xff, - 0x00, - 0x80, - 0xc1, - 0x61, - 0x3f, - 0x1c, - 0x07, - 0x1d, - 0x3f, - 0x63, - 0xc1, - 0x80, - 0x00, - 0x00, - 0xff, - 0xff, - 0xff, - 0x00, - 0x00, - 0x00, - 0x00, - //--- Page 3 --- - 0x00, - 0x00, - 0x00, - 0x00, - 0xff, - 0xff, - 0xff, - 0x07, - 0x81, - 0xc0, - 0xc0, - 0xe0, - 0xf0, - 0xf8, - 0xf0, - 0xe0, - 0xc0, - 0xc0, - 0x81, - 0x03, - 0x0e, - 0xff, - 0xff, - 0xff, - 0x00, - 0x00, - 0x00, - 0x00, - //--- Page 4 --- - 0x70, - 0xfc, - 0xfe, - 0xff, - 0xff, - 0xff, - 0xff, - 0xfe, - 0xff, - 0xff, - 0xf7, - 0xf7, - 0xf7, - 0xf7, - 0xf7, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xfe, - 0xff, - 0xff, - 0xff, - 0xff, - 0xfe, - 0xfc, - 0x70 - } -}; - - diff --git a/boop/display/iconHourglas2_t.h b/boop/display/iconHourglas2_t.h deleted file mode 100644 index 75a97ea..0000000 --- a/boop/display/iconHourglas2_t.h +++ /dev/null @@ -1,178 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: L:\Betty\Sourcecode\SVN\Betty_sourceforge\boop\trunk\display\Hourglas_t_3bpp_t.bmp -// -// ICON_BLACK_WHITE_TRANSPARENT - 2 bpp (Bit per Pixel) -// sizeof (iconHourglas2_t.data) == 280 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconHourglas2_t = -{ - /* width = */ 28, - /* height = */ 40, - /* info = */ ICON_INFO (ICON_BLACK_WHITE_TRANSPARENT) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - // v--- Alpha Channel - 0x1f, 0x1f, - 0x3f, 0x3f, - 0x7f, 0x7f, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0x3f, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0x7f, 0x7f, - 0x3f, 0x3f, - 0x1f, 0x1f, - //--- Page 1 --- - // v--- Alpha Channel - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xf8, 0xff, - 0xf0, 0xff, - 0xe0, 0xff, - 0xd0, 0xff, - 0xb0, 0xff, - 0xf0, 0xff, - 0xf0, 0xff, - 0xf0, 0xff, - 0xf8, 0xff, - 0xf8, 0xff, - 0xf8, 0xff, - 0xfc, 0xff, - 0xfc, 0xff, - 0xfe, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 2 --- - // v--- Alpha Channel - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0x80, 0x80, - 0xc1, 0xc1, - 0xf3, 0xf3, - 0x3f, 0xff, - 0x1f, 0xff, - 0x07, 0xff, - 0x1f, 0xff, - 0x3f, 0xff, - 0xf7, 0xf7, - 0xe3, 0xe3, - 0xc1, 0xc1, - 0x00, 0x00, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 3 --- - // v--- Alpha Channel - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0x0f, 0xff, - 0x83, 0xff, - 0xc1, 0xff, - 0xe0, 0xff, - 0xf0, 0xff, - 0xf0, 0xff, - 0xf8, 0xff, - 0xf0, 0xff, - 0xf0, 0xff, - 0xe0, 0xff, - 0xc1, 0xff, - 0x83, 0xff, - 0x87, 0xff, - 0x1f, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 4 --- - // v--- Alpha Channel - 0xf8, 0xf8, - 0xfc, 0xfc, - 0xfe, 0xfe, - 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, - 0xfe, 0xfe, - 0xfc, 0xfc, - 0xf8, 0xf8 - } -}; - - diff --git a/boop/display/iconHourglas_t.h b/boop/display/iconHourglas_t.h deleted file mode 100644 index d46a555..0000000 --- a/boop/display/iconHourglas_t.h +++ /dev/null @@ -1,178 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: R:\Project\GrayScaler\Icons\Hourglas_t.bmp -// -// ICON_GRAY_TRANSPARENT - 3 bpp (Bit per Pixel) -// sizeof (iconHourglas_t.data) == 420 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconHourglas_t = -{ - /* width = */ 28, - /* height = */ 40, - /* info = */ ICON_INFO (ICON_GRAY_TRANSPARENT) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - // v--- Alpha Channel - 0x0e, 0x11, 0x1f, - 0x3f, 0x1e, 0x3f, - 0x7f, 0x3a, 0x7f, - 0xff, 0x6a, 0xff, - 0xff, 0xca, 0xff, - 0xff, 0xca, 0xff, - 0x3f, 0x0a, 0xff, - 0x3b, 0x0e, 0xff, - 0x3b, 0x0e, 0xff, - 0x3b, 0x0e, 0xff, - 0x3b, 0x0e, 0xff, - 0x3b, 0x0e, 0xff, - 0x3b, 0x0e, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0xff, 0xca, 0xff, - 0xff, 0xca, 0xff, - 0xff, 0x6a, 0xff, - 0x7f, 0x3a, 0x7f, - 0x3f, 0x1e, 0x3f, - 0x0e, 0x11, 0x1f, - //--- Page 1 --- - // v--- Alpha Channel - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0x0f, 0xff, - 0xfe, 0xfd, 0xff, - 0x70, 0xb8, 0xff, - 0xe0, 0x70, 0xff, - 0xc0, 0xa0, 0xff, - 0x80, 0x50, 0xff, - 0x30, 0x80, 0xff, - 0xf0, 0x00, 0xff, - 0xf0, 0x00, 0xff, - 0xf0, 0x00, 0xff, - 0xf0, 0x08, 0xff, - 0x70, 0x88, 0xff, - 0xb0, 0xc8, 0xff, - 0xd8, 0x64, 0xff, - 0x78, 0xe4, 0xff, - 0x36, 0xf8, 0xff, - 0xfe, 0xfd, 0xff, - 0xff, 0x0f, 0xff, - 0xff, 0xff, 0xff, - 0x00, 0xff, 0xff, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - //--- Page 2 --- - // v--- Alpha Channel - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0xff, 0xff, - 0x00, 0xff, 0xff, - 0x80, 0x80, 0x80, - 0xc1, 0xc0, 0xc1, - 0x61, 0xb3, 0xf3, - 0x3f, 0x12, 0xff, - 0x1c, 0x0f, 0xff, - 0x07, 0x00, 0xff, - 0x1d, 0x0e, 0xff, - 0x3f, 0x12, 0xff, - 0x63, 0xb5, 0xf7, - 0xc1, 0xe2, 0xe3, - 0x80, 0xc1, 0xc1, - 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0xff, 0xff, - 0x00, 0xff, 0xff, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - //--- Page 3 --- - // v--- Alpha Channel - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xfc, 0xff, - 0xff, 0x0f, 0xff, - 0x07, 0x0b, 0xff, - 0x81, 0x03, 0xff, - 0xc0, 0x01, 0xff, - 0xc0, 0x20, 0xff, - 0xe0, 0x10, 0xff, - 0xf0, 0x00, 0xff, - 0xf8, 0x00, 0xff, - 0xf0, 0x00, 0xff, - 0xe0, 0x10, 0xff, - 0xc0, 0x20, 0xff, - 0xc0, 0x01, 0xff, - 0x81, 0x03, 0xff, - 0x03, 0x87, 0xff, - 0x0e, 0x17, 0xff, - 0xff, 0x1f, 0xff, - 0xff, 0xf8, 0xff, - 0xff, 0xff, 0xff, - 0x00, 0xff, 0xff, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - //--- Page 4 --- - // v--- Alpha Channel - 0x70, 0x88, 0xf8, - 0xfc, 0x78, 0xfc, - 0xfe, 0x7c, 0xfe, - 0xff, 0x76, 0xff, - 0xff, 0x77, 0xff, - 0xff, 0x77, 0xff, - 0xff, 0x74, 0xff, - 0xfe, 0x75, 0xff, - 0xff, 0x74, 0xff, - 0xff, 0x74, 0xff, - 0xf7, 0x7c, 0xff, - 0xf7, 0x7c, 0xff, - 0xf7, 0x7c, 0xff, - 0xf7, 0x7c, 0xff, - 0xf7, 0x7c, 0xff, - 0xff, 0x74, 0xff, - 0xff, 0x74, 0xff, - 0xff, 0x74, 0xff, - 0xff, 0x74, 0xff, - 0xff, 0x74, 0xff, - 0xfe, 0x75, 0xff, - 0xff, 0x74, 0xff, - 0xff, 0x77, 0xff, - 0xff, 0x77, 0xff, - 0xff, 0x76, 0xff, - 0xfe, 0x7c, 0xfe, - 0xfc, 0x78, 0xfc, - 0x70, 0x88, 0xf8 - } -}; - - diff --git a/boop/display/lcd.c b/boop/display/lcd.c deleted file mode 100644 index c186d44..0000000 --- a/boop/display/lcd.c +++ /dev/null @@ -1,1241 +0,0 @@ -/* - lcd.c - lcd control & graphics primitives - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "global.h" -#include "lpc2220.h" -#include "lcd.h" -#include "fonty.h" -#include "boop_logo" -#include "adc.h" -#include "timerfuncs.h" - -unsigned int is_drawing; -volatile unsigned char symbols; -volatile unsigned char oldsymbols; - -void _do_rcu(unsigned char x, unsigned char y, unsigned char l, unsigned char m); -void _do_rcuAlpha (unsigned char x, unsigned char y, unsigned char l, unsigned char m, - unsigned char* alphaBuf); -void _do_rcuS(unsigned char x, unsigned char y, unsigned char m); -void _draw_block(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char c, unsigned char m); -void _draw_hline(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m); -void _draw_vline(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m); - -// Function pointer to section (".text.fastcode") -rcu_fn do_rcu; - -rcuAlpha_fn do_rcuAlpha; - -rcus_fn do_rcuS; -bl_fn draw_block; -ln_fn draw_hline; -ln_fn draw_vline; - - -void pause(unsigned int ptime) -{ - unsigned long xx; - xx = ptime * 1500; - while(xx) - { - xx--; - }; -} - - -void lcd_set(unsigned char s) -{ - is_drawing++; - if(s == 0) - { - LCD_CMD = 0xA0; // set segment remap (00H mapped to seg0) - LCD_CMD = 0xC8; // set com output scan direction (remapped mode) - } - else - { - LCD_CMD = 0xA1; // set segment remap (7FH mapped to seg0) - LCD_CMD = 0xC0; // set com output scan direction (normal mode) - } - is_drawing--; -} - - -// initialise LCD controller SSD1854 -// -// sequence and values disassembled from original firmware -// see http://bettyhacks.com/wiki/index.php/Betty_init -void lcd_init(unsigned char s) -{ - is_drawing = 1; - LCD_CMD = LCD_WAKEUP; // exit power save mode - LCD_CMD = LCD_RESET; // software reset - pause(0x32); - LCD_CMD = LCD_OSC_START; // start internal oscillator - LCD_CMD = LCD_IRRR_8; // set internal regulator resistor ratio (8.1) - LCD_CMD = 0x81; // volume cmd - LCD_CMD = LCD_CONTRAST; // volume cmd value original 0x3F - LCD_CMD = LCD_DCDCx4; // set DC-DC converter factor (4x) - - LCD_CMD = 0x60; // set upper window corner ax cmd - LCD_CMD = 0x1C; // set upper window corner ax value - LCD_CMD = 0x61; // set upper window corner ay cmd - LCD_CMD = 0x0A; // set upper window corner ay value - LCD_CMD = 0x62; // set lower window corner bx cmd - LCD_CMD = 0x75; // set lower window corner bx value - LCD_CMD = 0x63; // set lower window corner by cmd - LCD_CMD = 0x81; // set lower window corner by value - LCD_CMD = 0x90; // set PWM and FRC (4-frames) - - LCD_CMD = 0x88; // set white mode frame 2nd and 1st cmd - LCD_CMD = LCD_GRAYMODE_88; // set white mode frame 2nd and 1st value - LCD_CMD = 0x89; // set white mode frame 4th and 3rd cmd - LCD_CMD = LCD_GRAYMODE_89; // set white mode frame 4th and 3rd value - LCD_CMD = 0x8A; // set light gray mode frame 2nd and 1st cmd - LCD_CMD = LCD_GRAYMODE_8A; // set light gray mode frame 2nd and 1st value // originally 33 - LCD_CMD = 0x8B; // set light gray mode frame 4th and 3rd cmd - LCD_CMD = LCD_GRAYMODE_8B; // set light gray mode frame 4th and 3rd value // originally 33 - LCD_CMD = 0x8C; // set dark gray mode frame 2nd and 1st cmd - LCD_CMD = LCD_GRAYMODE_8C; // set dark gray mode frame 2nd and 1st value // originally 66 - LCD_CMD = 0x8D; // set dark gray mode frame 4th and 3rd cmd - LCD_CMD = LCD_GRAYMODE_8D; // set dark gray mode frame 4th and 3rd vakue // originally 66 - LCD_CMD = 0x8E; // set black mode frame 2nd and 1st cmd - LCD_CMD = LCD_GRAYMODE_8E; // set black mode frame 2nd and 1st value // originally 99 - LCD_CMD = 0x8F; // set black mode frame 4th and 3rd cmd - LCD_CMD = LCD_GRAYMODE_8F; // set black mode frame 4th and 3rd value // originally 99 - - LCD_CMD = LCD_DCDCx5; // set DC-DC converter factor (5x) - - lcd_set(s); - - //~ LCD_CMD = 0x2E; // set power control register (boost on, reg on, buffer off) // original - - //~ pause(0x32); // original - - LCD_CMD = 0x2F; // set power control register (boost on, reg on, buffer on) - LCD_CMD = LCD_ALLON; // all black - LCD_CMD = LCD_NORMAL; // set normal display mode, inverse = 0xA7 - - // Function pointer to section (".text.fastcode") - do_rcu = _do_rcu; - do_rcuAlpha = _do_rcuAlpha; - do_rcuS = _do_rcuS; - draw_block = _draw_block; - draw_hline = _draw_hline; - draw_vline = _draw_vline; - - lcd_fill (LCD_COLOR_W); // blank display - - LCD_CMD = LCD_ON; // turn display on - - set_font(SMALLFONT); - - is_drawing--; -} // lcd_init - - -void lcd_enable(unsigned char e) -{ - is_drawing++; - if(e) - LCD_CMD = LCD_ON; // set display on - else - LCD_CMD = LCD_OFF; // set display off - is_drawing--; -} - - -/// \brief set lcd contrast -/// -/// SSD1854 datasheet p.33 -/// Set Contrast Control Register [81] -/// This command adjusts the contrast of the LCD panel by changing VL7 of the LCD drive voltage -/// provided by the On-Chip power circuits. VL7 is set with 64 steps (6-bit) contrast control register. -/// Default value after software reset [E2]: 20H = 32 -void lcd_set_contrast(unsigned char c) -{ - if (c < 64) - { - is_drawing++; - LCD_CMD = 0x81; // volume cmd - LCD_CMD = c; // volume cmd value - is_drawing--; - } -} - - -// set all pixels -// show symbols TODO: those should not be here! -void lcd_fill(unsigned char f) -{ - unsigned char x,y; - - is_drawing++; - //~ - //~ if (f == 0xFF) - //~ { - //~ LCD_CMD = LCD_ALLOFF; - //~ } - //~ else if (f == 0) - //~ { - //~ LCD_CMD = LCD_ALLON; - //~ } - //~ else - //~ { - for(y=0;y<20;y++) - { - LCD_CMD = 0xB0; // Set Page Address - LCD_CMD = y; - LCD_CMD = 0x10; // Set Higher Column Address - LCD_CMD = 0x00; - for(x=0;x<128;x++) - { - LCD_DATA = f; // 4 pixels - LCD_DATA = f; // 4 pixels - } - } - //~ } - is_drawing--; - - showBat(0xff); - refresh_symbols(0xff); -} - -//----------------------------------------------------------------------------- -/** Draw pixel data from boop_logo. - (use bmp2b to generate from 24 bit BMP) - New tool display/GrayScaler.exe for WinXP/Win7 - generate icon files. The data array has the same - format and can be copied in the file boop_logo. - You can also use the new icons instead of the logo. -*/ -void draw_logo(void) -{ - unsigned short f; - unsigned char x,y; - is_drawing++; - f=0; - for(y=0; y>3; y++) - { - LCD_CMD = 0xB0; - LCD_CMD = y; - LCD_CMD = 0x10; - LCD_CMD = 0x00; - for(x=0;x BORDER_RIGHT))// || (x+l < BORDER_LEFT)) - return; - - if (x+l > BORDER_RIGHT + 1) { - unsigned char i; - unsigned char cut; - - cut = x + l - (BORDER_RIGHT + 1); - for(i=0;i> 3); - LCD_CMD = (0x10 + (x >> 4)); - LCD_CMD = (x & 0x0F); - - q = LCD_DATA; - q = l; - - while(q--) - { - rcubuf[0][q] = LCD_DATA; - rcubuf[1][q] = LCD_DATA; - } - - q = LCD_DATA; - } - - LCD_CMD = 0xB0; - LCD_CMD = (y >> 3); - LCD_CMD = (0x10 + (x >> 4)); - LCD_CMD = (x & 0x0F); - - if(alphaBuf) - { - q = l; - while(q--) - { - drawbuf[0][q] &= alphaBuf[q]; - drawbuf[1][q] &= alphaBuf[q]; - } - if(m==DRAW_ALPHA) - { - q = l; - while(q--) - { - rcubuf[0][q] &= ~alphaBuf[q]; - rcubuf[1][q] &= ~alphaBuf[q]; - } - } - } - - q = l; - - switch(m) - { - case DRAW_ALPHA: // draw with alpha buffer - case DRAW_PUT: // draw put - while(q--) - { - LCD_DATA = rcubuf[0][q] | drawbuf[0][q]; - LCD_DATA = rcubuf[1][q] | drawbuf[1][q]; - } - break; - case DRAW_XOR: // draw xor - while(q--) - { - LCD_DATA = rcubuf[0][q] ^ drawbuf[0][q]; - LCD_DATA = rcubuf[1][q] ^ drawbuf[1][q]; - } - break; - case DRAW_ERASE: // draw erase - while(q--) - { - LCD_DATA = rcubuf[0][q] & ~drawbuf[0][q]; - LCD_DATA = rcubuf[1][q] & ~drawbuf[1][q]; - } - break; - case DRAW_NORCU: // draw without rcu - while(q--) - { - LCD_DATA = drawbuf[0][q]; - LCD_DATA = drawbuf[1][q]; - } - break; - } - is_drawing--; -} // _do_rcu -//----------------------------------------------------------------------------- - - - -//----------------------------------------------------------------------------- -void __attribute__ ((section (".text.fastcode"))) _do_rcuS ( - unsigned char x, unsigned char y, unsigned char m) -{ - volatile unsigned char q=0; - - (void)(q); - - if((x > BORDER_RIGHT))// | (x < BORDER_LEFT)) - return; - - is_drawing++; - - if(m != DRAW_NORCU) - { - LCD_CMD = 0xB0; - LCD_CMD = (y >> 3); - LCD_CMD = (0x10 + (x >> 4)); - LCD_CMD = (x & 0x0F); - - q = LCD_DATA; - rcubuf[0][0] = LCD_DATA; - rcubuf[1][0] = LCD_DATA; - - q = LCD_DATA; - } - - LCD_CMD = 0xB0; - LCD_CMD = (y >> 3); - LCD_CMD = (0x10 + (x >> 4)); - LCD_CMD = (x & 0x0F); - - switch(m) - { - case DRAW_ALPHA: - case DRAW_PUT: // draw put - LCD_DATA = rcubuf[0][0] | drawbuf[0][0]; - LCD_DATA = rcubuf[1][0] | drawbuf[1][0]; - break; - case DRAW_XOR: // draw xor - LCD_DATA = rcubuf[0][0] ^ drawbuf[0][0]; - LCD_DATA = rcubuf[1][0] ^ drawbuf[1][0]; - break; - case DRAW_ERASE: // draw erase - LCD_DATA = rcubuf[0][0] & ~drawbuf[0][0]; - LCD_DATA = rcubuf[1][0] & ~drawbuf[1][0]; - break; - case DRAW_NORCU: // draw erase - LCD_DATA = drawbuf[0][0]; - LCD_DATA = drawbuf[1][0]; - break; - } - is_drawing--; -} // _do_rcuS -//----------------------------------------------------------------------------- - - - -//----------------------------------------------------------------------------- -void __attribute__ ((section(".text.fastcode"))) _draw_block(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char c, unsigned char m) -{ - unsigned char q,s; - unsigned char yy,vv,ww,xx; - unsigned char segm; - is_drawing++; - - if (x + w > LCD_SIZE_X) - w = LCD_SIZE_X - x; - - s = y; - - if(h) - { - yy = h; - vv = y & 0x07; - - ww = yy & 0x07; - - segm = 0xFF; - - xx = 8; - if(yy < 8) - { - segm >>= (8-ww); - xx -= (8-ww); - if(vv > (8-xx)) - { - xx = yy -(vv-(8-xx)); - } - else - { - xx = yy; - } - } - else - { - xx -= vv; - } - - segm <<= vv; - - q = w; - while(q--) - { - if(c & 0x02) - drawbuf[0][q] = segm; - else - drawbuf[0][q] = 0; - - if(c & 0x01) - drawbuf[1][q] = segm; - else - drawbuf[1][q] = 0; - } - do_rcu(x,s,w,m); - - yy -= xx; - - while(yy > 8) - { - s += 8; - yy -= 8; - q = w; - while(q--) - { - if(c & 0x02) - drawbuf[0][q] = 0xFF; - else - drawbuf[0][q] = 0; - - if(c & 0x01) - drawbuf[1][q] = 0xFF; - else - drawbuf[1][q] = 0; - } - do_rcu(x,s,w,m); - } - - if(yy) - { - s += 8; - q = w; - while(q--) - { - if(c & 0x02) - drawbuf[0][q] = 0xFF >> (8-yy); - else - drawbuf[0][q] = 0; - - if(c & 0x01) - drawbuf[1][q] = 0xFF >> (8-yy); - else - drawbuf[1][q] = 0; - } - do_rcu(x,s,w,m); - } - } - is_drawing--; -} - -void __attribute__ ((section(".text.fastcode"))) _draw_hline(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m) -{ - unsigned char p,q; - is_drawing++; - - q = l; - p = 0x01 << (y & 0x07); - - while(q--) - { - if(c & 0x02) - drawbuf[0][q] = p; - else - drawbuf[0][q] = 0; - - if(c & 0x01) - drawbuf[1][q] = p; - else - drawbuf[1][q] = 0; - } - do_rcu(x,y,l,m); - is_drawing--; -} - -void __attribute__ ((section(".text.fastcode"))) _draw_vline(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m) -{ - unsigned char s; - unsigned char yy,vv,ww,xx; - unsigned char segm; - is_drawing++; - - s = y; - - if(l) - { - - - - yy = l; - vv = y & 0x07; - - ww = yy & 0x07; - - segm = 0xFF; - - xx = 8; - if(yy < 8) - { - segm >>= (8-ww); - xx -= (8-ww); - if(vv > (8-xx)) - { - xx = yy -(vv-(8-xx)); - } - else - { - xx = yy; - } - } - else - { - xx -= vv; - } - - segm <<= vv; - - if(c & 0x02) - drawbuf[0][0] = segm; - else - drawbuf[0][0] = 0; - - if(c & 0x01) - drawbuf[1][0] = segm; - else - drawbuf[1][0] = 0; - - do_rcuS(x,s,m); - - yy -= xx; - - while(yy > 8) - { - s += 8; - yy -= 8; - if(c & 0x02) - drawbuf[0][0] = 0xFF; - else - drawbuf[0][0] = 0; - - if(c & 0x01) - drawbuf[1][0] = 0xFF; - else - drawbuf[1][0] = 0; - do_rcuS(x,s,m); - } - - if(yy) - { - s += 8; - if(c & 0x02) - drawbuf[0][0] = 0xFF >> (8-yy); - else - drawbuf[0][0] = 0; - - if(c & 0x01) - drawbuf[1][0] = 0xFF >> (8-yy); - else - drawbuf[1][0] = 0; - do_rcuS(x,s,m); - } - } - is_drawing--; -} - -void draw_rect(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char lw, unsigned char c, unsigned char m) -{ - is_drawing++; - if(lw) - { - if(lw == 1) - { - draw_hline(x, y, w, c, m); - draw_hline(x, y+h-1, w, c, m); - - draw_vline(x, y+1, h-2, c, m); - draw_vline(x+w-1, y+1, h-2, c, m); - } - else - { - draw_block(x, y, w, lw, c, m); - draw_block(x, y+h-lw, w, lw, c, m); - draw_block(x, y+lw, lw, h-(2*lw), c, m); - draw_block(x+w-lw, y+lw, lw, h-(2*lw), c, m); - } - } - is_drawing--; -} - -void draw_pixel(unsigned char x, unsigned char y, unsigned char c, unsigned char m) -{ - unsigned char p; - is_drawing++; - - p = 0x01 << (y & 0x07); - - if(c & 0x02) - drawbuf[0][0] = p; - else - drawbuf[0][0] = 0; - - if(c & 0x01) - drawbuf[1][0] = p; - else - drawbuf[1][0] = 0; - - do_rcuS(x,y,m); - is_drawing--; -} - -void draw_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char c, unsigned char m) -{ - unsigned char i,dx,dy,px,py; - unsigned int x,y; - is_drawing++; - - if (y2 > y1) // incl. POSITIVE - { - dx=x2-x1; - dy=y2-y1; - px=x1; - py=y1; - draw_pixel(x1, y1, c, m); // first pixel - if (dx>=dy) // incl. is more horizontal than vertical - { - y = y1; - for(i=0;i=dx) - { - y-=dx; - py+=1; - } - px+=1; - draw_pixel(px, py, c, m); - } - } - else // incl. is more vertical than horizontal - { - x = x1; - for(i=0;i=dy) - { - x-=dy; - px+=1; - } - py+=1; - draw_pixel(px, py, c, m); //?????? - } - }; - } - else if (y2 < y1) // incl. NEGATIVE - { - dx=x2-x1; - dy=y1-y2; // inverted to produce a positive value - dx=dx; - dy=dy; - px=x1; - py=y2; // Note: due to inverted "dy", - draw_pixel(x2, y2, c, m); // the first pixel became the last one - if (dx>=dy) // incl. is more horizontal than vertical - { - y = y1; - py=y1; - for(i=0;i=dx) - { - y-=dx; - py-=1; - } - px+=1; - draw_pixel(px, py, c, m); - } - } - else // incl. is more vertical than horizontal - { - x = x1; - px=x2; - for(i=0;i=dy) - { - x-=dy; - px-=1; - } - py+=1; - draw_pixel(px, py, c, m); - } - }; - } - is_drawing--; -} - -void draw_circle(unsigned char cx, unsigned char cy, unsigned char radius, unsigned char c, unsigned char m) -{ - signed int tswitch; - unsigned char y, x = 0; - unsigned char d; - is_drawing++; - - d = cy - cx; - y = radius; - tswitch = 3 - 2 * radius; - while (x <= y) - { - if(x != 0) - { - draw_pixel(cx + x, cy + y, c, m); - draw_pixel(cx + x, cy - y, c, m); - } - draw_pixel(cx - x, cy + y, c, m); - draw_pixel(cx - x, cy - y, c, m); - - if(x != y) - { - if(x != 0) - { - draw_pixel(cy + y - d, cy + x, c, m); - draw_pixel(cy - y - d, cy + x, c, m); - } - draw_pixel(cy + y - d, cy - x, c, m); - draw_pixel(cy - y - d, cy - x, c, m); - } - - if (tswitch < 0) - { - tswitch += (4 * x + 6); - } - else - { - tswitch += (4 * (x - y) + 10); - y--; - } - x++; - } - is_drawing--; -} - -void draw_qcircle(unsigned char cx, unsigned char cy, unsigned char radius, unsigned char quarter, unsigned char c, unsigned char m) -{ - signed int tswitch; - unsigned char y, x = 0; - unsigned char d; - is_drawing++; - - d = cy - cx; - y = radius; - tswitch = 3 - 2 * radius; - - switch(quarter) - { - case TOP_LEFT: - while (x <= y) - { - draw_pixel(cx - x, cy - y, c, m); - - if(x != y) - { - draw_pixel(cy - y - d, cy - x, c, m); - } - - if (tswitch < 0) - { - tswitch += (4 * x + 6); - } - else - { - tswitch += (4 * (x - y) + 10); - y--; - } - x++; - } - break; - - case TOP_RIGHT: - while (x <= y) - { - draw_pixel(cx + x, cy - y, c, m); - - if(x != y) - { - draw_pixel(cy + y - d, cy - x, c, m); - } - - if (tswitch < 0) - { - tswitch += (4 * x + 6); - } - else - { - tswitch += (4 * (x - y) + 10); - y--; - } - x++; - } - break; - - case BOTTOM_LEFT: - while (x <= y) - { - draw_pixel(cx - x, cy + y, c, m); - - if(x != y) - { - draw_pixel(cy - y - d, cy + x, c, m); - } - - if (tswitch < 0) - { - tswitch += (4 * x + 6); - } - else - { - tswitch += (4 * (x - y) + 10); - y--; - } - x++; - } - break; - - case BOTTOM_RIGHT: - while (x <= y) - { - draw_pixel(cx + x, cy + y, c, m); - - if(x != y) - { - draw_pixel(cy + y - d, cy + x, c, m); - } - - if (tswitch < 0) - { - tswitch += (4 * x + 6); - } - else - { - tswitch += (4 * (x - y) + 10); - y--; - } - x++; - } - break; - } - is_drawing--; -} - -void draw_disc(unsigned char cx, unsigned char cy, unsigned char radius, unsigned char c, unsigned char m) -{ - signed int tswitch; - unsigned char y, x = 0; - unsigned char d; - is_drawing++; - - d = cy - cx; - y = radius; - tswitch = 3 - 2 * radius; - while (x <= y) - { - if(x != y) - { - if(x != 0) - { - draw_hline(cy - y - d, cy + x, (y<<1)+1, c, m); - } - draw_hline(cy - y - d, cy - x, (y<<1)+1, c, m); - } - - if (tswitch < 0) - { - tswitch += (4 * x + 6); - } - else - { - draw_hline(cx-x, cy + y, (x<<1)+1, c, m); - draw_hline(cx-x, cy - y, (x<<1)+1, c, m); - tswitch += (4 * (x - y) + 10); - y--; - } - x++; - } - is_drawing--; -} - -void draw_qdisc(unsigned char cx, unsigned char cy, unsigned char radius, unsigned char quarter, unsigned char c, unsigned char m) -{ - signed int tswitch; - unsigned char y, x = 0; - unsigned char d; - is_drawing++; - - d = cy - cx; - y = radius; - tswitch = 3 - 2 * radius; - switch(quarter) - { - case TOP_LEFT: - while (x <= y) - { - if(x != y) - { - draw_hline(cy - y - d, cy - x, y+1, c, m); - } - - if (tswitch < 0) - { - tswitch += (4 * x + 6); - } - else - { - draw_hline(cx-x, cy - y, x+1, c, m); - tswitch += (4 * (x - y) + 10); - y--; - } - x++; - } - break; - - case TOP_RIGHT: - while (x <= y) - { - if(x != y) - { - draw_hline(cx, cy - x, y+1, c, m); - } - - if (tswitch < 0) - { - tswitch += (4 * x + 6); - } - else - { - draw_hline(cx, cy - y, x+1, c, m); - tswitch += (4 * (x - y) + 10); - y--; - } - x++; - } - break; - - case BOTTOM_LEFT: - while (x <= y) - { - if(x != y) - { - draw_hline(cy - y - d, cy + x, y+1, c, m); - } - - if (tswitch < 0) - { - tswitch += (4 * x + 6); - } - else - { - draw_hline(cx-x, cy + y, x+1, c, m); - tswitch += (4 * (x - y) + 10); - y--; - } - x++; - } - break; - - case BOTTOM_RIGHT: - while (x <= y) - { - if(x != y) - { - draw_hline(cx, cy + x, y+1, c, m); - } - - if (tswitch < 0) - { - tswitch += (4 * x + 6); - } - else - { - draw_hline(cx, cy + y, x+1, c, m); - tswitch += (4 * (x - y) + 10); - y--; - } - x++; - } - break; - } - is_drawing--; -} - - -unsigned char draw_arrow(int x, int y, unsigned char ArrowDir, int ArrowLen, unsigned char Color, unsigned char Mode) -{ - int i; - int Len; - is_drawing++; - - switch(ArrowDir) - { - case ARROW_UP: - for(i=0; i r) - { - draw_block(x, y+r+1, r+1, h-(r<<1)-2,c,m); - draw_block(x+r+1, y+t, t-r-1, h-(t<<1),c,m); - draw_block(x+w-r-1, y+r+1, r+1, h-(r<<1)-2,c,m); - draw_block(x+w-t, y+t, t-r-1, h-(t<<1),c,m); - } - else - { - if(r > t) - { - draw_qdisc(x+r, y+r, r-t, TOP_LEFT, c, DRAW_XOR); - draw_qdisc(x+w-r-1, y+r, r-t, TOP_RIGHT, c, DRAW_XOR); - draw_qdisc(x+r, y+h-r-1, r-t, BOTTOM_LEFT, c, DRAW_XOR); - draw_qdisc(x+w-r-1, y+h-r-1, r-t, BOTTOM_RIGHT, c, DRAW_XOR); - } - draw_block(x, y+r+1, t, h-(r<<1)-2,c,m); - draw_block(x+w-t, y+r+1, t, h-(r<<1)-2,c,m); - } - draw_block(x+r+1, y, w-(r<<1)-2, t, c, m); - draw_block(x+r+1, y+h-t, w-(r<<1)-2, t, c, m); - } - } - is_drawing--; -} - -void draw_symbol (unsigned char x, unsigned char y, unsigned char l, unsigned char* data, unsigned char c, unsigned char m) -{ - unsigned char p; - unsigned int cnt; - is_drawing++; - - - for(cnt=0;cnt - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef LCD_H -#define LCD_H - -// the lcd data & command ports -#define LCD_CMD (*((volatile unsigned char *) 0x81000000)) -#define LCD_DATA (*((volatile unsigned char *) 0x81000001)) - -// LCD commands -#define LCD_CONTRAST 0x3A // original 0x3F (0..63) - -#define LCD_GRAYMODE_88 0x00 // original 0x3F -#define LCD_GRAYMODE_89 0x00 // original 0x3F -#define LCD_GRAYMODE_8A 0x36 // original 0x33 -#define LCD_GRAYMODE_8B 0x63 // original 0x33 -#define LCD_GRAYMODE_8C 0x67 // original 0x66 -#define LCD_GRAYMODE_8D 0x76 // original 0x66 -#define LCD_GRAYMODE_8E 0xAC // original 0x99 -#define LCD_GRAYMODE_8F 0xCA // original 0x99 - -#define LCD_DCDCx3 0x64 // -#define LCD_DCDCx4 0x65 // -#define LCD_DCDCx5 0x66 // -//~ #define LCD_DCDCx? 0x67 // ? datasheet p. 33 - -#define LCD_IRRR_1 0x20 // -#define LCD_IRRR_2 0x21 // -#define LCD_IRRR_3 0x22 // -#define LCD_IRRR_4 0x23 // -#define LCD_IRRR_5 0x24 // -#define LCD_IRRR_6 0x25 // -#define LCD_IRRR_7 0x26 // -#define LCD_IRRR_8 0x27 // - -#define LCD_ALLON 0xA4 // black -#define LCD_ALLOFF 0xA5 // white -#define LCD_NORMAL 0xA6 // -#define LCD_REVERSE 0xA7 // - -#define LCD_SLEEP 0xA9 // enter Sleep Mode. internal oscillator and LCD powersupply off - -#define LCD_OSC_START 0xAB // - -#define LCD_OFF 0xAE // -#define LCD_ON 0xAF // - -#define LCD_WAKEUP 0xE1 // -#define LCD_RESET 0xE2 // - - -// drawmodes -#define DRAW_PUT 0 -#define DRAW_XOR 1 -#define DRAW_ERASE 2 -#define DRAW_ALPHA 3 -#define DRAW_NORCU 4 - -#define LCD_COLOR_W 0 -#define LCD_COLOR_LG 1 -#define LCD_COLOR_DG 2 -#define LCD_COLOR_B 3 - -#define LCD_SIZE_X 128 -#define LCD_SIZE_Y 160 - -#define ARROW_UP 1 -#define ARROW_DOWN 2 -#define ARROW_LEFT 3 -#define ARROW_RIGHT 4 -#define ARROW_LEN 4 - -#define TOP_LEFT 0 -#define TOP_RIGHT 1 -#define BOTTOM_LEFT 2 -#define BOTTOM_RIGHT 3 - -#define BORDER_LEFT 0 -#define BORDER_RIGHT 127 - -extern unsigned char drawbuf[2][LCD_SIZE_X]; -extern unsigned int is_drawing; - -extern volatile unsigned char symbols; -extern volatile unsigned char oldsymbols; -#define symbolRF (1<<0) -extern const unsigned char symIR[]; - -typedef void(*rcu_fn)(unsigned char x, unsigned char y, unsigned char l, unsigned char m); -typedef void (*rcuAlpha_fn) (unsigned char x, unsigned char y, unsigned char l, unsigned char m, - unsigned char* alphaBuf); -typedef void(*rcus_fn)(unsigned char x, unsigned char y, unsigned char m); -typedef void(*bl_fn)(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char c, unsigned char m); -typedef void(*ln_fn)(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m); - -// Function pointer to section (".text.fastcode") -extern rcu_fn do_rcu; -extern rcuAlpha_fn do_rcuAlpha; -extern rcus_fn do_rcuS; -extern bl_fn draw_block; -extern ln_fn draw_hline; -extern ln_fn draw_vline; - - -extern void lcd_set (unsigned char s); - -extern void lcd_init (unsigned char s); -extern void lcd_enable (unsigned char e); -//extern void do_rcu(unsigned char x, unsigned char y, unsigned char l, unsigned char m); -//extern void do_rcuAlpha (unsigned char x, unsigned char y, unsigned char l, unsigned char m, -// unsigned char* alphaBuf); -//extern void do_rcuS(unsigned char x, unsigned char y, unsigned char m); -extern void lcd_set_contrast(unsigned char c); - -extern void lcd_fill (unsigned char f); -extern void draw_logo (void); -//extern void draw_block (unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char c, unsigned char m); -//extern void draw_hline (unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m); -//extern void draw_vline (unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m); -extern void draw_rect (unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char lw, unsigned char c, unsigned char m); -extern void draw_pixel (unsigned char x, unsigned char y, unsigned char c, unsigned char m); -extern void draw_line (unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char c, unsigned char m); -extern void draw_circle (unsigned char cx, unsigned char cy, unsigned char radius, unsigned char c, unsigned char m); -extern void draw_qcircle (unsigned char cx, unsigned char cy, unsigned char radius, unsigned char quarter, unsigned char c, unsigned char m); -extern void draw_disc (unsigned char cx, unsigned char cy, unsigned char radius, unsigned char c, unsigned char m); -extern void draw_qdisc (unsigned char cx, unsigned char cy, unsigned char radius, unsigned char quarter, unsigned char c, unsigned char m); - -extern unsigned char draw_arrow (int x, int y, unsigned char ArrowDir, int ArrowLen, unsigned char Color, unsigned char Mode); - -extern void draw_frame(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char t, unsigned char r, unsigned char c, unsigned char m); -extern void draw_symbol(unsigned char x, unsigned char y, unsigned char l,unsigned char* data, unsigned char c, unsigned char m); -extern void refresh_symbols(unsigned int cb); -extern void redraw_symbols(void); - -extern void update_active_ind (void); - -#endif diff --git a/boop/externs.h b/boop/externs.h new file mode 100644 index 0000000..a203dfd --- /dev/null +++ b/boop/externs.h @@ -0,0 +1,7 @@ +#ifndef EXTERNS_H +#define EXTERNS_H + +extern unsigned int keys[2]; +extern unsigned char autorepeat; + +#endif diff --git a/boop/flash/flash.c b/boop/flash.c similarity index 86% rename from boop/flash/flash.c rename to boop/flash.c index 4b31794..234c59d 100644 --- a/boop/flash/flash.c +++ b/boop/flash.c @@ -172,24 +172,3 @@ done: return 0; } - -unsigned short getFlashID(void) { - - unsigned short manufactor = 0; - unsigned short device = 0; - - *((volatile unsigned short *) FLASH1_BASE + 0x555) = 0xAA; - *((volatile unsigned short *) FLASH1_BASE + 0x2AA) = 0x55; - *((volatile unsigned short *) FLASH1_BASE + 0x555) = 0x90; - manufactor = *((volatile unsigned short *) FLASH1_BASE + 0x100); - (*((volatile unsigned short *) FLASH1_BASE)) = 0xF0; - - *((volatile unsigned short *) FLASH1_BASE + 0x555) = 0xAA; - *((volatile unsigned short *) FLASH1_BASE + 0x2AA) = 0x55; - *((volatile unsigned short *) FLASH1_BASE + 0x555) = 0x90; - device = *((volatile unsigned short *) FLASH1_BASE + 0x01); - (*((volatile unsigned short *) FLASH1_BASE)) = 0xF0; - - return(((manufactor << 8) & 0xFF00) | (device & 0x00FF)); - -} diff --git a/boop/flash/flash.h b/boop/flash.h similarity index 94% rename from boop/flash/flash.h rename to boop/flash.h index ffffc81..9b14f65 100644 --- a/boop/flash/flash.h +++ b/boop/flash.h @@ -22,8 +22,6 @@ #define FLASH0_BASE 0x80000000 #define FLASH1_BASE 0x82000000 -const unsigned long secaddr[19]; - void prepareBulk(unsigned long dst); void endBulk(unsigned long dst); int eraseSector(unsigned char chip, unsigned char secnum); @@ -31,6 +29,5 @@ int eraseFlash(unsigned char chip); int writeWord(unsigned long addr, unsigned short data); int writeBulk(unsigned long src, unsigned long dst, unsigned long cnt); void lcd_set(unsigned char s); -unsigned short getFlashID(void); #endif diff --git a/boop/flash/Make.conf b/boop/flash/Make.conf deleted file mode 100644 index 9560103..0000000 --- a/boop/flash/Make.conf +++ /dev/null @@ -1 +0,0 @@ -THUMBSRCS := flash.c bfs.c diff --git a/boop/flash/bfs.c b/boop/flash/bfs.c deleted file mode 100644 index 8a9e5c7..0000000 --- a/boop/flash/bfs.c +++ /dev/null @@ -1,730 +0,0 @@ -/* - bfs.c - Betty File System - Copyright (C) 2007 Colibri - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "bfs.h" -#include "flash.h" -#include "lcd.h" -#include "fonty.h" -#include "global.h" - -extern const unsigned long secaddr[19]; - -//Public functions -unsigned char BFS_Mount() -{ - //Return true=ok - unsigned char BfsSector; - unsigned long Offset; - unsigned long FileHeaderAddress; - unsigned char RecordInfo; - unsigned long Id; - unsigned short Len; - unsigned long FileBodyAddress; - unsigned char IsFree; - unsigned char IsActive; - const unsigned long BfsVersion = BFS_VERSION; - - //Format - for(BfsSector=0; BfsSector BFS_SECTOR_HEADER_LEN) - { - //No free sector - //ASSERT(false); - return false;//Error - } - - return true;//OK -} - -unsigned short BFS_LoadFile(unsigned long Id, unsigned short MaxLen, unsigned char *Buffer) -{ - //Return: ReadLen - unsigned long FileHeaderAddress; - unsigned char RecordInfo; - unsigned long TempId; - unsigned short FileBodyLen; - unsigned long FileBodyAddress; - unsigned char IsFree; - unsigned char IsActive; - - if(!BFS_GetFileHeaderAddress(Id, &FileHeaderAddress)) - { - return 0;//File not found - } - BFS_GetFileHeaderInfo(FileHeaderAddress, &RecordInfo, &TempId, &FileBodyLen, &FileBodyAddress, &IsFree, &IsActive); - memcpy(Buffer, (unsigned char*)FileBodyAddress, min(FileBodyLen, MaxLen)); - - return min(FileBodyLen, MaxLen);//Error -} - -unsigned char BFS_CmpFile(unsigned long Id, unsigned short MaxLen, unsigned char *Buffer) -{ - //Return: ReadLen - unsigned long FileHeaderAddress; - unsigned char RecordInfo; - unsigned long TempId; - unsigned short FileBodyLen; - unsigned long FileBodyAddress; - unsigned char IsFree; - unsigned char IsActive; - int x; - - if(!BFS_GetFileHeaderAddress(Id, &FileHeaderAddress)) - { - return 0;//File not found - } - BFS_GetFileHeaderInfo(FileHeaderAddress, &RecordInfo, &TempId, &FileBodyLen, &FileBodyAddress, &IsFree, &IsActive); - x=memcmp(Buffer, (unsigned char*)FileBodyAddress, min(FileBodyLen, MaxLen)); - - if (x) - return 0;//not equal - return 1; -} - -void* BFS_LoadFileAddr(unsigned long Id) -{ - //Return: ReadLen - unsigned long FileHeaderAddress; - unsigned char RecordInfo; - unsigned long TempId; - unsigned short FileBodyLen; - unsigned long FileBodyAddress; - unsigned char IsFree; - unsigned char IsActive; - - if(!BFS_GetFileHeaderAddress(Id, &FileHeaderAddress)) - { - return 0;//File not found - } - BFS_GetFileHeaderInfo(FileHeaderAddress, &RecordInfo, &TempId, &FileBodyLen, &FileBodyAddress, &IsFree, &IsActive); - - return (void*)FileBodyAddress; - -} - -unsigned char BFS_SaveFile(unsigned long Id, unsigned short Len, unsigned char *Buffer) -{ - //Return true=OK - unsigned char BfsSector; - unsigned char RecordInfo; - int i; - unsigned long TempId; - unsigned short FileBodyLen; - unsigned long FileBodyAddress; - unsigned char IsFree; - unsigned char IsActive; - unsigned char OverridePossible; - unsigned char CreateNewFile; - unsigned char Byte; - unsigned long FileHeaderAddress; - unsigned char HeaderSize; - - CreateNewFile = false; - if(BFS_GetFileHeaderAddress(Id, &FileHeaderAddress)) - { - //File is already present - BFS_GetFileHeaderInfo(FileHeaderAddress, &RecordInfo, &TempId, &FileBodyLen, &FileBodyAddress, &IsFree, &IsActive); - //Same len? - OverridePossible = false; - if(Len == FileBodyLen) - { - //Is override possible (no change from 0 to 1)? - OverridePossible = true; - for(i=0; i1 error - OverridePossible = false; - } - } - } - if(OverridePossible) - { - if(writeBuffer(FileBodyAddress, Buffer, Len) != 0) - { - return false;//Error - } - } - else - { - //Delete existing file - Byte = (RecordInfo & 0x3F) | (BFS_TYPE_DELETED << 6); - writeBuffer(FileHeaderAddress, &Byte, 1); - glBfsDeletedBytes[BFS_ByteAddressToBfsSector(FileHeaderAddress)] += (FileBodyAddress - FileHeaderAddress) + FileBodyLen; - - CreateNewFile = true; - } - } - else - { - //File not present - CreateNewFile = true; - } - - while(CreateNewFile) - { - //Check free space - //Start with the fullest, ignore the last empty one - for(i=0; (i<(BFS_SECTORS-1)) && CreateNewFile; i++) - { - BfsSector = glBfsFillOrder[i]; - FileHeaderAddress = glBfsOffsetToFreeRecord[BfsSector]; - if((FileHeaderAddress + BFS_MAX_RECORD_HEADER_LEN + Len) < BFS_SECTOR_SIZE) - { - //Enough space free - BFS_WriteAtAddress(BFS_GetPhyByteAddrFromBfsSector(BfsSector) + FileHeaderAddress, Id, Len, Buffer, &HeaderSize); - - glBfsOffsetToFreeRecord[BfsSector] += HeaderSize + Len; - BFS_SortArray(); - - CreateNewFile = false; - } - } - - if(CreateNewFile) - { - //No space free - //copy only active files (not the files markes as deleted) to the empty sector and erase the source sector - if(!BFS_MakeSpace(Len)) - { - //Still not enough space free - return false;//Error - } - } - } - - return true;//OK -} - -unsigned char BFS_DeleteFile(unsigned long Id) -{ - //Return true=OK - //Return false=File not found/File was already deleted - - unsigned char RecordInfo; - unsigned long TempId; - unsigned short FileBodyLen; - unsigned long FileBodyAddress; - unsigned char IsFree; - unsigned char IsActive; - unsigned char Byte; - unsigned long FileHeaderAddress; - - if(BFS_GetFileHeaderAddress(Id, &FileHeaderAddress)) - { - //File is present - BFS_GetFileHeaderInfo(FileHeaderAddress, &RecordInfo, &TempId, &FileBodyLen, &FileBodyAddress, &IsFree, &IsActive); - - //Delete existing file - Byte = (RecordInfo & 0x3F) | (BFS_TYPE_DELETED << 6); - writeBuffer(FileHeaderAddress, &Byte, 1); - - glBfsDeletedBytes[BFS_ByteAddressToBfsSector(FileHeaderAddress)] += (FileBodyAddress - FileHeaderAddress) + FileBodyLen; - return true;//OK - } - - return false;//File not found/File was already deleted -} - -unsigned char BFS_DeleteAllFiles() -{ - //Return true=ok - unsigned char BfsSector; - unsigned long Offset; - const unsigned long BfsVersion = BFS_VERSION; - - //Format - for(BfsSector=0; BfsSector glBfsDeletedBytes[BfsSectorWithMostDelFiles]) - { - BfsSectorWithMostDelFiles = BfsSector; - } - } - if(glBfsDeletedBytes[BfsSectorWithMostDelFiles] == 0) - { - //No sector has files marked as deleted -> nothing to free - return false;//Not enough space free - } - - //Copy active files to the empty bfs sector - BfsSector = glBfsFillOrder[BFS_SECTORS - 1];//The empty destination sector - DstAddress = BFS_GetPhyByteAddrFromBfsSector(BfsSector) + BFS_SECTOR_HEADER_LEN; - - FileHeaderAddress = BFS_GetPhyByteAddrFromBfsSector(BfsSectorWithMostDelFiles) + BFS_SECTOR_HEADER_LEN;//Source - do - { - BFS_GetFileHeaderInfo(FileHeaderAddress, &RecordInfo, &Id, &FileBodyLen, &FileBodyAddress, &IsFree, &IsActive); - if(IsActive) - { - //Copy the active file to the destination sector - BFS_FlashToFlashCopy(DstAddress, FileHeaderAddress, (FileBodyAddress - FileHeaderAddress) + FileBodyLen); - DstAddress += (FileBodyAddress - FileHeaderAddress) + FileBodyLen; - - glBfsOffsetToFreeRecord[BfsSector] += (FileBodyAddress - FileHeaderAddress) + FileBodyLen; - } - FileHeaderAddress = FileBodyAddress + FileBodyLen; - }while(!IsFree); - - //Erase the source sector - if(eraseSector(BFS_CHIP, BFS_FIRST_SECTOR + BfsSectorWithMostDelFiles) != 0) - { - return false;//Error - } - //Write sector header - Offset = BFS_GetPhyByteAddrFromBfsSector(BfsSectorWithMostDelFiles); - writeBuffer(Offset, (unsigned char*)BFS_MAGIC, 4); - writeBuffer(Offset + 4, (unsigned char*)&BfsVersion, 4); - - glBfsDeletedBytes[BfsSectorWithMostDelFiles] = 0; - glBfsOffsetToFreeRecord[BfsSectorWithMostDelFiles] = BFS_SECTOR_HEADER_LEN; - - BFS_SortArray(); - }while(1); - - return false;//Not enough space free -} - -void BFS_SortArray() -{ - //Sort the glBfsFillOrder array - unsigned char RepeatSort; - unsigned char BfsSector; - unsigned char Byte; - - do - { - RepeatSort = false; - for(BfsSector=0; BfsSector<(BFS_SECTORS-1); BfsSector++) - { - if(glBfsOffsetToFreeRecord[glBfsFillOrder[BfsSector]] < glBfsOffsetToFreeRecord[glBfsFillOrder[BfsSector+1]]) - { - //Swap - Byte = glBfsFillOrder[BfsSector]; - glBfsFillOrder[BfsSector] = glBfsFillOrder[BfsSector+1]; - glBfsFillOrder[BfsSector+1] = Byte; - RepeatSort = true; - } - } - }while(RepeatSort); -} - -unsigned long BFS_GetPhyByteAddrFromBfsSector(unsigned char BfsSector) -{ - //BFS_FIRST_SECTOR + BfsSector = PhyFlashSector - - //ASSERT((BFS_FIRST_SECTOR + BfsSector) < FLASH_SECTORS); - - return BFS_FLASH_BASE + (secaddr[BfsSector + BFS_FIRST_SECTOR] * 2); -} - -unsigned char BFS_IsSectorFormated(unsigned char BfsSector) -{ - //Is the sector formated and is the version valid - - unsigned long Offset; - unsigned long Version; - - Offset = BFS_GetPhyByteAddrFromBfsSector(BfsSector); - - if(memcmp((unsigned char*)Offset, BFS_MAGIC, 4) != 0) - { - return false;//Magic not found -> not formated - } - - Version = *((unsigned long*) (Offset + 4)); - if(Version != BFS_VERSION) - { - return false;//Magic found but wrong version - } - - return true;//Formated -} - -void BFS_GetFileHeaderInfo(unsigned long FileHeaderAddress, unsigned char *pRecordInfo, unsigned long *pId, unsigned short *pLen, unsigned long *pFileBodyAddress, unsigned char *pIsFree, unsigned char *pIsActive) -{ - unsigned char State; - unsigned char IdByteCount; - unsigned char LenByteCount; - unsigned long Offset; - - Offset = FileHeaderAddress; - *pRecordInfo = readByte(Offset++); - State = ((*pRecordInfo) >> 6) & 0x03; - IdByteCount = 1 + (((*pRecordInfo) >> 1) & 0x03); - LenByteCount = 1 + ((*pRecordInfo) & 0x01); - - if(State == BFS_TYPE_FREE) - { - //Free - *pIsFree = true; - *pIsActive = false; - *pId = 0; - *pLen = 0; - *pFileBodyAddress = 0; - } - else - { - //Active or deleted - *pIsFree = false; - *pIsActive = (State == BFS_TYPE_ACTIVE) ? true : false; - - *pId = readByte(Offset++); - if(IdByteCount > 1) - { - *pId |= readByte(Offset++) << 8; - } - if(IdByteCount > 2) - { - *pId |= readByte(Offset++) << 16; - } - if(IdByteCount > 3) - { - *pId |= readByte(Offset++) << 24; - } - - *pLen = readByte(Offset++); - if(LenByteCount > 1) - { - *pLen |= readByte(Offset++) << 8; - } - - *pFileBodyAddress = Offset; - } -} - -unsigned char BFS_GetFileHeaderAddress(unsigned long Id, unsigned long *pFileHeaderAddress) -{ - //Return true = File is present, pFileHeaderAddress is valid - //Return false = File not found (e.g. deleted), pFileHeaderAddress is invalid - unsigned char BfsSector; - unsigned long PhyAddr; - unsigned char RecordInfo; - unsigned long TempId; - unsigned short FileBodyLen; - unsigned long FileBodyAddress; - unsigned char IsFree; - unsigned char IsActive; - - *pFileHeaderAddress = 0; - - for(BfsSector=0; BfsSector= ByteAddress) && (FileHeaderAddress < (ByteAddress + BFS_SECTOR_SIZE))) - { - return BfsSector; - } - } - - //ASSERT(false); - BfsSector = 0xFF;//Error - return BfsSector; -} - -unsigned char BFS_WriteAtAddress(unsigned long FileHeaderAddress, unsigned long Id, unsigned short Len, unsigned char *Buffer, unsigned char *pHeaderSize) -{ - //Return true=OK - unsigned char RecordHeaderPos; - unsigned char RecordInfo; - unsigned char RecordHeader[BFS_MAX_RECORD_HEADER_LEN]; - unsigned char IdByteCount; - unsigned char LenByteCount; - - //IdByteCount - if(Id & 0xFF000000) - { - IdByteCount = BFS_ID_4BYTES; - } - else - { - if(Id & 0xFF0000) - { - IdByteCount = BFS_ID_3BYTES; - } - else - { - if(Id & 0xFF00) - { - IdByteCount = BFS_ID_2BYTES; - } - else - { - IdByteCount = BFS_ID_1BYTE; - } - } - } - - //LenByteCount - LenByteCount = (Len < 0x100) ? BFS_ONE_LEN_BYTE : BFS_TWO_LEN_BYTES; - - //RecordInfo - RecordInfo = (BFS_TYPE_ACTIVE << 6) | (IdByteCount << 1) | LenByteCount; - RecordHeaderPos = 0; - RecordHeader[RecordHeaderPos++] = RecordInfo; - - //Id - RecordHeader[RecordHeaderPos++] = Id & 0xFF; - if(Id >= 0x100) - { - RecordHeader[RecordHeaderPos++] = (Id >> 8) & 0xFF; - if(Id >= 0x10000) - { - RecordHeader[RecordHeaderPos++] = (Id >> 16) & 0xFF; - if(Id >= 0x1000000) - { - RecordHeader[RecordHeaderPos++] = (Id >> 24) & 0xFF; - } - } - } - - //Len - RecordHeader[RecordHeaderPos++] = Len & 0xFF; - if(Len >= 0x100) - { - RecordHeader[RecordHeaderPos++] = (Len >> 8) & 0xFF; - } - - //Write record header - writeBuffer(FileHeaderAddress, RecordHeader, RecordHeaderPos); - //Write record data - writeBuffer(FileHeaderAddress + RecordHeaderPos, Buffer, Len); - - *pHeaderSize = RecordHeaderPos; - - return true;//OK -} - -unsigned char readByte(unsigned long ByteAddr) -{ - unsigned char Byte; - Byte = ((unsigned char*) ByteAddr)[0]; - - return Byte; -} - -unsigned short readWord(unsigned long WordAddr) -{ - //addr = unsigned short address - //int Offset; - unsigned short Word; - - //ASSERT((WordAddr * 2) >= FLASH1_BASE); - //ASSERT((WordAddr * 2) < (FLASH1_BASE + FLASH_SIZE)); - - //Offset = (WordAddr * 2) - FLASH1_BASE; - - Word = *((unsigned short *)(WordAddr<<1)); - - return Word; -} - - -int writeBuffer(unsigned long ByteAddr, unsigned char *buffer, unsigned short len) -{ - //Return 0=OK - int Offset; - unsigned short Word; - - Offset = 0; - - if(ByteAddr & 1) - { - //Not word boundary - Word = readWord(ByteAddr / 2); - Word &= (buffer[Offset] << 8) | 0xFF; - writeWord(ByteAddr & 0xFFFFFFFE, Word); - Offset++; - ByteAddr++; - len--; - } - - while(len >= 2) - { - Word = readWord(ByteAddr / 2); - Word &= buffer[Offset] | (buffer[Offset + 1] << 8); - writeWord(ByteAddr, Word); - Offset += 2; - ByteAddr += 2; - len -= 2; - } - - if(len == 1) - { - Word = readWord(ByteAddr / 2); - Word &= 0xFF00 | buffer[Offset]; - writeWord(ByteAddr, Word); - Offset++; - ByteAddr++; - len--; - } - - return 0;//OK -} - diff --git a/boop/flash/bfs.h b/boop/flash/bfs.h deleted file mode 100644 index ded16ba..0000000 --- a/boop/flash/bfs.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - bfs.h - Betty File System - Copyright (C) 2007 Colibri - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef BFS_H -#define BFS_H - -//Define here your file ids (range 1 - 0xFFFFFFFF) -#define BFS_ID_remotes 1 -#define BFS_ID_settings 2 -#define BFS_ID_RFsettings 3 -#define BFS_ID_RAWslot0 4 -#define BFS_ID_RAWslot1 5 -#define BFS_ID_RAWslot2 6 -#define BFS_ID_RAWslot3 7 - - -//Use last 3 64 KByte sectors (16..18) of the second chip for BFS -#define BFS_FIRST_SECTOR 16 -#define BFS_SECTORS 3 -#define BFS_SECTOR_SIZE 0x10000 - -#define BFS_SECTOR_HEADER_LEN 0x10 -#define BFS_MAGIC "BFS" -#define BFS_VERSION 1 -#define BFS_CHIP 1 - -#define BFS_TYPE_DELETED 0 -#define BFS_TYPE_ACTIVE 1 -#define BFS_TYPE_FREE 3 -#define BFS_ID_1BYTE 0 -#define BFS_ID_2BYTES 1 -#define BFS_ID_3BYTES 2 -#define BFS_ID_4BYTES 3 -#define BFS_ONE_LEN_BYTE 0 -#define BFS_TWO_LEN_BYTES 1 - -//Max. 1 info byte, 4 ID bytes, 2 length bytes -#define BFS_MAX_RECORD_HEADER_LEN (1+4+2) - -#define BFS_FLASH_BASE FLASH1_BASE - -unsigned long glBfsOffsetToFreeRecord[BFS_SECTORS];//Based on sector start -unsigned short glBfsDeletedBytes[BFS_SECTORS];//FileHeader + FileBody -unsigned char glBfsFillOrder[BFS_SECTORS];//[0]=Fullest - -//Public -unsigned char BFS_Mount();//Call this before calling other BFS functions -unsigned short BFS_LoadFile(unsigned long Id, unsigned short MaxLen, unsigned char *Buffer); -unsigned char BFS_CmpFile(unsigned long Id, unsigned short MaxLen, unsigned char *Buffer); -void* BFS_LoadFileAddr(unsigned long Id); -unsigned char BFS_SaveFile(unsigned long Id, unsigned short Len, unsigned char *Buffer); -unsigned char BFS_DeleteFile(unsigned long Id); -unsigned char BFS_DeleteAllFiles(); - -//Internal -unsigned char BFS_FlashToFlashCopy(unsigned long DstByteAddr, unsigned long SrcByteAddr, unsigned short ByteLen); -unsigned char BFS_MakeSpace(unsigned short RequiredFileBodySize); -void BFS_SortArray(); -unsigned long BFS_GetPhyByteAddrFromBfsSector(unsigned char BfsSector); -unsigned char BFS_IsSectorFormated(unsigned char BfsSector); -void BFS_GetFileHeaderInfo(unsigned long FileHeaderAddress, unsigned char *pRecordInfo, unsigned long *pId, unsigned short *pLen, unsigned long *pFileBodyAddress, unsigned char *pIsFree, unsigned char *pIsActive); -unsigned char BFS_GetFileHeaderAddress(unsigned long Id, unsigned long *pFileHeaderAddress); -unsigned char BFS_ByteAddressToBfsSector(unsigned long FileHeaderAddress); -unsigned char BFS_WriteAtAddress(unsigned long FileHeaderAddress, unsigned long Id, unsigned short Len, unsigned char *Buffer, unsigned char *pHeaderSize); - -unsigned char readByte(unsigned long ByteAddr); -unsigned short readWord(unsigned long WordAddr); - -int writeBuffer(unsigned long ByteAddr, unsigned char *buffer, unsigned short len); - -#endif diff --git a/boop/display/fonts/charset.bits b/boop/fonts/charset.bits similarity index 100% rename from boop/display/fonts/charset.bits rename to boop/fonts/charset.bits diff --git a/boop/display/fonts/charset.info b/boop/fonts/charset.info similarity index 100% rename from boop/display/fonts/charset.info rename to boop/fonts/charset.info diff --git a/boop/display/fonts/smooth.bits b/boop/fonts/smooth.bits similarity index 100% rename from boop/display/fonts/smooth.bits rename to boop/fonts/smooth.bits diff --git a/boop/display/fonts/smooth.info b/boop/fonts/smooth.info similarity index 100% rename from boop/display/fonts/smooth.info rename to boop/fonts/smooth.info diff --git a/boop/display/fonty.c b/boop/fonty.c similarity index 54% rename from boop/display/fonty.c rename to boop/fonty.c index 1700988..d2cca53 100644 --- a/boop/display/fonty.c +++ b/boop/fonty.c @@ -1,82 +1,64 @@ /* - fonty.c - drawing text & font handling - Copyright (C) 2007 Ch. Klippel + fonty.c - drawing text & font handling + Copyright (C) 2007 Ch. Klippel - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program. If not, see . + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ #include "lcd.h" #include "fonty.h" -#include "global.h" #include "fonts/charset.info" #include "fonts/charset.bits" - +/* #include "fonts/smooth.info" #include "fonts/smooth.bits" - -extern unsigned char drawbuf[2][128]; -extern unsigned int is_drawing; - +*/ static unsigned char tx, ty, coff, dbl; unsigned char *font_bits, *font_info, font_dlines; unsigned char *font_bitsUM, *font_bitsUL, *font_bitsMM, *font_bitsML, *font_bitsLM, *font_bitsLL; -unsigned char activefont; void set_font(unsigned char f) -{ - activefont = f; +{ switch(f) { - case SMOOTHFONT: - coff = 0; - dbl = 16; - font_info = (unsigned char*) smooth_info; - font_bitsUM = (unsigned char*) smooth_mt_bits; - font_bitsUL = (unsigned char*) smooth_lt_bits; - font_bitsLM = (unsigned char*) smooth_mb_bits; - font_bitsLL = (unsigned char*) smooth_lb_bits; - font_dlines = smooth_dlines; - break; - case BOLDDOUBLEFONT: - coff = 96; - dbl = 1; - font_bits = (unsigned char*) charset_bits; - font_info = (unsigned char*) charset_info; - font_dlines = charset_dlines; - break; - case BOLDFONT: - coff = 96; - dbl = 0; - font_bits = (unsigned char*) charset_bits; - font_info = (unsigned char*) charset_info; - font_dlines = charset_dlines; - break; - case DOUBLEFONT: - coff = 0; - dbl = 1; - font_bits = (unsigned char*) charset_bits; - font_info = (unsigned char*) charset_info; - font_dlines = charset_dlines; - break; +/* + case 2: + coff = 0; + dbl = 16; + font_info = (unsigned char*) smooth_info; + font_bitsUM = (unsigned char*) smooth_mt_bits; + font_bitsUL = (unsigned char*) smooth_lt_bits; + font_bitsLM = (unsigned char*) smooth_mb_bits; + font_bitsLL = (unsigned char*) smooth_lb_bits; + font_dlines = smooth_dlines; + break; +*/ + case 1: + coff = 0; + dbl = 1; + font_bits = (unsigned char*) charset_bits; + font_info = (unsigned char*) charset_info; + font_dlines = charset_dlines; + break; default: - coff = 0; - dbl = 0; - font_bits = (unsigned char*) charset_bits; - font_info = (unsigned char*) charset_info; - font_dlines = charset_dlines; - break; + coff = 0; + dbl = 0; + font_bits = (unsigned char*) charset_bits; + font_info = (unsigned char*) charset_info; + font_dlines = charset_dlines; + break; } } @@ -84,7 +66,6 @@ void _draw_char(unsigned int ch, unsigned char c, unsigned char m) { unsigned char p,q,r,s,t; unsigned int cpos, cnt; - is_drawing++; cpos = 0; @@ -241,7 +222,7 @@ void _draw_char(unsigned int ch, unsigned char c, unsigned char m) } do_rcu(tx,ty+16,p,m); - } // if (ty & 0x07) + } else { p <<= 1; @@ -305,11 +286,12 @@ void _draw_char(unsigned int ch, unsigned char c, unsigned char m) drawbuf[1][r-1] = s; } do_rcu(tx,ty+8,p,m); - } // else if (ty & 0x07) + } tx += p+2; - } // if (dbl == 1) + } else { + if(ty & 0x07) { s = ty & 0x07; @@ -341,7 +323,7 @@ void _draw_char(unsigned int ch, unsigned char c, unsigned char m) drawbuf[1][p-cnt-1] = 0x00; } do_rcu(tx,ty+8,p,m); - } // if (ty & 0x07) + } else { for(cnt=0;cnt> (8-s); - drawbuf[1][p-cnt-1] = font_bitsUL[cpos+cnt] >> (8-s); - } - do_rcu (tx,ty+8,p,m); - for (cnt=0;cnt> (8-s); - drawbuf[1][p-cnt-1] = font_bitsLL[cpos+cnt] >> (8-s); - } - do_rcu (tx,ty+16,p,m); - } // if (ty & 0x07) - else - { for(cnt=0;cnt>1]; - if((st[cp]+coff) & 0x01) - { - p &= 0x0F; - } - else - { - p >>= 4; - } - p +=1; - if(dbl == 1) - p <<= 1; - } - else - { - p = font_info[(unsigned char)(st[cp]+coff)]; - p+=1; - } - } - width += p; - cp++; } - width=max(width,prevwidth); - if (width) - width--; - return width; -} - -unsigned short get_stringheight (const char *st) -{ - unsigned char cp; - unsigned short height; - - if(!dbl) - height = 8; else - height = 16; - - cp = 0; - - while(st[cp] != 0) { - if(st[cp] == '\n') + while(st[cp] != 0) { - if(!dbl) - height += 9; - else - height += 18; + _draw_charB(st[cp]+coff, c, m); + cp++; } - cp++; } - - return height; } extern char hval[16]; void draw_hexC(unsigned char x, unsigned char y, const unsigned char v, unsigned char c, unsigned char m) { - is_drawing++; tx = x; ty = y; _draw_char(hval[v>>4]+coff, c, m); _draw_char(hval[v & 0x0F]+coff, c, m); - is_drawing--; } void draw_hexS(unsigned char x, unsigned char y, const unsigned short v, unsigned char c, unsigned char m) { - is_drawing++; tx = x; ty = y; draw_hexC(x, y, v >> 8, c, m); draw_hexC(tx, ty, v & 0xFF, c, m); - is_drawing--; } void draw_hexW(unsigned char x, unsigned char y, const unsigned long v, unsigned char c, unsigned char m) { - is_drawing++; draw_hexS(x, y, v >> 16, c, m); draw_hexS(tx, ty, v & 0xFFFF, c, m); - is_drawing--; -} - -static unsigned long u_longval; -static unsigned char pos, inc; -static unsigned char num[12]; - -void get_digit(unsigned long tval) -{ - unsigned char count; - count = 0; - while(u_longval >= tval) - { - count++; - u_longval -= tval; - } - - num[pos] = '0' + count; - if(count) - inc = 1; - pos += inc; -} - -void draw_numU(unsigned char x, unsigned char y, const unsigned long v, unsigned char z, unsigned char c, unsigned char m) -{ - is_drawing++; - pos = 0; - u_longval = v; - - if(z) - inc = 1; - else - inc = 0; - - get_digit(1000000000); - get_digit(100000000); - get_digit(10000000); - get_digit(1000000); - get_digit(100000); - get_digit(10000); - get_digit(1000); - get_digit(100); - get_digit(10); - inc = 1; - get_digit(1); - num[pos] = 0x00; - draw_string(x, y, (char*)num, c, m); - is_drawing--; } diff --git a/boop/display/fonty.h b/boop/fonty.h similarity index 70% rename from boop/display/fonty.h rename to boop/fonty.h index 7e35b30..ca274b4 100644 --- a/boop/display/fonty.h +++ b/boop/fonty.h @@ -19,21 +19,7 @@ #ifndef FONTY_H #define FONTY_H -#define SMALLFONT 0 -#define DOUBLEFONT 1 -#define BOLDFONT 2 -#define BOLDDOUBLEFONT 3 -#define SMOOTHFONT 4 - -#define SMALLFONT_HEIGHT 8 -#define DOUBLEFONT_HEIGHT 16 -#define BOLDFONT_HEIGHT 8 -#define BOLDDOUBLEFONT_HEIGHT 16 -#define SMOOTHFONT_HEIGHT 16 - -#define tabstep 24 - -unsigned char activefont; +extern unsigned char drawbuf[2][128]; void set_font(unsigned char f); void draw_char(unsigned char x, unsigned char y, unsigned char ch, unsigned char c, unsigned char m); @@ -42,8 +28,4 @@ void draw_hexC(unsigned char x, unsigned char y, const unsigned char v, unsigned void draw_hexS(unsigned char x, unsigned char y, const unsigned short v, unsigned char c, unsigned char m); void draw_hexW(unsigned char x, unsigned char y, const unsigned long v, unsigned char c, unsigned char m); -void draw_numU(unsigned char x, unsigned char y, const unsigned long v, unsigned char z, unsigned char c, unsigned char m); -unsigned short get_stringwidth (const char *st); -unsigned short get_stringheight (const char *st); - #endif diff --git a/boop/games/Make.conf b/boop/games/Make.conf deleted file mode 100644 index 5777587..0000000 --- a/boop/games/Make.conf +++ /dev/null @@ -1 +0,0 @@ -THUMBSRCS := gamesmenu.c tic_tac_toe.c sokoban.c connect4.c diff --git a/boop/games/c4_map.h b/boop/games/c4_map.h deleted file mode 100644 index 1996802..0000000 --- a/boop/games/c4_map.h +++ /dev/null @@ -1,64 +0,0 @@ -const signed char map[7][6][14] = -{ - { - { 0, 24, 45, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 4, 24, 25, 49, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 8, 24, 25, 26, 53, -1, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 12, 24, 25, 26, 60, -1, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 16, 25, 26, 64, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 20, 26, 68, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { - { 0, 1, 27, 46, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 4, 5, 27, 28, 45, 50, -1, 0, 0, 0, 0, 0, 0, 0 }, - { 8, 9, 27, 28, 29, 49, 54, 60, -1, 0, 0, 0, 0, 0 }, - { 12, 13, 27, 28, 29, 53, 59, 64, -1, 0, 0, 0, 0, 0 }, - { 16, 17, 28, 29, 63, 68, -1, 0, 0, 0, 0, 0, 0, 0 }, - { 20, 21, 29, 67, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { - { 0, 1, 2, 30, 47, -1, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 4, 5, 6, 30, 31, 46, 51, 60, -1, 0, 0, 0, 0, 0 }, - { 8, 9, 10, 30, 31, 32, 45, 50, 55, 59, 64, -1, 0, 0 }, - { 12, 13, 14, 30, 31, 32, 49, 54, 58, 63, 68, -1, 0, 0 }, - { 16, 17, 18, 31, 32, 53, 62, 67, -1, 0, 0, 0, 0, 0 }, - { 20, 21, 22, 32, 66, -1, 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { - { 0, 1, 2, 3, 33, 48, 60, -1, 0, 0, 0, 0, 0, 0 }, - { 4, 5, 6, 7, 33, 34, 47, 52, 59, 64, -1, 0, 0, 0 }, - { 8, 9, 10, 11, 33, 34, 35, 46, 51, 56, 58, 63, 68, -1 }, - { 12, 13, 14, 15, 33, 34, 35, 45, 50, 55, 57, 62, 67, -1 }, - { 16, 17, 18, 19, 34, 35, 49, 54, 61, 66, -1, 0, 0, 0 }, - { 20, 21, 22, 23, 35, 53, 65, -1, 0, 0, 0, 0, 0, 0 }, - }, - { - { 1, 2, 3, 36, 59, -1, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 5, 6, 7, 36, 37, 48, 58, 63, -1, 0, 0, 0, 0, 0 }, - { 9, 10, 11, 36, 37, 38, 47, 52, 57, 62, 67, -1, 0, 0 }, - { 13, 14, 15, 36, 37, 38, 46, 51, 56, 61, 66, -1, 0, 0 }, - { 17, 18, 19, 37, 38, 50, 55, 65, -1, 0, 0, 0, 0, 0 }, - { 21, 22, 23, 38, 54, -1, 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { - { 2, 3, 39, 58, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 6, 7, 39, 40, 57, 62, -1, 0, 0, 0, 0, 0, 0, 0 }, - { 10, 11, 39, 40, 41, 48, 61, 66, -1, 0, 0, 0, 0, 0 }, - { 14, 15, 39, 40, 41, 47, 52, 65, -1, 0, 0, 0, 0, 0 }, - { 18, 19, 40, 41, 51, 56, -1, 0, 0, 0, 0, 0, 0, 0 }, - { 22, 23, 41, 55, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { - { 3, 42, 57, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 7, 42, 43, 61, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 11, 42, 43, 44, 65, -1, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 15, 42, 43, 44, 48, -1, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 19, 43, 44, 52, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 23, 44, 56, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - } -}; - -const signed char drop_order[7] = -{ - 3, 4, 2, 5, 1, 6, 0 -}; diff --git a/boop/games/connect4.c b/boop/games/connect4.c deleted file mode 100644 index 8f98a55..0000000 --- a/boop/games/connect4.c +++ /dev/null @@ -1,965 +0,0 @@ -/* - connect4.c - game - - the bulk of this file is code reused from: - * Connect-4 Algorithm - * Version 3.10 - * By Keith Pomakis - * (pomakis@pobox.com) - *April, 2005 - - modifications & adoption to boop: - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lcd.h" -#include "fonty.h" -#include "keyboard.h" -#include "timerfuncs.h" -#include "backlight.h" -#include "connect4.h" - -extern unsigned char autorepeat; - -unsigned int seed; - -unsigned char c4_abort; - -#define other(x) ((x) ^ 1) -#define real_player(x) ((x) & 1) - -#define pop_state() \ - (current_state = &state_stack[--depth]) - -/* The "goodness" of the current state with respect to a player is the */ -/* score of that player minus the score of the player's opponent. A */ -/* positive value will result if the specified player is in a better */ -/* situation than his/her opponent. */ - -#define goodness_of(player) \ - (current_state->score[player] - current_state->score[other(player)]) - -/* A local struct which defines the state of a game. */ - -#define C4_SIZEX 7 -#define C4_SIZEY 6 -#define C4_TOTALSIZE (C4_SIZEX*C4_SIZEY) - -#define C4_MAGICWIN (1 << 4) - -#define C4_WINPLACES 69 - -typedef int(*ev_fn)(int player, int level, int alpha, int beta); -typedef void(*ps_fn)(void); -typedef int(*dp_fn)(int player, int column); -typedef void(*mc_fn)(char *d, char *s, unsigned int cnt); - -static ev_fn evaluate; -static ps_fn push_state; -static dp_fn drop_piece; -static mc_fn mcpy; - -typedef struct { - - char board[C4_SIZEX][C4_SIZEY]; /* The board configuration of the game state. */ - /* board[x][y] specifies the position of the */ - /* xth column and the yth row of the board, */ - /* where column and row numbering starts at 0. */ - /* (The 0th row is the bottom row.) */ - /* A value of 0 specifies that the position is */ - /* occupied by a piece owned by player 0, a */ - /* value of 1 specifies that the position is */ - /* occupied by a piece owned by player 1, and */ - /* a value of C4_NONE specifies that the */ - /* position is unoccupied. */ - - int score_array[2][C4_WINPLACES]; /* An array specifying statistics on both */ - /* players. score_array[0] specifies the */ - /* statistics for player 0, while */ - /* score_array[1] specifies the statistics for */ - /* player 1. */ - - int score[2]; /* The actual scores of each player, deducible */ - /* from score_array, but kept separately for */ - /* efficiency. The score of player x is the */ - /* sum of score_array[x]. A score is */ - /* basically a function of how many winning */ - /* positions are still available to the */ - /* and how close he/she is to achieving each */ - /* of these positions. */ - - short int winner; /* The winner of the game - either 0, 1 or */ - /* C4_NONE. Deducible from score_array, but */ - /* kept separately for efficiency. */ - - int num_of_pieces; /* The number of pieces currently occupying */ - /* board spaces. Deducible from board, but */ - /* kept separately for efficiency. */ - -} Game_state; - -/* Static global variables. */ - -#include "c4_map.h" - -static Game_state *state_stack; //[C4_MAX_LEVEL+1]; -static Game_state *current_state; -static int depth; -static int states_allocated = 0; -//static int drop_order[7]; - - -unsigned long int rand31(void) -{ - unsigned long int hi, lo; - lo = 16807 * (seed & 0xFFFF); - hi = 16807 * (seed >> 16); - lo += (hi & 0x7FFF) << 16; - lo += hi >> 15; - if(lo > 0x7FFFFFFF) lo -= 0x7FFFFFFF; - return(seed = (long)lo); -} - -/****************************************************************************/ -/** **/ -/** This function sets up a new game. This must be called exactly once **/ -/** before each game is started. Before it can be called a second time, **/ -/** end_game() must be called to destroy the previous game. **/ -/** **/ -/** width and height are the desired dimensions of the game board, while **/ -/** num is the number of pieces required to connect in a row in order to **/ -/** win the game. **/ -/** **/ -/****************************************************************************/ - -void -c4_new_game(int width, int height, int num) -{ - register int i, j; - - depth = 0; - current_state = &state_stack[0]; - - for (i=0; iboard[i][j] = C4_NONE; - } - - for (i=0; iscore_array[0][i] = 1; - current_state->score_array[1][i] = 1; - } - - current_state->score[0] = current_state->score[1] = C4_WINPLACES; - current_state->winner = C4_NONE; - current_state->num_of_pieces = 0; - - states_allocated = 1; -} - -/****************************************************************************/ -/** **/ -/** This function updates the score of the specified player in the **/ -/** context of the current state, given that the player has just placed **/ -/** a game piece in column x, row y. **/ -/** **/ -/****************************************************************************/ - -static void -update_score(int player, int x, int y) -{ - register int i; - int win_index; - int this_difference = 0, other_difference = 0; - int other_player = other(player); - - for (i=0; map[x][y][i] != -1; i++) { - win_index = map[x][y][i]; - this_difference += current_state->score_array[player][win_index]; - other_difference += current_state->score_array[other_player][win_index]; - - current_state->score_array[player][win_index] <<= 1; - current_state->score_array[other_player][win_index] = 0; - - if (current_state->score_array[player][win_index] == C4_MAGICWIN) - if (current_state->winner == C4_NONE) - current_state->winner = player; - } - - current_state->score[player] += this_difference; - current_state->score[other_player] -= other_difference; -} - -/****************************************************************************/ -/** **/ -/** This function drops a piece of the specified player into the **/ -/** specified column. The row where the piece ended up is returned, or **/ -/** -1 if the drop was unsuccessful (i.e., the specified column is full). **/ -/** **/ -/****************************************************************************/ - -static int -_drop_piece(int player, int column) -{ - int y = 0; - - while (current_state->board[column][y] != C4_NONE && ++y < C4_SIZEY) - ; - - if (y == C4_SIZEY) - return -1; - - current_state->board[column][y] = player; - current_state->num_of_pieces++; - update_score(player, column, y); - - return y; -} - -/****************************************************************************/ -/** **/ -/** This function drops a piece of the specified player into the **/ -/** specified column. A value of TRUE is returned if the drop is **/ -/** successful, or FALSE otherwise. A drop is unsuccessful if the **/ -/** specified column number is invalid or full. If the drop is **/ -/** successful and row is a non-NULL pointer, the row where the piece **/ -/** ended up is returned through the row pointer. Note that column and **/ -/** row numbering start at 0. **/ -/** **/ -/****************************************************************************/ - -Boolean -c4_make_move(int player, int column, int *row) -{ - int result; - - if (column >= C4_SIZEX || column < 0) - return FALSE; - - result = drop_piece(real_player(player), column); - if (row && result >= 0) - *row = result; - return (result >= 0); -} - -void __attribute__ ((section(".text.fastcode"))) -_mcpy(char *d, char *s, unsigned int cnt) -{ - unsigned int c = cnt; - do - { - d[c] = s[c]; - } while(c--); -} - -/****************************************************************************/ -/** **/ -/** This function pushes the current state onto a stack. pop_state() **/ -/** is used to pop from this stack. **/ -/** **/ -/** Technically what it does, since the current state is considered to **/ -/** be the top of the stack, is push a copy of the current state onto **/ -/** the stack right above it. The stack pointer (depth) is then **/ -/** incremented so that the new copy is considered to be the current **/ -/** state. That way, all pop_state() has to do is decrement the stack **/ -/** pointer. **/ -/** **/ -/** For efficiency, memory for each stack state used is only allocated **/ -/** once per game, and reused for the remainder of the game. **/ -/** **/ -/****************************************************************************/ - -static void __attribute__ ((section(".text.fastcode"))) -_push_state(void) -{ - register int i; - Game_state *old_state, *new_state; - old_state = &state_stack[depth++]; - new_state = &state_stack[depth]; - - /* Copy the board */ - - for (i=0; iboard[i], (char*)old_state->board[i], C4_SIZEY); - - /* Copy the score array */ - - - mcpy((char*)new_state->score_array[0], (char*)old_state->score_array[0], - C4_WINPLACES*4); - mcpy((char*)new_state->score_array[1], (char*)old_state->score_array[1], - C4_WINPLACES*4); - - new_state->score[0] = old_state->score[0]; - new_state->score[1] = old_state->score[1]; - new_state->winner = old_state->winner; - new_state->num_of_pieces = old_state->num_of_pieces; - - current_state = new_state; -} - -/****************************************************************************/ -/** **/ -/** This recursive function determines how good the current state may **/ -/** turn out to be for the specified player. It does this by looking **/ -/** ahead level moves. It is assumed that both the specified player and **/ -/** the opponent may make the best move possible. alpha and beta are **/ -/** used for alpha-beta cutoff so that the game tree can be pruned to **/ -/** avoid searching unneccessary paths. **/ -/** **/ -/** The specified poll function (if any) is called at the appropriate **/ -/** intervals. **/ -/** **/ -/** The worst goodness that the current state can produce in the number **/ -/** of moves (levels) searched is returned. This is the best the **/ -/** specified player can hope to achieve with this state (since it is **/ -/** assumed that the opponent will make the best moves possible). **/ -/** **/ -/****************************************************************************/ - -static int __attribute__ ((section(".text.fastcode"))) -_evaluate(int player, int level, int alpha, int beta) -{ - int i, goodness, best, maxab; - - if (current_state->winner == player) - return 0x7FFFFFFF - depth; - else if (current_state->winner == other(player)) - return -(0x7FFFFFFF - depth); - else if (current_state->num_of_pieces == C4_TOTALSIZE) - return 0; /* a tie */ - else if (level == depth) - return goodness_of(player); - else { - /* Assume it is the other player's turn. */ - best = -(0x7FFFFFFF); - maxab = alpha; - for(i=0; iboard[drop_order[i]][C4_SIZEY-1] != C4_NONE) - continue; /* The column is full. */ - push_state(); - drop_piece(other(player), drop_order[i]); - goodness = evaluate(other(player), level, -beta, -maxab); - if (goodness > best) { - best = goodness; - if (best > maxab) - maxab = best; - } - pop_state(); - if (best > beta) - break; - } - - /* What's good for the other player is bad for this one. */ - return -best; - } -} - -/****************************************************************************/ -/** **/ -/** This function instructs the computer to make a move for the specified **/ -/** player. level specifies the number of levels deep the computer **/ -/** should search the game tree in order to make its decision. This **/ -/** corresponds to the number of "moves" in the game, where each player's **/ -/** turn is considered a move. A value of TRUE is returned if a move was **/ -/** made, or FALSE otherwise (i.e. if the board is full). If a move was **/ -/** made, the column and row where the piece ended up is returned through **/ -/** the column and row pointers (unless a pointer is NULL, in which case **/ -/** it won't be used to return any information). Note that column and **/ -/** row numbering start at 0. Also note that for a standard 7x6 game of **/ -/** Connect-4, the computer is brain-dead at levels of three or less, **/ -/** while at levels of four or more the computer provides a challenge. **/ -/** **/ -/****************************************************************************/ - -Boolean -c4_auto_move(int player, int level, int *column, int *row) -{ - int i, best_column = -1, goodness = 0, best_worst = -(0x7FFFFFFF); - int num_of_equal = 0, real_player, current_column, result; - - real_player = real_player(player); - - /* It has been proven that the best first move for a standard 7x6 game */ - /* of connect-4 is the center column. See Victor Allis' masters thesis */ - /* ("ftp://ftp.cs.vu.nl/pub/victor/connect4.ps") for this proof. */ - - if (current_state->num_of_pieces < 2 && (current_state->num_of_pieces == 0 || - current_state->board[3][0] != C4_NONE)) { - if (column) - *column = 3; - if (row) - *row = current_state->num_of_pieces; - drop_piece(real_player, 3); - return TRUE; - } - - /* Simulate a drop in each of the columns and see what the results are. */ - - for (i=0; iwinner == real_player) { - best_column = current_column; - pop_state(); - break; - } - - /* Otherwise, look ahead to see how good this move may turn out */ - /* to be (assuming the opponent makes the best moves possible). */ - else { -// next_poll = clock() + poll_interval; - goodness = evaluate(real_player, level, -(0x7FFFFFFF), -best_worst); - } - - /* If this move looks better than the ones previously considered, */ - /* remember it. */ - if (goodness > best_worst) { - best_worst = goodness; - best_column = current_column; - num_of_equal = 1; - } - - /* If two moves are equally as good, make a random decision. */ - else if (goodness == best_worst) { - num_of_equal++; - if ((rand31()>>4) % num_of_equal == 0) - best_column = current_column; - } - - pop_state(); - if(c4_abort) - return 0; - } - - /* Drop the piece in the column decided upon. */ - - if (best_column >= 0) { - result = drop_piece(real_player, best_column); - if (column) - *column = best_column; - if (row) - *row = result; - return TRUE; - } - else - return FALSE; -} - -/****************************************************************************/ -/** **/ -/** This function returns the "score" of the specified player. This **/ -/** score is a function of how many winning positions are still available **/ -/** to the player and how close he/she is to achieving each of these **/ -/** positions. The scores of both players can be compared to observe how **/ -/** well they are doing relative to each other. **/ -/** **/ -/****************************************************************************/ - -int -c4_score_of_player(int player) -{ - return current_state->score[real_player(player)]; -} - - -/****************************************************************************/ -/** **/ -/** This function returns TRUE if the specified player has won the game, **/ -/** and FALSE otherwise. **/ -/** **/ -/****************************************************************************/ - -Boolean -c4_is_winner(int player) -{ - return (current_state->winner == real_player(player)); -} - - -/****************************************************************************/ -/** **/ -/** This function returns TRUE if the board is completely full without a **/ -/** winner, and FALSE otherwise. **/ -/** **/ -/****************************************************************************/ - -Boolean -c4_is_tie(void) -{ - return (current_state->num_of_pieces == C4_TOTALSIZE && - current_state->winner == C4_NONE); -} - - -/****************************************************************************/ -/** **/ -/** This function returns the coordinates of the winning connections of **/ -/** the winning player. It is assumed that a player has indeed won the **/ -/** game. The coordinates are returned in x1, y1, x2, y2, where (x1, y1) **/ -/** specifies the lower-left piece of the winning connection, and **/ -/** (x2, y2) specifies the upper-right piece of the winning connection. **/ -/** If more than one winning connection exists, only one will be **/ -/** returned. **/ -/** **/ -/****************************************************************************/ - - -void -c4_win_coords(int *x1, int *y1, int *x2, int *y2) -{ - register int i, j, k; - int winner, win_pos = 0; - Boolean found; - - winner = current_state->winner; - - while (current_state->score_array[winner][win_pos] != C4_MAGICWIN) - win_pos++; - - found = FALSE; - for (j=0; j=0 && !found; j--) - for (i=C4_SIZEX-1; i>=0 && !found; i--) - for (k=0; map[i][j][k] != -1; k++) - if (map[i][j][k] == win_pos) { - *x2 = i; - *y2 = j; - found = TRUE; - break; - } -} - - -/****************************************************************************/ -/** **/ -/** This function ends the current game. It is assumed that a game is **/ -/** in progress. It is illegal to call any other game function **/ -/** immediately after this one except for c4_new_game(), c4_poll() and **/ -/** c4_reset(). **/ -/** **/ -/****************************************************************************/ - -void -c4_end_game(void) -{ - states_allocated = 0; -} - - -/****************************************************************************/ -/** **/ -/** This function resets the state of the algorithm to the starting state **/ -/** (i.e., no game in progress and a NULL poll function). There should **/ -/** no reason to call this function unless for some reason the calling **/ -/** algorithm loses track of the game state. It is illegal to call any **/ -/** other game function immediately after this one except for **/ -/** c4_new_game(), c4_poll() and c4_reset(). **/ -/** **/ -/****************************************************************************/ - -void -c4_reset(void) -{ - c4_end_game(); -} - -int row, col, ccol; -unsigned int c4_cb, c4_wcb; -unsigned char c4_player, c4_moves, c4_level; - -void draw_stone(unsigned char x, unsigned char y, unsigned char p) -{ - - unsigned char xx, yy; - xx = 10+(x*18); - yy = 46+(y*18); - - switch(p) - { - case 0: - draw_disc(xx, yy, 7, 2, DRAW_PUT); - draw_disc(xx, yy, 5, 3, DRAW_XOR); - draw_disc(xx, yy, 2, 3, DRAW_XOR); - break; - - case 1: - draw_disc(xx, yy, 7, 3, DRAW_PUT); - draw_disc(xx, yy, 5, 1, DRAW_ERASE); - draw_disc(xx, yy, 2, 1, DRAW_PUT); - break; - - case 2: - draw_disc(xx, yy, 8, 3, DRAW_ERASE); - break; - - case 3: - draw_disc(x, y, 7, 2, DRAW_PUT); - draw_disc(x, y, 5, 3, DRAW_XOR); - draw_disc(x, y, 2, 3, DRAW_XOR); - break; - - case 4: - draw_disc(x, y, 7, 3, DRAW_PUT); - draw_disc(x, y, 5, 1, DRAW_ERASE); - draw_disc(x, y, 2, 1, DRAW_PUT); - break; - - case 5: - draw_disc(xx, yy, 7, 3, DRAW_XOR); - break; - } -} - -void progress_callback(unsigned int cb) -{ - static unsigned char step = 0; - unsigned char x; - if(keys[0] || keys[1]) - { - setBacklight(BL_AUTO); - if(KEY_Exit) - c4_abort = 1; - } - - for(x=0;x<6;x++) - { - draw_char(40+(x<<3),24,224+step,3,DRAW_NORCU); - } - draw_hline(40,24,48,3,DRAW_PUT); - step--; - step &= 0x07; -} - -void win_callback(unsigned int cb) -{ - int x1, y1, x2, y2; - - c4_win_coords(&x1, &y1, &x2, &y2); - - if(x1 > x2) - x1 = 1; - else if(x1 < x2) - x1 = -1; - else - x1 = 0; - - if(y1 > y2) - y1 = 1; - else if(y1 < y2) - y1 = -1; - else - y1 = 0; - - draw_stone(x2,5-y2,5); - x2+=x1; - y2+=y1; - draw_stone(x2,5-y2,5); - x2+=x1; - y2+=y1; - draw_stone(x2,5-y2,5); - x2+=x1; - y2+=y1; - draw_stone(x2,5-y2,5); - x2+=x1; - y2+=y1; -} - -void draw_marker(void) -{ - draw_stone(10+(col*18), 22,c4_player+3); - draw_arrow(7+(col*18), 31, ARROW_DOWN, ARROW_LEN, 3, DRAW_PUT); - draw_arrow( 0, 152, ARROW_LEFT, ARROW_LEN, 3, DRAW_PUT); - draw_arrow( 6, 152, ARROW_RIGHT, ARROW_LEN, 3, DRAW_PUT); - draw_string(12,152,"Select",3,DRAW_PUT); - draw_arrow( 75, 153, ARROW_DOWN, ARROW_LEN, 3, DRAW_PUT); - draw_string(84,152,"Play move",3,DRAW_PUT); -} - -void delete_marker(void) -{ - draw_disc(10+(col*18), 22, 7, 3, DRAW_ERASE); - draw_arrow(7+(col*18), 31, ARROW_DOWN, ARROW_LEN, 3, DRAW_ERASE); - draw_block(0, 152, 128, 8, 3, DRAW_ERASE); -} - -int checkwin(void) -{ - if(c4_is_winner(0) || c4_is_winner(1) || c4_is_tie()) - { - if(!c4_is_tie()) - { - startCB(c4_wcb); - } - draw_block(0, 152, 128, 8, 3, DRAW_ERASE); - delete_marker(); - set_font(BOLDFONT); - if(c4_is_winner(c4_player)) - draw_string(19,14,"Spieler gewinnt!",3,DRAW_PUT); - else if(c4_is_tie()) - draw_string(24,14,"Unentschieden!",3,DRAW_PUT); - else - draw_string(13,14,"Computer gewinnt!",3,DRAW_PUT); - - draw_string(2,25,"OK: Nochmal Exit: Ende",3,DRAW_PUT); - return 1; - } - return 0; -} - -void move(unsigned char p) -{ - unsigned char pp; - if(p) - { - p = 1; - pp = 0; - } - else - pp = 1; - - if(c4_make_move(p, col, &row)) - { - draw_stone(col, 5-row, p); - draw_disc(10+(col*18), 23, 7, 3, DRAW_ERASE); - delete_marker(); - if(!checkwin()) - { - set_font(BOLDFONT); - draw_frame(35,13,57,22,5,5,3,DRAW_PUT); - draw_block(40,18,47,12,3,DRAW_PUT); - draw_string(40, 15, "Berechne", 3, DRAW_ERASE); - draw_string(0, 152, "Exit: Spiel abbrechen", 3, DRAW_PUT); - set_font(SMALLFONT); - progress_callback(0xff); - startCB(c4_cb); - c4_abort = 0; - c4_auto_move(~p, c4_level, &ccol, &row); - setBacklight(BL_AUTO); - stopCB(c4_cb); - draw_block(0,13,128,22,3,DRAW_ERASE); - draw_block(0, 152, 128, 8, 3, DRAW_ERASE); - draw_stone(ccol, 5-row, pp); - } - draw_marker(); - c4_moves++; - checkwin(); - } -} - -void c4_selplayer(unsigned char p) -{ - draw_string(30, 15, "Chooose Your", 3, DRAW_PUT); - draw_string(25, 26, "Colour & Level", 3, DRAW_PUT); - draw_arrow( 0, 154, ARROW_UP, ARROW_LEN, 3, DRAW_PUT); - draw_arrow(1 * 6, 154, ARROW_DOWN, ARROW_LEN, 3, DRAW_PUT); - draw_string(15,152,"Level",3,DRAW_PUT); - - draw_arrow( 82, 153, ARROW_LEFT, ARROW_LEN, 3, DRAW_PUT); - draw_arrow( 88, 153, ARROW_RIGHT, ARROW_LEN, 3, DRAW_PUT); - draw_string(94,152,"Colour",3,DRAW_PUT); - - draw_frame(1, 15, 19, 19, 1, 3, 3, DRAW_PUT); - draw_frame(108,15, 19, 19, 1, 3, 3, DRAW_PUT); - - draw_disc(10, 24, 7, 3, DRAW_ERASE); - draw_stone(10, 24, p+3); - draw_disc(117, 24, 7, 3, DRAW_ERASE); - draw_stone(117,24, p+3); -} - -void start_connect4(void) -{ - unsigned char x,y; - - Game_state s_stk[C4_MAX_LEVEL+1]; - state_stack = s_stk; - - evaluate = _evaluate; - push_state = _push_state; - drop_piece = _drop_piece; - mcpy = _mcpy; - - seed = 0x86f2a981; - - c4_cb = addTimerCB(progress_callback, 35); - c4_wcb = addTimerCB(win_callback, 100); - - row = 0; ccol = 0; - c4_player = 0; - c4_level = 3; - lcd_fill(0);//Clr screen - - set_font(BOLDFONT); - draw_string(0, 0, "Connect4", 3, DRAW_PUT); - - draw_block(0,10,128,2,3,DRAW_PUT); - draw_block(0,149,128,2,3,DRAW_PUT); - - draw_frame(1,37,127,109,9,9,3,DRAW_PUT); - draw_block(10,46,109,91,3,DRAW_PUT); - -restart: - stopCB(c4_wcb); - col = 3; - draw_block(0,14,128,20,3,DRAW_ERASE); - draw_block(0, 152, 128, 8, 3, DRAW_ERASE); - c4_selplayer(c4_player); - draw_numU(48,152,c4_level,0,3,DRAW_PUT); - - c4_moves = 0; - - for(x=0;x<7;x++) - { - for(y=0;y<6;y++) - { - draw_disc(10+(x*18), 46+(y*18),8,3,DRAW_ERASE); - } - } - - c4_reset(); - c4_new_game(C4_SIZEX, C4_SIZEY, 4); - - while(1) - { -wait4c: - waitKeyUpDown(); - - if((KEY_OK || KEY_0) && (c4_is_winner(0) || c4_is_winner(1) || c4_is_tie()) && (c4_moves != 0)) goto restart; - else if(KEY_0) - goto restart; - if(KEY_Exit) - { - stopCB(c4_cb); - stopCB(c4_wcb); - removeTimerCB(c4_cb); - removeTimerCB(c4_wcb); - return; - } - else if(c4_moves == 0) - { - if(KEY_Left || KEY_Right) - { - if(c4_player) c4_player=0; else c4_player = 1; - c4_selplayer(c4_player); - } - else if(KEY_OK && c4_player == 1) - { - delete_marker(); - c4_auto_move(0, c4_level, &ccol, &row); - draw_stone(ccol, 5-row, 0); - draw_marker(); - } - else if(KEY_Up) - { - draw_numU(48,152,c4_level,0,3,DRAW_ERASE); - c4_level++; - if(c4_level > C4_MAX_LEVEL) - c4_level = 1; - draw_numU(48,152,c4_level,0,3,DRAW_PUT); - } - else if(KEY_Down) - { - draw_numU(48,152,c4_level,0,3,DRAW_ERASE); - c4_level--; - if(c4_level < 1) - c4_level = C4_MAX_LEVEL; - draw_numU(48,152,c4_level,0,3,DRAW_PUT); - } - if(KEY_OK) - { - c4_moves++; - draw_block(0, 152, 128, 8, 3, DRAW_ERASE); - delete_marker(); - draw_block(0,13,128,22,3,DRAW_ERASE); - set_font(SMALLFONT); - draw_marker(); - } - goto wait4c; - } - else if(!c4_is_winner(0) && !c4_is_winner(1) && !c4_is_tie()) - { - if(KEY_1 || KEY_2 || KEY_3 || KEY_4 || KEY_5 || KEY_6 || KEY_7) - { - delete_marker(); - if(KEY_1) - col = 0; - else if(KEY_2) - col = 1; - else if(KEY_3) - col = 2; - else if(KEY_4) - col = 3; - else if(KEY_5) - col = 4; - else if(KEY_6) - col = 5; - else if(KEY_7) - col = 6; - draw_marker(); - - move(c4_player); - } - else if(KEY_Left || KEY_Right) - { - delete_marker(); - if(KEY_Left) - col--; - else if(KEY_Right) - col++; - - if(col > 6) - col = 0; - else if(col < 0) - col = 6; - draw_marker(); - } - else if(KEY_Down || KEY_OK) - { - move(c4_player); - if(c4_abort) - { - c4_abort = 0; - goto restart; - } - } - } - } -} - diff --git a/boop/games/connect4.h b/boop/games/connect4.h deleted file mode 100644 index 5962d9d..0000000 --- a/boop/games/connect4.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - connect4.c - game - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef CONNECT4_H -#define CONNECT4_H - -#ifndef Boolean -#define Boolean char -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef FALSE -#define FALSE 0 -#endif - -#define C4_NONE 2 -#define C4_MAX_LEVEL 20 - -void start_connect4(void); - -#endif diff --git a/boop/games/gamesmenu.c b/boop/games/gamesmenu.c deleted file mode 100644 index 230db87..0000000 --- a/boop/games/gamesmenu.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - testmenu.c - testmenu for menuing system - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "menu.h" -#include "tic_tac_toe.h" -#include "sokoban.h" -#include "connect4.h" - -const struct MENU_ENTRY gamesMenuEntries[] = -{ - { &GameTicTacToe, 0, FUNCENTRY, "TicTacToe", "Play TicTacToe" }, - { &GameSokoban, 0, FUNCENTRY, "Sokoban", "Play Sokoban" }, - { &start_connect4, 0, FUNCENTRY, "Connect4", "Play Connect4" } -}; - - -const struct MENU gamesMenu = -{ - 3, (MENU_ENTRY*)&gamesMenuEntries, "Games" -}; diff --git a/boop/games/gamesmenu.h b/boop/games/gamesmenu.h deleted file mode 100644 index d84df17..0000000 --- a/boop/games/gamesmenu.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - mainmenu.h - the main menu for boop - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef MAINMENU_H -#define MAINMENU_H - -extern const struct MENU gamesMenu; - -#endif diff --git a/boop/games/sokoban.c b/boop/games/sokoban.c deleted file mode 100644 index db0305b..0000000 --- a/boop/games/sokoban.c +++ /dev/null @@ -1,614 +0,0 @@ -/* - sokoban.c - game - Copyright (C) 2007 Colibri - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lcd.h" -#include "fonty.h" -#include "keyboard.h" - -#include "sokoban.h" -#include "sokoban_levels.h" - -//#include "stdio.h" - -void GameSokoban_InitGameField(struct _SokobanGameInfo *pGI) -{ - int SizeX; - int SizeY; - int x; - int y; - int Pos; - int i; - - if((pGI->Level < 1) || (pGI->Level > SOKOBAN_LEVELS)) - { - //Invalid level - pGI->Level = 1; - } - - //Empty the game field - for(x=0; xG[x][y] = SPACE; - } - } - - //Find the position to searched level - Pos = 0; - i = 1; - while(iLevel) - { - SizeX = Sokoban_Levels[Pos++]; - SizeY = Sokoban_Levels[Pos++]; - Pos += SizeY * ((SizeX+1)/2); - i++; - } - - //Copy the (may be smaller) level to the center of the game field - SizeX = Sokoban_Levels[Pos++]; - SizeY = Sokoban_Levels[Pos++]; - for(y=0; y lo nibble - pGI->G[x+((SOKOBAN_CELLS_X-SizeX)/2)][y+((SOKOBAN_CELLS_Y-SizeY)/2)] = Sokoban_Levels[Pos + (y * ((SizeX+1)/2)) + (x/2)] & 0x0F; - } - else - { - //Even x -> hi nibble - pGI->G[x+((SOKOBAN_CELLS_X-SizeX)/2)][y+((SOKOBAN_CELLS_Y-SizeY)/2)] = (Sokoban_Levels[Pos + (y * ((SizeX+1)/2)) + (x/2)] >> 4) & 0x0F; - } - } - } -} - - -BOOL GameSokoban_IsSolved(BYTE G[SOKOBAN_CELLS_X][SOKOBAN_CELLS_Y]) -{ - //Return true=Solved - int x; - int y; - - for(x=0; xMoves = 0; - pGI->UndoCount = 0; - - GameSokoban_InitGameField(pGI); - - //Game field to display - for(x=0; xG[x][y]); - if(pGI->G[x][y] & PUSHER) - { - pGI->PusherX = x; - pGI->PusherY = y; - } - } - } -} - -void GameSokoban_Move(struct _SokobanGameInfo *pGI) -{ - if(KEY_Up) - { - if(!(pGI->G[pGI->PusherX][pGI->PusherY - 1] & WALL)) - { - //No wall - if(!(pGI->G[pGI->PusherX][pGI->PusherY - 1] & PACKET)) - { - //No wall and no packet - GameSokoban_SaveUndo(pGI, 2, SOKOBAN_UNDO_DIR_UP); - - //Move pusher - pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER; - pGI->G[pGI->PusherX][pGI->PusherY-1] ^= PUSHER; - - //Draw changed cells - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]); - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY-1, pGI->G[pGI->PusherX][pGI->PusherY-1]); - - pGI->PusherY--; - pGI->Moves++; - } - else - { - //Packet -> check if it is space behind the packet - if(!(pGI->G[pGI->PusherX][pGI->PusherY - 2] & (PACKET | WALL))) - { - //No packet or wall behind the packet - GameSokoban_SaveUndo(pGI, 3, SOKOBAN_UNDO_DIR_UP); - //Move pusher - pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER; - pGI->G[pGI->PusherX][pGI->PusherY - 1] ^= PUSHER; - - //Move packet - pGI->G[pGI->PusherX][pGI->PusherY-1] ^= PACKET; - pGI->G[pGI->PusherX][pGI->PusherY-2] ^= PACKET; - - //Draw changed cells - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]); - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY-1, pGI->G[pGI->PusherX][pGI->PusherY-1]); - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY-2, pGI->G[pGI->PusherX][pGI->PusherY-2]); - - pGI->PusherY--; - pGI->Moves++; - } - } - } - } - if(KEY_Down) - { - if(!(pGI->G[pGI->PusherX][pGI->PusherY + 1] & WALL)) - { - //No wall - if(!(pGI->G[pGI->PusherX][pGI->PusherY + 1] & PACKET)) - { - //No wall and no packet - GameSokoban_SaveUndo(pGI, 2, SOKOBAN_UNDO_DIR_DOWN); - //Move pusher - pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER; - pGI->G[pGI->PusherX][pGI->PusherY+1] ^= PUSHER; - - //Draw changed cells - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]); - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY+1, pGI->G[pGI->PusherX][pGI->PusherY+1]); - - pGI->PusherY++; - pGI->Moves++; - } - else - { - //Packet -> check if it is space behind the packet - if(!(pGI->G[pGI->PusherX][pGI->PusherY + 2] & (PACKET | WALL))) - { - //No packet or wall behind the packet - GameSokoban_SaveUndo(pGI, 3, SOKOBAN_UNDO_DIR_DOWN); - //Move pusher - pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER; - pGI->G[pGI->PusherX][pGI->PusherY + 1] ^= PUSHER; - - //Move packet - pGI->G[pGI->PusherX][pGI->PusherY+1] ^= PACKET; - pGI->G[pGI->PusherX][pGI->PusherY+2] ^= PACKET; - - //Draw changed cells - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]); - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY+1, pGI->G[pGI->PusherX][pGI->PusherY+1]); - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY+2, pGI->G[pGI->PusherX][pGI->PusherY+2]); - - pGI->PusherY++; - pGI->Moves++; - } - } - } - } - if(KEY_Left) - { - if(!(pGI->G[pGI->PusherX - 1][pGI->PusherY] & WALL)) - { - //No wall - if(!(pGI->G[pGI->PusherX - 1][pGI->PusherY] & PACKET)) - { - //No wall and no packet - GameSokoban_SaveUndo(pGI, 2, SOKOBAN_UNDO_DIR_LEFT); - //Move pusher - pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER; - pGI->G[pGI->PusherX - 1][pGI->PusherY] ^= PUSHER; - - //Draw changed cells - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]); - GameSokoban_DrawCell(pGI->PusherX - 1, pGI->PusherY, pGI->G[pGI->PusherX - 1][pGI->PusherY]); - - pGI->PusherX--; - pGI->Moves++; - } - else - { - //Packet -> check if it is space behind the packet - if(!(pGI->G[pGI->PusherX - 2][pGI->PusherY] & (PACKET | WALL))) - { - //No packet or wall behind the packet - GameSokoban_SaveUndo(pGI, 3, SOKOBAN_UNDO_DIR_LEFT); - //Move pusher - pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER; - pGI->G[pGI->PusherX - 1][pGI->PusherY] ^= PUSHER; - - //Move packet - pGI->G[pGI->PusherX - 1][pGI->PusherY] ^= PACKET; - pGI->G[pGI->PusherX - 2][pGI->PusherY] ^= PACKET; - - //Draw changed cells - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]); - GameSokoban_DrawCell(pGI->PusherX - 1, pGI->PusherY, pGI->G[pGI->PusherX - 1][pGI->PusherY]); - GameSokoban_DrawCell(pGI->PusherX - 2, pGI->PusherY, pGI->G[pGI->PusherX - 2][pGI->PusherY]); - - pGI->PusherX--; - pGI->Moves++; - } - } - } - } - if(KEY_Right) - { - if(!(pGI->G[pGI->PusherX + 1][pGI->PusherY] & WALL)) - { - //No wall - if(!(pGI->G[pGI->PusherX + 1][pGI->PusherY] & PACKET)) - { - //No wall and no packet - GameSokoban_SaveUndo(pGI, 2, SOKOBAN_UNDO_DIR_RIGHT); - //Move pusher - pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER; - pGI->G[pGI->PusherX + 1][pGI->PusherY] ^= PUSHER; - - //Draw changed cells - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]); - GameSokoban_DrawCell(pGI->PusherX + 1, pGI->PusherY, pGI->G[pGI->PusherX + 1][pGI->PusherY]); - - pGI->PusherX++; - pGI->Moves++; - } - else - { - //Packet -> check if it is space behind the packet - if(!(pGI->G[pGI->PusherX + 2][pGI->PusherY] & (PACKET | WALL))) - { - //No packet or wall behind the packet - GameSokoban_SaveUndo(pGI, 3, SOKOBAN_UNDO_DIR_RIGHT); - //Move pusher - pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER; - pGI->G[pGI->PusherX + 1][pGI->PusherY] ^= PUSHER; - - //Move packet - pGI->G[pGI->PusherX + 1][pGI->PusherY] ^= PACKET; - pGI->G[pGI->PusherX + 2][pGI->PusherY] ^= PACKET; - - //Draw changed cells - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]); - GameSokoban_DrawCell(pGI->PusherX + 1, pGI->PusherY, pGI->G[pGI->PusherX + 1][pGI->PusherY]); - GameSokoban_DrawCell(pGI->PusherX + 2, pGI->PusherY, pGI->G[pGI->PusherX + 2][pGI->PusherY]); - - pGI->PusherX++; - pGI->Moves++; - } - } - } - } - -} - -void GameSokoban_UndoAMove(struct _SokobanGameInfo *pGI) -{ - //3 Byte UndoBuffer: - //[ 0 ][ 1 ][ 2 ] - //765432107654321076543210 - //\-x-/\-y-/\/\o0/\o1/\o2/ - - BYTE Object[3]; - BYTE Dir; - int i; - int Count; - - if(pGI->UndoCount <= 0) - { - return;//No more undos available - } - - pGI->UndoCount--; - - pGI->PusherX = (pGI->UndoBuffer[pGI->UndoCount][0] >> 3) & 0x1F; - pGI->PusherY = (pGI->UndoBuffer[pGI->UndoCount][0] << 2) & 0x1F; - pGI->PusherY |= (pGI->UndoBuffer[pGI->UndoCount][1] >> 6) & 0x03; - Dir = (pGI->UndoBuffer[pGI->UndoCount][1] >> 4) & 0x03; - Object[0] = pGI->UndoBuffer[pGI->UndoCount][1] & 0x0F; - Object[1] = (pGI->UndoBuffer[pGI->UndoCount][2] >> 4) & 0x0F; - Object[2] = pGI->UndoBuffer[pGI->UndoCount][2] & 0x0F; - - Count = (Object[2] == 0x0F) ? 2 : 3; - - for(i=0; iG[pGI->PusherX - i][pGI->PusherY] = Object[i]; - GameSokoban_DrawCell(pGI->PusherX - i, pGI->PusherY, pGI->G[pGI->PusherX - i][pGI->PusherY]); - break; - case SOKOBAN_UNDO_DIR_RIGHT: - pGI->G[pGI->PusherX + i][pGI->PusherY] = Object[i]; - GameSokoban_DrawCell(pGI->PusherX + i, pGI->PusherY, pGI->G[pGI->PusherX + i][pGI->PusherY]); - break; - case SOKOBAN_UNDO_DIR_UP: - pGI->G[pGI->PusherX][pGI->PusherY - i] = Object[i]; - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY - i, pGI->G[pGI->PusherX][pGI->PusherY - i]); - break; - case SOKOBAN_UNDO_DIR_DOWN: - pGI->G[pGI->PusherX][pGI->PusherY + i] = Object[i]; - GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY + i, pGI->G[pGI->PusherX][pGI->PusherY + i]); - break; - } - } - - pGI->Moves--; -} - -void GameSokoban_SaveUndo(struct _SokobanGameInfo *pGI, BYTE Count, BYTE Dir) -{ - //3 Byte UndoBuffer: - //[ 0 ][ 1 ][ 2 ] - //765432107654321076543210 - //\-x-/\-y-/\/\o0/\o1/\o2/ - - BYTE Object[3]; - int i; - -// ASSERT((Count == 2) || (Count == 3)); - - Object[2] = 0x0F;//Default value for not used - - for(i=0; iG[pGI->PusherX - i][pGI->PusherY]; - break; - case SOKOBAN_UNDO_DIR_RIGHT: - Object[i] = pGI->G[pGI->PusherX + i][pGI->PusherY]; - break; - case SOKOBAN_UNDO_DIR_UP: - Object[i] = pGI->G[pGI->PusherX][pGI->PusherY - i]; - break; - case SOKOBAN_UNDO_DIR_DOWN: - Object[i] = pGI->G[pGI->PusherX][pGI->PusherY + i]; - break; - } - } - - if(pGI->UndoCount >= SOKOBAN_MAX_UNDOS) - { - //Undo buffer is full -> free oldest - for(i=0; i<(SOKOBAN_MAX_UNDOS-1); i++) - { - pGI->UndoBuffer[i][0] = pGI->UndoBuffer[i+1][0]; - pGI->UndoBuffer[i][1] = pGI->UndoBuffer[i+1][1]; - pGI->UndoBuffer[i][2] = pGI->UndoBuffer[i+1][2]; - } - pGI->UndoCount--; - } - - pGI->UndoBuffer[pGI->UndoCount][0] = (pGI->PusherX & 0x1F) << 3; - pGI->UndoBuffer[pGI->UndoCount][0] |= ((pGI->PusherY & 0x1F) >> 2) & 0x07; - - pGI->UndoBuffer[pGI->UndoCount][1] = (pGI->PusherY & 0x1F) << 6; - pGI->UndoBuffer[pGI->UndoCount][1] |= (Dir & 3) << 4; - pGI->UndoBuffer[pGI->UndoCount][1] |= Object[0] & 0x0F; - - pGI->UndoBuffer[pGI->UndoCount][2] = (Object[1] & 0x0F) << 4; - pGI->UndoBuffer[pGI->UndoCount][2] |= Object[2] & 0x0F; - - pGI->UndoCount++; -} - -void GameSokoban() -{ - struct _SokobanGameInfo GI; - int i; - - GI.Level = 1; -restart: - //Init the display - lcd_fill(0);//Clr screen - - //Title - draw_string(0, 0, "Sokoban", LCD_COLOR_B, DRAW_PUT); - - //Grid - for(i=0; i<=SOKOBAN_CELLS_X; i++) - { - draw_vline(i*(SOKOBAN_CELL_SIZE+1),16,SOKOBAN_CELLS_Y*(SOKOBAN_CELL_SIZE+1)+1, LCD_COLOR_LG, DRAW_PUT); - } - for(i=0; i<=SOKOBAN_CELLS_Y; i++) - { - draw_hline(0, 16 + i*(SOKOBAN_CELL_SIZE+1),SOKOBAN_CELLS_X*(SOKOBAN_CELL_SIZE+1)+1, LCD_COLOR_LG, DRAW_PUT); - } - - draw_string(0, 8, "Level: Moves:", LCD_COLOR_B, DRAW_PUT); - draw_char(98,8,'0',LCD_COLOR_B,DRAW_PUT); - draw_string(0, LCD_SIZE_Y - (8*3), "Program +/-:", LCD_COLOR_B, DRAW_PUT); - draw_string(65, LCD_SIZE_Y - (8*3), "Level +/- 1", LCD_COLOR_B, DRAW_PUT); - draw_string(0, LCD_SIZE_Y - (8*2), "Volume +/-:", LCD_COLOR_B, DRAW_PUT); - draw_string(65, LCD_SIZE_Y - (8*2), "Level +/- 20", LCD_COLOR_B, DRAW_PUT); - draw_arrow( 0, LCD_SIZE_Y - 8, ARROW_UP, ARROW_LEN, LCD_COLOR_B, DRAW_PUT); - draw_arrow(1 * 6, LCD_SIZE_Y - 8, ARROW_DOWN, ARROW_LEN, LCD_COLOR_B, DRAW_PUT); - draw_arrow(2 * 6, LCD_SIZE_Y - 8, ARROW_LEFT, ARROW_LEN, LCD_COLOR_B, DRAW_PUT); - draw_arrow(3 * 6, LCD_SIZE_Y - 8, ARROW_RIGHT, ARROW_LEN, LCD_COLOR_B, DRAW_PUT); - draw_string(32, LCD_SIZE_Y - 8, "Bewegen", LCD_COLOR_B, DRAW_PUT); - -again: - GameSokoban_InitDisplayForNewGame(&GI); - draw_block(32, 8, 30, 8, LCD_COLOR_B, DRAW_ERASE); - draw_numU(32,8,GI.Level,0,LCD_COLOR_B,DRAW_PUT); - - while(1) - { - if(KEY_Up || KEY_Down || KEY_Left || KEY_Right || KEY_8) - { - draw_block(98, 8, 30, 8, LCD_COLOR_B, DRAW_ERASE); - if(KEY_8) - GameSokoban_UndoAMove(&GI); - else - GameSokoban_Move(&GI); - - if(GameSokoban_IsSolved(GI.G) && !KEY_8) - { - //Solved - GI.Level++;//Next level - if(GI.Level > SOKOBAN_LEVELS) - { - GI.Level = 1; - } - waitKeyUp(); - goto restart; - } - draw_numU(98,8,GI.Moves,0,LCD_COLOR_B,DRAW_PUT); - } - - - //Footer - if(GI.Moves == 1) - { - draw_block(0, LCD_SIZE_Y - (8*3), LCD_SIZE_X, 16, LCD_COLOR_B, DRAW_ERASE); - draw_string(0, LCD_SIZE_Y - (8*3), "0", LCD_COLOR_B, DRAW_PUT); - draw_string(32, LCD_SIZE_Y - (8*3), "Neues Spiel", LCD_COLOR_B, DRAW_PUT); - draw_string(0, LCD_SIZE_Y - (8*2), "Exit", LCD_COLOR_B, DRAW_PUT); - draw_string(32, LCD_SIZE_Y - (8*2), "Spiel beenden", LCD_COLOR_B, DRAW_PUT); - } - - waitKeyUpDown(); - - if(GI.Moves == 0) - { - if(KEY_Pplus || KEY_Pminus || KEY_Vplus || KEY_Vminus) - { - //Change level - //Program keys +/- 1 - if(KEY_Pplus) - { - GI.Level++; - } - if(KEY_Pminus) - { - GI.Level--; - } - //Volume keys +/- 20 - if(KEY_Vplus) - { - GI.Level += 20; - } - if(KEY_Vminus) - { - GI.Level -= 20; - } - //Wrap around if necessary - if(GI.Level < 1) - { - GI.Level += SOKOBAN_LEVELS; - } - if(GI.Level > SOKOBAN_LEVELS) - { - GI.Level -= SOKOBAN_LEVELS; - } - //New game - goto again; - } - } - if(KEY_0) goto restart; - if(KEY_Exit) return; - } -} - diff --git a/boop/games/sokoban.h b/boop/games/sokoban.h deleted file mode 100644 index fe5621a..0000000 --- a/boop/games/sokoban.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - sokoban.h - game - Copyright (C) 2007 Colibri - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef SOKOBAN_H -#define SOKOBAN_H - -#include "../global.h" - -#define SOKOBAN_MAX_UNDOS 100 -#define SOKOBAN_UNDO_DIR_LEFT 0 -#define SOKOBAN_UNDO_DIR_RIGHT 1 -#define SOKOBAN_UNDO_DIR_UP 2 -#define SOKOBAN_UNDO_DIR_DOWN 3 - -#define SPACE 0 -#define GOAL 1 -#define PUSHER 2 -#define PACKET 4 -#define WALL 8 -#define PUSHER_ON_GOAL (PUSHER | GOAL) -#define PACKET_ON_GOAL (PACKET | GOAL) - -#define SOKOBAN_CELLS_X 21 -#define SOKOBAN_CELLS_Y 19 -//Size without grid -#define SOKOBAN_CELL_SIZE 5 - -struct _SokobanGameInfo -{ - BYTE G[SOKOBAN_CELLS_X][SOKOBAN_CELLS_Y]; - short Level; - int PusherX; - int PusherY; - WORD Moves; - WORD UndoCount; - BYTE UndoBuffer[SOKOBAN_MAX_UNDOS][3]; -}; - -void GameSokoban(void); -void GameSokoban_InitGameField(struct _SokobanGameInfo *pGI); -void GameSokoban_DrawCell(int x, int y, BYTE Object); -BOOL GameSokoban_IsSolved(BYTE G[SOKOBAN_CELLS_X][SOKOBAN_CELLS_Y]); -void GameSokoban_InitDisplayForNewGame(struct _SokobanGameInfo *pGI); -void GameSokoban_Move(struct _SokobanGameInfo *pGI); -void GameSokoban_SaveUndo(struct _SokobanGameInfo *pGI, BYTE Count, BYTE Dir); -void GameSokoban_UndoAMove(struct _SokobanGameInfo *pGI); - - -#endif diff --git a/boop/games/sokoban_levels.h b/boop/games/sokoban_levels.h deleted file mode 100644 index 437c9e1..0000000 --- a/boop/games/sokoban_levels.h +++ /dev/null @@ -1,4968 +0,0 @@ -/* - sokoban.h - game - Copyright (C) 2007 Colibri - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef SOKOBAN_LEVELS_H -#define SOKOBAN_LEVELS_H - -#ifndef DEBUGMODE -#define SOKOBAN_LEVELS 375 -const unsigned char Sokoban_Levels[] = { -//Level: 1 -0x13, 0x0B,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // ##### -0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // # # -0x00, 0x00, 0x84, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // #$ # -0x00, 0x88, 0x80, 0x04, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // ### $## -0x00, 0x80, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, // # $ $ # -0x88, 0x80, 0x80, 0x88, 0x08, 0x00, 0x08, 0x88, 0x88, 0x80, //### # ## # ###### -0x80, 0x00, 0x80, 0x88, 0x08, 0x88, 0x88, 0x00, 0x11, 0x80, //# # ## ##### ..# -0x80, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x80, //# $ $ ..# -0x88, 0x88, 0x80, 0x88, 0x80, 0x82, 0x88, 0x00, 0x11, 0x80, //##### ### #@## ..# -0x00, 0x00, 0x80, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // # ######### -0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ####### -//Level: 2 -0x0E, 0x0A,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //############ -0x81, 0x10, 0x08, 0x00, 0x00, 0x08, 0x88, //#.. # ### -0x81, 0x10, 0x08, 0x04, 0x00, 0x40, 0x08, //#.. # $ $ # -0x81, 0x10, 0x08, 0x48, 0x88, 0x80, 0x08, //#.. #$#### # -0x81, 0x10, 0x00, 0x02, 0x08, 0x80, 0x08, //#.. @ ## # -0x81, 0x10, 0x08, 0x08, 0x00, 0x40, 0x88, //#.. # # $ ## -0x88, 0x88, 0x88, 0x08, 0x84, 0x04, 0x08, //###### ##$ $ # -0x00, 0x80, 0x40, 0x04, 0x04, 0x04, 0x08, // # $ $ $ $ # -0x00, 0x80, 0x00, 0x08, 0x00, 0x00, 0x08, // # # # -0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, // ############ -//Level: 3 -0x11, 0x0A,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, // ######## -0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x28, 0x00, // # @# -0x00, 0x00, 0x00, 0x00, 0x80, 0x48, 0x40, 0x88, 0x00, // # $#$ ## -0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x04, 0x80, 0x00, // # $ $# -0x00, 0x00, 0x00, 0x00, 0x88, 0x40, 0x40, 0x80, 0x00, // ##$ $ # -0x88, 0x88, 0x88, 0x88, 0x80, 0x40, 0x80, 0x88, 0x80, //######### $ # ### -0x81, 0x11, 0x10, 0x08, 0x80, 0x40, 0x04, 0x00, 0x80, //#.... ## $ $ # -0x88, 0x11, 0x10, 0x00, 0x04, 0x00, 0x40, 0x00, 0x80, //##... $ $ # -0x81, 0x11, 0x10, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, //#.... ########## -0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //######## -//Level: 4 -0x0B, 0x0A,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //########### -0x80, 0x00, 0x08, 0x00, 0x00, 0x80, //# # # -0x80, 0x42, 0x44, 0x44, 0x40, 0x80, //# $@$$$$$ # -0x80, 0x00, 0x00, 0x00, 0x00, 0x80, //# # -0x88, 0x88, 0x80, 0x88, 0x88, 0x80, //##### ##### -0x00, 0x08, 0x10, 0x08, 0x00, 0x00, // #. # -0x00, 0x08, 0x10, 0x08, 0x00, 0x00, // #. # -0x00, 0x08, 0x11, 0x18, 0x00, 0x00, // #...# -0x00, 0x08, 0x10, 0x08, 0x00, 0x00, // #. # -0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // ##### -//Level: 5 -0x0E, 0x0D,//Size x and y -0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, //###### ##### -0x80, 0x00, 0x08, 0x00, 0x80, 0x00, 0x80, //# # # # -0x80, 0x40, 0x08, 0x88, 0x80, 0x40, 0x80, //# $ #### $ # -0x80, 0x40, 0x00, 0x00, 0x04, 0x00, 0x80, //# $ $ # -0x80, 0x08, 0x88, 0x28, 0x88, 0x40, 0x80, //# ###@###$ # -0x88, 0x88, 0x88, 0x88, 0x88, 0x08, 0x88, //########## ### -0x81, 0x10, 0x00, 0x88, 0x00, 0x00, 0x08, //#.. ## # -0x81, 0x10, 0x00, 0x88, 0x40, 0x00, 0x08, //#.. ##$ # -0x81, 0x10, 0x00, 0x88, 0x04, 0x00, 0x08, //#.. ## $ # -0x81, 0x10, 0x00, 0x88, 0x04, 0x00, 0x08, //#.. ## $ # -0x81, 0x10, 0x00, 0x00, 0x40, 0x40, 0x08, //#.. $ $ # -0x88, 0x80, 0x08, 0x88, 0x88, 0x88, 0x88, //### ######### -0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #### -//Level: 6 -0x0B, 0x10,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //########### -0x80, 0x00, 0x00, 0x80, 0x00, 0x80, //# # # -0x80, 0x00, 0x40, 0x04, 0x00, 0x80, //# $ $ # -0x88, 0x88, 0x80, 0x80, 0x00, 0x80, //##### # # -0x88, 0x88, 0x80, 0x88, 0x81, 0x80, //##### ###.# -0x80, 0x08, 0x00, 0x00, 0x81, 0x80, //# # #.# -0x80, 0x40, 0x00, 0x40, 0x81, 0x80, //# $ $ #.# -0x80, 0x08, 0x88, 0x08, 0x81, 0x80, //# ### ##.# -0x88, 0x08, 0x88, 0x00, 0x81, 0x80, //## ### #.# -0x80, 0x40, 0x00, 0x40, 0x81, 0x80, //# $ $ #.# -0x80, 0x00, 0x88, 0x00, 0x81, 0x80, //# ## #.# -0x88, 0x80, 0x88, 0x88, 0x81, 0x80, //### #####.# -0x88, 0x80, 0x80, 0x00, 0x20, 0x80, //### # @ # -0x80, 0x04, 0x00, 0x00, 0x40, 0x80, //# $ $ # -0x80, 0x00, 0x08, 0x80, 0x00, 0x80, //# ## # -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //########### -//Level: 7 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x02, 0x88, //#### @## -0x88, 0x88, 0x00, 0x08, //#### # -0x81, 0x08, 0x44, 0x08, //#. #$$ # -0x80, 0x00, 0x00, 0x88, //# ## -0x81, 0x00, 0x48, 0x88, //#. $### -0x88, 0x10, 0x08, 0x88, //##. ### -0x88, 0x88, 0x88, 0x88, //######## -//Level: 8 -0x0C, 0x06,//Size x and y -0x08, 0x88, 0x80, 0x08, 0x88, 0x88, // #### ##### -0x88, 0x00, 0x80, 0x08, 0x00, 0x08, //## # # # -0x80, 0x40, 0x88, 0x88, 0x40, 0x08, //# $ ####$ # -0x80, 0x04, 0x11, 0x11, 0x04, 0x08, //# $.... $ # -0x88, 0x00, 0x00, 0x80, 0x20, 0x88, //## # @ ## -0x08, 0x88, 0x88, 0x88, 0x88, 0x80, // ########## -//Level: 9 -0x07, 0x06,//Size x and y -0x88, 0x88, 0x88, 0x80, //####### -0x80, 0x04, 0x01, 0x80, //# $ .# -0x80, 0x02, 0x40, 0x80, //# @$ # -0x80, 0x08, 0x41, 0x80, //# #$.# -0x80, 0x01, 0x08, 0x80, //# . ## -0x88, 0x88, 0x88, 0x00, //###### -//Level: 10 -0x07, 0x08,//Size x and y -0x00, 0x88, 0x88, 0x00, // #### -0x88, 0x80, 0x08, 0x80, //### ## -0x80, 0x00, 0x40, 0x80, //# $ # -0x80, 0x81, 0x82, 0x80, //# #.#@# -0x80, 0x84, 0x01, 0x80, //# #$ .# -0x80, 0x01, 0x40, 0x80, //# .$ # -0x88, 0x00, 0x08, 0x80, //## ## -0x08, 0x88, 0x88, 0x00, // ##### -//Level: 11 -0x09, 0x09,//Size x and y -0x88, 0x88, 0x00, 0x00, 0x00, //#### -0x80, 0x08, 0x88, 0x80, 0x00, //# #### -0x80, 0x00, 0x00, 0x88, 0x80, //# ### -0x80, 0x08, 0x40, 0x10, 0x80, //# #$ . # -0x88, 0x08, 0x18, 0x40, 0x80, //## #.#$ # -0x80, 0x08, 0x02, 0x50, 0x80, //# # @* # -0x80, 0x00, 0x50, 0x08, 0x80, //# * ## -0x88, 0x88, 0x00, 0x88, 0x00, //#### ## -0x00, 0x08, 0x88, 0x80, 0x00, // #### -//Level: 12 -0x09, 0x08,//Size x and y -0x00, 0x88, 0x88, 0x00, 0x00, // #### -0x00, 0x82, 0x08, 0x00, 0x00, // #@ # -0x88, 0x80, 0x08, 0x88, 0x80, //### #### -0x80, 0x01, 0x50, 0x00, 0x80, //# .* # -0x80, 0x41, 0x10, 0x40, 0x80, //# $.. $ # -0x88, 0x80, 0x48, 0x88, 0x80, //### $#### -0x00, 0x80, 0x08, 0x00, 0x00, // # # -0x00, 0x88, 0x88, 0x00, 0x00, // #### -//Level: 13 -0x0D, 0x11,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x00, 0x00, 0x00, // ### -0x00, 0x00, 0x88, 0x18, 0x80, 0x00, 0x00, // ##.## -0x00, 0x00, 0x81, 0x11, 0x80, 0x00, 0x00, // #...# -0x00, 0x88, 0x81, 0x12, 0x88, 0x80, 0x00, // ###..@### -0x00, 0x80, 0x01, 0x11, 0x00, 0x80, 0x00, // # ... # -0x88, 0x80, 0x88, 0x18, 0x80, 0x88, 0x80, //### ##.## ### -0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, //# $ # -0x80, 0x08, 0x00, 0x40, 0x08, 0x00, 0x80, //# # $ # # -0x88, 0x48, 0x48, 0x88, 0x48, 0x48, 0x80, //##$#$###$#$## -0x80, 0x08, 0x00, 0x40, 0x08, 0x00, 0x80, //# # $ # # -0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, //# $ # -0x88, 0x80, 0x08, 0x08, 0x00, 0x88, 0x80, //### # # ### -0x00, 0x80, 0x88, 0x08, 0x80, 0x80, 0x00, // # ## ## # -0x00, 0x80, 0x04, 0x04, 0x00, 0x80, 0x00, // # $ $ # -0x00, 0x80, 0x88, 0x08, 0x80, 0x80, 0x00, // # ## ## # -0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, // # # -0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // ######### -//Level: 14 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x80, 0x21, 0x80, 0x08, //# @.# # -0x80, 0x14, 0x01, 0x08, //# .$ . # -0x80, 0x08, 0x40, 0x08, //# #$ # -0x80, 0x04, 0x00, 0x88, //# $ ## -0x88, 0x80, 0x08, 0x80, //### ## -0x00, 0x80, 0x08, 0x00, // # # -0x00, 0x88, 0x88, 0x00, // #### -//Level: 15 -0x09, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x00, //######## -0x80, 0x00, 0x00, 0x08, 0x00, //# # -0x80, 0x84, 0x40, 0x08, 0x00, //# #$$ # -0x80, 0x11, 0x18, 0x08, 0x00, //# ...# # -0x88, 0x11, 0x14, 0x08, 0x80, //##...$ ## -0x08, 0x08, 0x80, 0x40, 0x80, // # ## $ # -0x08, 0x40, 0x04, 0x00, 0x80, // #$ $ # -0x08, 0x00, 0x80, 0x02, 0x80, // # # @# -0x08, 0x88, 0x88, 0x88, 0x80, // ######## -//Level: 16 -0x0B, 0x09,//Size x and y -0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // ##### -0x00, 0x80, 0x00, 0x80, 0x00, 0x00, // # # -0x88, 0x84, 0x14, 0x88, 0x88, 0x80, //###$.$##### -0x80, 0x00, 0x10, 0x40, 0x00, 0x80, //# . $ # -0x80, 0x88, 0x48, 0x80, 0x20, 0x80, //# ##$## @ # -0x80, 0x00, 0x10, 0x88, 0x88, 0x80, //# . ##### -0x88, 0x80, 0x10, 0x80, 0x00, 0x00, //### . # -0x00, 0x80, 0x00, 0x80, 0x00, 0x00, // # # -0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // ##### -//Level: 17 -0x0C, 0x0B,//Size x and y -0x88, 0x88, 0x88, 0x00, 0x88, 0x80, //###### ### -0x81, 0x10, 0x08, 0x08, 0x82, 0x88, //#.. # ##@## -0x81, 0x10, 0x08, 0x88, 0x00, 0x08, //#.. ### # -0x81, 0x10, 0x00, 0x00, 0x44, 0x08, //#.. $$ # -0x81, 0x10, 0x08, 0x08, 0x04, 0x08, //#.. # # $ # -0x81, 0x18, 0x88, 0x08, 0x04, 0x08, //#..### # $ # -0x88, 0x88, 0x04, 0x08, 0x40, 0x08, //#### $ #$ # -0x00, 0x08, 0x00, 0x48, 0x04, 0x08, // # $# $ # -0x00, 0x08, 0x04, 0x00, 0x40, 0x08, // # $ $ # -0x00, 0x08, 0x00, 0x88, 0x00, 0x08, // # ## # -0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // ######### -//Level: 18 -0x10, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //####### -0x80, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, //# ########## -0x80, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x88, //# # # ## -0x80, 0x40, 0x00, 0x80, 0x00, 0x40, 0x40, 0x08, //# $ # $ $ # -0x80, 0x04, 0x00, 0x80, 0x04, 0x08, 0x80, 0x08, //# $ # $ ## # -0x80, 0x44, 0x00, 0x88, 0x40, 0x40, 0x00, 0x08, //# $$ ##$ $ # -0x88, 0x08, 0x00, 0x88, 0x08, 0x88, 0x88, 0x88, //## # ## ####### -0x88, 0x08, 0x00, 0x88, 0x00, 0x00, 0x11, 0x18, //## # ## ...# -0x80, 0x08, 0x40, 0x00, 0x00, 0x00, 0x11, 0x18, //# #$ ...# -0x80, 0x00, 0x44, 0x00, 0x00, 0x00, 0x11, 0x18, //# $$ ...# -0x80, 0x00, 0x00, 0x88, 0x28, 0x00, 0x11, 0x18, //# ##@# ...# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //################ -//Level: 19 -0x0D, 0x0C,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ############ -0x08, 0x00, 0x00, 0x10, 0x80, 0x00, 0x80, // # . # # -0x08, 0x00, 0x04, 0x50, 0x80, 0x40, 0x80, // # $* # $ # -0x08, 0x00, 0x08, 0x10, 0x80, 0x88, 0x80, // # #. # ### -0x08, 0x00, 0x88, 0x18, 0x00, 0x08, 0x00, // # ##.# # -0x88, 0x00, 0x88, 0x18, 0x04, 0x08, 0x80, //## ##.# $ ## -0x80, 0x00, 0x80, 0x18, 0x48, 0x00, 0x80, //# # .#$# # -0x80, 0x20, 0x80, 0x10, 0x00, 0x40, 0x80, //# @ # . $ # -0x80, 0x08, 0x80, 0x54, 0x48, 0x00, 0x80, //# ## *$$# # -0x80, 0x00, 0x80, 0x10, 0x00, 0x08, 0x80, //# # . ## -0x80, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, //# ######## -0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //##### -//Level: 20 -0x0D, 0x0C,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x00, // ####### -0x00, 0x00, 0x08, 0x00, 0x80, 0x08, 0x00, // # # # -0x00, 0x00, 0x08, 0x00, 0x44, 0x08, 0x00, // # $$ # -0x88, 0x88, 0x88, 0x04, 0x80, 0x08, 0x00, //###### $# # -0x81, 0x11, 0x88, 0x80, 0x80, 0x08, 0x80, //#...### # ## -0x81, 0x00, 0x80, 0x04, 0x08, 0x00, 0x80, //#. # $ # # -0x81, 0x00, 0x00, 0x40, 0x40, 0x40, 0x80, //#. $ $ $ # -0x81, 0x00, 0x80, 0x04, 0x08, 0x00, 0x80, //#. # $ # # -0x81, 0x11, 0x88, 0x80, 0x80, 0x08, 0x80, //#...### # ## -0x88, 0x88, 0x88, 0x04, 0x00, 0x08, 0x00, //###### $ # -0x00, 0x00, 0x08, 0x20, 0x80, 0x08, 0x00, // #@ # # -0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x00, // ####### -//Level: 21 -0x08, 0x08,//Size x and y -0x00, 0x88, 0x88, 0x00, // #### -0x00, 0x81, 0x18, 0x00, // #..# -0x08, 0x80, 0x18, 0x80, // ## .## -0x08, 0x00, 0x41, 0x80, // # $.# -0x88, 0x04, 0x00, 0x88, //## $ ## -0x80, 0x08, 0x44, 0x08, //# #$$ # -0x80, 0x02, 0x00, 0x08, //# @ # -0x88, 0x88, 0x88, 0x88, //######## -//Level: 22 -0x09, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, //######### -0x88, 0x00, 0x00, 0x08, 0x80, //## ## -0x80, 0x81, 0x40, 0x40, 0x80, //# #.$ $ # -0x80, 0x15, 0x14, 0x00, 0x80, //# .*.$ # -0x80, 0x41, 0x81, 0x40, 0x80, //# $.#.$ # -0x80, 0x04, 0x18, 0x10, 0x80, //# $.#. # -0x80, 0x40, 0x41, 0x80, 0x80, //# $ $.# # -0x88, 0x00, 0x20, 0x08, 0x80, //## @ ## -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 23 -0x10, 0x0C,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // ######### -0x88, 0x88, 0x88, 0x88, 0x28, 0x80, 0x01, 0x18, //########@## ..# -0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x18, //# $ ..# -0x80, 0x40, 0x84, 0x08, 0x48, 0x80, 0x01, 0x18, //# $ #$ #$## ..# -0x88, 0x08, 0x80, 0x00, 0x08, 0x88, 0x81, 0x18, //## ## ####..# -0x08, 0x04, 0x04, 0x88, 0x08, 0x00, 0x88, 0x88, // # $ $## # #### -0x08, 0x08, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, // # ## # # -0x88, 0x08, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, //## # ## -0x80, 0x04, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, //# $ ## -0x80, 0x08, 0x84, 0x08, 0x00, 0x00, 0x00, 0x00, //# ##$ # -0x80, 0x08, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, //# ## # -0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //######## -//Level: 24 -0x0F, 0x09,//Size x and y -0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ##### -0x00, 0x80, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // # ######### -0x00, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 0x80, // # $ $ # -0x88, 0x88, 0x80, 0x04, 0x08, 0x44, 0x00, 0x80, //##### $ #$$ # -0x80, 0x00, 0x80, 0x88, 0x00, 0x00, 0x88, 0x80, //# # ## ### -0x81, 0x11, 0x00, 0x08, 0x80, 0x04, 0x80, 0x00, //#... ## $# -0x81, 0x11, 0x84, 0x40, 0x04, 0x00, 0x80, 0x00, //#...#$$ $ # -0x81, 0x11, 0x80, 0x02, 0x80, 0x08, 0x80, 0x00, //#...# @# ## -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, //############ -//Level: 25 -0x09, 0x08,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x00, // ####### -0x08, 0x02, 0x11, 0x18, 0x00, // # @...# -0x08, 0x00, 0x08, 0x88, 0x80, // # #### -0x88, 0x84, 0x00, 0x00, 0x80, //###$ # -0x80, 0x00, 0x84, 0x80, 0x80, //# #$# # -0x80, 0x40, 0x80, 0x00, 0x80, //# $ # # -0x80, 0x00, 0x88, 0x88, 0x80, //# ##### -0x88, 0x88, 0x80, 0x00, 0x00, //##### -//Level: 26 -0x0F, 0x0D,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, //# # # # -0x80, 0x44, 0x00, 0x40, 0x00, 0x40, 0x40, 0x80, //# $$ $ $ $ # -0x80, 0x04, 0x08, 0x88, 0x88, 0x80, 0x80, 0x80, //# $ ###### # # -0x80, 0x44, 0x08, 0x20, 0x08, 0x00, 0x40, 0x80, //# $$ #@ # $ # -0x80, 0x00, 0x08, 0x00, 0x40, 0x00, 0x08, 0x80, //# # $ ## -0x88, 0x88, 0x88, 0x48, 0x80, 0x08, 0x81, 0x80, //######$## ##.# -0x08, 0x00, 0x08, 0x04, 0x00, 0x08, 0x11, 0x80, // # # $ #..# -0x08, 0x00, 0x00, 0x40, 0x00, 0x81, 0x11, 0x80, // # $ #...# -0x08, 0x80, 0x88, 0x88, 0x08, 0x01, 0x11, 0x80, // ## #### # ...# -0x08, 0x00, 0x40, 0x00, 0x45, 0x11, 0x11, 0x80, // # $ $*....# -0x08, 0x00, 0x08, 0x00, 0x08, 0x10, 0x01, 0x80, // # # #. .# -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ############## -//Level: 27 -0x09, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x00, 0x00, //###### -0x80, 0x00, 0x08, 0x00, 0x00, //# # -0x80, 0x44, 0x48, 0x80, 0x00, //# $$$## -0x80, 0x08, 0x11, 0x88, 0x80, //# #..### -0x88, 0x00, 0x11, 0x40, 0x80, //## ..$ # -0x08, 0x02, 0x00, 0x00, 0x80, // # @ # -0x08, 0x88, 0x88, 0x88, 0x80, // ######## -//Level: 28 -0x0E, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x00, 0x08, 0x88, 0x88, //###### ##### -0x80, 0x00, 0x08, 0x88, 0x08, 0x00, 0x18, //# ### # .# -0x80, 0x04, 0x04, 0x08, 0x08, 0x11, 0x18, //# $ $ # #...# -0x80, 0x80, 0x04, 0x08, 0x88, 0x00, 0x18, //# # $ ### .# -0x80, 0x04, 0x44, 0x00, 0x04, 0x02, 0x18, //# $$$ $ @.# -0x88, 0x80, 0x04, 0x00, 0x48, 0x00, 0x18, //### $ $# .# -0x00, 0x80, 0x04, 0x84, 0x08, 0x11, 0x18, // # $#$ #...# -0x00, 0x88, 0x00, 0x00, 0x08, 0x00, 0x18, // ## # .# -0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, // ########### -//Level: 29 -0x09, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x80, 0x00, //####### -0x80, 0x01, 0x40, 0x88, 0x80, //# .$ ### -0x80, 0x14, 0x14, 0x00, 0x80, //# .$.$ # -0x85, 0x41, 0x41, 0x20, 0x80, //#*$.$.@ # -0x80, 0x14, 0x14, 0x08, 0x80, //# .$.$ ## -0x80, 0x01, 0x40, 0x08, 0x00, //# .$ # -0x88, 0x88, 0x88, 0x88, 0x00, //######## -//Level: 30 -0x0A, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, //######### -0x81, 0x11, 0x88, 0x00, 0x80, //#...## # -0x81, 0x51, 0x00, 0x42, 0x80, //#.*. $@# -0x80, 0x04, 0x80, 0x08, 0x80, //# $# ## -0x88, 0x80, 0x88, 0x08, 0x88, //### ## ### -0x80, 0x00, 0x40, 0x00, 0x08, //# $ # -0x80, 0x04, 0x88, 0x48, 0x08, //# $##$# # -0x80, 0x00, 0x04, 0x00, 0x18, //# $ .# -0x88, 0x88, 0x88, 0x88, 0x88, //########## -//Level: 31 -0x08, 0x07,//Size x and y -0x00, 0x88, 0x88, 0x80, // ##### -0x88, 0x80, 0x02, 0x80, //### @# -0x80, 0x04, 0x10, 0x88, //# $. ## -0x80, 0x01, 0x41, 0x08, //# .$. # -0x88, 0x80, 0x54, 0x08, //### *$ # -0x00, 0x80, 0x00, 0x88, // # ## -0x00, 0x88, 0x88, 0x80, // ##### -//Level: 32 -0x0E, 0x0D,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, // #### -0x88, 0x88, 0x88, 0x88, 0x00, 0x88, 0x88, //######## #### -0x80, 0x00, 0x88, 0x11, 0x11, 0x10, 0x08, //# ##..... # -0x80, 0x04, 0x00, 0x88, 0x11, 0x18, 0x08, //# $ ##...# # -0x88, 0x00, 0x40, 0x08, 0x88, 0x08, 0x08, //## $ ### # # -0x08, 0x08, 0x04, 0x00, 0x80, 0x00, 0x08, // # # $ # # -0x08, 0x00, 0x80, 0x40, 0x08, 0x00, 0x08, // # # $ # # -0x08, 0x00, 0x08, 0x04, 0x00, 0x80, 0x08, // # # $ # # -0x08, 0x00, 0x00, 0x80, 0x40, 0x80, 0x88, // # # $ # ## -0x08, 0x88, 0x80, 0x08, 0x04, 0x00, 0x80, // #### # $ # -0x00, 0x00, 0x88, 0x00, 0x80, 0x40, 0x80, // ## # $ # -0x00, 0x00, 0x08, 0x82, 0x80, 0x00, 0x80, // ##@# # -0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // ####### -//Level: 33 -0x0A, 0x08,//Size x and y -0x00, 0x88, 0x88, 0x80, 0x00, // ##### -0x88, 0x80, 0x00, 0x88, 0x88, //### #### -0x80, 0x00, 0x40, 0x40, 0x08, //# $ $ # -0x80, 0x40, 0x00, 0x40, 0x28, //# $ $ @# -0x88, 0x84, 0x48, 0x88, 0x88, //###$$##### -0x00, 0x80, 0x01, 0x18, 0x00, // # ..# -0x00, 0x81, 0x11, 0x18, 0x00, // #....# -0x00, 0x88, 0x88, 0x88, 0x00, // ###### -//Level: 34 -0x09, 0x0C,//Size x and y -0x88, 0x88, 0x08, 0x88, 0x80, //#### #### -0x80, 0x08, 0x88, 0x00, 0x80, //# ### # -0x80, 0x00, 0x04, 0x00, 0x80, //# $ # -0x80, 0x08, 0x08, 0x00, 0x80, //# # # # -0x88, 0x08, 0x08, 0x48, 0x80, //## # #$## -0x80, 0x08, 0x18, 0x00, 0x80, //# #.# # -0x80, 0x05, 0x15, 0x02, 0x80, //# *.* @# -0x80, 0x08, 0x18, 0x08, 0x80, //# #.# ## -0x88, 0x88, 0x00, 0x08, 0x00, //#### # -0x00, 0x08, 0x08, 0x48, 0x00, // # #$# -0x00, 0x08, 0x00, 0x08, 0x00, // # # -0x00, 0x08, 0x88, 0x88, 0x00, // ##### -//Level: 35 -0x0A, 0x06,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, //######### -0x80, 0x40, 0x11, 0x00, 0x80, //# $ .. # -0x82, 0x44, 0x11, 0x04, 0x88, //#@$$.. $## -0x80, 0x40, 0x11, 0x04, 0x08, //# $ .. $ # -0x88, 0x88, 0x88, 0x00, 0x08, //###### # -0x00, 0x00, 0x08, 0x88, 0x88, // ##### -//Level: 36 -0x0F, 0x07,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ###### -0x88, 0x88, 0x80, 0x00, 0x08, 0x88, 0x88, 0x80, //##### ###### -0x80, 0x00, 0x80, 0x00, 0x20, 0x08, 0x00, 0x80, //# # @ # # -0x80, 0x04, 0x15, 0x55, 0x55, 0x51, 0x40, 0x80, //# $.******.$ # -0x88, 0x88, 0x00, 0x00, 0x80, 0x08, 0x00, 0x80, //#### # # # -0x00, 0x08, 0x80, 0x00, 0x80, 0x00, 0x08, 0x80, // ## # ## -0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ########## -//Level: 37 -0x09, 0x09,//Size x and y -0x00, 0x88, 0x88, 0x80, 0x00, // ##### -0x88, 0x80, 0x20, 0x88, 0x80, //### @ ### -0x80, 0x04, 0x04, 0x00, 0x80, //# $ $ # -0x80, 0x51, 0x51, 0x50, 0x80, //# *.*.* # -0x80, 0x14, 0x04, 0x10, 0x80, //# .$ $. # -0x80, 0x51, 0x51, 0x50, 0x80, //# *.*.* # -0x80, 0x04, 0x04, 0x00, 0x80, //# $ $ # -0x88, 0x88, 0x88, 0x00, 0x80, //###### # -0x00, 0x00, 0x08, 0x88, 0x80, // #### -//Level: 38 -0x11, 0x0E,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // ####### -0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x11, 0x80, // # ...# -0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x01, 0x11, 0x80, // ##### ...# -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x01, 0x80, // # . .# -0x00, 0x00, 0x00, 0x80, 0x08, 0x80, 0x01, 0x11, 0x80, // # ## ...# -0x00, 0x00, 0x00, 0x88, 0x08, 0x80, 0x01, 0x11, 0x80, // ## ## ...# -0x00, 0x00, 0x08, 0x88, 0x08, 0x88, 0x88, 0x88, 0x80, // ### ######## -0x00, 0x00, 0x08, 0x04, 0x44, 0x08, 0x80, 0x00, 0x00, // # $$$ ## -0x08, 0x88, 0x88, 0x00, 0x40, 0x40, 0x88, 0x88, 0x80, // ##### $ $ ##### -0x88, 0x00, 0x08, 0x40, 0x40, 0x00, 0x80, 0x00, 0x80, //## #$ $ # # -0x82, 0x04, 0x00, 0x40, 0x00, 0x04, 0x00, 0x40, 0x80, //#@ $ $ $ $ # -0x88, 0x88, 0x88, 0x04, 0x40, 0x40, 0x88, 0x88, 0x80, //###### $$ $ ##### -0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // # # -0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ######## -//Level: 39 -0x0A, 0x07,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x80, // ###### -0x08, 0x88, 0x00, 0x00, 0x80, // ### # -0x88, 0x10, 0x48, 0x80, 0x88, //##. $## ## -0x81, 0x14, 0x04, 0x00, 0x28, //#..$ $ @# -0x81, 0x10, 0x40, 0x40, 0x88, //#.. $ $ ## -0x88, 0x88, 0x80, 0x00, 0x80, //##### # -0x00, 0x00, 0x88, 0x88, 0x80, // ##### -//Level: 40 -0x11, 0x0D,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, // ######## -0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x00, // # # -0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x04, 0x08, 0x00, // # $ $ # -0x08, 0x88, 0x88, 0x88, 0x80, 0x40, 0x40, 0x08, 0x00, // ######## $ $ # -0x88, 0x11, 0x10, 0x08, 0x88, 0x80, 0x88, 0x08, 0x00, //##... #### ## # -0x81, 0x11, 0x10, 0x00, 0x00, 0x00, 0x88, 0x08, 0x00, //#.... ## # -0x88, 0x11, 0x10, 0x08, 0x80, 0x44, 0x88, 0x08, 0x80, //##... ## $$## ## -0x08, 0x88, 0x88, 0x88, 0x80, 0x40, 0x00, 0x02, 0x80, // ######## $ @# -0x00, 0x00, 0x00, 0x88, 0x80, 0x88, 0x88, 0x08, 0x80, // ### #### ## -0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x08, 0x00, // # $ $ # -0x00, 0x00, 0x00, 0x80, 0x04, 0x08, 0x88, 0x88, 0x00, // # $ ##### -0x00, 0x00, 0x00, 0x88, 0x00, 0x08, 0x00, 0x00, 0x00, // ## # -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // ##### -//Level: 41 -0x07, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x80, //####### -0x80, 0x00, 0x00, 0x80, //# # -0x80, 0x00, 0x00, 0x80, //# # -0x80, 0x08, 0x00, 0x80, //# # # -0x84, 0x44, 0x44, 0x80, //#$$$$$# -0x81, 0x13, 0x11, 0x80, //#..+..# -0x88, 0x88, 0x88, 0x80, //####### -//Level: 42 -0x0E, 0x0C,//Size x and y -0x08, 0x88, 0x88, 0x80, 0x88, 0x88, 0x80, // ###### ##### -0x88, 0x28, 0x00, 0x88, 0x80, 0x00, 0x88, //##@# ### ## -0x80, 0x00, 0x04, 0x00, 0x80, 0x40, 0x08, //# $ # $ # -0x80, 0x04, 0x00, 0x80, 0x00, 0x04, 0x08, //# $ # $ # -0x88, 0x80, 0x88, 0x88, 0x88, 0x00, 0x08, //### ###### # -0x88, 0x80, 0x88, 0x00, 0x88, 0x48, 0x88, //### ## ##$### -0x80, 0x40, 0x08, 0x88, 0x80, 0x11, 0x80, //# $ #### ..# -0x80, 0x40, 0x40, 0x40, 0x01, 0x11, 0x80, //# $ $ $ ...# -0x80, 0x00, 0x08, 0x88, 0x81, 0x11, 0x80, //# ####...# -0x80, 0x44, 0x08, 0x00, 0x81, 0x11, 0x80, //# $$ # #...# -0x80, 0x08, 0x88, 0x00, 0x88, 0x88, 0x80, //# ### ##### -0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //#### -//Level: 43 -0x07, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x80, //####### -0x80, 0x05, 0x02, 0x80, //# * @# -0x80, 0x45, 0x40, 0x80, //# $*$ # -0x80, 0x01, 0x00, 0x80, //# . # -0x80, 0x45, 0x40, 0x80, //# $*$ # -0x84, 0x15, 0x10, 0x80, //#$.*. # -0x81, 0x01, 0x41, 0x80, //#. .$.# -0x80, 0x41, 0x00, 0x80, //# $. # -0x88, 0x88, 0x88, 0x80, //####### -//Level: 44 -0x13, 0x0C,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ########### -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, // # # -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x40, 0x40, 0x08, 0x00, // # $ $ # -0x88, 0x88, 0x88, 0x08, 0x04, 0x08, 0x88, 0x88, 0x08, 0x00, //###### # $ ##### # -0x80, 0x00, 0x08, 0x88, 0x88, 0x04, 0x00, 0x88, 0x48, 0x00, //# ##### $ ##$# -0x80, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x08, 0x00, //# $ $ # -0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x88, 0x08, 0x00, //# ## ## # -0x80, 0x00, 0x08, 0x82, 0x88, 0x88, 0x80, 0x88, 0x08, 0x00, //# ##@##### ## # -0x80, 0x00, 0x08, 0x88, 0x80, 0x00, 0x80, 0x88, 0x08, 0x80, //# #### # ## ## -0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x80, //#....# # $ # -0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, //#....# # # -0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, //###### ####### -//Level: 45 -0x12, 0x0C,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x88, 0x88, // ##### #### -0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x88, 0x80, 0x08, // # #### # -0x08, 0x88, 0x88, 0x88, 0x08, 0x00, 0x04, 0x04, 0x08, // ####### # $ $ # -0x08, 0x00, 0x08, 0x80, 0x04, 0x08, 0x80, 0x80, 0x08, // # ## $ ## # # -0x08, 0x04, 0x00, 0x01, 0x18, 0x18, 0x80, 0x40, 0x88, // # $ ..#.## $ ## -0x08, 0x04, 0x08, 0x81, 0x11, 0x10, 0x40, 0x80, 0x80, // # $ ##.... $ # # -0x08, 0x08, 0x00, 0x41, 0x11, 0x18, 0x80, 0x40, 0x80, // # # $....## $ # -0x88, 0x44, 0x08, 0x81, 0x81, 0x10, 0x00, 0x40, 0x80, //##$$ ##.#.. $ # -0x80, 0x08, 0x08, 0x80, 0x40, 0x08, 0x80, 0x20, 0x80, //# # ## $ ## @ # -0x80, 0x00, 0x00, 0x40, 0x80, 0x88, 0x88, 0x88, 0x80, //# $ # ####### -0x80, 0x08, 0x88, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, //# #### # -0x88, 0x88, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //#### ##### -//Level: 46 -0x0A, 0x07,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x00, // ####### -0x08, 0x00, 0x00, 0x08, 0x88, // # ### -0x88, 0x48, 0x88, 0x00, 0x08, //##$### # -0x80, 0x20, 0x40, 0x04, 0x08, //# @ $ $ # -0x80, 0x11, 0x80, 0x40, 0x88, //# ..# $ ## -0x88, 0x11, 0x80, 0x00, 0x80, //##..# # -0x08, 0x88, 0x88, 0x88, 0x80, // ######## -//Level: 47 -0x11, 0x0C,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ######## -0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // # # -0x00, 0x80, 0x04, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // # $ ##### -0x00, 0x88, 0x88, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, // #### $ # -0x00, 0x80, 0x08, 0x84, 0x80, 0x40, 0x08, 0x00, 0x00, // # ##$# $ # -0x00, 0x80, 0x00, 0x02, 0x80, 0x80, 0x88, 0x88, 0x80, // # @# # ##### -0x08, 0x80, 0x88, 0x04, 0x04, 0x04, 0x40, 0x00, 0x80, // ## ## $ $ $$ # -0x08, 0x00, 0x08, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, // # # # # # -0x88, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //## ############ -0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#....# -0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#....# -0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //###### -//Level: 48 -0x0F, 0x0D,//Size x and y -0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // ######### -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, // # # -0x00, 0x00, 0x00, 0x84, 0x04, 0x44, 0x00, 0x80, // #$ $$$ # -0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x40, 0x80, // # # $ # -0x00, 0x00, 0x00, 0x80, 0x00, 0x42, 0x40, 0x80, // # $@$ # -0x00, 0x00, 0x88, 0x84, 0x04, 0x08, 0x08, 0x80, // ###$ $ # ## -0x00, 0x00, 0x80, 0x00, 0x48, 0x48, 0x08, 0x00, // # $#$# # -0x88, 0x88, 0x80, 0x80, 0x08, 0x00, 0x08, 0x00, //##### # # # -0x81, 0x11, 0x00, 0x80, 0x48, 0x08, 0x88, 0x00, //#... # $# ### -0x81, 0x11, 0x11, 0x00, 0x08, 0x08, 0x00, 0x00, //#..... # # -0x81, 0x11, 0x11, 0x80, 0x48, 0x08, 0x00, 0x00, //#.....# $# # -0x88, 0x88, 0x88, 0x88, 0x00, 0x08, 0x00, 0x00, //######## # -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // ##### -//Level: 49 -0x0C, 0x07,//Size x and y -0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // ##### -0x00, 0x80, 0x00, 0x88, 0x88, 0x88, // # ###### -0x88, 0x84, 0x81, 0x00, 0x00, 0x08, //###$#. # -0x80, 0x40, 0x11, 0x18, 0x04, 0x08, //# $ ...# $ # -0x82, 0x04, 0x18, 0x54, 0x00, 0x08, //#@ $.#*$ # -0x88, 0x88, 0x00, 0x00, 0x88, 0x88, //#### #### -0x00, 0x08, 0x88, 0x88, 0x80, 0x00, // ###### -//Level: 50 -0x07, 0x07,//Size x and y -0x08, 0x88, 0x88, 0x80, // ###### -0x88, 0x01, 0x02, 0x80, //## . @# -0x80, 0x40, 0x40, 0x80, //# $ $ # -0x81, 0x05, 0x01, 0x80, //#. * .# -0x80, 0x40, 0x40, 0x80, //# $ $ # -0x80, 0x01, 0x08, 0x80, //# . ## -0x88, 0x88, 0x88, 0x00, //###### -//Level: 51 -0x08, 0x07,//Size x and y -0x00, 0x00, 0x88, 0x88, // #### -0x00, 0x00, 0x82, 0x08, // #@ # -0x88, 0x88, 0x80, 0x18, //##### .# -0x80, 0x40, 0x40, 0x48, //# $ $ $# -0x80, 0x00, 0x10, 0x08, //# . # -0x88, 0x80, 0x10, 0x08, //### . # -0x00, 0x88, 0x88, 0x88, // ###### -//Level: 52 -0x13, 0x0D,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ################# -0x88, 0x82, 0x88, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x80, //###@## ...# -0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x80, //# # ...# -0x80, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x80, //# $ # ...# -0x80, 0x44, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x80, //# $$ # ...# -0x88, 0x04, 0x08, 0x88, 0x48, 0x88, 0x88, 0x88, 0x88, 0x80, //## $ ###$########## -0x08, 0x08, 0x88, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, // # ### $ # -0x88, 0x00, 0x04, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, //## $ $ # -0x80, 0x04, 0x08, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, //# $ # $ # -0x80, 0x40, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //# $ # # -0x80, 0x04, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //# $ # # -0x80, 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //# # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //########### -//Level: 53 -0x10, 0x0C,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ###### -0x00, 0x08, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, // # ## -0x00, 0x08, 0x04, 0x04, 0x08, 0x80, 0x00, 0x00, // # $ $ ## -0x88, 0x88, 0x08, 0x48, 0x00, 0x88, 0x88, 0x00, //#### #$# #### -0x80, 0x40, 0x00, 0x04, 0x00, 0x80, 0x08, 0x88, //# $ $ # ### -0x80, 0x00, 0x04, 0x08, 0x04, 0x11, 0x11, 0x18, //# $ # $.....# -0x88, 0x80, 0x80, 0x88, 0x88, 0x11, 0x11, 0x18, //### # ####.....# -0x08, 0x80, 0x84, 0x04, 0x00, 0x11, 0x88, 0x88, // ## #$ $ ..#### -0x08, 0x00, 0x80, 0x00, 0x48, 0x00, 0x80, 0x00, // # # $# # -0x08, 0x24, 0x00, 0x40, 0x08, 0x88, 0x80, 0x00, // #@$ $ #### -0x08, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // # ###### -0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // #### -//Level: 54 -0x0C, 0x06,//Size x and y -0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // #### -0x00, 0x00, 0x00, 0x80, 0x08, 0x88, // # ### -0x88, 0x88, 0x88, 0x80, 0x00, 0x08, //####### # -0x80, 0x40, 0x51, 0x05, 0x14, 0x28, //# $ *. *.$@# -0x80, 0x00, 0x00, 0x80, 0x00, 0x08, //# # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############ -//Level: 55 -0x0D, 0x0C,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, // ##### -0x08, 0x88, 0x88, 0x88, 0x00, 0x08, 0x80, // ####### ## -0x88, 0x08, 0x02, 0x88, 0x04, 0x40, 0x80, //## # @## $$ # -0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, //# $ # -0x80, 0x04, 0x00, 0x88, 0x80, 0x00, 0x80, //# $ ### # -0x88, 0x80, 0x88, 0x88, 0x84, 0x88, 0x80, //### #####$### -0x80, 0x40, 0x08, 0x88, 0x01, 0x18, 0x00, //# $ ### ..# -0x80, 0x40, 0x40, 0x40, 0x11, 0x18, 0x00, //# $ $ $ ...# -0x80, 0x00, 0x08, 0x88, 0x11, 0x18, 0x00, //# ###...# -0x80, 0x44, 0x08, 0x08, 0x11, 0x18, 0x00, //# $$ # #...# -0x80, 0x08, 0x88, 0x08, 0x88, 0x88, 0x00, //# ### ##### -0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //#### -//Level: 56 -0x0D, 0x0F,//Size x and y -0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, // #### -0x00, 0x88, 0x88, 0x80, 0x08, 0x00, 0x00, // ##### # -0x08, 0x80, 0x00, 0x00, 0x48, 0x00, 0x00, // ## $# -0x88, 0x04, 0x00, 0x88, 0x08, 0x88, 0x00, //## $ ## ### -0x82, 0x40, 0x40, 0x80, 0x40, 0x08, 0x00, //#@$ $ # $ # -0x88, 0x88, 0x08, 0x80, 0x00, 0x48, 0x00, //#### ## $# -0x08, 0x11, 0x11, 0x84, 0x04, 0x08, 0x00, // #....#$ $ # -0x08, 0x11, 0x11, 0x80, 0x00, 0x48, 0x00, // #....# $# -0x08, 0x11, 0x11, 0x00, 0x44, 0x08, 0x80, // #.... $$ ## -0x08, 0x11, 0x10, 0x80, 0x40, 0x00, 0x80, // #... # $ # -0x08, 0x88, 0x88, 0x84, 0x04, 0x00, 0x80, // ######$ $ # -0x00, 0x00, 0x00, 0x80, 0x00, 0x88, 0x80, // # ### -0x00, 0x00, 0x00, 0x84, 0x08, 0x88, 0x00, // #$ ### -0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, // # # -0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, // #### -//Level: 57 -0x0A, 0x08,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x00, // ####### -0x08, 0x11, 0x11, 0x08, 0x00, // #.... # -0x88, 0x81, 0x11, 0x48, 0x88, //###...$### -0x80, 0x04, 0x84, 0x04, 0x08, //# $#$ $ # -0x80, 0x44, 0x00, 0x84, 0x08, //# $$ #$ # -0x80, 0x00, 0x08, 0x00, 0x08, //# # # -0x88, 0x88, 0x02, 0x08, 0x88, //#### @ ### -0x00, 0x08, 0x88, 0x88, 0x00, // ##### -//Level: 58 -0x0D, 0x0A,//Size x and y -0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, //###### ##### -0x80, 0x00, 0x08, 0x88, 0x80, 0x00, 0x80, //# #### # -0x80, 0x40, 0x00, 0x40, 0x00, 0x80, 0x80, //# $ $ # # -0x88, 0x00, 0x80, 0x88, 0x80, 0x40, 0x80, //## # ### $ # -0x08, 0x44, 0x00, 0x88, 0x84, 0x80, 0x80, // #$$ ###$# # -0x88, 0x00, 0x08, 0x00, 0x11, 0x10, 0x80, //## # ... # -0x80, 0x08, 0x04, 0x00, 0x41, 0x11, 0x80, //# # $ $...# -0x80, 0x08, 0x88, 0x88, 0x11, 0x88, 0x80, //# #####..### -0x80, 0x28, 0x00, 0x08, 0x88, 0x80, 0x00, //# @# #### -0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //#### -//Level: 59 -0x0E, 0x0C,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, // ####### -0x00, 0x00, 0x88, 0x88, 0x11, 0x11, 0x18, // ####.....# -0x88, 0x88, 0x80, 0x00, 0x11, 0x11, 0x18, //##### .....# -0x80, 0x00, 0x80, 0x08, 0x10, 0x11, 0x18, //# # #. ...# -0x80, 0x42, 0x88, 0x08, 0x88, 0x08, 0x88, //# $@## ### ### -0x80, 0x04, 0x00, 0x04, 0x00, 0x44, 0x08, //# $ $ $$ # -0x80, 0x00, 0x84, 0x00, 0x04, 0x00, 0x08, //# #$ $ # -0x80, 0x40, 0x80, 0x88, 0x40, 0x04, 0x08, //# $ # ##$ $ # -0x88, 0x80, 0x00, 0x04, 0x08, 0x80, 0x08, //### $ ## # -0x00, 0x80, 0x40, 0x40, 0x40, 0x00, 0x88, // # $ $ $ ## -0x00, 0x88, 0x80, 0x00, 0x08, 0x88, 0x80, // ### #### -0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, // ###### -//Level: 60 -0x0B, 0x0A,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x80, 0x00, // ###### -0x88, 0x88, 0x80, 0x00, 0x80, 0x00, //##### # -0x80, 0x40, 0x01, 0x00, 0x80, 0x00, //# $ . # -0x80, 0x40, 0x11, 0x88, 0x80, 0x00, //# $ ..### -0x82, 0x40, 0x44, 0x88, 0x80, 0x00, //#@$ $$### -0x88, 0x80, 0x14, 0x10, 0x88, 0x80, //### .$. ### -0x08, 0x84, 0x11, 0x14, 0x00, 0x80, // ##$...$ # -0x08, 0x04, 0x18, 0x80, 0x00, 0x80, // # $.## # -0x08, 0x00, 0x08, 0x88, 0x88, 0x80, // # ###### -0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // ##### -//Level: 61 -0x07, 0x08,//Size x and y -0x88, 0x88, 0x80, 0x00, //##### -0x80, 0x00, 0x88, 0x80, //# ### -0x80, 0x04, 0x00, 0x80, //# $ # -0x88, 0x44, 0x01, 0x80, //##$$ .# -0x08, 0x20, 0x10, 0x80, // #@ . # -0x08, 0x80, 0x80, 0x80, // ## # # -0x00, 0x80, 0x01, 0x80, // # .# -0x00, 0x88, 0x88, 0x80, // ##### -//Level: 62 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x80, 0x00, 0x80, 0x08, //# # # -0x80, 0x81, 0x40, 0x48, //# #.$ $# -0x80, 0x00, 0x40, 0x08, //# $ # -0x88, 0x88, 0x81, 0x08, //#####. # -0x00, 0x80, 0x00, 0x28, // # @# -0x00, 0x80, 0x00, 0x18, // # .# -0x00, 0x88, 0x88, 0x88, // ###### -//Level: 63 -0x08, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x80, 0x08, 0x00, 0x08, //# # # -0x80, 0x41, 0x14, 0x08, //# $..$ # -0x82, 0x41, 0x50, 0x88, //#@$.* ## -0x80, 0x41, 0x14, 0x08, //# $..$ # -0x80, 0x08, 0x00, 0x08, //# # # -0x88, 0x88, 0x88, 0x88, //######## -//Level: 64 -0x0F, 0x0E,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // ##### -0x00, 0x08, 0x88, 0x00, 0x08, 0x00, 0x00, 0x00, // ### # -0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, // # # # -0x08, 0x88, 0x00, 0x40, 0x08, 0x88, 0x88, 0x80, // ### $ ###### -0x08, 0x00, 0x84, 0x80, 0x08, 0x00, 0x00, 0x80, // # #$# # # -0x08, 0x40, 0x40, 0x88, 0x00, 0x04, 0x00, 0x80, // #$ $ ## $ # -0x88, 0x00, 0x80, 0x00, 0x04, 0x44, 0x88, 0x80, //## # $$$### -0x80, 0x00, 0x08, 0x88, 0x40, 0x00, 0x80, 0x00, //# ###$ # -0x80, 0x48, 0x44, 0x11, 0x18, 0x88, 0x80, 0x00, //# $#$$...#### -0x80, 0x00, 0x08, 0x11, 0x11, 0x80, 0x00, 0x00, //# #....# -0x80, 0x80, 0x20, 0x81, 0x11, 0x80, 0x00, 0x00, //# # @ #...# -0x80, 0x00, 0x00, 0x41, 0x11, 0x80, 0x00, 0x00, //# $...# -0x88, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, //## # # -0x08, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ########## -//Level: 65 -0x0B, 0x0A,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, 0x00, //######### -0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //# # -0x80, 0x04, 0x04, 0x04, 0x80, 0x00, //# $ $ $# -0x88, 0x08, 0x48, 0x80, 0x80, 0x00, //## #$## # -0x08, 0x01, 0x10, 0x11, 0x88, 0x00, // # .. ..## -0x08, 0x81, 0x10, 0x11, 0x08, 0x00, // ##.. .. # -0x00, 0x80, 0x88, 0x48, 0x08, 0x80, // # ##$# ## -0x00, 0x84, 0x04, 0x04, 0x00, 0x80, // #$ $ $ # -0x00, 0x80, 0x00, 0x00, 0x02, 0x80, // # @# -0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // ######### -//Level: 66 -0x09, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x00, //######## -0x81, 0x11, 0x11, 0x18, 0x00, //#......# -0x80, 0x04, 0x08, 0x08, 0x80, //# $ # ## -0x80, 0x40, 0x80, 0x40, 0x80, //# $ # $ # -0x88, 0x40, 0x40, 0x40, 0x80, //##$ $ $ # -0x08, 0x00, 0x20, 0x00, 0x80, // # @ # -0x08, 0x88, 0x88, 0x88, 0x80, // ######## -//Level: 67 -0x0A, 0x08,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, // ##### -0x88, 0x88, 0x88, 0x11, 0x18, //######...# -0x80, 0x00, 0x42, 0x04, 0x88, //# $@ $## -0x80, 0x04, 0x08, 0x04, 0x08, //# $ # $ # -0x81, 0x04, 0x08, 0x40, 0x08, //#. $ #$ # -0x80, 0x88, 0x88, 0x08, 0x18, //# #### #.# -0x81, 0x00, 0x00, 0x04, 0x18, //#. $.# -0x88, 0x88, 0x88, 0x88, 0x88, //########## -//Level: 68 -0x0B, 0x07,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x88, 0x80, // ######## -0x88, 0x88, 0x20, 0x00, 0x10, 0x80, //####@ . # -0x80, 0x04, 0x04, 0x04, 0x10, 0x80, //# $ $ $. # -0x80, 0x01, 0x88, 0x80, 0x18, 0x80, //# .### .## -0x80, 0x41, 0x40, 0x40, 0x08, 0x00, //# $.$ $ # -0x80, 0x01, 0x00, 0x88, 0x88, 0x00, //# . #### -0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //####### -//Level: 69 -0x08, 0x08,//Size x and y -0x00, 0x08, 0x88, 0x88, // ##### -0x00, 0x08, 0x02, 0x08, // # @ # -0x08, 0x88, 0x00, 0x08, // ### # -0x08, 0x04, 0x04, 0x88, // # $ $## -0x88, 0x04, 0x00, 0x80, //## $ # -0x81, 0x00, 0x80, 0x80, //#. # # -0x81, 0x10, 0x00, 0x80, //#.. # -0x88, 0x88, 0x88, 0x80, //####### -//Level: 70 -0x10, 0x0E,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // ########## -0x00, 0x08, 0x11, 0x00, 0x80, 0x00, 0x80, 0x00, // #.. # # -0x00, 0x08, 0x11, 0x00, 0x00, 0x00, 0x80, 0x00, // #.. # -0x00, 0x08, 0x11, 0x00, 0x80, 0x08, 0x88, 0x80, // #.. # #### -0x00, 0x88, 0x88, 0x88, 0x80, 0x08, 0x00, 0x88, // ####### # ## -0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, // # # -0x00, 0x80, 0x08, 0x00, 0x88, 0x00, 0x80, 0x08, // # # ## # # -0x88, 0x88, 0x08, 0x80, 0x08, 0x88, 0x80, 0x88, //#### ## #### ## -0x80, 0x04, 0x00, 0x88, 0x88, 0x80, 0x80, 0x08, //# $ ##### # # -0x80, 0x80, 0x40, 0x04, 0x00, 0x80, 0x40, 0x08, //# # $ $ # $ # -0x80, 0x24, 0x00, 0x40, 0x00, 0x80, 0x00, 0x88, //# @$ $ # ## -0x88, 0x88, 0x08, 0x80, 0x88, 0x88, 0x88, 0x80, //#### ## ####### -0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, // # # -0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ###### -//Level: 71 -0x0A, 0x09,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x88, // ######## -0x00, 0x80, 0x00, 0x81, 0x08, // # #. # -0x08, 0x80, 0x04, 0x11, 0x18, // ## $...# -0x08, 0x00, 0x40, 0x85, 0x18, // # $ #*.# -0x88, 0x08, 0x84, 0x80, 0x88, //## ##$# ## -0x80, 0x00, 0x40, 0x04, 0x08, //# $ $ # -0x80, 0x00, 0x80, 0x00, 0x08, //# # # -0x88, 0x88, 0x88, 0x82, 0x08, //#######@ # -0x00, 0x00, 0x00, 0x88, 0x88, // #### -//Level: 72 -0x13, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //############# -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, //# # -0x80, 0x88, 0x80, 0x44, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, //# ### $$ # -0x80, 0x00, 0x80, 0x40, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, //# # $ $ # -0x80, 0x04, 0x88, 0x88, 0x48, 0x88, 0x88, 0x80, 0x00, 0x00, //# $####$###### -0x80, 0x40, 0x88, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, //# $ ## ##### -0x80, 0x04, 0x40, 0x40, 0x00, 0x00, 0x00, 0x01, 0x11, 0x80, //# $$ $ ...# -0x88, 0x80, 0x88, 0x04, 0x48, 0x00, 0x00, 0x01, 0x11, 0x80, //### ## $$# ...# -0x00, 0x80, 0x88, 0x00, 0x08, 0x00, 0x00, 0x01, 0x11, 0x80, // # ## # ...# -0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x11, 0x80, // # # ...# -0x00, 0x88, 0x82, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ###@############# -0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ### -//Level: 73 -0x11, 0x0D,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ###### -0x08, 0x88, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // #### # -0x08, 0x00, 0x00, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, // # ## # -0x08, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // # $ # -0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x88, 0x88, 0x80, //### #### ######## -0x80, 0x04, 0x00, 0x04, 0x08, 0x80, 0x01, 0x11, 0x80, //# $ $ ## ...# -0x80, 0x00, 0x44, 0x04, 0x40, 0x00, 0x01, 0x11, 0x80, //# $$ $$ ...# -0x80, 0x00, 0x04, 0x00, 0x48, 0x80, 0x01, 0x11, 0x80, //# $ $## ...# -0x88, 0x28, 0x80, 0x88, 0x08, 0x80, 0x01, 0x11, 0x80, //##@## ## ## ...# -0x08, 0x88, 0x00, 0x40, 0x08, 0x88, 0x88, 0x88, 0x80, // ### $ ######## -0x08, 0x00, 0x04, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, // # $$ # -0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, // # # # -0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ######### -//Level: 74 -0x0F, 0x0F,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -0x80, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x80, //# ##### # -0x80, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x80, //# . . # -0x81, 0x81, 0x88, 0x08, 0x81, 0x88, 0x80, 0x80, //#.#.## ##.### # -0x81, 0x11, 0x00, 0x40, 0x01, 0x11, 0x10, 0x80, //#... $ .... # -0x88, 0x11, 0x08, 0x08, 0x01, 0x18, 0x80, 0x80, //##.. # # ..## # -0x88, 0x88, 0x88, 0x08, 0x88, 0x88, 0x80, 0x80, //###### ###### # -0x80, 0x00, 0x08, 0x08, 0x00, 0x00, 0x80, 0x80, //# # # # # -0x80, 0x44, 0x08, 0x48, 0x04, 0x40, 0x80, 0x80, //# $$ #$# $$ # # -0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, //# $ $ $ $ $ # # -0x80, 0x44, 0x08, 0x48, 0x04, 0x40, 0x80, 0x80, //# $$ #$# $$ # # -0x80, 0x00, 0x08, 0x28, 0x00, 0x00, 0x80, 0x80, //# #@# # # -0x80, 0x88, 0x88, 0x08, 0x88, 0x08, 0x80, 0x80, //# #### ### ## # -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -//Level: 75 -0x09, 0x09,//Size x and y -0x88, 0x88, 0x80, 0x00, 0x00, //##### -0x82, 0x00, 0x80, 0x00, 0x00, //#@ # -0x80, 0x44, 0x80, 0x88, 0x80, //# $$# ### -0x80, 0x40, 0x80, 0x81, 0x80, //# $ # #.# -0x88, 0x80, 0x88, 0x81, 0x80, //### ###.# -0x08, 0x80, 0x00, 0x01, 0x80, // ## .# -0x08, 0x00, 0x08, 0x00, 0x80, // # # # -0x08, 0x00, 0x08, 0x88, 0x80, // # #### -0x08, 0x88, 0x88, 0x00, 0x00, // ##### -//Level: 76 -0x0A, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, //########## -0x81, 0x10, 0x00, 0x00, 0x08, //#.. # -0x81, 0x14, 0x00, 0x80, 0x08, //#..$ # # -0x80, 0x08, 0x48, 0x80, 0x88, //# #$## ## -0x80, 0x40, 0x00, 0x00, 0x80, //# $ # -0x88, 0x88, 0x80, 0x80, 0x80, //##### # # -0x00, 0x80, 0x40, 0x20, 0x80, // # $ @ # -0x00, 0x80, 0x00, 0x00, 0x80, // # # -0x00, 0x88, 0x88, 0x88, 0x80, // ####### -//Level: 77 -0x0C, 0x0D,//Size x and y -0x08, 0x88, 0x80, 0x00, 0x00, 0x00, // #### -0x08, 0x00, 0x88, 0x88, 0x88, 0x00, // # ###### -0x08, 0x00, 0x00, 0x04, 0x28, 0x00, // # $@# -0x88, 0x08, 0x81, 0x88, 0x48, 0x00, //## ##.##$# -0x80, 0x08, 0x01, 0x08, 0x08, 0x88, //# # . # ### -0x80, 0x00, 0x51, 0x18, 0x00, 0x08, //# *..# # -0x88, 0x08, 0x01, 0x04, 0x08, 0x08, //## # . $ # # -0x88, 0x08, 0x81, 0x80, 0x04, 0x08, //## ##.# $ # -0x80, 0x08, 0x81, 0x80, 0x88, 0x88, //# ##.# #### -0x80, 0x44, 0x04, 0x80, 0x08, 0x00, //# $$ $# # -0x80, 0x08, 0x00, 0x00, 0x08, 0x00, //# # # -0x88, 0x88, 0x88, 0x80, 0x08, 0x00, //####### # -0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // #### -//Level: 78 -0x0D, 0x0A,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // ##### -0x00, 0x88, 0x80, 0x00, 0x88, 0x80, 0x00, // ### ### -0x08, 0x81, 0x40, 0x00, 0x00, 0x88, 0x00, // ##.$ ## -0x08, 0x10, 0x44, 0x44, 0x40, 0x08, 0x00, // #. $$$$$ # -0x88, 0x00, 0x80, 0x00, 0x80, 0x08, 0x80, //## # # ## -0x80, 0x08, 0x58, 0x28, 0x58, 0x00, 0x80, //# #*#@#*# # -0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, //# # # # -0x88, 0x01, 0x44, 0x44, 0x41, 0x08, 0x80, //## .$$$$$. ## -0x08, 0x81, 0x11, 0x11, 0x11, 0x88, 0x00, // ##.......## -0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // ######### -//Level: 79 -0x10, 0x09,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, // ##### -0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, // # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x05, 0x08, 0x88, //########## * ### -0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, //# . # -0x80, 0x44, 0x44, 0x55, 0x55, 0x41, 0x11, 0x28, //# $$$$****$...@# -0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, //# . # -0x88, 0x88, 0x88, 0x88, 0x88, 0x05, 0x08, 0x88, //########## * ### -0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, // # # -0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, // ##### -//Level: 80 -0x11, 0x0D,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //################ -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, //# # -0x80, 0x80, 0x88, 0x88, 0x88, 0x00, 0x00, 0x08, 0x00, //# # ###### # -0x80, 0x80, 0x04, 0x04, 0x04, 0x04, 0x80, 0x08, 0x00, //# # $ $ $ $# # -0x80, 0x80, 0x00, 0x42, 0x40, 0x00, 0x88, 0x08, 0x80, //# # $@$ ## ## -0x80, 0x80, 0x04, 0x04, 0x04, 0x88, 0x81, 0x11, 0x80, //# # $ $ $###...# -0x80, 0x80, 0x00, 0x40, 0x40, 0x08, 0x81, 0x11, 0x80, //# # $ $ ##...# -0x80, 0x88, 0x84, 0x44, 0x04, 0x08, 0x81, 0x11, 0x80, //# ###$$$ $ ##...# -0x80, 0x00, 0x00, 0x80, 0x88, 0x08, 0x81, 0x11, 0x80, //# # ## ##...# -0x88, 0x88, 0x80, 0x00, 0x88, 0x08, 0x81, 0x11, 0x80, //##### ## ##...# -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x88, 0x80, // ##### ### -0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, // # # -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, // ####### -//Level: 81 -0x06, 0x08,//Size x and y -0x08, 0x88, 0x80, // #### -0x88, 0x00, 0x80, //## # -0x82, 0x40, 0x80, //#@$ # -0x88, 0x40, 0x88, //##$ ## -0x88, 0x04, 0x08, //## $ # -0x81, 0x40, 0x08, //#.$ # -0x81, 0x15, 0x18, //#..*.# -0x88, 0x88, 0x88, //###### -//Level: 82 -0x0E, 0x0C,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, // ###### -0x00, 0x88, 0x80, 0x00, 0x08, 0x88, 0x00, // ### ### -0x00, 0x80, 0x00, 0x84, 0x00, 0x08, 0x88, // # #$ ### -0x00, 0x80, 0x00, 0x40, 0x00, 0x44, 0x08, // # $ $$ # -0x00, 0x80, 0x44, 0x08, 0x40, 0x00, 0x08, // # $$ #$ # -0x00, 0x88, 0x00, 0x04, 0x00, 0x04, 0x08, // ## $ $ # -0x88, 0x88, 0x88, 0x08, 0x48, 0x88, 0x88, //###### #$##### -0x81, 0x12, 0x08, 0x40, 0x08, 0x00, 0x00, //#..@ #$ # -0x81, 0x81, 0x10, 0x04, 0x88, 0x00, 0x00, //#.#.. $## -0x81, 0x11, 0x14, 0x80, 0x80, 0x00, 0x00, //#....$# # -0x81, 0x11, 0x10, 0x00, 0x80, 0x00, 0x00, //#.... # -0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //######### -//Level: 83 -0x0D, 0x0A,//Size x and y -0x00, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, // #### -0x88, 0x88, 0x00, 0x88, 0x88, 0x88, 0x00, //#### ###### -0x80, 0x00, 0x00, 0x88, 0x00, 0x08, 0x00, //# ## # -0x80, 0x48, 0x04, 0x00, 0x00, 0x48, 0x00, //# $# $ $# -0x88, 0x08, 0x88, 0x04, 0x80, 0x08, 0x00, //## ### $# # -0x08, 0x04, 0x04, 0x00, 0x88, 0x08, 0x00, // # $ $ ## # -0x08, 0x00, 0x04, 0x08, 0x80, 0x08, 0x80, // # $ ## ## -0x08, 0x40, 0x81, 0x11, 0x50, 0x40, 0x80, // #$ #...* $ # -0x08, 0x02, 0x80, 0x11, 0x11, 0x11, 0x80, // # @# ......# -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ############ -//Level: 84 -0x08, 0x08,//Size x and y -0x00, 0x88, 0x88, 0x00, // #### -0x00, 0x80, 0x08, 0x00, // # # -0x00, 0x80, 0x08, 0x88, // # ### -0x88, 0x80, 0x11, 0x08, //### .. # -0x80, 0x04, 0x80, 0x08, //# $# # -0x80, 0x01, 0x44, 0x08, //# .$$ # -0x88, 0x88, 0x02, 0x08, //#### @ # -0x00, 0x08, 0x88, 0x88, // ##### -//Level: 85 -0x08, 0x08,//Size x and y -0x08, 0x88, 0x88, 0x80, // ###### -0x08, 0x20, 0x00, 0x88, // #@ ## -0x08, 0x84, 0x00, 0x08, // ##$ # -0x88, 0x80, 0x10, 0x08, //### . # -0x80, 0x40, 0x84, 0x88, //# $ #$## -0x80, 0x10, 0x01, 0x80, //# . .# -0x88, 0x88, 0x00, 0x80, //#### # -0x00, 0x08, 0x88, 0x80, // #### -//Level: 86 -0x0F, 0x0F,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //######### -0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, //# # -0x80, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, //# #### -0x88, 0x08, 0x88, 0x80, 0x80, 0x08, 0x00, 0x00, //## #### # # -0x88, 0x08, 0x28, 0x80, 0x00, 0x08, 0x00, 0x00, //## #@## # -0x80, 0x44, 0x40, 0x40, 0x04, 0x48, 0x00, 0x00, //# $$$ $ $$# -0x80, 0x08, 0x08, 0x80, 0x40, 0x08, 0x00, 0x00, //# # ## $ # -0x80, 0x08, 0x08, 0x80, 0x04, 0x08, 0x88, 0x80, //# # ## $ #### -0x88, 0x88, 0x00, 0x44, 0x40, 0x48, 0x00, 0x80, //#### $$$ $# # -0x08, 0x00, 0x08, 0x80, 0x00, 0x11, 0x11, 0x80, // # ## ....# -0x08, 0x08, 0x00, 0x08, 0x08, 0x11, 0x01, 0x80, // # # # #.. .# -0x08, 0x00, 0x08, 0x08, 0x08, 0x81, 0x11, 0x80, // # # # ##...# -0x08, 0x88, 0x88, 0x04, 0x00, 0x81, 0x11, 0x80, // ##### $ #...# -0x00, 0x00, 0x08, 0x80, 0x00, 0x88, 0x88, 0x80, // ## ##### -0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // ##### -//Level: 87 -0x13, 0x0F,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // ##### -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x08, 0x80, 0x00, // ## ## -0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x80, 0x00, // ## # -0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x44, 0x00, 0x80, 0x00, // ## $$ # -0x00, 0x00, 0x00, 0x08, 0x80, 0x44, 0x00, 0x40, 0x80, 0x00, // ## $$ $ # -0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x40, 0x80, 0x00, // # $ $ # -0x88, 0x88, 0x00, 0x08, 0x00, 0x04, 0x40, 0x88, 0x88, 0x80, //#### # $$ ##### -0x80, 0x08, 0x88, 0x88, 0x88, 0x80, 0x88, 0x00, 0x00, 0x80, //# ######## ## # -0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x42, 0x80, //#. $$$@# -0x81, 0x80, 0x88, 0x88, 0x88, 0x80, 0x88, 0x00, 0x08, 0x80, //#.# ####### ## ## -0x81, 0x80, 0x88, 0x88, 0x88, 0x81, 0x08, 0x40, 0x48, 0x80, //#.# #######. #$ $## -0x81, 0x11, 0x11, 0x11, 0x11, 0x11, 0x08, 0x00, 0x00, 0x80, //#........... # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x40, 0x80, //############## $ # -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x08, 0x80, // ## ## -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // #### -//Level: 88 -0x0D, 0x0D,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############# -0x80, 0x01, 0x01, 0x01, 0x01, 0x00, 0x80, //# . . . . # -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //# # # # # # # -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //# # # # # # # -0x81, 0x40, 0x80, 0x40, 0x80, 0x41, 0x80, //#.$ # $ # $.# -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //# # # # # # # -0x80, 0x84, 0x44, 0x84, 0x44, 0x80, 0x80, //# #$$$#$$$# # -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //# # # # # # # -0x81, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, //#.$ # $ # $ # -0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, //# # # # # #.# -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //# # # # # # # -0x80, 0x01, 0x01, 0x21, 0x01, 0x00, 0x80, //# . .@. . # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############# -//Level: 89 -0x0A, 0x06,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, // ######### -0x88, 0x20, 0x00, 0x00, 0x08, //##@ # -0x80, 0x00, 0x84, 0x84, 0x08, //# #$#$ # -0x80, 0x44, 0x00, 0x14, 0x18, //# $$ .$.# -0x80, 0x08, 0x88, 0x11, 0x18, //# ###...# -0x88, 0x88, 0x08, 0x88, 0x88, //#### ##### -//Level: 90 -0x11, 0x0D,//Size x and y -0x88, 0x88, 0x88, 0x80, 0x88, 0x88, 0x88, 0x88, 0x80, //####### ######### -0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x88, 0x00, 0x80, //# # # ## # -0x80, 0x88, 0x80, 0x80, 0x80, 0x00, 0x40, 0x00, 0x80, //# ### # # $ # -0x80, 0x80, 0x40, 0x88, 0x80, 0x00, 0x40, 0x00, 0x80, //# # $ ### $ # -0x80, 0x00, 0x44, 0x00, 0x00, 0x00, 0x88, 0x40, 0x80, //# $$ ##$ # -0x80, 0x00, 0x08, 0x88, 0x80, 0x00, 0x88, 0x00, 0x80, //# #### ## # -0x82, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x08, 0x80, //#@############ ## -0x88, 0x81, 0x10, 0x00, 0x08, 0x88, 0x88, 0x40, 0x80, //###.. #####$ # -0x00, 0x81, 0x10, 0x00, 0x08, 0x88, 0x80, 0x00, 0x80, // #.. #### # -0x00, 0x81, 0x10, 0x00, 0x00, 0x00, 0x44, 0x00, 0x80, // #.. $$ # -0x00, 0x81, 0x10, 0x00, 0x08, 0x88, 0x80, 0x40, 0x80, // #.. #### $ # -0x00, 0x81, 0x10, 0x00, 0x08, 0x00, 0x80, 0x00, 0x80, // #.. # # # -0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, // ######## ##### -//Level: 91 -0x10, 0x0D,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // ######### -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, // # # -0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, // # # # # # -0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x48, 0x08, // # $ $# # -0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x08, // # $ # -0x00, 0x00, 0x00, 0x08, 0x80, 0x40, 0x48, 0x08, // ## $ $# # -0x08, 0x88, 0x00, 0x00, 0x80, 0x40, 0x40, 0x08, // ### # $ $ # -0x88, 0x18, 0x88, 0x88, 0x80, 0x88, 0x88, 0x88, //##.###### ###### -0x81, 0x11, 0x00, 0x80, 0x40, 0x40, 0x80, 0x00, //#... # $ $ # -0x88, 0x11, 0x00, 0x00, 0x04, 0x00, 0x80, 0x00, //##.. $ # -0x81, 0x11, 0x00, 0x80, 0x02, 0x88, 0x80, 0x00, //#... # @### -0x88, 0x18, 0x88, 0x80, 0x08, 0x80, 0x00, 0x00, //##.#### ## -0x08, 0x88, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // ### #### -//Level: 92 -0x12, 0x0F,//Size x and y -0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ########### -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x88, // # # ## -0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x01, 0x18, // # $ ..# -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x84, 0x81, 0x18, // # #$#..# -0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x01, 0x18, // ########### ..# -0x00, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x18, // # $ ..# -0x00, 0x80, 0x80, 0x80, 0x48, 0x80, 0x80, 0x81, 0x18, // # # # $## # #..# -0x00, 0x80, 0x00, 0x84, 0x00, 0x00, 0x80, 0x01, 0x18, // # #$ # ..# -0x08, 0x84, 0x80, 0x40, 0x88, 0x88, 0x88, 0x80, 0x08, // ##$# $ ####### # -0x88, 0x00, 0x04, 0x00, 0x80, 0x00, 0x08, 0x04, 0x08, //## $ # # $ # -0x80, 0x00, 0x48, 0x00, 0x80, 0x00, 0x08, 0x00, 0x08, //# $# # # # -0x80, 0x04, 0x00, 0x08, 0x80, 0x00, 0x08, 0x88, 0x88, //# $ ## ##### -0x80, 0x48, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //# $##### -0x80, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //# @# -0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#### -//Level: 93 -0x12, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //################## -0x80, 0x00, 0x00, 0x00, 0x00, 0x88, 0x08, 0x11, 0x18, //# ## #...# -0x80, 0x40, 0x44, 0x80, 0x00, 0x04, 0x08, 0x11, 0x18, //# $ $$# $ #...# -0x80, 0x40, 0x00, 0x84, 0x88, 0x44, 0x08, 0x11, 0x18, //# $ #$##$$ #...# -0x80, 0x44, 0x84, 0x00, 0x00, 0x00, 0x02, 0x11, 0x18, //# $$#$ @...# -0x80, 0x40, 0x40, 0x48, 0x40, 0x88, 0x88, 0x00, 0x18, //# $ $ $#$ #### .# -0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x04, 0x11, 0x18, //# ## $...# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //################## -//Level: 94 -0x0A, 0x0A,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, //######### -0x80, 0x00, 0x88, 0x00, 0x80, //# ## # -0x80, 0x80, 0x40, 0x40, 0x80, //# # $ $ # -0x80, 0x05, 0x18, 0x00, 0x80, //# *.# # -0x88, 0x08, 0x12, 0x18, 0x80, //## #.@.## -0x88, 0x48, 0x88, 0x58, 0x88, //##$###*### -0x80, 0x00, 0x00, 0x00, 0x08, //# # -0x80, 0x00, 0x88, 0x08, 0x08, //# ## # # -0x88, 0x88, 0x88, 0x00, 0x08, //###### # -0x00, 0x00, 0x08, 0x88, 0x88, // ##### -//Level: 95 -0x0E, 0x0D,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // ######## -0x00, 0x80, 0x00, 0x80, 0x08, 0x88, 0x00, // # # ### -0x88, 0x80, 0x80, 0x40, 0x04, 0x08, 0x88, //### # $ $ ### -0x80, 0x00, 0x08, 0x44, 0x08, 0x00, 0x08, //# #$$ # # -0x80, 0x88, 0x48, 0x00, 0x20, 0x04, 0x08, //# ##$# @ $ # -0x80, 0x00, 0x04, 0x48, 0x88, 0x40, 0x88, //# $$###$ ## -0x80, 0x00, 0x48, 0x08, 0x80, 0x08, 0x80, //# $# ## ## -0x80, 0x84, 0x08, 0x01, 0x11, 0x88, 0x00, //# #$ # ...## -0x80, 0x40, 0x81, 0x11, 0x11, 0x80, 0x00, //# $ #.....# -0x88, 0x00, 0x11, 0x11, 0x18, 0x80, 0x00, //## .....## -0x08, 0x04, 0x80, 0x88, 0x88, 0x00, 0x00, // # $# #### -0x08, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, // ## # -0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ##### -//Level: 96 -0x0C, 0x08,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, // ##### -0x88, 0x88, 0x88, 0x88, 0x00, 0x08, //######## # -0x80, 0x11, 0x11, 0x11, 0x40, 0x08, //# ......$ # -0x80, 0x08, 0x48, 0x88, 0x00, 0x08, //# #$### # -0x88, 0x04, 0x24, 0x08, 0x00, 0x08, //## $@$ # # -0x08, 0x04, 0x04, 0x08, 0x00, 0x08, // # $ $ # # -0x08, 0x00, 0x00, 0x08, 0x88, 0x88, // # ##### -0x08, 0x88, 0x88, 0x88, 0x00, 0x00, // ####### -//Level: 97 -0x14, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //###### -0x80, 0x00, 0x08, 0x88, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, //# ### ###### -0x80, 0x80, 0x04, 0x08, 0x00, 0x88, 0x88, 0x00, 0x11, 0x80, //# # $ # #### ..# -0x80, 0x80, 0x04, 0x08, 0x88, 0x82, 0x88, 0x00, 0x11, 0x88, //# # $ ####@## ..## -0x80, 0x04, 0x44, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x18, //# $$$ $ ...# -0x88, 0x80, 0x04, 0x00, 0x48, 0x88, 0x88, 0x00, 0x11, 0x88, //### $ $##### ..## -0x00, 0x84, 0x04, 0x04, 0x08, 0x00, 0x08, 0x00, 0x11, 0x80, // #$ $ $ # # ..# -0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x08, 0x88, 0x88, 0x80, // # # ###### -0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // ######## -//Level: 98 -0x0F, 0x0E,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ##### -0x88, 0x88, 0x80, 0x00, 0x88, 0x88, 0x88, 0x00, //##### ###### -0x80, 0x00, 0x00, 0x80, 0x08, 0x80, 0x08, 0x80, //# # ## ## -0x80, 0x80, 0x44, 0x00, 0x04, 0x00, 0x00, 0x80, //# # $$ $ # -0x80, 0x08, 0x00, 0x08, 0x80, 0x80, 0x80, 0x80, //# # ## # # # -0x80, 0x40, 0x80, 0x88, 0x00, 0x04, 0x00, 0x80, //# $ # ## $ # -0x80, 0x00, 0x04, 0x04, 0x00, 0x08, 0x08, 0x80, //# $ $ # ## -0x88, 0x04, 0x08, 0x00, 0x84, 0x88, 0x08, 0x00, //## $ # #$## # -0x08, 0x88, 0x00, 0x80, 0x80, 0x80, 0x48, 0x00, // ### # # # $# -0x00, 0x08, 0x04, 0x00, 0x20, 0x11, 0x18, 0x00, // # $ @ ...# -0x00, 0x08, 0x04, 0x88, 0x48, 0x11, 0x18, 0x00, // # $##$#...# -0x00, 0x08, 0x80, 0x00, 0x11, 0x11, 0x88, 0x00, // ## ....## -0x00, 0x00, 0x88, 0x80, 0x11, 0x18, 0x80, 0x00, // ### ...## -0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, // ###### -//Level: 99 -0x0B, 0x0A,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x00, // ######### -0x08, 0x00, 0x00, 0x00, 0x08, 0x80, // # ## -0x08, 0x40, 0x88, 0x88, 0x00, 0x80, // #$ #### # -0x88, 0x08, 0x01, 0x50, 0x80, 0x80, //## # .* # # -0x80, 0x00, 0x45, 0x10, 0x80, 0x80, //# $*. # # -0x80, 0x84, 0x21, 0x50, 0x80, 0x80, //# #$@.* # # -0x80, 0x00, 0x04, 0x00, 0x00, 0x80, //# $ # -0x88, 0x88, 0x48, 0x84, 0x08, 0x80, //####$##$ ## -0x00, 0x08, 0x01, 0x11, 0x08, 0x00, // # ... # -0x00, 0x08, 0x88, 0x88, 0x88, 0x00, // ####### -//Level: 100 -0x09, 0x0C,//Size x and y -0x00, 0x88, 0x88, 0x80, 0x00, // ##### -0x00, 0x80, 0x20, 0x80, 0x00, // # @ # -0x00, 0x80, 0x40, 0x80, 0x00, // # $ # -0x88, 0x80, 0x10, 0x88, 0x80, //### . ### -0x80, 0x00, 0x50, 0x00, 0x80, //# * # -0x80, 0x55, 0x55, 0x50, 0x80, //# ***** # -0x80, 0x00, 0x50, 0x00, 0x80, //# * # -0x88, 0x84, 0x54, 0x88, 0x80, //###$*$### -0x00, 0x80, 0x10, 0x80, 0x00, // # . # -0x00, 0x80, 0x50, 0x80, 0x00, // # * # -0x00, 0x80, 0x10, 0x80, 0x00, // # . # -0x00, 0x88, 0x88, 0x80, 0x00, // ##### -//Level: 101 -0x11, 0x0D,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // ##### -0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x88, 0x88, 0x80, // # ##### -0x00, 0x00, 0x00, 0x00, 0x80, 0x84, 0x88, 0x00, 0x80, // # #$## # -0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, // # $ # -0x88, 0x88, 0x88, 0x88, 0x80, 0x88, 0x80, 0x00, 0x80, //######### ### # -0x81, 0x11, 0x10, 0x08, 0x80, 0x40, 0x04, 0x88, 0x80, //#.... ## $ $### -0x81, 0x11, 0x10, 0x00, 0x04, 0x04, 0x40, 0x88, 0x00, //#.... $ $$ ## -0x81, 0x11, 0x10, 0x08, 0x84, 0x00, 0x40, 0x28, 0x00, //#.... ##$ $ @# -0x88, 0x88, 0x88, 0x88, 0x80, 0x04, 0x00, 0x88, 0x00, //######### $ ## -0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x08, 0x00, // # $ $ # -0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x88, 0x08, 0x00, // ### ## # -0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, // # # -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, // ###### -//Level: 102 -0x13, 0x0F,//Size x and y -0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ##### -0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // # # -0x08, 0x08, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // # # ####### -0x08, 0x00, 0x00, 0x00, 0x42, 0x88, 0x88, 0x88, 0x00, 0x00, // # $@###### -0x08, 0x04, 0x08, 0x84, 0x08, 0x88, 0x00, 0x08, 0x00, 0x00, // # $ ##$ ### # -0x08, 0x08, 0x88, 0x80, 0x40, 0x00, 0x04, 0x08, 0x00, 0x00, // # #### $ $ # -0x08, 0x08, 0x88, 0x88, 0x08, 0x00, 0x84, 0x08, 0x88, 0x80, // # ##### # #$ #### -0x88, 0x00, 0x88, 0x88, 0x08, 0x84, 0x00, 0x00, 0x00, 0x80, //## #### ##$ # -0x80, 0x04, 0x80, 0x04, 0x00, 0x80, 0x88, 0x08, 0x80, 0x80, //# $# $ # ## ## # -0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x11, 0x80, 0x80, //# # #...# # -0x88, 0x88, 0x88, 0x00, 0x88, 0x80, 0x01, 0x11, 0x00, 0x80, //###### ### ... # -0x00, 0x00, 0x08, 0x88, 0x80, 0x80, 0x81, 0x11, 0x80, 0x80, // #### # #...# # -0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x88, 0x80, 0x80, 0x80, // # ### # # -0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, // # # -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // ######### -//Level: 103 -0x08, 0x07,//Size x and y -0x00, 0x88, 0x88, 0x88, // ###### -0x00, 0x80, 0x00, 0x08, // # # -0x88, 0x84, 0x44, 0x08, //###$$$ # -0x82, 0x04, 0x11, 0x08, //#@ $.. # -0x80, 0x41, 0x11, 0x88, //# $...## -0x88, 0x88, 0x00, 0x80, //#### # -0x00, 0x08, 0x88, 0x80, // #### -//Level: 104 -0x0C, 0x10,//Size x and y -0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //####### -0x80, 0x11, 0x11, 0x80, 0x00, 0x00, //# ....# -0x80, 0x11, 0x11, 0x80, 0x00, 0x00, //# ....# -0x80, 0x11, 0x11, 0x80, 0x00, 0x00, //# ....# -0x88, 0x48, 0x88, 0x88, 0x88, 0x88, //##$######### -0x80, 0x40, 0x40, 0x00, 0x00, 0x08, //# $ $ # -0x80, 0x00, 0x80, 0x00, 0x00, 0x08, //# # # -0x88, 0x80, 0x80, 0x44, 0x04, 0x08, //### # $$ $ # -0x00, 0x80, 0x80, 0x00, 0x84, 0x08, // # # #$ # -0x00, 0x80, 0x80, 0x44, 0x00, 0x08, // # # $$ # -0x00, 0x80, 0x80, 0x80, 0x44, 0x08, // # # # $$ # -0x00, 0x80, 0x80, 0x04, 0x08, 0x88, // # # $ ### -0x00, 0x80, 0x88, 0x80, 0x08, 0x00, // # ### # -0x00, 0x80, 0x00, 0x08, 0x28, 0x00, // # #@# -0x00, 0x88, 0x88, 0x00, 0x08, 0x00, // #### # -0x00, 0x00, 0x08, 0x88, 0x88, 0x00, // ##### -//Level: 105 -0x0E, 0x0D,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, 0x80, 0x00, // ###### -0x00, 0x08, 0x88, 0x00, 0x00, 0x88, 0x00, // ### ## -0x00, 0x08, 0x00, 0x08, 0x80, 0x08, 0x00, // # ## # -0x08, 0x88, 0x48, 0x80, 0x08, 0x08, 0x00, // ###$## # # -0x88, 0x00, 0x00, 0x01, 0x18, 0x08, 0x00, //## ..# # -0x80, 0x04, 0x84, 0x85, 0x18, 0x08, 0x00, //# $#$#*.# # -0x80, 0x44, 0x20, 0x81, 0x58, 0x08, 0x88, //# $$@ #.*# ### -0x80, 0x04, 0x40, 0x81, 0x18, 0x00, 0x08, //# $$ #..# # -0x88, 0x00, 0x00, 0x81, 0x14, 0x00, 0x08, //## #..$ # -0x08, 0x88, 0x48, 0x81, 0x08, 0x08, 0x88, // ###$##. # ### -0x00, 0x08, 0x00, 0x88, 0x80, 0x08, 0x00, // # ### # -0x00, 0x08, 0x80, 0x00, 0x00, 0x88, 0x00, // ## ## -0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, // ####### -//Level: 106 -0x0D, 0x0B,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // ##### -0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, // # # -0x88, 0x88, 0x88, 0x88, 0x80, 0x80, 0x80, //######### # # -0x80, 0x40, 0x40, 0x40, 0x40, 0x00, 0x80, //# $ $ $ $ # -0x80, 0x81, 0x81, 0x81, 0x82, 0x48, 0x80, //# #.#.#.#@$## -0x81, 0x11, 0x11, 0x11, 0x00, 0x08, 0x00, //#....... # -0x80, 0x80, 0x80, 0x80, 0x84, 0x88, 0x80, //# # # # #$### -0x80, 0x40, 0x40, 0x40, 0x40, 0x00, 0x80, //# $ $ $ $ # -0x88, 0x88, 0x88, 0x88, 0x80, 0x80, 0x80, //######### # # -0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, // # # -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // ##### -//Level: 107 -0x08, 0x08,//Size x and y -0x08, 0x88, 0x80, 0x00, // #### -0x08, 0x20, 0x88, 0x80, // #@ ### -0x08, 0x04, 0x00, 0x80, // # $ # -0x88, 0x80, 0x80, 0x88, //### # ## -0x81, 0x80, 0x80, 0x08, //#.# # # -0x81, 0x40, 0x08, 0x08, //#.$ # # -0x81, 0x00, 0x04, 0x08, //#. $ # -0x88, 0x88, 0x88, 0x88, //######## -//Level: 108 -0x0B, 0x0D,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x80, // #### -0x00, 0x00, 0x00, 0x08, 0x20, 0x80, // #@ # -0x00, 0x08, 0x88, 0x88, 0x00, 0x80, // ##### # -0x88, 0x88, 0x00, 0x00, 0x00, 0x80, //#### # -0x80, 0x00, 0x18, 0x88, 0x08, 0x80, //# .### ## -0x80, 0x80, 0x80, 0x00, 0x08, 0x80, //# # # ## -0x80, 0x80, 0x40, 0x48, 0x10, 0x80, //# # $ $#. # -0x80, 0x80, 0x05, 0x00, 0x80, 0x80, //# # * # # -0x80, 0x18, 0x40, 0x40, 0x80, 0x80, //# .#$ $ # # -0x88, 0x00, 0x00, 0x80, 0x80, 0x80, //## # # # -0x08, 0x08, 0x88, 0x10, 0x00, 0x80, // # ###. # -0x08, 0x00, 0x00, 0x08, 0x88, 0x80, // # #### -0x08, 0x88, 0x88, 0x88, 0x00, 0x00, // ####### -//Level: 109 -0x11, 0x0D,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ######### -0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // # # -0x00, 0x00, 0x84, 0x40, 0x44, 0x80, 0x88, 0x88, 0x00, // #$$ $$# #### -0x88, 0x88, 0x80, 0x08, 0x00, 0x40, 0x80, 0x08, 0x00, //##### # $ # # -0x81, 0x18, 0x00, 0x88, 0x04, 0x00, 0x40, 0x08, 0x00, //#..# ## $ $ # -0x81, 0x18, 0x04, 0x40, 0x00, 0x00, 0x80, 0x08, 0x00, //#..# $$ # # -0x81, 0x18, 0x00, 0x88, 0x48, 0x88, 0x80, 0x88, 0x00, //#..# ##$#### ## -0x81, 0x18, 0x80, 0x88, 0x00, 0x00, 0x80, 0x80, 0x00, //#..## ## # # -0x81, 0x11, 0x00, 0x08, 0x80, 0x88, 0x80, 0x88, 0x80, //#... ## ### ### -0x80, 0x00, 0x88, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, //# ## $ # -0x88, 0x88, 0x88, 0x28, 0x00, 0x08, 0x80, 0x80, 0x80, //######@# ## # # -0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x80, // ######## # -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // ##### -//Level: 110 -0x0F, 0x0D,//Size x and y -0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ##### -0x88, 0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, //### ## -0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //# # -0x80, 0x44, 0x08, 0x48, 0x88, 0x88, 0x88, 0x80, //# $$ #$######## -0x88, 0x08, 0x40, 0x40, 0x40, 0x80, 0x00, 0x80, //## #$ $ $ # # -0x81, 0x11, 0x18, 0x00, 0x04, 0x00, 0x00, 0x80, //#....# $ # -0x81, 0x11, 0x12, 0x80, 0x08, 0x88, 0x48, 0x80, //#....@# ###$## -0x81, 0x11, 0x14, 0x80, 0x00, 0x40, 0x40, 0x80, //#....$# $ $ # -0x81, 0x11, 0x14, 0x04, 0x80, 0x00, 0x00, 0x80, //#....$ $# # -0x88, 0x88, 0x80, 0x00, 0x80, 0x48, 0x48, 0x80, //##### # $#$## -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x40, 0x80, // ##### $ # -0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x80, // ### # -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // ##### -//Level: 111 -0x0A, 0x08,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, // ##### -0x08, 0x88, 0x88, 0x00, 0x08, // ##### # -0x08, 0x01, 0x10, 0x48, 0x08, // # .. $# # -0x08, 0x08, 0x15, 0x00, 0x08, // # #.* # -0x88, 0x05, 0x18, 0x40, 0x88, //## *.#$ ## -0x80, 0x40, 0x04, 0x00, 0x80, //# $ $ # -0x80, 0x00, 0x88, 0x02, 0x80, //# ## @# -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 112 -0x0E, 0x0F,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // ######### -0x08, 0x11, 0x11, 0x00, 0x08, 0x80, 0x00, // #.... ## -0x08, 0x18, 0x18, 0x00, 0x40, 0x88, 0x00, // #.#.# $ ## -0x88, 0x11, 0x11, 0x80, 0x80, 0x28, 0x80, //##....# # @## -0x80, 0x11, 0x11, 0x80, 0x08, 0x00, 0x88, //# ....# # ## -0x80, 0x00, 0x00, 0x84, 0x08, 0x84, 0x08, //# #$ ##$ # -0x88, 0x08, 0x88, 0x00, 0x40, 0x00, 0x08, //## ### $ # -0x08, 0x40, 0x04, 0x04, 0x04, 0x80, 0x08, // #$ $ $ $# # -0x08, 0x08, 0x00, 0x40, 0x40, 0x88, 0x08, // # # $ $ ## # -0x08, 0x00, 0x88, 0x80, 0x08, 0x80, 0x08, // # ### ## # -0x08, 0x00, 0x00, 0x88, 0x08, 0x80, 0x88, // # ## ## ## -0x08, 0x00, 0x40, 0x80, 0x04, 0x00, 0x80, // # $ # $ # -0x08, 0x88, 0x40, 0x40, 0x00, 0x88, 0x80, // ###$ $ ### -0x00, 0x08, 0x00, 0x88, 0x88, 0x80, 0x00, // # ##### -0x00, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, // #### -//Level: 113 -0x0E, 0x0C,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // ######### -0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // # # -0x08, 0x04, 0x04, 0x40, 0x48, 0x00, 0x00, // # $ $$ $# -0x88, 0x80, 0x80, 0x04, 0x08, 0x00, 0x00, //### # $ # -0x81, 0x80, 0x00, 0x44, 0x08, 0x80, 0x00, //#.# $$ ## -0x81, 0x88, 0x80, 0x00, 0x40, 0x80, 0x00, //#.### $ # -0x81, 0x81, 0x04, 0x08, 0x80, 0x88, 0x88, //#.#. $ ## #### -0x81, 0x11, 0x00, 0x48, 0x80, 0x40, 0x08, //#... $## $ # -0x81, 0x11, 0x40, 0x00, 0x40, 0x00, 0x08, //#...$ $ # -0x81, 0x18, 0x88, 0x48, 0x88, 0x08, 0x28, //#..###$### #@# -0x81, 0x18, 0x08, 0x00, 0x00, 0x08, 0x88, //#..# # ### -0x88, 0x88, 0x08, 0x88, 0x88, 0x88, 0x00, //#### ####### -//Level: 114 -0x07, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x80, //####### -0x81, 0x14, 0x11, 0x80, //#..$..# -0x81, 0x18, 0x11, 0x80, //#..#..# -0x80, 0x44, 0x40, 0x80, //# $$$ # -0x80, 0x04, 0x00, 0x80, //# $ # -0x80, 0x44, 0x40, 0x80, //# $$$ # -0x80, 0x08, 0x20, 0x80, //# #@ # -0x88, 0x88, 0x88, 0x80, //####### -//Level: 115 -0x08, 0x0B,//Size x and y -0x00, 0x08, 0x88, 0x88, // ##### -0x00, 0x08, 0x00, 0x08, // # # -0x88, 0x88, 0x40, 0x08, //####$ # -0x81, 0x10, 0x40, 0x08, //#.. $ # -0x81, 0x14, 0x00, 0x88, //#..$ ## -0x81, 0x18, 0x04, 0x80, //#..# $# -0x80, 0x18, 0x40, 0x88, //# .#$ ## -0x88, 0x88, 0x04, 0x08, //#### $ # -0x00, 0x80, 0x40, 0x08, // # $ # -0x00, 0x80, 0x02, 0x08, // # @ # -0x00, 0x88, 0x88, 0x88, // ###### -//Level: 116 -0x0C, 0x05,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############ -0x80, 0x00, 0x01, 0x11, 0x04, 0x08, //# ... $ # -0x80, 0x44, 0x45, 0x55, 0x04, 0x28, //# $$$*** $@# -0x80, 0x00, 0x01, 0x11, 0x04, 0x08, //# ... $ # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############ -//Level: 117 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x80, 0x02, 0x00, 0x08, //# @ # -0x80, 0x88, 0x48, 0x08, //# ##$# # -0x80, 0x40, 0x04, 0x08, //# $ $ # -0x88, 0x40, 0x08, 0x88, //##$ ### -0x08, 0x14, 0x01, 0x80, // #.$ .# -0x08, 0x11, 0x01, 0x80, // #.. .# -0x08, 0x88, 0x88, 0x80, // ###### -//Level: 118 -0x08, 0x08,//Size x and y -0x08, 0x88, 0x88, 0x88, // ####### -0x88, 0x00, 0x01, 0x08, //## . # -0x80, 0x40, 0x04, 0x28, //# $ $@# -0x81, 0x41, 0x88, 0x88, //#.$.#### -0x80, 0x08, 0x80, 0x00, //# ## -0x80, 0x08, 0x00, 0x00, //# # -0x80, 0x08, 0x00, 0x00, //# # -0x88, 0x88, 0x00, 0x00, //#### -//Level: 119 -0x13, 0x0D,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // ##### -0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x80, // ########## # -0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, // # # # -0x00, 0x00, 0x08, 0x00, 0x40, 0x40, 0x00, 0x04, 0x40, 0x80, // # $ $ $$ # -0x00, 0x00, 0x08, 0x08, 0x88, 0x88, 0x08, 0x80, 0x40, 0x80, // # ##### ## $ # -0x00, 0x00, 0x08, 0x44, 0x00, 0x08, 0x48, 0x80, 0x40, 0x80, // #$$ #$## $ # -0x00, 0x00, 0x08, 0x08, 0x88, 0x08, 0x08, 0x84, 0x00, 0x80, // # ### # ##$ # -0x88, 0x88, 0x88, 0x08, 0x88, 0x04, 0x04, 0x00, 0x00, 0x80, //###### ### $ $ # -0x81, 0x11, 0x10, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x80, //#.... ## # -0x81, 0x11, 0x10, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, //#.... ###### -0x81, 0x11, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, //#.... # -0x88, 0x88, 0x88, 0x88, 0x88, 0x82, 0x88, 0x00, 0x00, 0x00, //###########@## -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, // ### -//Level: 120 -0x10, 0x0D,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //############## -0x80, 0x00, 0x08, 0x88, 0x00, 0x08, 0x18, 0x00, //# ### #.# -0x80, 0x40, 0x00, 0x00, 0x40, 0x08, 0x18, 0x00, //# $ $ #.# -0x80, 0x40, 0x08, 0x08, 0x00, 0x08, 0x18, 0x80, //# $ # # #.## -0x88, 0x08, 0x88, 0x08, 0x84, 0x88, 0x11, 0x88, //## ### ##$##..## -0x80, 0x40, 0x08, 0x48, 0x00, 0x08, 0x02, 0x18, //# $ #$# # @.# -0x80, 0x04, 0x04, 0x00, 0x04, 0x00, 0x11, 0x18, //# $ $ $ ...# -0x80, 0x40, 0x08, 0x48, 0x00, 0x08, 0x11, 0x08, //# $ #$# #.. # -0x88, 0x08, 0x88, 0x08, 0x80, 0x88, 0x11, 0x88, //## ### ## ##..## -0x80, 0x04, 0x08, 0x08, 0x04, 0x08, 0x18, 0x80, //# $ # # $ #.## -0x80, 0x44, 0x00, 0x00, 0x04, 0x08, 0x18, 0x00, //# $$ $ #.# -0x80, 0x00, 0x08, 0x88, 0x00, 0x08, 0x18, 0x00, //# ### #.# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //############## -//Level: 121 -0x0F, 0x0C,//Size x and y -0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // ######### -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, // # # -0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, // # # # # # -0x00, 0x00, 0x00, 0x80, 0x04, 0x04, 0x80, 0x80, // # $ $# # -0x88, 0x88, 0x88, 0x80, 0x00, 0x40, 0x00, 0x80, //####### $ # -0x81, 0x18, 0x00, 0x88, 0x04, 0x04, 0x80, 0x80, //#..# ## $ $# # -0x81, 0x10, 0x00, 0x88, 0x04, 0x04, 0x00, 0x80, //#.. ## $ $ # -0x81, 0x18, 0x00, 0x88, 0x08, 0x88, 0x88, 0x80, //#..# ## ###### -0x81, 0x18, 0x08, 0x04, 0x04, 0x08, 0x00, 0x00, //#..# # $ $ # -0x81, 0x10, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00, //#.. $ # -0x80, 0x08, 0x88, 0x02, 0x08, 0x88, 0x00, 0x00, //# ### @ ### -0x88, 0x88, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, //#### ##### -//Level: 122 -0x0E, 0x0D,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // ######### -0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, // # # -0x00, 0x00, 0x08, 0x00, 0x48, 0x48, 0x08, // # $#$# # -0x08, 0x88, 0x88, 0x80, 0x08, 0x04, 0x08, // ###### # $ # -0x08, 0x00, 0x08, 0x04, 0x00, 0x40, 0x08, // # # $ $ # -0x88, 0x04, 0x00, 0x00, 0x08, 0x88, 0x08, //## $ ### # -0x80, 0x00, 0x84, 0x88, 0x88, 0x00, 0x08, //# #$#### # -0x80, 0x00, 0x04, 0x08, 0x88, 0x08, 0x88, //# $ ### ### -0x88, 0x88, 0x81, 0x10, 0x28, 0x08, 0x80, //#####.. @# ## -0x00, 0x08, 0x11, 0x14, 0x04, 0x40, 0x80, // #...$ $$ # -0x00, 0x08, 0x11, 0x18, 0x00, 0x00, 0x80, // #...# # -0x00, 0x08, 0x11, 0x18, 0x88, 0x88, 0x80, // #...###### -0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // ##### -//Level: 123 -0x0D, 0x0A,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // #### -0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, //###### ##### -0x82, 0x40, 0x00, 0x04, 0x00, 0x40, 0x80, //#@$ $ $ # -0x84, 0x88, 0x80, 0x40, 0x80, 0x80, 0x80, //#$### $ # # # -0x80, 0x08, 0x00, 0x80, 0x40, 0x00, 0x80, //# # # $ # -0x80, 0x48, 0x00, 0x00, 0x80, 0x88, 0x80, //# $# # ### -0x80, 0x04, 0x08, 0x48, 0x00, 0x08, 0x00, //# $ #$# # -0x81, 0x11, 0x11, 0x11, 0x11, 0x08, 0x00, //#......... # -0x88, 0x88, 0x88, 0x88, 0x00, 0x08, 0x00, //######## # -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, // ##### -//Level: 124 -0x09, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, //######### -0x82, 0x00, 0x00, 0x00, 0x80, //#@ # -0x80, 0x41, 0x41, 0x40, 0x80, //# $.$.$ # -0x80, 0x14, 0x14, 0x10, 0x80, //# .$.$. # -0x80, 0x41, 0x51, 0x40, 0x80, //# $.*.$ # -0x80, 0x14, 0x14, 0x10, 0x80, //# .$.$. # -0x80, 0x41, 0x41, 0x40, 0x80, //# $.$.$ # -0x80, 0x00, 0x00, 0x00, 0x80, //# # -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 125 -0x09, 0x08,//Size x and y -0x08, 0x88, 0x88, 0x80, 0x00, // ###### -0x88, 0x00, 0x12, 0x88, 0x00, //## .@## -0x80, 0x50, 0x80, 0x08, 0x80, //# * # ## -0x80, 0x00, 0x80, 0x00, 0x80, //# # # -0x80, 0x48, 0x80, 0x80, 0x80, //# $## # # -0x80, 0x04, 0x04, 0x51, 0x80, //# $ $*.# -0x80, 0x01, 0x80, 0x00, 0x80, //# .# # -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 126 -0x13, 0x06,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //################### -0x80, 0x00, 0x11, 0x10, 0x02, 0x00, 0x11, 0x10, 0x00, 0x80, //# ... @ ... # -0x80, 0x44, 0x40, 0x08, 0x88, 0x88, 0x00, 0x44, 0x40, 0x80, //# $$$ ##### $$$ # -0x88, 0x00, 0x08, 0x88, 0x00, 0x08, 0x88, 0x00, 0x08, 0x80, //## ### ### ## -0x08, 0x80, 0x08, 0x00, 0x00, 0x00, 0x08, 0x80, 0x08, 0x00, // ## # ## # -0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // #### #### -//Level: 127 -0x10, 0x10,//Size x and y -0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // #### -0x00, 0x80, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, // # ########### -0x00, 0x80, 0x00, 0x04, 0x00, 0x04, 0x04, 0x08, // # $ $ $ # -0x00, 0x80, 0x48, 0x04, 0x08, 0x00, 0x40, 0x08, // # $# $ # $ # -0x00, 0x80, 0x04, 0x04, 0x00, 0x80, 0x00, 0x08, // # $ $ # # -0x88, 0x80, 0x48, 0x08, 0x00, 0x88, 0x88, 0x08, //### $# # #### # -0x82, 0x84, 0x04, 0x04, 0x00, 0x88, 0x00, 0x08, //#@#$ $ $ ## # -0x80, 0x00, 0x04, 0x08, 0x48, 0x00, 0x08, 0x08, //# $ #$# # # -0x80, 0x00, 0x40, 0x00, 0x04, 0x04, 0x04, 0x08, //# $ $ $ $ # -0x88, 0x88, 0x80, 0x08, 0x88, 0x88, 0x88, 0x88, //##### ######### -0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // # # -0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // # # -0x00, 0x81, 0x11, 0x11, 0x18, 0x00, 0x00, 0x00, // #......# -0x00, 0x81, 0x11, 0x11, 0x18, 0x00, 0x00, 0x00, // #......# -0x00, 0x81, 0x11, 0x11, 0x18, 0x00, 0x00, 0x00, // #......# -0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ######## -//Level: 128 -0x0B, 0x0B,//Size x and y -0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // #### -0x88, 0x88, 0x88, 0x80, 0x28, 0x00, //####### @# -0x80, 0x00, 0x00, 0x40, 0x08, 0x00, //# $ # -0x80, 0x00, 0x48, 0x80, 0x48, 0x00, //# $## $# -0x88, 0x48, 0x11, 0x18, 0x08, 0x00, //##$#...# # -0x08, 0x04, 0x11, 0x10, 0x08, 0x00, // # $... # -0x08, 0x08, 0x10, 0x18, 0x08, 0x80, // # #. .# ## -0x08, 0x00, 0x08, 0x08, 0x40, 0x80, // # # #$ # -0x08, 0x40, 0x04, 0x00, 0x00, 0x80, // #$ $ # -0x08, 0x00, 0x88, 0x88, 0x88, 0x80, // # ####### -0x08, 0x88, 0x80, 0x00, 0x00, 0x00, // #### -//Level: 129 -0x11, 0x10,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ############ -0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, // # ## -0x00, 0x00, 0x80, 0x08, 0x08, 0x44, 0x04, 0x00, 0x80, // # # #$$ $ # -0x00, 0x00, 0x84, 0x08, 0x48, 0x00, 0x88, 0x02, 0x80, // #$ #$# ## @# -0x00, 0x08, 0x80, 0x88, 0x08, 0x04, 0x08, 0x08, 0x80, // ## ## # $ # ## -0x00, 0x08, 0x00, 0x04, 0x08, 0x40, 0x08, 0x08, 0x00, // # $ #$ # # -0x00, 0x08, 0x00, 0x08, 0x04, 0x00, 0x08, 0x08, 0x00, // # # $ # # -0x00, 0x08, 0x80, 0x40, 0x40, 0x00, 0x88, 0x08, 0x00, // ## $ $ ## # -0x00, 0x08, 0x00, 0x80, 0x08, 0x80, 0x04, 0x08, 0x00, // # # ## $ # -0x00, 0x08, 0x00, 0x00, 0x88, 0x04, 0x48, 0x08, 0x00, // # ## $$# # -0x88, 0x88, 0x88, 0x44, 0x00, 0x08, 0x00, 0x08, 0x00, //######$$ # # -0x81, 0x11, 0x18, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, //#....# ######## -0x81, 0x81, 0x11, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, //#.#... ## -0x81, 0x11, 0x10, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //#.... # -0x81, 0x11, 0x10, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //#.... # -0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //######### -//Level: 130 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, //# ### -0x80, 0x48, 0x00, 0x04, 0x08, 0x80, 0x04, 0x00, 0x00, 0x88, //# $# $ ## $ ## -0x80, 0x00, 0x04, 0x88, 0x80, 0x00, 0x08, 0x04, 0x40, 0x88, //# $### # $$ ## -0x81, 0x88, 0x80, 0x00, 0x00, 0x40, 0x40, 0x88, 0x00, 0x88, //#.### $ $ ## ## -0x81, 0x11, 0x80, 0x08, 0x00, 0x80, 0x00, 0x08, 0x40, 0x08, //#...# # # #$ # -0x81, 0x18, 0x84, 0x48, 0x88, 0x80, 0x40, 0x08, 0x00, 0x08, //#..##$$#### $ # # -0x81, 0x11, 0x80, 0x00, 0x00, 0x04, 0x08, 0x80, 0x08, 0x88, //#...# $ ## ### -0x81, 0x11, 0x40, 0x08, 0x88, 0x00, 0x80, 0x00, 0x08, 0x08, //#...$ ### # # # -0x88, 0x11, 0x00, 0x48, 0x00, 0x88, 0x00, 0x08, 0x82, 0x08, //##.. $# ## ##@ # -0x88, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, //###.# # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 131 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x81, 0x11, 0x18, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, //#....### # -0x81, 0x11, 0x18, 0x88, 0x88, 0x08, 0x00, 0x84, 0x80, 0x88, //#....##### # #$# ## -0x81, 0x11, 0x18, 0x88, 0x00, 0x08, 0x40, 0x04, 0x00, 0x08, //#....### #$ $ # -0x81, 0x11, 0x18, 0x88, 0x00, 0x00, 0x40, 0x08, 0x44, 0x88, //#....### $ #$$## -0x88, 0x00, 0x88, 0x88, 0x04, 0x80, 0x08, 0x40, 0x40, 0x08, //## #### $# #$ $ # -0x88, 0x00, 0x88, 0x88, 0x00, 0x40, 0x04, 0x00, 0x80, 0x08, //## #### $ $ # # -0x82, 0x00, 0x88, 0x88, 0x48, 0x88, 0x48, 0x80, 0x40, 0x08, //#@ ####$###$## $ # -0x88, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x40, 0x08, //## # # $ # -0x88, 0x00, 0x08, 0x88, 0x00, 0x80, 0x04, 0x00, 0x88, 0x88, //## ### # $ #### -0x88, 0x88, 0x88, 0x88, 0x00, 0x80, 0x08, 0x00, 0x00, 0x08, //######## # # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 132 -0x0C, 0x07,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x88, 0x88, // ########## -0x88, 0x82, 0x00, 0x10, 0x00, 0x08, //###@ . # -0x80, 0x00, 0x88, 0x48, 0x80, 0x08, //# ##$## # -0x80, 0x04, 0x10, 0x10, 0x14, 0x88, //# $. . .$## -0x88, 0x04, 0x88, 0x48, 0x80, 0x80, //## $##$## # -0x08, 0x00, 0x00, 0x10, 0x00, 0x80, // # . # -0x08, 0x88, 0x88, 0x88, 0x88, 0x80, // ########## -//Level: 133 -0x08, 0x07,//Size x and y -0x00, 0x88, 0x88, 0x80, // ##### -0x88, 0x80, 0x00, 0x80, //### # -0x80, 0x40, 0x80, 0x88, //# $ # ## -0x80, 0x41, 0x41, 0x08, //# $.$. # -0x80, 0x88, 0x10, 0x08, //# ##. # -0x80, 0x02, 0x08, 0x88, //# @ ### -0x88, 0x88, 0x88, 0x00, //###### -//Level: 134 -0x0A, 0x09,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x00, // ###### -0x00, 0x80, 0x00, 0x08, 0x88, // # ### -0x00, 0x80, 0x40, 0x00, 0x08, // # $ # -0x88, 0x80, 0x40, 0x88, 0x08, //### $ ## # -0x81, 0x11, 0x04, 0x00, 0x08, //#... $ # -0x81, 0x11, 0x48, 0x40, 0x88, //#...$#$ ## -0x88, 0x88, 0x08, 0x04, 0x08, //#### # $ # -0x00, 0x08, 0x00, 0x20, 0x08, // # @ # -0x00, 0x08, 0x88, 0x88, 0x88, // ####### -//Level: 135 -0x13, 0x0F,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // #### -0x88, 0x88, 0x88, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, //###### # -0x80, 0x00, 0x04, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //# $ ########### -0x80, 0x88, 0x04, 0x00, 0x88, 0x00, 0x80, 0x11, 0x11, 0x80, //# ## $ ## # ....# -0x80, 0x40, 0x40, 0x04, 0x00, 0x00, 0x80, 0x11, 0x11, 0x80, //# $ $ $ # ....# -0x80, 0x80, 0x04, 0x40, 0x88, 0x80, 0x80, 0x11, 0x11, 0x80, //# # $$ ### # ....# -0x80, 0x24, 0x40, 0x00, 0x08, 0x80, 0x80, 0x11, 0x11, 0x80, //# @$$ ## # ....# -0x88, 0x88, 0x00, 0x80, 0x08, 0x00, 0x88, 0x08, 0x88, 0x80, //#### # # ## #### -0x00, 0x08, 0x04, 0x88, 0x88, 0x00, 0x00, 0x08, 0x00, 0x00, // # $#### # -0x00, 0x08, 0x40, 0x40, 0x88, 0x88, 0x48, 0x08, 0x00, 0x00, // #$ $ ####$# # -0x00, 0x88, 0x08, 0x00, 0x80, 0x08, 0x08, 0x08, 0x00, 0x00, // ## # # # # # -0x00, 0x80, 0x04, 0x44, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // # $$$ # -0x00, 0x80, 0x00, 0x00, 0x88, 0x88, 0x80, 0x08, 0x00, 0x00, // # ##### # -0x00, 0x80, 0x08, 0x88, 0x80, 0x00, 0x88, 0x88, 0x00, 0x00, // # #### #### -0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // #### -//Level: 136 -0x0B, 0x09,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x00, // ######### -0x08, 0x00, 0x08, 0x00, 0x08, 0x00, // # # # -0x08, 0x04, 0x44, 0x44, 0x08, 0x00, // # $$$$$ # -0x88, 0x04, 0x04, 0x04, 0x08, 0x00, //## $ $ $ # -0x80, 0x40, 0x02, 0x00, 0x08, 0x00, //# $ @ # -0x80, 0x40, 0x88, 0x88, 0x08, 0x80, //# $ #### ## -0x80, 0x08, 0x11, 0x11, 0x10, 0x80, //# #..... # -0x88, 0x00, 0x11, 0x11, 0x10, 0x80, //## ..... # -0x08, 0x88, 0x88, 0x88, 0x88, 0x80, // ########## -//Level: 137 -0x0E, 0x0B,//Size x and y -0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // ####### -0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x88, // ## ## -0x00, 0x00, 0x88, 0x00, 0x48, 0x80, 0x08, // ## $## # -0x00, 0x00, 0x80, 0x08, 0x00, 0x04, 0x08, // # # $ # -0x00, 0x00, 0x80, 0x80, 0x08, 0x08, 0x08, // # # # # # -0x00, 0x00, 0x80, 0x40, 0x40, 0x04, 0x08, // # $ $ $ # -0x88, 0x88, 0x88, 0x80, 0x84, 0x80, 0x08, //####### #$# # -0x80, 0x04, 0x04, 0x00, 0x00, 0x00, 0x88, //# $ $ ## -0x82, 0x11, 0x40, 0x55, 0x18, 0x88, 0x80, //#@..$ **.#### -0x88, 0x11, 0x11, 0x11, 0x88, 0x00, 0x00, //##......## -0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ######## -//Level: 138 -0x0D, 0x0B,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // ##### -0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, // # # -0x08, 0x88, 0x80, 0x80, 0x88, 0x88, 0x80, // #### # ##### -0x88, 0x00, 0x04, 0x04, 0x00, 0x00, 0x80, //## $ $ # -0x80, 0x48, 0x08, 0x11, 0x18, 0x40, 0x80, //# $# #...#$ # -0x82, 0x40, 0x01, 0x11, 0x80, 0x08, 0x80, //#@$ ...# ## -0x80, 0x48, 0x01, 0x18, 0x04, 0x00, 0x80, //# $# ..# $ # -0x88, 0x00, 0x01, 0x80, 0x00, 0x00, 0x80, //## .# # -0x08, 0x88, 0x04, 0x04, 0x08, 0x00, 0x80, // ### $ $ # # -0x00, 0x08, 0x88, 0x00, 0x08, 0x88, 0x80, // ### #### -0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // ##### -//Level: 139 -0x09, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x00, 0x00, //###### -0x80, 0x00, 0x28, 0x00, 0x00, //# @# -0x80, 0x40, 0x08, 0x88, 0x80, //# $ #### -0x80, 0x45, 0x11, 0x50, 0x80, //# $*..* # -0x80, 0x51, 0x15, 0x40, 0x80, //# *..*$ # -0x88, 0x88, 0x00, 0x40, 0x80, //#### $ # -0x00, 0x08, 0x00, 0x00, 0x80, // # # -0x00, 0x08, 0x88, 0x88, 0x80, // ###### -//Level: 140 -0x09, 0x09,//Size x and y -0x08, 0x88, 0x88, 0x80, 0x00, // ###### -0x88, 0x00, 0x00, 0x88, 0x00, //## ## -0x80, 0x08, 0x80, 0x08, 0x00, //# ## # -0x80, 0x80, 0x08, 0x08, 0x00, //# # # # -0x81, 0x00, 0x18, 0x48, 0x80, //#. .#$## -0x80, 0x80, 0x50, 0x40, 0x80, //# # * $ # -0x80, 0x80, 0x50, 0x42, 0x80, //# # * $@# -0x80, 0x01, 0x10, 0x40, 0x80, //# .. $ # -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 141 -0x0B, 0x09,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x00, // ######### -0x08, 0x00, 0x88, 0x00, 0x08, 0x00, // # ## # -0x08, 0x00, 0x04, 0x00, 0x08, 0x00, // # $ # -0x08, 0x40, 0x88, 0x80, 0x48, 0x00, // #$ ### $# -0x08, 0x08, 0x11, 0x18, 0x08, 0x00, // # #...# # -0x88, 0x08, 0x11, 0x18, 0x08, 0x80, //## #...# ## -0x80, 0x40, 0x04, 0x00, 0x40, 0x80, //# $ $ $ # -0x80, 0x00, 0x00, 0x80, 0x20, 0x80, //# # @ # -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //########### -//Level: 142 -0x0E, 0x0D,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // ##### -0x00, 0x00, 0x08, 0x20, 0x08, 0x88, 0x80, // #@ #### -0x00, 0x88, 0x88, 0x84, 0x00, 0x00, 0x80, // #####$ # -0x00, 0x81, 0x11, 0x80, 0x08, 0x04, 0x88, // #...# # $## -0x00, 0x81, 0x51, 0x84, 0x08, 0x40, 0x08, // #.*.#$ #$ # -0x88, 0x81, 0x11, 0x04, 0x08, 0x08, 0x08, //###... $ # # # -0x80, 0x01, 0x18, 0x84, 0x80, 0x00, 0x08, //# ..##$# # -0x80, 0x08, 0x88, 0x80, 0x08, 0x04, 0x08, //# #### # $ # -0x88, 0x00, 0x04, 0x00, 0x08, 0x44, 0x08, //## $ #$$ # -0x08, 0x00, 0x88, 0x08, 0x80, 0x00, 0x88, // # ## ## ## -0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x80, // ##### # -0x00, 0x00, 0x08, 0x00, 0x88, 0x88, 0x80, // # ##### -0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // #### -//Level: 143 -0x11, 0x0F,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // ##### -0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x08, 0x00, 0x00, // ##### # -0x00, 0x00, 0x88, 0x04, 0x00, 0x40, 0x08, 0x88, 0x80, // ## $ $ #### -0x88, 0x88, 0x80, 0x40, 0x04, 0x04, 0x08, 0x81, 0x80, //##### $ $ $ ##.# -0x80, 0x00, 0x00, 0x00, 0x44, 0x00, 0x88, 0x11, 0x80, //# $$ ##..# -0x80, 0x08, 0x88, 0x88, 0x80, 0x88, 0x81, 0x10, 0x80, //# ###### ###.. # -0x88, 0x08, 0x00, 0x80, 0x00, 0x08, 0x11, 0x10, 0x80, //## # # #... # -0x80, 0x40, 0x00, 0x80, 0x00, 0x08, 0x11, 0x10, 0x80, //# $ # #... # -0x82, 0x08, 0x40, 0x88, 0x08, 0x88, 0x81, 0x11, 0x80, //#@ #$ ## ####...# -0x88, 0x88, 0x00, 0x40, 0x44, 0x00, 0x88, 0x11, 0x80, //#### $ $$ ##..# -0x00, 0x08, 0x80, 0x04, 0x04, 0x00, 0x41, 0x11, 0x80, // ## $ $ $...# -0x00, 0x00, 0x80, 0x44, 0x00, 0x40, 0x80, 0x01, 0x80, // # $$ $ # .# -0x00, 0x00, 0x80, 0x00, 0x40, 0x40, 0x08, 0x88, 0x80, // # $ $ #### -0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x08, 0x00, 0x00, // ###### # -0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // ##### -//Level: 144 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x00, 0x01, 0x11, 0x18, 0x00, 0x00, 0x88, 0x88, //# ....# #### -0x80, 0x00, 0x00, 0x01, 0x11, 0x10, 0x00, 0x00, 0x00, 0x08, //# .... # -0x80, 0x80, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x08, //# # ########## # -0x80, 0x84, 0x00, 0x08, 0x00, 0x00, 0x00, 0x88, 0x81, 0x18, //# #$ # ###..# -0x80, 0x04, 0x00, 0x08, 0x44, 0x88, 0x80, 0x00, 0x81, 0x18, //# $ #$$### #..# -0x80, 0x40, 0x88, 0x80, 0x40, 0x00, 0x40, 0x00, 0x81, 0x18, //# $ ### $ $ #..# -0x80, 0x40, 0x80, 0x00, 0x40, 0x40, 0x80, 0x08, 0x81, 0x18, //# $ # $ $ # ##..# -0x80, 0x08, 0x00, 0x44, 0x08, 0x04, 0x08, 0x80, 0x00, 0x88, //# # $$ # $ ## ## -0x82, 0x88, 0x04, 0x80, 0x04, 0x00, 0x40, 0x00, 0x00, 0x88, //#@## $# $ $ ## -0x88, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x80, 0x08, 0x88, //## ## # ### -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 145 -0x11, 0x0A,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //################ -0x80, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x08, 0x00, //# #@ # # -0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x04, 0x48, 0x00, //# # # # # $ $$# -0x80, 0x81, 0x11, 0x80, 0x84, 0x44, 0x00, 0x08, 0x00, //# #...# #$$$ # -0x80, 0x01, 0x11, 0x80, 0x80, 0x40, 0x04, 0x48, 0x80, //# ...# # $ $$## -0x80, 0x88, 0x18, 0x80, 0x80, 0x88, 0x00, 0x00, 0x80, //# ##.## # ## # -0x80, 0x81, 0x11, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, //# #... $ # -0x80, 0x88, 0x08, 0x88, 0x00, 0x88, 0x88, 0x88, 0x80, //# ## ### ####### -0x80, 0x00, 0x08, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, //# # #### -0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //###### -//Level: 146 -0x0A, 0x08,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x88, // ####### -0x00, 0x88, 0x00, 0x80, 0x28, // ## # @# -0x00, 0x80, 0x00, 0x80, 0x08, // # # # -0x00, 0x84, 0x04, 0x04, 0x08, // #$ $ $ # -0x00, 0x80, 0x48, 0x80, 0x08, // # $## # -0x88, 0x80, 0x40, 0x80, 0x88, //### $ # ## -0x81, 0x11, 0x11, 0x00, 0x80, //#..... # -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 147 -0x11, 0x12,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // ####### -0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x11, 0x80, // # ...# -0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x01, 0x11, 0x80, // ##### ...# -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x11, 0x80, // # ...# -0x00, 0x00, 0x00, 0x80, 0x08, 0x80, 0x01, 0x11, 0x80, // # ## ...# -0x00, 0x00, 0x00, 0x88, 0x08, 0x80, 0x01, 0x11, 0x80, // ## ## ...# -0x00, 0x00, 0x08, 0x88, 0x08, 0x88, 0x88, 0x88, 0x80, // ### ######## -0x00, 0x00, 0x08, 0x04, 0x44, 0x08, 0x80, 0x00, 0x00, // # $$$ ## -0x08, 0x88, 0x88, 0x00, 0x40, 0x40, 0x88, 0x88, 0x80, // ##### $ $ ##### -0x88, 0x00, 0x08, 0x40, 0x40, 0x00, 0x80, 0x00, 0x80, //## #$ $ # # -0x82, 0x04, 0x00, 0x40, 0x00, 0x04, 0x00, 0x40, 0x80, //#@ $ $ $ $ # -0x88, 0x88, 0x88, 0x04, 0x40, 0x40, 0x88, 0x88, 0x80, //###### $$ $ ##### -0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x80, 0x00, 0x00, // # $ # -0x00, 0x00, 0x08, 0x88, 0x80, 0x88, 0x80, 0x00, 0x00, // #### ### -0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, // # # -0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, // # # -0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, // # # -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // #### -//Level: 148 -0x11, 0x0D,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // ######### -0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x80, 0x00, 0x80, // ### # # -0x00, 0x00, 0x00, 0x82, 0x40, 0x04, 0x04, 0x40, 0x80, // #@$ $ $$ # -0x88, 0x80, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x80, //### ###### # -0x81, 0x88, 0x80, 0x00, 0x88, 0x00, 0x88, 0x40, 0x80, //#.### ## ##$ # -0x81, 0x11, 0x11, 0x51, 0x00, 0x88, 0x04, 0x00, 0x80, //#.....*. ## $ # -0x80, 0x58, 0x80, 0x08, 0x40, 0x80, 0x04, 0x00, 0x80, //# *## #$ # $ # -0x80, 0x00, 0x80, 0x04, 0x00, 0x11, 0x11, 0x11, 0x80, //# # $ ......# -0x88, 0x04, 0x88, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, //## $## ######### -0x08, 0x04, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // # $ #### -0x08, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, // # $ $ # -0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, // # # -0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // ####### -//Level: 149 -0x0B, 0x0A,//Size x and y -0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // ##### -0x08, 0x02, 0x08, 0x88, 0x88, 0x80, // # @ ###### -0x08, 0x08, 0x11, 0x50, 0x00, 0x80, // # #..* # -0x08, 0x01, 0x11, 0x80, 0x00, 0x80, // # ...# # -0x88, 0x48, 0x80, 0x40, 0x40, 0x80, //##$## $ $ # -0x80, 0x00, 0x84, 0x88, 0x88, 0x80, //# #$##### -0x80, 0x00, 0x40, 0x00, 0x80, 0x00, //# $ # -0x88, 0x88, 0x80, 0x80, 0x80, 0x00, //##### # # -0x00, 0x00, 0x80, 0x00, 0x80, 0x00, // # # -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, // ##### -//Level: 150 -0x07, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x80, //####### -0x80, 0x01, 0x02, 0x80, //# . @# -0x80, 0x41, 0x40, 0x80, //# $.$ # -0x80, 0x51, 0x40, 0x80, //# *.$ # -0x81, 0x45, 0x41, 0x80, //#.$*$.# -0x80, 0x41, 0x50, 0x80, //# $.* # -0x80, 0x41, 0x40, 0x80, //# $.$ # -0x80, 0x01, 0x00, 0x80, //# . # -0x88, 0x88, 0x88, 0x80, //####### -//Level: 151 -0x09, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, //######### -0x82, 0x00, 0x50, 0x00, 0x80, //#@ * # -0x80, 0x41, 0x41, 0x40, 0x80, //# $.$.$ # -0x80, 0x14, 0x14, 0x10, 0x80, //# .$.$. # -0x80, 0x01, 0x41, 0x40, 0x80, //# .$.$ # -0x80, 0x00, 0x50, 0x00, 0x80, //# * # -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 152 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x02, 0x88, //#### @## -0x80, 0x05, 0x40, 0x88, //# *$ ## -0x80, 0x00, 0x00, 0x88, //# ## -0x88, 0x01, 0x88, 0x88, //## .#### -0x88, 0x40, 0x88, 0x88, //##$ #### -0x88, 0x01, 0x88, 0x88, //## .#### -0x88, 0x88, 0x88, 0x88, //######## -//Level: 153 -0x09, 0x0C,//Size x and y -0x08, 0x88, 0x80, 0x00, 0x00, // #### -0x08, 0x00, 0x88, 0x88, 0x00, // # #### -0x08, 0x40, 0x20, 0x08, 0x00, // #$ @ # -0x88, 0x00, 0x88, 0x48, 0x80, //## ##$## -0x80, 0x58, 0x18, 0x00, 0x80, //# *#.# # -0x80, 0x11, 0x54, 0x40, 0x80, //# ..*$$ # -0x80, 0x18, 0x18, 0x00, 0x80, //# .#.# # -0x88, 0x00, 0x08, 0x08, 0x80, //## # ## -0x08, 0x88, 0x04, 0x00, 0x80, // ### $ # -0x00, 0x08, 0x08, 0x00, 0x80, // # # # -0x00, 0x08, 0x00, 0x08, 0x80, // # ## -0x00, 0x08, 0x88, 0x88, 0x00, // ##### -//Level: 154 -0x0C, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############ -0x81, 0x11, 0x08, 0x00, 0x00, 0x08, //#... # # -0x81, 0x10, 0x08, 0x08, 0x80, 0x08, //#.. # ## # -0x81, 0x10, 0x00, 0x00, 0x80, 0x08, //#.. # # -0x81, 0x10, 0x08, 0x04, 0x88, 0x08, //#.. # $## # -0x81, 0x11, 0x08, 0x40, 0x40, 0x08, //#... #$ $ # -0x88, 0x88, 0x88, 0x00, 0x44, 0x08, //###### $$ # -0x08, 0x80, 0x04, 0x04, 0x40, 0x08, // ## $ $$ # -0x08, 0x20, 0x44, 0x40, 0x08, 0x08, // #@ $$$ # # -0x08, 0x80, 0x40, 0x88, 0x00, 0x08, // ## $ ## # -0x00, 0x80, 0x00, 0x00, 0x00, 0x08, // # # -0x00, 0x88, 0x88, 0x88, 0x88, 0x88, // ########## -//Level: 155 -0x0B, 0x0B,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //########## -0x80, 0x00, 0x00, 0x80, 0x08, 0x00, //# # # -0x80, 0x04, 0x04, 0x80, 0x08, 0x80, //# $ $# ## -0x80, 0x08, 0x81, 0x80, 0x00, 0x80, //# ##.# # -0x88, 0x48, 0x81, 0x88, 0x40, 0x80, //##$##.##$ # -0x80, 0x41, 0x11, 0x11, 0x00, 0x80, //# $..... # -0x82, 0x48, 0x81, 0x88, 0x48, 0x80, //#@$##.##$## -0x88, 0x08, 0x81, 0x80, 0x00, 0x80, //## ##.# # -0x80, 0x00, 0x40, 0x40, 0x00, 0x80, //# $ $ # -0x80, 0x00, 0x80, 0x00, 0x88, 0x80, //# # ### -0x88, 0x88, 0x88, 0x88, 0x80, 0x00, //######### -//Level: 156 -0x0F, 0x0C,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ##### -0x88, 0x88, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, //##### # -0x80, 0x00, 0x40, 0x20, 0x80, 0x00, 0x00, 0x00, //# $ @ # -0x80, 0x04, 0x08, 0x18, 0x88, 0x88, 0x00, 0x00, //# $ #.##### -0x88, 0x40, 0x88, 0x18, 0x80, 0x08, 0x88, 0x80, //##$ ##.## #### -0x08, 0x00, 0x11, 0x11, 0x10, 0x48, 0x00, 0x80, // # ..... $# # -0x08, 0x04, 0x88, 0x18, 0x80, 0x08, 0x40, 0x80, // # $##.## #$ # -0x08, 0x00, 0x08, 0x18, 0x80, 0x00, 0x00, 0x80, // # #.## # -0x08, 0x88, 0x04, 0x08, 0x88, 0x88, 0x08, 0x80, // ### $ ##### ## -0x00, 0x08, 0x08, 0x40, 0x00, 0x00, 0x40, 0x80, // # #$ $ # -0x00, 0x08, 0x00, 0x00, 0x88, 0x80, 0x00, 0x80, // # ### # -0x00, 0x08, 0x88, 0x88, 0x80, 0x88, 0x88, 0x80, // ###### ##### -//Level: 157 -0x12, 0x10,//Size x and y -0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // #### -0x00, 0x80, 0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // # ######### -0x08, 0x80, 0x08, 0x80, 0x08, 0x00, 0x08, 0x00, 0x00, // ## ## # # -0x08, 0x00, 0x48, 0x04, 0x24, 0x00, 0x08, 0x88, 0x80, // # $# $@$ #### -0x08, 0x40, 0x04, 0x00, 0x80, 0x40, 0x48, 0x00, 0x88, // #$ $ # $ $# ## -0x88, 0x00, 0x48, 0x80, 0x84, 0x04, 0x00, 0x00, 0x08, //## $## #$ $ # -0x80, 0x08, 0x00, 0x80, 0x80, 0x00, 0x44, 0x40, 0x08, //# # # # $$$ # -0x80, 0x40, 0x00, 0x04, 0x00, 0x48, 0x80, 0x88, 0x88, //# $ $ $## #### -0x80, 0x40, 0x40, 0x84, 0x80, 0x08, 0x00, 0x80, 0x00, //# $ $ #$# # # -0x88, 0x00, 0x88, 0x80, 0x08, 0x88, 0x40, 0x80, 0x00, //## ### ###$ # -0x08, 0x00, 0x81, 0x11, 0x10, 0x00, 0x00, 0x80, 0x00, // # #.... # -0x08, 0x88, 0x81, 0x11, 0x11, 0x18, 0x88, 0x80, 0x00, // ####......#### -0x00, 0x08, 0x11, 0x11, 0x88, 0x88, 0x00, 0x00, 0x00, // #....#### -0x00, 0x08, 0x11, 0x18, 0x80, 0x00, 0x00, 0x00, 0x00, // #...## -0x00, 0x08, 0x11, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, // #...# -0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // ##### -//Level: 158 -0x09, 0x0C,//Size x and y -0x08, 0x88, 0x80, 0x00, 0x00, // #### -0x08, 0x00, 0x80, 0x00, 0x00, // # # -0x08, 0x40, 0x88, 0x80, 0x00, // #$ ### -0x08, 0x00, 0x02, 0x80, 0x00, // # @# -0x88, 0x08, 0x10, 0x88, 0x80, //## #. ### -0x80, 0x08, 0x51, 0x40, 0x80, //# #*.$ # -0x80, 0x44, 0x11, 0x80, 0x80, //# $$..# # -0x88, 0x08, 0x81, 0x00, 0x80, //## ##. # -0x08, 0x04, 0x00, 0x88, 0x80, // # $ ### -0x08, 0x00, 0x88, 0x80, 0x00, // # ### -0x08, 0x00, 0x80, 0x00, 0x00, // # # -0x08, 0x88, 0x80, 0x00, 0x00, // #### -//Level: 159 -0x0F, 0x0D,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // ####### -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x80, // ##### # -0x08, 0x88, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, // #### $ $ $ $ # -0x08, 0x00, 0x80, 0x04, 0x08, 0x88, 0x00, 0x80, // # # $ ### # -0x08, 0x00, 0x00, 0x20, 0x00, 0x08, 0x40, 0x80, // # @ #$ # -0x08, 0x08, 0x88, 0x08, 0x88, 0x00, 0x00, 0x80, // # ### ### # -0x08, 0x08, 0x11, 0x11, 0x18, 0x04, 0x40, 0x80, // # #.....# $$ # -0x08, 0x08, 0x11, 0x11, 0x18, 0x00, 0x48, 0x80, // # #.....# $## -0x88, 0x48, 0x11, 0x11, 0x14, 0x00, 0x08, 0x00, //##$#.....$ # -0x80, 0x00, 0x08, 0x80, 0x80, 0x08, 0x88, 0x00, //# ## # ### -0x80, 0x40, 0x40, 0x00, 0x44, 0x08, 0x00, 0x00, //# $ $ $$ # -0x88, 0x00, 0x88, 0x88, 0x80, 0x08, 0x00, 0x00, //## ##### # -0x08, 0x88, 0x80, 0x00, 0x88, 0x88, 0x00, 0x00, // #### #### -//Level: 160 -0x10, 0x0C,//Size x and y -0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, //##### -0x81, 0x11, 0x80, 0x88, 0x88, 0x80, 0x00, 0x00, //#...# ##### -0x81, 0x11, 0x88, 0x80, 0x00, 0x80, 0x00, 0x00, //#...### # -0x81, 0x11, 0x10, 0x00, 0x44, 0x88, 0x88, 0x80, //#.... $$##### -0x81, 0x11, 0x10, 0x08, 0x00, 0x80, 0x00, 0x88, //#.... # # ## -0x81, 0x18, 0x48, 0x88, 0x80, 0x84, 0x80, 0x08, //#..#$#### #$# # -0x88, 0x04, 0x00, 0x80, 0x00, 0x00, 0x44, 0x08, //## $ # $$ # -0x80, 0x04, 0x80, 0x20, 0x40, 0x44, 0x80, 0x08, //# $# @ $ $$# # -0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x40, 0x88, //# $ $ $ # $ ## -0x80, 0x00, 0x80, 0x04, 0x08, 0x80, 0x00, 0x80, //# # $ ## # -0x88, 0x88, 0x88, 0x00, 0x08, 0x88, 0x88, 0x80, //###### ###### -0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // ##### -//Level: 161 -0x13, 0x0E,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x80, // ######## -0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x11, 0x11, 0x80, // # ....# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x11, 0x11, 0x80, //############ ....# -0x80, 0x00, 0x08, 0x00, 0x40, 0x40, 0x00, 0x11, 0x11, 0x80, //# # $ $ ....# -0x80, 0x44, 0x48, 0x40, 0x04, 0x08, 0x00, 0x11, 0x11, 0x80, //# $$$#$ $ # ....# -0x80, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x11, 0x11, 0x80, //# $ $ # ....# -0x80, 0x44, 0x08, 0x40, 0x40, 0x48, 0x88, 0x88, 0x88, 0x80, //# $$ #$ $ $######## -0x80, 0x04, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //# $ # # -0x88, 0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //## ######### -0x80, 0x00, 0x08, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, //# # ## -0x80, 0x00, 0x00, 0x40, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, //# $ ## -0x80, 0x04, 0x48, 0x44, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, //# $$#$$ @# -0x80, 0x00, 0x08, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, //# # ## -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //########### -//Level: 162 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x00, 0x80, 0x00, 0x88, 0x88, 0x80, 0x00, 0x08, //# # ##### # -0x88, 0x04, 0x00, 0x80, 0x00, 0x88, 0x88, 0x00, 0x40, 0x08, //## $ # #### $ # -0x88, 0x88, 0x04, 0x40, 0x00, 0x81, 0x18, 0x00, 0x80, 0x08, //#### $$ #..# # # -0x80, 0x04, 0x00, 0x40, 0x08, 0x81, 0x18, 0x88, 0x80, 0x88, //# $ $ ##..#### ## -0x80, 0x40, 0x00, 0x88, 0x81, 0x11, 0x10, 0x00, 0x44, 0x08, //# $ ###.... $$ # -0x80, 0x08, 0x48, 0x00, 0x01, 0x11, 0x18, 0x08, 0x04, 0x08, //# #$# ....# # $ # -0x80, 0x80, 0x08, 0x04, 0x01, 0x18, 0x88, 0x48, 0x00, 0x08, //# # # $ ..###$# # -0x80, 0x80, 0x00, 0x40, 0x81, 0x18, 0x00, 0x08, 0x80, 0x08, //# # $ #..# ## # -0x80, 0x00, 0x48, 0x00, 0x88, 0x88, 0x00, 0x08, 0x04, 0x88, //# $# #### # $## -0x80, 0x80, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x88, //# # # @# ## -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 163 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x18, 0x88, 0x18, //##.###.# -0x88, 0x08, 0x00, 0x18, //## # .# -0x88, 0x04, 0x40, 0x28, //## $$ @# -0x88, 0x00, 0x40, 0x08, //## $ # -0x88, 0x00, 0x80, 0x08, //## # # -0x88, 0x00, 0x88, 0x88, //## #### -0x88, 0x88, 0x88, 0x88, //######## -//Level: 164 -0x0E, 0x0D,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############## -0x80, 0x00, 0x88, 0x01, 0x11, 0x11, 0x18, //# ## ......# -0x80, 0x08, 0x88, 0x01, 0x18, 0x18, 0x08, //# ### ..#.# # -0x80, 0x48, 0x00, 0x11, 0x88, 0x10, 0x18, //# $# ..##. .# -0x88, 0x08, 0x04, 0x80, 0x80, 0x00, 0x08, //## # $# # # -0x80, 0x40, 0x04, 0x00, 0x00, 0x80, 0x88, //# $ $ # ## -0x80, 0x48, 0x08, 0x04, 0x88, 0x84, 0x08, //# $# # $###$ # -0x82, 0x08, 0x08, 0x04, 0x00, 0x80, 0x08, //#@ # # $ # # -0x80, 0x48, 0x08, 0x84, 0x80, 0x84, 0x08, //# $# ##$# #$ # -0x80, 0x40, 0x00, 0x80, 0x00, 0x00, 0x08, //# $ # # -0x88, 0x80, 0x00, 0x80, 0x88, 0x40, 0x88, //### # ##$ ## -0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x80, // ##### # -0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // ####### -//Level: 165 -0x0F, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# # -0x80, 0x41, 0x41, 0x41, 0x41, 0x41, 0x80, 0x80, //# $.$.$.$.$.# # -0x80, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x80, //# .$.$.$.$.$ # -0x80, 0x41, 0x41, 0x41, 0x41, 0x41, 0x82, 0x80, //# $.$.$.$.$.#@# -0x80, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x80, //# .$.$.$.$.$ # -0x80, 0x41, 0x41, 0x41, 0x41, 0x41, 0x80, 0x80, //# $.$.$.$.$.# # -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -//Level: 166 -0x0F, 0x0B,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ####### -0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // # # -0x00, 0x08, 0x04, 0x04, 0x08, 0x80, 0x00, 0x00, // # $ $ ## -0x00, 0x08, 0x88, 0x88, 0x11, 0x88, 0x88, 0x80, // #####..##### -0x88, 0x88, 0x88, 0x11, 0x51, 0x00, 0x40, 0x80, //######..*. $ # -0x80, 0x04, 0x24, 0x11, 0x11, 0x84, 0x40, 0x80, //# $@$....#$$ # -0x80, 0x00, 0x40, 0x84, 0x88, 0x80, 0x00, 0x80, //# $ #$### # -0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x88, 0x80, //##### ### -0x00, 0x00, 0x88, 0x80, 0x08, 0x88, 0x80, 0x00, // ### #### -0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, // # # -0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // #### -//Level: 167 -0x09, 0x07,//Size x and y -0x00, 0x88, 0x88, 0x80, 0x00, // ##### -0x00, 0x80, 0x00, 0x88, 0x80, // # ### -0x88, 0x81, 0x80, 0x00, 0x80, //###.# # -0x80, 0x41, 0x40, 0x80, 0x80, //# $.$ # # -0x80, 0x85, 0x04, 0x00, 0x80, //# #* $ # -0x82, 0x01, 0x08, 0x88, 0x80, //#@ . #### -0x88, 0x88, 0x88, 0x00, 0x00, //###### -//Level: 168 -0x13, 0x0E,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ####### -0x00, 0x00, 0x80, 0x08, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // # # #### -0x88, 0x88, 0x80, 0x48, 0x40, 0x80, 0x08, 0x80, 0x00, 0x00, //##### $#$ # ## -0x81, 0x10, 0x80, 0x08, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, //#.. # # # # -0x81, 0x10, 0x80, 0x48, 0x40, 0x80, 0x04, 0x88, 0x88, 0x00, //#.. # $#$ # $#### -0x81, 0x00, 0x80, 0x00, 0x00, 0x84, 0x00, 0x80, 0x08, 0x00, //#. # #$ # # -0x81, 0x10, 0x00, 0x48, 0x00, 0x80, 0x40, 0x00, 0x08, 0x00, //#.. $# # $ # -0x81, 0x12, 0x80, 0x08, 0x40, 0x84, 0x00, 0x80, 0x08, 0x00, //#..@# #$ #$ # # -0x81, 0x10, 0x80, 0x48, 0x00, 0x00, 0x04, 0x80, 0x08, 0x00, //#.. # $# $# # -0x81, 0x10, 0x80, 0x08, 0x44, 0x84, 0x00, 0x80, 0x08, 0x80, //#.. # #$$#$ # ## -0x81, 0x10, 0x80, 0x48, 0x00, 0x80, 0x04, 0x84, 0x00, 0x80, //#.. # $# # $#$ # -0x81, 0x10, 0x80, 0x08, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, //#.. # # # # # -0x88, 0x10, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, 0x00, 0x80, //##. #### ##### # -0x08, 0x88, 0x80, 0x08, 0x88, 0x80, 0x00, 0x88, 0x88, 0x80, // #### #### ##### -//Level: 169 -0x10, 0x0E,//Size x and y -0x88, 0x88, 0x80, 0x88, 0x88, 0x00, 0x00, 0x00, //##### #### -0x81, 0x11, 0x80, 0x80, 0x08, 0x88, 0x80, 0x00, //#...# # #### -0x81, 0x11, 0x88, 0x80, 0x04, 0x00, 0x80, 0x00, //#...### $ # -0x81, 0x11, 0x18, 0x80, 0x40, 0x04, 0x88, 0x80, //#....## $ $### -0x88, 0x11, 0x11, 0x88, 0x00, 0x04, 0x00, 0x80, //##....## $ # -0x88, 0x81, 0x11, 0x08, 0x80, 0x40, 0x40, 0x80, //###... ## $ $ # -0x80, 0x88, 0x00, 0x00, 0x80, 0x04, 0x00, 0x80, //# ## # $ # -0x80, 0x08, 0x80, 0x80, 0x88, 0x80, 0x88, 0x88, //# ## # ### #### -0x80, 0x40, 0x80, 0x84, 0x00, 0x40, 0x00, 0x08, //# $ # #$ $ # -0x80, 0x04, 0x02, 0x04, 0x00, 0x00, 0x40, 0x08, //# $ @ $ $ # -0x80, 0x00, 0x80, 0x40, 0x44, 0x04, 0x08, 0x88, //# # $ $$ $ ### -0x80, 0x08, 0x88, 0x88, 0x80, 0x08, 0x88, 0x00, //# ###### ### -0x80, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, //# ## #### -0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //### -//Level: 170 -0x0D, 0x0D,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // ######### -0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, // # # -0x08, 0x84, 0x04, 0x04, 0x04, 0x88, 0x00, // ##$ $ $ $## -0x88, 0x00, 0x40, 0x40, 0x40, 0x08, 0x80, //## $ $ $ ## -0x80, 0x40, 0x08, 0x08, 0x00, 0x40, 0x80, //# $ # # $ # -0x80, 0x00, 0x81, 0x11, 0x80, 0x00, 0x80, //# #...# # -0x88, 0x08, 0x11, 0x11, 0x18, 0x08, 0x80, //## #.....# ## -0x08, 0x08, 0x11, 0x11, 0x18, 0x08, 0x00, // # #.....# # -0x08, 0x00, 0x81, 0x81, 0x80, 0x08, 0x00, // # #.#.# # -0x08, 0x40, 0x40, 0x44, 0x40, 0x48, 0x00, // #$ $ $$$ $# -0x08, 0x00, 0x80, 0x00, 0x80, 0x08, 0x00, // # # # # -0x08, 0x88, 0x80, 0x28, 0x88, 0x88, 0x00, // #### @##### -0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // #### -//Level: 171 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x82, 0x00, 0x00, 0x08, 0x88, 0x00, 0x08, 0x00, 0x80, 0x08, //#@ ### # # # -0x80, 0x80, 0x80, 0x08, 0x00, 0x40, 0x04, 0x00, 0x00, 0x08, //# # # # $ $ # -0x88, 0x88, 0x80, 0x00, 0x00, 0x80, 0x40, 0x48, 0x48, 0x08, //##### # $ $#$# # -0x81, 0x81, 0x18, 0x00, 0x00, 0x88, 0x40, 0x40, 0x00, 0x08, //#.#..# ##$ $ # -0x81, 0x11, 0x11, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x88, //#..... $ # ## -0x81, 0x11, 0x11, 0x00, 0x00, 0x88, 0x84, 0x88, 0x48, 0x88, //#..... ###$##$### -0x81, 0x81, 0x18, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x08, //#.#..# $ # # -0x88, 0x88, 0x80, 0x00, 0x00, 0x80, 0x08, 0x40, 0x04, 0x08, //##### # #$ $ # -0x88, 0x88, 0x80, 0x08, 0x00, 0x40, 0x00, 0x04, 0x04, 0x08, //##### # $ $ $ # -0x88, 0x88, 0x80, 0x08, 0x00, 0x80, 0x08, 0x00, 0x80, 0x08, //##### # # # # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 172 -0x0E, 0x0E,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ########## -0x08, 0x80, 0x08, 0x00, 0x80, 0x08, 0x80, // ## # # ## -0x88, 0x00, 0x48, 0x00, 0x00, 0x00, 0x88, //## $# ## -0x80, 0x00, 0x00, 0x04, 0x80, 0x40, 0x08, //# $# $ # -0x80, 0x44, 0x08, 0x11, 0x80, 0x40, 0x08, //# $$ #..# $ # -0x88, 0x80, 0x83, 0x51, 0x18, 0x80, 0x88, //### #+*..## ## -0x80, 0x00, 0x15, 0x88, 0x11, 0x40, 0x08, //# .*##..$ # -0x80, 0x04, 0x11, 0x88, 0x51, 0x40, 0x08, //# $..##*.$ # -0x88, 0x08, 0x81, 0x15, 0x58, 0x08, 0x88, //## ##..**# ### -0x80, 0x44, 0x08, 0x11, 0x80, 0x04, 0x08, //# $$ #..# $ # -0x80, 0x00, 0x08, 0x00, 0x04, 0x00, 0x08, //# # $ # -0x88, 0x00, 0x00, 0x40, 0x84, 0x00, 0x88, //## $ #$ ## -0x08, 0x80, 0x08, 0x00, 0x80, 0x08, 0x80, // ## # # ## -0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ########## -//Level: 173 -0x0F, 0x10,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# # -0x80, 0x40, 0x08, 0x04, 0x08, 0x00, 0x00, 0x80, //# $ # $ # # -0x80, 0x40, 0x80, 0x48, 0x40, 0x80, 0x00, 0x80, //# $ # $#$ # # -0x80, 0x48, 0x04, 0x00, 0x04, 0x00, 0x00, 0x80, //# $# $ $ # -0x80, 0x00, 0x40, 0x00, 0x80, 0x48, 0x00, 0x80, //# $ # $# # -0x84, 0x80, 0x40, 0x08, 0x00, 0x40, 0x84, 0x80, //#$# $ # $ #$# -0x80, 0x08, 0x40, 0x80, 0x00, 0x40, 0x00, 0x80, //# #$ # $ # -0x80, 0x00, 0x04, 0x00, 0x04, 0x08, 0x40, 0x80, //# $ $ #$ # -0x80, 0x00, 0x80, 0x48, 0x40, 0x80, 0x40, 0x80, //# # $#$ # $ # -0x80, 0x00, 0x08, 0x04, 0x08, 0x00, 0x40, 0x80, //# # $ # $ # -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# # -0x80, 0x88, 0x88, 0x82, 0x88, 0x88, 0x80, 0x80, //# #####@##### # -0x81, 0x11, 0x11, 0x01, 0x11, 0x11, 0x11, 0x80, //#..... .......# -0x81, 0x11, 0x11, 0x01, 0x11, 0x11, 0x11, 0x80, //#..... .......# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -//Level: 174 -0x0A, 0x0C,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x88, // ####### -0x08, 0x88, 0x00, 0x00, 0x08, // ### # -0x88, 0x00, 0x08, 0x08, 0x08, //## # # # -0x80, 0x08, 0x14, 0x44, 0x08, //# #.$$$ # -0x80, 0x81, 0x58, 0x08, 0x88, //# #.*# ### -0x80, 0x01, 0x18, 0x08, 0x00, //# ..# # -0x88, 0x81, 0x14, 0x08, 0x80, //###..$ ## -0x00, 0x81, 0x80, 0x40, 0x80, // #.# $ # -0x08, 0x80, 0x80, 0x82, 0x80, // ## # #@# -0x08, 0x04, 0x00, 0x40, 0x80, // # $ $ # -0x08, 0x00, 0x00, 0x08, 0x80, // # ## -0x08, 0x88, 0x88, 0x88, 0x00, // ####### -//Level: 175 -0x0A, 0x09,//Size x and y -0x08, 0x88, 0x80, 0x00, 0x00, // #### -0x08, 0x00, 0x88, 0x88, 0x80, // # ##### -0x88, 0x40, 0x88, 0x00, 0x80, //##$ ## # -0x80, 0x04, 0x24, 0x00, 0x80, //# $@$ # -0x80, 0x00, 0x88, 0x40, 0x80, //# ##$ # -0x88, 0x81, 0x88, 0x08, 0x88, //###.## ### -0x08, 0x11, 0x14, 0x04, 0x08, // #...$ $ # -0x08, 0x81, 0x10, 0x00, 0x08, // ##.. # -0x00, 0x88, 0x88, 0x88, 0x88, // ######## -//Level: 176 -0x0B, 0x09,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // ##### -0x00, 0x08, 0x02, 0x08, 0x00, 0x00, // # @ # -0x00, 0x08, 0x04, 0x08, 0x00, 0x00, // # $ # -0x00, 0x08, 0x41, 0x48, 0x00, 0x00, // #$.$# -0x00, 0x88, 0x14, 0x18, 0x80, 0x00, // ##.$.## -0x88, 0x81, 0x41, 0x41, 0x88, 0x80, //###.$.$.### -0x80, 0x04, 0x14, 0x14, 0x00, 0x80, //# $.$.$ # -0x80, 0x00, 0x01, 0x00, 0x00, 0x80, //# . # -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //########### -//Level: 177 -0x0B, 0x0B,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // ##### -0x00, 0x08, 0x00, 0x08, 0x00, 0x00, // # # -0x00, 0x08, 0x04, 0x48, 0x00, 0x00, // # $$# -0x88, 0x88, 0x01, 0x08, 0x88, 0x80, //#### . #### -0x80, 0x40, 0x51, 0x50, 0x00, 0x80, //# $ *.* # -0x80, 0x41, 0x11, 0x11, 0x40, 0x80, //# $.....$ # -0x80, 0x00, 0x51, 0x50, 0x40, 0x80, //# *.* $ # -0x88, 0x88, 0x01, 0x08, 0x88, 0x80, //#### . #### -0x00, 0x08, 0x44, 0x48, 0x00, 0x00, // #$$$# -0x00, 0x08, 0x02, 0x08, 0x00, 0x00, // # @ # -0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // ##### -//Level: 178 -0x08, 0x08,//Size x and y -0x00, 0x88, 0x88, 0x80, // ##### -0x88, 0x80, 0x00, 0x88, //### ## -0x80, 0x01, 0x05, 0x08, //# . * # -0x80, 0x14, 0x18, 0x28, //# .$.#@# -0x88, 0x08, 0x04, 0x08, //## # $ # -0x08, 0x04, 0x08, 0x08, // # $ # # -0x08, 0x88, 0x00, 0x08, // ### # -0x00, 0x08, 0x88, 0x88, // ##### -//Level: 179 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x80, 0x00, //##### -0x80, 0x00, 0x88, 0x88, //# #### -0x80, 0x44, 0x00, 0x08, //# $$ # -0x80, 0x18, 0x10, 0x08, //# .#. # -0x80, 0x08, 0x80, 0x88, //# ## ## -0x80, 0x08, 0x84, 0x80, //# ##$# -0x80, 0x20, 0x01, 0x80, //# @ .# -0x88, 0x88, 0x88, 0x80, //####### -//Level: 180 -0x14, 0x0D,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // #### -0x88, 0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, //######## ##### -0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, //# # # -0x80, 0x00, 0x08, 0x08, 0x80, 0x08, 0x00, 0x88, 0x88, 0x00, //# # ## # #### -0x88, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x88, //## # # ### -0x08, 0x00, 0x08, 0x80, 0x00, 0x80, 0x44, 0x48, 0x00, 0x08, // # ## # $$$# # -0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x04, 0x08, // # # $ $ # -0x08, 0x00, 0x80, 0x08, 0x08, 0x08, 0x48, 0x02, 0x80, 0x88, // # # # # #$# @# ## -0x08, 0x88, 0x80, 0x04, 0x04, 0x08, 0x00, 0x04, 0x00, 0x80, // #### $ $ # $ # -0x00, 0x80, 0x40, 0x88, 0x88, 0x80, 0x88, 0x80, 0x48, 0x80, // # $ ##### ### $## -0x00, 0x80, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x08, 0x00, // # ........... # -0x00, 0x88, 0x80, 0x08, 0x88, 0x88, 0x88, 0x00, 0x88, 0x00, // ### ####### ## -0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, // #### #### -//Level: 181 -0x0A, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x00, 0x00, //###### -0x80, 0x00, 0x08, 0x00, 0x00, //# # -0x80, 0x04, 0x08, 0x88, 0x80, //# $ #### -0x80, 0x44, 0x08, 0x00, 0x88, //# $$ # ## -0x80, 0x80, 0x88, 0x40, 0x08, //# # ##$ # -0x81, 0x11, 0x00, 0x11, 0x08, //#... .. # -0x88, 0x88, 0x88, 0x80, 0x88, //####### ## -0x80, 0x00, 0x88, 0x00, 0x08, //# ## # -0x82, 0x40, 0x00, 0x14, 0x08, //#@$ .$ # -0x80, 0x00, 0x88, 0x00, 0x08, //# ## # -0x80, 0x00, 0x88, 0x88, 0x88, //# ###### -0x88, 0x88, 0x80, 0x00, 0x00, //##### -//Level: 182 -0x13, 0x0D,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ######### -0x00, 0x88, 0x00, 0x08, 0x80, 0x08, 0x88, 0x88, 0x80, 0x00, // ## ## ###### -0x88, 0x80, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x88, 0x80, //### # # ### -0x80, 0x04, 0x08, 0x40, 0x80, 0x08, 0x00, 0x11, 0x10, 0x80, //# $ #$ # # ... # -0x80, 0x80, 0x48, 0x24, 0x88, 0x08, 0x08, 0x18, 0x10, 0x80, //# # $#@$## # #.#. # -0x80, 0x08, 0x08, 0x40, 0x08, 0x00, 0x00, 0x10, 0x10, 0x80, //# # #$ # . . # -0x80, 0x40, 0x00, 0x04, 0x08, 0x08, 0x08, 0x18, 0x10, 0x80, //# $ $ # # #.#. # -0x80, 0x00, 0x88, 0x00, 0x88, 0x40, 0x40, 0x10, 0x10, 0x80, //# ## ##$ $ . . # -0x80, 0x40, 0x80, 0x00, 0x80, 0x08, 0x48, 0x18, 0x10, 0x80, //# $ # # #$#.#. # -0x88, 0x04, 0x00, 0x40, 0x00, 0x40, 0x04, 0x11, 0x10, 0x80, //## $ $ $ $... # -0x08, 0x40, 0x88, 0x88, 0x88, 0x00, 0x00, 0x88, 0x00, 0x80, // #$ ###### ## # -0x08, 0x00, 0x80, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, // # # ########## -0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // #### -//Level: 183 -0x11, 0x0F,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //################# -0x80, 0x00, 0x00, 0x00, 0x81, 0x11, 0x11, 0x11, 0x80, //# #.......# -0x80, 0x44, 0x40, 0x80, 0x41, 0x81, 0x11, 0x11, 0x80, //# $$$ # $.#.....# -0x80, 0x08, 0x04, 0x01, 0x11, 0x11, 0x18, 0x11, 0x80, //# # $ ......#..# -0x80, 0x40, 0x08, 0x08, 0x88, 0x18, 0x11, 0x00, 0x80, //# $ # ###.#.. # -0x80, 0x04, 0x04, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, //# $ $$ # # -0x80, 0x08, 0x04, 0x00, 0x04, 0x40, 0x08, 0x00, 0x80, //# # $ $$ # # -0x80, 0x88, 0x00, 0x80, 0x80, 0x80, 0x08, 0x80, 0x80, //# ## # # # ## # -0x80, 0x40, 0x48, 0x80, 0x80, 0x88, 0x00, 0x00, 0x80, //# $ $## # ## # -0x80, 0x42, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, //# $@$ $ # # -0x80, 0x40, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, //# $ $ # # -0x80, 0x08, 0x84, 0x40, 0x80, 0x08, 0x80, 0x00, 0x80, //# ##$$ # ## # -0x80, 0x44, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, //# $$ $ # # -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //################# -//Level: 184 -0x0F, 0x10,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, //############# -0x81, 0x11, 0x18, 0x00, 0x88, 0x00, 0x80, 0x00, //#....# ## # -0x81, 0x10, 0x18, 0x04, 0x04, 0x40, 0x80, 0x00, //#.. .# $ $$ # -0x81, 0x11, 0x11, 0x20, 0x88, 0x00, 0x80, 0x00, //#.....@ ## # -0x81, 0x11, 0x18, 0x80, 0x80, 0x08, 0x80, 0x00, //#....## # ## -0x88, 0x18, 0x88, 0x84, 0x80, 0x08, 0x00, 0x00, //##.####$# # -0x80, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, //# # # -0x80, 0x40, 0x04, 0x08, 0x88, 0x48, 0x88, 0x80, //# $ $ ###$#### -0x88, 0x08, 0x88, 0x00, 0x00, 0x40, 0x00, 0x80, //## ### $ # -0x80, 0x40, 0x80, 0x48, 0x08, 0x80, 0x40, 0x80, //# $ # $# ## $ # -0x80, 0x00, 0x04, 0x00, 0x40, 0x88, 0x08, 0x80, //# $ $ ## ## -0x88, 0x88, 0x88, 0x80, 0x04, 0x88, 0x08, 0x80, //####### $## ## -0x00, 0x00, 0x88, 0x84, 0x04, 0x00, 0x00, 0x80, // ###$ $ # -0x00, 0x00, 0x80, 0x00, 0x04, 0x80, 0x00, 0x80, // # $# # -0x00, 0x00, 0x80, 0x00, 0x00, 0x88, 0x88, 0x80, // # ##### -0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ####### -//Level: 185 -0x0B, 0x0A,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, 0x80, // ###### -0x08, 0x88, 0x88, 0x10, 0x00, 0x80, // #####. # -0x08, 0x00, 0x81, 0x18, 0x80, 0x80, // # #..## # -0x08, 0x00, 0x41, 0x10, 0x00, 0x80, // # $.. # -0x08, 0x00, 0x80, 0x18, 0x08, 0x80, // # # .# ## -0x88, 0x80, 0x88, 0x48, 0x00, 0x80, //### ##$# # -0x80, 0x40, 0x00, 0x04, 0x40, 0x80, //# $ $$ # -0x80, 0x84, 0x80, 0x08, 0x00, 0x80, //# #$# # # -0x82, 0x00, 0x88, 0x88, 0x88, 0x80, //#@ ####### -0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //##### -//Level: 186 -0x07, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x80, //####### -0x82, 0x05, 0x00, 0x80, //#@ * # -0x80, 0x41, 0x04, 0x80, //# $. $# -0x84, 0x05, 0x00, 0x80, //#$ * # -0x81, 0x51, 0x51, 0x80, //#.*.*.# -0x80, 0x01, 0x40, 0x80, //# .$ # -0x80, 0x41, 0x40, 0x80, //# $.$ # -0x80, 0x05, 0x00, 0x80, //# * # -0x88, 0x88, 0x88, 0x80, //####### -//Level: 187 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x80, 0x08, 0x28, 0x08, 0x80, 0x08, 0x88, 0x88, //# # #@# ## ##### -0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x40, 0x08, 0x88, 0x88, //# # # $ $ ##### -0x80, 0x80, 0x00, 0x08, 0x88, 0x88, 0x80, 0x40, 0x08, 0x88, //# # ###### $ ### -0x80, 0x00, 0x80, 0x08, 0x11, 0x11, 0x80, 0x04, 0x40, 0x08, //# # #....# $$ # -0x88, 0x48, 0x84, 0x88, 0x11, 0x11, 0x80, 0x00, 0x00, 0x08, //##$##$##....# # -0x80, 0x00, 0x00, 0x08, 0x11, 0x11, 0x88, 0x48, 0x84, 0x88, //# #....##$##$## -0x80, 0x04, 0x40, 0x08, 0x11, 0x11, 0x80, 0x00, 0x00, 0x08, //# $$ #....# # -0x80, 0x40, 0x04, 0x00, 0x80, 0x08, 0x00, 0x88, 0x80, 0x08, //# $ $ # # ### # -0x88, 0x88, 0x80, 0x04, 0x00, 0x04, 0x00, 0x00, 0x40, 0x08, //##### $ $ $ # -0x88, 0x88, 0x80, 0x80, 0x00, 0x08, 0x00, 0x80, 0x00, 0x88, //##### # # # ## -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 188 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x08, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x88, //# # # # ## -0x80, 0x48, 0x04, 0x04, 0x08, 0x81, 0x11, 0x40, 0x04, 0x08, //# $# $ $ ##...$ $ # -0x80, 0x04, 0x00, 0x80, 0x88, 0x11, 0x11, 0x80, 0x40, 0x08, //# $ # ##....# $ # -0x80, 0x88, 0x04, 0x08, 0x81, 0x11, 0x18, 0x00, 0x04, 0x08, //# ## $ ##....# $ # -0x80, 0x40, 0x00, 0x08, 0x11, 0x11, 0x88, 0x04, 0x00, 0x08, //# $ #....## $ # -0x80, 0x48, 0x80, 0x08, 0x11, 0x18, 0x00, 0x00, 0x00, 0x08, //# $## #...# # -0x80, 0x00, 0x44, 0x48, 0x84, 0x88, 0x00, 0x88, 0x80, 0x88, //# $$$##$## ### ## -0x80, 0x80, 0x80, 0x08, 0x00, 0x08, 0x00, 0x80, 0x00, 0x08, //# # # # # # # -0x80, 0x40, 0x80, 0x04, 0x00, 0x88, 0x00, 0x00, 0x00, 0x08, //# $ # $ ## # -0x80, 0x00, 0x08, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x08, //# # #@ # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 189 -0x0F, 0x0E,//Size x and y -0x88, 0x88, 0x80, 0x00, 0x00, 0x08, 0x88, 0x80, //##### #### -0x82, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x80, //#@ ######## # -0x88, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x80, //## $ $ # -0x08, 0x08, 0x08, 0x00, 0x88, 0x88, 0x00, 0x80, // # # # #### # -0x08, 0x00, 0x40, 0x00, 0x88, 0x88, 0x48, 0x80, // # $ ####$## -0x08, 0x40, 0x88, 0x08, 0x04, 0x04, 0x08, 0x00, // #$ ## # $ $ # -0x88, 0x04, 0x00, 0x48, 0x00, 0x00, 0x08, 0x00, //## $ $# # -0x80, 0x00, 0x80, 0x00, 0x00, 0x08, 0x08, 0x00, //# # # # -0x80, 0x00, 0x88, 0x88, 0x84, 0x88, 0x88, 0x00, //# #####$#### -0x88, 0x88, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, //##### # # -0x00, 0x00, 0x81, 0x11, 0x00, 0x40, 0x80, 0x00, // #... $ # -0x00, 0x00, 0x81, 0x11, 0x18, 0x00, 0x80, 0x00, // #....# # -0x00, 0x00, 0x81, 0x11, 0x18, 0x88, 0x80, 0x00, // #....#### -0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ###### -//Level: 190 -0x14, 0x10,//Size x and y -0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // #### -0x88, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //## ### -0x82, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#@$ # -0x88, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //### $ # -0x08, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // # ####### -0x08, 0x00, 0x40, 0x11, 0x11, 0x88, 0x88, 0x00, 0x00, 0x00, // # $ ....#### -0x08, 0x00, 0x88, 0x81, 0x11, 0x00, 0x08, 0x88, 0x88, 0x80, // # ###... ###### -0x08, 0x80, 0x88, 0x01, 0x11, 0x80, 0x08, 0x00, 0x00, 0x88, // ## ## ...# # ## -0x08, 0x04, 0x88, 0x01, 0x11, 0x80, 0x88, 0x00, 0x40, 0x08, // # $## ...# ## $ # -0x08, 0x00, 0x00, 0x88, 0x88, 0x80, 0x88, 0x80, 0x84, 0x08, // # ##### ### #$ # -0x08, 0x00, 0x80, 0x08, 0x08, 0x80, 0x80, 0x00, 0x80, 0x08, // # # # ## # # # -0x08, 0x88, 0x88, 0x00, 0x00, 0x80, 0x84, 0x08, 0x04, 0x08, // ##### # #$ # $ # -0x00, 0x00, 0x08, 0x80, 0x80, 0x00, 0x00, 0x40, 0x40, 0x08, // ## # $ $ # -0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x84, 0x04, 0x04, 0x08, // ### #$ $ $ # -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x80, 0x08, // ##### # # -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, // ######## -//Level: 191 -0x0F, 0x0D,//Size x and y -0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#### -0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //# # -0x80, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, //# ########## -0x80, 0x00, 0x08, 0x80, 0x00, 0x00, 0x80, 0x00, //# ## # -0x81, 0x18, 0x00, 0x00, 0x44, 0x80, 0x80, 0x00, //#..# $$# # -0x81, 0x10, 0x08, 0x80, 0x00, 0x40, 0x88, 0x80, //#.. ## $ ### -0x81, 0x18, 0x00, 0x88, 0x48, 0x04, 0x00, 0x80, //#..# ##$# $ # -0x81, 0x10, 0x00, 0x80, 0x24, 0x04, 0x00, 0x80, //#.. # @$ $ # -0x81, 0x18, 0x00, 0x80, 0x40, 0x40, 0x00, 0x80, //#..# # $ $ # -0x80, 0x10, 0x00, 0x80, 0x40, 0x40, 0x88, 0x80, //# . # $ $ ### -0x80, 0x08, 0x00, 0x80, 0x00, 0x88, 0x80, 0x00, //# # # ### -0x80, 0x08, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, //# # ### -0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //######### -//Level: 192 -0x08, 0x07,//Size x and y -0x00, 0x08, 0x88, 0x88, // ##### -0x88, 0x88, 0x01, 0x08, //#### . # -0x80, 0x52, 0x01, 0x08, //# *@ . # -0x80, 0x40, 0x80, 0x08, //# $ # # -0x80, 0x80, 0x04, 0x08, //# # $ # -0x80, 0x00, 0x88, 0x88, //# #### -0x88, 0x88, 0x80, 0x00, //##### -//Level: 193 -0x13, 0x0B,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ####### -0x00, 0x00, 0x88, 0x88, 0x80, 0x08, 0x00, 0x88, 0x88, 0x00, // ##### # #### -0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x40, 0x00, 0x08, 0x00, // # # $ # -0x08, 0x88, 0x80, 0x84, 0x40, 0x88, 0x08, 0x80, 0x08, 0x00, // #### #$$ ## ## # -0x88, 0x00, 0x00, 0x00, 0x80, 0x80, 0x08, 0x80, 0x88, 0x80, //## # # ## ### -0x80, 0x08, 0x88, 0x04, 0x84, 0x00, 0x40, 0x04, 0x00, 0x80, //# ### $#$ $ $ # -0x81, 0x11, 0x00, 0x00, 0x80, 0x88, 0x00, 0x80, 0x00, 0x80, //#... # ## # # -0x81, 0x11, 0x80, 0x00, 0x02, 0x08, 0x08, 0x88, 0x08, 0x80, //#...# @ # ### ## -0x81, 0x11, 0x80, 0x08, 0x88, 0x00, 0x40, 0x04, 0x00, 0x80, //#...# ### $ $ # -0x88, 0x88, 0x88, 0x88, 0x08, 0x80, 0x00, 0x80, 0x00, 0x80, //######## ## # # -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // ######### -//Level: 194 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x80, 0x01, 0x88, //### .## -0x80, 0x40, 0x80, 0x88, //# $ # ## -0x80, 0x54, 0x00, 0x88, //# *$ ## -0x80, 0x18, 0x20, 0x88, //# .#@ ## -0x80, 0x00, 0x08, 0x88, //# ### -0x80, 0x00, 0x88, 0x88, //# #### -0x88, 0x88, 0x88, 0x88, //######## -//Level: 195 -0x10, 0x0F,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ###### -0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, // # # -0x00, 0x88, 0x80, 0x88, 0x08, 0x00, 0x00, 0x00, // ### ## # -0x88, 0x80, 0x04, 0x00, 0x48, 0x88, 0x88, 0x88, //### $ $####### -0x80, 0x00, 0x40, 0x40, 0x08, 0x00, 0x11, 0x18, //# $ $ # ...# -0x80, 0x84, 0x08, 0x00, 0x48, 0x00, 0x11, 0x18, //# #$ # $# ...# -0x80, 0x80, 0x08, 0x40, 0x00, 0x00, 0x11, 0x18, //# # #$ ...# -0x80, 0x84, 0x08, 0x00, 0x08, 0x00, 0x11, 0x18, //# #$ # # ...# -0x80, 0x80, 0x48, 0x04, 0x48, 0x00, 0x11, 0x18, //# # $# $$# ...# -0x80, 0x82, 0x08, 0x40, 0x08, 0x88, 0x88, 0x88, //# #@ #$ ####### -0x80, 0x80, 0x40, 0x40, 0x88, 0x00, 0x00, 0x00, //# # $ $ ## -0x80, 0x80, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, //# # $ # -0x80, 0x88, 0x80, 0x88, 0x80, 0x00, 0x00, 0x00, //# ### ### -0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //# # -0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //####### -//Level: 196 -0x0C, 0x0C,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, // ##### -0x00, 0x88, 0x88, 0x88, 0x00, 0x08, // ###### # -0x88, 0x80, 0x00, 0x01, 0x04, 0x08, //### . $ # -0x80, 0x40, 0x08, 0x41, 0x84, 0x88, //# $ #$.#$## -0x80, 0x08, 0x00, 0x21, 0x80, 0x08, //# # @.# # -0x88, 0x08, 0x88, 0x81, 0x00, 0x08, //## ####. # -0x08, 0x04, 0x00, 0x85, 0x88, 0x88, // # $ #*#### -0x08, 0x08, 0x80, 0x81, 0x00, 0x80, // # ## #. # -0x08, 0x00, 0x00, 0x01, 0x80, 0x80, // # .# # -0x08, 0x88, 0x40, 0x00, 0x00, 0x80, // ###$ # -0x00, 0x08, 0x00, 0x88, 0x88, 0x80, // # ##### -0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // #### -//Level: 197 -0x0E, 0x0D,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, // ########## -0x88, 0x88, 0x11, 0x11, 0x11, 0x00, 0x80, //####...... # -0x80, 0x00, 0x11, 0x11, 0x18, 0x00, 0x80, //# .....# # -0x80, 0x08, 0x11, 0x11, 0x11, 0x08, 0x80, //# #...... ## -0x88, 0x08, 0x88, 0x84, 0x88, 0x48, 0x00, //## ####$##$# -0x82, 0x40, 0x04, 0x04, 0x00, 0x08, 0x88, //#@$ $ $ ### -0x80, 0x44, 0x00, 0x00, 0x88, 0x00, 0x08, //# $$ ## # -0x80, 0x80, 0x04, 0x48, 0x80, 0x08, 0x08, //# # $$## # # -0x80, 0x00, 0x40, 0x08, 0x04, 0x40, 0x08, //# $ # $$ # -0x80, 0x04, 0x00, 0x40, 0x00, 0x84, 0x08, //# $ $ #$ # -0x88, 0x88, 0x00, 0x08, 0x04, 0x04, 0x08, //#### # $ $ # -0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x08, // # # # -0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, // ########### -//Level: 198 -0x0F, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //######## -0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //# # -0x80, 0x44, 0x00, 0x08, 0x88, 0x00, 0x00, 0x00, //# $$ ### -0x80, 0x04, 0x04, 0x44, 0x08, 0x88, 0x88, 0x00, //# $ $$$ ##### -0x88, 0x08, 0x80, 0x11, 0x10, 0x00, 0x08, 0x80, //## ## ... ## -0x08, 0x08, 0x28, 0x11, 0x18, 0x88, 0x40, 0x80, // # #@#...###$ # -0x08, 0x08, 0x04, 0x11, 0x10, 0x00, 0x00, 0x80, // # # $... # -0x88, 0x08, 0x04, 0x11, 0x14, 0x08, 0x08, 0x80, //## # $...$ # ## -0x80, 0x08, 0x88, 0x88, 0x08, 0x88, 0x08, 0x00, //# ##### ### # -0x80, 0x00, 0x00, 0x04, 0x00, 0x04, 0x08, 0x00, //# $ $ # -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x08, 0x00, //########### # -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // #### -//Level: 199 -0x13, 0x0D,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // ########### -0x00, 0x00, 0x08, 0x00, 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, // # . # # -0x00, 0x00, 0x08, 0x08, 0x10, 0x00, 0x02, 0x08, 0x00, 0x00, // # #. @ # -0x08, 0x88, 0x88, 0x08, 0x81, 0x18, 0x08, 0x88, 0x80, 0x00, // ##### ##..# #### -0x88, 0x00, 0x80, 0x11, 0x88, 0x80, 0x00, 0x00, 0x88, 0x80, //## # ..### ### -0x80, 0x40, 0x81, 0x11, 0x00, 0x04, 0x08, 0x00, 0x40, 0x80, //# $ #... $ # $ # -0x80, 0x00, 0x01, 0x10, 0x88, 0x00, 0x88, 0x08, 0x80, 0x80, //# .. ## ## ## # -0x88, 0x88, 0x48, 0x84, 0x80, 0x40, 0x80, 0x00, 0x80, 0x80, //####$##$# $ # # # -0x00, 0x88, 0x08, 0x00, 0x00, 0x84, 0x04, 0x40, 0x80, 0x80, // ## # #$ $$ # # -0x00, 0x80, 0x04, 0x08, 0x08, 0x00, 0x80, 0x48, 0x80, 0x80, // # $ # # # $## # -0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, // # # -0x00, 0x80, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x80, // # ########### # -0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, // #### #### -//Level: 200 -0x0F, 0x0C,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ####### -0x08, 0x00, 0x80, 0x08, 0x88, 0x88, 0x00, 0x00, // # # ##### -0x88, 0x00, 0x80, 0x08, 0x11, 0x18, 0x88, 0x00, //## # #...### -0x80, 0x04, 0x80, 0x08, 0x11, 0x10, 0x08, 0x00, //# $# #... # -0x80, 0x40, 0x84, 0x40, 0x11, 0x10, 0x08, 0x00, //# $ #$$ ... # -0x80, 0x04, 0x80, 0x08, 0x11, 0x10, 0x18, 0x00, //# $# #... .# -0x80, 0x00, 0x80, 0x48, 0x88, 0x88, 0x88, 0x80, //# # $######## -0x88, 0x40, 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, //##$ $ $ # -0x88, 0x00, 0x80, 0x04, 0x40, 0x80, 0x00, 0x80, //## # $$ # # -0x08, 0x88, 0x88, 0x80, 0x08, 0x84, 0x42, 0x80, // ###### ##$$@# -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x80, // # ## -0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, // ######## -//Level: 201 -0x13, 0x0F,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //########### -0x81, 0x11, 0x11, 0x10, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, //#...... ######### -0x81, 0x11, 0x11, 0x10, 0x00, 0x80, 0x08, 0x80, 0x00, 0x80, //#...... # ## # -0x81, 0x18, 0x88, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, //#..### $ $ # -0x81, 0x11, 0x04, 0x04, 0x08, 0x00, 0x08, 0x80, 0x00, 0x80, //#... $ $ # ## # -0x81, 0x11, 0x84, 0x88, 0x88, 0x80, 0x00, 0x08, 0x00, 0x80, //#...#$##### # # -0x88, 0x80, 0x00, 0x08, 0x00, 0x08, 0x40, 0x08, 0x40, 0x80, //### # #$ #$ # -0x00, 0x80, 0x04, 0x40, 0x40, 0x40, 0x04, 0x88, 0x00, 0x80, // # $$ $ $ $## # -0x00, 0x80, 0x04, 0x00, 0x08, 0x48, 0x40, 0x88, 0x40, 0x80, // # $ #$#$ ##$ # -0x00, 0x88, 0x80, 0x88, 0x08, 0x00, 0x00, 0x88, 0x00, 0x80, // ### ## # ## # -0x00, 0x08, 0x00, 0x40, 0x40, 0x88, 0x08, 0x88, 0x88, 0x80, // # $ $ ## ###### -0x00, 0x08, 0x00, 0x00, 0x40, 0x04, 0x00, 0x80, 0x00, 0x00, // # $ $ # -0x00, 0x08, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, // ## # # # -0x00, 0x00, 0x88, 0x88, 0x82, 0x88, 0x88, 0x80, 0x00, 0x00, // #####@##### -0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ### -//Level: 202 -0x10, 0x0C,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ######### -0x08, 0x00, 0x80, 0x00, 0x08, 0x88, 0x88, 0x88, // # # ####### -0x08, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x08, // # $ # # -0x88, 0x18, 0x88, 0x80, 0x40, 0x42, 0x48, 0x08, //##.#### $ $@$# # -0x81, 0x11, 0x18, 0x88, 0x00, 0x88, 0x04, 0x08, //#....### ## $ # -0x81, 0x11, 0x18, 0x88, 0x84, 0x08, 0x00, 0x08, //#....####$ # # -0x81, 0x11, 0x10, 0x00, 0x00, 0x00, 0x04, 0x08, //#.... $ # -0x88, 0x80, 0x88, 0x88, 0x48, 0x04, 0x04, 0x08, //### ####$# $ $ # -0x80, 0x00, 0x00, 0x00, 0x08, 0x80, 0x08, 0x88, //# ## ### -0x80, 0x44, 0x04, 0x08, 0x88, 0x88, 0x88, 0x00, //# $$ $ ####### -0x80, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //# ##### -0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#### -//Level: 203 -0x0E, 0x0C,//Size x and y -0x08, 0x88, 0x88, 0x08, 0x88, 0x88, 0x80, // ##### ###### -0x08, 0x00, 0x08, 0x88, 0x00, 0x00, 0x80, // # ### # -0x88, 0x04, 0x04, 0x08, 0x40, 0x84, 0x80, //## $ $ #$ #$# -0x80, 0x04, 0x02, 0x04, 0x00, 0x40, 0x88, //# $ @ $ $ ## -0x80, 0x80, 0x08, 0x80, 0x81, 0x11, 0x18, //# # ## #....# -0x80, 0x08, 0x80, 0x40, 0x81, 0x88, 0x18, //# ## $ #.##.# -0x88, 0x00, 0x40, 0x00, 0x01, 0x11, 0x18, //## $ ....# -0x08, 0x04, 0x40, 0x84, 0x81, 0x11, 0x18, // # $$ #$#....# -0x08, 0x00, 0x08, 0x00, 0x08, 0x40, 0x88, // # # #$ ## -0x08, 0x88, 0x88, 0x04, 0x00, 0x00, 0x80, // ##### $ # -0x00, 0x00, 0x08, 0x88, 0x80, 0x08, 0x80, // #### ## -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // #### -//Level: 204 -0x0E, 0x0C,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, 0x80, 0x00, // ###### -0x08, 0x88, 0x88, 0x00, 0x00, 0x80, 0x00, // ##### # -0x08, 0x00, 0x80, 0x04, 0x04, 0x80, 0x00, // # # $ $# -0x08, 0x00, 0x40, 0x80, 0x40, 0x88, 0x80, // # $ # $ ### -0x88, 0x00, 0x80, 0x08, 0x00, 0x40, 0x88, //## # # $ ## -0x80, 0x48, 0x00, 0x20, 0x80, 0x00, 0x08, //# $# @ # # -0x80, 0x00, 0x04, 0x04, 0x80, 0x44, 0x08, //# $ $# $$ # -0x80, 0x04, 0x08, 0x41, 0x51, 0x08, 0x88, //# $ #$.*. ### -0x88, 0x00, 0x80, 0x41, 0x11, 0x88, 0x00, //## # $...## -0x08, 0x88, 0x80, 0x81, 0x11, 0x18, 0x00, // #### #....# -0x00, 0x00, 0x80, 0x01, 0x11, 0x18, 0x00, // # ....# -0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, // ######## -//Level: 205 -0x07, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x80, //####### -0x80, 0x41, 0x02, 0x80, //# $. @# -0x80, 0x01, 0x00, 0x80, //# . # -0x84, 0x45, 0x40, 0x80, //#$$*$ # -0x81, 0x15, 0x11, 0x80, //#..*..# -0x80, 0x45, 0x40, 0x80, //# $*$ # -0x80, 0x41, 0x40, 0x80, //# $.$ # -0x80, 0x01, 0x00, 0x80, //# . # -0x88, 0x88, 0x88, 0x80, //####### -//Level: 206 -0x0B, 0x0A,//Size x and y -0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //####### -0x80, 0x28, 0x00, 0x88, 0x88, 0x80, //# @# ##### -0x80, 0x44, 0x00, 0x40, 0x00, 0x80, //# $$ $ # -0x80, 0x08, 0x18, 0x84, 0x80, 0x80, //# #.##$# # -0x88, 0x48, 0x11, 0x10, 0x00, 0x80, //##$#... # -0x88, 0x01, 0x11, 0x88, 0x48, 0x80, //## ...##$## -0x80, 0x08, 0x81, 0x88, 0x00, 0x80, //# ##.## # -0x80, 0x04, 0x00, 0x40, 0x00, 0x80, //# $ $ # -0x80, 0x08, 0x00, 0x08, 0x00, 0x80, //# # # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //########### -//Level: 207 -0x13, 0x0D,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ################# -0x08, 0x11, 0x10, 0x00, 0x80, 0x00, 0x08, 0x00, 0x08, 0x80, // #... # # ## -0x88, 0x11, 0x11, 0x10, 0x04, 0x88, 0x08, 0x08, 0x40, 0x80, //##..... $## # #$ # -0x81, 0x11, 0x11, 0x18, 0x00, 0x40, 0x08, 0x00, 0x00, 0x80, //#......# $ # # -0x81, 0x11, 0x11, 0x18, 0x00, 0x80, 0x08, 0x08, 0x00, 0x80, //#......# # # # # -0x88, 0x88, 0x88, 0x88, 0x80, 0x40, 0x04, 0x04, 0x00, 0x80, //######### $ $ $ # -0x00, 0x80, 0x00, 0x00, 0x84, 0x88, 0x40, 0x88, 0x48, 0x80, // # #$##$ ##$## -0x08, 0x80, 0x00, 0x40, 0x00, 0x08, 0x04, 0x00, 0x00, 0x80, // ## $ # $ # -0x08, 0x00, 0x88, 0x08, 0x88, 0x08, 0x00, 0x88, 0x40, 0x80, // # ## ### # ##$ # -0x08, 0x04, 0x04, 0x40, 0x00, 0x00, 0x40, 0x04, 0x00, 0x80, // # $ $$ $ $ # -0x08, 0x04, 0x00, 0x00, 0x48, 0x84, 0x08, 0x88, 0x88, 0x80, // # $ $##$ ###### -0x08, 0x88, 0x88, 0x88, 0x00, 0x20, 0x88, 0x00, 0x00, 0x00, // ####### @ ## -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ###### -//Level: 208 -0x10, 0x0F,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // #### -0x00, 0x00, 0x00, 0x08, 0x00, 0x88, 0x00, 0x00, // # ## -0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x80, 0x00, // # ## -0x00, 0x00, 0x00, 0x08, 0x04, 0x40, 0x88, 0x00, // # $$ ## -0x00, 0x00, 0x08, 0x88, 0x40, 0x04, 0x08, 0x80, // ###$ $ ## -0x00, 0x88, 0x88, 0x00, 0x00, 0x40, 0x00, 0x80, // #### $ # -0x88, 0x80, 0x08, 0x08, 0x88, 0x88, 0x00, 0x80, //### # ##### # -0x80, 0x00, 0x08, 0x08, 0x11, 0x11, 0x40, 0x80, //# # #....$ # -0x80, 0x80, 0x00, 0x40, 0x11, 0x11, 0x80, 0x80, //# # $ ....# # -0x80, 0x04, 0x08, 0x08, 0x15, 0x11, 0x80, 0x80, //# $ # #.*..# # -0x88, 0x80, 0x08, 0x88, 0x80, 0x88, 0x80, 0x80, //### #### ### # -0x00, 0x88, 0x88, 0x02, 0x40, 0x08, 0x84, 0x88, // #### @$ ##$## -0x00, 0x00, 0x08, 0x88, 0x04, 0x00, 0x00, 0x08, // ### $ # -0x00, 0x00, 0x00, 0x08, 0x00, 0x88, 0x00, 0x08, // # ## # -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // ######### -//Level: 209 -0x13, 0x0D,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ###### -0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x08, 0x88, 0x88, 0x80, // # # ###### -0x00, 0x88, 0x88, 0x80, 0x80, 0x04, 0x08, 0x11, 0x11, 0x80, // ##### # $ #....# -0x08, 0x80, 0x00, 0x88, 0x80, 0x08, 0x08, 0x11, 0x11, 0x80, // ## ### # #....# -0x08, 0x04, 0x04, 0x08, 0x84, 0x88, 0x08, 0x11, 0x11, 0x80, // # $ $ ##$## #....# -0x08, 0x00, 0x80, 0x08, 0x00, 0x08, 0x08, 0x11, 0x11, 0x80, // # # # # #....# -0x08, 0x40, 0x40, 0x04, 0x24, 0x08, 0x08, 0x80, 0x08, 0x80, // #$ $ $@$ # ## ## -0x08, 0x04, 0x80, 0x08, 0x80, 0x88, 0x00, 0x80, 0x08, 0x00, // # $# ## ## # # -0x88, 0x00, 0x04, 0x48, 0x00, 0x88, 0x80, 0x80, 0x08, 0x00, //## $$# ### # # -0x80, 0x04, 0x00, 0x08, 0x04, 0x40, 0x00, 0x00, 0x08, 0x00, //# $ # $$ # -0x80, 0x40, 0x04, 0x08, 0x00, 0x88, 0x88, 0x00, 0x88, 0x00, //# $ $ # #### ## -0x80, 0x00, 0x08, 0x88, 0x88, 0x80, 0x08, 0x88, 0x80, 0x00, //# ###### #### -0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //###### -//Level: 210 -0x10, 0x12,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // ######### -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, // # # -0x00, 0x00, 0x00, 0x08, 0x04, 0x44, 0x44, 0x08, // # $$$$$ # -0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0x00, 0x08, // # $ $ # -0x00, 0x08, 0x88, 0x88, 0x00, 0x40, 0x40, 0x08, // ##### $ $ # -0x00, 0x08, 0x00, 0x08, 0x88, 0x80, 0x88, 0x88, // # #### #### -0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, // # # -0x00, 0x08, 0x88, 0x08, 0x88, 0x80, 0x08, 0x00, // ### #### # -0x00, 0x00, 0x81, 0x11, 0x18, 0x80, 0x88, 0x00, // #....## ## -0x00, 0x00, 0x81, 0x11, 0x18, 0x00, 0x80, 0x00, // #....# # -0x00, 0x00, 0x81, 0x11, 0x18, 0x00, 0x80, 0x00, // #....# # -0x88, 0x88, 0x81, 0x88, 0x80, 0x00, 0x80, 0x00, //#####.### # -0x80, 0x08, 0x80, 0x80, 0x80, 0x88, 0x80, 0x00, //# ## # # ### -0x80, 0x48, 0x84, 0x88, 0x80, 0x08, 0x80, 0x00, //# $##$### ## -0x80, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, //# $ # -0x80, 0x48, 0x00, 0x08, 0x80, 0x08, 0x00, 0x00, //# $# ## # -0x88, 0x28, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, //##@######### -0x08, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ### -//Level: 211 -0x0D, 0x09,//Size x and y -0x88, 0x88, 0x80, 0x88, 0x88, 0x88, 0x80, //##### ####### -0x80, 0x00, 0x88, 0x80, 0x08, 0x00, 0x80, //# ### # # -0x80, 0x40, 0x00, 0x00, 0x40, 0x20, 0x80, //# $ $ @ # -0x88, 0x08, 0x48, 0x81, 0x88, 0x00, 0x80, //## #$##.## # -0x08, 0x00, 0x11, 0x15, 0x10, 0x40, 0x80, // # ...*. $ # -0x08, 0x04, 0x80, 0x81, 0x80, 0x80, 0x80, // # $# #.# # # -0x08, 0x80, 0x00, 0x04, 0x00, 0x00, 0x80, // ## $ # -0x00, 0x80, 0x08, 0x88, 0x88, 0x88, 0x80, // # ######## -0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #### -//Level: 212 -0x07, 0x09,//Size x and y -0x88, 0x88, 0x88, 0x80, //####### -0x80, 0x01, 0x00, 0x80, //# . # -0x80, 0x01, 0x40, 0x80, //# .$ # -0x80, 0x45, 0x10, 0x80, //# $*. # -0x85, 0x01, 0x45, 0x80, //#* .$*# -0x80, 0x55, 0x40, 0x80, //# **$ # -0x80, 0x01, 0x40, 0x80, //# .$ # -0x80, 0x41, 0x02, 0x80, //# $. @# -0x88, 0x88, 0x88, 0x80, //####### -//Level: 213 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x00, //###### -0x80, 0x00, 0x28, 0x00, //# @# -0x80, 0x48, 0x08, 0x88, //# $# ### -0x80, 0x50, 0x40, 0x08, //# * $ # -0x80, 0x00, 0x88, 0x08, //# ## # -0x88, 0x10, 0x01, 0x08, //##. . # -0x08, 0x80, 0x00, 0x88, // ## ## -0x00, 0x88, 0x88, 0x80, // ##### -//Level: 214 -0x10, 0x0E,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ##### -0x08, 0x88, 0x80, 0x00, 0x88, 0x08, 0x88, 0x88, // #### ## ##### -0x08, 0x00, 0x40, 0x00, 0x08, 0x88, 0x00, 0x08, // # $ ### # -0x08, 0x04, 0x24, 0x04, 0x00, 0x00, 0x40, 0x08, // # $@$ $ $ # -0x08, 0x08, 0x48, 0x88, 0x88, 0x88, 0x80, 0x88, // # #$######## ## -0x08, 0x08, 0x00, 0x40, 0x08, 0x00, 0x00, 0x08, // # # $ # # -0x08, 0x08, 0x04, 0x04, 0x08, 0x08, 0x00, 0x08, // # # $ $ # # # -0x88, 0x08, 0x00, 0x48, 0x08, 0x08, 0x88, 0x88, //## # $# # ##### -0x80, 0x08, 0x80, 0x00, 0x08, 0x00, 0x00, 0x08, //# ## # # -0x80, 0x00, 0x04, 0x08, 0x08, 0x88, 0x00, 0x08, //# $ # ### # -0x88, 0x88, 0x80, 0x88, 0x00, 0x81, 0x11, 0x18, //##### ## #....# -0x80, 0x00, 0x04, 0x00, 0x00, 0x01, 0x11, 0x18, //# $ ....# -0x80, 0x00, 0x00, 0x00, 0x00, 0x81, 0x11, 0x18, //# #....# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //################ -//Level: 215 -0x10, 0x0D,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //######## -0x80, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, //# # # -0x80, 0x40, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, //# $ #### -0x88, 0x08, 0x84, 0x08, 0x20, 0x88, 0x88, 0x88, //## ##$ #@ ###### -0x08, 0x00, 0x40, 0x48, 0x84, 0x00, 0x80, 0x08, // # $ $##$ # # -0x08, 0x08, 0x00, 0x40, 0x80, 0x40, 0x11, 0x18, // # # $ # $ ...# -0x08, 0x04, 0x08, 0x40, 0x00, 0x08, 0x11, 0x18, // # $ #$ #...# -0x08, 0x00, 0x00, 0x08, 0x80, 0x48, 0x11, 0x18, // # ## $#...# -0x08, 0x88, 0x04, 0x08, 0x00, 0x40, 0x11, 0x18, // ### $ # $ ...# -0x00, 0x08, 0x88, 0x08, 0x00, 0x48, 0x11, 0x18, // ### # $#...# -0x00, 0x00, 0x80, 0x04, 0x40, 0x08, 0x88, 0x88, // # $$ ##### -0x00, 0x00, 0x80, 0x00, 0x00, 0x88, 0x00, 0x00, // # ## -0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ####### -//Level: 216 -0x0E, 0x0E,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############## -0x80, 0x00, 0x00, 0x00, 0x88, 0x80, 0x08, //# ### # -0x80, 0x44, 0x04, 0x00, 0x00, 0x44, 0x08, //# $$ $ $$ # -0x80, 0x00, 0x00, 0x40, 0x88, 0x80, 0x08, //# $ ### # -0x88, 0x48, 0x88, 0x88, 0x00, 0x80, 0x88, //##$##### # ## -0x88, 0x08, 0x01, 0x11, 0x11, 0x80, 0x08, //## # .....# # -0x88, 0x08, 0x01, 0x11, 0x81, 0x80, 0x08, //## # ...#.# # -0x80, 0x00, 0x81, 0x11, 0x11, 0x84, 0x08, //# #.....#$ # -0x80, 0x00, 0x81, 0x51, 0x11, 0x42, 0x88, //# #.*...$@## -0x80, 0x40, 0x80, 0x08, 0x88, 0x08, 0x88, //# $ # ### ### -0x80, 0x40, 0x88, 0x80, 0x40, 0x40, 0x08, //# $ ### $ $ # -0x80, 0x44, 0x40, 0x00, 0x00, 0x44, 0x08, //# $$$ $$ # -0x80, 0x00, 0x88, 0x80, 0x00, 0x00, 0x08, //# ### # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############## -//Level: 217 -0x0E, 0x0E,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // #### -0x00, 0x88, 0x88, 0x88, 0x80, 0x08, 0x80, // ####### ## -0x00, 0x80, 0x00, 0x08, 0x80, 0x00, 0x80, // # ## # -0x00, 0x80, 0x80, 0x00, 0x41, 0x80, 0x88, // # # $.# ## -0x00, 0x80, 0x00, 0x40, 0x81, 0x02, 0x08, // # $ #. @ # -0x00, 0x88, 0x00, 0x88, 0x11, 0x10, 0x08, // ## ##... # -0x00, 0x08, 0x84, 0x04, 0x11, 0x10, 0x88, // ##$ $... ## -0x00, 0x88, 0x00, 0x88, 0x15, 0x18, 0x80, // ## ##.*.## -0x88, 0x80, 0x40, 0x00, 0x08, 0x88, 0x00, //### $ ### -0x80, 0x44, 0x08, 0x48, 0x48, 0x80, 0x00, //# $$ #$#$## -0x80, 0x80, 0x00, 0x00, 0x40, 0x80, 0x00, //# # $ # -0x80, 0x00, 0x08, 0x80, 0x00, 0x80, 0x00, //# ## # -0x88, 0x80, 0x08, 0x88, 0x88, 0x80, 0x00, //### ###### -0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #### -//Level: 218 -0x0E, 0x0D,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // #### -0x08, 0x88, 0x80, 0x08, 0x88, 0x80, 0x00, // #### #### -0x08, 0x00, 0x80, 0x00, 0x40, 0x88, 0x88, // # # $ #### -0x08, 0x11, 0x10, 0x48, 0x40, 0x80, 0x08, // #... $#$ # # -0x88, 0x18, 0x10, 0x08, 0x00, 0x04, 0x08, //##.#. # $ # -0x81, 0x11, 0x11, 0x08, 0x88, 0x40, 0x08, //#..... ###$ # -0x81, 0x11, 0x18, 0x48, 0x00, 0x40, 0x88, //#....#$# $ ## -0x88, 0x84, 0x88, 0x04, 0x40, 0x00, 0x80, //###$## $$ # -0x08, 0x00, 0x08, 0x00, 0x00, 0x40, 0x80, // # # $ # -0x08, 0x04, 0x00, 0x24, 0x00, 0x88, 0x80, // # $ @$ ### -0x08, 0x88, 0x84, 0x80, 0x88, 0x80, 0x00, // ####$# ### -0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, // # # -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // ##### -//Level: 219 -0x0E, 0x0E,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ############ -0x88, 0x00, 0x08, 0x00, 0x80, 0x00, 0x88, //## # # ## -0x80, 0x20, 0x48, 0x04, 0x04, 0x04, 0x08, //# @ $# $ $ $ # -0x80, 0x04, 0x00, 0x00, 0x80, 0x40, 0x08, //# $ # $ # -0x80, 0x44, 0x08, 0x11, 0x80, 0x04, 0x08, //# $$ #..# $ # -0x88, 0x80, 0x81, 0x11, 0x18, 0x80, 0x88, //### #....## ## -0x80, 0x00, 0x11, 0x88, 0x11, 0x04, 0x08, //# ..##.. $ # -0x80, 0x40, 0x11, 0x88, 0x11, 0x00, 0x08, //# $ ..##.. # -0x88, 0x08, 0x81, 0x11, 0x18, 0x08, 0x88, //## ##....# ### -0x80, 0x40, 0x08, 0x11, 0x80, 0x40, 0x08, //# $ #..# $ # -0x80, 0x04, 0x08, 0x00, 0x04, 0x04, 0x08, //# $ # $ $ # -0x80, 0x40, 0x40, 0x40, 0x80, 0x40, 0x08, //# $ $ $ # $ # -0x88, 0x00, 0x08, 0x00, 0x80, 0x00, 0x88, //## # # ## -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ############ -//Level: 220 -0x10, 0x0D,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // ########## -0x00, 0x80, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, // # # # -0x00, 0x80, 0x48, 0x00, 0x04, 0x08, 0x00, 0x00, // # $# $ # -0x00, 0x80, 0x40, 0x48, 0x48, 0x08, 0x00, 0x00, // # $ $#$# # -0x08, 0x88, 0x18, 0x11, 0x10, 0x08, 0x88, 0x88, // ###.#... ##### -0x88, 0x00, 0x11, 0x11, 0x84, 0x08, 0x00, 0x08, //## ....#$ # # -0x80, 0x48, 0x18, 0x85, 0x80, 0x04, 0x44, 0x08, //# $#.##*# $$$ # -0x80, 0x00, 0x11, 0x11, 0x12, 0x80, 0x40, 0x08, //# .....@# $ # -0x80, 0x08, 0x18, 0x11, 0x10, 0x04, 0x04, 0x08, //# #.#... $ $ # -0x80, 0x44, 0x00, 0x48, 0x48, 0x00, 0x40, 0x08, //# $$ $#$# $ # -0x80, 0x00, 0x80, 0x08, 0x00, 0x80, 0x00, 0x88, //# # # # ## -0x88, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x80, //###### ##### -0x00, 0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, // ###### -//Level: 221 -0x09, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x00, //######## -0x80, 0x08, 0x11, 0x08, 0x80, //# #.. ## -0x80, 0x41, 0x24, 0x50, 0x80, //# $.@$* # -0x80, 0x04, 0x04, 0x00, 0x80, //# $ $ # -0x80, 0x54, 0x01, 0x40, 0x80, //# *$ .$ # -0x88, 0x01, 0x18, 0x00, 0x80, //## ..# # -0x08, 0x88, 0x88, 0x88, 0x80, // ######## -//Level: 222 -0x09, 0x08,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x00, // ##### -0x00, 0x08, 0x00, 0x08, 0x00, // # # -0x00, 0x08, 0x10, 0x48, 0x00, // #. $# -0x00, 0x08, 0x04, 0x08, 0x00, // # $ # -0x88, 0x88, 0x11, 0x08, 0x80, //####.. ## -0x80, 0x40, 0x55, 0x00, 0x80, //# $ ** # -0x80, 0x10, 0x02, 0x40, 0x80, //# . @$ # -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 223 -0x0E, 0x0F,//Size x and y -0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //##### -0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, //# ## -0x80, 0x00, 0x08, 0x00, 0x88, 0x88, 0x00, //# # #### -0x80, 0x40, 0x08, 0x88, 0x80, 0x08, 0x00, //# $ #### # -0x80, 0x04, 0x40, 0x40, 0x00, 0x48, 0x00, //# $$ $ $# -0x88, 0x82, 0x08, 0x40, 0x00, 0x08, 0x80, //###@ #$ ## -0x08, 0x00, 0x88, 0x00, 0x40, 0x40, 0x88, // # ## $ $ ## -0x08, 0x04, 0x00, 0x88, 0x08, 0x80, 0x18, // # $ ## ## .# -0x08, 0x00, 0x84, 0x88, 0x40, 0x08, 0x18, // # #$##$ #.# -0x08, 0x88, 0x00, 0x04, 0x11, 0x88, 0x18, // ### $..##.# -0x00, 0x80, 0x00, 0x08, 0x15, 0x11, 0x18, // # #.*...# -0x00, 0x80, 0x44, 0x08, 0x11, 0x11, 0x18, // # $$ #.....# -0x00, 0x80, 0x08, 0x88, 0x88, 0x88, 0x88, // # ######### -0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, // # # -0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #### -//Level: 224 -0x13, 0x10,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ###### -0x00, 0x80, 0x00, 0x28, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // # @#### -0x88, 0x88, 0x80, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //##### $ # -0x80, 0x00, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, //# ## #### -0x80, 0x40, 0x80, 0x08, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, //# $ # ## # -0x80, 0x40, 0x80, 0x08, 0x88, 0x88, 0x08, 0x00, 0x00, 0x00, //# $ # ##### # -0x88, 0x04, 0x00, 0x40, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, //## $ $ # # -0x88, 0x04, 0x04, 0x08, 0x88, 0x08, 0x08, 0x00, 0x00, 0x00, //## $ $ ### # # -0x88, 0x08, 0x00, 0x40, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, //## # $ # # # -0x88, 0x08, 0x08, 0x48, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, //## # #$# # # -0x88, 0x08, 0x88, 0x00, 0x08, 0x08, 0x08, 0x88, 0x88, 0x80, //## ### # # ###### -0x80, 0x04, 0x00, 0x88, 0x88, 0x08, 0x08, 0x11, 0x11, 0x80, //# $ #### # #....# -0x80, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x11, 0x81, 0x80, //# $ $ ..#.# -0x88, 0x88, 0x40, 0x04, 0x80, 0x40, 0x00, 0x11, 0x11, 0x80, //####$ $# $ ....# -0x80, 0x00, 0x00, 0x00, 0x80, 0x08, 0x80, 0x11, 0x11, 0x80, //# # ## ....# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //################### -//Level: 225 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x20, 0x80, 0x08, //# # #@ # # -0x80, 0x44, 0x00, 0x84, 0x48, 0x08, 0x08, 0x00, 0x88, 0x08, //# $$ #$$# # # ## # -0x80, 0x08, 0x04, 0x04, 0x08, 0x44, 0x08, 0x00, 0x00, 0x08, //# # $ $ #$$ # # -0x88, 0x08, 0x00, 0x80, 0x08, 0x08, 0x08, 0x00, 0x80, 0x08, //## # # # # # # # -0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, //# ## # # -0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x80, 0x00, 0x80, 0x08, //# # $ # # # # -0x80, 0x40, 0x84, 0x08, 0x00, 0x08, 0x00, 0x40, 0x81, 0x18, //# $ #$ # # $ #..# -0x88, 0x40, 0x80, 0x08, 0x88, 0x80, 0x00, 0x08, 0x11, 0x18, //##$ # #### #...# -0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x11, 0x18, //# $ #....# -0x80, 0x00, 0x80, 0x08, 0x00, 0x00, 0x08, 0x11, 0x11, 0x18, //# # # #.....# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 226 -0x11, 0x10,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //############# -0x81, 0x11, 0x11, 0x11, 0x18, 0x88, 0x80, 0x00, 0x00, //#........#### -0x81, 0x11, 0x88, 0x88, 0x08, 0x00, 0x88, 0x88, 0x80, //#...#### # ##### -0x81, 0x11, 0x80, 0x08, 0x88, 0x00, 0x00, 0x40, 0x80, //#...# ### $ # -0x81, 0x11, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x80, //#...$$ $ $ # -0x80, 0x01, 0x80, 0x04, 0x04, 0x80, 0x40, 0x08, 0x80, //# .# $ $# $ ## -0x81, 0x11, 0x80, 0x84, 0x80, 0x00, 0x40, 0x08, 0x00, //#...# #$# $ # -0x81, 0x80, 0x80, 0x40, 0x00, 0x40, 0x00, 0x08, 0x00, //#.# # $ $ # -0x81, 0x00, 0x84, 0x88, 0x84, 0x88, 0x88, 0x48, 0x00, //#. #$###$####$# -0x88, 0x00, 0x80, 0x00, 0x40, 0x40, 0x00, 0x08, 0x00, //## # $ $ # -0x08, 0x00, 0x80, 0x04, 0x24, 0x00, 0x80, 0x08, 0x00, // # # $@$ # # -0x08, 0x00, 0x80, 0x88, 0x88, 0x04, 0x00, 0x48, 0x00, // # # #### $ $# -0x08, 0x00, 0x80, 0x00, 0x08, 0x88, 0x00, 0x08, 0x00, // # # ### # -0x08, 0x00, 0x80, 0x44, 0x08, 0x08, 0x88, 0x88, 0x00, // # # $$ # ##### -0x08, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // # # # -0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ######### -//Level: 227 -0x0F, 0x0E,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -0x80, 0x00, 0x00, 0x08, 0x11, 0x11, 0x11, 0x80, //# #......# -0x80, 0x44, 0x08, 0x04, 0x18, 0x11, 0x11, 0x80, //# $$ # $.#....# -0x80, 0x00, 0x80, 0x48, 0x20, 0x81, 0x11, 0x80, //# # $#@ #...# -0x80, 0x48, 0x04, 0x08, 0x04, 0x08, 0x11, 0x80, //# $# $ # $ #..# -0x80, 0x00, 0x40, 0x08, 0x44, 0x00, 0x11, 0x80, //# $ #$$ ..# -0x80, 0x40, 0x84, 0x08, 0x00, 0x81, 0x41, 0x80, //# $ #$ # #.$.# -0x80, 0x08, 0x00, 0x40, 0x40, 0x08, 0x11, 0x80, //# # $ $ #..# -0x80, 0x80, 0x40, 0x08, 0x00, 0x00, 0x80, 0x80, //# # $ # # # -0x80, 0x00, 0x08, 0x08, 0x48, 0x00, 0x44, 0x80, //# # #$# $$# -0x80, 0x00, 0x80, 0x48, 0x00, 0x80, 0x00, 0x80, //# # $# # # -0x80, 0x08, 0x00, 0x04, 0x40, 0x08, 0x00, 0x80, //# # $$ # # -0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, //# # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -//Level: 228 -0x0B, 0x0A,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // ##### -0x08, 0x88, 0x00, 0x08, 0x88, 0x00, // ### ### -0x88, 0x02, 0x04, 0x04, 0x08, 0x00, //## @ $ $ # -0x80, 0x08, 0x80, 0x88, 0x08, 0x80, //# ## ## ## -0x80, 0x41, 0x81, 0x40, 0x00, 0x80, //# $.#.$ # -0x80, 0x81, 0x85, 0x80, 0x00, 0x80, //# #.#*# # -0x80, 0x41, 0x11, 0x00, 0x88, 0x80, //# $... ### -0x88, 0x84, 0x80, 0x88, 0x80, 0x00, //###$# ### -0x00, 0x80, 0x00, 0x80, 0x00, 0x00, // # # -0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // ##### -//Level: 229 -0x0F, 0x0F,//Size x and y -0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#### -0x80, 0x08, 0x88, 0x80, 0x08, 0x88, 0x88, 0x00, //# #### ##### -0x80, 0x40, 0x00, 0x88, 0x88, 0x00, 0x08, 0x00, //# $ #### # -0x80, 0x40, 0x00, 0x08, 0x80, 0x00, 0x08, 0x00, //# $ ## # -0x80, 0x88, 0x84, 0x04, 0x00, 0x40, 0x08, 0x80, //# ###$ $ $ ## -0x80, 0x80, 0x40, 0x04, 0x08, 0x80, 0x00, 0x80, //# # $ $ ## # -0x80, 0x04, 0x08, 0x44, 0x80, 0x00, 0x80, 0x80, //# $ #$$# # # -0x88, 0x00, 0x08, 0x00, 0x84, 0x00, 0x00, 0x80, //## # #$ # -0x08, 0x80, 0x08, 0x80, 0x04, 0x08, 0x08, 0x80, // ## ## $ # ## -0x88, 0x88, 0x18, 0x88, 0x00, 0x48, 0x08, 0x00, //####.### $# # -0x80, 0x08, 0x18, 0x11, 0x08, 0x00, 0x08, 0x00, //# #.#.. # # -0x80, 0x08, 0x11, 0x11, 0x02, 0x08, 0x88, 0x00, //# #.... @ ### -0x80, 0x40, 0x11, 0x11, 0x80, 0x88, 0x00, 0x00, //# $ ....# ## -0x80, 0x00, 0x88, 0x11, 0x00, 0x80, 0x00, 0x00, //# ##.. # -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //########### -//Level: 230 -0x09, 0x08,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x00, // ##### -0x88, 0x88, 0x00, 0x28, 0x80, //#### @## -0x80, 0x40, 0x40, 0x00, 0x80, //# $ $ # -0x80, 0x81, 0x51, 0x80, 0x80, //# #.*.# # -0x80, 0x81, 0x51, 0x80, 0x80, //# #.*.# # -0x80, 0x00, 0x40, 0x40, 0x80, //# $ $ # -0x88, 0x00, 0x08, 0x88, 0x80, //## #### -0x08, 0x88, 0x88, 0x00, 0x00, // ##### -//Level: 231 -0x0A, 0x09,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x00, // ###### -0x88, 0x80, 0x00, 0x18, 0x00, //### .# -0x80, 0x04, 0x18, 0x88, 0x88, //# $.##### -0x80, 0x44, 0x18, 0x20, 0x08, //# $$.#@ # -0x80, 0x00, 0x88, 0x44, 0x08, //# ##$$ # -0x80, 0x01, 0x41, 0x00, 0x08, //# .$. # -0x88, 0x84, 0x08, 0x88, 0x18, //###$ ###.# -0x00, 0x81, 0x08, 0x08, 0x88, // #. # ### -0x00, 0x88, 0x88, 0x00, 0x00, // #### -//Level: 232 -0x08, 0x08,//Size x and y -0x08, 0x88, 0x88, 0x80, // ###### -0x88, 0x21, 0x00, 0x80, //##@. # -0x80, 0x44, 0x50, 0x80, //# $$* # -0x80, 0x08, 0x00, 0x88, //# # ## -0x80, 0x08, 0x00, 0x18, //# # .# -0x88, 0x88, 0x08, 0x08, //#### # # -0x00, 0x08, 0x00, 0x08, // # # -0x00, 0x08, 0x88, 0x88, // ##### -//Level: 233 -0x13, 0x0F,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // #### -0x00, 0x00, 0x08, 0x88, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, // #### # # -0x00, 0x08, 0x88, 0x02, 0x88, 0x84, 0x08, 0x00, 0x00, 0x00, // ### @###$ # -0x00, 0x88, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00, 0x00, // ## $ # -0x08, 0x80, 0x04, 0x04, 0x48, 0x80, 0x88, 0x00, 0x00, 0x00, // ## $ $$## ## -0x08, 0x00, 0x84, 0x88, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // # #$## # -0x08, 0x08, 0x04, 0x04, 0x40, 0x80, 0x88, 0x80, 0x00, 0x00, // # # $ $$ # ### -0x08, 0x00, 0x04, 0x08, 0x00, 0x80, 0x40, 0x88, 0x88, 0x80, // # $ # # $ ##### -0x88, 0x88, 0x00, 0x00, 0x80, 0x04, 0x40, 0x80, 0x00, 0x80, //#### # $$ # # -0x88, 0x88, 0x08, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, //#### ## $ # -0x81, 0x00, 0x00, 0x88, 0x80, 0x08, 0x88, 0x88, 0x88, 0x80, //#. ### ######## -0x81, 0x10, 0x11, 0x80, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //#.. ..# #### -0x81, 0x11, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#...#.# -0x81, 0x11, 0x11, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#.....# -0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //####### -//Level: 234 -0x12, 0x0B,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // #### -0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x88, 0x00, 0x00, // ######### ## -0x88, 0x00, 0x40, 0x00, 0x00, 0x04, 0x08, 0x88, 0x88, //## $ $ ##### -0x80, 0x00, 0x88, 0x08, 0x80, 0x00, 0x88, 0x11, 0x18, //# ## ## ##...# -0x80, 0x84, 0x40, 0x40, 0x44, 0x84, 0x88, 0x11, 0x18, //# #$$ $ $$#$##...# -0x80, 0x80, 0x00, 0x20, 0x00, 0x80, 0x00, 0x11, 0x18, //# # @ # ...# -0x80, 0x04, 0x80, 0x88, 0x84, 0x40, 0x00, 0x11, 0x18, //# $# ###$$ ...# -0x80, 0x40, 0x04, 0x40, 0x04, 0x08, 0x81, 0x11, 0x18, //# $ $$ $ ##....# -0x88, 0x84, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, //###$ ####### -0x00, 0x80, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // # ####### -0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // #### -//Level: 235 -0x10, 0x10,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //################ -0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x00, 0x08, //#....# # -0x81, 0x11, 0x18, 0x08, 0x08, 0x80, 0x08, 0x08, //#....# # ## # # -0x81, 0x11, 0x10, 0x04, 0x08, 0x00, 0x80, 0x08, //#.... $ # # # -0x88, 0x00, 0x80, 0x04, 0x00, 0x08, 0x00, 0x08, //## # $ # # -0x80, 0x00, 0x08, 0x44, 0x44, 0x80, 0x08, 0x08, //# #$$$$# # # -0x80, 0x88, 0x04, 0x00, 0x00, 0x40, 0x88, 0x08, //# ## $ $ ## # -0x80, 0x00, 0x04, 0x08, 0x80, 0x44, 0x40, 0x08, //# $ ## $$$ # -0x80, 0x84, 0x44, 0x08, 0x80, 0x40, 0x08, 0x08, //# #$$$ ## $ # # -0x80, 0x80, 0x04, 0x00, 0x00, 0x40, 0x00, 0x08, //# # $ $ # -0x80, 0x00, 0x88, 0x44, 0x44, 0x80, 0x08, 0x88, //# ##$$$$# ### -0x80, 0x08, 0x00, 0x00, 0x40, 0x08, 0x11, 0x18, //# # $ #...# -0x80, 0x00, 0x00, 0x80, 0x48, 0x00, 0x11, 0x18, //# # $# ...# -0x80, 0x88, 0x08, 0x08, 0x08, 0x00, 0x11, 0x18, //# ## # # # ...# -0x82, 0x00, 0x00, 0x00, 0x00, 0x08, 0x11, 0x18, //#@ #...# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //################ -//Level: 236 -0x14, 0x09,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, // ################## -0x00, 0x80, 0x00, 0x00, 0x00, 0x88, 0x11, 0x18, 0x00, 0x08, // # ##...# # -0x00, 0x80, 0x84, 0x84, 0x80, 0x88, 0x81, 0x11, 0x04, 0x08, // # #$#$# ###... $ # -0x00, 0x80, 0x02, 0x40, 0x04, 0x00, 0x01, 0x18, 0x04, 0x08, // # @$ $ ..# $ # -0x88, 0x88, 0x84, 0x84, 0x80, 0x80, 0x01, 0x10, 0x08, 0x88, //#####$#$# # .. ### -0x80, 0x00, 0x40, 0x40, 0x80, 0x88, 0x88, 0x88, 0x08, 0x80, //# $ $ # ###### ## -0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, //# # # # # # -0x80, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x80, //# ####### # -0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x88, 0x88, 0x80, //######### ##### -//Level: 237 -0x0E, 0x0D,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //######### -0x80, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, //# ## -0x80, 0x84, 0x84, 0x82, 0x08, 0x88, 0x88, //# #$#$#@ ##### -0x80, 0x40, 0x00, 0x04, 0x08, 0x00, 0x08, //# $ $ # # -0x88, 0x08, 0x88, 0x80, 0x88, 0x08, 0x08, //## #### ## # # -0x80, 0x08, 0x00, 0x80, 0x00, 0x00, 0x08, //# # # # -0x80, 0x48, 0x00, 0x40, 0x08, 0x88, 0x88, //# $# $ ##### -0x81, 0x14, 0x00, 0x88, 0x08, 0x00, 0x08, //#..$ ## # # -0x81, 0x18, 0x00, 0x80, 0x00, 0x44, 0x08, //#..# # $$ # -0x81, 0x18, 0x88, 0x80, 0x04, 0x00, 0x08, //#..#### $ # -0x85, 0x11, 0x18, 0x04, 0x04, 0x04, 0x08, //#*...# $ $ $ # -0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x08, //#....# # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############## -//Level: 238 -0x0F, 0x0F,//Size x and y -0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //####### -0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //# # -0x80, 0x40, 0x44, 0x80, 0x00, 0x00, 0x00, 0x00, //# $ $$# -0x82, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //#@ $ # -0x80, 0x40, 0x40, 0x88, 0x88, 0x80, 0x00, 0x00, //# $ $ ##### -0x80, 0x40, 0x05, 0x11, 0x11, 0x80, 0x00, 0x00, //# $ *....# -0x88, 0x88, 0x81, 0x88, 0x81, 0x80, 0x00, 0x00, //#####.###.# -0x00, 0x08, 0x81, 0x80, 0x81, 0x80, 0x00, 0x00, // ##.# #.# -0x00, 0x08, 0x01, 0x88, 0x81, 0x88, 0x88, 0x80, // # .###.##### -0x00, 0x08, 0x01, 0x11, 0x15, 0x00, 0x40, 0x80, // # ....* $ # -0x00, 0x08, 0x00, 0x08, 0x80, 0x40, 0x40, 0x80, // # ## $ $ # -0x00, 0x08, 0x88, 0x88, 0x80, 0x04, 0x00, 0x80, // ###### $ # -0x00, 0x00, 0x00, 0x00, 0x84, 0x40, 0x40, 0x80, // #$$ $ # -0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, // # # -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // ####### -//Level: 239 -0x09, 0x08,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x80, // ###### -0x88, 0x88, 0x10, 0x02, 0x80, //####. @# -0x80, 0x04, 0x44, 0x00, 0x80, //# $$$ # -0x81, 0x88, 0x18, 0x81, 0x80, //#.##.##.# -0x80, 0x00, 0x40, 0x00, 0x80, //# $ # -0x80, 0x04, 0x18, 0x08, 0x80, //# $.# ## -0x88, 0x80, 0x00, 0x08, 0x00, //### # -0x00, 0x88, 0x88, 0x88, 0x00, // ###### -//Level: 240 -0x0A, 0x08,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x80, // ######## -0x08, 0x00, 0x82, 0x00, 0x88, // # #@ ## -0x88, 0x04, 0x88, 0x80, 0x08, //## $### # -0x80, 0x00, 0x50, 0x50, 0x08, //# * * # -0x80, 0x05, 0x05, 0x05, 0x08, //# * * * # -0x80, 0x10, 0x50, 0x50, 0x08, //# . * * # -0x88, 0x88, 0x00, 0x08, 0x88, //#### ### -0x00, 0x08, 0x88, 0x88, 0x00, // ##### -//Level: 241 -0x06, 0x07,//Size x and y -0x88, 0x88, 0x00, //#### -0x82, 0x08, 0x88, //#@ ### -0x80, 0x44, 0x18, //# $$.# -0x80, 0x04, 0x18, //# $.# -0x80, 0x40, 0x18, //# $ .# -0x80, 0x80, 0x18, //# # .# -0x88, 0x88, 0x88, //###### -//Level: 242 -0x0C, 0x0F,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############ -0x88, 0x00, 0x00, 0x08, 0x80, 0x08, //## ## # -0x88, 0x00, 0x04, 0x00, 0x04, 0x08, //## $ $ # -0x88, 0x88, 0x08, 0x80, 0x44, 0x08, //#### ## $$ # -0x80, 0x00, 0x40, 0x80, 0x00, 0x08, //# $ # # -0x80, 0x44, 0x40, 0x80, 0x88, 0x88, //# $$$ # #### -0x80, 0x00, 0x80, 0x80, 0x40, 0x88, //# # # $ ## -0x80, 0x08, 0x00, 0x80, 0x04, 0x08, //# # # $ # -0x80, 0x48, 0x04, 0x80, 0x00, 0x08, //# $# $# # -0x80, 0x00, 0x11, 0x80, 0x88, 0x88, //# ..# #### -0x88, 0x88, 0x11, 0x04, 0x08, 0x28, //####.. $ #@# -0x81, 0x11, 0x11, 0x80, 0x48, 0x08, //#.....# $# # -0x88, 0x11, 0x11, 0x80, 0x04, 0x08, //##....# $ # -0x88, 0x81, 0x18, 0x80, 0x00, 0x08, //###..## # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############ -//Level: 243 -0x12, 0x0D,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ######## -0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, // #### ###### -0x00, 0x80, 0x00, 0x08, 0x80, 0x40, 0x40, 0x00, 0x28, // # ## $ $ @# -0x00, 0x80, 0x88, 0x08, 0x84, 0x84, 0x04, 0x04, 0x88, // # ## ##$#$ $ $## -0x88, 0x80, 0x11, 0x11, 0x11, 0x80, 0x04, 0x40, 0x88, //### ......# $$ ## -0x80, 0x00, 0x11, 0x11, 0x11, 0x80, 0x08, 0x00, 0x08, //# ......# # # -0x80, 0x80, 0x11, 0x11, 0x11, 0x84, 0x00, 0x40, 0x08, //# # ......#$ $ # -0x80, 0x84, 0x11, 0x11, 0x11, 0x04, 0x48, 0x04, 0x08, //# #$...... $$# $ # -0x80, 0x00, 0x88, 0x80, 0x88, 0x84, 0x00, 0x40, 0x88, //# ### ###$ $ ## -0x88, 0x80, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x80, //### $ $ $ $ # -0x00, 0x80, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x80, // # $ $ $ $ # -0x00, 0x88, 0x88, 0x88, 0x00, 0x08, 0x88, 0x88, 0x80, // ###### ###### -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // ##### -//Level: 244 -0x0E, 0x10,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, //########## -0x80, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, //# #### -0x80, 0x88, 0x88, 0x88, 0x08, 0x00, 0x88, //# ###### # ## -0x80, 0x80, 0x40, 0x40, 0x40, 0x04, 0x08, //# # $ $ $ $ # -0x80, 0x00, 0x00, 0x00, 0x84, 0x00, 0x08, //# #$ # -0x88, 0x84, 0x00, 0x44, 0x80, 0x08, 0x88, //###$ $$# ### -0x00, 0x80, 0x08, 0x80, 0x80, 0x48, 0x80, // # ## # $## -0x00, 0x88, 0x48, 0x00, 0x04, 0x02, 0x80, // ##$# $ @# -0x00, 0x08, 0x00, 0x40, 0x40, 0x88, 0x80, // # $ $ ### -0x00, 0x08, 0x08, 0x00, 0x04, 0x00, 0x80, // # # $ # -0x00, 0x08, 0x08, 0x80, 0x00, 0x80, 0x80, // # ## # # -0x00, 0x88, 0x00, 0x88, 0x88, 0x80, 0x80, // ## ##### # -0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, // # # -0x00, 0x81, 0x11, 0x11, 0x11, 0x88, 0x80, // #.......### -0x00, 0x81, 0x11, 0x11, 0x11, 0x80, 0x00, // #.......# -0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // ######### -//Level: 245 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x00, 0x12, 0x88, //## .@## -0x88, 0x00, 0x04, 0x18, //## $.# -0x88, 0x88, 0x58, 0x08, //####*# # -0x88, 0x00, 0x00, 0x08, //## # -0x80, 0x04, 0x00, 0x88, //# $ ## -0x80, 0x00, 0x88, 0x88, //# #### -0x88, 0x88, 0x88, 0x88, //######## -//Level: 246 -0x0F, 0x10,//Size x and y -0x08, 0x88, 0x80, 0x88, 0x88, 0x80, 0x00, 0x00, // #### ##### -0x08, 0x00, 0x88, 0x80, 0x00, 0x88, 0x00, 0x00, // # ### ## -0x08, 0x04, 0x00, 0x80, 0x80, 0x08, 0x80, 0x00, // # $ # # ## -0x08, 0x04, 0x80, 0x80, 0x88, 0x00, 0x88, 0x00, // # $# # ## ## -0x08, 0x00, 0x04, 0x00, 0x80, 0x40, 0x08, 0x80, // # $ # $ ## -0x08, 0x04, 0x00, 0x40, 0x84, 0x04, 0x00, 0x80, // # $ $ #$ $ # -0x88, 0x80, 0x80, 0x88, 0x80, 0x80, 0x40, 0x80, //### # ### # $ # -0x80, 0x00, 0x00, 0x81, 0x11, 0x18, 0x00, 0x80, //# #....# # -0x80, 0x80, 0x44, 0x01, 0x11, 0x18, 0x80, 0x80, //# # $$ ....## # -0x80, 0x80, 0x00, 0x81, 0x11, 0x10, 0x00, 0x80, //# # #.... # -0x80, 0x08, 0x84, 0x81, 0x11, 0x18, 0x28, 0x80, //# ##$#....#@## -0x80, 0x40, 0x40, 0x00, 0x80, 0x88, 0x88, 0x00, //# $ $ # #### -0x88, 0x00, 0x00, 0x80, 0x40, 0x80, 0x00, 0x00, //## # $ # -0x08, 0x88, 0x88, 0x80, 0x40, 0x80, 0x00, 0x00, // ###### $ # -0x00, 0x00, 0x00, 0x88, 0x00, 0x80, 0x00, 0x00, // ## # -0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // #### -//Level: 247 -0x0E, 0x0F,//Size x and y -0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ##### -0x88, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, //## ## -0x80, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, //# ##### -0x80, 0x80, 0x00, 0x04, 0x00, 0x80, 0x00, //# # $ # -0x80, 0x08, 0x04, 0x08, 0x80, 0x80, 0x00, //# # $ ## # -0x88, 0x04, 0x48, 0x11, 0x10, 0x80, 0x00, //## $$#... # -0x08, 0x88, 0x00, 0x11, 0x10, 0x80, 0x00, // ### ... # -0x00, 0x08, 0x88, 0x81, 0x18, 0x88, 0x88, // ####..##### -0x88, 0x88, 0x88, 0x11, 0x18, 0x80, 0x08, //######...## # -0x80, 0x08, 0x88, 0x04, 0x20, 0x84, 0x08, //# ### $@ #$ # -0x80, 0x40, 0x80, 0x00, 0x80, 0x00, 0x08, //# $ # # # -0x80, 0x04, 0x00, 0x84, 0x00, 0x40, 0x88, //# $ #$ $ ## -0x88, 0x00, 0x00, 0x40, 0x08, 0x88, 0x80, //## $ #### -0x08, 0x88, 0x88, 0x00, 0x88, 0x00, 0x00, // ##### ## -0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // #### -//Level: 248 -0x08, 0x08,//Size x and y -0x00, 0x88, 0x88, 0x88, // ###### -0x88, 0x80, 0x10, 0x08, //### . # -0x80, 0x42, 0x81, 0x08, //# $@#. # -0x80, 0x04, 0x80, 0x88, //# $# ## -0x80, 0x05, 0x00, 0x80, //# * # -0x88, 0x00, 0x80, 0x80, //## # # -0x08, 0x80, 0x00, 0x80, // ## # -0x00, 0x88, 0x88, 0x80, // ##### -//Level: 249 -0x13, 0x0E,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ########### -0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, // # # # -0x88, 0x88, 0x80, 0x08, 0x00, 0x00, 0x04, 0x04, 0x08, 0x00, //##### # $ $ # -0x80, 0x00, 0x88, 0x88, 0x80, 0x48, 0x80, 0x80, 0x88, 0x00, //# ##### $## # ## -0x80, 0x40, 0x88, 0x00, 0x08, 0x08, 0x80, 0x40, 0x08, 0x00, //# $ ## # ## $ # -0x80, 0x40, 0x02, 0x44, 0x08, 0x08, 0x84, 0x44, 0x08, 0x00, //# $ @$$ # ##$$$ # -0x88, 0x08, 0x88, 0x00, 0x08, 0x08, 0x80, 0x00, 0x08, 0x00, //## ### # ## # -0x88, 0x08, 0x00, 0x08, 0x88, 0x08, 0x88, 0x88, 0x48, 0x00, //## # ### #####$# -0x88, 0x08, 0x00, 0x00, 0x04, 0x00, 0x81, 0x11, 0x18, 0x00, //## # $ #....# -0x80, 0x08, 0x88, 0x08, 0x80, 0x40, 0x81, 0x11, 0x18, 0x80, //# ### ## $ #....## -0x80, 0x40, 0x00, 0x40, 0x80, 0x00, 0x81, 0x14, 0x10, 0x80, //# $ $ # #..$. # -0x80, 0x08, 0x80, 0x40, 0x80, 0x08, 0x81, 0x11, 0x10, 0x80, //# ## $ # ##.... # -0x88, 0x88, 0x80, 0x00, 0x88, 0x88, 0x88, 0x11, 0x18, 0x80, //##### ######...## -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x08, 0x88, 0x88, 0x00, // ##### ##### -//Level: 250 -0x13, 0x10,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x08, 0x88, 0x88, 0x80, //############ ###### -0x80, 0x00, 0x80, 0x00, 0x08, 0x08, 0x88, 0x11, 0x11, 0x80, //# # # ###....# -0x80, 0x00, 0x44, 0x80, 0x00, 0x20, 0x01, 0x11, 0x11, 0x80, //# $$# @ .....# -0x80, 0x00, 0x80, 0x88, 0x80, 0x00, 0x80, 0x11, 0x11, 0x80, //# # ### # ....# -0x88, 0x08, 0x80, 0x88, 0x80, 0x08, 0x00, 0x11, 0x11, 0x80, //## ## ### # ....# -0x08, 0x04, 0x04, 0x00, 0x00, 0x08, 0x08, 0x08, 0x88, 0x80, // # $ $ # # #### -0x08, 0x00, 0x40, 0x48, 0x80, 0x08, 0x00, 0x00, 0x00, 0x80, // # $ $## # # -0x88, 0x88, 0x08, 0x00, 0x88, 0x88, 0x08, 0x08, 0x80, 0x80, //#### # #### # ## # -0x80, 0x08, 0x08, 0x40, 0x00, 0x88, 0x08, 0x00, 0x00, 0x80, //# # #$ ## # # -0x80, 0x40, 0x04, 0x00, 0x80, 0x88, 0x08, 0x00, 0x08, 0x80, //# $ $ # ## # ## -0x80, 0x80, 0x40, 0x40, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, //# # $ $ # # # -0x80, 0x04, 0x08, 0x80, 0x88, 0x08, 0x08, 0x88, 0x88, 0x00, //# $ ## ## # ##### -0x80, 0x44, 0x00, 0x00, 0x04, 0x40, 0x08, 0x00, 0x00, 0x00, //# $$ $$ # -0x88, 0x08, 0x80, 0x88, 0x80, 0x40, 0x08, 0x00, 0x00, 0x00, //## ## ### $ # -0x08, 0x00, 0x00, 0x80, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, // # # # # -0x08, 0x88, 0x88, 0x80, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ###### ###### -//Level: 251 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x08, 0x00, 0x88, 0x00, 0x00, 0x80, 0x00, 0x28, 0x88, //# # ## # @### -0x88, 0x00, 0x00, 0x40, 0x00, 0x08, 0x04, 0x88, 0x80, 0x08, //## $ # $### # -0x88, 0x48, 0x04, 0x08, 0x84, 0x80, 0x40, 0x40, 0x00, 0x08, //##$# $ ##$# $ $ # -0x80, 0x00, 0x48, 0x00, 0x00, 0x40, 0x00, 0x00, 0x08, 0x88, //# $# $ ### -0x80, 0x88, 0x00, 0x04, 0x08, 0x88, 0x00, 0x81, 0x11, 0x18, //# ## $ ### #....# -0x80, 0x80, 0x48, 0x08, 0x08, 0x08, 0x08, 0x11, 0x11, 0x88, //# # $# # # # #....## -0x80, 0x00, 0x04, 0x04, 0x08, 0x00, 0x81, 0x11, 0x18, 0x88, //# $ $ # #....### -0x88, 0x40, 0x88, 0x80, 0x04, 0x08, 0x11, 0x11, 0x88, 0x88, //##$ ### $ #....#### -0x80, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, //# # $ ###### -0x80, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x88, 0x88, 0x88, //# # # ###### -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 252 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x08, 0x00, 0x00, 0x08, 0x00, 0x88, 0x00, 0x00, 0x88, //# # # ## ## -0x80, 0x48, 0x00, 0x04, 0x08, 0x00, 0x00, 0x08, 0x80, 0x08, //# $# $ # ## # -0x80, 0x40, 0x04, 0x00, 0x81, 0x18, 0x00, 0x00, 0x04, 0x08, //# $ $ #..# $ # -0x80, 0x40, 0x40, 0x08, 0x11, 0x11, 0x80, 0x00, 0x80, 0x88, //# $ $ #....# # ## -0x80, 0x48, 0x00, 0x81, 0x11, 0x11, 0x18, 0x88, 0x04, 0x08, //# $# #......### $ # -0x80, 0x00, 0x80, 0x08, 0x11, 0x11, 0x80, 0x08, 0x40, 0x08, //# # #....# #$ # -0x80, 0x40, 0x08, 0x88, 0x81, 0x18, 0x00, 0x08, 0x00, 0x08, //# $ ####..# # # -0x88, 0x04, 0x00, 0x08, 0x80, 0x80, 0x80, 0x40, 0x04, 0x88, //## $ ## # # $ $## -0x88, 0x80, 0x40, 0x00, 0x04, 0x82, 0x40, 0x48, 0x00, 0x08, //### $ $#@$ $# # -0x88, 0x88, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, //#### # # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 253 -0x0F, 0x10,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ############## -0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, // # # # -0x88, 0x08, 0x80, 0x00, 0x08, 0x08, 0x80, 0x80, //## ## # ## # -0x81, 0x11, 0x11, 0x01, 0x11, 0x11, 0x80, 0x80, //#..... .....# # -0x81, 0x10, 0x18, 0x08, 0x10, 0x11, 0x80, 0x80, //#.. .# #. ..# # -0x88, 0x88, 0x88, 0x08, 0x88, 0x88, 0x80, 0x80, //###### ###### # -0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, // # # -0x08, 0x88, 0x88, 0x04, 0x88, 0x88, 0x80, 0x80, // ##### $##### # -0x08, 0x00, 0x00, 0x82, 0x80, 0x00, 0x80, 0x80, // # #@# # # -0x88, 0x40, 0x40, 0x84, 0x80, 0x00, 0x80, 0x80, //##$ $ #$# # # -0x80, 0x40, 0x04, 0x04, 0x00, 0x44, 0x40, 0x80, //# $ $ $ $$$ # -0x80, 0x04, 0x00, 0x84, 0x80, 0x00, 0x80, 0x80, //# $ #$# # # -0x80, 0x00, 0x44, 0x80, 0x84, 0x40, 0x80, 0x80, //# $$# #$$ # # -0x88, 0x88, 0x00, 0x00, 0x00, 0x88, 0x80, 0x80, //#### ### # -0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, 0x80, // ###### # -0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // ####### -//Level: 254 -0x0F, 0x0D,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //########### -0x80, 0x00, 0x88, 0x11, 0x11, 0x88, 0x88, 0x80, //# ##....##### -0x80, 0x04, 0x00, 0x11, 0x18, 0x80, 0x00, 0x80, //# $ ...## # -0x88, 0x84, 0x40, 0x11, 0x88, 0x80, 0x80, 0x80, //###$$ ..### # # -0x00, 0x80, 0x88, 0x11, 0x18, 0x84, 0x00, 0x80, // # ##...##$ # -0x00, 0x80, 0x80, 0x00, 0x88, 0x80, 0x08, 0x80, // # # ### ## -0x08, 0x80, 0x80, 0x40, 0x04, 0x04, 0x08, 0x00, // ## # $ $ $ # -0x08, 0x00, 0x80, 0x80, 0x80, 0x00, 0x08, 0x00, // # # # # # -0x08, 0x00, 0x00, 0x80, 0x40, 0x84, 0x08, 0x00, // # # $ #$ # -0x08, 0x04, 0x40, 0x80, 0x48, 0x00, 0x88, 0x00, // # $$ # $# ## -0x08, 0x88, 0x08, 0x80, 0x08, 0x08, 0x80, 0x00, // ### ## # ## -0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, // #@ # -0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // ######### -//Level: 255 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x80, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x28, //# # # # #@# -0x80, 0x40, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x08, //# $ $ $ # # -0x88, 0x08, 0x88, 0x11, 0x88, 0x08, 0x88, 0x00, 0x00, 0x08, //## ###..## ### # -0x80, 0x00, 0x81, 0x11, 0x18, 0x48, 0x00, 0x48, 0x88, 0x08, //# #....#$# $### # -0x80, 0x40, 0x81, 0x11, 0x18, 0x00, 0x40, 0x04, 0x04, 0x08, //# $ #....# $ $ $ # -0x80, 0x00, 0x81, 0x11, 0x18, 0x08, 0x08, 0x04, 0x04, 0x08, //# #....# # # $ $ # -0x80, 0x00, 0x88, 0x11, 0x88, 0x00, 0x08, 0x48, 0x00, 0x08, //# ##..## #$# # -0x88, 0x48, 0x80, 0x00, 0x08, 0x80, 0x08, 0x00, 0x84, 0x88, //##$## ## # #$## -0x80, 0x00, 0x40, 0x04, 0x00, 0x00, 0x08, 0x00, 0x80, 0x08, //# $ $ # # # -0x80, 0x00, 0x80, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x08, //# # # # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 256 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, //# # # # -0x80, 0x00, 0x00, 0x00, 0x40, 0x08, 0x80, 0x88, 0x80, 0x88, //# $ ## ### ## -0x88, 0x88, 0x80, 0x08, 0x80, 0x00, 0x40, 0x04, 0x00, 0x08, //##### ## $ $ # -0x88, 0x11, 0x88, 0x00, 0x80, 0x80, 0x40, 0x80, 0x80, 0x08, //##..## # # $ # # # -0x81, 0x11, 0x10, 0x04, 0x00, 0x00, 0x08, 0x84, 0x80, 0x88, //#.... $ ##$# ## -0x81, 0x11, 0x10, 0x04, 0x88, 0x88, 0x80, 0x00, 0x84, 0x88, //#.... $##### #$## -0x88, 0x11, 0x80, 0x80, 0x08, 0x00, 0x08, 0x00, 0x40, 0x08, //##..# # # # $ # -0x88, 0x81, 0x80, 0x80, 0x04, 0x00, 0x04, 0x00, 0x80, 0x28, //###.# # $ $ # @# -0x88, 0x00, 0x40, 0x04, 0x08, 0x00, 0x08, 0x00, 0x88, 0x88, //## $ $ # # #### -0x88, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, //## ########### -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 257 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x08, 0x00, 0x80, 0x80, 0x00, 0x08, 0x00, 0x80, 0x08, //# # # # # # # -0x80, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x08, //# $ $ $ # -0x88, 0x08, 0x00, 0x84, 0x88, 0x84, 0x88, 0x00, 0x88, 0x08, //## # #$###$## ## # -0x80, 0x00, 0x40, 0x00, 0x00, 0x40, 0x08, 0x00, 0x40, 0x08, //# $ $ # $ # -0x80, 0x88, 0x84, 0x88, 0x48, 0x00, 0x08, 0x04, 0x00, 0x08, //# ###$##$# # $ # -0x80, 0x80, 0x00, 0x40, 0x40, 0x08, 0x88, 0x88, 0x80, 0x48, //# # $ $ ###### $# -0x80, 0x40, 0x04, 0x40, 0x40, 0x08, 0x28, 0x18, 0x11, 0x18, //# $ $$ $ #@#.#...# -0x80, 0x80, 0x00, 0x00, 0x80, 0x08, 0x08, 0x18, 0x11, 0x18, //# # # # #.#...# -0x80, 0x88, 0x88, 0x88, 0x88, 0x88, 0x08, 0x11, 0x11, 0x18, //# ########## #.....# -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x11, 0x11, 0x18, //# #.....# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 258 -0x14, 0x0E,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // #### -0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x20, 0x80, 0x00, 0x00, // ##########@ # -0x88, 0x80, 0x00, 0x80, 0x00, 0x88, 0x40, 0x88, 0x88, 0x88, //### # ##$ ###### -0x80, 0x04, 0x40, 0x80, 0x00, 0x00, 0x40, 0x80, 0x01, 0x18, //# $$ # $ # ..# -0x80, 0x80, 0x00, 0x80, 0x00, 0x88, 0x40, 0x00, 0x01, 0x18, //# # # ##$ ..# -0x80, 0x80, 0x00, 0x80, 0x44, 0x08, 0x00, 0x80, 0x01, 0x18, //# # # $$ # # ..# -0x80, 0x80, 0x88, 0x88, 0x08, 0x08, 0x88, 0x80, 0x11, 0x18, //# # #### # #### ...# -0x80, 0x84, 0x08, 0x88, 0x08, 0x00, 0x80, 0x88, 0x88, 0x88, //# #$ ### # # ###### -0x80, 0x80, 0x08, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, //# # # # # -0x80, 0x00, 0x00, 0x40, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, //# $ # # -0x80, 0x80, 0x08, 0x88, 0x08, 0x80, 0x80, 0x00, 0x00, 0x00, //# # ### ## # -0x80, 0x88, 0x88, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, //# #### # -0x80, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //# ###### -0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //######## -//Level: 259 -0x0F, 0x0C,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ####### -0x00, 0x08, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, // # ###### -0x00, 0x08, 0x00, 0x48, 0x00, 0x00, 0x00, 0x80, // # $# # -0x88, 0x88, 0x40, 0x04, 0x00, 0x84, 0x40, 0x80, //####$ $ #$$ # -0x80, 0x00, 0x04, 0x40, 0x40, 0x00, 0x40, 0x80, //# $$ $ $ # -0x80, 0x48, 0x00, 0x88, 0x08, 0x88, 0x08, 0x80, //# $# ## ### ## -0x80, 0x28, 0x84, 0x04, 0x00, 0x40, 0x08, 0x00, //# @##$ $ $ # -0x80, 0x00, 0x00, 0x40, 0x04, 0x04, 0x08, 0x00, //# $ $ $ # -0x88, 0x88, 0x88, 0x88, 0x88, 0x44, 0x08, 0x00, //##########$$ # -0x00, 0x81, 0x11, 0x11, 0x11, 0x11, 0x88, 0x00, // #.........## -0x00, 0x81, 0x11, 0x11, 0x11, 0x11, 0x80, 0x00, // #.........# -0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // ########### -//Level: 260 -0x10, 0x0E,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ############## -0x08, 0x20, 0x05, 0x05, 0x05, 0x08, 0x00, 0x88, // #@ * * * # ## -0x08, 0x48, 0x00, 0x50, 0x50, 0x08, 0x00, 0x08, // #$# * * # # -0x08, 0x08, 0x05, 0x05, 0x05, 0x00, 0x00, 0x08, // # # * * * # -0x08, 0x08, 0x00, 0x50, 0x50, 0x08, 0x80, 0x88, // # # * * ## ## -0x08, 0x08, 0x05, 0x05, 0x05, 0x08, 0x80, 0x80, // # # * * * ## # -0x08, 0x08, 0x00, 0x50, 0x50, 0x08, 0x80, 0x80, // # # * * ## # -0x08, 0x08, 0x05, 0x05, 0x05, 0x08, 0x80, 0x80, // # # * * * ## # -0x08, 0x08, 0x00, 0x50, 0x50, 0x08, 0x80, 0x80, // # # * * ## # -0x08, 0x08, 0x05, 0x01, 0x05, 0x08, 0x80, 0x88, // # # * . * ## ## -0x88, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, 0x08, //## ########## # -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, //# # -0x80, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x08, //# ######### # -0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x88, 0x88, //##### #### -//Level: 261 -0x08, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x81, 0x11, 0x11, 0x08, //#..... # -0x84, 0x08, 0x84, 0x08, //#$ ##$ # -0x80, 0x48, 0x80, 0x08, //# $## # -0x80, 0x04, 0x24, 0x08, //# $@$ # -0x80, 0x00, 0x00, 0x88, //# ## -0x88, 0x88, 0x88, 0x80, //####### -//Level: 262 -0x13, 0x0D,//Size x and y -0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //##### -0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //# ## -0x80, 0x40, 0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, //# $ ######### -0x88, 0x08, 0x08, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, //## # # ###### -0x88, 0x08, 0x00, 0x04, 0x84, 0x82, 0x00, 0x80, 0x00, 0x80, //## # $#$#@ # # -0x80, 0x08, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x40, 0x80, //# # $ # $ # -0x80, 0x08, 0x88, 0x08, 0x88, 0x88, 0x88, 0x88, 0x08, 0x80, //# ### ######### ## -0x80, 0x08, 0x80, 0x11, 0x51, 0x11, 0x11, 0x08, 0x08, 0x80, //# ## ..*..... # ## -0x88, 0x08, 0x80, 0x51, 0x51, 0x15, 0x15, 0x08, 0x08, 0x80, //## ## *.*..*.* # ## -0x80, 0x48, 0x88, 0x88, 0x88, 0x88, 0x80, 0x88, 0x40, 0x80, //# $########## ##$ # -0x80, 0x04, 0x00, 0x04, 0x00, 0x40, 0x00, 0x04, 0x00, 0x80, //# $ $ $ $ # -0x80, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x80, //# # # # # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //################### -//Level: 263 -0x13, 0x10,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, // ###### -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x11, 0x11, 0x80, // #############....# -0x88, 0x00, 0x08, 0x80, 0x00, 0x00, 0x88, 0x11, 0x11, 0x80, //## ## ##....# -0x80, 0x04, 0x48, 0x80, 0x04, 0x02, 0x88, 0x11, 0x11, 0x80, //# $$## $ @##....# -0x80, 0x00, 0x00, 0x04, 0x40, 0x48, 0x00, 0x11, 0x11, 0x80, //# $$ $# ....# -0x80, 0x04, 0x08, 0x80, 0x44, 0x08, 0x08, 0x01, 0x11, 0x80, //# $ ## $$ # # ...# -0x80, 0x04, 0x08, 0x80, 0x40, 0x08, 0x00, 0x11, 0x11, 0x80, //# $ ## $ # ....# -0x88, 0x08, 0x88, 0x88, 0x08, 0x88, 0x08, 0x81, 0x88, 0x80, //## ##### ### ##.### -0x88, 0x00, 0x04, 0x00, 0x40, 0x88, 0x00, 0x01, 0x00, 0x80, //## $ $ ## . # -0x80, 0x48, 0x88, 0x00, 0x80, 0x88, 0x88, 0x80, 0x88, 0x80, //# $### # ##### ### -0x80, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //# $ # # -0x80, 0x04, 0x08, 0x40, 0x40, 0x48, 0x88, 0x00, 0x80, 0x00, //# $ #$ $ $### # -0x80, 0x44, 0x48, 0x04, 0x00, 0x08, 0x08, 0x88, 0x80, 0x00, //# $$$# $ # #### -0x80, 0x00, 0x08, 0x00, 0x44, 0x08, 0x00, 0x00, 0x00, 0x00, //# # $$ # -0x88, 0x88, 0x88, 0x00, 0x08, 0x88, 0x00, 0x00, 0x00, 0x00, //###### ### -0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // ##### -//Level: 264 -0x10, 0x0E,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x08, 0x88, 0x88, 0x80, // ####### ###### -0x08, 0x00, 0x00, 0x08, 0x88, 0x00, 0x00, 0x80, // # ### # -0x08, 0x00, 0x88, 0x08, 0x00, 0x44, 0x80, 0x88, // # ## # $$# ## -0x08, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x08, // #$ $ $ $ $ # -0x08, 0x04, 0x04, 0x08, 0x00, 0x08, 0x00, 0x08, // # $ $ # # # -0x88, 0x00, 0x44, 0x08, 0x88, 0x88, 0x81, 0x88, //## $$ ######.## -0x80, 0x40, 0x00, 0x08, 0x00, 0x08, 0x11, 0x18, //# $ # #...# -0x82, 0x84, 0x40, 0x88, 0x00, 0x08, 0x11, 0x18, //#@#$$ ## #...# -0x80, 0x04, 0x00, 0x08, 0x00, 0x08, 0x11, 0x18, //# $ # #...# -0x88, 0x00, 0x84, 0x08, 0x00, 0x08, 0x11, 0x18, //## #$ # #...# -0x08, 0x44, 0x80, 0x08, 0x88, 0x88, 0x11, 0x18, // #$$# #####...# -0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x11, 0x18, // # $ ...# -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x08, // ########### # -0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, // ##### -//Level: 265 -0x14, 0x0E,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x88, 0x88, 0x00, 0x00, // #### #### -0x00, 0x00, 0x08, 0x88, 0x00, 0x80, 0x80, 0x08, 0x00, 0x00, // ### # # # -0x00, 0x88, 0x88, 0x00, 0x40, 0x88, 0x80, 0x48, 0x00, 0x00, // #### $ ### $# -0x00, 0x80, 0x40, 0x00, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, // # $ $ # -0x88, 0x80, 0x08, 0x80, 0x40, 0x04, 0x00, 0x48, 0x00, 0x00, //### ## $ $ $# -0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x88, 0x08, 0x00, 0x00, //# # $ ## # -0x80, 0x84, 0x44, 0x48, 0x04, 0x40, 0x40, 0x08, 0x00, 0x00, //# #$$$$# $$ $ # -0x80, 0x00, 0x04, 0x04, 0x40, 0x88, 0x88, 0x08, 0x88, 0x88, //# $ $$ #### ##### -0x88, 0x88, 0x00, 0x00, 0x40, 0x28, 0x80, 0x11, 0x11, 0x18, //#### $ @## .....# -0x08, 0x00, 0x44, 0x88, 0x08, 0x88, 0x80, 0x11, 0x11, 0x88, // # $$## #### ....## -0x08, 0x04, 0x00, 0x81, 0x11, 0x18, 0x80, 0x11, 0x88, 0x80, // # $ #....## ..### -0x08, 0x08, 0x00, 0x41, 0x11, 0x18, 0x88, 0x88, 0x80, 0x00, // # # $....###### -0x08, 0x88, 0x80, 0x01, 0x11, 0x18, 0x00, 0x00, 0x00, 0x00, // #### ....# -0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ######## -//Level: 266 -0x0F, 0x0E,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ###### -0x08, 0x88, 0x80, 0x00, 0x08, 0x88, 0x88, 0x80, // #### ###### -0x08, 0x00, 0x80, 0x40, 0x00, 0x08, 0x00, 0x80, // # # $ # # -0x08, 0x04, 0x00, 0x84, 0x40, 0x04, 0x40, 0x80, // # $ #$$ $$ # -0x08, 0x00, 0x48, 0x00, 0x81, 0x18, 0x10, 0x80, // # $# #..#. # -0x88, 0x40, 0x08, 0x08, 0x11, 0x15, 0x18, 0x80, //##$ # #...*.## -0x80, 0x40, 0x80, 0x40, 0x11, 0x88, 0x10, 0x80, //# $ # $ ..##. # -0x80, 0x84, 0x04, 0x08, 0x11, 0x11, 0x10, 0x80, //# #$ $ #..... # -0x80, 0x00, 0x08, 0x00, 0x80, 0x08, 0x88, 0x80, //# # # #### -0x80, 0x48, 0x00, 0x80, 0x00, 0x28, 0x80, 0x00, //# $# # @## -0x80, 0x00, 0x04, 0x80, 0x80, 0x08, 0x00, 0x00, //# $# # # -0x88, 0x88, 0x00, 0x40, 0x88, 0x88, 0x00, 0x00, //#### $ #### -0x00, 0x08, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, // # ### -0x00, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // #### -//Level: 267 -0x0D, 0x0D,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // #### -0x00, 0x00, 0x80, 0x28, 0x88, 0x00, 0x00, // # @### -0x00, 0x88, 0x80, 0x40, 0x08, 0x80, 0x00, // ### $ ## -0x08, 0x80, 0x04, 0x14, 0x00, 0x80, 0x00, // ## $.$ # -0x08, 0x00, 0x41, 0x51, 0x40, 0x88, 0x80, // # $.*.$ ### -0x88, 0x04, 0x15, 0x15, 0x14, 0x00, 0x80, //## $.*.*.$ # -0x80, 0x41, 0x51, 0x51, 0x51, 0x40, 0x80, //# $.*.*.*.$ # -0x80, 0x04, 0x15, 0x15, 0x14, 0x08, 0x80, //# $.*.*.$ ## -0x88, 0x80, 0x41, 0x51, 0x40, 0x08, 0x00, //### $.*.$ # -0x00, 0x80, 0x04, 0x14, 0x00, 0x88, 0x00, // # $.$ ## -0x00, 0x88, 0x00, 0x40, 0x88, 0x80, 0x00, // ## $ ### -0x00, 0x08, 0x88, 0x00, 0x80, 0x00, 0x00, // ### # -0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // #### -//Level: 268 -0x0D, 0x0B,//Size x and y -0x08, 0x88, 0x80, 0x08, 0x88, 0x88, 0x80, // #### ###### -0x08, 0x00, 0x88, 0x88, 0x00, 0x00, 0x80, // # #### # -0x88, 0x50, 0x00, 0x50, 0x55, 0x00, 0x80, //##* * ** # -0x80, 0x40, 0x50, 0x00, 0x05, 0x80, 0x80, //# $ * *# # -0x80, 0x10, 0x00, 0x88, 0x80, 0x00, 0x80, //# . ### # -0x88, 0x88, 0x88, 0x00, 0x08, 0x28, 0x80, //###### #@## -0x80, 0x50, 0x10, 0x50, 0x05, 0x50, 0x80, //# * . * ** # -0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, //# # # # -0x88, 0x50, 0x00, 0x50, 0x84, 0x80, 0x80, //##* * #$# # -0x08, 0x00, 0x88, 0x88, 0x80, 0x00, 0x80, // # ##### # -0x08, 0x88, 0x80, 0x00, 0x88, 0x88, 0x80, // #### ##### -//Level: 269 -0x09, 0x09,//Size x and y -0x00, 0x88, 0x88, 0x80, 0x00, // ##### -0x00, 0x80, 0x00, 0x88, 0x00, // # ## -0x88, 0x84, 0x00, 0x08, 0x80, //###$ ## -0x80, 0x01, 0x41, 0x40, 0x80, //# .$.$ # -0x80, 0x81, 0x81, 0x80, 0x80, //# #.#.# # -0x80, 0x05, 0x45, 0x00, 0x80, //# *$* # -0x88, 0x80, 0x00, 0x88, 0x80, //### ### -0x00, 0x80, 0x20, 0x80, 0x00, // # @ # -0x00, 0x88, 0x88, 0x80, 0x00, // ##### -//Level: 270 -0x08, 0x07,//Size x and y -0x88, 0x88, 0x80, 0x00, //##### -0x80, 0x00, 0x88, 0x80, //# ### -0x80, 0x80, 0x52, 0x88, //# # *@## -0x80, 0x05, 0x00, 0x08, //# * # -0x88, 0x84, 0x00, 0x08, //###$ # -0x00, 0x80, 0x00, 0x18, // # .# -0x00, 0x88, 0x88, 0x88, // ###### -//Level: 271 -0x11, 0x10,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ######## -0x00, 0x08, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, // # # # -0x00, 0x08, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, // # $ # -0x08, 0x88, 0x08, 0x40, 0x00, 0x88, 0x88, 0x00, 0x00, // ### #$ #### -0x08, 0x00, 0x40, 0x08, 0x84, 0x00, 0x08, 0x00, 0x00, // # $ ##$ # -0x08, 0x00, 0x80, 0x20, 0x40, 0x80, 0x48, 0x00, 0x00, // # # @ $ # $# -0x08, 0x00, 0x80, 0x00, 0x00, 0x04, 0x08, 0x88, 0x80, // # # $ #### -0x08, 0x80, 0x88, 0x88, 0x48, 0x80, 0x00, 0x00, 0x80, // ## ####$## # -0x08, 0x04, 0x81, 0x11, 0x11, 0x80, 0x80, 0x00, 0x80, // # $#.....# # # -0x08, 0x00, 0x41, 0x15, 0x51, 0x04, 0x80, 0x88, 0x80, // # $..**. $# ### -0x88, 0x00, 0x81, 0x11, 0x11, 0x80, 0x00, 0x80, 0x00, //## #.....# # -0x80, 0x00, 0x88, 0x80, 0x88, 0x88, 0x88, 0x80, 0x00, //# ### ####### -0x80, 0x44, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, //# $$ # # -0x80, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //# # # -0x88, 0x88, 0x88, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //###### # -0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ##### -//Level: 272 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x88, 0x11, 0x10, 0x00, 0x88, 0x08, 0x00, 0x00, 0x80, 0x08, //##... ## # # # -0x81, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x88, 0x08, //#.... $ ## # -0x81, 0x11, 0x18, 0x08, 0x08, 0x48, 0x88, 0x40, 0x00, 0x08, //#....# # #$###$ # -0x81, 0x11, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x08, //#...# # # # -0x88, 0x18, 0x00, 0x84, 0x08, 0x00, 0x00, 0x04, 0x88, 0x08, //##.# #$ # $## # -0x80, 0x08, 0x00, 0x80, 0x40, 0x40, 0x88, 0x80, 0x04, 0x08, //# # # $ $ ### $ # -0x80, 0x00, 0x00, 0x40, 0x04, 0x08, 0x00, 0x80, 0x88, 0x08, //# $ $ # # ## # -0x88, 0x08, 0x08, 0x80, 0x84, 0x48, 0x04, 0x80, 0x08, 0x08, //## # ## #$$# $# # # -0x80, 0x08, 0x00, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x88, //# # $ $ # ## -0x80, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x80, 0x00, 0x28, //# # # # @# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 273 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x08, 0x00, 0x80, 0x80, 0x08, 0x00, 0x80, 0x08, //# # # # # # # -0x80, 0x28, 0x08, 0x08, 0x80, 0x40, 0x00, 0x40, 0x00, 0x88, //# @# # ## $ $ ## -0x88, 0x88, 0x08, 0x00, 0x00, 0x80, 0x08, 0x04, 0x00, 0x08, //#### # # # $ # -0x80, 0x00, 0x08, 0x08, 0x80, 0x84, 0x08, 0x80, 0x88, 0x08, //# # ## #$ ## ## # -0x80, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, //# $ $ $ # -0x81, 0x18, 0x88, 0x44, 0x88, 0x04, 0x88, 0x40, 0x88, 0x08, //#..###$$## $##$ ## # -0x81, 0x18, 0x18, 0x00, 0x80, 0x40, 0x00, 0x40, 0x80, 0x08, //#..#.# # $ $ # # -0x81, 0x11, 0x18, 0x04, 0x40, 0x00, 0x88, 0x40, 0x88, 0x88, //#....# $$ ##$ #### -0x81, 0x11, 0x18, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x08, //#....# ##### # -0x81, 0x11, 0x88, 0x80, 0x00, 0x00, 0x00, 0x08, 0x80, 0x08, //#...### ## # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 274 -0x12, 0x0D,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // ######### -0x00, 0x00, 0x08, 0x00, 0x00, 0x11, 0x18, 0x00, 0x00, // # ...# -0x00, 0x00, 0x08, 0x08, 0x00, 0x11, 0x18, 0x00, 0x00, // # # ...# -0x00, 0x00, 0x08, 0x08, 0x80, 0x01, 0x18, 0x00, 0x00, // # ## ..# -0x88, 0x88, 0x88, 0x04, 0x04, 0x08, 0x88, 0x00, 0x00, //###### $ $ ### -0x81, 0x11, 0x40, 0x40, 0x42, 0x88, 0x00, 0x00, 0x00, //#...$ $ $@## -0x81, 0x18, 0x04, 0x04, 0x04, 0x88, 0x88, 0x88, 0x88, //#..# $ $ $######## -0x81, 0x11, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 0x08, //#...# $ $ # -0x81, 0x11, 0x04, 0x04, 0x00, 0x84, 0x84, 0x88, 0x08, //#... $ $ #$#$## # -0x80, 0x08, 0x88, 0x80, 0x40, 0x40, 0x40, 0x80, 0x08, //# #### $ $ $ # # -0x80, 0x08, 0x00, 0x80, 0x04, 0x00, 0x04, 0x00, 0x08, //# # # $ $ # -0x88, 0x88, 0x00, 0x88, 0x00, 0x08, 0x88, 0x88, 0x88, //#### ## ####### -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // ##### -//Level: 275 -0x10, 0x0D,//Size x and y -0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // #### -0x88, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //## ############ -0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x28, //# $ $ $ $ $ $ @# -0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x40, 0x08, //# # $ # -0x80, 0x80, 0x08, 0x88, 0x85, 0x88, 0x84, 0x88, //# # ####*###$## -0x80, 0x80, 0x08, 0x11, 0x11, 0x18, 0x00, 0x80, //# # #.....# # -0x80, 0x84, 0x08, 0x15, 0x55, 0x15, 0x00, 0x80, //# #$ #.***.* # -0x80, 0x80, 0x05, 0x11, 0x11, 0x18, 0x00, 0x80, //# # *.....# # -0x80, 0x80, 0x48, 0x88, 0x88, 0x88, 0x44, 0x80, //# # $#######$$# -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# # -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x80, 0x80, //########### # # -0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, // # # -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // ##### -//Level: 276 -0x0E, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############## -0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, //#. # -0x81, 0x40, 0x40, 0x40, 0x40, 0x40, 0x08, //#.$ $ $ $ $ # -0x81, 0x88, 0x88, 0x88, 0x88, 0x80, 0x08, //#.######### # -0x81, 0x81, 0x50, 0x40, 0x11, 0x45, 0x88, //#.#.* $ ..$*## -0x81, 0x80, 0x40, 0x40, 0x51, 0x42, 0x80, //#.# $ $ *.$@# -0x81, 0x81, 0x00, 0x40, 0x11, 0x44, 0x80, //#.#. $ ..$$# -0x81, 0x88, 0x88, 0x88, 0x88, 0x81, 0x80, //#.#########.# -0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //#. # -0x81, 0x84, 0x84, 0x84, 0x84, 0x84, 0x80, //#.#$#$#$#$#$# -0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //#. # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############# -//Level: 277 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x00, 0x00, //#### -0x81, 0x08, 0x00, 0x00, //#. # -0x80, 0x48, 0x00, 0x00, //# $# -0x80, 0x08, 0x88, 0x88, //# ##### -0x80, 0x14, 0x02, 0x08, //# .$ @ # -0x80, 0x14, 0x08, 0x08, //# .$ # # -0x88, 0x80, 0x00, 0x08, //### # -0x00, 0x88, 0x88, 0x88, // ###### -//Level: 278 -0x08, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x80, 0x00, 0x00, 0x08, //# # -0x80, 0x84, 0x00, 0x08, //# #$ # -0x80, 0x40, 0x28, 0x18, //# $ @#.# -0x88, 0x48, 0x10, 0x08, //##$#. # -0x08, 0x00, 0x00, 0x18, // # .# -0x08, 0x88, 0x88, 0x88, // ####### -//Level: 279 -0x13, 0x11,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x80, // ######## -0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x11, 0x11, 0x11, 0x80, // #......# -0x00, 0x08, 0x88, 0x80, 0x00, 0x08, 0x11, 0x11, 0x11, 0x80, // #### #......# -0x00, 0x08, 0x00, 0x88, 0x88, 0x88, 0x88, 0x81, 0x11, 0x80, // # #########...# -0x00, 0x08, 0x04, 0x00, 0x04, 0x00, 0x00, 0x81, 0x11, 0x80, // # $ $ #...# -0x00, 0x08, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, // # # # # # # # -0x88, 0x88, 0x80, 0x80, 0x80, 0x82, 0x80, 0x80, 0x00, 0x80, //##### # # #@# # # -0x80, 0x00, 0x80, 0x88, 0x80, 0x88, 0x80, 0x88, 0x08, 0x80, //# # ### ### ## ## -0x80, 0x00, 0x04, 0x08, 0x04, 0x04, 0x04, 0x08, 0x08, 0x00, //# $ # $ $ $ # # -0x80, 0x44, 0x40, 0x04, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, //# $$$ $ # # -0x80, 0x00, 0x80, 0x88, 0x84, 0x88, 0x84, 0x88, 0x08, 0x00, //# # ###$###$## # -0x88, 0x80, 0x80, 0x04, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, //### # $ # # -0x08, 0x80, 0x40, 0x08, 0x04, 0x04, 0x04, 0x08, 0x88, 0x00, // ## $ # $ $ $ ### -0x08, 0x00, 0x80, 0x88, 0x80, 0x88, 0x80, 0x88, 0x00, 0x00, // # # ### ### ## -0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // # $ # -0x08, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // # ########### -0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // #### -//Level: 280 -0x0F, 0x0E,//Size x and y -0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#### -0x80, 0x08, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //# ### -0x80, 0x40, 0x08, 0x88, 0x00, 0x00, 0x00, 0x00, //# $ ### -0x80, 0x40, 0x40, 0x08, 0x88, 0x00, 0x00, 0x00, //# $ $ ### -0x80, 0x40, 0x40, 0x40, 0x08, 0x88, 0x00, 0x00, //# $ $ $ ### -0x80, 0x40, 0x40, 0x40, 0x00, 0x08, 0x00, 0x00, //# $ $ $ # -0x80, 0x40, 0x40, 0x08, 0x00, 0x08, 0x80, 0x00, //# $ $ # ## -0x80, 0x40, 0x08, 0x80, 0x44, 0x40, 0x80, 0x00, //# $ ## $$$ # -0x82, 0x08, 0x88, 0x80, 0x00, 0x00, 0x88, 0x00, //#@ #### ## -0x88, 0x08, 0x08, 0x14, 0x44, 0x44, 0x18, 0x00, //## # #.$$$$$.# -0x08, 0x08, 0x88, 0x11, 0x11, 0x11, 0x18, 0x80, // # ###.......## -0x08, 0x00, 0x01, 0x55, 0x55, 0x55, 0x51, 0x80, // # .*******.# -0x08, 0x88, 0x81, 0x11, 0x11, 0x11, 0x11, 0x80, // ####.........# -0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ########### -//Level: 281 -0x10, 0x12,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ####### -0x00, 0x00, 0x80, 0x00, 0x82, 0x80, 0x00, 0x00, // # #@# -0x08, 0x88, 0x80, 0x80, 0x80, 0x88, 0x88, 0x80, // #### # # ##### -0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, // # # # -0x08, 0x04, 0x84, 0x88, 0x88, 0x88, 0x80, 0x80, // # $#$####### # -0x88, 0x40, 0x00, 0x81, 0x18, 0x11, 0x84, 0x88, //##$ #..#..#$## -0x80, 0x00, 0x04, 0x41, 0x11, 0x11, 0x80, 0x08, //# $$.....# # -0x80, 0x40, 0x40, 0x81, 0x11, 0x11, 0x44, 0x08, //# $ $ #.....$$ # -0x88, 0x00, 0x08, 0x81, 0x11, 0x81, 0x80, 0x08, //## ##...#.# # -0x08, 0x04, 0x00, 0x88, 0x11, 0x18, 0x84, 0x08, // # $ ##...##$ # -0x08, 0x08, 0x80, 0x88, 0x88, 0x88, 0x80, 0x08, // # ## ####### # -0x08, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x88, // # $ $ $ ## -0x08, 0x88, 0x88, 0x80, 0x00, 0x40, 0x80, 0x80, // ###### $ # # -0x00, 0x00, 0x00, 0x88, 0x08, 0x04, 0x00, 0x80, // ## # $ # -0x00, 0x00, 0x00, 0x80, 0x44, 0x04, 0x00, 0x80, // # $$ $ # -0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x80, // # $ # -0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x80, // ###### # -0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, // #### -//Level: 282 -0x0B, 0x07,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x80, // ########## -0x88, 0x04, 0x00, 0x51, 0x50, 0x80, //## $ *.* # -0x80, 0x04, 0x00, 0x51, 0x50, 0x80, //# $ *.* # -0x80, 0x04, 0x00, 0x51, 0x52, 0x80, //# $ *.*@# -0x80, 0x04, 0x00, 0x51, 0x50, 0x80, //# $ *.* # -0x80, 0x04, 0x00, 0x51, 0x50, 0x80, //# $ *.* # -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //########### -//Level: 283 -0x0F, 0x0D,//Size x and y -0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // #### -0x00, 0x00, 0x00, 0x80, 0x08, 0x88, 0x88, 0x80, // # ###### -0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x80, // # # # -0x00, 0x00, 0x00, 0x80, 0x44, 0x00, 0x00, 0x80, // # $$ # -0x88, 0x88, 0x88, 0x84, 0x80, 0x08, 0x00, 0x80, //#######$# # # -0x80, 0x08, 0x15, 0x11, 0x08, 0x88, 0x48, 0x80, //# #.*.. ###$## -0x80, 0x08, 0x18, 0x51, 0x40, 0x00, 0x00, 0x80, //# #.#*.$ # -0x80, 0x08, 0x18, 0x15, 0x80, 0x80, 0x00, 0x80, //# #.#.*# # # -0x80, 0x44, 0x11, 0x11, 0x80, 0x88, 0x88, 0x80, //# $$....# ##### -0x80, 0x24, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, //# @$ # # -0x80, 0x44, 0x48, 0x00, 0x00, 0x80, 0x00, 0x00, //# $$$# # -0x80, 0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, //# ###### -0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //###### -//Level: 284 -0x10, 0x0E,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ####### -0x08, 0x00, 0x00, 0x08, 0x00, 0x08, 0x88, 0x88, // # # ##### -0x08, 0x00, 0x88, 0x08, 0x88, 0x88, 0x00, 0x08, // # ## ##### # -0x08, 0x40, 0x40, 0x40, 0x08, 0x00, 0x08, 0x08, // #$ $ $ # # # -0x08, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x08, // # $ $ # # -0x88, 0x00, 0x44, 0x08, 0x88, 0x48, 0x88, 0x08, //## $$ ###$### # -0x80, 0x40, 0x00, 0x08, 0x11, 0x11, 0x80, 0x08, //# $ #....# # -0x82, 0x84, 0x40, 0x88, 0x11, 0x11, 0x80, 0x08, //#@#$$ ##....# # -0x80, 0x04, 0x00, 0x08, 0x11, 0x11, 0x40, 0x08, //# $ #....$ # -0x88, 0x00, 0x88, 0x08, 0x11, 0x11, 0x80, 0x88, //## ## #....# ## -0x08, 0x44, 0x80, 0x08, 0x80, 0x88, 0x80, 0x08, // #$$# ## ### # -0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x08, // # $ # -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x08, // ############ # -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, // #### -//Level: 285 -0x10, 0x0D,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ######### -0x00, 0x80, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, // # # # -0x88, 0x80, 0x84, 0x00, 0x40, 0x88, 0x88, 0x00, //### #$ $ #### -0x80, 0x04, 0x00, 0x88, 0x11, 0x80, 0x08, 0x88, //# $ ##..# ### -0x80, 0x80, 0x04, 0x08, 0x11, 0x40, 0x40, 0x08, //# # $ #..$ $ # -0x80, 0x44, 0x00, 0x48, 0x11, 0x00, 0x80, 0x08, //# $$ $#.. # # -0x88, 0x00, 0x80, 0x01, 0x11, 0x84, 0x00, 0x08, //## # ...#$ # -0x08, 0x40, 0x20, 0x81, 0x11, 0x80, 0x40, 0x88, // #$ @ #...# $ ## -0x08, 0x00, 0x00, 0x81, 0x11, 0x40, 0x08, 0x80, // # #...$ ## -0x08, 0x08, 0x84, 0x08, 0x88, 0x00, 0x08, 0x00, // # ##$ ### # -0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x88, 0x00, // # $ ### -0x08, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // # ######## -0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // #### -//Level: 286 -0x09, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, //######### -0x82, 0x00, 0x50, 0x00, 0x80, //#@ * # -0x80, 0x44, 0x14, 0x00, 0x80, //# $$.$ # -0x81, 0x11, 0x15, 0x55, 0x80, //#....***# -0x80, 0x44, 0x14, 0x00, 0x80, //# $$.$ # -0x80, 0x00, 0x50, 0x00, 0x80, //# * # -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 287 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x02, 0x88, 0x00, 0x00, 0x00, 0x80, 0x00, 0x88, //# @## # ## -0x80, 0x00, 0x08, 0x80, 0x00, 0x04, 0x00, 0x00, 0x40, 0x88, //# ## $ $ ## -0x80, 0x08, 0x88, 0x11, 0x11, 0x80, 0x80, 0x80, 0x08, 0x88, //# ###....# # # ### -0x80, 0x00, 0x81, 0x11, 0x18, 0x08, 0x08, 0x04, 0x00, 0x08, //# #....# # # $ # -0x88, 0x80, 0x81, 0x11, 0x80, 0x08, 0x00, 0x00, 0x00, 0x08, //### #...# # # -0x88, 0x00, 0x88, 0x18, 0x00, 0x00, 0x04, 0x00, 0x04, 0x08, //## ##.# $ $ # -0x88, 0x00, 0x40, 0x40, 0x88, 0x80, 0x08, 0x08, 0x08, 0x88, //## $ $ ### # # ### -0x88, 0x04, 0x00, 0x00, 0x00, 0x08, 0x08, 0x04, 0x00, 0x08, //## $ # # $ # -0x88, 0x88, 0x04, 0x00, 0x48, 0x08, 0x08, 0x08, 0x04, 0x08, //#### $ $# # # # $ # -0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x88, //#### # # ## -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 288 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x02, 0x08, 0x88, //## @ ### -0x88, 0x01, 0x00, 0x08, //## . # -0x81, 0x04, 0x14, 0x08, //#. $.$ # -0x88, 0x48, 0x08, 0x88, //##$# ### -0x88, 0x00, 0x08, 0x88, //## ### -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x88, 0x88, //######## -//Level: 289 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x20, 0x88, 0x88, //##@ #### -0x88, 0x00, 0x88, 0x88, //## #### -0x88, 0x10, 0x88, 0x88, //##. #### -0x80, 0x44, 0x10, 0x18, //# $$. .# -0x80, 0x04, 0x08, 0x88, //# $ ### -0x88, 0x80, 0x08, 0x88, //### ### -0x88, 0x88, 0x88, 0x88, //######## -//Level: 290 -0x0A, 0x12,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x80, // ######## -0x08, 0x11, 0x11, 0x11, 0x80, // #......# -0x08, 0x11, 0x88, 0x11, 0x80, // #..##..# -0x08, 0x11, 0x11, 0x11, 0x80, // #......# -0x08, 0x11, 0x55, 0x11, 0x80, // #..**..# -0x08, 0x88, 0x11, 0x88, 0x80, // ###..### -0x08, 0x00, 0x44, 0x00, 0x80, // # $$ # -0x08, 0x00, 0x00, 0x00, 0x80, // # # -0x08, 0x04, 0x44, 0x40, 0x80, // # $$$$ # -0x88, 0x80, 0x00, 0x08, 0x88, //### ### -0x80, 0x04, 0x44, 0x40, 0x08, //# $$$$ # -0x80, 0x00, 0x00, 0x00, 0x08, //# # -0x80, 0x44, 0x44, 0x44, 0x08, //# $$$$$$ # -0x88, 0x00, 0x00, 0x00, 0x88, //## ## -0x80, 0x44, 0x44, 0x44, 0x08, //# $$$$$$ # -0x80, 0x00, 0x20, 0x00, 0x08, //# @ # -0x80, 0x08, 0x88, 0x80, 0x08, //# #### # -0x88, 0x88, 0x00, 0x88, 0x88, //#### #### -//Level: 291 -0x0F, 0x0D,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, //# # # -0x80, 0x40, 0x84, 0x08, 0x04, 0x88, 0x40, 0x80, //# $ #$ # $##$ # -0x80, 0x80, 0x04, 0x08, 0x00, 0x00, 0x00, 0x80, //# # $ # # -0x80, 0x00, 0x88, 0x48, 0x48, 0x84, 0x40, 0x80, //# ##$#$##$$ # -0x80, 0x80, 0x80, 0x11, 0x10, 0x80, 0x00, 0x80, //# # # ... # # -0x80, 0x40, 0x01, 0x08, 0x01, 0x40, 0x80, 0x80, //# $ . # .$ # # -0x80, 0x48, 0x24, 0x11, 0x18, 0x08, 0x00, 0x80, //# $#@$...# # # -0x80, 0x00, 0x01, 0x08, 0x01, 0x00, 0x40, 0x80, //# . # . $ # -0x80, 0x88, 0x14, 0x88, 0x84, 0x10, 0x80, 0x80, //# ##.$###$. # # -0x80, 0x80, 0x41, 0x11, 0x11, 0x08, 0x80, 0x80, //# # $..... ## # -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -//Level: 292 -0x0F, 0x0A,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ############# -0x08, 0x00, 0x00, 0x80, 0x08, 0x80, 0x08, 0x00, // # # ## # -0x08, 0x44, 0x40, 0x80, 0x44, 0x00, 0x48, 0x80, // #$$$ # $$ $## -0x08, 0x04, 0x00, 0x80, 0x01, 0x11, 0x10, 0x80, // # $ # .... # -0x08, 0x00, 0x40, 0x08, 0x41, 0x88, 0x10, 0x80, // # $ #$.##. # -0x08, 0x00, 0x80, 0x48, 0x01, 0x11, 0x18, 0x80, // # # $# ....## -0x88, 0x40, 0x40, 0x08, 0x41, 0x88, 0x10, 0x80, //##$ $ #$.##. # -0x80, 0x40, 0x04, 0x02, 0x41, 0x11, 0x10, 0x80, //# $ $ @$.... # -0x80, 0x00, 0x88, 0x80, 0x08, 0x88, 0x88, 0x80, //# ### ###### -0x88, 0x88, 0x80, 0x88, 0x88, 0x00, 0x00, 0x00, //##### #### -//Level: 293 -0x09, 0x07,//Size x and y -0x00, 0x88, 0x88, 0x80, 0x00, // ##### -0x88, 0x80, 0x00, 0x88, 0x80, //### ### -0x80, 0x10, 0x40, 0x10, 0x80, //# . $ . # -0x80, 0x81, 0x41, 0x80, 0x80, //# #.$.# # -0x80, 0x40, 0x80, 0x40, 0x80, //# $ # $ # -0x88, 0x80, 0x20, 0x88, 0x80, //### @ ### -0x00, 0x88, 0x88, 0x80, 0x00, // ##### -//Level: 294 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x82, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, //#@ # # # -0x88, 0x08, 0x88, 0x08, 0x80, 0x08, 0x88, 0x80, 0x80, 0x88, //## ### ## #### # ## -0x80, 0x00, 0x08, 0x08, 0x00, 0x44, 0x00, 0x00, 0x00, 0x08, //# # # $$ # -0x80, 0x08, 0x08, 0x08, 0x04, 0x08, 0x04, 0x08, 0x80, 0x88, //# # # # $ # $ ## ## -0x80, 0x00, 0x00, 0x40, 0x80, 0x08, 0x44, 0x08, 0x00, 0x08, //# $ # #$$ # # -0x80, 0x08, 0x88, 0x00, 0x80, 0x00, 0x00, 0x08, 0x80, 0x88, //# ### # ## ## -0x81, 0x18, 0x18, 0x04, 0x08, 0x00, 0x40, 0x80, 0x00, 0x08, //#..#.# $ # $ # # -0x81, 0x18, 0x18, 0x00, 0x40, 0x80, 0x88, 0x04, 0x40, 0x08, //#..#.# $ # ## $$ # -0x81, 0x11, 0x18, 0x80, 0x00, 0x44, 0x00, 0x40, 0x08, 0x08, //#....## $$ $ # # -0x81, 0x11, 0x11, 0x88, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, //#.....## # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 295 -0x0D, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############# -0x80, 0x04, 0x04, 0x04, 0x15, 0x11, 0x80, //# $ $ $.*..# -0x80, 0x40, 0x40, 0x40, 0x51, 0x11, 0x80, //# $ $ $ *...# -0x80, 0x04, 0x04, 0x04, 0x15, 0x11, 0x80, //# $ $ $.*..# -0x80, 0x40, 0x40, 0x40, 0x51, 0x11, 0x80, //# $ $ $ *...# -0x80, 0x04, 0x04, 0x04, 0x15, 0x11, 0x80, //# $ $ $.*..# -0x80, 0x40, 0x40, 0x40, 0x51, 0x11, 0x80, //# $ $ $ *...# -0x80, 0x04, 0x04, 0x04, 0x15, 0x11, 0x80, //# $ $ $.*..# -0x80, 0x40, 0x40, 0x40, 0x51, 0x11, 0x80, //# $ $ $ *...# -0x80, 0x04, 0x04, 0x04, 0x15, 0x11, 0x80, //# $ $ $.*..# -0x82, 0x40, 0x40, 0x40, 0x51, 0x11, 0x80, //#@$ $ $ *...# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############# -//Level: 296 -0x13, 0x10,//Size x and y -0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ############ -0x00, 0x00, 0x08, 0x81, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, // ##.. # # -0x00, 0x00, 0x88, 0x11, 0x50, 0x40, 0x00, 0x04, 0x08, 0x00, // ##..* $ $ # -0x00, 0x08, 0x81, 0x15, 0x18, 0x08, 0x08, 0x04, 0x88, 0x00, // ##..*.# # # $## -0x00, 0x08, 0x11, 0x51, 0x80, 0x80, 0x80, 0x40, 0x08, 0x00, // #..*.# # # $ # -0x88, 0x88, 0x11, 0x18, 0x00, 0x80, 0x00, 0x08, 0x08, 0x00, //####...# # # # -0x80, 0x08, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, //# ## # # -0x80, 0x24, 0x04, 0x08, 0x88, 0x00, 0x80, 0x00, 0x88, 0x00, //# @$ $ ### # ## -0x80, 0x40, 0x00, 0x40, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, //# $ $ # # # -0x88, 0x84, 0x40, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, //###$$ # # # # # -0x00, 0x80, 0x00, 0x40, 0x00, 0x80, 0x80, 0x88, 0x88, 0x80, // # $ # # ##### -0x00, 0x80, 0x48, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x80, // # $# ##### # -0x00, 0x84, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x80, 0x80, // #$ # # # # -0x00, 0x80, 0x08, 0x88, 0x00, 0x08, 0x80, 0x00, 0x00, 0x80, // # ### ## # -0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x80, // # # # ## -0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, // #### ###### -//Level: 297 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x00, 0x80, 0x08, 0x11, 0x18, 0x20, 0x00, 0x08, //# # #...#@ # -0x80, 0x80, 0x00, 0x00, 0x00, 0x11, 0x11, 0x80, 0x00, 0x08, //# # ....# # -0x80, 0x04, 0x00, 0x80, 0x00, 0x81, 0x11, 0x18, 0x00, 0x08, //# $ # #....# # -0x80, 0x88, 0x48, 0x88, 0x80, 0x88, 0x11, 0x11, 0x80, 0x08, //# ##$#### ##....# # -0x80, 0x40, 0x00, 0x40, 0x08, 0x00, 0x81, 0x11, 0x80, 0x08, //# $ $ # #...# # -0x80, 0x44, 0x08, 0x00, 0x08, 0x00, 0x08, 0x04, 0x40, 0x08, //# $$ # # # $$ # -0x88, 0x80, 0x04, 0x44, 0x80, 0x00, 0x44, 0x00, 0x40, 0x08, //### $$$# $$ $ # -0x80, 0x40, 0x08, 0x00, 0x80, 0x00, 0x08, 0x04, 0x80, 0x08, //# $ # # # $# # -0x80, 0x00, 0x48, 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x08, //# $# # $ # -0x80, 0x08, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x80, 0x08, //# # # # # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 298 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x80, 0x08, 0x80, 0x08, //# ## # -0x80, 0x10, 0x01, 0x48, //# . .$# -0x80, 0x48, 0x04, 0x18, //# $# $.# -0x88, 0x02, 0x08, 0x08, //## @ # # -0x88, 0x88, 0x00, 0x08, //#### # -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x88, 0x88, //######## -//Level: 299 -0x08, 0x08,//Size x and y -0x00, 0x00, 0x88, 0x88, // #### -0x00, 0x00, 0x80, 0x08, // # # -0x00, 0x88, 0x84, 0x18, // ###$.# -0x00, 0x80, 0x01, 0x08, // # . # -0x88, 0x80, 0x08, 0x18, //### #.# -0x80, 0x40, 0x04, 0x08, //# $ $ # -0x80, 0x00, 0x82, 0x08, //# #@ # -0x88, 0x88, 0x88, 0x88, //######## -//Level: 300 -0x08, 0x06,//Size x and y -0x00, 0x88, 0x88, 0x00, // #### -0x88, 0x80, 0x08, 0x88, //### ### -0x80, 0x11, 0x04, 0x18, //# .. $.# -0x80, 0x04, 0x40, 0x28, //# $$ @# -0x88, 0x88, 0x00, 0x08, //#### # -0x00, 0x08, 0x88, 0x88, // ##### -//Level: 301 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x00, //###### -0x80, 0x01, 0x08, 0x00, //# . # -0x80, 0x00, 0x08, 0x88, //# ### -0x80, 0x84, 0x41, 0x08, //# #$$. # -0x81, 0x00, 0x88, 0x08, //#. ## # -0x82, 0x40, 0x88, 0x08, //#@$ ## # -0x88, 0x80, 0x00, 0x08, //### # -0x00, 0x88, 0x88, 0x88, // ###### -//Level: 302 -0x11, 0x12,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, // #### -0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x80, // ######## # -0x00, 0x00, 0x08, 0x80, 0x40, 0x40, 0x00, 0x40, 0x80, // ## $ $ $ # -0x00, 0x00, 0x08, 0x00, 0x02, 0x84, 0x00, 0x40, 0x80, // # @#$ $ # -0x00, 0x00, 0x08, 0x00, 0x40, 0x80, 0x08, 0x00, 0x80, // # $ # # # -0x88, 0x88, 0x88, 0x88, 0x04, 0x80, 0x00, 0x00, 0x80, //######## $# # -0x80, 0x00, 0x40, 0x00, 0x00, 0x40, 0x40, 0x88, 0x80, //# $ $ $ ### -0x80, 0x00, 0x88, 0x88, 0x84, 0x88, 0x48, 0x80, 0x00, //# #####$##$## -0x88, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, //## $$ # -0x08, 0x00, 0x88, 0x04, 0x04, 0x04, 0x00, 0x80, 0x00, // # ## $ $ $ # -0x08, 0x88, 0x88, 0x80, 0x80, 0x80, 0x88, 0x80, 0x00, // ###### # # ### -0x00, 0x00, 0x08, 0x04, 0x04, 0x00, 0x80, 0x00, 0x00, // # $ $ # -0x00, 0x00, 0x08, 0x00, 0x40, 0x08, 0x80, 0x00, 0x00, // # $ ## -0x00, 0x00, 0x88, 0x88, 0x04, 0x88, 0x80, 0x00, 0x00, // #### $### -0x00, 0x00, 0x81, 0x11, 0x11, 0x11, 0x80, 0x00, 0x00, // #.......# -0x00, 0x00, 0x81, 0x11, 0x11, 0x11, 0x80, 0x00, 0x00, // #.......# -0x00, 0x00, 0x81, 0x11, 0x11, 0x11, 0x80, 0x00, 0x00, // #.......# -0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ######### -//Level: 303 -0x10, 0x0D,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // ##### -0x88, 0x88, 0x88, 0x80, 0x00, 0x80, 0x00, 0x00, //####### # -0x80, 0x00, 0x88, 0x10, 0x00, 0x80, 0x00, 0x00, //# ##. # -0x80, 0x04, 0x81, 0x10, 0x08, 0x88, 0x00, 0x00, //# $#.. ### -0x88, 0x00, 0x11, 0x18, 0x44, 0x08, 0x88, 0x88, //## ...#$$ ##### -0x08, 0x04, 0x18, 0x14, 0x00, 0x00, 0x00, 0x08, // # $.#.$ # -0x08, 0x04, 0x88, 0x84, 0x88, 0x08, 0x04, 0x08, // # $###$## # $ # -0x08, 0x00, 0x08, 0x00, 0x00, 0x04, 0x48, 0x08, // # # $$# # -0x08, 0x84, 0x48, 0x08, 0x84, 0x84, 0x00, 0x08, // ##$$# ##$#$ # -0x08, 0x11, 0x10, 0x42, 0x04, 0x00, 0x08, 0x88, // #... $@ $ ### -0x08, 0x11, 0x18, 0x48, 0x00, 0x08, 0x88, 0x00, // #...#$# ### -0x08, 0x11, 0x10, 0x08, 0x88, 0x88, 0x00, 0x00, // #... ##### -0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ####### -//Level: 304 -0x10, 0x0F,//Size x and y -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, // ###### -0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x08, // ######## # -0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x04, 0x08, // # $ $ $ # -0x00, 0x08, 0x08, 0x08, 0x08, 0x04, 0x88, 0x08, // # # # # $## # -0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x04, 0x08, // # $ $ # -0x00, 0x08, 0x88, 0x88, 0x88, 0x84, 0x08, 0x08, // ########$ # # -0x00, 0x88, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, // ## # # -0x00, 0x82, 0x40, 0x04, 0x00, 0x80, 0x40, 0x08, // #@$ $ # $ # -0x88, 0x88, 0x88, 0x08, 0x40, 0x84, 0x84, 0x08, //###### #$ #$#$ # -0x81, 0x11, 0x18, 0x04, 0x00, 0x80, 0x00, 0x08, //#....# $ # # -0x81, 0x51, 0x18, 0x88, 0x08, 0x80, 0x88, 0x88, //#.*..### ## #### -0x81, 0x15, 0x10, 0x40, 0x00, 0x80, 0x08, 0x00, //#..*. $ # # -0x81, 0x11, 0x14, 0x04, 0x00, 0x00, 0x08, 0x00, //#....$ $ # -0x81, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //#...########## -0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, //##### -//Level: 305 -0x07, 0x06,//Size x and y -0x88, 0x88, 0x80, 0x00, //##### -0x80, 0x00, 0x88, 0x80, //# ### -0x81, 0x14, 0x41, 0x80, //#..$$.# -0x80, 0x44, 0x20, 0x80, //# $$@ # -0x88, 0x00, 0x18, 0x80, //## .## -0x08, 0x88, 0x88, 0x00, // ##### -//Level: 306 -0x08, 0x06,//Size x and y -0x88, 0x88, 0x88, 0x00, //###### -0x80, 0x10, 0x08, 0x00, //# . # -0x80, 0x18, 0x08, 0x88, //# .# ### -0x80, 0x24, 0x40, 0x08, //# @$$ # -0x80, 0x41, 0x00, 0x08, //# $. # -0x88, 0x88, 0x88, 0x88, //######## -//Level: 307 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x00, //###### -0x80, 0x00, 0x28, 0x00, //# @# -0x80, 0x44, 0x88, 0x88, //# $$#### -0x80, 0x40, 0x10, 0x08, //# $ . # -0x88, 0x08, 0x18, 0x08, //## #.# # -0x81, 0x00, 0x08, 0x08, //#. # # -0x80, 0x00, 0x00, 0x08, //# # -0x88, 0x88, 0x88, 0x88, //######## -//Level: 308 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x80, 0x00, 0x88, //### ## -0x88, 0x80, 0x81, 0x88, //### #.## -0x88, 0x80, 0x01, 0x88, //### .## -0x82, 0x04, 0x40, 0x88, //#@ $$ ## -0x80, 0x01, 0x40, 0x88, //# .$ ## -0x88, 0x88, 0x88, 0x88, //######## -//Level: 309 -0x08, 0x06,//Size x and y -0x08, 0x88, 0x80, 0x00, // #### -0x88, 0x00, 0x88, 0x80, //## ### -0x80, 0x00, 0x00, 0x88, //# ## -0x80, 0x08, 0x44, 0x28, //# #$$@# -0x80, 0x01, 0x05, 0x18, //# . *.# -0x88, 0x88, 0x88, 0x88, //######## -//Level: 310 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x00, 0x88, 0x88, //## #### -0x81, 0x14, 0x00, 0x18, //#..$ .# -0x80, 0x84, 0x04, 0x08, //# #$ $ # -0x82, 0x00, 0x80, 0x08, //#@ # # -0x88, 0x88, 0x80, 0x08, //##### # -0x88, 0x88, 0x88, 0x88, //######## -//Level: 311 -0x11, 0x0D,//Size x and y -0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ##### -0x00, 0x00, 0x08, 0x20, 0x08, 0x88, 0x88, 0x88, 0x00, // #@ ####### -0x00, 0x08, 0x88, 0x80, 0x40, 0x04, 0x00, 0x08, 0x00, // #### $ $ # -0x08, 0x88, 0x00, 0x04, 0x40, 0x40, 0x40, 0x08, 0x00, // ### $$ $ $ # -0x08, 0x00, 0x08, 0x00, 0x48, 0x08, 0x88, 0x88, 0x00, // # # $# ##### -0x08, 0x48, 0x88, 0x80, 0x04, 0x00, 0x04, 0x08, 0x00, // #$#### $ $ # -0x08, 0x04, 0x00, 0x40, 0x04, 0x00, 0x04, 0x08, 0x00, // # $ $ $ $ # -0x08, 0x00, 0x40, 0x08, 0x88, 0x48, 0x88, 0x08, 0x80, // # $ ###$### ## -0x88, 0x00, 0x88, 0x08, 0x11, 0x11, 0x18, 0x00, 0x80, //## ## #.....# # -0x80, 0x04, 0x04, 0x08, 0x11, 0x11, 0x10, 0x00, 0x80, //# $ $ #..... # -0x80, 0x40, 0x00, 0x40, 0x11, 0x11, 0x18, 0x88, 0x80, //# $ $ .....#### -0x88, 0x88, 0x88, 0x88, 0x11, 0x11, 0x18, 0x00, 0x00, //########.....# -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, // ####### -//Level: 312 -0x12, 0x0E,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //######## -0x81, 0x11, 0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, //#... ######## -0x81, 0x11, 0x10, 0x00, 0x00, 0x40, 0x00, 0x88, 0x00, //#.... $ ## -0x81, 0x11, 0x11, 0x88, 0x04, 0x08, 0x40, 0x08, 0x00, //#.....## $ #$ # -0x81, 0x11, 0x11, 0x80, 0x08, 0x00, 0x40, 0x08, 0x00, //#.....# # $ # -0x88, 0x88, 0x88, 0x84, 0x08, 0x80, 0x04, 0x08, 0x88, //#######$ ## $ ### -0x08, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x40, 0x08, // # ### $ # -0x08, 0x00, 0x40, 0x80, 0x40, 0x08, 0x00, 0x40, 0x08, // # $ # $ # $ # -0x08, 0x00, 0x88, 0x80, 0x88, 0x00, 0x80, 0x88, 0x88, // # ### ## # #### -0x08, 0x00, 0x80, 0x04, 0x00, 0x40, 0x80, 0x00, 0x80, // # # $ $ # # -0x08, 0x88, 0x80, 0x84, 0x80, 0x08, 0x84, 0x00, 0x80, // #### #$# ##$ # -0x00, 0x82, 0x40, 0x00, 0x04, 0x00, 0x04, 0x00, 0x80, // #@$ $ $ # -0x00, 0x88, 0x88, 0x80, 0x00, 0x88, 0x88, 0x88, 0x80, // ##### ####### -0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ##### -//Level: 313 -0x0B, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //####### -0x82, 0x00, 0x00, 0x88, 0x88, 0x80, //#@ ##### -0x80, 0x40, 0x15, 0x10, 0x40, 0x80, //# $ .*. $ # -0x80, 0x41, 0x50, 0x51, 0x40, 0x80, //# $.* *.$ # -0x80, 0x40, 0x15, 0x10, 0x40, 0x80, //# $ .*. $ # -0x88, 0x88, 0x88, 0x00, 0x00, 0x80, //###### # -0x00, 0x00, 0x08, 0x88, 0x88, 0x80, // ###### -//Level: 314 -0x09, 0x08,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x00, // ##### -0x00, 0x08, 0x02, 0x08, 0x00, // # @ # -0x00, 0x08, 0x44, 0x48, 0x00, // #$$$# -0x88, 0x88, 0x00, 0x08, 0x00, //#### # -0x80, 0x00, 0x18, 0x48, 0x80, //# .#$## -0x80, 0x41, 0x41, 0x01, 0x80, //# $.$. .# -0x80, 0x08, 0x18, 0x18, 0x80, //# #.#.## -0x88, 0x88, 0x88, 0x88, 0x00, //######## -//Level: 315 -0x09, 0x09,//Size x and y -0x00, 0x88, 0x88, 0x80, 0x00, // ##### -0x00, 0x80, 0x00, 0x80, 0x00, // # # -0x88, 0x80, 0x84, 0x80, 0x00, //### #$# -0x80, 0x01, 0x41, 0x88, 0x80, //# .$.### -0x80, 0x84, 0x34, 0x00, 0x80, //# #$+$ # -0x80, 0x01, 0x40, 0x80, 0x80, //# .$ # # -0x88, 0x80, 0x81, 0x00, 0x80, //### #. # -0x00, 0x80, 0x00, 0x88, 0x80, // # ### -0x00, 0x88, 0x88, 0x80, 0x00, // ##### -//Level: 316 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x80, 0x00, 0x00, 0x08, //# # -0x80, 0x80, 0x88, 0x58, //# # ##*# -0x80, 0x82, 0x04, 0x08, //# #@ $ # -0x81, 0x40, 0x10, 0x08, //#.$ . # -0x88, 0x88, 0x80, 0x08, //##### # -0x00, 0x00, 0x80, 0x08, // # # -0x00, 0x00, 0x88, 0x88, // #### -//Level: 317 -0x08, 0x07,//Size x and y -0x00, 0x08, 0x88, 0x88, // ##### -0x88, 0x88, 0x10, 0x28, //####. @# -0x80, 0x01, 0x40, 0x08, //# .$ # -0x80, 0x80, 0x08, 0x88, //# # ### -0x80, 0x40, 0x40, 0x18, //# $ $ .# -0x88, 0x88, 0x00, 0x08, //#### # -0x00, 0x08, 0x88, 0x88, // ##### -//Level: 318 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x08, 0x00, 0x08, 0x28, //# # # # #@# -0x80, 0x00, 0x40, 0x04, 0x00, 0x00, 0x08, 0x04, 0x08, 0x08, //# $ $ # $ # # -0x88, 0x48, 0x04, 0x88, 0x80, 0x80, 0x00, 0x04, 0x48, 0x08, //##$# $### # $$# # -0x80, 0x08, 0x00, 0x81, 0x88, 0x80, 0x08, 0x40, 0x40, 0x08, //# # #.### #$ $ # -0x80, 0x08, 0x48, 0x11, 0x11, 0x80, 0x08, 0x08, 0x88, 0x08, //# #$#....# # ### # -0x80, 0x40, 0x08, 0x11, 0x11, 0x18, 0x80, 0x00, 0x08, 0x08, //# $ #.....## # # -0x88, 0x40, 0x08, 0x18, 0x11, 0x11, 0x84, 0x40, 0x40, 0x08, //##$ #.#....#$$ $ # -0x80, 0x08, 0x88, 0x88, 0x81, 0x18, 0x80, 0x80, 0x08, 0x08, //# ######..## # # # -0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x88, 0x08, //# $ $ ### # -0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x08, //# # # # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 319 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x10, 0x08, 0x88, //##. ### -0x88, 0x08, 0x08, 0x88, //## # ### -0x88, 0x05, 0x40, 0x08, //## *$ # -0x88, 0x00, 0x41, 0x08, //## $. # -0x88, 0x00, 0x28, 0x88, //## @### -0x88, 0x88, 0x88, 0x88, //######## -//Level: 320 -0x08, 0x08,//Size x and y -0x00, 0x08, 0x88, 0x80, // #### -0x00, 0x88, 0x20, 0x88, // ##@ ## -0x08, 0x80, 0x01, 0x18, // ## ..# -0x88, 0x04, 0x84, 0x88, //## $#$## -0x80, 0x00, 0x41, 0x08, //# $. # -0x80, 0x08, 0x00, 0x08, //# # # -0x80, 0x00, 0x08, 0x88, //# ### -0x88, 0x88, 0x88, 0x00, //###### -//Level: 321 -0x13, 0x10,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //############### -0x81, 0x11, 0x11, 0x11, 0x11, 0x10, 0x01, 0x88, 0x88, 0x00, //#.......... .#### -0x81, 0x11, 0x11, 0x11, 0x11, 0x14, 0x41, 0x80, 0x08, 0x00, //#..........$$.# # -0x88, 0x88, 0x88, 0x88, 0x88, 0x84, 0x08, 0x00, 0x08, 0x80, //###########$ # ## -0x80, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x40, 0x80, //# $ $ $ # -0x88, 0x08, 0x88, 0x80, 0x00, 0x80, 0x04, 0x08, 0x00, 0x80, //## #### # $ # # -0x80, 0x00, 0x00, 0x08, 0x00, 0x08, 0x80, 0x08, 0x08, 0x80, //# # ## # ## -0x80, 0x04, 0x80, 0x08, 0x08, 0x80, 0x08, 0x88, 0x08, 0x80, //# $# # ## ### ## -0x80, 0x40, 0x84, 0x88, 0x80, 0x00, 0x08, 0x88, 0x08, 0x80, //# $ #$### ### ## -0x88, 0x80, 0x04, 0x08, 0x00, 0x80, 0x08, 0x88, 0x08, 0x80, //### $ # # ### ## -0x88, 0x80, 0x00, 0x04, 0x08, 0x80, 0x80, 0x08, 0x08, 0x80, //### $ ## # # ## -0x08, 0x04, 0x00, 0x80, 0x04, 0x00, 0x40, 0x40, 0x00, 0x80, // # $ # $ $ $ # -0x08, 0x00, 0x40, 0x04, 0x84, 0x44, 0x00, 0x80, 0x00, 0x80, // # $ $#$$$ # # -0x08, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // # # $ ##### -0x08, 0x02, 0x88, 0x00, 0x80, 0x08, 0x00, 0x80, 0x00, 0x00, // # @## # # # -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ############## -//Level: 322 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x80, 0x00, //##### -0x80, 0x01, 0x88, 0x80, //# .### -0x80, 0x41, 0x10, 0x80, //# $.. # -0x80, 0x08, 0x84, 0x88, //# ##$## -0x88, 0x00, 0x80, 0x08, //## # # -0x08, 0x40, 0x00, 0x28, // #$ @# -0x08, 0x00, 0x88, 0x88, // # #### -0x08, 0x88, 0x80, 0x00, // #### -//Level: 323 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x08, 0x00, 0x80, 0x08, //#....# # # # -0x81, 0x11, 0x18, 0x08, 0x04, 0x00, 0x40, 0x00, 0x00, 0x08, //#....# # $ $ # -0x81, 0x11, 0x10, 0x88, 0x00, 0x48, 0x08, 0x04, 0x84, 0x08, //#.... ## $# # $#$ # -0x81, 0x11, 0x80, 0x00, 0x40, 0x00, 0x48, 0x00, 0x40, 0x08, //#...# $ $# $ # -0x81, 0x18, 0x88, 0x80, 0x08, 0x04, 0x00, 0x04, 0x40, 0x08, //#..#### # $ $$ # -0x80, 0x00, 0x00, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, //# #### #### ### -0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x08, //# # # # -0x80, 0x88, 0x00, 0x08, 0x00, 0x04, 0x08, 0x04, 0x04, 0x08, //# ## # $ # $ $ # -0x80, 0x88, 0x00, 0x00, 0x40, 0x88, 0x04, 0x00, 0x40, 0x08, //# ## $ ## $ $ # -0x80, 0x00, 0x00, 0x28, 0x00, 0x00, 0x08, 0x00, 0x08, 0x08, //# @# # # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 324 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x28, 0x11, 0x18, 0x88, //# # @#...### -0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x81, 0x11, 0x88, //# # ##...## -0x80, 0x80, 0x80, 0x88, 0x48, 0x80, 0x88, 0x01, 0x11, 0x18, //# # # ##$## ## ....# -0x80, 0x00, 0x40, 0x80, 0x00, 0x44, 0x40, 0x01, 0x11, 0x18, //# $ # $$$ ....# -0x88, 0x84, 0x88, 0x80, 0x44, 0x00, 0x88, 0x80, 0x88, 0x18, //###$### $$ ### ##.# -0x80, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00, 0x80, 0x88, 0x88, //# $ # # #### -0x80, 0x04, 0x00, 0x80, 0x08, 0x88, 0x00, 0x80, 0x80, 0x08, //# $ # ### # # # -0x88, 0x08, 0x48, 0x80, 0x00, 0x04, 0x00, 0x44, 0x00, 0x08, //## #$## $ $$ # -0x80, 0x00, 0x40, 0x88, 0x00, 0x08, 0x00, 0x80, 0x80, 0x08, //# $ ## # # # # -0x80, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x80, 0x00, 0x08, //# # # # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 325 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x88, 0x88, 0x82, 0x88, 0x81, 0x88, 0x11, 0x18, 0x80, 0x08, //#####@###.##...## # -0x88, 0x88, 0x84, 0x00, 0x11, 0x81, 0x11, 0x80, 0x00, 0x08, //#####$ ..#...# # -0x88, 0x88, 0x00, 0x00, 0x11, 0x11, 0x11, 0x80, 0x04, 0x08, //#### ......# $ # -0x88, 0x80, 0x04, 0x08, 0x11, 0x11, 0x18, 0x80, 0x80, 0x88, //### $ #.....## # ## -0x88, 0x00, 0x44, 0x80, 0x88, 0x88, 0x80, 0x04, 0x04, 0x08, //## $$# ##### $ $ # -0x88, 0x04, 0x80, 0x40, 0x00, 0x08, 0x80, 0x04, 0x40, 0x08, //## $# $ ## $$ # -0x88, 0x00, 0x80, 0x08, 0x00, 0x00, 0x80, 0x40, 0x04, 0x08, //## # # # $ $ # -0x88, 0x00, 0x04, 0x40, 0x88, 0x80, 0x84, 0x88, 0x00, 0x08, //## $$ ### #$## # -0x88, 0x04, 0x80, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x88, //## $# $ $ $ ## -0x88, 0x80, 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x08, 0x88, //### # # ### -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 326 -0x0B, 0x0B,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //########### -0x80, 0x41, 0x04, 0x01, 0x00, 0x80, //# $. $ . # -0x80, 0x08, 0x00, 0x41, 0x00, 0x80, //# # $. # -0x81, 0x15, 0x11, 0x85, 0x81, 0x80, //#..*..#*#.# -0x84, 0x48, 0x44, 0x41, 0x04, 0x80, //#$$#$$$. $# -0x80, 0x01, 0x42, 0x41, 0x00, 0x80, //# .$@$. # -0x84, 0x01, 0x44, 0x48, 0x44, 0x80, //#$ .$$$#$$# -0x81, 0x85, 0x81, 0x15, 0x11, 0x80, //#.#*#..*..# -0x80, 0x01, 0x40, 0x08, 0x00, 0x80, //# .$ # # -0x80, 0x01, 0x40, 0x41, 0x00, 0x80, //# .$ $. # -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //########### -//Level: 327 -0x12, 0x10,//Size x and y -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, // ####### -0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x08, 0x00, 0x00, // ####### # -0x08, 0x00, 0x00, 0x08, 0x04, 0x24, 0x08, 0x00, 0x00, // # # $@$ # -0x08, 0x44, 0x08, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // #$$ # ######### -0x08, 0x08, 0x88, 0x11, 0x11, 0x11, 0x88, 0x00, 0x08, // # ###......## # -0x08, 0x00, 0x04, 0x11, 0x11, 0x11, 0x88, 0x08, 0x08, // # $......## # # -0x08, 0x08, 0x88, 0x11, 0x11, 0x11, 0x00, 0x00, 0x08, // # ###...... # -0x88, 0x00, 0x08, 0x88, 0x80, 0x88, 0x80, 0x84, 0x88, //## #### ### #$## -0x80, 0x08, 0x40, 0x00, 0x80, 0x04, 0x00, 0x80, 0x80, //# #$ # $ # # -0x80, 0x04, 0x04, 0x44, 0x00, 0x80, 0x48, 0x80, 0x80, //# $ $$$ # $## # -0x80, 0x00, 0x40, 0x40, 0x88, 0x84, 0x40, 0x80, 0x80, //# $ $ ###$$ # # -0x88, 0x88, 0x80, 0x00, 0x00, 0x40, 0x00, 0x80, 0x80, //##### $ # # -0x00, 0x00, 0x88, 0x80, 0x88, 0x80, 0x00, 0x80, 0x80, // ### ### # # -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, // # # # -0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x80, // ######## # -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, // #### -//Level: 328 -0x09, 0x07,//Size x and y -0x08, 0x88, 0x88, 0x00, 0x00, // ##### -0x08, 0x00, 0x08, 0x88, 0x80, // # #### -0x88, 0x08, 0x42, 0x00, 0x80, //## #$@ # -0x80, 0x40, 0x04, 0x40, 0x80, //# $ $$ # -0x80, 0x84, 0x81, 0x51, 0x80, //# #$#.*.# -0x80, 0x00, 0x01, 0x11, 0x80, //# ...# -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 329 -0x08, 0x06,//Size x and y -0x00, 0x88, 0x88, 0x00, // #### -0x88, 0x81, 0x08, 0x00, //###. # -0x80, 0x10, 0x08, 0x88, //# . ### -0x80, 0x00, 0x44, 0x08, //# $$ # -0x88, 0x01, 0x04, 0x28, //## . $@# -0x08, 0x88, 0x88, 0x88, // ####### -//Level: 330 -0x08, 0x07,//Size x and y -0x08, 0x88, 0x88, 0x88, // ####### -0x88, 0x20, 0x00, 0x08, //##@ # -0x81, 0x08, 0x00, 0x08, //#. # # -0x80, 0x44, 0x41, 0x88, //# $$$.## -0x80, 0x18, 0x00, 0x80, //# .# # -0x80, 0x08, 0x88, 0x80, //# #### -0x88, 0x88, 0x00, 0x00, //#### -//Level: 331 -0x09, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, //######### -0x80, 0x00, 0x20, 0x00, 0x80, //# @ # -0x84, 0x44, 0x44, 0x44, 0x80, //#$$$$$$$# -0x81, 0x11, 0x81, 0x11, 0x80, //#...#...# -0x81, 0x11, 0x11, 0x11, 0x80, //#.......# -0x84, 0x44, 0x04, 0x44, 0x80, //#$$$ $$$# -0x80, 0x00, 0x00, 0x00, 0x80, //# # -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 332 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x00, 0x08, 0x88, //## ### -0x80, 0x48, 0x08, 0x88, //# $# ### -0x80, 0x10, 0x28, 0x88, //# . @### -0x80, 0x50, 0x00, 0x88, //# * ## -0x88, 0x08, 0x40, 0x88, //## #$ ## -0x88, 0x10, 0x08, 0x88, //##. ### -0x88, 0x88, 0x88, 0x88, //######## -//Level: 333 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x80, 0x80, 0x80, 0x00, 0x82, 0x88, 0x00, 0x08, 0x08, //# # # # #@## # # -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, //# $ # -0x80, 0x08, 0x84, 0x80, 0x88, 0x88, 0x80, 0x40, 0x80, 0x88, //# ##$# ##### $ # ## -0x88, 0x00, 0x00, 0x88, 0x11, 0x11, 0x18, 0x00, 0x80, 0x08, //## ##.....# # # -0x88, 0x48, 0x84, 0x81, 0x11, 0x11, 0x88, 0x84, 0x84, 0x08, //##$##$#.....###$#$ # -0x80, 0x00, 0x80, 0x88, 0x11, 0x11, 0x18, 0x00, 0x80, 0x88, //# # ##.....# # ## -0x80, 0x04, 0x00, 0x00, 0x88, 0x11, 0x88, 0x00, 0x80, 0x08, //# $ ##..## # # -0x80, 0x40, 0x80, 0x00, 0x40, 0x00, 0x40, 0x04, 0x44, 0x08, //# $ # $ $ $$$ # -0x88, 0x04, 0x00, 0x48, 0x08, 0x00, 0x80, 0x04, 0x00, 0x08, //## $ $# # # $ # -0x80, 0x00, 0x88, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x08, //# ## # # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 334 -0x12, 0x0F,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //################## -0x81, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, //#..# # -0x81, 0x18, 0x00, 0x80, 0x40, 0x40, 0x40, 0x88, 0x08, //#..# # $ $ $ ## # -0x81, 0x18, 0x08, 0x88, 0x08, 0x08, 0x00, 0x80, 0x08, //#..# ### # # # # -0x81, 0x18, 0x08, 0x04, 0x48, 0x88, 0x48, 0x84, 0x08, //#..# # $$###$##$ # -0x81, 0x18, 0x00, 0x00, 0x00, 0x04, 0x24, 0x04, 0x08, //#..# $@$ $ # -0x81, 0x10, 0x04, 0x80, 0x40, 0x80, 0x44, 0x08, 0x08, //#.. $# $ # $$ # # -0x80, 0x08, 0x00, 0x80, 0x08, 0x88, 0x00, 0x08, 0x08, //# # # ### # # -0x80, 0x00, 0x08, 0x88, 0x00, 0x80, 0x08, 0x88, 0x08, //# ### # ### # -0x81, 0x18, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x08, //#..# $ $ # -0x81, 0x18, 0x08, 0x84, 0x00, 0x80, 0x08, 0x04, 0x08, //#..# ##$ # # $ # -0x81, 0x18, 0x00, 0x80, 0x08, 0x88, 0x08, 0x80, 0x08, //#..# # ### ## # -0x81, 0x18, 0x00, 0x88, 0x44, 0x08, 0x48, 0x84, 0x08, //#..# ##$$ #$##$ # -0x81, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, //#..# # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //################## -//Level: 335 -0x13, 0x10,//Size x and y -0x08, 0x88, 0x88, 0x80, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // ###### #### -0x08, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x80, 0x00, 0x00, // # ###### # -0x08, 0x28, 0x04, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, // #@# $ ## -0x88, 0x88, 0x84, 0x04, 0x08, 0x88, 0x80, 0x08, 0x80, 0x00, //#####$ $ #### ## -0x80, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x88, 0x00, //# $ # ## -0x80, 0x04, 0x40, 0x80, 0x88, 0x48, 0x88, 0x44, 0x08, 0x00, //# $$ # ##$###$$ # -0x80, 0x00, 0x00, 0x45, 0x15, 0x11, 0x80, 0x00, 0x08, 0x00, //# $*.*..# # -0x88, 0x88, 0x88, 0x81, 0x11, 0x15, 0x80, 0x40, 0x08, 0x00, //#######....*# $ # -0x00, 0x00, 0x00, 0x85, 0x11, 0x51, 0x80, 0x84, 0x88, 0x00, // #*..*.# #$## -0x00, 0x00, 0x00, 0x81, 0x11, 0x15, 0x04, 0x00, 0x08, 0x00, // #....* $ # -0x00, 0x00, 0x00, 0x81, 0x11, 0x11, 0x80, 0x44, 0x48, 0x00, // #.....# $$$# -0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x80, 0x80, 0x08, 0x80, // ##### # # ## -0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x80, // # # $ $ # -0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x80, // # $ # -0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x88, 0x00, 0x80, // # ### # -0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x08, 0x88, 0x80, // #### #### -//Level: 336 -0x09, 0x08,//Size x and y -0x00, 0x08, 0x88, 0x88, 0x00, // ##### -0x88, 0x88, 0x10, 0x08, 0x80, //####. ## -0x80, 0x41, 0x41, 0x00, 0x80, //# $.$. # -0x82, 0x48, 0x08, 0x40, 0x80, //#@$# #$ # -0x80, 0x41, 0x01, 0x00, 0x80, //# $. . # -0x88, 0x88, 0x48, 0x40, 0x80, //####$#$ # -0x00, 0x81, 0x01, 0x00, 0x80, // #. . # -0x00, 0x88, 0x88, 0x88, 0x80, // ####### -//Level: 337 -0x07, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x80, //####### -0x80, 0x00, 0x00, 0x80, //# # -0x81, 0x88, 0x01, 0x80, //#.## .# -0x85, 0x00, 0x42, 0x80, //#* $@# -0x80, 0x08, 0x40, 0x80, //# #$ # -0x80, 0x08, 0x00, 0x80, //# # # -0x88, 0x88, 0x88, 0x80, //####### -//Level: 338 -0x13, 0x10,//Size x and y -0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#### -0x80, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, //# ############## -0x80, 0x08, 0x00, 0x01, 0x18, 0x11, 0x11, 0x11, 0x80, 0x00, //# # ..#......# -0x80, 0x08, 0x08, 0x08, 0x88, 0x88, 0x01, 0x11, 0x80, 0x00, //# # # ##### ...# -0x88, 0x48, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x80, 0x00, //##$# ........# -0x80, 0x00, 0x88, 0x48, 0x88, 0x88, 0x80, 0x08, 0x88, 0x80, //# ##$###### #### -0x80, 0x40, 0x80, 0x00, 0x00, 0x88, 0x88, 0x88, 0x20, 0x80, //# $ # ######@ # -0x88, 0x40, 0x80, 0x40, 0x00, 0x88, 0x88, 0x88, 0x00, 0x80, //##$ # $ ###### # -0x80, 0x04, 0x08, 0x44, 0x48, 0x80, 0x00, 0x00, 0x00, 0x80, //# $ #$$$## # -0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x84, 0x84, 0x88, 0x80, //# # #$#$### -0x80, 0x88, 0x88, 0x08, 0x44, 0x44, 0x40, 0x00, 0x08, 0x00, //# #### #$$$$$ # -0x80, 0x80, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, //# # $ # # -0x80, 0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, //# # ## ### -0x80, 0x88, 0x88, 0x88, 0x48, 0x88, 0x88, 0x80, 0x40, 0x80, //# ######$###### $ # -0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x80, //# # # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x80, //########## ##### -//Level: 339 -0x14, 0x10,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //############ -0x80, 0x00, 0x00, 0x08, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, //# # ## -0x80, 0x40, 0x04, 0x00, 0x08, 0x00, 0x88, 0x88, 0x88, 0x00, //# $ $ # ###### -0x88, 0x88, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x08, 0x00, //#### ##### # -0x08, 0x11, 0x00, 0x80, 0x00, 0x00, 0x88, 0x88, 0x08, 0x00, // #.. # #### # -0x08, 0x18, 0x88, 0x80, 0x08, 0x88, 0x80, 0x00, 0x08, 0x00, // #.#### #### # -0x08, 0x11, 0x11, 0x00, 0x00, 0x80, 0x04, 0x08, 0x88, 0x80, // #.... # $ #### -0x08, 0x01, 0x11, 0x80, 0x00, 0x80, 0x44, 0x48, 0x00, 0x88, // # ...# # $$$# ## -0x88, 0x81, 0x88, 0x88, 0x08, 0x80, 0x04, 0x24, 0x00, 0x08, //###.#### ## $@$ # -0x80, 0x00, 0x00, 0x88, 0x88, 0x80, 0x40, 0x80, 0x00, 0x08, //# ##### $ # # -0x80, 0x81, 0x80, 0x40, 0x00, 0x00, 0x04, 0x88, 0x84, 0x08, //# #.# $ $###$ # -0x80, 0x81, 0x88, 0x88, 0x88, 0x88, 0x00, 0x80, 0x04, 0x08, //# #.######## # $ # -0x80, 0x81, 0x10, 0x00, 0x00, 0x00, 0x08, 0x80, 0x04, 0x08, //# #.. ## $ # -0x80, 0x80, 0x88, 0x88, 0x88, 0x80, 0x40, 0x80, 0x80, 0x08, //# # ####### $ # # # -0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x88, //# # # ## -0x88, 0x88, 0x80, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, //##### ########## -//Level: 340 -0x09, 0x09,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x00, // ####### -0x88, 0x00, 0x50, 0x08, 0x80, //## * ## -0x80, 0x12, 0x10, 0x10, 0x80, //# .@. . # -0x80, 0x40, 0x50, 0x00, 0x80, //# $ * # -0x85, 0x44, 0x54, 0x45, 0x80, //#*$$*$$*# -0x80, 0x00, 0x50, 0x40, 0x80, //# * $ # -0x80, 0x10, 0x10, 0x10, 0x80, //# . . . # -0x88, 0x00, 0x50, 0x08, 0x80, //## * ## -0x08, 0x88, 0x88, 0x88, 0x00, // ####### -//Level: 341 -0x14, 0x0C,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x00, 0x88, 0x81, 0x18, 0x88, 0x00, 0x00, 0x08, //# ###..### # -0x80, 0x44, 0x00, 0x88, 0x81, 0x18, 0x88, 0x00, 0x42, 0x08, //# $$ ###..### $@ # -0x80, 0x08, 0x08, 0x81, 0x11, 0x11, 0x18, 0x00, 0x40, 0x08, //# # ##......# $ # -0x80, 0x00, 0x00, 0x81, 0x11, 0x11, 0x18, 0x00, 0x40, 0x08, //# #......# $ # -0x88, 0x88, 0x00, 0x88, 0x81, 0x18, 0x88, 0x88, 0x84, 0x08, //#### ###..######$ # -0x80, 0x00, 0x44, 0x40, 0x81, 0x18, 0x00, 0x00, 0x80, 0x08, //# $$$ #..# # # -0x80, 0x48, 0x00, 0x04, 0x00, 0x40, 0x04, 0x40, 0x84, 0x08, //# $# $ $ $$ #$ # -0x80, 0x08, 0x00, 0x88, 0x04, 0x00, 0x88, 0x00, 0x80, 0x08, //# # ## $ ## # # -0x80, 0x40, 0x00, 0x04, 0x08, 0x80, 0x40, 0x00, 0x04, 0x08, //# $ $ ## $ $ # -0x80, 0x08, 0x00, 0x88, 0x00, 0x00, 0x88, 0x00, 0x80, 0x08, //# # ## ## # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 342 -0x07, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x00, //###### -0x80, 0x00, 0x28, 0x80, //# @## -0x80, 0x08, 0x00, 0x80, //# # # -0x81, 0x00, 0x40, 0x80, //#. $ # -0x80, 0x44, 0x81, 0x80, //# $$#.# -0x88, 0x80, 0x01, 0x80, //### .# -0x00, 0x88, 0x88, 0x80, // ##### -//Level: 343 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x88, 0x88, //######## -0x81, 0x00, 0x01, 0x08, //#. . # -0x80, 0x80, 0x80, 0x08, //# # # # -0x82, 0x40, 0x04, 0x18, //#@$ $.# -0x88, 0x88, 0x80, 0x48, //##### $# -0x88, 0x88, 0x80, 0x08, //##### # -0x88, 0x88, 0x88, 0x88, //######## -//Level: 344 -0x0E, 0x0A,//Size x and y -0x88, 0x88, 0x00, 0x00, 0x00, 0x88, 0x88, //#### #### -0x81, 0x18, 0x88, 0x88, 0x88, 0x81, 0x18, //#..########..# -0x85, 0x15, 0x11, 0x11, 0x15, 0x15, 0x18, //#*.*.....*.*.# -0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x48, //# $ $ $ $ $ $# -0x84, 0x04, 0x04, 0x24, 0x04, 0x04, 0x08, //#$ $ $@$ $ $ # -0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x48, //# $ $ $ $ $ $# -0x84, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, //#$ $ $ $ $ $ # -0x81, 0x51, 0x51, 0x11, 0x11, 0x51, 0x58, //#.*.*.....*.*# -0x81, 0x18, 0x88, 0x88, 0x88, 0x81, 0x18, //#..########..# -0x88, 0x88, 0x00, 0x00, 0x00, 0x88, 0x88, //#### #### -//Level: 345 -0x08, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x80, 0x01, 0x80, 0x28, //# .# @# -0x80, 0x80, 0x40, 0x08, //# # $ # -0x80, 0x41, 0x84, 0x08, //# $.#$ # -0x88, 0x01, 0x00, 0x08, //## . # -0x08, 0x00, 0x88, 0x88, // # #### -0x08, 0x88, 0x80, 0x00, // #### -//Level: 346 -0x13, 0x10,//Size x and y -0x08, 0x88, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ### ############# -0x88, 0x28, 0x88, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, //##@#### # # -0x80, 0x44, 0x00, 0x04, 0x40, 0x04, 0x04, 0x01, 0x11, 0x80, //# $$ $$ $ $ ...# -0x80, 0x04, 0x44, 0x80, 0x00, 0x04, 0x00, 0x81, 0x11, 0x80, //# $$$# $ #...# -0x80, 0x40, 0x00, 0x80, 0x44, 0x04, 0x40, 0x81, 0x11, 0x80, //# $ # $$ $$ #...# -0x88, 0x80, 0x00, 0x80, 0x04, 0x00, 0x00, 0x81, 0x11, 0x80, //### # $ #...# -0x80, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x81, 0x11, 0x80, //# # $ $ $ #...# -0x80, 0x00, 0x08, 0x88, 0x88, 0x80, 0x88, 0x81, 0x11, 0x80, //# ###### ###...# -0x88, 0x08, 0x00, 0x80, 0x04, 0x04, 0x00, 0x81, 0x11, 0x80, //## # # $ $ #...# -0x80, 0x08, 0x80, 0x80, 0x44, 0x04, 0x04, 0x88, 0x11, 0x80, //# ## # $$ $ $##..# -0x80, 0x11, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x81, 0x80, //# ..# # $ #.# -0x80, 0x11, 0x80, 0x80, 0x44, 0x40, 0x44, 0x40, 0x81, 0x80, //# ..# # $$$ $$$ #.# -0x88, 0x88, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x81, 0x80, //##### # # #.# -0x00, 0x00, 0x80, 0x88, 0x88, 0x88, 0x88, 0x80, 0x81, 0x80, // # ######### #.# -0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x80, // # #.# -0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ############### -//Level: 347 -0x13, 0x10,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ########## -0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, //##### #### -0x80, 0x00, 0x00, 0x80, 0x00, 0x40, 0x08, 0x20, 0x80, 0x00, //# # $ #@ # -0x80, 0x88, 0x88, 0x88, 0x84, 0x88, 0x88, 0x00, 0x88, 0x80, //# #######$#### ### -0x80, 0x80, 0x00, 0x08, 0x80, 0x80, 0x08, 0x40, 0x11, 0x80, //# # ## # #$ ..# -0x80, 0x80, 0x40, 0x00, 0x00, 0x80, 0x08, 0x00, 0x81, 0x80, //# # $ # # #.# -0x80, 0x80, 0x40, 0x08, 0x00, 0x00, 0x08, 0x40, 0x11, 0x80, //# # $ # #$ ..# -0x80, 0x80, 0x08, 0x88, 0x08, 0x80, 0x00, 0x00, 0x81, 0x80, //# # ### ## #.# -0x80, 0x88, 0x80, 0x08, 0x00, 0x80, 0x08, 0x40, 0x11, 0x80, //# ### # # #$ ..# -0x80, 0x80, 0x00, 0x08, 0x00, 0x88, 0x88, 0x00, 0x81, 0x80, //# # # #### #.# -0x80, 0x84, 0x00, 0x04, 0x00, 0x40, 0x08, 0x40, 0x11, 0x80, //# #$ $ $ #$ ..# -0x80, 0x00, 0x04, 0x08, 0x04, 0x04, 0x08, 0x00, 0x81, 0x80, //# $ # $ $ # #.# -0x88, 0x88, 0x04, 0x88, 0x80, 0x00, 0x08, 0x40, 0x11, 0x80, //#### $### #$ ..# -0x00, 0x08, 0x00, 0x00, 0x44, 0x08, 0x88, 0x11, 0x11, 0x80, // # $$ ###....# -0x00, 0x08, 0x00, 0x00, 0x00, 0x88, 0x08, 0x88, 0x88, 0x80, // # ## ###### -0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ######## -//Level: 348 -0x08, 0x08,//Size x and y -0x00, 0x08, 0x88, 0x80, // #### -0x00, 0x08, 0x00, 0x80, // # # -0x88, 0x88, 0x04, 0x88, //#### $## -0x80, 0x24, 0x10, 0x08, //# @$. # -0x80, 0x88, 0x00, 0x08, //# ## # -0x80, 0x00, 0x88, 0x08, //# ## # -0x80, 0x00, 0x50, 0x18, //# * .# -0x88, 0x88, 0x88, 0x88, //######## -//Level: 349 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x80, 0x08, 0x88, 0x88, //# ##### -0x80, 0x08, 0x88, 0x88, //# ##### -0x80, 0x15, 0x00, 0x08, //# .* # -0x88, 0x40, 0x00, 0x08, //##$ # -0x88, 0x08, 0x48, 0x88, //## #$### -0x88, 0x10, 0x28, 0x88, //##. @### -0x88, 0x88, 0x88, 0x88, //######## -//Level: 350 -0x09, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, //######### -0x82, 0x00, 0x40, 0x10, 0x80, //#@ $ . # -0x80, 0x40, 0x41, 0x40, 0x80, //# $ $.$ # -0x81, 0x51, 0x51, 0x51, 0x80, //#.*.*.*.# -0x80, 0x41, 0x40, 0x40, 0x80, //# $.$ $ # -0x80, 0x10, 0x40, 0x00, 0x80, //# . $ # -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 351 -0x07, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x80, //####### -0x81, 0x01, 0x01, 0x80, //#. . .# -0x80, 0x44, 0x40, 0x80, //# $$$ # -0x81, 0x42, 0x41, 0x80, //#.$@$.# -0x80, 0x44, 0x40, 0x80, //# $$$ # -0x81, 0x01, 0x01, 0x80, //#. . .# -0x88, 0x88, 0x88, 0x80, //####### -//Level: 352 -0x09, 0x07,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x80, //######### -0x82, 0x01, 0x00, 0x00, 0x80, //#@ . # -0x80, 0x44, 0x14, 0x40, 0x80, //# $$.$$ # -0x81, 0x51, 0x11, 0x51, 0x80, //#.*...*.# -0x80, 0x44, 0x14, 0x40, 0x80, //# $$.$$ # -0x80, 0x41, 0x00, 0x00, 0x80, //# $. # -0x88, 0x88, 0x88, 0x88, 0x80, //######### -//Level: 353 -0x14, 0x0F,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x80, 0x00, 0x08, 0x80, 0x00, 0x80, 0x00, 0x08, 0x00, 0x08, //# ## # # # -0x80, 0x04, 0x00, 0x40, 0x00, 0x00, 0x88, 0x04, 0x00, 0x08, //# $ $ ## $ # -0x88, 0x08, 0x88, 0x88, 0x00, 0x18, 0x88, 0x88, 0x80, 0x88, //## ##### .###### ## -0x08, 0x08, 0x80, 0x08, 0x81, 0x11, 0x18, 0x88, 0x80, 0x88, // # ## ##....#### ## -0x88, 0x08, 0x84, 0x08, 0x88, 0x11, 0x88, 0x00, 0x00, 0x08, //## ##$ ###..## # -0x80, 0x00, 0x00, 0x08, 0x11, 0x10, 0x18, 0x04, 0x04, 0x08, //# #... .# $ $ # -0x80, 0x40, 0x88, 0x08, 0x80, 0x10, 0x88, 0x80, 0x88, 0x88, //# $ ## ## . ### #### -0x80, 0x80, 0x40, 0x00, 0x08, 0x18, 0x80, 0x80, 0x80, 0x00, //# # $ #.## # # -0x80, 0x40, 0x40, 0x80, 0x00, 0x18, 0x88, 0x80, 0x88, 0x00, //# $ $ # .#### ## -0x80, 0x80, 0x08, 0x80, 0x80, 0x88, 0x00, 0x80, 0x08, 0x80, //# # ## # ## # ## -0x88, 0x88, 0x88, 0x80, 0x04, 0x88, 0x40, 0x00, 0x40, 0x80, //####### $##$ $ # -0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x40, 0x82, 0x80, // ## $ #@# -0x00, 0x00, 0x00, 0x08, 0x00, 0x88, 0x08, 0x88, 0x88, 0x80, // # ## ###### -0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ####### -//Level: 354 -0x0D, 0x10,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // ######### -0x00, 0x85, 0x15, 0x85, 0x15, 0x80, 0x00, // #*.*#*.*# -0x00, 0x81, 0x51, 0x51, 0x51, 0x80, 0x00, // #.*.*.*.# -0x00, 0x85, 0x15, 0x15, 0x15, 0x80, 0x00, // #*.*.*.*# -0x00, 0x81, 0x51, 0x51, 0x51, 0x80, 0x00, // #.*.*.*.# -0x00, 0x85, 0x15, 0x15, 0x15, 0x80, 0x00, // #*.*.*.*# -0x00, 0x88, 0x80, 0x00, 0x88, 0x80, 0x00, // ### ### -0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, // # # -0x88, 0x88, 0x88, 0x08, 0x88, 0x88, 0x80, //###### ###### -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# # -0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, //# $ $ $ $ $ # -0x88, 0x04, 0x04, 0x04, 0x04, 0x08, 0x80, //## $ $ $ $ ## -0x08, 0x40, 0x40, 0x40, 0x40, 0x48, 0x00, // #$ $ $ $ $# -0x08, 0x00, 0x04, 0x24, 0x00, 0x08, 0x00, // # $@$ # -0x08, 0x00, 0x88, 0x88, 0x80, 0x08, 0x00, // # ##### # -0x08, 0x88, 0x80, 0x00, 0x88, 0x88, 0x00, // #### #### -//Level: 355 -0x05, 0x08,//Size x and y -0x88, 0x88, 0x00, //#### -0x80, 0x28, 0x00, //# @# -0x80, 0x48, 0x80, //# $## -0x80, 0x41, 0x80, //# $.# -0x80, 0x41, 0x80, //# $.# -0x80, 0x41, 0x80, //# $.# -0x88, 0x81, 0x80, //###.# -0x00, 0x88, 0x80, // ### -//Level: 356 -0x0D, 0x0A,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, //########### -0x82, 0x40, 0x00, 0x11, 0x11, 0x88, 0x00, //#@$ ....## -0x80, 0x44, 0x44, 0x81, 0x11, 0x18, 0x00, //# $$$$#....# -0x80, 0x40, 0x04, 0x11, 0x55, 0x58, 0x80, //# $ $..***## -0x88, 0x00, 0x08, 0x08, 0x81, 0x10, 0x80, //## # ##.. # -0x80, 0x44, 0x48, 0x00, 0x88, 0x00, 0x80, //# $$$# ## # -0x80, 0x00, 0x08, 0x80, 0x80, 0x08, 0x80, //# ## # ## -0x80, 0x04, 0x40, 0x80, 0x00, 0x08, 0x00, //# $$ # # -0x80, 0x00, 0x00, 0x88, 0x80, 0x08, 0x00, //# ### # -0x88, 0x88, 0x88, 0x80, 0x88, 0x88, 0x00, //####### #### -//Level: 357 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x81, 0x01, 0x88, 0x88, //#. .#### -0x81, 0x84, 0x40, 0x88, //#.#$$ ## -0x80, 0x00, 0x20, 0x88, //# @ ## -0x80, 0x48, 0x00, 0x88, //# $# ## -0x88, 0x00, 0x08, 0x88, //## ### -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x88, 0x88, //######## -//Level: 358 -0x13, 0x13,//Size x and y -0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, // # # # # # # # # # -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, //# # # # # # # #.# # -0x08, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x04, 0x18, 0x00, // #... $.# -0x80, 0x04, 0x84, 0x00, 0x80, 0x80, 0x80, 0x40, 0x00, 0x80, //# $#$ # # # $ # -0x08, 0x10, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x18, 0x00, // #. $ # # # # $.# -0x80, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, //# # $ # # # -0x08, 0x00, 0x08, 0x00, 0x88, 0x88, 0x80, 0x08, 0x08, 0x00, // # # ##### # # -0x80, 0x00, 0x80, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x80, //# # # # # # -0x08, 0x08, 0x00, 0x80, 0x08, 0x88, 0x08, 0x08, 0x08, 0x00, // # # # ### # # # -0x80, 0x01, 0x40, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, //# .$ . # # -0x08, 0x08, 0x40, 0x80, 0x80, 0x08, 0x08, 0x08, 0x08, 0x00, // # #$ # # # # # # -0x80, 0x08, 0x00, 0x80, 0x08, 0x48, 0x08, 0x08, 0x00, 0x80, //# # # #$# # # # -0x08, 0x01, 0x80, 0x08, 0x00, 0x08, 0x08, 0x08, 0x28, 0x00, // # .# # # # #@# -0x80, 0x00, 0x08, 0x00, 0x88, 0x80, 0x48, 0x08, 0x00, 0x80, //# # ### $# # # -0x08, 0x04, 0x40, 0x80, 0x00, 0x00, 0x41, 0x18, 0x48, 0x00, // # $$ # $..#$# -0x80, 0x81, 0x00, 0x08, 0x88, 0x88, 0x84, 0x88, 0x10, 0x80, //# #. ######$##. # -0x08, 0x08, 0x14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, // # #.$ . .# -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //# # # # # # # # # # -0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, // # # # # # # # # # -//Level: 359 -0x14, 0x11,//Size x and y -0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ################## -0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x11, 0x81, 0x88, // # $ ...#.## -0x08, 0x00, 0x00, 0x00, 0x08, 0x88, 0x81, 0x11, 0x11, 0x08, // # ####..... # -0x08, 0x08, 0x88, 0x88, 0x88, 0x00, 0x81, 0x11, 0x11, 0x08, // # ####### #..... # -0x08, 0x08, 0x00, 0x00, 0x40, 0x40, 0x88, 0x11, 0x11, 0x88, // # # $ $ ##....## -0x08, 0x08, 0x00, 0x40, 0x80, 0x80, 0x88, 0x81, 0x11, 0x80, // # # $ # # ###...# -0x08, 0x08, 0x04, 0x24, 0x04, 0x00, 0x88, 0x88, 0x80, 0x80, // # # $@$ $ ##### # -0x88, 0x08, 0x00, 0x40, 0x04, 0x04, 0x40, 0x00, 0x40, 0x80, //## # $ $ $$ $ # -0x80, 0x08, 0x48, 0x04, 0x80, 0x00, 0x80, 0x48, 0x80, 0x80, //# #$# $# # $## # -0x80, 0x88, 0x00, 0x00, 0x88, 0x08, 0x80, 0x40, 0x80, 0x80, //# ## ## ## $ # # -0x80, 0x80, 0x48, 0x04, 0x04, 0x00, 0x80, 0x00, 0x00, 0x80, //# # $# $ $ # # -0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, //# # ####### -0x80, 0x88, 0x88, 0x88, 0x88, 0x48, 0x80, 0x00, 0x80, 0x00, //# ########$## # -0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, 0x80, 0x00, //# # $ # -0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, //######## ##### -0x00, 0x00, 0x00, 0x08, 0x88, 0x00, 0x80, 0x00, 0x00, 0x00, // ### # -0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, // #### -//Level: 360 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x81, 0x00, 0x88, 0x88, //#. #### -0x80, 0x80, 0x00, 0x88, //# # ## -0x80, 0x10, 0x80, 0x88, //# . # ## -0x80, 0x45, 0x40, 0x88, //# $*$ ## -0x88, 0x20, 0x88, 0x88, //##@ #### -0x88, 0x00, 0x88, 0x88, //## #### -0x88, 0x88, 0x88, 0x88, //######## -//Level: 361 -0x13, 0x11,//Size x and y -0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ##### -0x00, 0x00, 0x08, 0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, // ## ## -0x00, 0x00, 0x88, 0x00, 0x50, 0x08, 0x80, 0x00, 0x00, 0x00, // ## * ## -0x00, 0x08, 0x80, 0x05, 0x05, 0x00, 0x88, 0x00, 0x00, 0x00, // ## * * ## -0x00, 0x88, 0x00, 0x50, 0x50, 0x50, 0x08, 0x80, 0x00, 0x00, // ## * * * ## -0x08, 0x80, 0x05, 0x05, 0x05, 0x05, 0x00, 0x88, 0x88, 0x00, // ## * * * * #### -0x88, 0x00, 0x50, 0x50, 0x50, 0x50, 0x50, 0x08, 0x08, 0x80, //## * * * * * # ## -0x80, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x00, 0x80, //# * * * * * * # -0x80, 0x50, 0x50, 0x50, 0x10, 0x50, 0x50, 0x52, 0x40, 0x80, //# * * * . * * *@$ # -0x80, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x00, 0x80, //# * * * * * * # -0x88, 0x00, 0x50, 0x50, 0x50, 0x50, 0x50, 0x08, 0x08, 0x80, //## * * * * * # ## -0x08, 0x80, 0x05, 0x05, 0x05, 0x05, 0x00, 0x88, 0x88, 0x00, // ## * * * * #### -0x00, 0x88, 0x00, 0x50, 0x50, 0x50, 0x08, 0x80, 0x00, 0x00, // ## * * * ## -0x00, 0x08, 0x80, 0x05, 0x05, 0x00, 0x88, 0x00, 0x00, 0x00, // ## * * ## -0x00, 0x00, 0x88, 0x00, 0x50, 0x08, 0x80, 0x00, 0x00, 0x00, // ## * ## -0x00, 0x00, 0x08, 0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, // ## ## -0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ##### -//Level: 362 -0x07, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x00, //###### -0x80, 0x10, 0x08, 0x00, //# . # -0x80, 0x08, 0x28, 0x00, //# #@# -0x80, 0x04, 0x08, 0x80, //# $ ## -0x88, 0x48, 0x00, 0x80, //##$# # -0x80, 0x00, 0x80, 0x80, //# # # -0x81, 0x05, 0x00, 0x80, //#. * # -0x88, 0x88, 0x88, 0x80, //####### -//Level: 363 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x00, 0x12, 0x08, //## .@ # -0x88, 0x08, 0x18, 0x08, //## #.# # -0x88, 0x00, 0x04, 0x08, //## $ # -0x88, 0x14, 0x40, 0x88, //##.$$ ## -0x88, 0x00, 0x88, 0x88, //## #### -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x88, 0x88, //######## -//Level: 364 -0x13, 0x10,//Size x and y -0x88, 0x88, 0x88, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, //###### #### -0x80, 0x00, 0x08, 0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, //# ####### ##### -0x80, 0x00, 0x48, 0x00, 0x80, 0x04, 0x00, 0x80, 0x00, 0x80, //# $# # $ # # -0x80, 0x04, 0x00, 0x40, 0x04, 0x08, 0x04, 0x04, 0x00, 0x80, //# $ $ $ # $ $ # -0x88, 0x40, 0x40, 0x00, 0x80, 0x28, 0x04, 0x00, 0x00, 0x80, //##$ $ # @# $ # -0x80, 0x04, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x08, 0x80, //# $ ########### ## -0x80, 0x80, 0x00, 0x81, 0x11, 0x11, 0x11, 0x80, 0x48, 0x00, //# # #.......# $# -0x80, 0x88, 0x00, 0x80, 0x11, 0x11, 0x11, 0x80, 0x08, 0x00, //# ## # ......# # -0x80, 0x80, 0x00, 0x41, 0x11, 0x11, 0x11, 0x14, 0x08, 0x00, //# # $........$ # -0x80, 0x80, 0x40, 0x81, 0x11, 0x10, 0x11, 0x80, 0x08, 0x00, //# # $ #.... ..# # -0x80, 0x04, 0x04, 0x88, 0x88, 0x48, 0x88, 0x80, 0x48, 0x00, //# $ $####$#### $# -0x80, 0x40, 0x00, 0x88, 0x80, 0x40, 0x00, 0x40, 0x08, 0x80, //# $ ### $ $ ## -0x80, 0x40, 0x00, 0x00, 0x40, 0x40, 0x04, 0x00, 0x00, 0x80, //# $ $ $ $ # -0x88, 0x08, 0x88, 0x88, 0x80, 0x40, 0x88, 0x88, 0x80, 0x80, //## ###### $ ##### # -0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, //# # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //################### -//Level: 365 -0x14, 0x12,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x80, 0x88, 0x88, 0x88, 0x00, 0x00, // ####### ###### -0x08, 0x80, 0x00, 0x00, 0x88, 0x80, 0x00, 0x08, 0x00, 0x00, // ## ### # -0x08, 0x00, 0x88, 0x80, 0x00, 0x80, 0x44, 0x08, 0x88, 0x00, // # ### # $$ ### -0x08, 0x08, 0x02, 0x08, 0x00, 0x80, 0x04, 0x00, 0x08, 0x00, // # # @ # # $ # -0x08, 0x08, 0x44, 0x48, 0x08, 0x88, 0x84, 0x88, 0x08, 0x88, // # #$$$# ####$## ### -0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x11, 0x18, //## $ #...# -0x80, 0x08, 0x48, 0x48, 0x80, 0x08, 0x00, 0x08, 0x11, 0x18, //# #$#$## # #...# -0x80, 0x80, 0x04, 0x00, 0x80, 0x80, 0x88, 0x08, 0x11, 0x18, //# # $ # # ## #...# -0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x08, 0x11, 0x18, //# # # # #...# -0x80, 0x08, 0x44, 0x48, 0x80, 0x84, 0x00, 0x08, 0x11, 0x18, //# #$$$## #$ #...# -0x88, 0x00, 0x00, 0x00, 0x00, 0x04, 0x48, 0x88, 0x11, 0x18, //## $$###...# -0x08, 0x08, 0x48, 0x48, 0x80, 0x84, 0x00, 0x00, 0x11, 0x18, // # #$#$## #$ ...# -0x08, 0x08, 0x00, 0x00, 0x80, 0x80, 0x40, 0x00, 0x11, 0x18, // # # # # $ ...# -0x08, 0x08, 0x00, 0x00, 0x80, 0x80, 0x08, 0x88, 0x88, 0x88, // # # # # ####### -0x08, 0x08, 0x44, 0x48, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, // # #$$$## # # -0x08, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // # #### -0x08, 0x88, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ### ### -0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // ###### -//Level: 366 -0x0E, 0x10,//Size x and y -0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, // ### -0x08, 0x88, 0x88, 0x82, 0x88, 0x88, 0x80, // ######@##### -0x08, 0x11, 0x11, 0x11, 0x11, 0x11, 0x80, // #..........# -0x88, 0x15, 0x55, 0x55, 0x55, 0x51, 0x88, //##.********.## -0x81, 0x15, 0x11, 0x11, 0x11, 0x51, 0x18, //#..*......*..# -0x81, 0x15, 0x15, 0x55, 0x51, 0x51, 0x18, //#..*.****.*..# -0x88, 0x88, 0x88, 0x11, 0x88, 0x88, 0x88, //######..###### -0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, // # # -0x08, 0x04, 0x04, 0x44, 0x40, 0x40, 0x80, // # $ $$$$ $ # -0x08, 0x44, 0x40, 0x00, 0x04, 0x44, 0x80, // #$$$ $$$# -0x08, 0x00, 0x04, 0x44, 0x40, 0x00, 0x80, // # $$$$ # -0x08, 0x40, 0x40, 0x00, 0x04, 0x04, 0x80, // #$ $ $ $# -0x88, 0x00, 0x04, 0x44, 0x40, 0x00, 0x88, //## $$$$ ## -0x80, 0x44, 0x40, 0x00, 0x04, 0x44, 0x08, //# $$$ $$$ # -0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, //# # # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############## -//Level: 367 -0x14, 0x10,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -0x81, 0x18, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, //#..# # # -0x81, 0x40, 0x04, 0x00, 0x84, 0x40, 0x04, 0x88, 0x04, 0x88, //#.$ $ #$$ $## $## -0x81, 0x48, 0x00, 0x88, 0x80, 0x08, 0x80, 0x88, 0x00, 0x08, //#.$# ### ## ## # -0x80, 0x08, 0x04, 0x08, 0x00, 0x44, 0x00, 0x04, 0x00, 0x08, //# # $ # $$ $ # -0x80, 0x88, 0x80, 0x08, 0x08, 0x00, 0x84, 0x00, 0x88, 0x88, //# ### # # #$ #### -0x80, 0x08, 0x80, 0x80, 0x40, 0x00, 0x82, 0x08, 0x00, 0x08, //# ## # $ #@ # # -0x80, 0x40, 0x00, 0x04, 0x00, 0x88, 0x18, 0x80, 0x04, 0x08, //# $ $ ##.## $ # -0x80, 0x08, 0x04, 0x80, 0x48, 0x04, 0x00, 0x00, 0x08, 0x88, //# # $# $# $ ### -0x80, 0x08, 0x00, 0x80, 0x08, 0x00, 0x08, 0x88, 0x00, 0x08, //# # # # ### # -0x80, 0x08, 0x88, 0x88, 0x88, 0x80, 0x80, 0x00, 0x00, 0x08, //# ######## # # -0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x18, 0x18, //# # #.#.# -0x88, 0x48, 0x88, 0x88, 0x88, 0x84, 0x80, 0x00, 0x11, 0x18, //##$########$# ...# -0x80, 0x00, 0x01, 0x50, 0x08, 0x00, 0x00, 0x88, 0x18, 0x18, //# .* # ##.#.# -0x80, 0x15, 0x11, 0x15, 0x00, 0x04, 0x00, 0x11, 0x11, 0x18, //# .*...* $ .....# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //#################### -//Level: 368 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x88, 0x88, //######## -0x81, 0x00, 0x21, 0x88, //#. @.## -0x80, 0x04, 0x80, 0x88, //# $# ## -0x80, 0x80, 0x41, 0x08, //# # $. # -0x80, 0x00, 0x48, 0x08, //# $# # -0x88, 0x88, 0x00, 0x08, //#### # -0x88, 0x88, 0x88, 0x88, //######## -//Level: 369 -0x0B, 0x09,//Size x and y -0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // ######### -0x88, 0x80, 0x00, 0x80, 0x00, 0x80, //### # # -0x80, 0x04, 0x10, 0x50, 0x40, 0x80, //# $. * $ # -0x80, 0x81, 0x81, 0x81, 0x80, 0x80, //# #.#.#.# # -0x80, 0x40, 0x42, 0x40, 0x40, 0x80, //# $ $@$ $ # -0x80, 0x81, 0x81, 0x81, 0x80, 0x80, //# #.#.#.# # -0x80, 0x40, 0x50, 0x14, 0x00, 0x80, //# $ * .$ # -0x80, 0x00, 0x88, 0x88, 0x88, 0x80, //# ####### -0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //##### -//Level: 370 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x80, 0x01, 0x08, //### . # -0x88, 0x05, 0x08, 0x08, //## * # # -0x88, 0x01, 0x40, 0x08, //## .$ # -0x88, 0x00, 0x84, 0x88, //## #$## -0x88, 0x80, 0x20, 0x88, //### @ ## -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x88, 0x88, //######## -//Level: 371 -0x08, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, //######## -0x80, 0x11, 0x88, 0x88, //# ..#### -0x80, 0x40, 0x00, 0x08, //# $ # -0x80, 0x08, 0x48, 0x08, //# #$# # -0x80, 0x20, 0x14, 0x08, //# @ .$ # -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x88, 0x88, //######## -0x88, 0x88, 0x88, 0x88, //######## -//Level: 372 -0x0B, 0x08,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //########## -0x80, 0x00, 0x00, 0x00, 0x08, 0x80, //# ## -0x80, 0x48, 0x48, 0x48, 0x42, 0x80, //# $#$#$#$@# -0x81, 0x01, 0x41, 0x11, 0x41, 0x80, //#. .$...$.# -0x81, 0x01, 0x41, 0x11, 0x41, 0x80, //#. .$...$.# -0x80, 0x48, 0x48, 0x48, 0x48, 0x80, //# $#$#$#$## -0x80, 0x00, 0x00, 0x00, 0x08, 0x00, //# # -0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //########## -//Level: 373 -0x0F, 0x0D,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -0x80, 0x01, 0x11, 0x11, 0x11, 0x11, 0x00, 0x80, //# ......... # -0x80, 0x44, 0x44, 0x44, 0x44, 0x41, 0x40, 0x80, //# $$$$$$$$$.$ # -0x80, 0x41, 0x11, 0x11, 0x11, 0x41, 0x40, 0x80, //# $.......$.$ # -0x80, 0x41, 0x44, 0x44, 0x41, 0x41, 0x40, 0x80, //# $.$$$$$.$.$ # -0x80, 0x41, 0x41, 0x11, 0x41, 0x41, 0x40, 0x80, //# $.$...$.$.$ # -0x80, 0x41, 0x41, 0x45, 0x41, 0x41, 0x42, 0x80, //# $.$.$*$.$.$@# -0x80, 0x41, 0x41, 0x41, 0x11, 0x41, 0x40, 0x80, //# $.$.$...$.$ # -0x80, 0x41, 0x41, 0x44, 0x44, 0x41, 0x40, 0x80, //# $.$.$$$$$.$ # -0x80, 0x41, 0x41, 0x11, 0x11, 0x11, 0x40, 0x80, //# $.$.......$ # -0x80, 0x41, 0x44, 0x44, 0x44, 0x44, 0x40, 0x80, //# $.$$$$$$$$$ # -0x80, 0x01, 0x11, 0x11, 0x11, 0x11, 0x00, 0x80, //# ......... # -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //############### -//Level: 374 -0x11, 0x12,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ######### -0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // # # -0x00, 0x08, 0x80, 0x40, 0x40, 0x40, 0x88, 0x00, 0x00, // ## $ $ $ ## -0x88, 0x88, 0x00, 0x04, 0x04, 0x40, 0x08, 0x88, 0x80, //#### $ $$ #### -0x80, 0x00, 0x80, 0x40, 0x04, 0x00, 0x80, 0x00, 0x80, //# # $ $ # # -0x80, 0x44, 0x08, 0x04, 0x04, 0x08, 0x04, 0x40, 0x80, //# $$ # $ $ # $$ # -0x80, 0x00, 0x40, 0x84, 0x04, 0x80, 0x04, 0x00, 0x80, //# $ #$ $# $ # -0x80, 0x04, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x80, //# $ $ $ $ # -0x80, 0x40, 0x40, 0x80, 0x40, 0x80, 0x44, 0x00, 0x80, //# $ $ # $ # $$ # -0x80, 0x40, 0x08, 0x88, 0x08, 0x88, 0x00, 0x40, 0x80, //# $ ### ### $ # -0x80, 0x00, 0x88, 0x08, 0x08, 0x08, 0x80, 0x00, 0x80, //# ## # # ## # -0x88, 0x88, 0x80, 0x08, 0x28, 0x00, 0x88, 0x88, 0x80, //##### #@# ##### -0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, // # # -0x00, 0x00, 0x00, 0x88, 0x08, 0x80, 0x00, 0x00, 0x00, // ## ## -0x88, 0x88, 0x88, 0x81, 0x01, 0x88, 0x88, 0x88, 0x80, //#######. .####### -0x81, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x11, 0x80, //#...... . ......# -0x81, 0x11, 0x11, 0x11, 0x10, 0x11, 0x11, 0x11, 0x80, //#........ ......# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //################# -//Level: 375 -0x15, 0x11,//Size x and y -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //##################### -0x81, 0x00, 0x81, 0x00, 0x81, 0x41, 0x80, 0x01, 0x80, 0x01, 0x80, //#. #. #.$.# .# .# -0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, //# # # # # # # -0x80, 0x01, 0x80, 0x00, 0x10, 0x40, 0x10, 0x00, 0x81, 0x00, 0x80, //# .# . $ . #. # -0x80, 0x80, 0x01, 0x84, 0x40, 0x80, 0x44, 0x81, 0x00, 0x80, 0x80, //# # .#$$ # $$#. # # -0x80, 0x01, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x81, 0x00, 0x80, //# .# # $ # #. # -0x80, 0x80, 0x00, 0x84, 0x40, 0x80, 0x44, 0x80, 0x00, 0x80, 0x80, //# # #$$ # $$# # # -0x80, 0x01, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x81, 0x00, 0x80, //# .# # $ # #. # -0x82, 0x80, 0x00, 0x84, 0x44, 0x54, 0x44, 0x80, 0x00, 0x80, 0x80, //#@# #$$$*$$$# # # -0x80, 0x01, 0x10, 0x00, 0x80, 0x40, 0x80, 0x00, 0x11, 0x00, 0x80, //# .. # $ # .. # -0x80, 0x80, 0x00, 0x84, 0x40, 0x80, 0x44, 0x80, 0x00, 0x80, 0x80, //# # #$$ # $$# # # -0x80, 0x01, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x81, 0x00, 0x80, //# .# # $ # #. # -0x80, 0x80, 0x01, 0x84, 0x40, 0x80, 0x44, 0x81, 0x00, 0x80, 0x80, //# # .#$$ # $$#. # # -0x80, 0x01, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x81, 0x00, 0x80, //# .# # $ # #. # -0x80, 0x80, 0x00, 0x84, 0x00, 0x80, 0x04, 0x80, 0x00, 0x80, 0x80, //# # #$ # $# # # -0x81, 0x00, 0x81, 0x00, 0x81, 0x41, 0x80, 0x01, 0x80, 0x01, 0x80, //#. #. #.$.# .# .# -0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80 //##################### -}; -#else -#define SOKOBAN_LEVELS 1 -const unsigned char Sokoban_Levels[] = { -//Level: 1 -0x13, 0x0B,//Size x and y -0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // ##### -0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // # # -0x00, 0x00, 0x84, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // #$ # -0x00, 0x88, 0x80, 0x04, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // ### $## -0x00, 0x80, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, // # $ $ # -0x88, 0x80, 0x80, 0x88, 0x08, 0x00, 0x08, 0x88, 0x88, 0x80, //### # ## # ###### -0x80, 0x00, 0x80, 0x88, 0x08, 0x88, 0x88, 0x00, 0x11, 0x80, //# # ## ##### ..# -0x80, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x80, //# $ $ ..# -0x88, 0x88, 0x80, 0x88, 0x80, 0x82, 0x88, 0x00, 0x11, 0x80, //##### ### #@## ..# -0x00, 0x00, 0x80, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // # ######### -0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ####### -}; -#endif -#endif diff --git a/boop/games/tic_tac_toe.c b/boop/games/tic_tac_toe.c deleted file mode 100644 index 8d617ac..0000000 --- a/boop/games/tic_tac_toe.c +++ /dev/null @@ -1,375 +0,0 @@ -/* - tic_tac_toe.c - game - Copyright (C) 2007 Colibri - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lcd.h" -#include "fonty.h" -#include "keyboard.h" -#include "tic_tac_toe.h" - -void GameTicTacToe(void) -{ - BYTE Color; - BYTE Mode; - int i; - int k; - BOOL ComputerWon; - BOOL PlayerWon; - BYTE G[2][9];//GameArray [0=Computer / 1=Player][Game fields] - BOOL GameIsRunning = false; - BYTE Moves = 0; - int Pos; - - Color = LCD_COLOR_B; - Mode = DRAW_PUT; - -again: - //New game - //Init the display - lcd_fill(0);//Clr screen - - //Title - set_font(SMALLFONT); - draw_string(0, 0, "TicTacToe", Color, Mode); - - //Grid - draw_block(16, 16+30, 96, 3, Color, Mode); - draw_block(16, 16+30+3+30, 96, 3, Color, Mode); - draw_block(16+30, 16, 3, 96, Color, Mode); - draw_block(16+30+3+30, 16, 3, 96, Color, Mode); - - //Reset game field - for(k=0; k<2; k++) - { - for(i=0; i<9; i++) - { - G[k][i] = 0; - } - } - - Moves = 0; - - GameIsRunning = true; - - while(1) - { - Pos = -1; - if(KEY_1){Pos = 0;} - if(KEY_2){Pos = 1;} - if(KEY_3){Pos = 2;} - if(KEY_4){Pos = 3;} - if(KEY_5){Pos = 4;} - if(KEY_6){Pos = 5;} - if(KEY_7){Pos = 6;} - if(KEY_8){Pos = 7;} - if(KEY_9){Pos = 8;} - - if((Pos >= 0) && (Pos <= 8)) - { - if(GameIsRunning) - { - if((G[0][Pos] + G[1][Pos]) == 0) - { - //field is empty - G[1][Pos] = 1; - Moves++; - - if(Moves < 9) - { - //Moves left - if(!GameTicTacToe_IsSolved(G, &ComputerWon, &PlayerWon)) - { - //Not solved -> computer move - GameTicTacToe_ComputerMove(G); - Moves++; - } - } - GameTicTacToe_DrawGameField(G); - } - } - } - - //Is solved? - GameTicTacToe_IsSolved(G, &ComputerWon, &PlayerWon); - if(ComputerWon) - { - draw_string(0, LCD_SIZE_Y - (8*4), "Computer hat gewonnen", Color, Mode); - GameIsRunning = false; - } - else - { - if(PlayerWon) - { - draw_string(0, LCD_SIZE_Y - (8*4), "Spieler hat gewonnen", Color, Mode); - GameIsRunning = false; - } - else - { - if(Moves == 9) - { - draw_string(0, LCD_SIZE_Y - (8*4), "Unentschieden", Color, Mode); - GameIsRunning = false; - } - } - } - - //Footer - if(Moves > 0) - { - draw_string(0, LCD_SIZE_Y - (8*3), "0", Color, Mode); - draw_string(32, LCD_SIZE_Y - (8*3), "Neues Spiel", Color, Mode); - draw_string(0, LCD_SIZE_Y - (8*2), "Exit", Color, Mode); - draw_string(32, LCD_SIZE_Y - (8*2), "Spiel beenden", Color, Mode); - } - else - { - draw_block(0, LCD_SIZE_Y - (8*2), LCD_SIZE_X, 8, Color, DRAW_ERASE); - } - - if(GameIsRunning) - { - draw_string(0, LCD_SIZE_Y - 8, "1-9", Color, Mode); - draw_string(32, LCD_SIZE_Y - 8, "Feld waehlen", Color, Mode); - } - else - { - draw_block(0, LCD_SIZE_Y - 8, LCD_SIZE_X, 8, Color, DRAW_ERASE); - } - waitKeyUpDown(); - if(KEY_0) goto again; - if(KEY_Exit) return; - } -} - -void GameTicTacToe_ComputerMove(BYTE G[2][9]) -{ - int Pos; - BYTE TempG[2][9]; - BOOL ComputerWon; - BOOL PlayerWon; - - for(Pos=0; Pos<9; Pos++) - { - TempG[0][Pos] = G[0][Pos]; - TempG[1][Pos] = G[1][Pos]; - } - - //1: Check if the computer can win the game with the next move - for(Pos=0; Pos<9; Pos++) - { - if((G[0][Pos] + G[1][Pos]) == 0) - { - //Free pos - TempG[0][Pos] = 1;//Try this move - GameTicTacToe_IsSolved(TempG, &ComputerWon, &PlayerWon); - if(ComputerWon) - { - G[0][Pos] = 1;//Do the move - return; - } - TempG[0][Pos] = 0;//Undo the try - } - } - - //2: Check if the computer can prohibit the player to win the game with the next move - for(Pos=0; Pos<9; Pos++) - { - if((G[0][Pos] + G[1][Pos]) == 0) - { - //Free pos - TempG[1][Pos] = 1;//Try this move - GameTicTacToe_IsSolved(TempG, &ComputerWon, &PlayerWon); - if(PlayerWon) - { - G[0][Pos] = 1;//Do the move - return; - } - TempG[1][Pos] = 0;//Undo the try - } - } - - //The following strategy is not implemented to allow the player to win: - //3: Fork: threaten a win with two possible completions in two ways - //4: Block Fork 1: if there is a configuration where the opponent can fork, create two in a row to force a block - //5: Block Fork 2: if there is a configuration where the opponent can fork, block that fork - - //6: Try to play the centre - if((G[0][4] + G[1][4]) == 0) - { - G[0][4] = 1; - return; - } - - //7: If the Player is in a corner then try to play the opposite corner - if(((G[0][0] + G[1][0]) == 0) && (G[1][8])) - { - //Corner 0 is free and player is in corner 8 - G[0][0] = 1; - return; - } - if(((G[0][2] + G[1][2]) == 0) && (G[1][6])) - { - //Corner 2 is free and player is in corner 6 - G[0][2] = 1; - return; - } - if(((G[0][6] + G[1][6]) == 0) && (G[1][2])) - { - //Corner 6 is free and player is in corner 2 - G[0][6] = 1; - return; - } - if(((G[0][8] + G[1][8]) == 0) && (G[1][0])) - { - //Corner 8 is free and player is in corner 0 - G[0][8] = 1; - return; - } - - //8: Try to play an free corner - Pos = 0; - if((G[0][Pos] + G[1][Pos]) == 0) - { - G[0][Pos] = 1; - return; - } - Pos = 2; - if((G[0][Pos] + G[1][Pos]) == 0) - { - G[0][Pos] = 1; - return; - } - Pos = 6; - if((G[0][Pos] + G[1][Pos]) == 0) - { - G[0][Pos] = 1; - return; - } - Pos = 8; - if((G[0][Pos] + G[1][Pos]) == 0) - { - G[0][Pos] = 1; - return; - } - - //9: Play on a free pos - for(Pos=0; Pos<9; Pos++) - { - if((G[0][Pos] + G[1][Pos]) == 0) - { - //Free pos - G[0][Pos] = 1;//Do the move - return; - } - } -} - -BOOL GameTicTacToe_IsSolved(BYTE G[2][9], BOOL *pComputerWon, BOOL *pPlayerWon) -{ - //Return true=GameIsSolved - int k; - BYTE Result[2]; - - *pComputerWon = false; - *pPlayerWon = false; - - //Is solved? - Result[0] = 0; - Result[1] = 0; - for(k=0; k<2; k++) - { - Result[k] |= 1 << (G[k][0] + G[k][1] + G[k][2]);//Row 1 - Result[k] |= 1 << (G[k][3] + G[k][4] + G[k][5]);//Row 2 - Result[k] |= 1 << (G[k][6] + G[k][7] + G[k][8]);//Row 3 - - Result[k] |= 1 << (G[k][0] + G[k][3] + G[k][6]);//Column 1 - Result[k] |= 1 << (G[k][1] + G[k][4] + G[k][7]);//Column 2 - Result[k] |= 1 << (G[k][2] + G[k][5] + G[k][8]);//Column 3 - - Result[k] |= 1 << (G[k][0] + G[k][4] + G[k][8]);//Diagonal - Result[k] |= 1 << (G[k][2] + G[k][4] + G[k][6]);//Diagonal - } - - if(Result[0] & (1 << 3)) - { - *pComputerWon = true; - return true;//Solved - } - if(Result[1] & (1 << 3)) - { - *pPlayerWon = true; - return true;//Solved - } - - return false;//Not solved -} - -void GameTicTacToe_DrawGameField(BYTE G[2][9]) -{ - int Pos; - int x; - int y; - BYTE Color; - BYTE Mode; - - Color = LCD_COLOR_B; - Mode = DRAW_PUT; - - for(Pos=0; Pos<9; Pos++) - { - -// x = Pos % 3; -// y = Pos / 3; - y = 0; - x = Pos; - while(x >= 3) - { - x -= 3; - y++; - } - - if(G[0][Pos]) - { - //Computer (O) - draw_disc(16+14 + (x*33), 16+14 + (y*33), 11, Color, Mode); - draw_disc(16+14 + (x*33), 16+14 + (y*33), 8, Color, DRAW_XOR); - - } - else - { - if(G[1][Pos]) - { - //Player (X) -draw_line(16+3 + (x*33), 16+3 + (y*33)+2, 16+3 + (x*33) + 23-2, 16+3 + (y*33) + 23, Color, Mode); -draw_line(16+3 + (x*33), 16+3 + (y*33)+1, 16+3 + (x*33) + 23-1, 16+3 + (y*33) + 23, Color, Mode); -draw_line(16+3 + (x*33), 16+3 + (y*33), 16+3 + (x*33) + 23, 16+3 + (y*33) + 23, Color, Mode); -draw_line(16+3 + (x*33)+1, 16+3 + (y*33), 16+3 + (x*33) + 23, 16+3 + (y*33) + 23-1, Color, Mode); -draw_line(16+3 + (x*33)+2, 16+3 + (y*33), 16+3 + (x*33) + 23, 16+3 + (y*33) + 23-2, Color, Mode); - - -draw_line(16+3-1+(x*33)+2, 16+3+(y*33)+23+1, 16+3+(x*33)+23, 16+3 + (y*33)+2, Color, Mode); -draw_line(16+3-1+(x*33)+1, 16+3+(y*33)+23+1, 16+3+(x*33)+23, 16+3 + (y*33)+1, Color, Mode); -draw_line(16+3-1+(x*33), 16+3+(y*33)+23+1, 16+3+(x*33)+23, 16+3 + (y*33), Color, Mode); -draw_line(16+3-1+(x*33), 16+3+(y*33)+23+1-1, 16+3+(x*33)+23-1, 16+3 + (y*33), Color, Mode); -draw_line(16+3-1+(x*33), 16+3+(y*33)+23+1-2, 16+3+(x*33)+23-2, 16+3 + (y*33), Color, Mode); - - } - } - } -} - - diff --git a/boop/games/tic_tac_toe.h b/boop/games/tic_tac_toe.h deleted file mode 100644 index 1d57f18..0000000 --- a/boop/games/tic_tac_toe.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - tic_tac_toe.h - game - Copyright (C) 2007 Colibri - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef TIC_TAC_TOE_H -#define TIC_TAC_TOE_H - -#include "../global.h" - -void GameTicTacToe(void); -void GameTicTacToe_DrawGameField(BYTE G[2][9]); -void GameTicTacToe_ComputerMove(BYTE G[2][9]); -BOOL GameTicTacToe_IsSolved(BYTE G[2][9], BOOL *pComputerWon, BOOL *pPlayerWon); - -#endif diff --git a/boop/global.c b/boop/global.c index 7b218db..e9394c5 100644 --- a/boop/global.c +++ b/boop/global.c @@ -17,11 +17,6 @@ */ #include "lpc2220.h" -#include "rf.h" -#include "global.h" - -#define debugbuffersize 50 -unsigned char debugoutbuf [debugbuffersize]; void *memcpy(void *dest,void *src,int count) { @@ -44,88 +39,8 @@ int memcmp(const void * cs,const void * ct,int count) return res; } -unsigned char GetHWversion (void) -{ +unsigned char GetHWversion(void) { if(((IOPIN2 >> 28) & 3) == 3) return(((((IOPIN0 >> 5) & 1) << 4) | (((IOPIN2 >> 30) & 1) << 3) | (((IOPIN2 >> 16) & 1) << 2) | 3)); return(((IOPIN2 >> 27) & 2) + ((IOPIN2 >> 29) & 1) + (((IOPIN1 >> 23) & 7) << 2)); } - -int puts (const char* string) -{ - struct RFendpoint_* cur_ep; - volatile unsigned char i; - - cur_ep = openEP(debugoutbuf,0, packet_test); - - if (cur_ep) - { - for (i=0; (ibuffer[i] = string[i]; - } - - cur_ep->buffer[i] = 0; - cur_ep->bufferlen = i+1; - cur_ep->flags |= EPenabled | EPoutput | EPnewdata; - - - RF_changestate(RFtx); - // wait until all date are sent - while(cur_ep->flags & EPnewdata); - closeEP(cur_ep); - } - return 1; -} - -/* - * The width of the CRC calculation and result. - * Modify the typedef for a 16 or 32-bit CRC standard. - */ - -#define CRC_POLYNOMIAL 0x8005 -#define CRC_WIDTH (8 * sizeof(crc)) -#define CRC_TOPBIT (1 << (CRC_WIDTH - 1)) - -crc CRCs(char* message) -{ - crc remainder = 0; - int byte; - unsigned char bit; - - /* - * Perform modulo-2 division, a byte at a time. - */ - for (byte = 0; message[byte]; ++byte) - { - /* - * Bring the next byte into the remainder. - */ - remainder ^= (message[byte] << (CRC_WIDTH - 8)); - - /* - * Perform modulo-2 division, a bit at a time. - */ - for (bit = 8; bit > 0; --bit) - { - /* - * Try to divide the current data bit. - */ - if (remainder & CRC_TOPBIT) - { - remainder = (remainder << 1) ^ CRC_POLYNOMIAL; - } - else - { - remainder = (remainder << 1); - } - } - } - - /* - * The final remainder is the CRC result. - */ - return (remainder); - -} /* crcSlow() */ - diff --git a/boop/global.h b/boop/global.h index 665747c..4215ebe 100644 --- a/boop/global.h +++ b/boop/global.h @@ -22,11 +22,6 @@ //Uncomment if you want compile with demo sound //#define WITH_SOUND -// Set appropriate feature flags -#define FF_UART_REDIRECT 1 -#define FF_LARGE_IDLE_CLOCK 0 -#define FF_LARGE_MENU 1 -#define FF_ICON_TRANSPARENT 1 // enable 3 BitPerPixel icons support typedef unsigned char BOOL; typedef unsigned char BYTE; @@ -36,59 +31,27 @@ typedef unsigned long DWORD; #define false 0 #define true 1 -#ifndef NULL #define NULL 0 -#endif #define max(a,b) (((a) > (b)) ? (a) : (b)) #define min(a,b) (((a) < (b)) ? (a) : (b)) -#ifndef _BV -#define _BV(bit) (1 << (bit)) -#endif - -#define NUM_OF_ELEMENTS(x) sizeof(x)/sizeof(x[0]) - #define SPEED_30 0 #define SPEED_60 1 -// Execute code in locked sequence -#define INT_LOCK(x) {unsigned cpsr = disableIRQ (); {x;} restoreIRQ (cpsr);} - -/** Let the LPC2200 sleep until the next IRQ -* -* This function tries to enter the sleep mode and stays -* there until the next interrupt wakes up the CPU. -* If that is not possible, the function returns immediately. -*/ -extern void cpu_idle (void); - -#define SYS_NOIDLE 0x08 // No Idle Mode -#define SYS_NOPDOWN 0x10 // No Power Down #define SYS_IR 0x20 #define SYS_KEY 0x40 #define SYS_TURBO 0x80 -#include -#define printd(...) printf(__VA_ARGS__) -#define debugbuffersize 50 -extern unsigned char debugoutbuf [debugbuffersize]; - #ifndef __MAIN_C__ extern char sysInfo; #endif /* __MAIN_C__ */ -extern unsigned char debugoutbuf []; - #define PCON_IDLE 0x01 #define PCON_PDOWN 0x02 -typedef unsigned short crc; - void *memcpy(void *dest,void *src,int count); int memcmp(const void * cs,const void * ct,int count); unsigned char GetHWversion(void); -int puts(const char* string); -crc CRCs(char* message); #endif diff --git a/boop/gui/Cross_2bpp.bmp b/boop/gui/Cross_2bpp.bmp deleted file mode 100644 index 96e496c..0000000 Binary files a/boop/gui/Cross_2bpp.bmp and /dev/null differ diff --git a/boop/gui/Cross_t_3bpp_t.bmp b/boop/gui/Cross_t_3bpp_t.bmp deleted file mode 100644 index 7a8bffe..0000000 Binary files a/boop/gui/Cross_t_3bpp_t.bmp and /dev/null differ diff --git a/boop/gui/FF_2bpp.bmp b/boop/gui/FF_2bpp.bmp deleted file mode 100644 index 2e9ebcd..0000000 Binary files a/boop/gui/FF_2bpp.bmp and /dev/null differ diff --git a/boop/gui/FR_2bpp.bmp b/boop/gui/FR_2bpp.bmp deleted file mode 100644 index d088a47..0000000 Binary files a/boop/gui/FR_2bpp.bmp and /dev/null differ diff --git a/boop/gui/Leo_Gray_128_2bpp.bmp b/boop/gui/Leo_Gray_128_2bpp.bmp deleted file mode 100644 index 5dd731f..0000000 Binary files a/boop/gui/Leo_Gray_128_2bpp.bmp and /dev/null differ diff --git a/boop/gui/Make.conf b/boop/gui/Make.conf deleted file mode 100644 index 3bee914..0000000 --- a/boop/gui/Make.conf +++ /dev/null @@ -1 +0,0 @@ -THUMBSRCS := menu.c mainmenu.c testmenu.c settingsmenu.c controls.c diff --git a/boop/gui/Pause_2bpp.bmp b/boop/gui/Pause_2bpp.bmp deleted file mode 100644 index e6d9fd1..0000000 Binary files a/boop/gui/Pause_2bpp.bmp and /dev/null differ diff --git a/boop/gui/Play_2bpp.bmp b/boop/gui/Play_2bpp.bmp deleted file mode 100644 index 04a5dd2..0000000 Binary files a/boop/gui/Play_2bpp.bmp and /dev/null differ diff --git a/boop/gui/Stop_2bpp.bmp b/boop/gui/Stop_2bpp.bmp deleted file mode 100644 index 8661f98..0000000 Binary files a/boop/gui/Stop_2bpp.bmp and /dev/null differ diff --git a/boop/gui/controls.c b/boop/gui/controls.c deleted file mode 100644 index 539d859..0000000 --- a/boop/gui/controls.c +++ /dev/null @@ -1,1017 +0,0 @@ -/* - controls.c - GUI controls - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "rtc.h" -#include "controls.h" -#include "lcd.h" -#include "fonty.h" -#include "global.h" -#include "lpc2220.h" -#include "keyboard.h" -#include "backlight.h" -#include "timerfuncs.h" - -#define Cursor_timeout 150 - -FORM* currentform = 0; - -const char string_yes[] = "JA"; -const char string_no[] = "NEIN"; -const char string_ok[] = "OK"; - -const char TXTKey1[] = ".,-+_1@*;:'&"; -const char TXTKey2[] = "abc2ABC"; -const char TXTKey3[] = "def3DEF"; -const char TXTKey4[] = "ghi4GHI"; -const char TXTKey5[] = "jkl5JKL"; -const char TXTKey6[] = "mno6MNO"; -const char TXTKey7[] = "pqrs7PQRS"; -const char TXTKey8[] = "tuv8TUV"; -const char TXTKey9[] = "wxyz9WXYZ"; -const char TXTKey0[] = " 0"; - -const char* const TXTKeys[10] = {TXTKey1,TXTKey2,TXTKey3,TXTKey4,TXTKey5,TXTKey6,TXTKey7,TXTKey8,TXTKey9,TXTKey0}; - -unsigned char msgbox (unsigned char y,unsigned short flags, char *st) -{ - unsigned short textwidth; - unsigned short textheight; - unsigned char width; - unsigned char height; - unsigned char left; - unsigned char x; - unsigned char sel; - - struct bt_ - { - unsigned char cnt; - unsigned char left[3]; - unsigned char top; - unsigned char ret[3]; - char* text[3]; - unsigned char textHeight; - } button; - - textwidth = get_stringwidth(st); - textheight = get_stringheight(st); - - if(textwidth > 120) - width = 124; - else if(textwidth < 54) - width = 60; - else - width = (textwidth | 0x01) + 6; - - button.textHeight = get_stringheight (string_yes); - if ((flags & 0x03) == BC_YesNo) - { - button.cnt = 2; - button.left[0] = 38; - button.ret[0]=BC_Yes; - button.text[0] = (char*)string_yes; - button.left[1] = 65; - button.ret[1]=BC_No; - button.text[1] = (char*)string_no; - button.top = y + textheight +5; - } - else if ((flags & 0x03) == BC_nobuttons) - { - button.cnt = 0; - button.top = 0; - } - else - { - button.cnt = 1; - button.left[0] = 51; - button.ret[0]=BC_OK; - button.text[0] = (char*)string_ok; - button.top = y + textheight +5; - - } - - if(button.cnt) - height = textheight + button.textHeight + 12; - else - height = textheight + 6; - - left = (128-width)>>1; - - draw_block (left,y,width,height, LCD_COLOR_B, DRAW_ERASE); - draw_rect (left,y,width,height,1, LCD_COLOR_B, DRAW_PUT); - draw_rect (left+1,y+1,width-2,height-2,1, LCD_COLOR_DG, DRAW_PUT); - draw_string (left+3,y+3,st, LCD_COLOR_B, DRAW_PUT); - - for (x=0;x>1), button.top+2, - button.text[x], LCD_COLOR_B, DRAW_PUT); - } - - sel = 0; - if ((flags & 0x0C) == BC_DefaultButton2) - { - if(button.cnt>1) - sel=1; - } - else if ((flags & 0x0C) == BC_DefaultButton3) - { - if(button.cnt>2) - sel=2; - } - - setBacklight(BL_AUTO); - while(KEY_OK) {}; - while(!KEY_OK && button.cnt) - { - draw_block (button.left[sel]+1, button.top+1, 23, button.textHeight, LCD_COLOR_B, DRAW_XOR); - waitKeyUpDown(); - draw_block (button.left[sel]+1, button.top+1, 23, button.textHeight, LCD_COLOR_B, DRAW_XOR); - if(KEY_Left) - { - if(sel>0) - sel--; - } - if(KEY_Right) - { - if(selfont); - if(label->type & BC_Disabled) - c=2; - else - c=3; - - if(sel) { - draw_block (label->left,label->top,label->width,label->height, LCD_COLOR_B, DRAW_PUT); - m=DRAW_ERASE; - } - else - m=DRAW_PUT; - draw_string(label->left+1,label->top+1,label->caption, c, m); - -} - -void button_draw (BUTTON* button, unsigned char sel) -{ - unsigned char c; - unsigned char cleft; - unsigned char ctop; - - set_font (button->font); - if(button->type & BC_Disabled) - c=2; - else - c=3; - - draw_block(button->left,button->top,button->width,button->height,3,DRAW_ERASE); - draw_rect(button->left,button->top,button->width,button->height,1,c,DRAW_PUT); - draw_rect(button->left+1,button->top+1,button->width-2,button->height-2,1,c-1,DRAW_PUT); - - cleft = ((button->width - get_stringwidth(button->caption))>>1) +button->left; - ctop = ((button->height - get_stringheight(button->caption)+1)>>1) +button->top; - - if (sel == 2) - { - draw_block (button->left+2,button->top+2,button->width-4,button->height-4, LCD_COLOR_B, DRAW_PUT); - draw_string(cleft,ctop,button->caption, c, DRAW_ERASE); - } - else if (sel) - { - draw_block(button->left+2,button->top+2,button->width-4,button->height-4,1,DRAW_PUT); - draw_string(cleft,ctop,button->caption, c, DRAW_PUT); - } - else - draw_string(cleft,ctop,button->caption, c, DRAW_PUT); -} // button_draw - -void numbox_draw(NUMBOX* numbox, unsigned char sel) { - - unsigned char c; - unsigned char m; - - set_font (numbox->font); - if(numbox->type & BC_Disabled) - c=2; - else - c=3; - - if(sel) { - draw_block (numbox->left,numbox->top,numbox->width,numbox->height, LCD_COLOR_B, DRAW_PUT); - m=DRAW_ERASE; - } - else - m=DRAW_PUT; - draw_numU(numbox->left+1,numbox->top+1,numbox->value, 0, c, m); - - -} - -void txtbox_draw(TXTBOX* txtbox, unsigned char sel) { - - unsigned char c; - unsigned char m; - - set_font (txtbox->font); - if(txtbox->type & BC_Disabled) - c=2; - else - c=3; - - if(sel) { - draw_block (txtbox->left,txtbox->top,txtbox->width,txtbox->height, LCD_COLOR_B, DRAW_PUT); - m=DRAW_ERASE; - } - else - m=DRAW_PUT; - draw_string(txtbox->left+1,txtbox->top+1,txtbox->text, c, m); - -} - -void datebox_draw(DATEBOX* datebox, unsigned char sel) { - - unsigned char c; - unsigned char m; - unsigned char w1,w2; - - set_font (datebox->font); - if(datebox->type & BC_Disabled) - c=2; - else - c=3; - - if(sel) { - draw_block (datebox->left,datebox->top,datebox->width,datebox->height, LCD_COLOR_B, DRAW_PUT); - m=DRAW_ERASE; - } - else - m=DRAW_PUT; - - w1 = get_stringwidth("0")+1; - w2 = get_stringwidth(".")+1; - - draw_char(1+datebox->left ,datebox->top+1,days[datebox->date.weekday * 2], c, m); - draw_char(1+datebox->left+1*w1 ,datebox->top+1,days[(datebox->date.weekday * 2) + 1], c, m); - draw_hexC(1+datebox->left+2*w1+1*w2,datebox->top+1,datebox->date.day, c, m); - draw_char(1+datebox->left+4*w1+1*w2,datebox->top+1,'.', c, m); - draw_hexC(1+datebox->left+4*w1+2*w2,datebox->top+1,datebox->date.month, c, m); - draw_char(1+datebox->left+6*w1+2*w2,datebox->top+1,'.', c, m); - draw_hexC(1+datebox->left+6*w1+3*w2,datebox->top+1,datebox->date.year, c, m); - -} - -void timebox_draw(TIMEBOX* timebox, unsigned char sel) { - - unsigned char c; - unsigned char m; - unsigned char w1,w2; - - set_font (timebox->font); - if(timebox->type & BC_Disabled) - c=2; - else - c=3; - - if(sel) { - draw_block (timebox->left,timebox->top,timebox->width,timebox->height, LCD_COLOR_B, DRAW_PUT); - m=DRAW_ERASE; - } - else - m=DRAW_PUT; - - w1 = get_stringwidth("0")+1; - w2 = get_stringwidth(":")+1; - - draw_hexC(1+timebox->left ,timebox->top+1,timebox->time.hour, c, m); - draw_char(1+timebox->left+2*w1 ,timebox->top+1,':', c, m); - draw_hexC(1+timebox->left+2*w1+1*w2,timebox->top+1,timebox->time.minute, c, m); - draw_char(1+timebox->left+4*w1+1*w2,timebox->top+1,':', c, m); - draw_hexC(1+timebox->left+4*w1+2*w2,timebox->top+1,timebox->time.second, c, m); - -} - -void listbox_draw (LISTBOX* listbox, unsigned char sel) -{ - unsigned char c; - unsigned char m; - unsigned char arrow = (listbox->height - 6) / 2 + 1; - - set_font (listbox->font); - if(listbox->type & BC_Disabled) - c=2; - else - c=3; - - if (sel) - { - draw_block (listbox->left,listbox->top,listbox->width,listbox->height, - LCD_COLOR_B, DRAW_PUT); - m=DRAW_ERASE; - } - else - m=DRAW_PUT; - - if(listbox->listindex < listbox->listcount) - draw_string(listbox->left+1,listbox->top+1,listbox->list[listbox->listindex], c, m); - if (sel) - { - draw_block (listbox->left + listbox->width-((arrow+1)*2+1),listbox->top, - (arrow+1)*2+1,listbox->height, - LCD_COLOR_B, DRAW_PUT); - draw_arrow (listbox->left + listbox->width-(arrow+1)*2, listbox->top + (listbox->height/2)-arrow, - ARROW_LEFT, arrow, LCD_COLOR_B, DRAW_ERASE); - draw_arrow (listbox->left + listbox->width-arrow-1, listbox->top + (listbox->height/2)-arrow, - ARROW_RIGHT, arrow, LCD_COLOR_B, DRAW_ERASE); - } -} - -void control_draw (CONTROL* control, unsigned char select) -{ - draw_block (control->left,control->top,control->width,control->height,LCD_COLOR_B,DRAW_ERASE); - switch ((control->type) & 0x1F) - { - case BC_Label: - label_draw((LABEL*)control,select); - break; - case BC_Button: - button_draw((BUTTON*)control,select); - break; - case BC_Numbox: - numbox_draw((NUMBOX*)control,select); - break; - case BC_Txtbox: - txtbox_draw((TXTBOX*)control,select); - break; - case BC_Datebox: - datebox_draw((DATEBOX*)control,select); - break; - case BC_Timebox: - timebox_draw((TIMEBOX*)control,select); - break; - case BC_Listbox: - listbox_draw((LISTBOX*)control,select); - break; - } -} // control_draw - -void form_draw (FORM* form) -{ - unsigned char x; - - lcd_fill(0); - set_font(BOLDFONT); - draw_string (0, 0, form->caption, LCD_COLOR_B, DRAW_PUT); - draw_block (0,10,128,2, LCD_COLOR_B, DRAW_PUT); - - if (form->footer) - { - set_font(SMALLFONT); - draw_block (0,149,128,2, LCD_COLOR_B, DRAW_PUT); - draw_string (0,152, form->footer, LCD_COLOR_B, DRAW_PUT); - } - - for (x=0;xcontrolcount;x++) - { - control_draw(form->controls[x],(form->sel == x)); - } -} // form_draw - -unsigned char get_prev_control(FORM* form) { - - signed short x; - unsigned char type; - - for(x=form->sel-1;x>-1;x--) { - type = (form->controls[x])->type; - if(!(type & 0xe0)) - return x; - } - for(x=form->controlcount-1;x>form->sel;x--) { - type = (form->controls[x])->type; - if(!(type & 0xe0)) - return x; - } - return form->sel; -} - -unsigned char get_next_control(FORM* form) { - - unsigned char x; - unsigned char type; - - for(x=form->sel+1;xcontrolcount;x++) { - type = (form->controls[x])->type; - if(!(type & 0xe0)) - return x; - } - for(x=0;xsel;x++) { - type = (form->controls[x])->type; - if(!(type & 0xe0)) - return x; - } - return form->sel; -} - -extern void cpu_idle(); - -void waitFormKeyUp(void) -{ - while((keys[0] != 0) || (keys[1] != 0)) { - if(currentform->flags & BC_Timer_expired) { - currentform->flags &= ~BC_Timer_expired; - if(currentform->timer) - currentform->timer(currentform); - } - if(currentform->flags & BC_Form_redraw) { - form_draw(currentform); - currentform->flags &= ~BC_Form_redraw; - } - } -} - -void waitFormKeyDown(void) -{ - while((keys[0] == 0) && (keys[1] == 0)) { - if(currentform->flags & BC_Timer_expired) { - currentform->flags &= ~BC_Timer_expired; - if(currentform->timer) - currentform->timer(currentform); - } - if(currentform->flags & BC_Form_redraw) { - form_draw(currentform); - currentform->flags &= ~BC_Form_redraw; - } - cpu_idle(); - }; - setBacklight(BL_AUTO); // pwm value -} - -#define waitFormKeyUpDown() { waitFormKeyUp(); waitFormKeyDown(); } - -void numbox_entervalue(NUMBOX* numbox) { - - unsigned char digit[5]; - unsigned char len; - unsigned char maxlen; - unsigned char cpos; - unsigned char width; - unsigned char space; - unsigned char k; - unsigned short value; - unsigned short x; - unsigned char h; - - if((KEY_Left) || (KEY_Right)) { - if((KEY_Left) && (numbox->value > numbox->min)) - numbox->value--; - if((KEY_Right) && (numbox->value < numbox->max)) - numbox->value++; - return; - } - set_font(numbox->font); - width = get_stringwidth("0"); - space = get_stringwidth("00") - 2 * width; - h=get_stringheight("0"); - - cpos = 0; - len = 0; - x=numbox->max; - for(maxlen = 1;x > 9;maxlen++) - x /= 10; - - while(!(KEY_Exit || KEY_OK)) { - k=getKeynum(); - if((k > 15) && (k < 26)) { - digit[cpos] = k-15; - if(digit[cpos] > 9) - digit[cpos] = 0; - if(len < maxlen) - len++; - cpos++; - if(cpos == maxlen) - cpos--; - } - if(KEY_Left) { - if(len) - len--; - cpos = len; - } - draw_block(numbox->left,numbox->top,numbox->width,numbox->height,3,DRAW_ERASE); - for(x=0; xleft+1)+(width+space)*x ,numbox->top+1, digit[x] + 0x30,3, DRAW_PUT); - draw_hline ((numbox->left+1)+ (width+space)*cpos,numbox->top+h,width, LCD_COLOR_B, DRAW_PUT); - waitFormKeyUpDown(); - } - if((KEY_OK) && len) { - x=1; - value = 0; - for(k=len;k;k--) { - value += x*digit[k-1]; - x *=10; - } - if(value > numbox->max) - numbox->value = numbox->max; - else if(value < numbox->min) - numbox->value = numbox->min; - else - numbox->value = value; - } - waitFormKeyUp(); -} - -void txtbox_entervalue(TXTBOX* txtbox) { - - unsigned char k; - unsigned char kpos; - unsigned char kold; - unsigned char cpos; - unsigned char x; - unsigned char y; - unsigned char h; - char buffer[txtbox->maxlen]; - - memcpy(buffer,txtbox->text,txtbox->maxlen); - - if(KEY_Right) { - for(cpos=0;buffer[cpos] !=0;cpos++); - } - else { - cpos = 0; - buffer[cpos] = 0; - } - if(cpos == txtbox->maxlen-1) - cpos--; - kpos = 0; - - h=get_stringheight("0"); - kold = 10; - while(!(KEY_Exit || KEY_OK)) { - k=getKeynum(); - if((k > 15) && (k < 26)) { - k = k-16; - if(k != kold) { - kpos = 0; - if((cpos < txtbox->maxlen-2) && (buffer[cpos])) - cpos++; - } - else { - kpos++; - if(TXTKeys[k][kpos] == 0) - kpos = 0; - } - buffer[cpos] = TXTKeys[k][kpos]; - buffer[cpos+1] = 0; - kold = k; - } - if(KEY_Right) { - if((cpos < txtbox->maxlen-2) && (buffer[cpos])) { - cpos++; - kold = 10; - } - } - if(KEY_Left) { - if((cpos > 0) && (!buffer[cpos])) - cpos--; - buffer[cpos] = 0; - } - draw_block(txtbox->left,txtbox->top,txtbox->width,txtbox->height,3,DRAW_ERASE); - draw_string (txtbox->left+1,txtbox->top+1,buffer, LCD_COLOR_B, DRAW_PUT); - x=get_stringwidth(buffer); - y=get_stringwidth(&buffer[cpos]); - if(!y){ - y=get_stringwidth("A"); - x+=y+1; - } - - draw_block(txtbox->left+x-y,txtbox->top,y+2,h+2,3,DRAW_XOR); - - waitKeyUp(); - if((buffer[cpos]) && (cpos < txtbox->maxlen-2)) { - unsigned short cnt; - cnt = Cursor_timeout; - while(((keys[0] == 0) && (keys[1] == 0)) && --cnt) { - wait5ms(); - } - setBacklight(BL_AUTO); - if(!cnt) { - if((cpos < txtbox->maxlen-2) && (buffer[cpos])) - cpos++; - buffer[cpos] = 0; - kold = 10; - } - } - else - waitFormKeyDown(); - - } - if(KEY_OK) { - memcpy(txtbox->text,buffer,txtbox->maxlen); - } - waitFormKeyUp(); -} - -void datebox_entervalue(DATEBOX* datebox) { - unsigned char cursor; - signed char x; - signed char v; - char cpos[3]; - unsigned char w1, w2; - struct date_ dateold; - unsigned char exit = 0; - - if(KEY_Right) - cursor = 2; - else - cursor = 0; - - dateold = datebox->date; - - w1 = get_stringwidth("0")+1; - w2 = get_stringwidth(".")+1; - - cpos[0] = 2 * w1 + 1 * w2; - cpos[1] = 4 * w1 + 2 * w2; - cpos[2] = 6 * w1 + 3 * w2; - - draw_block(datebox->left,datebox->top,datebox->width,datebox->height,3,DRAW_ERASE); - datebox_draw(datebox,0); - draw_block(datebox->left+ cpos[cursor],datebox->top,2*w1+1,datebox->height,3,DRAW_XOR); - - while(!(KEY_Exit | KEY_OK)) { - - if(KEY_Left || KEY_Right) { - cursor += 3; - if (KEY_Left) - cursor--; - else - cursor++; - cursor %= 3; - } - - x = getNumKeyValue(); - if (x >= 0) { - v= x<<4; - draw_block(datebox->left+cpos[cursor],datebox->top,2*w1+1,datebox->height,3,DRAW_ERASE); - draw_char(datebox->left+1+cpos[cursor],datebox->top+1, x + 0x30,3, DRAW_PUT); - draw_char(datebox->left+w1+1+cpos[cursor],datebox->top+1, '_',3, DRAW_PUT); - waitKeyUpDown(); - x = getNumKeyValue(); - if (x >= 0) { - v |= x; - switch (cursor++) { - case 0: - datebox->date.day = checkBCD(v,31,1); - break; - case 1: - datebox->date.month = checkBCD(v,12,1); - break; - case 2: - datebox->date.year = checkBCD(v,99,0); - exit++; - break; - } - cursor %= 3; - } - } - - if(KEY_Down || KEY_Up) { - if (KEY_Up) - x=1; - else - x=-1; - switch (cursor) { - case 0: - calcBCD((unsigned char*)&datebox->date.day, x, 31, 1); - break; - case 1: - calcBCD((unsigned char*)&datebox->date.month, x, 12, 1); - break; - case 2: - calcBCD((unsigned char*)&datebox->date.year, x, 99, 0); - break; - } - } - calcweekday(&datebox->date); - - draw_block(datebox->left,datebox->top,datebox->width,datebox->height,3,DRAW_ERASE); - datebox_draw(datebox,0); - draw_block(datebox->left+ cpos[cursor],datebox->top,2*w1+1,datebox->height,3,DRAW_XOR); - - if(exit) - break; - - waitFormKeyUpDown(); - } - - if (KEY_OK | exit) { - switch (datebox->date.month) { - case 0x02: - x = (((datebox->date.year & 0xf0)>>4) * 10 + (datebox->date.year & 0x0f)) & 0x03; - if (x && (datebox->date.day > 0x28)) - datebox->date.day = 0x28; - else if (!x && (datebox->date.day > 0x29)) - datebox->date.day = 0x29; - break; - case 0x04: - case 0x06: - case 0x09: - case 0x11: - if (datebox->date.day > 0x30) - datebox->date.day = 0x30; - } - calcweekday(&datebox->date); - } - else - datebox->date = dateold; - - waitFormKeyUp(); -} - -void timebox_entervalue(TIMEBOX* timebox) { - unsigned char cursor; - signed char x; - signed char v; - char cpos[3]; - unsigned char w1, w2; - struct time_ timeold; - unsigned char exit = 0; - - if(KEY_Right) - cursor = 2; - else - cursor = 0; - - timeold = timebox->time; - - w1 = get_stringwidth("0")+1; - w2 = get_stringwidth(":")+1; - - cpos[0] = 0; - cpos[1] = 2 * w1 + 1 * w2; - cpos[2] = 4 * w1 + 2 * w2; - - draw_block(timebox->left,timebox->top,timebox->width,timebox->height,3,DRAW_ERASE); - timebox_draw(timebox,0); - draw_block(timebox->left+ cpos[cursor],timebox->top,2*w1+1,timebox->height,3,DRAW_XOR); - - while(!(KEY_Exit | KEY_OK)) { - - if(KEY_Left || KEY_Right) { - cursor += 3; - if (KEY_Left) - cursor--; - else - cursor++; - cursor %= 3; - } - - x = getNumKeyValue(); - if (x >= 0) { - v= x<<4; - draw_block(timebox->left+cpos[cursor],timebox->top,2*w1+1,timebox->height,3,DRAW_ERASE); - draw_char(timebox->left+1+cpos[cursor],timebox->top+1, x + 0x30,3, DRAW_PUT); - draw_char(timebox->left+w1+1+cpos[cursor],timebox->top+1, '_',3, DRAW_PUT); - waitKeyUpDown(); - x = getNumKeyValue(); - if (x >= 0) { - v |= x; - switch (cursor++) { - case 0: - timebox->time.hour = checkBCD(v,23,0); - break; - case 1: - timebox->time.minute = checkBCD(v,59,0); - break; - case 2: - timebox->time.second = checkBCD(v,59,0); - exit++; - break; - } - cursor %= 3; - } - } - - if(KEY_Down || KEY_Up) { - if (KEY_Up) - x=1; - else - x=-1; - switch (cursor) { - case 0: - calcBCD((unsigned char*)&timebox->time.hour, x, 23, 0); - break; - case 1: - calcBCD((unsigned char*)&timebox->time.minute, x, 59, 0); - break; - case 2: - calcBCD((unsigned char*)&timebox->time.second, x, 59, 0); - break; - } - } - - draw_block(timebox->left,timebox->top,timebox->width,timebox->height,3,DRAW_ERASE); - timebox_draw(timebox,0); - draw_block(timebox->left+ cpos[cursor],timebox->top,2*w1+1,timebox->height,3,DRAW_XOR); - - - if(exit) - break; - - waitFormKeyUpDown(); - } - - if (KEY_Exit) - timebox->time = timeold; - - waitFormKeyUp(); -} - -void listbox_changevalue (LISTBOX* listbox) -{ - if((KEY_Left) && listbox->listindex) - listbox->listindex--; - if((KEY_Right) && listbox->listindex < listbox->listcount - 1) - listbox->listindex++; -} - -void control_onkey(FORM* form, CONTROL* control) { - unsigned short x; - - if (KEY_OK) - { - switch ((control->type) & 0x1F) { - case BC_Label: - case BC_Txtbox: - case BC_Numbox: - case BC_Datebox: - case BC_Timebox: - case BC_Listbox: - if (control->ONclick) - control->ONclick(form,control); - waitFormKeyUp(); - break; - case BC_Button: - x=form->sel; - button_draw((BUTTON*)control,2); - if (control->ONclick) - control->ONclick(form,control); - waitFormKeyUp(); - if(x==form->sel) - x=1; - else - x=0; - button_draw((BUTTON*)control,x); - break; - } - return; - } - switch ((control->type) & 0x1F) { - case BC_Label: - case BC_Button: - break; - case BC_Numbox: - { - NUMBOX* numbox = (NUMBOX*)control; - x=numbox->value; - if(((getKeynum() > 15) && (getKeynum() < 26)) || (KEY_Left) || (KEY_Right)) - numbox_entervalue(numbox); - if((x!=numbox->value) && (numbox->ONchange)) - numbox->ONchange(form,control); - } - break; - case BC_Txtbox: - { - TXTBOX* txtbox = (TXTBOX*)control; - crc oldtext = CRCs(txtbox->text); - if(((getKeynum() > 15) && (getKeynum() < 26)) | KEY_Right) - txtbox_entervalue(txtbox); - if((oldtext != CRCs(txtbox->text)) && (txtbox->ONchange)) - txtbox->ONchange(form,control); - } - break; - case BC_Datebox: - { - DATEBOX* datebox = (DATEBOX*)control; - struct date_ olddate = datebox->date; - if(((getKeynum() > 15) && (getKeynum() < 26)) | KEY_Right) - datebox_entervalue(datebox); - if(memcmp(&olddate,&datebox->date,4) && (datebox->ONchange)) - datebox->ONchange(form,control); - } - break; - case BC_Timebox: - { - TIMEBOX* timebox = (TIMEBOX*)control; - struct time_ oldtime = timebox->time; - if(((getKeynum() > 15) && (getKeynum() < 26)) | KEY_Right) - timebox_entervalue(timebox); - if(memcmp(&oldtime,&timebox->time,4) && (timebox->ONchange)) - timebox->ONchange(form,control); - } - break; - case BC_Listbox: - { - LISTBOX* listbox = (LISTBOX*)control; - unsigned char oldvalue = listbox->listindex; - if(KEY_Left | KEY_Right) - listbox_changevalue((LISTBOX*) control); - if((oldvalue!=listbox->listindex) && (listbox->ONchange)) - listbox->ONchange(form,control); - } - break; - } - control_draw(control,1); -} - -void form_ontimer(unsigned int cb) { - currentform->flags |= BC_Timer_expired; - //currentform->timer(currentform); -} - - - -// displays a form and passes input to form element handlers -void form_exec(FORM* form) { - - unsigned char x; - FORM* oldform; - unsigned int form_cb = 0xff; - - oldform = currentform; - currentform = form; - - if(form->load) - form->load(form); - - if(form->controls[form->sel]->type & BC_NoTabStop) { - x = get_next_control(form); - form->sel = x; - } - - form_draw(form); - - if(form->timer) { - form_cb = addTimerCB(form_ontimer, form->intervall); - startCB(form_cb); - sysInfo |= SYS_NOPDOWN; - } - - while(KEY_Exit) {}; - while((!KEY_Exit) && (!(form->flags & BC_Form_exit))) - { - waitFormKeyUpDown(); - - if(KEY_Up | KEY_Down) { - if(KEY_Up) - x = get_prev_control(form); - else - x = get_next_control(form); - control_draw(form->controls[form->sel],0); - form->sel = x; - control_draw(form->controls[form->sel],1); - } - else - control_onkey(form,form->controls[form->sel]); - } - - if(form_cb != 0xff) { - sysInfo &= ~SYS_NOPDOWN; - stopCB(form_cb); - removeTimerCB(form_cb); - } - - if(form->close) - form->close(form); - - currentform = oldform; - - while(KEY_Exit); -} diff --git a/boop/gui/controls.h b/boop/gui/controls.h deleted file mode 100644 index a13a70a..0000000 --- a/boop/gui/controls.h +++ /dev/null @@ -1,194 +0,0 @@ -/* - controls.h - GUI controls - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef CONTROLS_H -#define CONTROLS_H - -#include "rtc.h" - -#define BC_OKOnly 0 -#define BC_YesNo 1 -#define BC_nobuttons 2 -#define BC_DefaultButton1 0 -#define BC_DefaultButton2 4 -#define BC_DefaultButton3 8 - -#define BC_OK 1 -#define BC_Yes 2 -#define BC_No 3 - -#define BC_NoTabStop 0x80 -#define BC_Disabled 0x40 - -#define BC_Label 1 -#define BC_Labelnotab (BC_Label | BC_NoTabStop) -#define BC_Button 2 -#define BC_Numbox 3 -#define BC_Txtbox 4 -#define BC_Datebox 5 -#define BC_Timebox 6 -#define BC_Listbox 7 - -extern struct FORM dummyform; -extern struct CONTROL dummycontrol; - -typedef void(*event)(struct FORM* form, struct CONTROL* control); -typedef void(*fevent)(struct FORM* form); - -typedef struct CONTROL -{ - unsigned char type; - unsigned char left; - unsigned char top; - unsigned char width; - unsigned char height; - unsigned char font; - unsigned char tag1; - unsigned char tag2; - char* caption; - event ONclick; - event ONchange; -} CONTROL; - -typedef struct FORM -{ - char* caption; - char* footer; - fevent load; - fevent close; - fevent timer; - unsigned long tag; - CONTROL* *controls; - unsigned char sel; - unsigned char controlcount; - unsigned char flags; - unsigned char intervall; -} FORM; - -//form.flags -#define BC_Form_exit (1<<0) -#define BC_Timer_expired (1<<1) -#define BC_Form_redraw (1<<2) - -typedef struct LABEL -{ - unsigned char type; - unsigned char left; - unsigned char top; - unsigned char width; - unsigned char height; - unsigned char font; - unsigned short tag; - char* caption; - event ONclick; -} LABEL; - -typedef struct BUTTON -{ - unsigned char type; - unsigned char left; - unsigned char top; - unsigned char width; - unsigned char height; - unsigned char font; - unsigned short tag; - char* caption; - event ONclick; -} BUTTON; - -typedef struct NUMBOX -{ - unsigned char type; - unsigned char left; - unsigned char top; - unsigned char width; - unsigned char height; - unsigned char font; - unsigned short value; - unsigned short min; - unsigned short max; - event ONclick; - event ONchange; -} NUMBOX; - -typedef struct TXTBOX -{ - unsigned char type; - unsigned char left; - unsigned char top; - unsigned char width; - unsigned char height; - unsigned char font; - unsigned char maxlen; - unsigned char tag; - char* text; - event ONclick; - event ONchange; -} TXTBOX; - -typedef struct DATEBOX -{ - unsigned char type; - unsigned char left; - unsigned char top; - unsigned char width; - unsigned char height; - unsigned char font; - unsigned short tag; - struct date_ date; - event ONclick; - event ONchange; -} DATEBOX; - -typedef struct TIMEBOX -{ - unsigned char type; - unsigned char left; - unsigned char top; - unsigned char width; - unsigned char height; - unsigned char font; - unsigned short tag; - struct time_ time; - event ONclick; - event ONchange; -} TIMEBOX; - -typedef struct LISTBOX -{ - unsigned char type; - unsigned char left; - unsigned char top; - unsigned char width; - unsigned char height; - unsigned char font; - unsigned char listindex; - unsigned char listcount; - char* *list; - event ONclick; - event ONchange; -} LISTBOX; - -unsigned char msgbox(unsigned char x,unsigned short flags, char *st); -void form_draw(FORM* form); -void control_draw(CONTROL* control, unsigned char select); -void form_exec(FORM* form); - -void listbox_changevalue (LISTBOX* listbox); - -#endif diff --git a/boop/gui/iconCross.h b/boop/gui/iconCross.h deleted file mode 100644 index c93ba16..0000000 --- a/boop/gui/iconCross.h +++ /dev/null @@ -1,144 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: R:\Project\GrayScaler\Icons\Cross.bmp -// -// ICON_GRAY - 2 bpp (Bit per Pixel) -// sizeof (iconCross.data) == 224 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconCross = -{ - /* width = */ 28, - /* height = */ 28, - /* info = */ ICON_INFO (ICON_GRAY) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - 0x00, 0x00, - 0x00, 0x00, - 0xc0, 0x80, - 0xe0, 0xc0, - 0xf0, 0xf0, - 0x38, 0x70, - 0x1c, 0x38, - 0x1c, 0x1c, - 0x0c, 0x0e, - 0x0e, 0x04, - 0x06, 0x0c, - 0x06, 0x06, - 0x06, 0x06, - 0x07, 0xff, - 0x07, 0xff, - 0x06, 0x06, - 0x06, 0x06, - 0x06, 0x04, - 0x0e, 0x04, - 0x0c, 0x0e, - 0x1c, 0x1c, - 0x1c, 0x38, - 0x38, 0x70, - 0xf0, 0xf0, - 0xe0, 0xc0, - 0xc0, 0x80, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 1 --- - 0x60, 0x60, - 0xfe, 0xf9, - 0xff, 0xff, - 0x03, 0x65, - 0x00, 0x60, - 0x00, 0x60, - 0x00, 0x60, - 0x00, 0x60, - 0xf0, 0xf8, - 0x6c, 0x94, - 0x62, 0x9e, - 0x62, 0x9d, - 0x61, 0x9f, - 0xff, 0x61, - 0xff, 0x61, - 0x61, 0x9f, - 0x62, 0x9d, - 0x62, 0x9e, - 0x6c, 0x94, - 0xf0, 0xf8, - 0x00, 0x60, - 0x00, 0x60, - 0x00, 0x60, - 0x00, 0x60, - 0x03, 0x65, - 0xff, 0xff, - 0xfe, 0xf9, - 0x60, 0x60, - //--- Page 2 --- - 0x00, 0x00, - 0x07, 0x09, - 0x3f, 0x1f, - 0x7c, 0x3a, - 0xf0, 0xf0, - 0xc0, 0xe0, - 0x80, 0xc0, - 0x80, 0x80, - 0x00, 0x01, - 0x03, 0x02, - 0x04, 0x07, - 0x04, 0x0b, - 0x08, 0x0f, - 0x0f, 0xf8, - 0x0f, 0xf8, - 0x08, 0x0f, - 0x04, 0x0b, - 0x04, 0x07, - 0x03, 0x02, - 0x00, 0x01, - 0x80, 0x80, - 0x80, 0xc0, - 0xc0, 0xe0, - 0xf0, 0xf0, - 0x7c, 0x3a, - 0x3f, 0x1f, - 0x07, 0x09, - 0x00, 0x00, - //--- Page 3 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x01, 0x00, - 0x03, 0x01, - 0x03, 0x03, - 0x03, 0x07, - 0x07, 0x02, - 0x06, 0x03, - 0x06, 0x06, - 0x06, 0x06, - 0x0e, 0x0f, - 0x0e, 0x0f, - 0x06, 0x06, - 0x06, 0x06, - 0x06, 0x02, - 0x07, 0x02, - 0x03, 0x07, - 0x03, 0x03, - 0x03, 0x01, - 0x01, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 - } -}; - - diff --git a/boop/gui/iconCross_t.h b/boop/gui/iconCross_t.h deleted file mode 100644 index 18fd07a..0000000 --- a/boop/gui/iconCross_t.h +++ /dev/null @@ -1,148 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: R:\Project\GrayScaler\Icons\Cross_t.bmp -// -// ICON_GRAY_TRANSPARENT - 3 bpp (Bit per Pixel) -// sizeof (iconCross_t.data) == 336 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconCross_t = -{ - /* width = */ 28, - /* height = */ 28, - /* info = */ ICON_INFO (ICON_GRAY_TRANSPARENT) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - // v--- Alpha Channel - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x80, 0xc0, 0xc0, - 0xe0, 0xc0, 0xe0, - 0xf0, 0xf0, 0xf0, - 0x38, 0x70, 0x78, - 0x18, 0x3c, 0x3c, - 0x1c, 0x1c, 0x1c, - 0x0c, 0x0e, 0x0e, - 0x0e, 0x04, 0x0e, - 0x06, 0x0c, 0x0e, - 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, - 0x07, 0xff, 0xff, - 0x07, 0xff, 0xff, - 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, - 0x06, 0x0c, 0x0e, - 0x0e, 0x04, 0x0e, - 0x0c, 0x0e, 0x0e, - 0x1c, 0x1c, 0x1c, - 0x18, 0x3c, 0x3c, - 0x38, 0x70, 0x78, - 0xf0, 0xf0, 0xf0, - 0xe0, 0xc0, 0xe0, - 0x80, 0xc0, 0xc0, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - //--- Page 1 --- - // v--- Alpha Channel - 0x60, 0x60, 0x60, - 0xfe, 0xf9, 0xff, - 0xff, 0xff, 0xff, - 0x03, 0x65, 0x67, - 0x00, 0x60, 0x60, - 0x00, 0x60, 0x60, - 0x00, 0x60, 0x60, - 0x00, 0x60, 0x60, - 0xf0, 0xf8, 0xf8, - 0x6c, 0x94, 0xfc, - 0x62, 0x9e, 0xfe, - 0x62, 0x9d, 0xff, - 0x61, 0x9f, 0xff, - 0xff, 0x61, 0xff, - 0xff, 0x61, 0xff, - 0x61, 0x9f, 0xff, - 0x62, 0x9d, 0xff, - 0x62, 0x9e, 0xfe, - 0x6c, 0x94, 0xfc, - 0xf0, 0xf8, 0xf8, - 0x00, 0x60, 0x60, - 0x00, 0x60, 0x60, - 0x00, 0x60, 0x60, - 0x00, 0x60, 0x60, - 0x03, 0x65, 0x67, - 0xff, 0xff, 0xff, - 0xfe, 0xf9, 0xff, - 0x60, 0x60, 0x60, - //--- Page 2 --- - // v--- Alpha Channel - 0x00, 0x00, 0x00, - 0x07, 0x09, 0x0f, - 0x1f, 0x3f, 0x3f, - 0x7c, 0x3a, 0x7e, - 0xf0, 0xf0, 0xf0, - 0xc0, 0xe0, 0xe0, - 0x80, 0xc0, 0xc0, - 0x80, 0x80, 0x80, - 0x00, 0x01, 0x01, - 0x03, 0x02, 0x03, - 0x04, 0x07, 0x07, - 0x04, 0x0b, 0x0f, - 0x08, 0x0f, 0x0f, - 0x0f, 0xf8, 0xff, - 0x0f, 0xf8, 0xff, - 0x08, 0x0f, 0x0f, - 0x04, 0x0b, 0x0f, - 0x04, 0x07, 0x07, - 0x03, 0x02, 0x03, - 0x00, 0x01, 0x01, - 0x80, 0x80, 0x80, - 0x80, 0xc0, 0xc0, - 0xc0, 0xe0, 0xe0, - 0xf0, 0xf0, 0xf0, - 0x7c, 0x3a, 0x7e, - 0x1f, 0x3f, 0x3f, - 0x07, 0x09, 0x0f, - 0x00, 0x00, 0x00, - //--- Page 3 --- - // v--- Alpha Channel - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x01, 0x00, 0x01, - 0x01, 0x03, 0x03, - 0x03, 0x03, 0x03, - 0x03, 0x07, 0x07, - 0x07, 0x02, 0x07, - 0x06, 0x03, 0x07, - 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, - 0x0e, 0x0f, 0x0f, - 0x0e, 0x0f, 0x0f, - 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, - 0x06, 0x03, 0x07, - 0x07, 0x02, 0x07, - 0x03, 0x07, 0x07, - 0x03, 0x03, 0x03, - 0x01, 0x03, 0x03, - 0x01, 0x00, 0x01, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00 - } -}; - - diff --git a/boop/gui/iconFf.h b/boop/gui/iconFf.h deleted file mode 100644 index 3787757..0000000 --- a/boop/gui/iconFf.h +++ /dev/null @@ -1,56 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: R:\Project\GrayScaler\Icons\FF.bmp -// -// ICON_GRAY - 2 bpp (Bit per Pixel) -// sizeof (iconFf.data) == 52 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconFf = -{ - /* width = */ 13, - /* height = */ 13, - /* info = */ ICON_INFO (ICON_GRAY) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - 0xfc, 0xfa, - 0x06, 0x03, - 0x03, 0x00, - 0xf9, 0xf9, - 0xf1, 0xf9, - 0xe1, 0xf1, - 0x41, 0xe1, - 0xf9, 0xf9, - 0xf1, 0xf9, - 0xe1, 0xf1, - 0x43, 0xe0, - 0x06, 0x03, - 0xfc, 0xfa, - //--- Page 1 --- - 0x07, 0x0b, - 0x0c, 0x18, - 0x18, 0x00, - 0x13, 0x13, - 0x11, 0x13, - 0x10, 0x11, - 0x10, 0x10, - 0x13, 0x13, - 0x11, 0x13, - 0x10, 0x11, - 0x10, 0x00, - 0x08, 0x18, - 0x07, 0x0b - } -}; - - diff --git a/boop/gui/iconFr.h b/boop/gui/iconFr.h deleted file mode 100644 index c022efd..0000000 --- a/boop/gui/iconFr.h +++ /dev/null @@ -1,56 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: R:\Project\GrayScaler\Icons\FR.bmp -// -// ICON_GRAY - 2 bpp (Bit per Pixel) -// sizeof (iconFr.data) == 52 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconFr = -{ - /* width = */ 13, - /* height = */ 13, - /* info = */ ICON_INFO (ICON_GRAY) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - 0xfc, 0xfa, - 0x02, 0x03, - 0x41, 0xe0, - 0xe1, 0xf1, - 0xf1, 0xf9, - 0xf9, 0xf9, - 0x41, 0xe1, - 0xe1, 0xf1, - 0xf1, 0xf9, - 0xf9, 0xf9, - 0x03, 0x00, - 0x06, 0x03, - 0xfc, 0xfa, - //--- Page 1 --- - 0x07, 0x0b, - 0x0c, 0x18, - 0x18, 0x00, - 0x10, 0x11, - 0x11, 0x13, - 0x13, 0x13, - 0x10, 0x10, - 0x10, 0x11, - 0x11, 0x13, - 0x13, 0x13, - 0x18, 0x00, - 0x0c, 0x18, - 0x07, 0x0b - } -}; - - diff --git a/boop/gui/iconHourglas.h b/boop/gui/iconHourglas.h deleted file mode 100644 index 6e99e15..0000000 --- a/boop/gui/iconHourglas.h +++ /dev/null @@ -1,173 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: R:\Project\GrayScaler\Icons\Hourglas.bmp -// -// ICON_GRAY - 2 bpp (Bit per Pixel) -// sizeof (iconHourglas.data) == 280 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconHourglas = -{ - /* width = */ 28, - /* height = */ 40, - /* info = */ ICON_INFO (ICON_GRAY) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - 0x0e, 0x11, - 0x3f, 0x1e, - 0x7f, 0x3a, - 0xff, 0x6a, - 0xff, 0xca, - 0xff, 0xca, - 0x3f, 0x0a, - 0x3b, 0x0e, - 0x3b, 0x0e, - 0x3b, 0x0e, - 0x3b, 0x0e, - 0x3b, 0x0e, - 0x3b, 0x0e, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0x3f, 0x0a, - 0xff, 0xca, - 0xff, 0xca, - 0xff, 0x6a, - 0x7f, 0x3a, - 0x3f, 0x1e, - 0x0e, 0x11, - //--- Page 1 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0xff, - 0xff, 0xff, - 0xff, 0x0f, - 0xfe, 0xfd, - 0x70, 0xb8, - 0xe0, 0x70, - 0xc0, 0xa0, - 0x80, 0x50, - 0x30, 0x80, - 0xf0, 0x00, - 0xf0, 0x00, - 0xf0, 0x00, - 0xf0, 0x08, - 0x70, 0x88, - 0xb0, 0xc8, - 0xd8, 0x64, - 0x78, 0xe4, - 0x36, 0xf8, - 0xfe, 0xfd, - 0xff, 0x0f, - 0xff, 0xff, - 0x00, 0xff, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 2 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0xff, - 0xff, 0xff, - 0xff, 0x00, - 0xff, 0xff, - 0x00, 0xff, - 0x80, 0x80, - 0xc1, 0xc0, - 0x61, 0xb3, - 0x3f, 0x12, - 0x1c, 0x0f, - 0x07, 0x00, - 0x1d, 0x0e, - 0x3f, 0x12, - 0x63, 0xb5, - 0xc1, 0xe2, - 0x80, 0xc1, - 0x00, 0x00, - 0x00, 0xff, - 0xff, 0xff, - 0xff, 0x00, - 0xff, 0xff, - 0x00, 0xff, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 3 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0xff, - 0xff, 0xff, - 0xff, 0xfc, - 0xff, 0x0f, - 0x07, 0x0b, - 0x81, 0x03, - 0xc0, 0x01, - 0xc0, 0x20, - 0xe0, 0x10, - 0xf0, 0x00, - 0xf8, 0x00, - 0xf0, 0x00, - 0xe0, 0x10, - 0xc0, 0x20, - 0xc0, 0x01, - 0x81, 0x03, - 0x03, 0x87, - 0x0e, 0x17, - 0xff, 0x1f, - 0xff, 0xf8, - 0xff, 0xff, - 0x00, 0xff, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 4 --- - 0x70, 0x88, - 0xfc, 0x78, - 0xfe, 0x7c, - 0xff, 0x76, - 0xff, 0x77, - 0xff, 0x77, - 0xff, 0x74, - 0xfe, 0x75, - 0xff, 0x74, - 0xff, 0x74, - 0xf7, 0x7c, - 0xf7, 0x7c, - 0xf7, 0x7c, - 0xf7, 0x7c, - 0xf7, 0x7c, - 0xff, 0x74, - 0xff, 0x74, - 0xff, 0x74, - 0xff, 0x74, - 0xff, 0x74, - 0xfe, 0x75, - 0xff, 0x74, - 0xff, 0x77, - 0xff, 0x77, - 0xff, 0x76, - 0xfe, 0x7c, - 0xfc, 0x78, - 0x70, 0x88 - } -}; - - diff --git a/boop/gui/iconHourglas_t.h b/boop/gui/iconHourglas_t.h deleted file mode 100644 index d46a555..0000000 --- a/boop/gui/iconHourglas_t.h +++ /dev/null @@ -1,178 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: R:\Project\GrayScaler\Icons\Hourglas_t.bmp -// -// ICON_GRAY_TRANSPARENT - 3 bpp (Bit per Pixel) -// sizeof (iconHourglas_t.data) == 420 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconHourglas_t = -{ - /* width = */ 28, - /* height = */ 40, - /* info = */ ICON_INFO (ICON_GRAY_TRANSPARENT) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - // v--- Alpha Channel - 0x0e, 0x11, 0x1f, - 0x3f, 0x1e, 0x3f, - 0x7f, 0x3a, 0x7f, - 0xff, 0x6a, 0xff, - 0xff, 0xca, 0xff, - 0xff, 0xca, 0xff, - 0x3f, 0x0a, 0xff, - 0x3b, 0x0e, 0xff, - 0x3b, 0x0e, 0xff, - 0x3b, 0x0e, 0xff, - 0x3b, 0x0e, 0xff, - 0x3b, 0x0e, 0xff, - 0x3b, 0x0e, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0x3f, 0x0a, 0xff, - 0xff, 0xca, 0xff, - 0xff, 0xca, 0xff, - 0xff, 0x6a, 0xff, - 0x7f, 0x3a, 0x7f, - 0x3f, 0x1e, 0x3f, - 0x0e, 0x11, 0x1f, - //--- Page 1 --- - // v--- Alpha Channel - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0x0f, 0xff, - 0xfe, 0xfd, 0xff, - 0x70, 0xb8, 0xff, - 0xe0, 0x70, 0xff, - 0xc0, 0xa0, 0xff, - 0x80, 0x50, 0xff, - 0x30, 0x80, 0xff, - 0xf0, 0x00, 0xff, - 0xf0, 0x00, 0xff, - 0xf0, 0x00, 0xff, - 0xf0, 0x08, 0xff, - 0x70, 0x88, 0xff, - 0xb0, 0xc8, 0xff, - 0xd8, 0x64, 0xff, - 0x78, 0xe4, 0xff, - 0x36, 0xf8, 0xff, - 0xfe, 0xfd, 0xff, - 0xff, 0x0f, 0xff, - 0xff, 0xff, 0xff, - 0x00, 0xff, 0xff, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - //--- Page 2 --- - // v--- Alpha Channel - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0xff, 0xff, - 0x00, 0xff, 0xff, - 0x80, 0x80, 0x80, - 0xc1, 0xc0, 0xc1, - 0x61, 0xb3, 0xf3, - 0x3f, 0x12, 0xff, - 0x1c, 0x0f, 0xff, - 0x07, 0x00, 0xff, - 0x1d, 0x0e, 0xff, - 0x3f, 0x12, 0xff, - 0x63, 0xb5, 0xf7, - 0xc1, 0xe2, 0xe3, - 0x80, 0xc1, 0xc1, - 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0xff, 0xff, - 0x00, 0xff, 0xff, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - //--- Page 3 --- - // v--- Alpha Channel - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xfc, 0xff, - 0xff, 0x0f, 0xff, - 0x07, 0x0b, 0xff, - 0x81, 0x03, 0xff, - 0xc0, 0x01, 0xff, - 0xc0, 0x20, 0xff, - 0xe0, 0x10, 0xff, - 0xf0, 0x00, 0xff, - 0xf8, 0x00, 0xff, - 0xf0, 0x00, 0xff, - 0xe0, 0x10, 0xff, - 0xc0, 0x20, 0xff, - 0xc0, 0x01, 0xff, - 0x81, 0x03, 0xff, - 0x03, 0x87, 0xff, - 0x0e, 0x17, 0xff, - 0xff, 0x1f, 0xff, - 0xff, 0xf8, 0xff, - 0xff, 0xff, 0xff, - 0x00, 0xff, 0xff, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - //--- Page 4 --- - // v--- Alpha Channel - 0x70, 0x88, 0xf8, - 0xfc, 0x78, 0xfc, - 0xfe, 0x7c, 0xfe, - 0xff, 0x76, 0xff, - 0xff, 0x77, 0xff, - 0xff, 0x77, 0xff, - 0xff, 0x74, 0xff, - 0xfe, 0x75, 0xff, - 0xff, 0x74, 0xff, - 0xff, 0x74, 0xff, - 0xf7, 0x7c, 0xff, - 0xf7, 0x7c, 0xff, - 0xf7, 0x7c, 0xff, - 0xf7, 0x7c, 0xff, - 0xf7, 0x7c, 0xff, - 0xff, 0x74, 0xff, - 0xff, 0x74, 0xff, - 0xff, 0x74, 0xff, - 0xff, 0x74, 0xff, - 0xff, 0x74, 0xff, - 0xfe, 0x75, 0xff, - 0xff, 0x74, 0xff, - 0xff, 0x77, 0xff, - 0xff, 0x77, 0xff, - 0xff, 0x76, 0xff, - 0xfe, 0x7c, 0xfe, - 0xfc, 0x78, 0xfc, - 0x70, 0x88, 0xf8 - } -}; - - diff --git a/boop/gui/iconLeo_gray_128.h b/boop/gui/iconLeo_gray_128.h deleted file mode 100644 index 858328c..0000000 --- a/boop/gui/iconLeo_gray_128.h +++ /dev/null @@ -1,1189 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: R:\Project\GrayScaler\Icons\Leo_Gray_128.bmp -// -// ICON_GRAY - 2 bpp (Bit per Pixel) -// sizeof (iconLeo_gray_128.data) == 2304 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconLeo_gray_128 = -{ - /* width = */ 128, - /* height = */ 65, - /* info = */ ICON_INFO (ICON_GRAY) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x38, - 0x78, 0x9c, - 0x64, 0xf2, - 0xc2, 0x80, - 0x02, 0xc3, - 0x02, 0xc3, - 0x02, 0xe3, - 0x02, 0xe3, - 0x02, 0xe3, - 0x02, 0xe2, - 0x02, 0xe0, - 0x02, 0xf0, - 0x02, 0xf4, - 0x02, 0xf4, - 0x04, 0xf2, - 0x04, 0xf6, - 0x04, 0xf6, - 0x04, 0xf6, - 0x04, 0xf2, - 0x10, 0xe4, - 0x10, 0xec, - 0xb8, 0x54, - 0xf8, 0x20, - 0xf0, 0x28, - 0xe0, 0x30, - 0xc0, 0xe0, - 0x00, 0xc0, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 1 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x01, - 0xf7, 0xe8, - 0xff, 0x0f, - 0x00, 0xff, - 0x00, 0xff, - 0x00, 0xff, - 0x00, 0xff, - 0x00, 0xff, - 0x80, 0x7f, - 0x80, 0x7f, - 0x80, 0x7f, - 0x80, 0x7f, - 0x80, 0x7f, - 0x80, 0x7f, - 0xc0, 0x3f, - 0xe0, 0x1f, - 0xf0, 0x0f, - 0xf8, 0x07, - 0xfe, 0x01, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0xe0, - 0x3f, 0xfe, - 0x03, 0x07, - 0x01, 0x02, - 0x00, 0x01, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 2 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xe0, 0xc0, - 0xff, 0x3f, - 0x01, 0xfe, - 0x00, 0xff, - 0x80, 0x7f, - 0xe0, 0x1f, - 0xfe, 0x01, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0xfe, - 0x07, 0xfb, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0xc0, - 0x00, 0x30, - 0x00, 0x18, - 0x00, 0x88, - 0x00, 0x84, - 0x04, 0x80, - 0x00, 0xc6, - 0x00, 0xc2, - 0x00, 0xe2, - 0x80, 0x62, - 0x82, 0x6c, - 0x06, 0xf8, - 0x84, 0x7e, - 0x84, 0x7e, - 0x8c, 0xf2, - 0x8c, 0xf8, - 0x88, 0xfc, - 0x08, 0xf4, - 0x10, 0xf8, - 0x10, 0xf8, - 0x30, 0xd0, - 0x30, 0xe0, - 0xe0, 0x30, - 0xe0, 0x40, - 0x80, 0xc0, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0xc0, - 0x00, 0x20, - 0x00, 0x30, - 0x00, 0x10, - 0x00, 0x18, - 0x00, 0x08, - 0x08, 0x84, - 0xc8, 0x84, - 0xc8, 0x94, - 0xc8, 0xb4, - 0xe8, 0x9c, - 0xc8, 0xb0, - 0xd8, 0xa8, - 0xd8, 0xa8, - 0xf8, 0x88, - 0xf8, 0x10, - 0xf0, 0x10, - 0xf0, 0x10, - 0xf0, 0x30, - 0xe0, 0x30, - 0xe0, 0x30, - 0xe0, 0x60, - 0xc0, 0xe0, - 0xc0, 0xe0, - 0xc0, 0x80, - 0x80, 0x80, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 3 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xff, 0xff, - 0xff, 0x00, - 0xfc, 0x03, - 0xf8, 0x07, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x07, - 0xfc, 0x0b, - 0xf8, 0x0c, - 0xe8, 0x1c, - 0x88, 0x7c, - 0x98, 0x68, - 0x98, 0x70, - 0x98, 0x70, - 0xd8, 0x30, - 0xf0, 0x38, - 0xf0, 0x20, - 0xe0, 0x30, - 0xc0, 0xe0, - 0xc0, 0xc0, - 0x00, 0x80, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x30, 0x68, - 0xfe, 0xfc, - 0xe1, 0x1e, - 0xe0, 0x1e, - 0xf0, 0x0f, - 0xf8, 0x07, - 0xfc, 0x03, - 0xfe, 0x01, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x00, - 0xff, 0x80, - 0xff, 0x44, - 0x7f, 0x4e, - 0x79, 0x4d, - 0x78, 0x4c, - 0x7c, 0x4c, - 0x7e, 0x45, - 0x7f, 0x47, - 0x7e, 0x41, - 0x7e, 0x61, - 0x7e, 0xe1, - 0xff, 0xe0, - 0xff, 0xe0, - 0xff, 0xb0, - 0x3f, 0x30, - 0x1f, 0x3f, - 0x08, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xf8, 0xfb, - 0xe0, 0xf9, - 0xf0, 0xc8, - 0xf0, 0xec, - 0xf8, 0xe4, - 0xf0, 0xff, - 0xfb, 0xfc, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0x7f, 0x3f, - 0x0f, 0x07, - 0x07, 0x03, - 0x03, 0x01, - 0xc3, 0xe7, - 0xff, 0xff, - 0xff, 0xfc, - 0xff, 0xfa, - 0xff, 0xfc, - 0xff, 0xfa, - 0xff, 0xfc, - 0xff, 0xfe, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0x7f, - 0x00, 0x7c, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 4 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x02, 0x01, - 0x0f, 0x0f, - 0x0f, 0x0c, - 0x1f, 0x18, - 0x3f, 0x70, - 0x7f, 0x30, - 0x7f, 0x60, - 0xff, 0x60, - 0xff, 0x78, - 0xff, 0xe0, - 0xff, 0x70, - 0xff, 0xf0, - 0xff, 0x70, - 0x7f, 0xe8, - 0x7f, 0xe0, - 0x7f, 0xf0, - 0x7f, 0xf0, - 0x7f, 0xf0, - 0x7f, 0xf0, - 0x7f, 0xf0, - 0x7f, 0xf0, - 0x7f, 0xf8, - 0x7f, 0xf8, - 0x7f, 0xf8, - 0x7f, 0xf8, - 0x7f, 0xf8, - 0xff, 0x78, - 0x7f, 0xf8, - 0x7f, 0xf8, - 0x7f, 0xe0, - 0x7f, 0xf0, - 0x7f, 0x38, - 0x3f, 0x70, - 0x3f, 0x7e, - 0x3f, 0x9f, - 0x98, 0xc3, - 0xc0, 0x00, - 0x40, 0x00, - 0x00, 0xc0, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x40, - 0x01, 0xc1, - 0x43, 0xa7, - 0xc7, 0x46, - 0xc7, 0x8c, - 0xcf, 0x8c, - 0x8f, 0xcc, - 0x8f, 0xd8, - 0xdf, 0x9c, - 0xdf, 0x98, - 0xdf, 0x98, - 0xdf, 0x98, - 0xdf, 0x98, - 0xdf, 0x99, - 0xdf, 0x9b, - 0xdf, 0x9f, - 0xde, 0x9f, - 0xde, 0x9f, - 0xdf, 0x9e, - 0xdf, 0x9f, - 0xdf, 0x9f, - 0xdf, 0x9f, - 0xdf, 0x9f, - 0xdf, 0xdf, - 0xcf, 0x8f, - 0xcf, 0xcf, - 0xcf, 0x86, - 0xc0, 0x46, - 0x40, 0x80, - 0x00, 0x80, - 0x00, 0x80, - 0x00, 0x80, - 0x00, 0x00, - 0x00, 0x00, - 0x01, 0xa0, - 0x33, 0xc1, - 0x1f, 0x7f, - 0xdf, 0x2f, - 0xff, 0x0f, - 0xdf, 0x2f, - 0x9f, 0x67, - 0x1f, 0xe7, - 0xff, 0x3f, - 0xff, 0xbf, - 0xff, 0xff, - 0xdf, 0xaf, - 0x1f, 0x9e, - 0x1e, 0x0b, - 0x1f, 0x9e, - 0x1f, 0x9f, - 0x1f, 0x9f, - 0x1f, 0x9f, - 0x9f, 0x1f, - 0x9f, 0x1f, - 0x9f, 0x1f, - 0x9f, 0x1f, - 0x8f, 0x1f, - 0x8f, 0x0f, - 0x87, 0x07, - 0x83, 0x03, - 0x81, 0x03, - 0x80, 0x00, - 0x80, 0x00, - 0x80, 0x00, - 0x80, 0x00, - 0x00, 0x80, - 0x80, 0x80, - 0x80, 0x80, - 0x80, 0x80, - 0x80, 0x00, - 0x80, 0x80, - 0x80, 0x00, - 0x80, 0x00, - 0x80, 0x00, - 0x80, 0x80, - 0x80, 0x80, - 0x80, 0x80, - 0x00, 0x80, - 0x00, 0x00, - //--- Page 5 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x80, 0x00, - 0x80, 0x00, - 0x80, 0x00, - 0xc0, 0x00, - 0x80, 0x40, - 0xc0, 0x00, - 0xc0, 0x00, - 0x80, 0x60, - 0xa0, 0x80, - 0x00, 0xf0, - 0x10, 0xe6, - 0x97, 0x63, - 0xb1, 0x47, - 0xb0, 0x43, - 0xf8, 0x07, - 0xf9, 0xc6, - 0xfe, 0xff, - 0xfe, 0xf9, - 0xf8, 0x17, - 0xf8, 0x07, - 0xfc, 0x03, - 0xfc, 0x03, - 0xfe, 0x00, - 0xff, 0x00, - 0x1e, 0xff, - 0xfd, 0xfc, - 0xf9, 0xff, - 0xff, 0xe1, - 0xff, 0x00, - 0xff, 0x01, - 0xff, 0x00, - 0xff, 0x01, - 0xfb, 0x05, - 0xfb, 0x84, - 0xf9, 0x86, - 0xc1, 0xbe, - 0x01, 0xfe, - 0x03, 0xf8, - 0xff, 0x6f, - 0xff, 0xff, - 0xff, 0xf8, - 0xff, 0xe0, - 0xff, 0x00, - 0xff, 0xa0, - 0xfc, 0xe3, - 0xfc, 0xf2, - 0xf8, 0x86, - 0xf8, 0xc7, - 0xf8, 0xc6, - 0xf8, 0xc6, - 0xfc, 0x82, - 0xfc, 0xc2, - 0xfc, 0x83, - 0x9e, 0xa1, - 0x9e, 0xa3, - 0x0c, 0x92, - 0x00, 0x00, - 0xdb, 0x24, - 0xff, 0x00, - 0xff, 0x00, - 0xfe, 0x01, - 0xff, 0x80, - 0xff, 0xe1, - 0xff, 0xff, - 0xff, 0xff, - 0xfd, 0x73, - 0x3d, 0x71, - 0x3f, 0x39, - 0x3d, 0x7b, - 0x3d, 0x79, - 0x39, 0x3d, - 0x39, 0x3d, - 0x39, 0x3d, - 0x3d, 0x19, - 0x7d, 0x39, - 0x7d, 0x39, - 0x7d, 0x31, - 0x7d, 0x31, - 0x7d, 0x31, - 0x7d, 0x31, - 0x7d, 0x71, - 0x7d, 0x71, - 0x78, 0x7d, - 0x78, 0x75, - 0x7c, 0x71, - 0x7d, 0x70, - 0x79, 0x7c, - 0x79, 0x7c, - 0x79, 0x7c, - 0x79, 0x7c, - 0x79, 0x74, - 0x78, 0x7d, - 0x78, 0x7d, - 0x79, 0x7c, - 0x39, 0x7e, - 0x3d, 0x38, - 0x3f, 0x1f, - 0x1e, 0x1f, - //--- Page 6 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x80, - 0x00, 0x80, - 0x00, 0x40, - 0x00, 0x40, - 0x00, 0x40, - 0x00, 0x60, - 0x00, 0x20, - 0x00, 0xb0, - 0xc0, 0x90, - 0x80, 0xd8, - 0xc0, 0xe8, - 0xe0, 0xc0, - 0xf0, 0x40, - 0x70, 0x68, - 0x70, 0x38, - 0x38, 0x34, - 0x38, 0x3c, - 0x1c, 0x3a, - 0x1c, 0x1a, - 0x1d, 0x0e, - 0x0f, 0x0c, - 0x0f, 0x04, - 0x0f, 0x06, - 0x07, 0x0e, - 0x07, 0x02, - 0x07, 0x02, - 0x07, 0x03, - 0x03, 0x07, - 0x03, 0x03, - 0x03, 0x03, - 0x03, 0x01, - 0x03, 0x01, - 0x01, 0x07, - 0x3d, 0x4f, - 0x7d, 0x3f, - 0xff, 0x7d, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xff, - 0xff, 0xbf, - 0xff, 0xf8, - 0xff, 0xf8, - 0xff, 0xfc, - 0xff, 0xfe, - 0xff, 0xfe, - 0xff, 0x7e, - 0x7c, 0xfe, - 0x7f, 0x3f, - 0x7f, 0x3f, - 0x3f, 0x7f, - 0x3f, 0x3e, - 0x3f, 0x3f, - 0x3f, 0x36, - 0x37, 0x3e, - 0x3f, 0x3f, - 0x3f, 0x3e, - 0x37, 0x1f, - 0x3f, 0x13, - 0x1c, 0x3b, - 0x1e, 0x19, - 0x1f, 0x1f, - 0x1f, 0x1f, - 0x1f, 0x1f, - 0x1f, 0x1f, - 0x1f, 0x1f, - 0x1f, 0x0f, - 0x0f, 0x1f, - 0x0f, 0x0f, - 0x0f, 0x0f, - 0x0f, 0x0f, - 0x0f, 0x0f, - 0x0f, 0x0f, - 0x0f, 0x07, - 0x07, 0x0f, - 0x0f, 0x07, - 0x07, 0x0f, - 0x0f, 0x0f, - 0x0f, 0x0f, - 0x1f, 0x1f, - 0x1f, 0x37, - 0x3f, 0x2e, - 0x7f, 0x3e, - 0x7f, 0x7f, - 0x3f, 0x7f, - 0x3f, 0x3f, - 0x1f, 0x1f, - 0x0f, 0x07, - 0x00, 0x01, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 7 --- - 0x10, 0x30, - 0x30, 0x6c, - 0x60, 0xf6, - 0x60, 0xe2, - 0x60, 0xe0, - 0x70, 0xe0, - 0x70, 0xa1, - 0x30, 0xf9, - 0x38, 0x30, - 0x38, 0x18, - 0x1c, 0x38, - 0x1c, 0x1a, - 0x0e, 0x0c, - 0x0e, 0x06, - 0x07, 0x06, - 0x07, 0x03, - 0x03, 0x03, - 0x01, 0x03, - 0x01, 0x01, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x01, - 0x00, 0x01, - 0x01, 0x00, - 0x01, 0x00, - 0x01, 0x01, - 0x01, 0x01, - 0x01, 0x01, - 0x00, 0x01, - 0x00, 0x01, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - //--- Page 8 --- - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 - } -}; - - diff --git a/boop/gui/iconPause.h b/boop/gui/iconPause.h deleted file mode 100644 index 087924c..0000000 --- a/boop/gui/iconPause.h +++ /dev/null @@ -1,56 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: R:\Project\GrayScaler\Icons\Pause.bmp -// -// ICON_GRAY - 2 bpp (Bit per Pixel) -// sizeof (iconPause.data) == 52 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconPause = -{ - /* width = */ 13, - /* height = */ 13, - /* info = */ ICON_INFO (ICON_GRAY) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - 0xfc, 0xfa, - 0x06, 0x03, - 0x03, 0x00, - 0x01, 0x01, - 0xf9, 0xf9, - 0xf9, 0xf9, - 0x01, 0x01, - 0xf9, 0xf9, - 0xf9, 0xf9, - 0x01, 0x01, - 0x03, 0x00, - 0x06, 0x03, - 0xfc, 0xfa, - //--- Page 1 --- - 0x07, 0x0b, - 0x0c, 0x18, - 0x18, 0x00, - 0x10, 0x10, - 0x13, 0x13, - 0x13, 0x13, - 0x10, 0x10, - 0x13, 0x13, - 0x13, 0x13, - 0x10, 0x10, - 0x10, 0x00, - 0x08, 0x18, - 0x07, 0x0b - } -}; - - diff --git a/boop/gui/iconPlay.h b/boop/gui/iconPlay.h deleted file mode 100644 index 6224718..0000000 --- a/boop/gui/iconPlay.h +++ /dev/null @@ -1,56 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: R:\Project\GrayScaler\Icons\Play.bmp -// -// ICON_GRAY - 2 bpp (Bit per Pixel) -// sizeof (iconPlay.data) == 52 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconPlay = -{ - /* width = */ 13, - /* height = */ 13, - /* info = */ ICON_INFO (ICON_GRAY) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - 0xfc, 0xfa, - 0x06, 0x03, - 0x03, 0x00, - 0x01, 0x01, - 0x01, 0x01, - 0xf9, 0xf9, - 0xf1, 0xf9, - 0xe1, 0xf1, - 0x41, 0xe1, - 0x01, 0x01, - 0x03, 0x00, - 0x06, 0x03, - 0xfc, 0xfa, - //--- Page 1 --- - 0x07, 0x0b, - 0x0c, 0x18, - 0x18, 0x00, - 0x10, 0x10, - 0x10, 0x10, - 0x13, 0x13, - 0x11, 0x13, - 0x10, 0x11, - 0x10, 0x10, - 0x10, 0x10, - 0x10, 0x00, - 0x08, 0x18, - 0x07, 0x0b - } -}; - - diff --git a/boop/gui/iconStop.h b/boop/gui/iconStop.h deleted file mode 100644 index ffaf217..0000000 --- a/boop/gui/iconStop.h +++ /dev/null @@ -1,56 +0,0 @@ -//////////////////////////////////////////////////// -// This file was generated by the tool GrayScaler. -// Source bitmap: R:\Project\GrayScaler\Icons\Stop.bmp -// -// ICON_GRAY - 2 bpp (Bit per Pixel) -// sizeof (iconStop.data) == 52 -// -//////////////////////////////////////////////////// -#include "icon.h" - -#ifndef ICON_INFO -#define ICON_INFO(i) i, -#endif - - -const ICON iconStop = -{ - /* width = */ 13, - /* height = */ 13, - /* info = */ ICON_INFO (ICON_GRAY) - /* data [] = */ - { - // Bit 0 is the upper most pixel - // of the page, which is 8 pixel high - //--- Page 0 --- - 0xfc, 0xfa, - 0x06, 0x03, - 0x03, 0x00, - 0x01, 0x01, - 0xf1, 0xf1, - 0xf1, 0xf1, - 0xf1, 0xf1, - 0xf1, 0xf1, - 0xf1, 0xf1, - 0x01, 0x01, - 0x03, 0x00, - 0x06, 0x03, - 0xfc, 0xfa, - //--- Page 1 --- - 0x07, 0x0b, - 0x0c, 0x18, - 0x18, 0x00, - 0x10, 0x10, - 0x11, 0x11, - 0x11, 0x11, - 0x11, 0x11, - 0x11, 0x11, - 0x11, 0x11, - 0x10, 0x10, - 0x10, 0x00, - 0x08, 0x18, - 0x07, 0x0b - } -}; - - diff --git a/boop/gui/mainmenu.c b/boop/gui/mainmenu.c deleted file mode 100644 index 406f7c0..0000000 --- a/boop/gui/mainmenu.c +++ /dev/null @@ -1,124 +0,0 @@ -/* - testmenu.c - testmenu for menuing system - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "menu.h" -#include "testmenu.h" -#include "gamesmenu.h" -#include "settingsmenu.h" -#include "toolsmenu.h" -#include "lcd.h" -#include "fonty.h" -#include "keyboard.h" -#include "global.h" -#include "flash.h" -#ifndef DEBUGMODE - #include "sounds.h" - #include "sound3.h" - #include "sound.h" -#endif -#include "version.h" - -unsigned int testdata1, testdata2; - - -void show_info(void) { - unsigned short flashID; - unsigned short hwID; - flashID = getFlashID(); - draw_hexC (0, 30, flashID, LCD_COLOR_B, DRAW_PUT); - - hwID = GetHWversion(); - draw_hexS (0, 38, hwID, LCD_COLOR_B, DRAW_PUT); - - lcd_fill(0); - set_font(BOLDFONT); - draw_string (0,0,"Info", LCD_COLOR_B, DRAW_PUT); - set_font(SMALLFONT); - draw_string(0,14,"Flash \n" - "Manuf. ID\n" - "Device ID\n" - "\n" - "Betty\n" - "HW Version\n", LCD_COLOR_B, DRAW_PUT); - draw_hexC (65, 23, (flashID>>8), LCD_COLOR_B, DRAW_PUT); - draw_hexC (65, 32, (flashID&0x00ff), LCD_COLOR_B, DRAW_PUT); - draw_hexC (65, 59, (unsigned char)hwID, LCD_COLOR_B, DRAW_PUT); - draw_string (0,77,"Boop", LCD_COLOR_B, DRAW_PUT); -#ifdef RELEASE - draw_numU (65,86,SVNVERSION+1,0, LCD_COLOR_B, DRAW_PUT); - draw_string (0,86,"SVN Release", LCD_COLOR_B, DRAW_PUT); -#else - draw_numU (65,86,SVNVERSION,0, LCD_COLOR_B, DRAW_PUT); - draw_string (0,86,"SVN Revision", LCD_COLOR_B, DRAW_PUT); -#endif - draw_string (0,95,__DATE__, LCD_COLOR_B, DRAW_PUT); - draw_string (0,104,__TIME__, LCD_COLOR_B, DRAW_PUT); - - set_font(SMALLFONT); - - waitKeyUpDown(); -} // show_info - - -void show_credits(void) -{ - lcd_fill(0); - set_font(BOLDFONT); - draw_string (0,0,"Credits", LCD_COLOR_B, DRAW_PUT); - set_font(SMALLFONT); - draw_string (0,14,"Netguy\tBasics\n" - "Telekatz\tBasics, IR/RF\n" - "Theborg\tFirst Steps, HW\n" - "Colibri\tFlash SW\n" - "Damaltor\tSupport\n" - "Pr0nbug\tFirst Steps\n" - "Asgart\tForum/Wiki\n" - "Spessi\tSurport, HW", LCD_COLOR_B, DRAW_PUT); - - draw_string(0,95,"Und alle Anderen\n" - "die vergessen wurden.", LCD_COLOR_B, DRAW_PUT); - - draw_string(0,120,"Thanks to Max Fleischer\n" - "for a great Cartoon!", LCD_COLOR_B, DRAW_PUT); - set_font(BOLDFONT); - draw_string (8,150,"www.bettyhacks.com", LCD_COLOR_B, DRAW_PUT); - set_font(SMALLFONT); -#ifndef DEBUGMODE - playSound((unsigned char*)sound1_data, sound1_len); - waitSound(); - playSound((unsigned char*)sound2_data, sound2_len); - waitSound(); -#endif - waitKeyUpDown(); -} // show_credits - -const struct MENU_ENTRY mainMenuEntries[] = -{ - { 0, (void*)&gamesMenu, MENUENTRY, "Games", "Play some games" }, - { 0, (void*)&testMenu, MENUENTRY, "TestStuff", "Various tests" }, - { enter_settings_menu, 0, FUNCENTRY, "Settings", "Change settings" }, - { 0, (void*)&toolsMenu, MENUENTRY, "Tools", "Tools" }, - { show_credits, 0, FUNCENTRY, "Credits", "Show Credits" }, - { show_info, 0, FUNCENTRY, "Info", "Show Info" } -}; - - -const struct MENU mainMenu = -{ - NUM_OF_ELEMENTS (mainMenuEntries), (MENU_ENTRY*)&mainMenuEntries, "Main Menu" -}; diff --git a/boop/gui/mainmenu.h b/boop/gui/mainmenu.h deleted file mode 100644 index d53d3df..0000000 --- a/boop/gui/mainmenu.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - mainmenu.h - the main menu for boop - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef MAINMENU_H -#define MAINMENU_H - -extern struct MENU mainMenu; - -#endif diff --git a/boop/gui/menu.c b/boop/gui/menu.c deleted file mode 100644 index 7e5a484..0000000 --- a/boop/gui/menu.c +++ /dev/null @@ -1,250 +0,0 @@ -/* - menu.c - menuing system - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "global.h" -#include "menu.h" -#include "lcd.h" -#include "fonty.h" -#include "keyboard.h" -#include "lpc2220.h" - -//----------------------------------------------------------------------------- -#if FF_LARGE_MENU -#define MENU_FONT SMOOTHFONT -#define MENU_LINE_HEIGHT (SMOOTHFONT_HEIGHT+2) -#else -#define MENU_FONT SMALLFONT -#define MENU_LINE_HEIGHT SMALLFONT_HEIGHT+1 -#endif - -#define MENU_HEAD_LINE_HEIGHT (BOLDFONT_HEIGHT+2+2+2) -#define MENU_LINE_WIDTH (LCD_SIZE_X - 10) -#define MENU_BOTTOM_LINE_HEIGHT (SMALLFONT_HEIGHT+5) - -#define MENU_ARROW_SIZE (min(MENU_LINE_HEIGHT-6, (LCD_SIZE_X-MENU_LINE_WIDTH-1)/2+1)) - -#define MENU_START_Y MENU_HEAD_LINE_HEIGHT -#define MENU_LIST_LEN ((LCD_SIZE_Y - MENU_HEAD_LINE_HEIGHT - MENU_BOTTOM_LINE_HEIGHT) / MENU_LINE_HEIGHT) - -#define MENU_SCROLLBAR_HEIGHT (MENU_LINE_HEIGHT*MENU_LIST_LEN-10-10-3) // [px] -//----------------------------------------------------------------------------- - - - -//----------------------------------------------------------------------------- -int menu_execentry(struct MENU_ENTRY *entry) -{ - unsigned int *val; - struct MENU *m; - - draw_block (0, 100, LCD_SIZE_X, 8, LCD_COLOR_B, DRAW_ERASE); - switch(entry->type) - { - case INTENTRY: - val = (unsigned int*)entry->data; - draw_block (0, 50, LCD_SIZE_X, 8, LCD_COLOR_B, DRAW_ERASE); - draw_hexW (0, 50, *val, LCD_COLOR_B, DRAW_PUT); - break; - case FUNCENTRY: - entry->exec(); - return 1; - break; - case MENUENTRY: - m = (MENU*)entry->data; - if(m->num_entries != 0) - { - menu_exec((MENU*)entry->data); - return 1; - } - break; - default: - break; - } - return 0; -} // menu_execentry -//----------------------------------------------------------------------------- - - - -//----------------------------------------------------------------------------- -void menu_exec(struct MENU *menu) -{ - unsigned char total; // entries in menu - unsigned char csel; // selected entry - - unsigned char moff; // first entry displayed - unsigned char moffold; // only used to detect change - - unsigned char set; // iterator for visible entries - - csel = 0; - moff = 0; - -again: - lcd_fill(0); - - //----------------------------------------- - // Menu head line - set_font(BOLDFONT); - draw_string (0, 0, (char*)menu->name, LCD_COLOR_B, DRAW_PUT); - draw_block (0, BOLDFONT_HEIGHT+2, LCD_SIZE_X, 2, LCD_COLOR_B, DRAW_PUT); - // Menu bottom line - draw_block (0, LCD_SIZE_Y-SMALLFONT_HEIGHT-3, LCD_SIZE_X, 2, LCD_COLOR_B, DRAW_PUT); - //----------------------------------------- - - total = menu->num_entries; - moffold = total; - - while(KEY_Exit) {}; - while(!KEY_Exit) - { - // draw list: initially or when selection is on next 'page' and all entries 'move' - if (moff!=moffold) - { - // menu list - set_font (MENU_FONT); - draw_block (0, MENU_START_Y, LCD_SIZE_X, MENU_LINE_HEIGHT*MENU_LIST_LEN, LCD_COLOR_B, DRAW_ERASE); - for (set=moff; (setentry [set].name, LCD_COLOR_B, DRAW_PUT); - } - // scroll arrows - if (moff) // not the first page - { - draw_arrow (MENU_LINE_WIDTH+1, MENU_START_Y+3, - ARROW_UP, MENU_ARROW_SIZE, LCD_COLOR_B, DRAW_PUT); - } - if (total > moff+MENU_LIST_LEN) // not the last page - { - draw_arrow (MENU_LINE_WIDTH+1, MENU_LINE_HEIGHT*MENU_LIST_LEN+7, - ARROW_DOWN, MENU_ARROW_SIZE, LCD_COLOR_B, DRAW_PUT); - } - // scroll handle - if (total > MENU_LIST_LEN) - { - draw_block (MENU_LINE_WIDTH+1, MENU_START_Y + 10 + (MENU_SCROLLBAR_HEIGHT/(total-1))*(csel), - 9, MENU_SCROLLBAR_HEIGHT/(total-1), - LCD_COLOR_DG, DRAW_PUT); - } - // select entry (invert) - draw_block (0, MENU_START_Y + ((csel-moff) * MENU_LINE_HEIGHT), - MENU_LINE_WIDTH, MENU_LINE_HEIGHT, LCD_COLOR_B, DRAW_XOR); - } - moffold = moff; - - //----------------------------------------- - // Menu bottom line - set_font (SMALLFONT); - draw_block ( 0, LCD_SIZE_Y-SMALLFONT_HEIGHT, LCD_SIZE_X, SMALLFONT_HEIGHT, LCD_COLOR_B, DRAW_ERASE); - - // entry number - draw_char (0, LCD_SIZE_Y-SMALLFONT_HEIGHT, '0' + (csel+1)/10, LCD_COLOR_B, DRAW_PUT); - draw_char (6, LCD_SIZE_Y-SMALLFONT_HEIGHT, '0' + (csel+1)%10, LCD_COLOR_B, DRAW_PUT); - - // entry help text - draw_string (16, LCD_SIZE_Y-SMALLFONT_HEIGHT, (char*)menu->entry [csel].help, LCD_COLOR_B, DRAW_PUT); - //----------------------------------------- - - // wait for key press - waitKeyUpDown(); - - // deselect current entry - draw_block (0, MENU_START_Y + ((csel-moff) * MENU_LINE_HEIGHT), - MENU_LINE_WIDTH, MENU_LINE_HEIGHT, LCD_COLOR_B, DRAW_XOR); - - // clear scroll handle - if (total > MENU_LIST_LEN) - draw_block (MENU_LINE_WIDTH+1, MENU_START_Y + 10 + (MENU_SCROLLBAR_HEIGHT/(total-1))*(csel), - 9, MENU_SCROLLBAR_HEIGHT/(total-1), - LCD_COLOR_DG, DRAW_XOR); - - if(KEY_OK) - { - if(menu_execentry((MENU_ENTRY*)&menu->entry[csel])) - goto again; - } - if(KEY_Up) - { - csel--; - if(csel= total) - { - if (total > MENU_LIST_LEN) - moff = total - MENU_LIST_LEN; - csel = total-1; - } - } - if(KEY_Down) - { - csel++; - if (csel == MENU_LIST_LEN+moff) - moff++; - if (csel == total) - { - moff = 0; - csel = 0; - } - } - if(KEY_Left) - { - csel = 0; - moff = 0; - } - if(KEY_Right) - { - csel = total -1; - if (total > MENU_LIST_LEN) - moff = total - MENU_LIST_LEN; - } - unsigned char num = getKeynum(); - if (num >= 16 && num <= 25) - { - csel = num - 16; - if (csel >= total) - csel = total-1; - if(csel < moff) - moff = csel; - if (csel >= MENU_LIST_LEN-moff) - moff = csel - MENU_LIST_LEN+1; - if(menu_execentry((MENU_ENTRY*)&menu->entry[csel])) - goto again; - } - - // select new entry (invert) - draw_block (0, MENU_START_Y + ((csel-moff) * MENU_LINE_HEIGHT), - MENU_LINE_WIDTH, MENU_LINE_HEIGHT, LCD_COLOR_B, DRAW_XOR); - - // scroll handle moved - if (total > MENU_LIST_LEN) - draw_block (MENU_LINE_WIDTH+1, MENU_START_Y + 10 + (MENU_SCROLLBAR_HEIGHT/(total-1))*(csel), - 9, MENU_SCROLLBAR_HEIGHT/(total-1), - LCD_COLOR_DG, DRAW_PUT); - } // while (!KEY_Exit) -} // menu_exec -//----------------------------------------------------------------------------- - - - -//----------------------------------------------------------------------------- -void init_menu(void) -{ -} -//----------------------------------------------------------------------------- - diff --git a/boop/gui/menu.h b/boop/gui/menu.h deleted file mode 100644 index 30f04b6..0000000 --- a/boop/gui/menu.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - menu.h - menuing system - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef MENU_H -#define MENU_H - -#define NONE 0 -#define INTENTRY 1 -#define FUNCENTRY 2 -#define MENUENTRY 3 - -typedef void(*menu_fn)(void); - -typedef struct MENU_ENTRY -{ - menu_fn exec; - void *data; - unsigned char type; - char *name; - char *help; -} MENU_ENTRY; - -typedef struct MENU -{ - unsigned int num_entries; - struct MENU_ENTRY *entry; - char *name; -} MENU; - -void init_menu(void); - -void menu_exec(struct MENU *menu); -int menu_execentry(struct MENU_ENTRY *entry); - -#endif diff --git a/boop/gui/settingsmenu.c b/boop/gui/settingsmenu.c deleted file mode 100644 index 5f3f469..0000000 --- a/boop/gui/settingsmenu.c +++ /dev/null @@ -1,196 +0,0 @@ -/* - settingsmenue.c - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "menu.h" -#include "settingsmenu.h" -#include "lcd.h" -#include "fonty.h" -#include "keyboard.h" -#include "rtc.h" -#include "ir_selector.h" -#include "backlight.h" -#include "bfs.h" -#include "rf.h" -#include "ir_capture.h" -#include "controls.h" -#include "global.h" - -extern volatile unsigned char bl_val; -extern unsigned int bl_timeout; -extern unsigned char bl_max; -extern unsigned char bl_speed; -unsigned char lcd_contrast; - -const struct MENU_ENTRY settingsMenuEntries[] = -{ - { change_clock, 0, FUNCENTRY, "Clock", "set time/date" }, - { RC_setting, 0, FUNCENTRY, "RC keys", "assign RC keys" }, - { display_setting, 0, FUNCENTRY, "Display", "backlight, contrast" }, - { RF_setting, 0, FUNCENTRY, "RF", "ID, channel" }, - { RAW_learnmenue, 0, FUNCENTRY, "IR learn", "Learn IR commands" }, -}; - -const struct MENU settingsMenu = -{ - 5, (MENU_ENTRY*)&settingsMenuEntries, "Settings" -}; - -const struct settings_ default_settings = -{ - 0x02, // version change this when modifying the struct - 63, // bl_max hardware limit of LCD controller - LCD_CONTRAST, - 2, // bl_speed; - 1000 // bl_timeout -}; - -// change handlers - -void brightness_onchange(FORM* form, CONTROL* control) { - bl_max=((NUMBOX*)control)->value; - setBacklight(bl_max); -} - -void timeout_onchange(FORM* form, CONTROL* control) { - bl_timeout=((NUMBOX*)control)->value * 200; - setBacklight(bl_max); -} - -void contrast_onchange(FORM* form, CONTROL* control) -{ - lcd_contrast = ((NUMBOX*)control)->value; - //~ lcd_set_contrast(0x3A); - lcd_set_contrast(lcd_contrast); -} - -void speed_onchange(FORM* form, CONTROL* control) -{ - bl_speed=((NUMBOX*)control)->value; - //~ setBLSpeed(bl_speed); -} - -// the submenus - -void display_setting(void) { - - const LABEL label1 = {BC_Labelnotab, 0,15,100,10,BOLDFONT,0,"Brightness",0}; - NUMBOX numbox1 = {BC_Numbox, 0,25, 13, 9,SMALLFONT,bl_val,0,63,brightness_onchange,NULL}; - const LABEL label2 = {BC_Labelnotab, 0,37,100,10,BOLDFONT,0,"Contrast",0}; - NUMBOX numbox2 = {BC_Numbox, 0,47, 19, 9,SMALLFONT,lcd_contrast,0,63,contrast_onchange,NULL}; - const LABEL label3 = {BC_Labelnotab, 0,59,100,10,BOLDFONT,0,"Backlight timeout",0}; - NUMBOX numbox3 = {BC_Numbox, 0,69, 19, 9,SMALLFONT,bl_timeout/200,1,200,timeout_onchange,NULL}; - const LABEL label4 = {BC_Labelnotab, 0,81,100,10,BOLDFONT,0,"Backlight fade time",0}; - NUMBOX numbox4 = {BC_Numbox, 0,91, 19, 9,SMALLFONT,bl_speed,1,6,speed_onchange,NULL}; - - CONTROL* controls[8] = { (CONTROL*)&label1, - (CONTROL*)&label2, - (CONTROL*)&label3, - (CONTROL*)&label4, - (CONTROL*)&numbox1, - (CONTROL*)&numbox2, - (CONTROL*)&numbox3, - (CONTROL*)&numbox4}; - - FORM form = {"Display settings"," ",0,0,0,0,controls,4,8,0,0}; - form_exec(&form); // controls.c - - // grayscale staircase test pattern for calibration - // form_exec->form_draw clears the screen - // either add this as a control or - // clear screen manually before form_exec - //~ draw_block ( 0, 80, 20, 20, LCD_COLOR_B, DRAW_PUT); - //~ draw_block (21, 80, 20, 20, LCD_COLOR_DG, DRAW_PUT); - //~ draw_block (42, 80, 20, 20, LCD_COLOR_LG, DRAW_PUT); -} - -void RF_setting(void) { - struct RFsettings_ RFsettings; - - BFS_LoadFile(BFS_ID_RFsettings, sizeof(struct RFsettings_), (unsigned char*) &RFsettings); - - const LABEL label1 = {BC_Labelnotab, 0,15,100,10,BOLDFONT,0,"Device address",0}; - NUMBOX numbox1 = {BC_Numbox, 0,25, 19, 9,SMALLFONT,RFsettings.address,1,127,NULL,NULL}; - const LABEL label2 = {BC_Labelnotab, 0,37,100,10,BOLDFONT,0,"Channel",0}; - NUMBOX numbox2 = {BC_Numbox, 0,47, 19, 9,SMALLFONT,RFsettings.channel,0,255,NULL,NULL}; - - CONTROL* controls[4] = { (CONTROL*)&label1, - (CONTROL*)&label2, - (CONTROL*)&numbox1, - (CONTROL*)&numbox2}; - - FORM form = {"RF settings"," ",0,0,0,0,controls,2,4,0,0}; - - form_exec(&form); - - RFsettings.address = numbox1.value; - RFsettings.channel = numbox2.value; - - BFS_SaveFile(BFS_ID_RFsettings, sizeof(struct RFsettings_), (unsigned char*) &RFsettings); - load_RF_setting(); -} - -// learned remotes -void load_RC_setting(void) { - - if(BFS_LoadFile(BFS_ID_remotes, sizeof(struct irDeviceTable_), (unsigned char*) &irDevTab) != sizeof(struct irDeviceTable_)) { - irDevTab = default_irDevTab; - BFS_SaveFile(BFS_ID_remotes, sizeof(struct irDeviceTable_), (unsigned char*) &irDevTab); - draw_string(0, 30, "default RC load", 3, DRAW_PUT); - } -} - -// load values stored in flash to ram -// called by main() for init -void load_setting(void) { - struct settings_ settings; - - BFS_LoadFile(BFS_ID_settings, sizeof(struct settings_), (unsigned char*) &settings); - - // if neccessary, use hard-coded defaults - if(settings.version != default_settings.version) - { - settings = default_settings; - BFS_SaveFile(BFS_ID_settings, sizeof(struct settings_), (unsigned char*) &settings); - draw_string(0, 40, "default settings load", 3, DRAW_PUT); - } - // backlight // TODO: see void initBacklight(void) in backlight.c) - bl_timeout = settings.bl_timeout; - bl_max = settings.bl_max; - setBacklight(bl_max); - bl_speed = settings.bl_speed; - - // LCD contrast - lcd_contrast = settings.lcd_contrast ; - lcd_set_contrast(lcd_contrast); -} - -// called by the parent menu -void enter_settings_menu(void) { - struct settings_ settings; - - // run menu - menu_exec((struct MENU *)&settingsMenu); - - // save changes - settings = default_settings; - settings.bl_timeout = bl_timeout; - settings.bl_max = bl_max; - settings.lcd_contrast = lcd_contrast; - settings.bl_speed = bl_speed; - BFS_SaveFile(BFS_ID_settings, sizeof(struct settings_), (unsigned char*) &settings); -} diff --git a/boop/gui/settingsmenu.h b/boop/gui/settingsmenu.h deleted file mode 100644 index fde3564..0000000 --- a/boop/gui/settingsmenu.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - settingsmenue.h - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef SETTINGSMENU_H -#define SETTINGSMENU_H - -extern const struct MENU settingsMenu; - -struct settings_ { - unsigned char version; - unsigned char bl_max; - unsigned char lcd_contrast; - unsigned char bl_speed; - unsigned int bl_timeout; -}; - -void RF_setting(void); -void display_setting(void); -void load_RC_setting(void); -void load_setting(void); -void enter_settings_menu(void); - -#endif diff --git a/boop/gui/testmenu.c b/boop/gui/testmenu.c deleted file mode 100644 index ce4d331..0000000 --- a/boop/gui/testmenu.c +++ /dev/null @@ -1,1287 +0,0 @@ -/* - testmenu.c - testmenu for menuing system - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "menu.h" -#include "lcd.h" -#include "fonty.h" -#include "keyboard.h" -#include "backlight.h" -#include "adc.h" -#include "rf.h" -#include "flash.h" -#include "ir_raw.h" -#include "ir_capture.h" -#include "ir_selector.h" -#include "infrared.h" -#include "sid.h" -#include "sidfiles.h" -#include "timerfuncs.h" -#include "sound.h" -#include "lpc2220.h" -#include "controls.h" -#include "global.h" -#include "cc1100.h" -#include "rf.h" -#include "irq.h" -#include "serial.h" -#include "rtctimer.h" - -#include "icon.h" -#include "iconLeo_gray_128.h" - -#define TRANSPARENT_CROSS 1 // 0/1 -#if TRANSPARENT_CROSS -# include "iconCross_t.h" -# define ICON_CROSS iconCross_t -#else -# include "iconCross.h" -# define ICON_CROSS iconCross -#endif - -#include "iconHourglas.h" -#include "iconHourglas_t.h" - -//#include "sidfiles.h" - -extern volatile unsigned char bat_state; - -unsigned int testdata1, testdata2; - -#define MAX_SOFTMENU 16 - -void test_circle(void) -{ - lcd_fill (LCD_COLOR_W); - draw_disc (20, 20, 18, LCD_COLOR_B, DRAW_PUT); - draw_disc (20, 20, 14, LCD_COLOR_B, DRAW_XOR); - - draw_qdisc (60, 20, 18, 0, LCD_COLOR_B, DRAW_PUT); - draw_qdisc (60, 40, 18, 1, LCD_COLOR_B, DRAW_PUT); - draw_qdisc (60, 60, 18, 2, LCD_COLOR_B, DRAW_PUT); - draw_qdisc (60, 80, 18, 3, LCD_COLOR_B, DRAW_PUT); - - draw_qcircle (100, 20, 18, 0, LCD_COLOR_B, DRAW_PUT); - draw_qcircle (100, 40, 18, 1, LCD_COLOR_B, DRAW_PUT); - draw_qcircle (100, 60, 18, 2, LCD_COLOR_B, DRAW_PUT); - draw_qcircle (100, 80, 18, 3, LCD_COLOR_B, DRAW_PUT); - - - draw_circle (30,120,20, LCD_COLOR_B, DRAW_PUT); - - waitKeyUpDown(); -} - -void test_movearound(void) -{ - int xpos=0; - int ypos=0; - int oldx=0; - int oldy=0; - - lcd_fill (LCD_COLOR_W); - draw_disc (xpos+5, ypos+5, 5, LCD_COLOR_B, DRAW_PUT); - while (!KEY_Exit) - { - waitKeyUpDown(); - oldx=xpos; - oldy=ypos; - if (KEY_Up) - ypos -= 3; - if (KEY_Down) - ypos += 3; - if (KEY_Left) - xpos -= 3; - if (KEY_Right) - xpos += 3; - - if (xpos > 117) - xpos = 117; - if (xpos < 0) - xpos = 0; - if (ypos > 149) - ypos = 149; - if (ypos < 0) - ypos = 0; - - draw_disc (oldx+5, oldy+5, 5, LCD_COLOR_B, DRAW_ERASE); - draw_disc (xpos+5, ypos+5, 5, LCD_COLOR_B, DRAW_PUT); - } -} - - -void test_frame(void) -{ - lcd_fill (LCD_COLOR_W); - - draw_frame (0,0,40,40,4,0, LCD_COLOR_B, DRAW_PUT); - draw_frame (42,0,40,40,3,16, LCD_COLOR_B, DRAW_PUT); - draw_frame (84,0,40,40,7,3, LCD_COLOR_B, DRAW_PUT); - - - draw_frame (0,42,40,40,4,7, LCD_COLOR_B, DRAW_PUT); - draw_frame (42,42,40,40,4,8, LCD_COLOR_B, DRAW_PUT); - draw_frame (84,42,40,40,1,7, LCD_COLOR_B, DRAW_PUT); - - waitKeyUpDown(); -} - -void test_frame2(void) -{ - - unsigned char t, r; - t = 1; - r = 0; -again: - lcd_fill (LCD_COLOR_W); - - draw_string(0, 152, "t:", LCD_COLOR_B, DRAW_PUT); - draw_numU(12,152,t,0,LCD_COLOR_B,DRAW_PUT); - draw_string(64, 152, "r:", LCD_COLOR_B, DRAW_PUT); - draw_numU(76,152,r,0,LCD_COLOR_B,DRAW_PUT); - - draw_frame (0,0,LCD_SIZE_X,128,t,r, LCD_COLOR_B, DRAW_PUT); - - while(!KEY_Exit) - { - waitKeyUpDown(); - if(KEY_Vplus) - { - t++; - if(t>64) - t = 1; - goto again; - } - if(KEY_Vminus) - { - if(t==1) - t = 64; - else - t--; - goto again; - } - if(KEY_Pplus) - { - r++; - if(r>63) - r = 0; - goto again; - } - if(KEY_Pminus) - { - if(r==0) - r = 63; - else - r--; - goto again; - } - } -} - -#define DRAW_FONTS_LINESPACE 1 -#define DRAW_FONTS_XSTART 15 -void draw_fonts () -{ - unsigned short y = 10; - unsigned short h; - - lcd_fill (LCD_COLOR_W); -#if 0 - set_font (SMOOTHFONT); - draw_string (0, y, "ÜJ", LCD_COLOR_B, DRAW_PUT); - draw_string (15, y+1, "ÜJ", LCD_COLOR_B, DRAW_PUT); - draw_string (30, y+2, "ÜJ", LCD_COLOR_B, DRAW_PUT); - draw_string (45, y+3, "ÜJ", LCD_COLOR_B, DRAW_PUT); - draw_string (60, y+5, "ÜJ", LCD_COLOR_B, DRAW_PUT); - draw_string (75, y+6, "ÜJ", LCD_COLOR_B, DRAW_PUT); - draw_string (90, y+7, "ÜJ", LCD_COLOR_B, DRAW_PUT); - draw_string (105, y+8, "ÜJ", LCD_COLOR_B, DRAW_PUT); - y += 8; - y += SMOOTHFONT_HEIGHT + DRAW_FONTS_LINESPACE; -#endif - - set_font (SMALLFONT); - h = get_stringheight ("gÜJ"); - draw_block (0, y, DRAW_FONTS_XSTART-1, SMALLFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT); - set_font (SMALLFONT); - draw_numU (1, y, h, 0, LCD_COLOR_B, DRAW_XOR); - set_font(SMALLFONT); - draw_string (DRAW_FONTS_XSTART, y, "Small Font", LCD_COLOR_B, DRAW_PUT); - y += SMALLFONT_HEIGHT + DRAW_FONTS_LINESPACE; - - set_font (DOUBLEFONT); - h = get_stringheight ("gÜJ"); - draw_block (0, y, DRAW_FONTS_XSTART-1, DOUBLEFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT); - set_font (SMALLFONT); - draw_numU (1, y+1, h, 0, LCD_COLOR_B, DRAW_XOR); - set_font(DOUBLEFONT); - draw_string (DRAW_FONTS_XSTART, y, "Double Font", LCD_COLOR_B, DRAW_PUT); - y += DOUBLEFONT_HEIGHT + DRAW_FONTS_LINESPACE; - - set_font(BOLDFONT); - h = get_stringheight ("gÜJ"); - draw_block (0, y, DRAW_FONTS_XSTART-1, BOLDFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT); - set_font (SMALLFONT); - draw_numU (1, y+1, h, 0, LCD_COLOR_B, DRAW_XOR); - set_font (BOLDFONT); - draw_string (DRAW_FONTS_XSTART, y, "Bold Font", LCD_COLOR_B, DRAW_PUT); - y += BOLDFONT_HEIGHT + DRAW_FONTS_LINESPACE; - - set_font (BOLDDOUBLEFONT); - h = get_stringheight ("gÜJ"); - draw_block (0, y, DRAW_FONTS_XSTART-1, BOLDDOUBLEFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT); - set_font (SMALLFONT); - draw_numU (1, y+1, h, 0, LCD_COLOR_B, DRAW_XOR); - set_font(BOLDDOUBLEFONT); - draw_string (DRAW_FONTS_XSTART, y, "B.Double", LCD_COLOR_B, DRAW_PUT); - y += BOLDDOUBLEFONT_HEIGHT + DRAW_FONTS_LINESPACE; - - set_font (SMALLFONT); - h = get_stringheight ("gÜJ"); - draw_block (0, y+1, DRAW_FONTS_XSTART-1, SMALLFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT); - set_font (SMALLFONT); - draw_numU (1, y+1, h, 0, LCD_COLOR_B, DRAW_XOR); - set_font (SMALLFONT); - draw_string (DRAW_FONTS_XSTART+1, y + 1, "Invers Small Font", LCD_COLOR_B, DRAW_PUT); - draw_block (DRAW_FONTS_XSTART, y, LCD_SIZE_X, SMALLFONT_HEIGHT+2, LCD_COLOR_B, DRAW_XOR); - y += SMALLFONT_HEIGHT + 2 + DRAW_FONTS_LINESPACE; - - set_font (SMOOTHFONT); - h = get_stringheight ("gÜJ"); - draw_block (0, y, DRAW_FONTS_XSTART-1, SMOOTHFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT); - set_font (SMALLFONT); - draw_numU (1, y+1, h, 0, LCD_COLOR_B, DRAW_XOR); - set_font(SMOOTHFONT); - draw_string (DRAW_FONTS_XSTART, y, "Smooth Font", LCD_COLOR_B, DRAW_PUT); - y += SMOOTHFONT_HEIGHT + DRAW_FONTS_LINESPACE; - - set_font (SMOOTHFONT); - h = get_stringheight ("gÜJ"); - draw_block (0, y+1, DRAW_FONTS_XSTART-1, SMOOTHFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT); - set_font (SMALLFONT); - draw_numU (1, y+2, h, 0, LCD_COLOR_B, DRAW_XOR); - set_font (SMOOTHFONT); - draw_string (DRAW_FONTS_XSTART+1, y + 1, "Invers Smooth", LCD_COLOR_B, DRAW_PUT); - draw_block (DRAW_FONTS_XSTART, y, LCD_SIZE_X, SMOOTHFONT_HEIGHT+2, LCD_COLOR_B, DRAW_XOR); - y += SMOOTHFONT_HEIGHT + 2 + DRAW_FONTS_LINESPACE; - - set_font(BOLDFONT); - waitKeyUpDown(); -} - -void test_logo(void) -{ - lcd_fill (LCD_COLOR_W); - draw_logo(); - waitKeyUpDown(); -} - - - -//----------------------------------------------------------------------------- -#undef ICON_INFO -#define ICON_INFO(i) - -#undef ICON_INFO_ELEMENT -#define ICON_INFO_ELEMENT - -#undef ICON -#define ICON iconElement_t - -#include "iconFr.h" -#include "iconPlay.h" -#include "iconPause.h" -#include "iconStop.h" -#include "iconFf.h" - -static const ICON* const iconList [] = -{ - &iconFr, - &iconPlay, - &iconPause, - &iconStop, - &iconFf -}; - -//----------------------------------------------------------------------------- -#define HOURGLAS_CENTER 120 -void test_DrawIcon (int x, int y, int h, int w) -{ - int i; - int ix; - - lcd_fill (LCD_COLOR_W); - - draw_block (LCD_SIZE_X / 2, LCD_SIZE_Y / 2, - 32, HOURGLAS_CENTER - LCD_SIZE_Y / 2 + 2, - LCD_COLOR_LG, DRAW_NORCU); - draw_block (LCD_SIZE_X / 2, HOURGLAS_CENTER, - 32, LCD_SIZE_Y - HOURGLAS_CENTER, LCD_COLOR_DG, DRAW_NORCU); - - drawIcon (0, 10, &iconLeo_gray_128, LCD_COLOR_B, DRAW_PUT); - - drawIcon (LCD_SIZE_X / 2 - iconHourglas.width / 2, HOURGLAS_CENTER - iconHourglas.height / 2, - &iconHourglas, LCD_COLOR_B, DRAW_PUT); - drawIcon (LCD_SIZE_X / 2 + 32 - iconHourglas_t.width / 2, HOURGLAS_CENTER - iconHourglas.height / 2, - &iconHourglas_t, LCD_COLOR_B, DRAW_ALPHA); - -#if TRANSPARENT_CROSS - drawIcon (x, y, &ICON_CROSS, LCD_COLOR_B, DRAW_ALPHA); -#else - drawIcon (x, y, &ICON_CROSS, LCD_COLOR_B, DRAW_PUT); -#endif - - //------------------------------------------------------- - ix = w; - for (i = 0; i < NUM_OF_ELEMENTS (iconList); i++) - { - drawIconExt (ix, LCD_SIZE_Y-1 - h, - iconList [i]->data, - iconList [i]->width, iconList [i]->height, ICON_GRAY, - LCD_COLOR_B, DRAW_NORCU); - ix += w + iconList [i]->width; - } - //------------------------------------------------------- - draw_numU (0, 0, - x, 0, LCD_COLOR_B, DRAW_NORCU); - draw_numU (30, 0, - y, 0, LCD_COLOR_B, DRAW_NORCU); -} // test_DrawIcon -//----------------------------------------------------------------------------- - - - -//----------------------------------------------------------------------------- -void test_icon () -{ - int i; - int x, y; - int w = 0; - int h = 0; - - set_font (SMALLFONT); - - x = LCD_SIZE_X / 2 - ICON_CROSS.width / 2; - y = LCD_SIZE_Y / 2 - ICON_CROSS.height / 2; - - for (i = 0; i < NUM_OF_ELEMENTS (iconList); i++) - { - w += iconList [i]->width; - h = max (h, iconList [i]->height); - } - w = LCD_SIZE_X - w; - w /= NUM_OF_ELEMENTS (iconList) + 1; - - test_DrawIcon (x, y, h, w); - - //waitKeyUpDown (); - - setBacklight (BL_AUTO); - while (KEY_Exit) {}; - waitKeyUp (); - while (1) - { - if (isKeyPressed ()) - { - setBacklight (BL_AUTO); // pwm value - if (KEY_Exit) - return; - //--------------------------------------- - - if (KEY_Up) - y--; - else if (KEY_Down) - y++; - else if (KEY_Left) - x--; - else if (KEY_Right) - x++; - else if (KEY_OK) - { - x += 10; - y -= 10; - } - else - { - unsigned char num = getKeynum (); - if (num >= 16 && num <= 25) - { - if (num == 25) - num = 0; - else - num -= 15; - - x += num; - y -= num; - } - } - - if (x >= LCD_SIZE_X) - x = 0; - else if (x < 0) - x = LCD_SIZE_X-1 - ICON_CROSS.width; - - if (y >= LCD_SIZE_Y) - y = 0; - else if (y < 0) - y = LCD_SIZE_Y-1 - ICON_CROSS.height; - - test_DrawIcon (x, y, h, w); - - //--------------------------------------- - waitKeyUp (); - } // if (isKeyPressed ()) - } // while (1) -} // test_icon -//----------------------------------------------------------------------------- - - - -void fp1 () -{ - unsigned char x,y; - lcd_fill (LCD_COLOR_W); - set_font(SMALLFONT); - - for(x=0;x<16;x++) - { - for(y=0;y<16;y++) - { - draw_char (x*8, (y*8)+16,x*16+y, LCD_COLOR_B, DRAW_PUT); - } - } - waitKeyUpDown(); -} - -extern volatile unsigned char bl_val; - -void set_bl(void) -{ - lcd_fill (LCD_COLOR_W); - set_font(SMALLFONT); - - draw_string (0, 20, "Set Backlight:", LCD_COLOR_B, DRAW_PUT); - draw_string (0, 30, "Prog/Vol+: brighter", LCD_COLOR_B, DRAW_PUT); - draw_string (0, 40, "Prog/Vol-: darker", LCD_COLOR_B, DRAW_PUT); - draw_numU (0, 64, bl_val, 0, LCD_COLOR_B, DRAW_PUT); - - while(!KEY_Exit) - { - waitKeyUpDown(); - bl_val &= 0x3F; - if(KEY_Pplus || KEY_Pminus || KEY_Vplus || KEY_Vminus) - { - draw_block(0,64,32,8,3,DRAW_ERASE); - if(KEY_Pplus) - bl_val++; - if(KEY_Pminus) - bl_val--; - if(KEY_Vplus) - bl_val+=10; - if(KEY_Vminus) - bl_val-=10; - draw_numU (0, 64, bl_val, 0, LCD_COLOR_B, DRAW_PUT); - } - } - -} - -/* -void softfunc1(void) -{ - set_font(BOLDFONT); -draw_block (0, 80, LCD_SIZE_X, 20, LCD_COLOR_B, DRAW_ERASE); -draw_string (0, 80, "softfunc1 called", LCD_COLOR_B, DRAW_PUT); -while(!KEY_Exit) {}; -} -*/ - -void draw_itile(unsigned char x, unsigned char y, unsigned char type) -{ -again: - if(type < 0xF0) - { - if(type & 0x10) - draw_block(x+1, y+1, 2, 2, 3, DRAW_XOR); - if(type & 0x20) - draw_block(x+5, y+1, 2, 2, 3, DRAW_XOR); - if(type & 0x40) - draw_block(x+1, y+5, 2, 2, 3, DRAW_XOR); - if(type & 0x80) - draw_block(x+5, y+5, 2, 2, 3, DRAW_XOR); - } - - type <<= 4; - - if(type) - { - x += 8; - goto again; - } -} - -const char itilemap[7][7] = -{ - { 0x00, 0x00, 0x00, 0x6C, 0x90, 0x00, 0x00 }, - { 0x00, 0x00, 0x66, 0x6C, 0x99, 0x90, 0x00 }, - { 0x00, 0x06, 0x66, 0x6C, 0x99, 0x99, 0x00 }, - { 0x00, 0x66, 0x66, 0x6C, 0x99, 0x99, 0x90 }, - { 0x00, 0x66, 0x66, 0x6C, 0x99, 0x99, 0x90 }, - { 0x06, 0x66, 0x66, 0x6C, 0x99, 0x99, 0x99 }, - { 0x0A, 0xAA, 0xAA, 0xA0, 0x55, 0x55, 0x55 } -}; - -void illusion(void) -{ - int x,y,z; - - lcd_fill (LCD_COLOR_W); - z = 1; - for(x=0;x<15;x++) - { - for(y=0;y<15;y++) - { - if(z++ & 0x01) - { - draw_block (2+ (x*8), 16+ (y*8), 8, 8, LCD_COLOR_B, DRAW_PUT); - } - } - } - - for(y=0;y<7;y++) - { - for(x=0;x<7;x++) - { - draw_itile(2+(x*16), 24+(y*8), itilemap[y][x]); - } - } - - for(y=0;y<6;y++) - { - for(x=0;x<7;x++) - { - draw_itile(2+(x*16), 80+(y*8), ~itilemap[5-y][x]); - } - } - - - waitKeyUpDown(); -} - -void test_bl(void) -{ - setBacklight(BL_AUTO); -} - -void bat_dbg(void) -{ - bat_state ^= BAT_DEBUG; -} - -void tkey(void) -{ - while(1) - { - waitKeyUpDown(); - setBacklight(BL_AUTO); - lcd_fill (LCD_COLOR_W); - set_font(SMALLFONT); - draw_hexW (0, 16, keys[0], LCD_COLOR_B, DRAW_PUT); - draw_hexW (0, 24, keys[1], LCD_COLOR_B, DRAW_PUT); - } -} - -// plot a graph RSSI/t -void RSSI_monitor(void) { - unsigned char row = 0; - int rssi_dBm; - unsigned char rssi; - volatile unsigned long timer = 0; - unsigned char x; - lcd_fill (LCD_COLOR_W); - - // title - set_font(BOLDFONT); - draw_string (0, 0, "RF test", LCD_COLOR_B, DRAW_PUT); - draw_block (0,10,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT); - set_font(SMALLFONT); - - RF_changestate(RFrx); - - // coordinate system - // x (time) - draw_block (19,20,102,1, LCD_COLOR_B, DRAW_PUT); - - // y (RSSI) - draw_block (19,20,1,129, LCD_COLOR_B, DRAW_PUT); // axis - for(x=20;x<150;x+=10) // ticks - draw_pixel (18,x, LCD_COLOR_B, DRAW_PUT); - for(x=20;x<160;x+=20) // value - draw_numU (0, x-3, x-20, 0, LCD_COLOR_B, DRAW_PUT); - draw_string (0,152, "-dBm", LCD_COLOR_B, DRAW_PUT); // label - - - while(KEY_Exit) {}; - while (!KEY_Exit) - { - // wait - while (timer) - { - if(KEY_Exit) - timer = 0; - } - addTimeout(&timer,20); // next sample in n*5 ms (100 ms) - - // read RSSI - VICIntEnClr = INT_EINT0; - rssi = cc1100_read1(RSSI); - VICIntEnable = INT_EINT0; - - // scale - if(rssi & 0x80) - rssi_dBm = (rssi-256)/2-75; - else - rssi_dBm = rssi/2-75; - - if(rssi_dBm < 0) - rssi_dBm = ~rssi_dBm + 1; - else - rssi_dBm = 0; - - // plot - draw_block (row+20,21,1,128, LCD_COLOR_B, DRAW_ERASE); - draw_pixel(row+20, rssi_dBm+30, LCD_COLOR_B, DRAW_PUT); - draw_pixel (row+20,19, LCD_COLOR_B,DRAW_ERASE); - - // next time - row++; - if(row == 100) - row=0; - draw_pixel (row+20, 19, LCD_COLOR_B, DRAW_PUT); - //draw_block (row+20,30,1,100, LCD_COLOR_B, DRAW_PUT); - } - removeTimeout(&timer); - RF_changestate(RFwor); -} - - -// plot incoming radio data in single shot mode -// CC1100 datasheet section 31.1 Asynchronous Operation, p. 57 -// 1 px is 50 ys -void RF_viewer(void) { - unsigned char row = 0; - unsigned char col = 16; - - lcd_fill (LCD_COLOR_W); - set_font(BOLDFONT); - draw_string (0, 0, "RF viewer", LCD_COLOR_B, DRAW_PUT); - draw_block (0,10,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT); - set_font(SMALLFONT); - - RFasyncmode(true); - - //cc1100_write1(FREQ2,0x20); - //cc1100_write1(FREQ1,0x29); - //cc1100_write1(FREQ0,0x3E); - - //cc1100_write1(AGCCTRL2,0x07); - //cc1100_write1(AGCCTRL1,0x00); - //cc1100_write1(AGCCTRL0,0x91); - //~ cc1100_write1(AGCCTRL2,0x03); - //~ cc1100_write1(AGCCTRL1,0x00); - //~ cc1100_write1(AGCCTRL0,0x92); - -//~ #define RF2UART - -#ifdef RF2UART - unsigned char bits=0; - unsigned char bitno=7; - - // set uart baudrate - serial_setbrg(230400); // fastest - - // set frequency - //~ cc1100_write1(FREQ2,0x10); - //~ cc1100_write1(FREQ1,0x12); - //~ cc1100_write1(FREQ0,0xF6); - - // set gain // OOK/ASK optima. see TI DN022 - //~ cc1100_write1(AGCCTRL2,0x07); // A - cc1100_write1(AGCCTRL2,0x03); // B - cc1100_write1(AGCCTRL1,0x00); - //~ cc1100_write1(AGCCTRL0,0x92); // A - cc1100_write1(AGCCTRL0,0x91); // B -#endif - - cc1100_strobe(SFRX); - cc1100_strobe(SRX); - - while(KEY_Exit) {}; - while(!KEY_Exit) - { -#ifdef RF2UART - //~ waitus(100); // 1 byte -> 10 bits / 115200 baud = 86,8 ys - waitus(50); // 1 byte -> 10 bits / 230400 baud = 43,4 ys - - if (!(FIOPIN0 & GDO2)) // get rf state as bit - bits |= (1< uart - { - bitno = 7; - serial_putbyte(bits); - bits = 0; - } - else - bitno--; // advance - -#else - waitus(50); - - draw_block(row,col,2,8,3,DRAW_ERASE); - - // plot: get data from CC1100's GDO2 on P0.24 (fast IO) - if((FIOPIN0 & GDO2)) - draw_pixel (row,col+2, LCD_COLOR_B, DRAW_PUT); - else - draw_pixel (row,col, LCD_COLOR_B, DRAW_PUT); - - // advance plot position - row++; - if(row == 127) - { - col +=8; - row=0; - - // screen is full, wait for keypress - if(col >140) - { - wait5ms(); - col = 16; - while(!(keys[0] || keys[1]));// && !(FIOPIN0 & GDO2)); // this seems strange, alternatives: while(!ANYKEY) or isKeyPressed - } - } -#endif - } - RFasyncmode(false); -} - - -void test_RF(void) { - - unsigned char destAddr; - - lcd_fill (LCD_COLOR_W); - destAddr = 0x01; - - set_font(BOLDFONT); - draw_string (0, 0, "RF test", LCD_COLOR_B, DRAW_PUT); - draw_block (0,10,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT); - draw_block (0,149,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT); - draw_string (1, 15, "Destination address", LCD_COLOR_B, DRAW_PUT); - set_font(SMALLFONT); - - draw_string (0, 60, "TV/Power Key:", LCD_COLOR_B, DRAW_PUT); - draw_string (0, 69, "send something", LCD_COLOR_B, DRAW_PUT); - draw_string (0, 86, "OK Key: Ping", LCD_COLOR_B, DRAW_PUT); - - draw_numU (1, 25, destAddr, 0, LCD_COLOR_B, DRAW_PUT); - - while(KEY_Exit) {}; - while(!KEY_Exit) - { - waitKeyUpDown(); - - - draw_numU (1, 25, destAddr, 0, LCD_COLOR_B, DRAW_XOR); - if(KEY_Left) { - destAddr--; - } - if(KEY_Right) { - destAddr++; - } - draw_numU (1, 25, destAddr, 0, LCD_COLOR_B, DRAW_XOR); - - - if(KEY_OK) - { - unsigned char ping; - draw_block (0,40,LCD_SIZE_X,10,3,DRAW_ERASE); - draw_string (0, 40, "send ping", LCD_COLOR_B, DRAW_PUT); - - ping = RF_sendping(destAddr); - - draw_block (0,40,LCD_SIZE_X,10,3,DRAW_ERASE); - if (ping) { - draw_string (0, 40, "ping received", LCD_COLOR_B, DRAW_PUT); - } - else { - draw_string (0, 40, "ping timeout", LCD_COLOR_B, DRAW_PUT); - } - - } - else if(KEY_Power) - { - struct RFendpoint_* cur_ep; - - cur_ep = openEP(0,0, packet_test); - if(cur_ep) { - cur_ep->dest = destAddr; - cur_ep->data[0] = 'P'; - cur_ep->data[1] = 'W'; - cur_ep->data[2] = 0x00; - cur_ep->bufferlen = 3; - cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce | EPsendwor; - - RF_changestate(RFtx); - } - } - else if(KEY_TV) - { - struct RFendpoint_* cur_ep; - - cur_ep = openEP(0,0, packet_test); - cur_ep->dest = destAddr; - cur_ep->data[0] = 'T'; - cur_ep->data[1] = 'V'; - cur_ep->data[2] = 0x00; - cur_ep->bufferlen = 3; - cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce | EPsendwor; - - RF_changestate(RFtx); - } else if(KEY_1) - { - struct RFendpoint_* cur_ep; - - cur_ep = openEP(0,0, packet_test); - if(cur_ep) { - cur_ep->dest = destAddr; - cur_ep->data[0] = 'X'; - cur_ep->data[1] = '1'; - cur_ep->data[2] = 0x00; - cur_ep->bufferlen = 3; - cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce; - - RF_changestate(RFtx); - } - } - else if(KEY_2) - { - struct RFendpoint_* cur_ep; - - cur_ep = openEP(0,0, packet_test); - cur_ep->dest = destAddr; - cur_ep->data[0] = 'X'; - cur_ep->data[1] = '2'; - cur_ep->data[2] = 0x00; - cur_ep->bufferlen = 3; - cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce ; - - RF_changestate(RFtx); - } - } -} - - -void test_irrec(void) { - - struct RAWcmd_ test_cmd; - - test_cmd.tval = 0; - - lcd_fill (LCD_COLOR_W); - - set_font(BOLDFONT); - draw_string (0, 0, "IR receive test", LCD_COLOR_B, DRAW_PUT); - draw_block (0,10,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT); - draw_block (0,149,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT); - set_font(SMALLFONT); - - draw_string (0, 20, "OK Key:", LCD_COLOR_B, DRAW_PUT); - draw_string (0, 29, "receive IR command", LCD_COLOR_B, DRAW_PUT); - - draw_string (0, 40, "Mute Key:", LCD_COLOR_B, DRAW_PUT); - draw_string (0, 49, "send received command", LCD_COLOR_B, DRAW_PUT); - - while(KEY_Exit) {}; - while(!KEY_Exit) - { - waitKeyUpDown(); - if(KEY_OK) - { - getIR_test(&test_cmd); - } - if(KEY_Mute) - { - RAW_Send((unsigned long)&test_cmd); - while(KEY_Mute) - RAW_Repeat(); - RAW_Stop(); - } - } - setEncoder(irDevTab.device[irDevTab.active].encoder, irDevTab.device[irDevTab.active].set); -} - -void erase_flash1(void) -{ - eraseFlash(1); -} - -void test_sid(void) { - unsigned char temp; - - lcd_fill (LCD_COLOR_W); - - set_font(BOLDFONT); - draw_string (0, 0, "SID", LCD_COLOR_B, DRAW_PUT); - draw_block (0,10,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT); - draw_block (0,149,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT); - set_font(SMALLFONT); - - draw_string (0, 20, "A B C D", LCD_COLOR_B, DRAW_PUT); - draw_string (0, 29, "set envelope", LCD_COLOR_B, DRAW_PUT); - - draw_string (0, 45, "OK", LCD_COLOR_B, DRAW_PUT); - draw_string (0, 54, "play a song", LCD_COLOR_B, DRAW_PUT); - - draw_string (0, 70, "1-7", LCD_COLOR_B, DRAW_PUT); - draw_string (0, 79, "play a note", LCD_COLOR_B, DRAW_PUT); - - draw_string (0, 95, "color keys", LCD_COLOR_B, DRAW_PUT); - draw_string (0, 104, "set waveform", LCD_COLOR_B, DRAW_PUT); - - draw_string (0, 120, "Mute", LCD_COLOR_B, DRAW_PUT); - draw_string (0, 129, "Raiders March", LCD_COLOR_B, DRAW_PUT); - - sysInfo |= SYS_IR; - SID.noise = 0xaa; - playstate = 0x00; - playtone[0] = 0; - playtone[1] = 0; - playtone[2] = 0; - temp = 0; - PWMPR = 0; - switchSound(SOUND_ON); - SID.flags |= SIDenable; - SIDsetwave(0,TRIANGLE); - SIDsetadsr(0,8,8,10,8); - - while(KEY_Exit) {}; - do { - waitKeyUp(); - if (temp) - { - SID.reg[REG_Control] &= ~GATE; - temp = 0; - } - waitKeyDown(); - if (KEY_1) - { - SIDsetfrq(0,4455); - SID.reg[REG_Control] |= GATE; - temp =1; - } - else if (KEY_2) - { - SIDsetfrq(0,5001); - SID.reg[REG_Control] |= GATE; - temp =1; - } - else if (KEY_3) - { - SIDsetfrq(0,5613); - SID.reg[REG_Control] |= GATE; - temp =1; - } - else if (KEY_4) - { - SIDsetfrq(0,5947); - SID.reg[REG_Control] |= GATE; - temp =1; - } - else if (KEY_5) - { - SIDsetfrq(0,6676); - SID.reg[REG_Control] |= GATE; - temp =1; - } - else if (KEY_6) - { - SIDsetfrq(0,7493); - SID.reg[REG_Control] |= GATE; - temp =1; - } - else if (KEY_7) - { - SIDsetfrq(0,8411); - SID.reg[REG_Control] |= GATE; - temp =1; - } - else if (KEY_A) - { - SIDsetadsr(0,0,10,7,5); - } - else if (KEY_B) - { - SIDsetadsr(0,0,10,0,10); - } - else if (KEY_C) - { - SIDsetadsr(0,8,8,10,6); - } - else if (KEY_D) - { - SIDsetadsr(0,0,0,15,1); - } - else if (KEY_Red) - { - SIDsetwave(0,TRIANGLE); - } - else if (KEY_Green) - { - SIDsetwave(0,SAWTOOTH); - } - else if (KEY_Yellow) - { - SID.reg[REG_PWhi] = 0x08; - SIDsetwave(0,RECTANGLE); - } - else if (KEY_Blue) - { - SIDsetwave(0,NOISE); - } - else if (KEY_OK) - { - if (playstate == 0) - { - playstate = 1; - - SIDsetadsr(1,0,5,0,5); - SIDsetwave(1,SAWTOOTH); - SID.reg[7+REG_PWhi] = 0x06; - tonelen[1] = 0; - playtone[1] = (unsigned char*)&song3[0]; - - SIDsetadsr(2,0,9,0,9); - SIDsetwave(2,RECTANGLE); - SID.reg[14+REG_PWhi] = 0x08; - tonelen[2] = 0; - playtone[2] = (unsigned char*)&song2[0]; - - playtone_cb = addTimerCB(SIDplaytone, 4); - startCB(playtone_cb); - } - } else if (KEY_Mute) - { - if (playstate == 0) - { - playstate = 1; - - playtone[0] = (unsigned char*)&song1[0]; - - playcounter = 0; - playcountermax = sizeof(song1)/14; - - playtone_cb = addTimerCB(SIDplaydump, 4); - startCB(playtone_cb); - } - } - } while (!KEY_Exit); - sysInfo &= ~SYS_IR; - switchSound(SOUND_OFF); - SID.flags &= ~SIDenable; -} - -void test_click(FORM* form, CONTROL* control) { - msgbox(45,BC_OKOnly | BC_DefaultButton1,control->caption); - form_draw(form); -} - -void test2_click(FORM* form, CONTROL* control) { - beep(0); -} - -void test3_click(FORM* form, CONTROL* control) { - beep(1); -} - -void test_numbox(FORM* form, CONTROL* control) { - msgbox(30,BC_OKOnly | BC_DefaultButton1,"numbox click"); - form_draw(form); -} - -void test_numchange(FORM* form, CONTROL* control) { - unsigned short x; - x=((NUMBOX*)control)->value; - if(x==50) { - x=msgbox(30,BC_OKOnly | BC_DefaultButton1,"numbox =50"); - form_draw(form); - } -} - -void test_change(FORM* form, CONTROL* control) { - msgbox(30,BC_OKOnly | BC_DefaultButton1,"geaendert"); - form_draw(form); -} - -void formload (FORM* form) -{ - struct RFendpoint_* cur_ep; - - cur_ep = openEP(&(form->controls[7])->tag1, 1, packet_RFenc); - form->tag = (unsigned long) cur_ep; - if (cur_ep) - { - cur_ep->flags |= EPenabled; - RF.flags &= ~WORenabled; - RF_changestate(RFrx); - } - - msgbox(50,BC_OKOnly | BC_DefaultButton1,"Form open"); -} - -void formclose (FORM* form) -{ - - if (form->tag) - { - closeEP((struct RFendpoint_*)form->tag); - RF_changestate(RFwor); - } - - msgbox(50,BC_OKOnly | BC_DefaultButton1,"Form close"); - -} - -void test_timer (FORM* form) -{ - struct RFendpoint_* cur_ep; - - cur_ep = (struct RFendpoint_*)form->tag; - if (cur_ep->flags & EPnewdata) - { - cur_ep->flags &= ~EPnewdata; - control_draw(form->controls[7], (form->sel == 7)); - } -} - -void test_controls(void) { - - const char* listbox1items[5] = { "Listitem1", - "Listitem2", - "Listitem3", - "Listitem4", - "Listitem555"}; - - char txtbuffer[20]; - const LABEL label1 = {BC_Label,0,15,40,10,SMALLFONT,0,"label1",test_click}; - const LABEL label2 = {BC_Labelnotab,50,15,40,9,BOLDFONT,0,"label2",0}; - const LABEL label3 = {BC_Labelnotab,0,110,40,9,BOLDFONT,0,"Numbox:",0}; - const BUTTON button1 = {BC_Button,0,30,40,15,SMALLFONT,0,"Button1",test_click}; - const BUTTON button2 = {BC_Button,0,50,40,16,SMALLFONT,0,"Button2",test2_click}; - const BUTTON button3 = {BC_Button,0,70,40,16,SMALLFONT,0,"Button3",test3_click}; - const BUTTON button4 = {BC_Button | BC_Disabled,0,90,40,16,SMALLFONT,0,"Button4",test_click}; - NUMBOX numbox1 = {BC_Numbox,0,120,20,9,SMALLFONT,1,1,500,test_numbox,test_numchange}; - TXTBOX txtbox1 = {BC_Txtbox,0,135,120,10,SMALLFONT,20,0,txtbuffer,test_click,test_change}; - DATEBOX datebox1 = {BC_Datebox,50,30,58,9,SMALLFONT,0,{0x01, 0x02, 0x01, 0x08},NULL,test_change}; - TIMEBOX timebox1 = {BC_Timebox,50,50,58,9,SMALLFONT,0,{0x00, 0x00, 0x12, 0x00},NULL,test_change}; - LISTBOX listbox1 = {BC_Listbox,50,70,58,10,SMALLFONT,0,5,(char**)listbox1items,NULL,test_change}; - - CONTROL* controls[12] = { (CONTROL*)&label1, - (CONTROL*)&label2, - (CONTROL*)&label3, - (CONTROL*)&button1, - (CONTROL*)&button2, - (CONTROL*)&button3, - (CONTROL*)&button4, - (CONTROL*)&numbox1, - (CONTROL*)&txtbox1, - (CONTROL*)&datebox1, - (CONTROL*)&timebox1, - (CONTROL*)&listbox1}; - - FORM form = {"Controls","footer\tTab\tTab",formload,formclose,test_timer,0,controls,3,12,0,10}; - memcpy(txtbuffer,"Textbox",8); - - form_exec(&form); - -} - -/* -struct MENU_ENTRY softMenuEntries[16]; -struct MENU softMenu; -*/ - -const struct MENU_ENTRY testMenuEntries[] = -{ - {RTCtimer_edit, 0, FUNCENTRY, "Timer", "Timer" }, - {test_icon, 0, FUNCENTRY, "Icon Demo", "Draw icons" }, - {test_irrec, 0, FUNCENTRY, "Receive IR", "Receive IR" }, - {test_RF, 0, FUNCENTRY, "RF test", "Test RF" }, - {RSSI_monitor, 0, FUNCENTRY, "RSSI Monitor", "RSSI Monitor" }, - {RF_viewer, 0, FUNCENTRY, "RF viewer", "RF viewer" }, - {test_circle, 0, FUNCENTRY, "Circle", "Draw circles" }, - {test_controls, 0, FUNCENTRY, "Controls", "Control elements" }, - {test_frame, 0, FUNCENTRY, "Frame", "Draw frame" }, - {test_frame2, 0, FUNCENTRY, "Frame2", "Draw frame2" }, - {draw_fonts, 0, FUNCENTRY, "Fonts", "Draw fonts" }, - {test_logo, 0, FUNCENTRY, "Logo", "Draw logo" }, - {fp1, 0, FUNCENTRY, "Charset", "Draw charset" }, - {illusion, 0, FUNCENTRY, "Illusion", "Optical illusion" }, - {test_bl, 0, FUNCENTRY, "Auto backlight", "Test auto backlight" }, - {bat_dbg, 0, FUNCENTRY, "Bat debug", "Show/hide bat values"}, - {tkey, 0, FUNCENTRY, "Keytest", "Test keypad" }, - {erase_flash1, 0, FUNCENTRY, "Erase Flash1", "Erase Flash1" }, - {test_sid, 0, FUNCENTRY, "Sound", "Play music" }, - {test_movearound, 0, FUNCENTRY, "Move", "Slowly move a cursor"}, -// { 0, (void*)&softMenu, MENUENTRY, "Soft-Test", "access soft" } -}; - -const struct MENU testMenu = -{ - NUM_OF_ELEMENTS (testMenuEntries), (MENU_ENTRY*)&testMenuEntries, "Test Menu" -}; - -/* -void testmenu_init(void) -{ - testdata1 = 0; - testdata2 = 0; - - for(i=0;i<16;i++) - { - softMenuEntries[i].exec = 0; - softMenuEntries[i].data = 0; - softMenuEntries[i].type = 0; - softMenuEntries[i].name = 0; - softMenuEntries[i].help = 0; - } - - softMenuEntries[0].exec = softfunc1; - softMenuEntries[0].data = 0; - softMenuEntries[0].type = FUNCENTRY; - softMenuEntries[0].name = "softfunc test"; - softMenuEntries[0].help = "run softfunc test"; - - - softMenu.name = "Soft Menu"; - softMenu.num_entries = 1; - softMenu.entry = softMenuEntries; - -} -*/ - diff --git a/boop/gui/testmenu.h b/boop/gui/testmenu.h deleted file mode 100644 index 79f990e..0000000 --- a/boop/gui/testmenu.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - testmenu.h - testmenu for menuing system - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef TESTMENU_H -#define TESTMENU_H - -extern struct MENU testMenu; -//void testmenu_init(void); -void test_irrec(void); - -#endif diff --git a/boop/infrared/infrared.c b/boop/infrared.c similarity index 51% rename from boop/infrared/infrared.c rename to boop/infrared.c index 5e3aa45..7fc9312 100644 --- a/boop/infrared/infrared.c +++ b/boop/infrared.c @@ -16,55 +16,47 @@ along with this program. If not, see . */ -#include "global.h" #include "infrared.h" -#include "infraredirq.h" #include "irq.h" #include "lpc2220.h" #include "keyboard.h" -#include "encoders.h" -#include "codes.h" -#include "ir_selector.h" -#include "pwm.h" -volatile unsigned char mod_enable; -volatile unsigned char hi_border; -volatile unsigned char lo_border; -volatile unsigned int cycles; -volatile unsigned long keyMap[42]; +#include "externs.h" + +static unsigned char c_cnt; +static unsigned int b_len; + +unsigned char mod_enable; +unsigned char hi_border; +unsigned char lo_border; +unsigned int cycles; ir_fn irEncoder; -ir_sfn irSend; +ir_fn irSend; ir_fn irRepeat; ir_fn irStop; -unsigned char act_encoder, act_set; +const struct irModule defModule = { defIR, defSender, defRepeater, defStopper, 20, 0, 3 }; -const struct irModule defModule = { defIR, defSender, defRepeater, defStopper, 50, 1, 4 }; -void dummy(void) -{ - irStop = RC_setting; //make compiler happy for select_ir in mainmenu -} +unsigned long keyMap[42]; void initIR(void) { -// irStop = select_ir; //make compiler happy for select_ir in mainmenu setIR(defModule); } void startIrIRQ(void) { - T1TCR = 0x03; + T1TCR = 0x02; T1TC = 0; T1PC = 0; T1PR = 0x00; -// T1PR = 0x01; T1MCR = 0x03; + T1TCR = 0x01; VICVectAddr1 = (unsigned long)&(irIRQ); VICVectCntl1 = VIC_SLOT_EN | INT_SRC_TIMER1; - //VICIntSelect |= INT_TIMER1; VICIntEnable = INT_TIMER1; } @@ -75,25 +67,21 @@ void setIR(struct irModule module) irSend = module.sender; irRepeat = module.repeater; irStop = module.stopper; -// setIRspeed(module); T1MR0 = module.tval; hi_border = module.hi_border; lo_border = module.lo_border; cycles = 100; - ir.state = 0x00; - ir.actcmd = 0; - ir.cmd = 0; - T1TCR = 0x03; + T1TCR = 0x01; } /* Stubs for various interrupts (may be replaced later) */ /* ---------------------------------------------------- */ -void __attribute__ ((section(".text.fastcode"))) defIR(void) +void defIR(void) { return; } -void defSender(unsigned long cmd) +void defSender(void) { return; } @@ -107,82 +95,87 @@ void defStopper(void) return; } +void __attribute__ ((interrupt("IRQ"))) irIRQ(void) +{ + c_cnt++; + if(c_cnt <= hi_border) + { + FIOSET0 = (mod_enable<<21); + } + else + { + FIOCLR0 = (1<<21); + if(c_cnt >= lo_border) + { + c_cnt = 0; + b_len++; + if(b_len >= cycles) + { + irEncoder(); + b_len = 0; + } + } + } + + T1IR = 1; + VICVectAddr = 0; +} + void runIR(void) { T1TCR = 0x01; - PWM_set_IR_duty_cycle(0); - -} - -void setIRspeed(struct irModule module) -{ - PWM_set_frequency(15000000 / (module.tval * module.lo_border)); - ir.duty_cycle =(module.hi_border * 100) / module.lo_border; } void stopIR(void) { T1TCR = 0x03; - PWM_set_IR_duty_cycle(0); - } -void copyMapC(unsigned char *map) +#define doKey( _X, _Y ) if(_X) return keyMap[_Y]; else + +unsigned long getCode(void) { - int x; - for(x=0;x<42;x++) - { - keyMap[x] = map[x]; - } -} - -void copyMapPC(unsigned int pre, unsigned char *map) -{ - int x; - for(x=0;x<42;x++) - { - if(map[x] != 0) - keyMap[x] = pre | map[x]; - else - keyMap[x] = 0x00000000; - } -} - -void copyMapS(unsigned short *map) -{ - int x; - for(x=0;x<42;x++) - { - keyMap[x] = map[x]; - } -} - -void copyMapI(unsigned int *map) -{ - int x; - for(x=0;x<42;x++) - { - keyMap[x] = map[x]; - } -} - -unsigned long setEncoder( unsigned char x, unsigned char y ) -{ - if(EncIsValid(x,y)) { - act_encoder = x; - act_set = y; - encoders.encoder[act_encoder].init(act_set); - return(1); - } - return(0); -} - -unsigned long getCode(void) { - - int keynum = getKeynum(); - - if (keynum < 42) - return keyMap[keynum]; - else + doKey(KEY_A, 0); + doKey(KEY_B, 1); + doKey(KEY_C, 2); + doKey(KEY_D, 3); + doKey(KEY_Betty, 4); + doKey(KEY_Exit, 5); + doKey(KEY_Up, 6); + doKey(KEY_Down, 7); + doKey(KEY_Left, 8); + doKey(KEY_Right, 9); + doKey(KEY_OK, 10); + doKey(KEY_Vplus, 11); + doKey(KEY_Vminus, 12); + doKey(KEY_Mute, 13); + doKey(KEY_Pplus, 14); + doKey(KEY_Pminus, 15); + doKey(KEY_1, 16); + doKey(KEY_2, 17); + doKey(KEY_3, 18); + doKey(KEY_4, 19); + doKey(KEY_5, 20); + doKey(KEY_6, 21); + doKey(KEY_7, 22); + doKey(KEY_8, 23); + doKey(KEY_9, 24); + doKey(KEY_0, 25); + doKey(KEY_Minus, 26); + doKey(KEY_AV, 27); + doKey(KEY_Menu, 28); + doKey(KEY_PiP, 29); + doKey(KEY_AB, 30); + doKey(KEY_16_9, 31); + doKey(KEY_Info, 32); + doKey(KEY_VTX1, 33); + doKey(KEY_VTX2, 34); + doKey(KEY_VTX3, 35); + doKey(KEY_Blue, 36); + doKey(KEY_Yellow, 37); + doKey(KEY_Green, 38); + doKey(KEY_Red, 39); + doKey(KEY_TV, 40); + doKey(KEY_Power, 41); return 0xFFFFFFFF; } diff --git a/boop/infrared.h b/boop/infrared.h new file mode 100644 index 0000000..241c157 --- /dev/null +++ b/boop/infrared.h @@ -0,0 +1,60 @@ +/* + infrared.h - ir carrier generation and encoding core + Copyright (C) 2007 Ch. Klippel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef INFRARED_H +#define INFRARED_H + +typedef void(*ir_fn)(void); + +extern ir_fn irSend; +extern ir_fn irRepeat; +extern ir_fn irStop; + +typedef struct irModule +{ + ir_fn encoder; + ir_fn sender; + ir_fn repeater; + ir_fn stopper; + int tval; + unsigned int hi_border; + unsigned int lo_border; +} irModule; + +extern unsigned char mod_enable; +extern unsigned char hi_border; +extern unsigned char lo_border; +extern unsigned int cycles; +extern unsigned long keyMap[42]; + +void defIR(void); +void defSender(void); +void defRepeater(void); +void defStopper(void); + +void irIRQ (void) __attribute__ ((interrupt("IRQ"))) ; + +void initIR(void); +void startIrIRQ(void); +void setIR(struct irModule module); +void runIR(void); +void stopIR(void); +unsigned long getCode(void); + +#endif + diff --git a/boop/infrared/Make.conf b/boop/infrared/Make.conf deleted file mode 100644 index f6aed17..0000000 --- a/boop/infrared/Make.conf +++ /dev/null @@ -1,5 +0,0 @@ -THUMBSRCS := infrared.c codes.c encoders.c ir_capture.c ir_selector.c -SRCS := infraredirq.c pwm.c -THUMBSRCSUNOPT := ir_itt.c ir_nrc17.c \ - ir_raw.c ir_rc5.c ir_rc6.c ir_rca.c ir_rcmm.c ir_rec80.c ir_recs80.c ir_rf.c \ - ir_sirc.c ir_spaceenc.c ir_lirc.c diff --git a/boop/infrared/codes.c b/boop/infrared/codes.c deleted file mode 100644 index 99a5f59..0000000 --- a/boop/infrared/codes.c +++ /dev/null @@ -1,268 +0,0 @@ -/* - codes.c - structs for accessing the infrared-codetables - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "codes.h" -#include "ir_lirc.h" - -const struct TABLES_S ITT = -{ - 4, - { - { - #include "ir_codes/itt/seleco_019" - "Seleco #19" - }, - { - #include "ir_codes/itt/seleco_049" - "Seleco #49" - }, - { - #include "ir_codes/itt/seleco_108" - "Seleco #108" - }, - { - #include "ir_codes/itt/seleco_131" - "Seleco #131" - }, - } -}; - -const struct TABLES_S NRC17 = -{ - 2, - { - { - #include "ir_codes/nrc17/dbox2" - "DBox 2" - }, - { - #include "ir_codes/nrc17/grundig_tp720" - "Grundig TP720" - } - } -}; - - -#define RC5_STD(cmd) 0x1000 | cmd -#define RC5X(cmd) cmd - -const struct TABLES_S RC5 = -{ - 3, - { - { - #include "ir_codes/rc5/tv" - "Generic TV" - }, - { - #include "ir_codes/rc5/HARMONY_655" - "Logitec Harmony" - }, - { - #include "ir_codes/rc5/technisat_satreceiver_103TS103" - "SAT(103TS103)" - } - } -}; - -const struct TABLES_I RC6 = -{ - 3, - { - { - #include "ir_codes/rc6/tv" - "RC6 TV" - }, - { - #include "ir_codes/rc6/dvd" - "RC6 DVD" - }, - { - #include "ir_codes/rc6/ufs922" - "UFS 922" - } - } -}; - -const struct TABLES_C RCA = -{ - 1, - { - { - #include "ir_codes/rca/xbox" - "X-Box" - } - } -}; - -const struct TABLES_I RCMM = -{ - 2, - { - { - #include "ir_codes/rcmm/galaxis" - "Galaxis Sat" - }, - { - #include "ir_codes/rcmm/ufs910" - "UFS 910" - } - } -}; - -const struct TABLES_I REC80 = -{ - 1, - { - { - #include "ir_codes/rec80/rak_sc957wk" - "RAK SC-957-WK" - } - } -}; - -const struct TABLES_S RECS80 = -{ - 2, - { - { - #include "ir_codes/recs80/seleco_020" - "seleco#20" - }, - { - #include "ir_codes/recs80/seleco_157" - "Seleco #157" - } - } -}; - -const struct TABLES_S SIRC = -{ - 3, - { - { - #include "ir_codes/sirc/rm-pp411" - "RM-PP411" - }, - { - #include "ir_codes/sirc/tv" - "Generic TV" - }, - { - #include "ir_codes/sirc/UFD400" - "Katrein UFD400" - } - } -}; - -const struct TABLES_C SPACEENC = -{ - 2, - { - { - #include "ir_codes/spaceenc/schneider_dtv3" - "Schneider DTV3" - }, - { - #include "ir_codes/spaceenc/seleco_027" - "Seleco #27" - } - } -}; - -const struct TABLES_S IRRF = -{ - 2, - { - { - #include "ir_codes/rf/cc1100_a0" - "RF 0" - }, - { - #include "ir_codes/rf/cc1100_a1" - "RF 1" - } - } -}; - -const struct TABLES_N RAW = -{ - 4, - { - { - "RAW Set 1" - }, - { - "RAW Set 2" - }, - { - "RAW Set 3" - }, - { - "RAW Set 4" - } - - } -}; - -const struct TABLES_L LIRC = -{ - 10, - { - { - #include "ir_codes/lirc/ufs922" - "UFS 922" - }, - { - #include "ir_codes/lirc/str_de545" - "STR-DE545" - }, - { - #include "ir_codes/lirc/ufs910" - "UFS 910" - }, - { - #include "ir_codes/lirc/fs20" - "FS20" - }, - { - #include "ir_codes/lirc/hx2262" - "HX2262" - }, - { - #include "ir_codes/lirc/rev008340" - "REV 008340" - }, - { - #include "ir_codes/lirc/olympus_rm-1" - "Olympus RM-1" - }, - { - #include "ir_codes/lirc/apple_remote1" - "Apple Remote 1st gen." - }, - { - #include "ir_codes/lirc/samsung_ue46b6000" - "Samsung TV" - }, - { - #include "ir_codes/lirc/beo4" - "bang & olufsen" - } - } -}; diff --git a/boop/infrared/codes.h b/boop/infrared/codes.h deleted file mode 100644 index 8188a03..0000000 --- a/boop/infrared/codes.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - codes.h - structs for accessing the infrared-codetables - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef CODES_H -#define CODES_H - -typedef struct CODE_TABLE_C -{ - const unsigned char codes[42]; - const char *name; -} CODE_TABLE_C; - -typedef struct CODE_TABLE_S -{ - const unsigned short codes[42]; - const char *name; -} CODE_TABLE_S; - -typedef struct CODE_TABLE_I -{ - const unsigned int codes[42]; - const char *name; -} CODE_TABLE_I; - -typedef struct CODE_TABLE_N -{ - const char *name; -} CODE_TABLE_N; - -typedef struct CODE_TABLE_L -{ - const unsigned long pre_data; // data which the remote sends before actual keycode - const unsigned long post_data; // data which the remote sends after actual keycode - const unsigned long long toggle_bit_mask; // toggle_bit - const unsigned long gap; // time between signals - const unsigned long repeat_gap; // time between two repeat codes - const unsigned char bits; // bits (length of code) - const unsigned char pre_data_bits; // length of pre_data - const unsigned char post_data_bits; // length of post_data - const unsigned char rc6_bit; // doubles signal length of this bit (only used for RC-6) - const unsigned long freq; // modulation frequency - const unsigned short flags; // flags - const unsigned short phead,shead; // header - const unsigned short pthree,sthree; // 3 (only used for RC-MM) - const unsigned short ptwo,stwo; // 2 (only used for RC-MM) - const unsigned short pone,sone; // 1 - const unsigned short pzero,szero; // 0 - const unsigned short plead; // leading pulse - const unsigned short ptrail; // trailing pulse - const unsigned short pfoot,sfoot; // foot - const unsigned short pre_p,pre_s; // signal between pre_data and keycode - const unsigned short post_p, post_s; // signal between keycode and post_code - const unsigned short prepeat,srepeat; // indicate repeating - const unsigned char min_repeat; // code is repeated at least x times code sent once -> min_repeat=0 - const unsigned char duty_cycle; // 0 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ -#include "ir_itt.h" -#include "ir_nrc17.h" -#include "ir_rc5.h" -#include "ir_rc6.h" -#include "ir_rca.h" -#include "ir_rcmm.h" -#include "ir_rec80.h" -#include "ir_recs80.h" -#include "ir_sirc.h" -#include "ir_spaceenc.h" -#include "ir_rf.h" -#include "ir_raw.h" -#include "ir_lirc.h" -#include "encoders.h" -#include "codes.h" - -const struct ENCODERS encoders = -{ - 13, - { - { ITT_Init, (void*)&ITT, 1, "ITT\0" }, - { NRC17_Init, (void*)&NRC17, 1, "NRC17\0" }, - { RC5_Init, (void*)&RC5, 1, "RC-5\0" }, - { RC6_Init, (void*)&RC6, 2, "RC-6\0" }, - { RCA_Init, (void*)&RCA, 0, "RCA\0" }, - { RCMM_Init, (void*)&RCMM, 2, "RC-MM\0" }, - { REC80_Init, (void*)&REC80, 2, "REC-80\0" }, - { RECS80_Init, (void*)&RECS80, 1, "RECS-80\0" }, - { SIRC_Init, (void*)&SIRC, 1, "SIRC\0" }, - { SPACEENC_Init,(void*)&SPACEENC, 0, "SPACEENC\0" }, - { IRRF_Init, (void*)&IRRF, 1, "RF\0" }, - { RAW_Init, (void*)&RAW, 3, "learn" }, - { LIRC_Init, (void*)&LIRC, 4, "LIRC" } - } -}; diff --git a/boop/infrared/encoders.h b/boop/infrared/encoders.h deleted file mode 100644 index 194a716..0000000 --- a/boop/infrared/encoders.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - encoders.h - structs for accessing the infrared-encoders - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef ENCODERS_H -#define ENCODERS_H - -#define ENC_ITT 0 -#define ENC_NRC17 1 -#define ENC_RC5 2 -#define ENC_RCA 3 -#define ENC_RCMM 4 -#define ENC_REC80 5 -#define ENC_RECS80 6 -#define ENC_SIRC 7 -#define ENC_SPACEENC 8 -#define ENC_RF 9 -#define ENC_RAW 10 -#define ENC_LIRC 11 - -typedef void(*cfunc)(unsigned char); - -typedef struct IR_ENCODER -{ - const cfunc init; - const void* data; - const unsigned char type; - const char *name; -} IR_ENCODER; - -typedef struct ENCODERS -{ - const unsigned int num_encoders; - const struct IR_ENCODER encoder[]; -} ENCODERS; - -extern const struct TABLES_S ITT; -extern const struct TABLES_S NRC17; -extern const struct TABLES_S RC5; -extern const struct TABLES_I RC6; -extern const struct TABLES_C RCA; -extern const struct TABLES_I RCMM; -extern const struct TABLES_I REC80; -extern const struct TABLES_S RECS80; -extern const struct TABLES_S SIRC; -extern const struct TABLES_C SPACEENC; -extern const struct TABLES_S IRRF; -extern const struct TABLES_N RAW; -extern const struct TABLES_L LIRC; - -#endif diff --git a/boop/infrared/infrared.h b/boop/infrared/infrared.h deleted file mode 100644 index 4e5665a..0000000 --- a/boop/infrared/infrared.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - infrared.h - ir carrier generation and encoding core - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef INFRARED_H -#define INFRARED_H - -volatile unsigned char hi_border; -volatile unsigned char lo_border; - -typedef void(*ir_fn)(void); -typedef void(*ir_sfn)(unsigned long cmd); - -typedef struct irModule -{ - ir_fn encoder; - ir_sfn sender; - ir_fn repeater; - ir_fn stopper; - unsigned char tval; - unsigned char hi_border; - unsigned char lo_border; -} irModule; - -struct IR_VARS_ { - union { - struct IR_GENERAL_ { //63 Bytes - unsigned int header_cmd; - unsigned int startstop; - unsigned int bit; - unsigned int header_bit; - unsigned int numbits; - unsigned int wait; - unsigned int pause; - unsigned int leadtime; - unsigned int bittime0; - unsigned int bittime1; - unsigned int togglebit; - unsigned int len; - unsigned int trail; - unsigned int preamble; - unsigned int pre; - unsigned char prebits; - unsigned char waittime; - unsigned char bittime; - } general; - struct IR_LIRC_ { //61 Bytes - unsigned long pre_data; // data which the remote sends before actual keycode - unsigned long actpre_data; - unsigned long post_data; // data which the remote sends after actual keycode - unsigned long actpost_data; - unsigned long cycles_counter; - unsigned char bit; - unsigned char stop; - unsigned char repeats; - } lirc; - }; - unsigned int cmd; - unsigned int actcmd; - unsigned char toggle; - unsigned char state; - unsigned char duty_cycle; -} ir; - - -//#define setIRspeed( _m ) { if(sysInfo & 0x80) T1MR0 = _m.tval1; else T1MR0 = _m.tval; } -//#define setIRspeed( _m ) { T1MR0 = _m.tval; } - -void __attribute__ ((section(".text.fastcode"))) defIR(void); -void defSender(unsigned long cmd); -void defRepeater(void); -void defStopper(void); - -void initIR(void); -void startIrIRQ(void); -void setIR(struct irModule module); -void runIR(void); -void stopIR(void); -void setIRspeed(struct irModule module); - -unsigned long setEncoder( unsigned char _x, unsigned char _y ); - -void copyMapC(unsigned char *map); -void copyMapPC(unsigned int pre, unsigned char *map); -void copyMapS(unsigned short *map); -void copyMapI(unsigned int *map); - -unsigned long getCode(void); - -#endif - diff --git a/boop/infrared/infrared_encoders.h b/boop/infrared/infrared_encoders.h deleted file mode 100644 index 54a4ce8..0000000 --- a/boop/infrared/infrared_encoders.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - infraredirq.h - ir carrier generation and encoding core - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef INFRARED_ENCODERS_H -#define INFRARED_ENCODERS_H - -#include "ir_nrc17.h" -#include "ir_itt.h" -#include "ir_rc5.h" -#include "ir_rc6.h" -#include "ir_rca.h" -#include "ir_rcmm.h" -#include "ir_rec80.h" -#include "ir_recs80.h" -#include "ir_sirc.h" -#include "ir_spaceenc.h" - -#endif - diff --git a/boop/infrared/infraredirq.c b/boop/infrared/infraredirq.c deleted file mode 100644 index 2ae58f8..0000000 --- a/boop/infrared/infraredirq.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - infraredirq.c - ir interrupt - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "infrared.h" -#include "infraredirq.h" -#include "irq.h" -#include "lpc2220.h" -#include "keyboard.h" -#include "rf.h" -#include "cc1100.h" -#include "pwm.h" - -extern volatile unsigned char mod_enable; -extern volatile unsigned char hi_border; -extern volatile unsigned char lo_border; -extern volatile unsigned int cycles; - -extern ir_fn irEncoder; - -void __attribute__ ((section(".text.fastcode"))) irIRQ(void) -{ - - irEncoder(); - - if(mod_enable) { - PWM_set_IR_duty_cycle(ir.duty_cycle); - } else { - PWM_set_IR_duty_cycle(0); - } - - T1IR = 1; - -} diff --git a/boop/infrared/infraredirq.h b/boop/infrared/infraredirq.h deleted file mode 100644 index 27f5a48..0000000 --- a/boop/infrared/infraredirq.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - infraredirq.h - ir carrier generation and encoding core - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef INFRAREDIRQ_H -#define INFRAREDIRQ_H - -void irIRQ (void) __attribute__ ((section(".text.fastcode"))); - -#endif - diff --git a/boop/infrared/ir_capture.c b/boop/infrared/ir_capture.c deleted file mode 100644 index 0b07f4a..0000000 --- a/boop/infrared/ir_capture.c +++ /dev/null @@ -1,710 +0,0 @@ -/* - ir_capture.c - - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - - -#include "lcd.h" -#include "fonty.h" -#include "keyboard.h" -#include "lpc2220.h" -#include "irq.h" -#include "backlight.h" -#include "ir_capture.h" -#include "global.h" -#include "ir_raw.h" -#include "infrared.h" -#include "ir_selector.h" -#include "flash.h" -#include "controls.h" -#include "bfs.h" -#include "serial.h" -#include "codes.h" -#include "encoders.h" - - -const char string_unknown[] = ""; -#define len_string_unknown 12 - -extern volatile unsigned char autorepeat; -extern void setSpeed(unsigned char sp); - - -unsigned long waitIrHi(unsigned short* onpulse, unsigned long* time, unsigned long start) { - - unsigned long lowpulse; - unsigned long l; - unsigned long x; - - *onpulse = 0; - lowpulse = 0; - while (1) { - T0CCR = (1<<9) | (1<<11); - while (!(T0IR)); - T0IR = 0xff; - T0CCR = (1<<9) | (1<<10) | (1<<11); - l = T0CR3; - *time = l-start + lowpulse; - (*onpulse)++; - x = start + *time + 30; - while (!(T0IR)) { - if (T0TC > x) - return (l + lowpulse); - } - T0IR = 0xff; - x = T0CR3; - lowpulse = x-l; - } -} - -unsigned char decodewide(unsigned long value, struct widetable_* wide) { - - unsigned char x; - unsigned long minvalue; - unsigned long maxvalue; - unsigned long dif; - - dif = (value / 10); - - if (dif < 1) - dif = 1; - if (value > 1) - minvalue = value - dif; - else - minvalue = 0; - - maxvalue = value + dif; - - for (x=0;x < (wide->count);x++) { - if ((wide->value[x] >= minvalue) && (wide->value[x] <= maxvalue)) { - return x; - } - } - if (wide->count < 15) { - wide->value[wide->count] = value; - wide->count++; - return (wide->count -1); - } - else { - return 0xff; - } -} - -//--------------------------------------------------------------------------- -// captureIR -//--------------------------------------------------------------------------- -/* Return Values: - 0 = OK - 1 = too manny pulse lengths - 2 = abort - 3 = too long -*/ -unsigned char captureIR(struct ir_raw_* capture) { - - unsigned long hightime, lowtime; - unsigned long T0count; - unsigned short highpulse, lowpulse; - unsigned long T1count; - unsigned long timeout; - unsigned char status; - unsigned char wide; - - while(ANYKEY); - - setSpeed(SPEED_60); - disableIRQ(); - T0MCR = 0x00; - - FIODIR0 &= ~(1<<4); - FIOCLR0 |= (1<<12); - PINSEL1 |= (1<<27); - - T0CCR = (1<<9) | (1<<10) | (1<<11); - - capture->widetable[0].count = 0; - capture->widetable[1].count = 0; - capture->count = 0; - status = 0; - - T0TC = 0; - while (T0TC < 5000); - - T0IR = 0xff; - while (!T0IR && !ANYKEY); - if(!ANYKEY) { - T0TC = 0; - T0IR = 0xff; - T0count = waitIrHi(&highpulse,&hightime,0); - capture->pulsetime = (hightime * 1000) / highpulse; - capture->data[0] = (decodewide(highpulse, &capture->widetable[1]) & 0x0F)<<4; - - while (!(T0IR)); - T0IR = 0xff; - T1count= T0CR3; - while ((capture->count < max_capture_data-1) && !status) { - lowtime = T1count-T0count; - T0count = waitIrHi(&highpulse,&hightime,T1count); - lowpulse = ((lowtime *1000)+(capture->pulsetime / 2)) / capture->pulsetime; - wide = decodewide(lowpulse, &capture->widetable[1]); - if(wide & 0xf0) - status = 2; - capture->data[capture->count] |= wide; - wide = decodewide(highpulse, &capture->widetable[1]); - if(wide & 0xf0) - status = 2; - capture->count++; - capture->data[capture->count] = wide<<4; - timeout = T0count + 500000; - while (!(T0IR) && !status) { - if (T0TC > timeout) - status =1; - } - T0IR = 0xff; - T1count= T0CR3; - } - } - else - status = 3; - if(capture->count == max_capture_data-1) - status = 4; - T0TC = 0; - T0MCR = 0x03; - FIOSET0 |= (1<<12); - T0CCR = 0; - T0IR = 0xff; - enableIRQ(); - setBacklight(BL_AUTO); - setSpeed(SPEED_30); - return status - 1; -} - -# define MAX_messages 25 - -unsigned char compare_message(unsigned char* message1, unsigned char* message2, unsigned char len) { - - unsigned char x; - - for(x=0; x < (len-1); x++) { - if(message1[x] != message2[x]) - return 1; - } - if((message1[len-1] & 0xf0) != (message2[len-1] & 0xf0)) - return 1; - return 0; - -} - -unsigned short get_signalfree(struct ir_raw_* capture,unsigned short signalmin) { - unsigned short signalfree; - unsigned char i; - - signalfree = 32000; - for (i=4; (i < capture->count);i++) { - unsigned short y; - unsigned short sum; - sum = 0; - for (y = i-4; y < i; y++) { - sum += capture->widetable[1].value[(capture->data[y]) & 0x0f]; - } - y = capture->widetable[1].value[(capture->data[i]) & 0x0f]; - if ((sum < y) && (y < signalfree) && (y > signalmin)) - signalfree=y; - } - - return(signalfree); - -} - - -//--------------------------------------------------------------------------- -// analyzeIR -//--------------------------------------------------------------------------- -/* Return Values: - 0 = OK - 1 = too manny messages - 2 = too few messages - 3 = repeat messages not equal - 4 = messages too long - 5 = unknown format -*/ -unsigned char analyzeIR1(struct ir_raw_* capture, struct RAWcmd_* cmd, unsigned char mode) { - - unsigned short signalfree; - unsigned char message[MAX_messages]; - unsigned char messagecount; - unsigned char x; - unsigned char first; - unsigned char middle; - unsigned char last; - - clear_cmd(cmd); - signalfree = get_signalfree(capture,1); - if(mode) - signalfree = get_signalfree(capture,signalfree); - - messagecount = 1; - message[0] = 0; - for(x = 0; (x < capture->count) && (messagecount < MAX_messages); x++) { - if(capture->widetable[1].value[capture->data[x] & 0x0f] >= signalfree) { - if(messagecount < MAX_messages) - message[messagecount++] = x+1; - else - return 1; - } - } - - if(messagecount < 2) - return 2; - - first = compare_message(&capture->data[message[0]], &capture->data[message[1]],message[1] - message[0]); - middle = 0; - for(x=1; x < messagecount-2; x++) { - middle += compare_message(&capture->data[message[x]], &capture->data[message[x+1]],message[x+1] - message[x]); - } - last = compare_message(&capture->data[message[messagecount-2]], &capture->data[message[messagecount-1]],message[messagecount-1] - message[messagecount-2]); - - if((first && last && (messagecount < 4)) || ((first + last) && (messagecount < 3))) - return 2; - - if(middle) - return 3; - - if(first + last == 0) { - for(x=0;x<3;x++) { - cmd->CMDstart[x] = 0; - cmd->CMDlen[x] = message[1]; - } - if(cmd->CMDlen[0] > max_CMD_data) return 4; - memcpy((unsigned char *)&cmd->data[cmd->CMDstart[0]],(unsigned char *)&capture->data[0],cmd->CMDlen[0]); - - } - else if(first + last == 2) { - cmd->CMDstart[0] = 0; - cmd->CMDlen[0] = message[1]; - - cmd->CMDstart[1] = cmd->CMDstart[0] + cmd->CMDlen[0]; - cmd->CMDlen[1] = message[2]-message[1]; - - cmd->CMDstart[2] = cmd->CMDstart[1] + cmd->CMDlen[1]; - cmd->CMDlen[2] = message[messagecount-1]-message[messagecount-2]; - - if(cmd->CMDlen[0]+cmd->CMDlen[1]+cmd->CMDlen[2] > max_CMD_data) return 4; - memcpy((unsigned char *)&cmd->data[cmd->CMDstart[0]],(unsigned char *)&capture->data[0],cmd->CMDlen[0]); - memcpy((unsigned char *)&cmd->data[cmd->CMDstart[1]],(unsigned char *)&capture->data[message[1]],cmd->CMDlen[1]); - memcpy((unsigned char *)&cmd->data[cmd->CMDstart[2]],(unsigned char *)&capture->data[message[messagecount-1]],cmd->CMDlen[2]); - } - else if((first == 1)&& !last) { - cmd->CMDstart[0] = 0; - cmd->CMDlen[0] = message[1]; - - cmd->CMDstart[1] = cmd->CMDstart[0] + cmd->CMDlen[0]; - cmd->CMDlen[1] = message[2]-message[1]; - - cmd->CMDstart[2] = cmd->CMDstart[1]; - cmd->CMDlen[2] = cmd->CMDlen[1]; - - if(cmd->CMDlen[0]+cmd->CMDlen[1] > max_CMD_data) return 4; - memcpy((unsigned char *)&cmd->data[cmd->CMDstart[1]],(unsigned char *)&capture->data[message[1]],cmd->CMDlen[1]); - memcpy((unsigned char *)&cmd->data[cmd->CMDstart[0]],(unsigned char *)&capture->data[0],cmd->CMDlen[0]); - - } - else { - return 5; - } - - cmd->borders = 0x13; - cmd->tval = (15 * capture->pulsetime) / ((cmd->borders & 0x0f) * 1000); - memcpy((unsigned char *)&cmd->pulselen[0],(unsigned char *)&capture->widetable[1].value[0],(capture->widetable[1].count) * sizeof(unsigned short)); - - return 0; -} - -unsigned char analyzeIR(struct ir_raw_* capture, struct RAWcmd_* cmd) { - unsigned char result; - - result = analyzeIR1(capture, cmd,0); - if(result) { - if(!(analyzeIR1(capture, cmd,1))) - return(0); - } - return(result); -} - -void debug_print_capture(struct ir_raw_* capture) { - - unsigned short signalfree; - unsigned char x; - unsigned char ro; - unsigned char co; - - signalfree = get_signalfree(capture,0); - - x= 0; - ro = 0; - co = 0; - while((x <= capture->count) && (ro < 20)) { - draw_hexC(co++ * 14,ro * 8,capture->data[x], 3, DRAW_PUT); - if((capture->widetable[1].value[capture->data[x++] & 0x0f] >= signalfree) || (co > 5)) { - ro++; - co = 0; - } - } - - draw_numU(90,8,capture->pulsetime,0, 3, DRAW_PUT); - - for (x = 0; x < capture->widetable[1].count; x++) { - draw_numU(90,36+(x*8),capture->widetable[1].value[x],0, 3, DRAW_PUT); - } -} - -void debug_print_cmd(struct RAWcmd_* cmd) { - - unsigned char x; - unsigned char ro; - unsigned char co; - - x= 0; - ro = 0; - co = 0; - - while((x < cmd->CMDlen[0]) && (ro < 20)) { - draw_hexC(co++ * 14,ro * 8,cmd->data[cmd->CMDstart[0]+ x++], 3, DRAW_PUT); - if(co > 4) { - ro++; - co = 0; - } - } - x=0; - co = 0; - ro++; - while((x < cmd->CMDlen[1]) && (ro < 20)) { - draw_hexC(co++ * 14,ro * 8,cmd->data[cmd->CMDstart[1]+ x++], 3, DRAW_PUT); - if(co > 4) { - ro++; - co = 0; - } - } - x=0; - co = 0; - ro++; - while((x < cmd->CMDlen[2]) && (ro < 20)) { - draw_hexC(co++ * 14,ro * 8,cmd->data[cmd->CMDstart[2]+ x++], 3, DRAW_PUT); - if(co > 4) { - ro++; - co = 0; - } - } - - draw_numU(90,8,cmd->tval,0, 3, DRAW_PUT); - - for (x = 0; x < 16; x++) { - draw_numU(75,20+(x*8),cmd->pulselen[x],0, 3, DRAW_PUT); - } -} - -void serialsend_ir_cmd(struct RAWcmd_* cmd) { - unsigned short i; - unsigned char *s; - - s=(unsigned char*)cmd; - - for(i=0;iRAWcmd[cmd])); - } - else { - RAW_Send((unsigned long)&(RAWset->RAWcmd[cmd])); - while(ANYKEY) - RAW_Repeat(); - RAW_Stop(); - } - } - } -} - -void RAW_learnset(FORM* form, CONTROL* control) { - RAW_learn((struct RAWset_*)(form->tag)); - form_draw(form); -} - -void RAW_keyerase(FORM* form, CONTROL* control) { - unsigned char x; - - x=msgbox(50,BC_nobuttons,"\nZu loeschende Taste\ndruecken.\n"); - waitKeyDown(); - x=getKeynum(); - if(x>3) { - clear_cmd(&(((struct RAWset_*)(form->tag))->RAWcmd[x-4])); - } - form_draw(form); -} - -void RAW_allkeyserase(FORM* form, CONTROL* control) { - unsigned char x; - - x=msgbox(50,BC_YesNo | BC_DefaultButton2,"Moechten Sie wirklich\nalle Tasten loeschen?\n"); - if(x == BC_Yes) { - for(x=0;x<38;x++) { - clear_cmd(&(((struct RAWset_*)(form->tag))->RAWcmd[x])); - - } - } - form_draw(form); -} - -void RAW_editset(FORM* form, CONTROL* control) { - - struct RAWset_ RAWset; - const BUTTON button1 = {BC_Button,0,15,120,15,SMALLFONT,0,"Anlernen/Testen",RAW_learnset}; - const BUTTON button2 = {BC_Button,0,35,120,15,SMALLFONT,0,"Taste loeschen",RAW_keyerase}; - const BUTTON button3 = {BC_Button,0,55,120,15,SMALLFONT,0,"Alle Tasten loeschen",RAW_allkeyserase}; - const LABEL label1 = {BC_Labelnotab,0,80,60,10,BOLDFONT,0,"Bezeichnung",0}; - TXTBOX txtbox1 = {BC_Txtbox,0,90,120,10,SMALLFONT,20,0,(char*)RAWset.name,NULL,NULL}; - - CONTROL* controls[5] = { (CONTROL*)&button1, - (CONTROL*)&button2, - (CONTROL*)&button3, - (CONTROL*)&label1, - (CONTROL*)&txtbox1}; - - FORM form2 = {"RAW Set bearbeiten",0,0,0,0,0,controls,0,5,0,0}; - unsigned long x; - - x = (unsigned long)BFS_LoadFileAddr(BFS_ID_RAWslot0 + ((LABEL*)control)->tag); - - if(x) - memcpy(&RAWset,(void *)x,sizeof(struct RAWset_)); - else - RAWset.id[0] = 0xff; - - x=memcmp(&RAWset,"RC01",4); - if(x) { - for(x=0;xtag, sizeof(struct RAWset_), (unsigned char*) &RAWset); - } - - if(RAWset.name[0]==0xff) - memcpy(&RAWset.name[0],(char*)string_unknown,len_string_unknown); - - form2.tag =(unsigned long)&RAWset; - - form_exec(&form2); - - if(!memcmp(&RAWset.name[0],string_unknown,len_string_unknown)) - for(x=0;xtag, sizeof(struct RAWset_), (unsigned char*) &RAWset) == 0) { - x=msgbox(50,BC_YesNo | BC_DefaultButton1,"Sollen die Aenderungen\ngespeichert werden?\n"); - if(x == BC_Yes) { - memcpy(&RAWset.id[0],"RC01",4); - BFS_SaveFile(BFS_ID_RAWslot0 + ((LABEL*)control)->tag, sizeof(struct RAWset_), (unsigned char*) &RAWset); - if(BFS_CmpFile(BFS_ID_RAWslot0 + ((LABEL*)control)->tag, sizeof(struct RAWset_), (unsigned char*) &RAWset) == 0) { - msgbox(50,BC_OKOnly | BC_DefaultButton1,"Fehler\n"); - } - } - } - - form_draw(form); -} - -void RAW_eraseall(FORM* form, CONTROL* control) { - - unsigned char x; - - x=msgbox(50,BC_YesNo | BC_DefaultButton2,"Moechten Sie wirklich\nalle gespeicherten\nCodes loeschen?\n"); - if(x == BC_Yes) { - for(x=0;x<4;x++) - BFS_DeleteFile(BFS_ID_RAWslot0 + x); - } - form_draw(form); -} -extern const struct TABLES_N RAW; - -void RAW_learnmenue(void) { - - const LABEL label5 = {BC_Labelnotab,0,15,100,10,BOLDFONT,0,"RAW Set bearbeiten:",0}; - const BUTTON button1 = {BC_Button,0,70,80,15,SMALLFONT,0,"Alles loeschen",RAW_eraseall}; - - CONTROL* controls[2 + MAX_slots]; - LABEL l_rawset[MAX_slots]; - controls[0] = (CONTROL*)&label5; - controls[1] = (CONTROL*)&button1; - - FORM form = {"IR-Codes anlernen",0,0,0,0,0,controls,2, 2 + MAX_slots,0,0}; - - int set; - /* load menu entries for four RAW sets from filesystem / default names */ - for (set = 0; set < MAX_slots; set++) { - l_rawset[set] = (LABEL){BC_Label,0,25 + 10*set,50,10,SMALLFONT,set,NULL,RAW_editset}; - struct RAWset_ *rs = (struct RAWset_*)BFS_LoadFileAddr(BFS_ID_RAWslot0 + set); - if(rs && (rs->name[0] != 0xff)) { - l_rawset[set].caption = (char*)rs->name; - } else - l_rawset[set].caption = (char*)RAW.table[set].name; - - controls[2 + set] = (CONTROL*)&l_rawset[set]; - } - - form_exec(&form); - setEncoder(irDevTab.device[irDevTab.active].encoder, irDevTab.device[irDevTab.active].set); - -} - diff --git a/boop/infrared/ir_capture.h b/boop/infrared/ir_capture.h deleted file mode 100644 index cc9aa60..0000000 --- a/boop/infrared/ir_capture.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - ir_capture.h - - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef IR_CAPTURE_H -#define IR_CAPTURE_H - -#define max_CMD_data 102 - -#define MAX_slots 4 -#define RAWnamelen 20 -struct RAWcmd_ { - unsigned char tval; - unsigned char borders; - unsigned char flags; - unsigned char toggle; - unsigned char CMDstart[3]; - unsigned char CMDlen[3]; - unsigned short pulselen[16]; - unsigned char data[max_CMD_data]; -}; - -struct RAWset_ { - unsigned char id[4]; - unsigned char name[RAWnamelen]; - struct RAWcmd_ RAWcmd[38]; -}; - -struct widetable_ { - unsigned short value[15]; - unsigned char count; -}; - -#define max_capture_data 200 - -struct ir_raw_ { - unsigned long pulsetime; - unsigned char data[max_capture_data]; - struct widetable_ widetable[2]; - unsigned char count; - -}; - -void getIR_test(struct RAWcmd_* cmd); -void RAW_learnmenue(void); -void clear_cmd(struct RAWcmd_* cmd); - -#endif diff --git a/boop/infrared/ir_codes/itt/seleco_019 b/boop/infrared/ir_codes/itt/seleco_019 deleted file mode 100644 index ae2cf7c..0000000 --- a/boop/infrared/ir_codes/itt/seleco_019 +++ /dev/null @@ -1,62 +0,0 @@ -/* - infrared codes for ITT seleco 019 - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x000, // A -> - 0x000, // B -> - 0x000, // C -> - 0x000, // D -> - 0x000, // Betty -> - 0x000, // Exit -> - 0x330, // Up -> Play - 0x340, // Down -> Stop - 0x020, // Left -> Rewind - 0x310, // Right -> Forward - 0x080, // OK -> Enter - 0x2E0, // Vol+ -> Vol+ - 0x2F0, // Vol- -> Vol- - 0x060, // Mute -> Muting - 0x070, // Prog+ -> Prog+ - 0x040, // Prog- -> Prog- - 0x100, // 1 -> 1 - 0x110, // 2 -> 2 - 0x120, // 3 -> 3 - 0x130, // 4 -> 4 - 0x140, // 5 -> 5 - 0x150, // 6 -> 6 - 0x160, // 7 -> 7 - 0x170, // 8 -> 8 - 0x180, // 9 -> 9 - 0x190, // 0 -> 0 - 0x3F0, // -/-- -> A/B - 0x000, // AV -> - 0x1D0, // Menu -> Info - 0x000, // PiP -> - 0x000, // A/B -> - 0x000, // 16:9 -> - 0x1C0, // Info -> VTX1 - 0x1E0, // VTX1 -> VTX2 - 0x3C0, // VTX2 -> VTX3 - 0x020, // VTX3 -> VTX4 - 0x000, // Blue -> - 0x000, // Yello -> - 0x000, // Green -> - 0x1E0, // Red -> Record - 0x000, // TV -> - 0x010 // Power -> Power -}, diff --git a/boop/infrared/ir_codes/itt/seleco_049 b/boop/infrared/ir_codes/itt/seleco_049 deleted file mode 100644 index 584144f..0000000 --- a/boop/infrared/ir_codes/itt/seleco_049 +++ /dev/null @@ -1,62 +0,0 @@ -/* - infrared codes for ITT seleco 019 - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x000, // A -> - 0x000, // B -> - 0x000, // C -> - 0x000, // D -> - 0x000, // Betty -> - 0x000, // Exit -> - 0x360, // Up -> Play - 0x330, // Down -> Stop - 0x320, // Left -> Rewind - 0x350, // Right -> Forward - 0x050, // OK -> Enter - 0x2E0, // Vol+ -> Vol+ - 0x2F0, // Vol- -> Vol- - 0x060, // Mute -> Muting - 0x0D0, // Prog+ -> Prog+ - 0x0E0, // Prog- -> Prog- - 0x100, // 1 -> 1 - 0x110, // 2 -> 2 - 0x120, // 3 -> 3 - 0x130, // 4 -> 4 - 0x140, // 5 -> 5 - 0x150, // 6 -> 6 - 0x160, // 7 -> 7 - 0x170, // 8 -> 8 - 0x180, // 9 -> 9 - 0x190, // 0 -> 0 - 0x1F0, // -/-- -> A/B - 0x000, // AV -> - 0x3A0, // Menu -> Info - 0x000, // PiP -> - 0x000, // A/B -> - 0x000, // 16:9 -> - 0x1C0, // Info -> VTX1 - 0x1E0, // VTX1 -> VTX2 - 0x3C0, // VTX2 -> VTX3 - 0x020, // VTX3 -> VTX4 - 0x000, // Blue -> - 0x000, // Yello -> - 0x000, // Green -> - 0x1E0, // Red -> Record - 0x000, // TV -> - 0x010 // Power -> Power -}, diff --git a/boop/infrared/ir_codes/itt/seleco_108 b/boop/infrared/ir_codes/itt/seleco_108 deleted file mode 100644 index 883e336..0000000 --- a/boop/infrared/ir_codes/itt/seleco_108 +++ /dev/null @@ -1,62 +0,0 @@ -/* - infrared codes for ITT seleco 108 - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x000, // A -> - 0x000, // B -> - 0x000, // C -> - 0x000, // D -> - 0x000, // Betty -> - 0x000, // Exit -> - 0x1C0, // Up -> Play - 0x330, // Down -> Stop - 0x210, // Left -> Rewind - 0x1F0, // Right -> Forward - 0x230, // OK -> Enter - 0x2E0, // Vol+ -> Vol+ - 0x2F0, // Vol- -> Vol- - 0x3F0, // Mute -> Muting - 0x070, // Prog+ -> Prog+ - 0x080, // Prog- -> Prog- - 0x100, // 1 -> 1 - 0x110, // 2 -> 2 - 0x120, // 3 -> 3 - 0x130, // 4 -> 4 - 0x140, // 5 -> 5 - 0x150, // 6 -> 6 - 0x160, // 7 -> 7 - 0x170, // 8 -> 8 - 0x180, // 9 -> 9 - 0x190, // 0 -> 0 - 0x1E0, // -/-- -> A/B - 0x000, // AV -> - 0x000, // Menu -> - 0x000, // PiP -> - 0x000, // A/B -> - 0x000, // 16:9 -> - 0x0F0, // Info -> VTX1 - 0x0D0, // VTX1 -> VTX2 - 0x200, // VTX2 -> VTX3 - 0x000, // VTX3 -> VTX4 - 0x000, // Blue -> - 0x000, // Yello -> - 0x000, // Green -> - 0x1D0, // Red -> Pause - 0x000, // TV -> - 0x010 // Power -> Power -}, diff --git a/boop/infrared/ir_codes/itt/seleco_131 b/boop/infrared/ir_codes/itt/seleco_131 deleted file mode 100644 index 7bd12ee..0000000 --- a/boop/infrared/ir_codes/itt/seleco_131 +++ /dev/null @@ -1,62 +0,0 @@ -/* - infrared codes for ITT seleco 131 - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x000, // A -> - 0x000, // B -> - 0x000, // C -> - 0x000, // D -> - 0x000, // Betty -> - 0x000, // Exit -> - 0x020, // Up -> Play - 0x300, // Down -> Stop - 0x250, // Left -> Rewind - 0x050, // Right -> Forward - 0x390, // OK -> Enter - 0x2E0, // Vol+ -> Vol+ - 0x2F0, // Vol- -> Vol- - 0x060, // Mute -> Muting - 0x0D0, // Prog+ -> Prog+ - 0x040, // Prog- -> Prog- - 0x100, // 1 -> 1 - 0x110, // 2 -> 2 - 0x120, // 3 -> 3 - 0x130, // 4 -> 4 - 0x140, // 5 -> 5 - 0x150, // 6 -> 6 - 0x160, // 7 -> 7 - 0x170, // 8 -> 8 - 0x180, // 9 -> 9 - 0x190, // 0 -> 0 - 0x000, // -/-- -> - 0x000, // AV -> - 0x390, // Menu -> Info - 0x000, // PiP -> - 0x000, // A/B -> - 0x000, // 16:9 -> - 0x1C0, // Info -> VTX1 - 0x0A0, // VTX1 -> VTX2 - 0x380, // VTX2 -> VTX3 - 0x200, // VTX3 -> VTX4 - 0x000, // Blue -> - 0x000, // Yello -> - 0x000, // Green -> - 0x1D0, // Red -> Pause - 0x000, // TV -> - 0x010 // Power -> Power -}, diff --git a/boop/infrared/ir_codes/lirc/apple_remote1 b/boop/infrared/ir_codes/lirc/apple_remote1 deleted file mode 100644 index e962faf..0000000 --- a/boop/infrared/ir_codes/lirc/apple_remote1 +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for Apple Remote 1st generation (6 buttons) http://lirc.sourceforge.net/remotes/apple/A1156 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /*pre_data*/ 0x77E1, /*Apple's ID for NEC code*/ /*post_data*/ 0xC5, /*Remote's ID (which can be changed on the original remote)*/ /*toggle_bit_mask*/ 0x00, /*gap*/ 37600, /*repeat_gap*/ 0, /*bits*/ 8, /*pre_data_bits*/ 16, /*post_data_bits*/ 8, /*rc6_bit*/ 0, /*frequency*/ 38000, /*flags*/ LIRC_SPACE_ENC, /*header*/ 9000,4500, /*three*/ 0,0, /*two*/ 0,0, /*one*/ 560,1690, /*zero*/ 560,560, /*plead*/ 0, /*ptrail*/ 560, /*foot*/ 0,0, /*pre*/ 0,0, /*post*/ 0,0, /*repeat*/ 9000,2250, /*min_repeat*/ 1, /*duty cycle*/ 33, { 0x00, // A -> 0x00, // B -> 0x00, // C -> 0x00, // D -> 0x00, // Betty -> 0x00, // Exit -> 0xD0, // Up -> up, plus 0xB0, // Down -> down, minus 0x10, // Left -> << rev 0xE0, // Right -> >> ffwd 0x20, // OK -> play 0x00, // Vol+ -> 0x00, // Vol- -> 0x40, // Mute -> menu 0x00, // Prog+ -> 0x00, // Prog- -> 0x00, // 1 -> 0x00, // 2 -> 0x00, // 3 -> 0x00, // 4 -> 0x00, // 5 -> 0x00, // 6 -> 0x00, // 7 -> 0x00, // 8 -> 0x00, // 9 -> 0x00, // 0 -> 0x00, // -/-- -> 0x00, // AV -> 0x00, // Menu -> 0x00, // PiP -> 0x00, // A/B -> 0x00, // 16:9 -> 0x00, // Info -> 0x00, // VTX1 -> 0x00, // VTX2 -> 0x00, // VTX3 -> 0x00, // Blue -> 0x00, // Yello -> 0x00, // Green -> 0x00, // Red -> 0x00, // TV -> 0x00 // Power -> }, diff --git a/boop/infrared/ir_codes/lirc/beo4 b/boop/infrared/ir_codes/lirc/beo4 deleted file mode 100644 index 9869987..0000000 --- a/boop/infrared/ir_codes/lirc/beo4 +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for bang & olufsen Copyright (C) 2017 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /*pre_data*/ 0x00000000, // 2. start bit /*post_data*/ 0x00000000, /*toggle_bit_mask*/ 0x00, /*gap*/ 18000, // final gap to prevent collision /*repeat_gap*/ 0, /*bits*/ 17, // last(4.) start bit logical low as first data bit ==> 1+16 data bits = 17 /*pre_data_bits*/ 1, // 2. start bit /*post_data_bits*/ 0, /*rc6_bit*/ 0, /*frequency*/ 455000, // regular freq is 455kHz but to get a valid result 454,5 is used /*flags*/ LIRC_BO, /*header*/ 200,3125, // 1. start bit /*three*/ 0,0, /*two*/ 0,0, /*one*/ 200,9375, /*zero*/ 200,3125, /*plead*/ 0, /*ptrail*/ 200, // stop bit /*foot*/ 0,0, /*pre*/ 200,15625, //3. start bit /*post*/ 200,12500, // post bit /*repeat*/ 0,0, /*min_repeat*/ 0, /*duty cycle*/ 30, { 0x0000, // A -> 0x0000, // B -> 0x0000, // C -> 0x0000, // D -> 0x0000, // Betty -> 0xB44B, // Exit -> Exit 0x06F9, // Up -> UP 0x8679, // Down -> Down 0xA659, // Left -> Left 0x46B9, // Right -> Right 0x16E9, // OK -> OK 0x0160, // Vol+ -> Vol+ 0x0164, // Vol- -> Vol- 0xF00F, // Mute -> Mute 0x48B7, // Prog+ -> Prog+ 0x48B7, // Prog- -> Prog- 0x0101, // 1 -> 1 0x0102, // 2 -> 2 0x609F, // 3 -> 3 0x10EF, // 4 -> 4 0x906F, // 5 -> 5 0x50AF, // 6 -> 6 0x30CF, // 7 -> 7 0xB04F, // 8 -> 8 0x708F, // 9 -> 9 0x8877, // 0 -> 0 0xF20D, // -/-- -> Guide 0x0181, // AV -> Source 0x0f0c, // Menu -> Menue 0xD22D, // PiP -> Tools 0x1AE5, // A/B -> Return 0x7C83, // 16:9 -> P.Size 0xF807, // Info -> Info 0xD629, // VTX1 -> Ch.List 0x0000, // VTX2 -> 0xC837, // VTX3 -> Pre-CH 0x6897, // Blue -> Blue 0xA857, // Yello -> Yellow 0x28D7, // Green -> Green 0x36C9, // Red -> Red 0xC23D, // TV -> TV/DTV 0x0f0C // Power -> Standby }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/lirc/fs20 b/boop/infrared/ir_codes/lirc/fs20 deleted file mode 100644 index dcdd03e..0000000 --- a/boop/infrared/ir_codes/lirc/fs20 +++ /dev/null @@ -1 +0,0 @@ -/* RF codes for FS20 Copyright (C) 2009 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /*pre_data*/ calcFS20pre(0x11,0,0x11,0), //Synchr + HC:12121212 /*post_data*/ 0x00000000, /*toggle_bit_mask*/ 0x00, /*gap*/ 10000, /*repeat_gap*/ 500000, //gap after min_repeats /*bits*/ 27, /*pre_data_bits*/ 32, /*post_data_bits*/ 0, /*rc6_bit*/ 0, /*frequency*/ 0x0020293E, //868.350174MHz /*flags*/ LIRC_RF, /*header*/ 0,0, /*three*/ 0,0, /*two*/ 0,0, /*one*/ 600,600, /*zero*/ 400,400, /*plead*/ 0, /*ptrail*/ 400, /*foot*/ 0,0, /*pre*/ 0,0, /*post*/ 0,0, /*repeat*/ 0,0, /*min_repeat*/ 2, /*duty cycle*/ 0, { 0x00000, // A -> 0x00000, // B -> 0x00000, // C -> 0x00000, // D -> 0x00000, // Betty -> 0x00000, // Exit -> 0x00000, // Up -> 0x00000, // Down -> 0x00000, // Left -> 0x00000, // Right -> 0x00000, // OK -> 0x00000, // Vol+ -> 0x00000, // Vol- -> 0x00000, // Mute -> 0x00000, // Prog+ -> 0x00000, // Prog- -> calcFS20code(0x01,1,0x00,0,0x29,1), // 1 -> Addr:1112 Cmd:0(Off) calcFS20code(0x01,1,0x12,0,0x3B,1), // 2 -> Addr:1112 Cmd:18(Toggle) calcFS20code(0x01,1,0x11,0,0x3A,0), // 3 -> Addr:1112 Cmd:17(On) 0x00000, // 4 -> 0x00000, // 5 -> 0x00000, // 6 -> 0x00000, // 7 -> 0x00000, // 8 -> 0x00000, // 9 -> 0x00000, // 0 -> 0x00000, // -/-- -> 0x00000, // AV -> 0x00000, // Menu -> 0x00000, // PiP -> 0x00000, // A/B -> 0x00000, // 16:9 -> 0x00000, // Info -> 0x00000, // VTX1 -> 0x00000, // VTX2 -> 0x00000, // VTX3 -> 0x00000, // Blue -> 0x00000, // Yello -> 0x00000, // Green -> 0x00000, // Red -> 0x00000, // TV -> 0x00000 // Power -> Power }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/lirc/hx2262 b/boop/infrared/ir_codes/lirc/hx2262 deleted file mode 100644 index 06e220e..0000000 --- a/boop/infrared/ir_codes/lirc/hx2262 +++ /dev/null @@ -1 +0,0 @@ -/* RF codes for HX2262 Copyright (C) 2009 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ //Bit translation: //HX2262 LIRC_RF //0 00 //F (floating) 01 //1 11 /*pre_data*/ 0x00000000, //bit 0-4 = 00000 /*post_data*/ 0x00000000, /*toggle_bit_mask*/ 0x00, /*gap*/ 11160, /*repeat_gap*/ 11160, //gap after min_repeats /*bits*/ 14, /*pre_data_bits*/ 10, /*post_data_bits*/ 0, /*rc6_bit*/ 0, /*frequency*/ 0x00101234, //433,919861MHz /*flags*/ LIRC_RF, /*header*/ 0,0, /*three*/ 0,0, /*two*/ 0,0, /*one*/ 1080,360, /*zero*/ 360,1080, /*plead*/ 0, /*ptrail*/ 360, /*foot*/ 0,0, /*pre*/ 0,0, /*post*/ 0,0, /*repeat*/ 0,0, /*min_repeat*/ 10, /*duty cycle*/ 0, { 0x00000, // A -> 0x00000, // B -> 0x00000, // C -> 0x00000, // D -> 0x00000, // Betty -> 0x00000, // Exit -> 0x00000, // Up -> 0x00000, // Down -> 0x00000, // Left -> 0x00000, // Right -> 0x00000, // OK -> 0x00000, // Vol+ -> 0x00000, // Vol- -> 0x00000, // Mute -> 0x00000, // Prog+ -> 0x00000, // Prog- -> 0x00551, // 1 -> bit5-8(Device) 0FFF bit9-11(cmd) F0F ->ON 0x01151, // 2 -> bit5-8(Device) 0FFF bit9-11(cmd) FF0 ->OFF 0x01451, // 3 -> bit5-8(Device) F0FF bit9-11(cmd) F0F ->ON 0x00554, // 4 -> bit5-8(Device) F0FF bit9-11(cmd) FF0 ->OFF 0x01154, // 5 -> bit5-8(Device) FF0F bit9-11(cmd) F0F ->ON 0x01454, // 6 -> bit5-8(Device) FF0F bit9-11(cmd) FF0 ->OFF 0x00000, // 7 -> 0x00000, // 8 -> 0x00000, // 9 -> 0x00000, // 0 -> 0x00000, // -/-- -> 0x00000, // AV -> 0x00000, // Menu -> 0x00000, // PiP -> 0x00000, // A/B -> 0x00000, // 16:9 -> 0x00000, // Info -> 0x00000, // VTX1 -> 0x00000, // VTX2 -> 0x00000, // VTX3 -> 0x00000, // Blue -> 0x00000, // Yello -> 0x00000, // Green -> 0x00000, // Red -> 0x00000, // TV -> 0x00000 // Power -> Power }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/lirc/olympus_rm-1 b/boop/infrared/ir_codes/lirc/olympus_rm-1 deleted file mode 100644 index ab59b3c..0000000 --- a/boop/infrared/ir_codes/lirc/olympus_rm-1 +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for Olympus RM-1 (digital camera remote) NEC Code http://lirc.sourceforge.net/remotes/olympus/RM-1 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /*pre_data*/ 0x61DC, /*post_data*/ 0x00000000, /*toggle_bit_mask*/ 0x0000000000000000, /*gap*/ 107013, /*repeat_gap*/ 0, /*bits*/ 16, /*pre_data_bits*/ 16, /*post_data_bits*/ 0, /*rc6_bit*/ 0, /*frequency*/ 38000, /*flags*/ LIRC_SPACE_ENC | LIRC_CONST_LENGTH, /*header*/ 9000,4500, /*three*/ 0,0, /*two*/ 0,0, /*one*/ 560,1690, /*zero*/ 560,560, /*plead*/ 0, /*ptrail*/ 560, /*foot*/ 0,0, /*pre*/ 0,0, /*post*/ 0,0, /*repeat*/ 9000,2250, /*min_repeat*/ 1, /*duty cycle*/ 33, { 0x0000, // A -> 0x0000, // B -> 0x0000, // C -> 0x0000, // D -> 0x0000, // Betty -> 0x0000, // Exit -> 0xC03F, // Up -> tele 0x40BF, // Down -> wide 0x20DF, // Left -> - 0xA05F, // Right -> + 0x807F, // OK -> capture 0x0000, // Vol+ -> 0x0000, // Vol- -> 0x0000, // Mute -> 0x0000, // Prog+ -> 0x0000, // Prog- -> 0x0000, // 1 -> 0x0000, // 2 -> 0x0000, // 3 -> 0x0000, // 4 -> 0x0000, // 5 -> 0x0000, // 6 -> 0x0000, // 7 -> 0x0000, // 8 -> 0x0000, // 9 -> 0x0000, // 0 -> 0x0000, // -/-- -> 0x0000, // AV -> 0x0000, // Menu -> 0x0000, // PiP -> 0x0000, // A/B -> 0x0000, // 16:9 -> 0x0000, // Info -> 0x0000, // VTX1 -> 0x0000, // VTX2 -> 0x0000, // VTX3 -> 0x0000, // Blue -> 0x0000, // Yello -> 0x0000, // Green -> 0x0000, // Red -> 0x0000, // TV -> 0x0000 // Power -> }, diff --git a/boop/infrared/ir_codes/lirc/rev008340 b/boop/infrared/ir_codes/lirc/rev008340 deleted file mode 100644 index c3a55e3..0000000 --- a/boop/infrared/ir_codes/lirc/rev008340 +++ /dev/null @@ -1 +0,0 @@ -/* RF codes for REV 008340 remote control HS2260A-R4 based on hx2262 by telekatz 2010-10-04 by eme This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ // Bit translation: // HX2262 LIRC_RF // 0 00 // F (floating) 01 // 1 11 // "channel" // A: 1FFF -> 11010101 -> 0xD5 // B: F1FF -> 01110101 -> 0x75 // C: FF1F -> 01011101 -> 0x5D // D: FFF1 -> 01010111 -> 0x57 // "device" // 1: 1FF0 -> 11010100 -> 0xD4 // 2: F1F0 -> 01110100 -> 0x74 // 3: FFF1 -> 01010111 -> 0x57 // "action" // 1: 0010 (on/+) -> 00001100 -> 0x0C // 0: 0001 (off/-) -> 00000011 -> 0x03 /*pre_data*/ 0xD5, // A0-A3 /*post_data*/ 0x00, /*toggle_bit_mask*/ 0x00, /*gap*/ 14570, /*repeat_gap*/ 14570, // gap after min_repeats /*bits*/ 16, // data bits /*pre_data_bits*/ 8, /*post_data_bits*/ 0, /*rc6_bit*/ 0, /*frequency*/ 0x00101234, // 433,919861MHz /*flags*/ LIRC_RF, /*header*/ 0,0, /*three*/ 0,0, /*two*/ 0,0, /*one*/ 1410,470, /*zero*/ 470,1410, /*plead*/ 0, /*ptrail*/ 470, // sync pulse /*foot*/ 0,0, /*pre*/ 0,0, /*post*/ 0,0, /*repeat*/ 0,0, /*min_repeat*/ 0, /*duty cycle*/ 0, { 0x0000, // A -> 0x0000, // B -> 0x0000, // C -> 0x0000, // D -> 0x0000, // Betty -> 0x0000, // Exit -> 0x0000, // Up -> 0x0000, // Down -> 0x0000, // Left -> 0x0000, // Right -> 0x0000, // OK -> 0x0000, // Vol+ -> 0x0000, // Vol- -> 0x0000, // Mute -> 0x0000, // Prog+ -> 0x0000, // Prog- -> 0xD40C, // 1 -> 1 on 0xD403, // 2 -> 1 off 0x0000, // 3 -> 0x740C, // 4 -> dim2 + 0x7403, // 5 -> dim2 - 0x0000, // 6 -> 0x570C, // 7 -> dim3 + 0x5703, // 8 -> dim3 - 0x0000, // 9 -> 0x0000, // 0 -> 0x0000, // -/-- -> 0x0000, // AV -> 0x0000, // Menu -> 0x0000, // PiP -> 0x0000, // A/B -> 0x0000, // 16:9 -> 0x0000, // Info -> 0x0000, // VTX1 -> 0x0000, // VTX2 -> 0x0000, // VTX3 -> 0x0000, // Blue -> 0x0000, // Yello -> 0x0000, // Green -> 0x0000, // Red -> 0x0000, // TV -> 0x0000 // Power -> }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/lirc/samsung_ue46b6000 b/boop/infrared/ir_codes/lirc/samsung_ue46b6000 deleted file mode 100644 index 508fdcd..0000000 --- a/boop/infrared/ir_codes/lirc/samsung_ue46b6000 +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for Samsung UE46B6000 Copyright (C) 2009 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /*pre_data*/ 0x0000E0E0, /*post_data*/ 0x00000000, /*toggle_bit_mask*/ 0x0000000000000000, /*gap*/ 107635, /*repeat_gap*/ 0, /*bits*/ 16, /*pre_data_bits*/ 16, /*post_data_bits*/ 0, /*rc6_bit*/ 0, /*frequency*/ 36000, /*flags*/ LIRC_CONST_LENGTH, /*header*/ 4498,4450, /*three*/ 0,0, /*two*/ 0,0, /*one*/ 588,1646, /*zero*/ 588,535, /*plead*/ 0, /*ptrail*/ 584, /*foot*/ 0,0, /*pre*/ 0,0, /*post*/ 0,0, /*repeat*/ 0,0, /*min_repeat*/ 1, /*duty cycle*/ 33, { 0x0000, // A -> 0x0000, // B -> 0x0000, // C -> 0x0000, // D -> 0x0000, // Betty -> 0xB44B, // Exit -> Exit 0x06F9, // Up -> UP 0x8679, // Down -> Down 0xA659, // Left -> Left 0x46B9, // Right -> Right 0x16E9, // OK -> OK 0xE01F, // Vol+ -> Vol+ 0xD02F, // Vol- -> Vol- 0xF00F, // Mute -> Mute 0x48B7, // Prog+ -> Prog+ 0x48B7, // Prog- -> Prog- 0x20DF, // 1 -> 1 0xA05F, // 2 -> 2 0x609F, // 3 -> 3 0x10EF, // 4 -> 4 0x906F, // 5 -> 5 0x50AF, // 6 -> 6 0x30CF, // 7 -> 7 0xB04F, // 8 -> 8 0x708F, // 9 -> 9 0x8877, // 0 -> 0 0xF20D, // -/-- -> Guide 0x807F, // AV -> Source 0x58A7, // Menu -> Menue 0xD22D, // PiP -> Tools 0x1AE5, // A/B -> Return 0x7C83, // 16:9 -> P.Size 0xF807, // Info -> Info 0xD629, // VTX1 -> Ch.List 0x0000, // VTX2 -> 0xC837, // VTX3 -> Pre-CH 0x6897, // Blue -> Blue 0xA857, // Yello -> Yellow 0x28D7, // Green -> Green 0x36C9, // Red -> Red 0xC23D, // TV -> TV/DTV 0x40BF // Power -> Standby }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/lirc/str_de545 b/boop/infrared/ir_codes/lirc/str_de545 deleted file mode 100644 index ff078e4..0000000 --- a/boop/infrared/ir_codes/lirc/str_de545 +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for Kathrein UFS922 Copyright (C) 2009 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /*pre_data*/ 0x00000000, /*post_data*/ 0x00000000, /*toggle_bit_mask*/ 0x0000000000008000, /*gap*/ 45152, /*repeat_gap*/ 0, /*bits*/ 12, /*pre_data_bits*/ 0, /*post_data_bits*/ 0, /*rc6_bit*/ 0, /*frequency*/ 40000, /*flags*/ LIRC_CONST_LENGTH, /*header*/ 2400,600, /*three*/ 0,0, /*two*/ 0,0, /*one*/ 1200,600, /*zero*/ 600,600, /*plead*/ 0, /*ptrail*/ 0, /*foot*/ 0,0, /*pre*/ 0,0, /*post*/ 0,0, /*repeat*/ 0,0, /*min_repeat*/ 1, /*duty cycle*/ 25, { 0x0000, // A -> 0x0000, // B -> 0x0000, // C -> 0x0000, // D -> 0x0000, // Betty -> 0x0000, // Exit -> 0x0000, // Up -> 0x0000, // Down -> 0x0000, // Left -> 0x0000, // Right -> 0x0000, // OK -> 0x0481, // Vol+ -> Vol+ 0x0C81, // Vol- -> Vol- 0x0281, // Mute -> Mute 0x0096, // Prog+ -> Tuner Prog+ 0x0896, // Prog- -> Tuner Prog- 0x0561, // 1 -> TV/SAT 0x0441, // 2 -> Video 0x0BE1, // 3 -> DVD 0x0841, // 4 -> Tuner 0x0A41, // 5 -> CD 0x0B81, // 6 -> AUX 0x0961, // 7 -> MD/TAPE 0x04E1, // 8 -> 5.1 0x0000, // 9 -> 0x0000, // 0 -> 0x0000, // -/-- -> 0x0000, // AV -> 0x0000, // Menu -> 0x0000, // PiP -> 0x0000, // A/B -> 0x0000, // 16:9 -> 0x0000, // Info -> 0x0000, // VTX1 -> 0x0000, // VTX2 -> 0x0000, // VTX3 -> 0x0000, // Blue -> 0x0000, // Yello -> 0x0000, // Green -> 0x0000, // Red -> 0x0000, // TV -> 0x0A81 // Power -> Power }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/lirc/ufs910 b/boop/infrared/ir_codes/lirc/ufs910 deleted file mode 100644 index 4b03d1d..0000000 --- a/boop/infrared/ir_codes/lirc/ufs910 +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for Kathrein UFS910 Copyright (C) 2009 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /*pre_data*/ 0x00229000, /*post_data*/ 0x00000000, /*toggle_bit_mask*/ 0x0000000000008000, /*gap*/ 99000, /*repeat_gap*/ 0, /*bits*/ 8, /*pre_data_bits*/ 24, /*post_data_bits*/ 0, /*rc6_bit*/ 0, /*frequency*/ 36000, /*flags*/ LIRC_RCMM | LIRC_CONST_LENGTH, /*header*/ 417,278, /*three*/ 167,778, /*two*/ 167,611, /*one*/ 167,444, /*zero*/ 167,278, /*plead*/ 0, /*ptrail*/ 167, /*foot*/ 0,0, /*pre*/ 0,0, /*post*/ 0,0, /*repeat*/ 0,0, /*min_repeat*/ 1, /*duty cycle*/ 33, { 0x00, // A -> 0x00, // B -> 0x00, // C -> 0x00, // D -> 0x00, // Betty -> 0x55, // Exit -> Back 0x58, // Up -> Up 0x59, // Down -> Down 0x5A, // Left -> Left 0x5B, // Right -> Right 0x5c, // OK -> OK 0x10, // Vol+ -> Vol+ 0x11, // Vol- -> Vol- 0x0D, // Mute -> Mute 0x1E, // Prog+ -> Prog+ 0x1F, // Prog- -> Prog- 0x01, // 1 -> 1 0x02, // 2 -> 2 0x03, // 3 -> 3 0x04, // 4 -> 4 0x05, // 5 -> 5 0x06, // 6 -> 6 0x07, // 7 -> 7 0x08, // 8 -> 8 0x09, // 9 -> 9 0x100, // 0 -> 0 //eigentlich 0x00 0xCC, // -/-- -> EPG 0x00, // AV -> 0x54, // Menu -> Menue 0x21, // PiP -> Rewind 0x38, // A/B -> Play 0x20, // 16:9 -> Forward 0x0F, // Info -> Info 0x39, // VTX1 -> Pause 0x37, // VTX2 -> Record 0x31, // VTX3 -> Stop 0x70, // Blue -> Blue 0x6F, // Yello -> Yellow 0x6E, // Green -> Green 0x6D, // Red -> Red 0x3C, // TV -> Text 0x0C // Power -> Standby }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/lirc/ufs922 b/boop/infrared/ir_codes/lirc/ufs922 deleted file mode 100644 index 45ec946..0000000 --- a/boop/infrared/ir_codes/lirc/ufs922 +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for Kathrein UFS922 Copyright (C) 2009 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /*pre_data*/ 0x00037FB9, /*post_data*/ 0x00000000, /*toggle_bit_mask*/ 0x0000000000008000, /*gap*/ 106291, /*repeat_gap*/ 0, /*bits*/ 16, /*pre_data_bits*/ 21, /*post_data_bits*/ 0, /*rc6_bit*/ 5, /*frequency*/ 36000, /*flags*/ LIRC_RC6 | LIRC_CONST_LENGTH, /*header*/ 2676,870, /*three*/ 0,0, /*two*/ 0,0, /*one*/ 454,429, /*zero*/ 454,429, /*plead*/ 0, /*ptrail*/ 0, /*foot*/ 0,0, /*pre*/ 0,0, /*post*/ 0,0, /*repeat*/ 0,0, /*min_repeat*/ 1, /*duty cycle*/ 33, { 0x0000, // A -> 0x0000, // B -> 0x0000, // C -> 0x0000, // D -> 0x0000, // Betty -> 0xFFAA, // Exit -> Back 0xFFA7, // Up -> Up 0xFFA6, // Down -> Down 0xFFA5, // Left -> Left 0xFFA4, // Right -> Right 0xFFA3, // OK -> OK 0xFFEF, // Vol+ -> Vol+ 0xFFEE, // Vol- -> Vol- 0xFFF2, // Mute -> Mute 0xFFE1, // Prog+ -> Prog+ 0xFFE0, // Prog- -> Prog- 0xFFFE, // 1 -> 1 0xFFFD, // 2 -> 2 0xFFFC, // 3 -> 3 0xFFFB, // 4 -> 4 0xFFFA, // 5 -> 5 0xFFF9, // 6 -> 6 0xFFF8, // 7 -> 7 0xFFF7, // 8 -> 8 0xFFF6, // 9 -> 9 0xFFF5, // 0 -> 0 0xFF33, // -/-- -> EPG 0xFFB9, // AV -> Archiv 0xFFAB, // Menu -> Menue 0xFFDE, // PiP -> Rewind 0xFFC7, // A/B -> Play 0xFFDF, // 16:9 -> Forward 0xFFF0, // Info -> Info 0xFFC6, // VTX1 -> Pause 0xFFC8, // VTX2 -> Record 0xFFCE, // VTX3 -> Stop 0xFF8F, // Blue -> Blue 0xFF90, // Yello -> Yellow 0xFF91, // Green -> Green 0xFF92, // Red -> Red 0xFF2A, // TV -> Media 0xFFF3 // Power -> Standby }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/nrc17/dbox2 b/boop/infrared/ir_codes/nrc17/dbox2 deleted file mode 100644 index e6f2c73..0000000 --- a/boop/infrared/ir_codes/nrc17/dbox2 +++ /dev/null @@ -1,64 +0,0 @@ -/* - NRC17_dbox2.code - infrared codes for the dbox2 in NRC17 coding - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -// codes are: subcode[4]:address[4]:command[8] = 16 bits - -{ - 0x0000, // A - 0x0000, // B - 0x0000, // C - 0x0000, // D - 0x5c20, // Betty -> Home - 0x5c27, // Exit -> dbox - 0x5c0e, // Up -> Up - 0x5c0f, // Down -> Down - 0x5c2f, // Left -> Left - 0x5c2e, // Right -> Right - 0x5c30, // OK -> OK - 0x5c16, // Vol+ -> Vol+ - 0x5c17, // Vol- -> Vol- - 0x5c28, // Mute -> Mute - 0x5c54, // Prog+ -> Next - 0x5c53, // Prog- -> Prev - 0x5c01, // 1 -> 1 - 0x5c02, // 2 -> 2 - 0x5c03, // 3 -> 3 - 0x5c04, // 4 -> 4 - 0x5c05, // 5 -> 5 - 0x5c06, // 6 -> 6 - 0x5c07, // 7 -> 7 - 0x5c08, // 8 -> 8 - 0x5c09, // 9 -> 9 - 0x5c00, // 0 -> 0 - 0x0000, // -/-- - 0x0000, // AV - 0x5c27, // Menu -> dbox - 0x0000, // PiP - 0x0000, // A/B - 0x0000, // 16:9 - 0x5c82, // Info -> Help - 0x0000, // VTX1 - 0x0000, // VTX2 - 0x0000, // VTX3 - 0x5c3b, // Blue -> Blue - 0x5c52, // Yellow -> Yellow - 0x5c55, // Green -> Green - 0x5c2d, // Red -> Red - 0x5c20, // TV -> Home - 0x5c0c // Power -> Power -}, diff --git a/boop/infrared/ir_codes/nrc17/grundig_tp720 b/boop/infrared/ir_codes/nrc17/grundig_tp720 deleted file mode 100644 index 20ea9ae..0000000 --- a/boop/infrared/ir_codes/nrc17/grundig_tp720 +++ /dev/null @@ -1,64 +0,0 @@ -/* - infrared codes for the grundig tp720 tv - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -// codes are: command[9] = 9 bits - -{ - 0x0000, // A - 0x0000, // B - 0x0000, // C - 0x0000, // D - 0x0000, // Betty -> - 0x0000, // Exit -> - 0x000C, // Up -> COLOR+ - 0x000D, // Down -> COLOR- - 0x000B, // Left -> BR- - 0x000A, // Right -> BR+ - 0x8000, // OK -> OK - 0x0008, // Vol+ -> V+ - 0x0009, // Vol- -> V- - 0x0001, // Mute -> Mute - 0x002A, // Prog+ -> P+ - 0x002B, // Prog- -> P- - 0x0011, // 1 -> 1 - 0x0012, // 2 -> 2 - 0x0013, // 3 -> 3 - 0x0014, // 4 -> 4 - 0x0015, // 5 -> 5 - 0x0016, // 6 -> 6 - 0x0017, // 7 -> 7 - 0x0018, // 8 -> 8 - 0x0019, // 9 -> 9 - 0x0010, // 0 -> 0 - 0x0000, // -/-- - 0x0000, // AV - 0x001A, // Menu -> PC - 0x0000, // PiP - 0x0000, // A/B - 0x0000, // 16:9 - 0x002D, // Info -> I - 0x0030, // VTX1 -> Teletext - 0x0000, // VTX2 - 0x0000, // VTX3 - 0x002E, // Blue -> Blue - 0x003B, // Yellow -> Yellow - 0x003e, // Green -> Green - 0x003a, // Red -> Red - 0x0007, // TV -> Aux - 0x0002 // Power -> Power -}, diff --git a/boop/infrared/ir_codes/rc5/HARMONY_655 b/boop/infrared/ir_codes/rc5/HARMONY_655 deleted file mode 100644 index fa174b0..0000000 --- a/boop/infrared/ir_codes/rc5/HARMONY_655 +++ /dev/null @@ -1,62 +0,0 @@ -/* - infrared codes for technisat satreceiver - Copyright (C) 2008 p.c.squirrel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ -{ - RC5_STD(0x0000), // A -> - RC5_STD(0x0000), // B -> - RC5_STD(0x0000), // C -> - RC5_STD(0x0000), // D -> - RC5_STD(0x0000), // Betty -> - RC5_STD(0x100B), // Exit -> Zurück - RC5_STD(0x1012), // Up -> - RC5_STD(0x1013), // Down -> - RC5_STD(0x1015), // Left -> - RC5_STD(0x1014), // Right -> - RC5_STD(0x1023), // OK -> - RC5_STD(0x0210), // Vol+ -> Vol+ - RC5_STD(0x0211), // Vol- -> Vol- - RC5_STD(0x020D), // Mute -> Mute - RC5_STD(0x1020), // Prog+ -> Prog+ - RC5_STD(0x1021), // Prog- -> Prog- - RC5_STD(0x0201), // 1 -> 1 - RC5_STD(0x0202), // 2 -> 2 - RC5_STD(0x0203), // 3 -> 3 - RC5_STD(0x0204), // 4 -> 4 - RC5_STD(0x0205), // 5 -> 5 - RC5_STD(0x0206), // 6 -> 6 - RC5_STD(0x0207), // 7 -> 7 - RC5_STD(0x0208), // 8 -> 8 - RC5_STD(0x0209), // 9 -> 9 - RC5_STD(0x1000), // 0 -> 0 - RC5_STD(0x17C0), // -/-- -> AUDIO - RC5_STD(0x0238), // AV -> EXT - RC5_STD(0x100E), // Menu -> - RC5_STD(0x17FB), // PiP -> Full - RC5_STD(0x17FC), // A/B -> GO - RC5_STD(0x1165), // 16:9 -> FR - RC5_STD(0x1166), // Info -> FF - RC5_STD(0x1175), // VTX1 -> Play - RC5_STD(0x17F6), // VTX2 -> Stop - RC5_STD(0x17F7), // VTX3 -> Record - RC5_STD(0x1034), // Blue -> - RC5_STD(0x1032), // Yello -> - RC5_STD(0x1036), // Green -> - RC5_STD(0x1037), // Red -> - RC5_STD(0x1169), // TV -> Pause - RC5_STD(0x020C) // Power -> Standby -}, - diff --git a/boop/infrared/ir_codes/rc5/technisat_satreceiver_103TS103 b/boop/infrared/ir_codes/rc5/technisat_satreceiver_103TS103 deleted file mode 100644 index 8cc2205..0000000 --- a/boop/infrared/ir_codes/rc5/technisat_satreceiver_103TS103 +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for technisat satreceiver Copyright (C) 2008 p.c.squirrel This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ { RC5_STD(0x0000), // A -> RC5_STD(0x0000), // B -> RC5_STD(0x0000), // C -> RC5_STD(0x0000), // D -> RC5_STD(0x0000), // Betty -> RC5_STD(0x0000), // Exit -> RC5_STD(0x0210), // Up -> RC5_STD(0x0211), // Down -> RC5_STD(0x0215), // Left -> RC5_STD(0x0216), // Right -> RC5_STD(0x0217), // OK -> RC5_STD(0x0210), // Vol+ -> Vol+ RC5_STD(0x0211), // Vol- -> Vol- RC5_STD(0x020D), // Mute -> Mute RC5_STD(0x0220), // Prog+ -> Prog+ RC5_STD(0x0221), // Prog- -> Prog- RC5_STD(0x0201), // 1 -> 1 RC5_STD(0x0202), // 2 -> 2 RC5_STD(0x0203), // 3 -> 3 RC5_STD(0x0204), // 4 -> 4 RC5_STD(0x0205), // 5 -> 5 RC5_STD(0x0206), // 6 -> 6 RC5_STD(0x0207), // 7 -> 7 RC5_STD(0x0208), // 8 -> 8 RC5_STD(0x0209), // 9 -> 9 RC5_STD(0x0200), // 0 -> 0 RC5_STD(0x0000), // -/-- -> RC5_STD(0x0238), // AV ->EXT RC5_STD(0x0000), // Menu -> RC5_STD(0x0000), // PiP -> RC5_STD(0x0000), // A/B -> RC5_STD(0x0000), // 16:9 -> RC5_STD(0x0000), // Info -> RC5_STD(0x0000), // VTX1 -> RC5_STD(0x0000), // VTX2 -> RC5_STD(0x0000), // VTX3 -> RC5_STD(0x022E), // Blue -> RC5_STD(0x022D), // Yello -> RC5_STD(0x022C), // Green -> RC5_STD(0x022B), // Red -> RC5_STD(0x0000), // TV -> RC5_STD(0x020C) // Power -> Standby /* SAT1-OPTION 0x000000000000120A SAT1-A/B 0x0000000000001223 SAT1-SFI 0x000000000000122F SAT1-EXIT 0x0000000000001222 SAT1-INFO 0x000000000000020F SAT1-TV/RADIO 0x0000000000000213 SAT1-MENU 0x0000000000000212 SAT1-TV/SAT 0x0000000000000200 SAT1-TXT 0x000000000000123C SAT1-STOP 0x0000000000001229*/ }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/rc5/tv b/boop/infrared/ir_codes/rc5/tv deleted file mode 100644 index 532d2b8..0000000 --- a/boop/infrared/ir_codes/rc5/tv +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for RC5 tv Copyright (C) 2007 Ch. Klippel This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ { RC5_STD(0x0000), // A -> RC5_STD(0x0000), // B -> RC5_STD(0x0000), // C -> RC5_STD(0x0000), // D -> RC5_STD(0x0000), // Betty -> RC5_STD(0x0000), // Exit -> RC5_STD(0x0812), // Up -> Brightness+ RC5_STD(0x0813), // Down -> Brightness- RC5_STD(0x0000), // Left -> RC5_STD(0x0000), // Right -> RC5_STD(0x0000), // OK -> RC5_STD(0x0810), // Vol+ -> Vol+ RC5_STD(0x0811), // Vol- -> Vol- RC5_STD(0x080D), // Mute -> Mute RC5_STD(0x0820), // Prog+ -> Prog+ RC5_STD(0x0821), // Prog- -> Prog- RC5_STD(0x0801), // 1 -> 1 RC5_STD(0x0802), // 2 -> 2 RC5_STD(0x0803), // 3 -> 3 RC5_STD(0x0804), // 4 -> 4 RC5_STD(0x0805), // 5 -> 5 RC5_STD(0x0806), // 6 -> 6 RC5_STD(0x0807), // 7 -> 7 RC5_STD(0x0808), // 8 -> 8 RC5_STD(0x0809), // 9 -> 9 RC5_STD(0x0800), // 0 -> 0 RC5_STD(0x080A), // -/-- -> RC5_STD(0x0000), // AV -> RC5_STD(0x0000), // Menu -> RC5_STD(0x0000), // PiP -> RC5_STD(0x0000), // A/B -> RC5_STD(0x0000), // 16:9 -> RC5_STD(0x0000), // Info -> RC5_STD(0x0000), // VTX1 -> RC5_STD(0x0000), // VTX2 -> RC5_STD(0x0000), // VTX3 -> RC5_STD(0x0000), // Blue -> RC5_STD(0x0000), // Yello -> RC5_STD(0x0000), // Green -> RC5_STD(0x0000), // Red -> RC5_STD(0x0000), // TV -> RC5_STD(0x080C) // Power -> Standby }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/rc6/dvd b/boop/infrared/ir_codes/rc6/dvd deleted file mode 100644 index b351666..0000000 --- a/boop/infrared/ir_codes/rc6/dvd +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for RC6 DVD Copyright (C) 2008 p.c.squirrel This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ { 0x0000, // A -> 0x0000, // B -> 0x0000, // C -> 0x0000, // D -> 0x0000, // Betty -> 0x0000, // Exit -> 0x0458, // Up -> Brightness+ 0x0459, // Down -> Brightness- 0xFBA5, // Left -> 0x045B, // Right -> 0x045C, // OK -> 0x1810, // Vol+ -> Vol+ 0x1811, // Vol- -> Vol- 0x180D, // Mute -> Mute 0x1820, // Prog+ -> Prog+ 0x1821, // Prog- -> Prog- 0x0401, // 1 -> 1 0x0402, // 2 -> 2 0x0403, // 3 -> 3 0x0404, // 4 -> 4 0x0405, // 5 -> 5 0x0406, // 6 -> 6 0x0407, // 7 -> 7 0x0408, // 8 -> 8 0x0409, // 9 -> 9 0x040A, // 0 -> 0 0x1800, // -/-- -> 0x0000, // AV -> 0x0000, // Menu -> 0x0000, // PiP -> 0x0000, // A/B -> 0x0000, // 16:9 -> 0x0000, // Info -> 0x0000, // VTX1 -> 0x0000, // VTX2 -> 0x0000, // VTX3 -> 0x0000, // Blue -> 0x0000, // Yello -> 0x0000, // Green -> 0x0000, // Red -> 0x0000, // TV -> 0x180C // Power -> Standby }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/rc6/tv b/boop/infrared/ir_codes/rc6/tv deleted file mode 100644 index 365ee3a..0000000 --- a/boop/infrared/ir_codes/rc6/tv +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for RC6 TV Copyright (C) 2008 p.c.squirrel This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ { 0x0000, // A -> 0x0000, // B -> 0x0000, // C -> 0x0000, // D -> 0x0000, // Betty -> 0x0000, // Exit -> 0x0012, // Up -> Brightness+ 0x0013, // Down -> Brightness- 0x0000, // Left -> 0x0000, // Right -> 0x0000, // OK -> 0x0010, // Vol+ -> Vol+ 0x0011, // Vol- -> Vol- 0x000D, // Mute -> Mute 0x0020, // Prog+ -> Prog+ 0x0021, // Prog- -> Prog- 0x0001, // 1 -> 1 0x0002, // 2 -> 2 0x0003, // 3 -> 3 0x0004, // 4 -> 4 0x0005, // 5 -> 5 0x0006, // 6 -> 6 0x0007, // 7 -> 7 0x0008, // 8 -> 8 0x0009, // 9 -> 9 0x000A, // 0 -> 0 0x0000, // -/-- -> 0x0000, // AV -> 0x0000, // Menu -> 0x0000, // PiP -> 0x0000, // A/B -> 0x0000, // 16:9 -> 0x0000, // Info -> 0x0000, // VTX1 -> 0x0000, // VTX2 -> 0x0000, // VTX3 -> 0x0000, // Blue -> 0x0000, // Yello -> 0x0000, // Green -> 0x0000, // Red -> 0x0000, // TV -> 0x000C // Power -> Standby }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/rc6/ufs922 b/boop/infrared/ir_codes/rc6/ufs922 deleted file mode 100644 index ba92abf..0000000 --- a/boop/infrared/ir_codes/rc6/ufs922 +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for Kathrein UFS922 Copyright (C) 2009 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ { 0x00000000, // A -> 0x00000000, // B -> 0x00000000, // C -> 0x00000000, // D -> 0x00000000, // Betty -> 0x80460055, // Exit -> Back 0x80460058, // Up -> Up 0x80460059, // Down -> Down 0x8046005A, // Left -> Left 0x8046005B, // Right -> Right 0x8046005c, // OK -> OK 0x80460010, // Vol+ -> Vol+ 0x80460011, // Vol- -> Vol- 0x8046000D, // Mute -> Mute 0x8046001E, // Prog+ -> Prog+ 0x8046001F, // Prog- -> Prog- 0x80460001, // 1 -> 1 0x80460002, // 2 -> 2 0x80460003, // 3 -> 3 0x80460004, // 4 -> 4 0x80460005, // 5 -> 5 0x80460006, // 6 -> 6 0x80460007, // 7 -> 7 0x80460008, // 8 -> 8 0x80460009, // 9 -> 9 0x80460000, // 0 -> 0 0x804600CC, // -/-- -> EPG 0x80460046, // AV -> Archiv 0x80460054, // Menu -> Menue 0x80460021, // PiP -> Rewind 0x80460038, // A/B -> Play 0x80460020, // 16:9 -> Forward 0x8046000F, // Info -> Info 0x80460039, // VTX1 -> Pause 0x80460037, // VTX2 -> Record 0x80460031, // VTX3 -> Stop 0x80460070, // Blue -> Blue 0x8046006F, // Yello -> Yellow 0x8046006E, // Green -> Green 0x8046006D, // Red -> Red 0x804600D5, // TV -> Media 0x8046000C // Power -> Standby }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/rca/xbox b/boop/infrared/ir_codes/rca/xbox deleted file mode 100644 index 38679e8..0000000 --- a/boop/infrared/ir_codes/rca/xbox +++ /dev/null @@ -1,62 +0,0 @@ -/* - infrared codes for RCA xbox - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x00, // A -> - 0x00, // B -> - 0x00, // C -> - 0x00, // D -> - 0x00, // Betty -> - 0x27, // Exit -> Back - 0x59, // Up -> Up - 0x58, // Down -> Down - 0x56, // Left -> Left - 0x57, // Right -> Right - 0xF4, // OK -> Select - 0x33, // Vol+ -> - 0x36, // Vol- -> - 0x39, // Mute -> - 0x20, // Prog+ -> Skip+ - 0x22, // Prog- -> Skip- - 0x31, // 1 -> 1 - 0x32, // 2 -> 2 - 0x33, // 3 -> 3 - 0x34, // 4 -> 4 - 0x35, // 5 -> 5 - 0x36, // 6 -> 6 - 0x37, // 7 -> 7 - 0x38, // 8 -> 8 - 0x39, // 9 -> 9 - 0x30, // 0 -> 0 - 0x15, // -/-- -> Play - 0x1F, // AV -> Stop - 0x08, // Menu -> Menu - 0x19, // PiP -> Pause - 0x1C, // A/B -> Forward - 0x1D, // 16:9 -> Reverse - 0x3C, // Info -> Info - 0x1A, // VTX1 -> Title - 0x2A, // VTX2 -> Display - 0x00, // VTX3 -> - 0x00, // Blue -> - 0x00, // Yello -> - 0x00, // Green -> - 0x00, // Red -> - 0x00, // TV -> - 0x30 // Power -> -}, diff --git a/boop/infrared/ir_codes/rcmm/galaxis b/boop/infrared/ir_codes/rcmm/galaxis deleted file mode 100644 index 7b7767f..0000000 --- a/boop/infrared/ir_codes/rcmm/galaxis +++ /dev/null @@ -1,62 +0,0 @@ -/* - rcmm_galaxis.code - infrared codes for the galaxis receiver in RCMM coding - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x0D500800, // A -> - 0x0D500861, // B -> Alt - 0x0D500879, // C -> List - 0x0D50080A, // D -> Back - 0x0D500845, // Betty -> Setup - 0x0D500855, // Exit -> Exit - 0x0D500858, // Up -> Up - 0x0D500859, // Down -> Down - 0x0D50085A, // Left -> Left - 0x0D50085B, // Right -> Right - 0x0D50085C, // OK -> OK - 0x0D500810, // Vol+ -> Vol+ - 0x0D500811, // Vol- -> Vol- - 0x0D50080D, // Mute -> Mute - 0x0D500820, // Prog+ -> Prog+ - 0x0D500821, // Prog- -> Prog- - 0x0D500801, // 1 -> 1 - 0x0D500802, // 2 -> 2 - 0x0D500803, // 3 -> 3 - 0x0D500804, // 4 -> 4 - 0x0D500805, // 5 -> 5 - 0x0D500806, // 6 -> 6 - 0x0D500807, // 7 -> 7 - 0x0D500808, // 8 -> 8 - 0x0D500809, // 9 -> 9 - 0x0D500800, // 0 -> 0 - 0x0D500850, // -/-- -> Audio - 0x0D5008FF, // AV -> VCR - 0x0D500878, // Menu -> Menu - 0x0D500879, // PiP -> List - 0x0D50084E, // A/B -> Language - 0x0D500861, // 16:9 -> Alt - 0x0D50080F, // Info -> Info - 0x0D50083C, // VTX1 -> Text - 0x0D50084B, // VTX2 -> Subtitle - 0x0D5008CC, // VTX3 -> EPG - 0x0D500870, // Blue -> Blue - 0x0D50086F, // Yello -> Yellow - 0x0D50086E, // Green -> Green - 0x0D50086D, // Red -> Red - 0x0D50083F, // TV -> TV - 0x0D50080C // Power -> Power -}, diff --git a/boop/infrared/ir_codes/rcmm/ufs910 b/boop/infrared/ir_codes/rcmm/ufs910 deleted file mode 100644 index 0554c3e..0000000 --- a/boop/infrared/ir_codes/rcmm/ufs910 +++ /dev/null @@ -1 +0,0 @@ -/* infrared codes for Kathrein UFS910 Copyright (C) 2009 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ { 0x00000000, // A -> 0x00000000, // B -> 0x00000000, // C -> 0x00000000, // D -> 0x00000000, // Betty -> 0x22908055, // Exit -> Back 0x22908058, // Up -> Up 0x22908059, // Down -> Down 0x2290805A, // Left -> Left 0x2290805B, // Right -> Right 0x2290805c, // OK -> OK 0x22908010, // Vol+ -> Vol+ 0x22908011, // Vol- -> Vol- 0x2290800D, // Mute -> Mute 0x2290801E, // Prog+ -> Prog+ 0x2290801F, // Prog- -> Prog- 0x22908001, // 1 -> 1 0x22908002, // 2 -> 2 0x22908003, // 3 -> 3 0x22908004, // 4 -> 4 0x22908005, // 5 -> 5 0x22908006, // 6 -> 6 0x22908007, // 7 -> 7 0x22908008, // 8 -> 8 0x22908009, // 9 -> 9 0x22908000, // 0 -> 0 0x229080CC, // -/-- -> EPG 0x00000000, // AV -> 0x22908054, // Menu -> Menue 0x22908021, // PiP -> Rewind 0x22908038, // A/B -> Play 0x22908020, // 16:9 -> Forward 0x2290800F, // Info -> Info 0x22908039, // VTX1 -> Pause 0x22908037, // VTX2 -> Record 0x22908031, // VTX3 -> Stop 0x22908070, // Blue -> Blue 0x2290806F, // Yello -> Yellow 0x2290806E, // Green -> Green 0x2290806D, // Red -> Red 0x2290803C, // TV -> Text 0x2290800C // Power -> Standby }, \ No newline at end of file diff --git a/boop/infrared/ir_codes/rec80/rak_sc957wk b/boop/infrared/ir_codes/rec80/rak_sc957wk deleted file mode 100644 index 2dc8181..0000000 --- a/boop/infrared/ir_codes/rec80/rak_sc957wk +++ /dev/null @@ -1,62 +0,0 @@ -/* - infrared codes for REC80 rak sc957wk - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x80F64A1C, // A -> Subwoofer - 0x8024981C, // B -> Auto Off - 0x802A961C, // C -> Sleep - 0x800EA40A, // D -> Disc - 0x80208A0A, // Betty -> Program - 0x8009A30A, // Exit -> Cancel - 0x80B60A1C, // Up -> Up - 0x80BA061C, // Down -> Down - 0x80F5491C, // Left -> SkipBack/Rewind - 0x80F64A1C, // Right -> SkipForward/FastForward - 0x80000000, // OK -> - 0x80802000, // Vol+ -> Vol+ - 0x80812100, // Vol- -> Vol- - 0x80923200, // Mute -> Muting - 0x80000000, // Prog+ -> - 0x80000000, // Prog- -> - 0x80AC101C, // 1 -> 1 - 0x80AD111C, // 2 -> 2 - 0x80AE121C, // 3 -> 3 - 0x80AF131C, // 4 -> 4 - 0x80A8141C, // 5 -> 5 - 0x80A9151C, // 6 -> 6 - 0x80AA161C, // 7 -> 7 - 0x80AB171C, // 8 -> 8 - 0x80A4181C, // 9 -> 9 - 0x80A5191C, // 0 -> 0 - 0x8038841C, // -/-- -> >10 - 0x80000000, // AV -> - 0x80BC001C, // Menu -> Stop - 0x80ED470A, // PiP -> Repeat - 0x80E74D0A, // A/B -> Random - 0x80813110, // 16:9 -> 3D AI - 0x80000000, // Info -> CD - 0x80000000, // VTX1 -> Tuner - 0x80000000, // VTX2 -> Aux - 0x80338310, // VTX3 -> EQ - 0x80813110, // Blue -> Tape - 0x80349400, // Yello -> CD - 0x8000A404, // Green -> Tuner - 0x803A9A00, // Red -> Aux - 0x80000000, // TV -> - 0x80813D1C // Power -> Standby -}, diff --git a/boop/infrared/ir_codes/recs80/seleco_020 b/boop/infrared/ir_codes/recs80/seleco_020 deleted file mode 100644 index d957ed9..0000000 --- a/boop/infrared/ir_codes/recs80/seleco_020 +++ /dev/null @@ -1,62 +0,0 @@ -/* - infrared codes for RECS80 seleco 020 - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x0000, // A -> - 0x0000, // B -> - 0x0000, // C -> - 0x0000, // D -> - 0x0000, // Betty -> - 0x0000, // Exit -> - 0x05DC, // Up -> - 0x05DE, // Down -> - 0x05DA, // Left -> - 0x05DB, // Right -> - 0x05EC, // OK -> Enter - 0x05D0, // Vol+ -> Vol+ - 0x05D1, // Vol- -> Vol- - 0x05E9, // Mute -> Muting - 0x05CA, // Prog+ -> Prog+ - 0x05CB, // Prog- -> Prog- - 0x05C1, // 1 -> 1 - 0x05C2, // 2 -> 2 - 0x05C3, // 3 -> 3 - 0x05C4, // 4 -> 4 - 0x05C5, // 5 -> 5 - 0x05C6, // 6 -> 6 - 0x05C7, // 7 -> 7 - 0x05C8, // 8 -> 8 - 0x05C9, // 9 -> 9 - 0x05C0, // 0 -> 0 - 0x0000, // -/-- -> - 0x0000, // AV -> - 0x0000, // Menu -> - 0x0000, // PiP -> - 0x05EE, // A/B -> A/B - 0x0000, // 16:9 -> - 0x05EE, // Info -> Info - 0x05F6, // VTX1 -> VTX1 - 0x05F0, // VTX2 -> VTX3 - 0x05F7, // VTX3 -> VTX4 - 0x0000, // Blue -> - 0x0000, // Yello -> - 0x0000, // Green -> - 0x0000, // Red -> - 0x0000, // TV -> - 0x05CC // Power -> Power -}, diff --git a/boop/infrared/ir_codes/recs80/seleco_157 b/boop/infrared/ir_codes/recs80/seleco_157 deleted file mode 100644 index 70cd77f..0000000 --- a/boop/infrared/ir_codes/recs80/seleco_157 +++ /dev/null @@ -1,62 +0,0 @@ -/* - infrared codes for RECS80 seleco 157 - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x0000, // A -> - 0x0000, // B -> - 0x0000, // C -> - 0x0000, // D -> - 0x0000, // Betty -> - 0x0000, // Exit -> - 0x05DC, // Up -> - 0x05DE, // Down -> - 0x05DA, // Left -> - 0x05DB, // Right -> - 0x05EC, // OK -> Enter - 0x05D0, // Vol+ -> Vol+ - 0x05D1, // Vol- -> Vol- - 0x05E9, // Mute -> Muting - 0x05D2, // Prog+ -> Prog+ - 0x05D3, // Prog- -> Prog- - 0x05C1, // 1 -> 1 - 0x05C2, // 2 -> 2 - 0x05C3, // 3 -> 3 - 0x05C4, // 4 -> 4 - 0x05C5, // 5 -> 5 - 0x05C6, // 6 -> 6 - 0x05C7, // 7 -> 7 - 0x05C8, // 8 -> 8 - 0x05C9, // 9 -> 9 - 0x05C0, // 0 -> 0 - 0x0000, // -/-- -> - 0x0000, // AV -> - 0x0000, // Menu -> - 0x0000, // PiP -> - 0x05CA, // A/B -> A/B - 0x0000, // 16:9 -> - 0x05E8, // Info -> Info - 0x05F3, // VTX1 -> VTX1 - 0x05E5, // VTX2 -> VTX2 - 0x05F6, // VTX3 -> VTX3 - 0x0000, // Blue -> - 0x0000, // Yello -> - 0x0000, // Green -> - 0x0000, // Red -> - 0x0000, // TV -> - 0x05F0 // Power -> Power -}, diff --git a/boop/infrared/ir_codes/rf/cc1100_a0 b/boop/infrared/ir_codes/rf/cc1100_a0 deleted file mode 100644 index 2e05ed9..0000000 --- a/boop/infrared/ir_codes/rf/cc1100_a0 +++ /dev/null @@ -1,62 +0,0 @@ -/* - RF codes for cc1100 Adress 0 - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x0000, // A -> - 0x0000, // B -> - 0x0000, // C -> - 0x0000, // D -> - 0x0000, // Betty -> - 0x0000, // Exit -> - 0x000b, // Up -> Brightness+ - 0x000c, // Down -> Brightness- - 0x000d, // Left -> Left - 0x000e, // Right -> Right - 0x000f, // OK -> OK - 0x0010, // Vol+ -> Vol+ - 0x0011, // Vol- -> Vol- - 0x0012, // Mute -> Mute - 0x0013, // Prog+ -> Prog+ - 0x0014, // Prog- -> Prog- - 0x0001, // 1 -> 1 - 0x0002, // 2 -> 2 - 0x0003, // 3 -> 3 - 0x0004, // 4 -> 4 - 0x0005, // 5 -> 5 - 0x0006, // 6 -> 6 - 0x0007, // 7 -> 7 - 0x0008, // 8 -> 8 - 0x0009, // 9 -> 9 - 0x000a, // 0 -> 0 - 0x0015, // -/-- -> -/-- - 0x0016, // AV -> AV - 0x0017, // Menu -> Menu - 0x0018, // PiP -> PiP - 0x0019, // A/B -> A/B - 0x001a, // 16:9 -> 16:9 - 0x001b, // Info -> Info - 0x001c, // VTX1 -> VTX1 - 0x001d, // VTX2 -> VTX2 - 0x001e, // VTX3 -> VTX3 - 0x001f, // Blue -> Blue - 0x0020, // Yello -> Yello - 0x0021, // Green -> Green - 0x0022, // Red -> Red - 0x0023, // TV -> TV - 0x0024 // Power -> Standby -}, diff --git a/boop/infrared/ir_codes/rf/cc1100_a1 b/boop/infrared/ir_codes/rf/cc1100_a1 deleted file mode 100644 index ec84a50..0000000 --- a/boop/infrared/ir_codes/rf/cc1100_a1 +++ /dev/null @@ -1,62 +0,0 @@ -/* - RF codes for cc1100 Adress 1 - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x0000, // A -> - 0x0000, // B -> - 0x0000, // C -> - 0x0000, // D -> - 0x0000, // Betty -> - 0x0000, // Exit -> - 0x010b, // Up -> Brightness+ - 0x010c, // Down -> Brightness- - 0x010d, // Left -> Left - 0x010e, // Right -> Right - 0x010f, // OK -> OK - 0x0110, // Vol+ -> Vol+ - 0x0111, // Vol- -> Vol- - 0x0112, // Mute -> Mute - 0x0113, // Prog+ -> Prog+ - 0x0114, // Prog- -> Prog- - 0x0101, // 1 -> 1 - 0x0102, // 2 -> 2 - 0x0103, // 3 -> 3 - 0x0104, // 4 -> 4 - 0x0105, // 5 -> 5 - 0x0106, // 6 -> 6 - 0x0107, // 7 -> 7 - 0x0108, // 8 -> 8 - 0x0109, // 9 -> 9 - 0x010a, // 0 -> 0 - 0x0115, // -/-- -> -/-- - 0x0116, // AV -> AV - 0x0117, // Menu -> Menu - 0x0118, // PiP -> PiP - 0x0119, // A/B -> A/B - 0x011a, // 16:9 -> 16:9 - 0x011b, // Info -> Info - 0x011c, // VTX1 -> VTX1 - 0x011d, // VTX2 -> VTX2 - 0x011e, // VTX3 -> VTX3 - 0x011f, // Blue -> Blue - 0x0120, // Yello -> Yello - 0x0121, // Green -> Green - 0x0122, // Red -> Red - 0x0123, // TV -> TV - 0x0124 // Power -> Standby -}, diff --git a/boop/infrared/ir_codes/sirc/UFD400 b/boop/infrared/ir_codes/sirc/UFD400 deleted file mode 100644 index 158abcd..0000000 --- a/boop/infrared/ir_codes/sirc/UFD400 +++ /dev/null @@ -1,62 +0,0 @@ -/* - infrared codes for SPACEENC seleco 027 - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x0000, // A -> - 0x00, // B -> - 0x00, // C -> - 0x00, // D -> - 0x00, // Betty -> - 0x47B8, // Exit -> - 0x0BF4, // Up -> Play - 0x738C, // Down -> Stop - 0x6798, // Left -> Rewind - 0x27D8, // Right -> Forward - 0x3BC4, // OK -> Enter - 0x4BB4, // Vol+ -> Vol+ - 0x2BD4, // Vol- -> Vol- - 0x1BE4, // Mute -> Muting - 0x00, // Prog+ -> Prog+ - 0x00, // Prog- -> Prog- - 0x3FC0, // 1 -> 1 - 0x5FA0, // 2 -> 2 - 0x1FE0, // 3 -> 3 - 0x6F90, // 4 -> 4 - 0x2FD0, // 5 -> 5 - 0x4FB0, // 6 -> 6 - 0x0FF0, // 7 -> 7 - 0x7788, // 8 -> 8 - 0x37C8, // 9 -> 9 - 0x7F80, // 0 -> 0 - 0x00, // -/-- -> - 0x00, // AV -> - 0x00, // Menu -> - 0x00, // PiP -> - 0x26D9, // A/B -> A/B - 0x15EA, // 16:9 -> - 0x659A, // Info -> Info - 0x6798, // VTX1 -> VTX1 - 0x7B84, // VTX2 -> VTX3 - 0x5EA1, // VTX3 -> VTX4 - 0x00, // Blue -> - 0x00, // Yello -> - 0x00, // Green -> - 0x00, // Red -> Pause - 0x07F8, // TV -> - 0x5BA4 // Power -> Power -}, diff --git a/boop/infrared/ir_codes/sirc/rm-pp411 b/boop/infrared/ir_codes/sirc/rm-pp411 deleted file mode 100644 index d849442..0000000 --- a/boop/infrared/ir_codes/sirc/rm-pp411 +++ /dev/null @@ -1,64 +0,0 @@ -/* - Infrared codes for Sony RM-PP411 Receiver AV2 - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -// 15 bit commands, msb = 1 - -{ - 0x0000, // A -> - 0x0000, // B -> - 0x0000, // C -> - 0x0000, // D -> - 0xD877, // Betty -> Main Menu - 0x9860, // Exit -> Sleep - 0x0000, // Up -> - 0x0000, // Down -> - 0x0000, // Left -> - 0x0000, // Right -> - 0x0000, // OK -> - 0x9812, // Vol+ -> Master Vol+ - 0x9813, // Vol- -> Master Vol- - 0x9814, // Mute -> Muting - 0xD86E, // Prog+ -> Mode+ - 0xD86F, // Prog- -> Mode- - 0x9822, // 1 -> Video 1 - 0x981E, // 2 -> Video 2 - 0x9842, // 3 -> Video 3 - 0x987D, // 4 -> DVD/LD - 0x9869, // 5 -> MD/Tape - 0x9825, // 6 -> CD/SACD - 0x9821, // 7 -> Tuner - 0x9820, // 8 -> Phono - 0x981D, // 9 -> Aux - 0x9849, // 0 -> Analog Direct - 0xD841, // -/-- -> 2 CH - 0x0000, // AV -> - 0x0000, // Menu -> - 0x0000, // PiP -> - 0x0000, // A/B -> - 0x0000, // 16:9 -> - 0x9853, // Info -> On Screen - 0x9815, // VTX1 -> I/O - 0xD847, // VTX2 -> AUTO Decoding - 0x9817, // VTX3 -> MPX/Dual - 0xD826, // Blue -> Preset - 0xD84A, // Yello -> Test Tone - 0xBCFB, // Green -> Source - 0x9872, // Red -> Multi CH - 0x986A, // TV -> TV/Sat - 0x8237, // Power -> Standby -}, diff --git a/boop/infrared/ir_codes/sirc/tv b/boop/infrared/ir_codes/sirc/tv deleted file mode 100644 index 02ab553..0000000 --- a/boop/infrared/ir_codes/sirc/tv +++ /dev/null @@ -1,64 +0,0 @@ -/* - Infrared codes for Sony TV - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -// 12 bit commands (MSB = 0) - -{ - 0x0000, // A -> - 0x0000, // B -> - 0x0000, // C -> - 0x0000, // D -> - 0x0000, // Betty -> - 0x0000, // Exit -> - 0x0000, // Up -> - 0x0000, // Down -> - 0x0000, // Left -> - 0x0000, // Right -> - 0x0000, // OK -> - 0x0092, // Vol+ -> Vol+ - 0x0093, // Vol- -> Vol- - 0x0094, // Mute -> Mute - 0x0090, // Prog+ -> Prog+ - 0x0091, // Prog- -> Prog- - 0x0080, // 1 -> 1 - 0x0081, // 2 -> 2 - 0x0082, // 3 -> 3 - 0x0083, // 4 -> 4 - 0x0084, // 5 -> 5 - 0x0085, // 6 -> 6 - 0x0086, // 7 -> 7 - 0x0087, // 8 -> 8 - 0x0088, // 9 -> 9 - 0x0089, // 0 -> 0 - 0x009D, // -/-- -> -/-- - 0x00A5, // AV -> Ext - 0x0000, // Menu -> - 0x0000, // PiP -> - 0x0000, // A/B -> - 0x0000, // 16:9 -> - 0x0000, // Info -> - 0x00BF, // VTX1 -> Teletext - 0x0000, // VTX2 -> - 0x0000, // VTX3 -> - 0x0182, // Blue -> Blue - 0x0182, // Yellow -> Yellow - 0x0181, // Green -> Green - 0x0180, // Red -> Red - 0x00B8, // TV -> TV - 0x0095 // Power -> -}, diff --git a/boop/infrared/ir_codes/spaceenc/schneider_dtv3 b/boop/infrared/ir_codes/spaceenc/schneider_dtv3 deleted file mode 100644 index 488e73d..0000000 --- a/boop/infrared/ir_codes/spaceenc/schneider_dtv3 +++ /dev/null @@ -1,62 +0,0 @@ -/* - infrared codes for SPACEENC schneider dtv3 - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x00, // A -> - 0x00, // B -> - 0x00, // C -> - 0x00, // D -> - 0x00, // Betty -> - 0x00, // Exit -> - 0x00, // Up -> Chan+ Fast - 0x00, // Down -> Chan- Fast - 0x00, // Left -> Vol- Fast - 0x00, // Right -> Vol+ Fast - 0x00, // OK -> - 0x05, // Vol+ -> Vol+ - 0x06, // Vol- -> Vol- - 0x00, // Mute -> - 0x07, // Prog+ -> Chan+ - 0x08, // Prog- -> Chan-- - 0x00, // 1 -> - 0x00, // 2 -> - 0x00, // 3 -> - 0x00, // 4 -> - 0x00, // 5 -> - 0x00, // 6 -> - 0x00, // 7 -> - 0x00, // 8 -> - 0x00, // 9 -> - 0x00, // 0 -> - 0x00, // -/-- -> - 0x00, // AV -> - 0x00, // Menu -> - 0x00, // PiP -> - 0x00, // A/B -> - 0x00, // 16:9 -> - 0x09, // Info -> White - 0x00, // VTX1 -> - 0x00, // VTX2 -> - 0x00, // VTX3 -> - 0x0A, // Blue -> Blue - 0x0B, // Yello -> Yellow - 0x0C, // Green -> Green - 0x0D, // Red -> Red - 0x00, // TV -> - 0x0E // Power -> Power -}, diff --git a/boop/infrared/ir_codes/spaceenc/schneider_dtv3_xtra b/boop/infrared/ir_codes/spaceenc/schneider_dtv3_xtra deleted file mode 100644 index da11f31..0000000 --- a/boop/infrared/ir_codes/spaceenc/schneider_dtv3_xtra +++ /dev/null @@ -1,55 +0,0 @@ -/* - infrared codes for SPACEENC schneider dtv3 - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -const unsigned int dtv3_codes[15] = -{ - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x0000003F, // Vol+ - 0x0008007E, // Vol- - 0x0000207F, // Chan+ - 0x000840FC, // Chan- - 0x90000027, // White - 0x2000004F, // Blue - 0x08000067, // Yellow - 0xC000000F, // Green - 0x8000001F, // Red - 0x30000087 // Power -}; - -const unsigned char dtv3_pre[15] = -{ - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, // Vol+ - 0x7F, // Vol- - 0xCF, // Chan+ - 0xCF, // Chan- - 0xFF, // White - 0xFF, // Blue - 0xFF, // Yellow - 0xFF, // Green - 0xFF, // Red - 0xFF // Power -}; diff --git a/boop/infrared/ir_codes/spaceenc/seleco_027 b/boop/infrared/ir_codes/spaceenc/seleco_027 deleted file mode 100644 index 08ec25e..0000000 --- a/boop/infrared/ir_codes/spaceenc/seleco_027 +++ /dev/null @@ -1,62 +0,0 @@ -/* - infrared codes for SPACEENC seleco 027 - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -{ - 0x00, // A -> - 0x00, // B -> - 0x00, // C -> - 0x00, // D -> - 0x00, // Betty -> - 0x00, // Exit -> - 0x1C, // Up -> Play - 0x1E, // Down -> Stop - 0x1A, // Left -> Rewind - 0x1B, // Right -> Forward - 0x07, // OK -> Enter - 0x01, // Vol+ -> Vol+ - 0x02, // Vol- -> Vol- - 0x05, // Mute -> Muting - 0x03, // Prog+ -> Prog+ - 0x04, // Prog- -> Prog- - 0x10, // 1 -> 1 - 0x11, // 2 -> 2 - 0x12, // 3 -> 3 - 0x13, // 4 -> 4 - 0x14, // 5 -> 5 - 0x15, // 6 -> 6 - 0x16, // 7 -> 7 - 0x17, // 8 -> 8 - 0x18, // 9 -> 9 - 0x19, // 0 -> 0 - 0x00, // -/-- -> - 0x00, // AV -> - 0x00, // Menu -> - 0x00, // PiP -> - 0x1F, // A/B -> A/B - 0x00, // 16:9 -> - 0x28, // Info -> Info - 0x3F, // VTX1 -> VTX1 - 0x0B, // VTX2 -> VTX3 - 0x0D, // VTX3 -> VTX4 - 0x00, // Blue -> - 0x00, // Yello -> - 0x00, // Green -> - 0x1D, // Red -> Pause - 0x00, // TV -> - 0x0E // Power -> Power -}, diff --git a/boop/infrared/ir_lirc.c b/boop/infrared/ir_lirc.c deleted file mode 100644 index 2dc4204..0000000 --- a/boop/infrared/ir_lirc.c +++ /dev/null @@ -1,404 +0,0 @@ -/* - ir_lirc.c - lirc ir encoder - Copyright (C) 2009 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "infrared.h" -#include "ir_lirc.h" -#include "encoders.h" -#include "codes.h" -#include "fonty.h" -#include "lcd.h" -#include "rf.h" -#include "cc1100.h" -#include "pwm.h" - -#include "global.h" - -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; - -struct CODE_TABLE_L *lirctable; - -unsigned int prev_cycles; /* needed for handling of b&o specific protocol added MN2017325 */ - -#define LIRC_IDLE 0x00 -#define LIRC_HEAD_P 0x01 -#define LIRC_HEAD_S 0x02 -#define LIRC_LEAD_P 0x03 -#define LIRC_PRE_DAT_P 0x04 -#define LIRC_PRE_DAT_S 0x05 -#define LIRC_PRE_P 0x06 -#define LIRC_PRE_S 0x07 -#define LIRC_DATA_P 0x08 -#define LIRC_DATA_S 0x09 -#define LIRC_POST_P 0x0A -#define LIRC_POST_S 0x0B -#define LIRC_POST_DAT_P 0x0C -#define LIRC_POST_DAT_S 0x0D -#define LIRC_REPEAT_P 0x0E -#define LIRC_REPEAT_S 0x0F -#define LIRC_TRAIL_P 0x10 -#define LIRC_FOOT_S 0x11 -#define LIRC_FOOT_P 0x12 -#define LIRC_GAP 0x13 - -const struct irModule LIRC_Module = -{ - LIRC_Encode, - LIRC_Send, - LIRC_Repeat, - LIRC_Stop, - 136, // carrier - 1, // carrier-on - 3 // carrier-off -}; - - -unsigned char __attribute__ ((section(".text.fastcode"))) send_data (unsigned long data, unsigned char pulse) { - - const unsigned short* bittimes[4] = {&(lirctable->pzero), &(lirctable->pone), &(lirctable->ptwo), &(lirctable->pthree)}; - unsigned char notpulse = 1; - - if(pulse) { - pulse = 1; - notpulse = 0; - } - - if(is_rcmm) { - switch(data & 0xC0000000) { - case 0x00000000: - cycles = bittimes[0][notpulse]; - break; - case 0x40000000: - cycles = bittimes[1][notpulse]; - break; - case 0x80000000: - cycles = bittimes[2][notpulse]; - break; - case 0xC0000000: - cycles = bittimes[3][notpulse]; - break; - } - mod_enable = pulse; - if(!pulse) { - ir.lirc.bit +=2; - return(2); - } - return(0); - } - else if(is_biphase) { - if(data & 0x80000000) { - cycles = bittimes[1][pulse]; - mod_enable = notpulse; - } - else { - cycles = bittimes[0][notpulse]; - mod_enable = pulse; - } - if((ir.lirc.bit+1 == lirctable->rc6_bit)) - cycles <<= 1; - } - else { - if(data & 0x80000000) { - cycles = bittimes[1][notpulse]; - } - else { - cycles = bittimes[0][notpulse]; - } - mod_enable = pulse; - } - if(!pulse) { - ir.lirc.bit++; - return(1); - } - return(0); -} - -void __attribute__ ((section(".text.fastcode"))) LIRC_Encode (void) { - unsigned long gap; - - ir.lirc.cycles_counter += cycles; - - switch(ir.state) - { - case LIRC_IDLE: - cycles = lirctable->pone; - mod_enable = 0; - break; - case LIRC_HEAD_P: - ir.lirc.cycles_counter = 0; - if(has_header && (!ir.lirc.repeats || (!(lirctable->flags&LIRC_NO_HEAD_REP) && !has_repeat) || (lirctable->flags&LIRC_REPEAT_HEADER))) { // - mod_enable = 1; - cycles = lirctable->phead; - ir.state++; - break; - case LIRC_HEAD_S: - mod_enable = 0; - cycles = lirctable->shead; - ir.state++; - break; - } - ir.state = LIRC_LEAD_P; - case LIRC_LEAD_P: - if(lirctable->plead) { - mod_enable = 1; - cycles = lirctable->plead; - ir.state++; - break; - } - ir.state++; - case LIRC_PRE_DAT_P: - if(!has_repeat || !(ir.lirc.repeats)) { - if(lirctable->pre_data_bits) { - send_data(ir.lirc.pre_data,1); - ir.state++; - break; - case LIRC_PRE_DAT_S: - ir.lirc.pre_data <<= send_data(ir.lirc.pre_data,0); - if(ir.lirc.bit >= lirctable->pre_data_bits) - ir.state++; - else - ir.state--; - break; - case LIRC_PRE_P: - if(lirctable->pre_p && lirctable->pre_s) { - mod_enable = 1; - cycles = lirctable->pre_p; - ir.state++; - break; - case LIRC_PRE_S: - mod_enable = 0; - cycles = lirctable->pre_s; - ir.state++; - break; - } - } - ir.state = LIRC_DATA_P; - prev_cycles = 0; - case LIRC_DATA_P: - send_data(ir.cmd,1); - ir.state++; - break; - case LIRC_DATA_S: - ir.cmd <<= send_data(ir.cmd,0); - /* handling for b&o specific protocol added MN2017325 - special r-bit coding, if current bit is equal previous bit */ - if(is_BO) { - if (prev_cycles == cycles) { - prev_cycles = cycles; - cycles = lirctable->szero * 2 ; - } else { - prev_cycles = cycles; - } - } - if(ir.lirc.bit >= lirctable->pre_data_bits + lirctable->bits) - ir.state++; - else - ir.state--; - break; - case LIRC_POST_P: - if(lirctable->post_data_bits) { - if(lirctable->post_p && lirctable->post_s) { - mod_enable = 1; - cycles = lirctable->post_p; - ir.state++; - break; - case LIRC_POST_S: - mod_enable = 0; - cycles = lirctable->post_s; - ir.state++; - break; - } - ir.state = LIRC_POST_DAT_P; - case LIRC_POST_DAT_P: - send_data(ir.lirc.post_data,1); - ir.state++; - break; - case LIRC_POST_DAT_S: - ir.lirc.post_data <<= send_data(ir.lirc.post_data,0); - if(ir.lirc.bit >= lirctable->pre_data_bits + lirctable->bits + lirctable->post_data_bits) - ir.state = LIRC_TRAIL_P; - else - ir.state--; - break; - } - } - ir.state = LIRC_REPEAT_P; - case LIRC_REPEAT_P: - if(has_repeat && ir.lirc.repeats) { - mod_enable = 1; - cycles = lirctable->prepeat; - ir.state++; - break; - case LIRC_REPEAT_S: - mod_enable = 0; - cycles = lirctable->srepeat; - ir.state++; - break; - } - ir.state = LIRC_TRAIL_P; - case LIRC_TRAIL_P: - if(lirctable->ptrail) { - mod_enable = 1; - cycles = lirctable->ptrail; - ir.state++; - break; - } - ir.state++; - case LIRC_FOOT_S: - if(has_foot && (!ir.lirc.repeats || !(lirctable->flags&LIRC_NO_FOOT_REP)) && (!has_repeat || !ir.lirc.repeats)) { - mod_enable = 0; - cycles = lirctable->sfoot; - ir.state++; - break; - case LIRC_FOOT_P: - mod_enable = 1; - cycles = lirctable->pfoot; - ir.state++; - break; - } - case LIRC_GAP: - default: - mod_enable = 0; - ir.lirc.bit = 0; - ir.cmd = ir.actcmd; - ir.lirc.pre_data = ir.lirc.actpre_data; - ir.lirc.post_data = ir.lirc.actpost_data; - - if((lirctable->repeat_gap && has_repeat && ir.lirc.repeats) | (is_RF && (ir.lirc.repeats >= lirctable->min_repeat))) - gap = lirctable->repeat_gap; - else - gap = lirctable->gap; - - if(is_const && (ir.lirc.cycles_counter < gap)) - cycles = gap - ir.lirc.cycles_counter; - else - cycles = gap; - - if((ir.lirc.repeats >= lirctable->min_repeat) && ir.lirc.stop) { - ir.state = LIRC_IDLE; - } - else { - if(ir.lirc.repeats < 0xff) - ir.lirc.repeats++; - ir.state = LIRC_HEAD_P; - } - } - - T1MR0 = 15 * cycles; - -} - -void LIRC_Init(unsigned char map) -{ - unsigned long freq; - - if(map < LIRC.num_tables) { - - lirctable = (struct CODE_TABLE_L*)&(LIRC.table[map]); - - copyMapI((unsigned int*)LIRC.table[map].codes); - setIR(LIRC_Module); - - if(lirctable->flags&LIRC_RF) { - ir.duty_cycle = 50; - freq = 20000; - } - else { - freq = lirctable->freq; - if(!freq) - freq = 38000; - - ir.duty_cycle = lirctable->duty_cycle; - if(!lirctable->duty_cycle) { //default 50% - ir.duty_cycle = 50; - } - } - - PWM_set_frequency(freq); - - T1MR0 = 15000000 / (freq); - - ir.lirc.actpre_data = (lirctable->pre_data)<<(32-lirctable->pre_data_bits); - ir.lirc.actpost_data = (lirctable->post_data)<<(32-lirctable->post_data_bits); - - ir.cmd = 0; - ir.actcmd = 0; - ir.lirc.stop = 0; - ir.state = LIRC_IDLE; - ir.lirc.bit = 0; - - } -} - -void LIRC_Send(unsigned long cmd) -{ - unsigned long togglemask; - if(cmd != 0x0000) { - - ir.lirc.pre_data = ir.lirc.actpre_data; - ir.actcmd = cmd<<(32-lirctable->bits); - ir.lirc.post_data = ir.lirc.actpost_data; - ir.lirc.stop = 0; - ir.lirc.repeats = 0; - - if(ir.toggle & 0x01) { - togglemask = (unsigned long)(lirctable->toggle_bit_mask) << (32-lirctable->post_data_bits); - ir.lirc.post_data ^= togglemask; - - togglemask = (unsigned long)(lirctable->toggle_bit_mask>>lirctable->post_data_bits) << (32-lirctable->bits); - ir.actcmd ^= togglemask; - - togglemask = (unsigned long)(lirctable->toggle_bit_mask>>(lirctable->post_data_bits + lirctable->bits)) << (32-lirctable->pre_data_bits); - ir.lirc.pre_data ^= togglemask; - } - - if(ir.state == LIRC_IDLE) { - ir.cmd = ir.actcmd; - ir.lirc.bit = 0; - ir.state++; - if(is_RF) { - RFasyncmode(true); - cc1100_write1(FREQ2,((lirctable->freq)>>16) & 0xFF); - cc1100_write1(FREQ1,((lirctable->freq)>>8) & 0xFF); - cc1100_write1(FREQ0,(lirctable->freq) & 0xFF); - cc1100_strobe(STX); - } - runIR(); - } - } -} - -void LIRC_Repeat(void) { - -} - -void LIRC_Stop(void) -{ - ir.lirc.stop = 1; - if(lirctable->bits){ - while(ir.state != LIRC_IDLE); - } - - ir.toggle++; - ir.actcmd = 0x0000; - stopIR(); - if(is_RF) { - RFasyncmode(false); - } -} diff --git a/boop/infrared/ir_lirc.h b/boop/infrared/ir_lirc.h deleted file mode 100644 index 3541a87..0000000 --- a/boop/infrared/ir_lirc.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - ir_lirc.h - lirc ir encoder - Copyright (C) 2009 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef IR_LIRC_H -#define IR_LIRC_H - - -#define LIRC_RC5 0x0002 /* IR data follows RC5 protocol */ -#define LIRC_SHIFT_ENC LIRC_RC5 /* IR data is shift encoded (name obsolete) */ -#define LIRC_RC6 0x0004 /* IR data follows RC6 protocol */ -#define LIRC_RCMM 0x0008 /* IR data follows RC-MM protocol */ -#define LIRC_SPACE_ENC 0x0010 /* IR data is space encoded */ -//#define LIRC_SPACE_FIRST 0x0020 /* bits are encoded as space+pulse */ -//#define LIRC_GOLDSTAR 0x0040 /* encoding found on Goldstar remote */ -//#define LIRC_GRUNDIG 0x0080 /* encoding found on Grundig remote */ -#define LIRC_BO 0x0100 /* encoding found on Bang & Olufsen remote */ -#define LIRC_RF 0x0200 /* RF ASK/OOK modulator */ -//#define LIRC_SERIAL 0x0400 /* serial protocol */ -//#define LIRC_XMP 0x0800 /* XMP protocol */ - -/* additinal flags: can be orred together with protocol flag */ -//#define REVERSE 0x0800 -#define LIRC_NO_HEAD_REP 0x1000 /* no header for key repeats */ -#define LIRC_NO_FOOT_REP 0x2000 /* no foot for key repeats */ -#define LIRC_CONST_LENGTH 0x4000 /* signal length+gap is always constant */ -#define LIRC_REPEAT_HEADER 0x8000 /* header is also sent before repeat code */ - -#define is_rc6 (lirctable->flags & LIRC_RC6) -#define is_biphase ((lirctable->flags & LIRC_RC5) || is_rc6) -#define is_rcmm (lirctable->flags & LIRC_RCMM) -#define is_const (lirctable->flags & LIRC_CONST_LENGTH) -#define is_RF (lirctable->flags & LIRC_RF) -#define is_BO (lirctable->flags & LIRC_BO) /* flag for b&o specific protocol MN2017325 */ -#define has_header (lirctable->phead && lirctable->shead) -#define has_foot (lirctable->pfoot && lirctable->sfoot) -#define has_repeat (lirctable->prepeat && lirctable->srepeat) - -//FS20 Protocol description see http://fhz4linux.info/tiki-index.php?page=FS20%20Protocol -#define calcFS20pre(HC1,par1,HC2,par2) ((1<<18) | (HC1<<10) | (par1<<9) | (HC2<<1) | par2) -#define calcFS20code(Adr,parAdr,Cmd,parCmd,Chk,parChk) ((Adr<<19) | (parAdr<<18) | (Cmd<<10) | (parCmd<<9) | (Chk<<1) | parChk) - -void LIRC_Encode (void) __attribute__ ((section(".text.fastcode"))); - -void LIRC_Init(unsigned char map); -void LIRC_Send(unsigned long cmd); -void LIRC_Repeat(void); -void LIRC_Stop(void); - -#endif diff --git a/boop/infrared/ir_raw.c b/boop/infrared/ir_raw.c deleted file mode 100644 index 726ade8..0000000 --- a/boop/infrared/ir_raw.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - ir_raw.c - raw ir encoder - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "infrared.h" -#include "ir_raw.h" -#include "encoders.h" -#include "codes.h" -#include "ir_capture.h" -#include "fonty.h" -#include "lcd.h" - -#include "global.h" -#include "bfs.h" - -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; -extern volatile unsigned long keyMap[42]; - -struct RAWcmd_* RAWcmd; - -#define RAW_IDLE 0x00 -#define RAW_HI 0x01 -#define RAW_LO 0x02 - -const struct irModule RAW_Module = -{ - RAW_Encode, - RAW_Send, - RAW_Repeat, - RAW_Stop, - 91, // carrier - 1, // carrier-on - 3, // carrier-off -}; - -void __attribute__ ((section(".text.fastcode"))) RAW_Encode (void) -{ - - switch(ir.state) - { unsigned char* x; - - case RAW_IDLE: - mod_enable = 0; - break; - - case RAW_HI: - mod_enable = 1; - - x=(unsigned char*)&(RAWcmd->pulselen[(RAWcmd->data[RAWcmd->CMDstart[ir.actcmd]+ir.general.bit])>>4]); - cycles = x[0] + (x[1]<<8); - ir.state++; - break; - - case RAW_LO: - mod_enable = 0; - x=(unsigned char*)&(RAWcmd->pulselen[(RAWcmd->data[RAWcmd->CMDstart[ir.actcmd]+ir.general.bit])&0x0f]); - cycles = x[0] + (x[1]<<8); - ir.general.bit++; - if (ir.general.bit >= RAWcmd->CMDlen[ir.actcmd]) { - ir.general.bit = 0; - if (ir.general.trail) { - ir.state = RAW_HI; - ir.actcmd = 1; - } - else - ir.state = RAW_IDLE; - } - else - ir.state--; - break; - - - } -} - -void RAW_Init(unsigned char map) -{ - if(map < RAW.num_tables) - { - struct RAWset_ *RAWset; - unsigned long RAWcmdbase; - - int x; - for(x=0;x<42;x++) { - keyMap[x] = (unsigned long)&ir.cmd; - } - ir.actcmd = 0; - ir.general.bit = 0; - ir.state = RAW_IDLE; - setIR(RAW_Module); - ir.cmd = 0xff; - - RAWcmdbase = (unsigned long)BFS_LoadFileAddr(BFS_ID_RAWslot0 + map); - if(!RAWcmdbase) - return; - - RAWset = (struct RAWset_ *)RAWcmdbase; - - x = memcmp(RAWset,"RC01",4); - if(x == 0) { - for(x=0;x<38;x++) { - keyMap[x+4] = (unsigned long)&RAWset->RAWcmd[x]; - } - } - - } -} - -void RAW_Send(unsigned long cmd) -{ - RAWcmd = (struct RAWcmd_*)cmd; - ir.actcmd = RAWcmd->tval; - if(RAWcmd->tval != 0xff) { - setIR(RAW_Module); - T1MR0 = RAWcmd->tval; - hi_border = (RAWcmd->borders)>>4; - lo_border = (RAWcmd->borders)&0x0f; - ir.actcmd = 0; - ir.general.trail = 0x01; - sysInfo |= SYS_IR; - if(ir.state == RAW_IDLE) - { - ir.general.bit = 0; - ir.state++; - runIR(); - } - } -} - -void RAW_Repeat(void) -{ - -} - -void RAW_Stop(void) -{ - if(RAWcmd->tval != 0xff) { - ir.general.trail = 0; - while(ir.state != RAW_IDLE); - ir.actcmd = 2; - if(RAWcmd->CMDstart[1] != RAWcmd->CMDstart[2]) - ir.state++; - - while(ir.state != RAW_IDLE); - stopIR(); - sysInfo &= ~SYS_IR; - } -} diff --git a/boop/infrared/ir_raw.h b/boop/infrared/ir_raw.h deleted file mode 100644 index 35a0ad1..0000000 --- a/boop/infrared/ir_raw.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - ir_raw.h - raw ir encoder - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef IR_RAW_H -#define IR_RAW_H - -void RAW_Encode (void) __attribute__ ((section(".text.fastcode"))); - -void RAW_Init(unsigned char map); -void RAW_Send(unsigned long cmd); -void RAW_Repeat(void); -void RAW_Stop(void); - -#endif diff --git a/boop/infrared/ir_rc6.c b/boop/infrared/ir_rc6.c deleted file mode 100644 index 990fa08..0000000 --- a/boop/infrared/ir_rc6.c +++ /dev/null @@ -1,225 +0,0 @@ -/* - ir_rc6.c - phillips rc6 protocoll encoder - Copyright (C) 2008 p.c.squirrel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "infrared.h" -#include "ir_rc6.h" -#include "encoders.h" -#include "codes.h" - -const struct irModule RC6_Module = -{ - RC6_Encode, - RC6_Send, - RC6_Repeat, - RC6_Stop, - 136, // carrier - 1, // carrier-on - 3 // carrier-off -}; - -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; -extern volatile unsigned long keyMap[42]; - -#define RC6_IDLE 0x00 -#define RC6_LEADER_A 0x01 -#define RC6_LEADER_B 0x02 -#define RC6_HEADER_BIT_A 0x03 -#define RC6_HEADER_BIT_B 0x04 -#define RC6_TRAILER_BIT_A 0x05 -#define RC6_TRAILER_BIT_B 0x06 -#define RC6_BIT_A 0x07 -#define RC6_BIT_B 0x08 -#define RC6_WAIT 0x09 - - -#define RC6_BITTIME 16 -#define RC6_WAITTIME_M0 188 //~80 ms -#define RC6_WAITTIME_M6 155 - -void __attribute__ ((section(".text.fastcode"))) RC6_Encode (void) -{ - cycles = RC6_BITTIME; //? - switch(ir.state) - { - case RC6_IDLE: - mod_enable = 0; - break; - - case RC6_LEADER_A: - mod_enable = 1; - cycles = RC6_BITTIME*6; - ir.state++; - break; - - case RC6_LEADER_B: - mod_enable = 0; - cycles = RC6_BITTIME*2; - ir.state++; - break; - - case RC6_HEADER_BIT_A: - if(ir.general.header_cmd & 0x8) //0b1000 4. bit SB, mb2, mb1, mb0 - mod_enable = 1; - else - mod_enable = 0; - ir.general.header_cmd <<= 1; - cycles = RC6_BITTIME; - ir.state++; - break; - - case RC6_HEADER_BIT_B: - if(mod_enable == 0) - mod_enable = 1; - else - mod_enable = 0; - ir.general.header_bit++; - cycles = RC6_BITTIME; - if(ir.general.header_bit == 4) - ir.state++; - else - ir.state--; - break; - - case RC6_TRAILER_BIT_A: - if(ir.general.trail) - mod_enable = 1; - else - mod_enable = 0; - cycles = RC6_BITTIME*2; - ir.state++; - break; - - case RC6_TRAILER_BIT_B: - if(ir.general.trail) - mod_enable = 0; - else - mod_enable = 1; - cycles = RC6_BITTIME*2; - ir.state++; - break; - - case RC6_BIT_A: - if(ir.cmd & 0x80000000) - mod_enable = 1; - else - mod_enable = 0; - ir.cmd <<= 1; - ir.state++; - break; - - case RC6_BIT_B: - if(mod_enable == 0) - mod_enable = 1; - else - mod_enable = 0; - ir.general.bit++; - if(ir.general.bit == ir.general.numbits) - ir.state++; - else - ir.state--; - break; - - case RC6_WAIT: - mod_enable = 0; - ir.general.wait++; - if(ir.general.wait >= ir.general.waittime) - { - ir.general.bit = 0; - ir.general.header_bit = 0; - ir.general.wait = 0; - ir.state = RC6_IDLE; - } - break; - } - T1MR0 = cycles * RC6_Module.lo_border * RC6_Module.tval; -} - -void RC6_Init(unsigned char map) -{ - if(map < RC6.num_tables) - { - ir.state = RC6_IDLE; - ir.cmd = 0x0000; - ir.actcmd = 0x0000; - ir.general.wait = 0; - ir.general.bit = 0; - copyMapI((unsigned int*)RC6.table[map].codes); - setIR(RC6_Module); - cycles = RC6_BITTIME; - } -} - -void RC6_Send(unsigned long cmd) -{ - ir.actcmd = cmd; - - setIRspeed(RC6_Module); - -// if(ir.general.toggle & 0x01) - // ir.actcmd &= 0xF7FF; - RC6_Repeat(); -} - -void RC6_Repeat(void) -{ - if(ir.actcmd != 0x0000) - { - if(ir.state == RC6_IDLE) - { - ir.cmd = ir.actcmd; - if(ir.cmd > 0xffff) { - if(ir.toggle & 0x01) - ir.cmd &= 0xFFFF7FFF; - else - ir.cmd |= 0x00008000; - ir.general.numbits = 32; - ir.general.header_cmd = 0x0E; //0b1110 ->Mode 6; - ir.general.trail = 0; - ir.general.waittime = RC6_WAITTIME_M6; - } - else { - ir.cmd <<=16; - ir.general.numbits = 16; - ir.general.header_cmd = 0x08; //0b1000 ->Mode 0; - ir.general.trail = ir.toggle & 0x01; - ir.general.waittime = RC6_WAITTIME_M0; - } - ir.general.header_bit = 0; - ir.state++; - runIR(); - } - } -} - -void RC6_Stop(void) -{ - if(ir.actcmd != 0x00000000) - { -waitend: - if(ir.state != RC6_IDLE) - goto waitend; - } - - ir.toggle++; - ir.actcmd = 0x0000; - stopIR(); -} - - diff --git a/boop/infrared/ir_rc6.h b/boop/infrared/ir_rc6.h deleted file mode 100644 index 1347e6f..0000000 --- a/boop/infrared/ir_rc6.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - ir_rc6.h - phillips rc6 protocoll encoder - Copyright (C) 2008 p.c.squirrel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef IR_RC6_H -#define IR_RC6_H - -void RC6_Encode (void) __attribute__ ((section(".text.fastcode"))); - -void RC6_Init(unsigned char map); -void RC6_Send(unsigned long cmd); -void RC6_Repeat(void); -void RC6_Stop(void); - -#endif diff --git a/boop/infrared/ir_rf.c b/boop/infrared/ir_rf.c deleted file mode 100644 index 8032b17..0000000 --- a/boop/infrared/ir_rf.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - ir_rf.c - RF IR encoder - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "infrared.h" -#include "ir_rf.h" -#include "encoders.h" -#include "codes.h" -#include "rf.h" - -const struct irModule IRRF_Module = -{ - IRRF_Encode, - IRRF_Send, - IRRF_Repeat, - IRRF_Stop, - 75, // carrier turbo mode - 1, // carrier-on - 4 // carrier-off -}; - -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; -extern volatile unsigned long keyMap[42]; - -#define IRRF_IDLE 0x00 -#define IRRF_WAIT 0x01 - -#define IRRF_BITTIME 40 -#define IRRF_WAITTIME 100 - -void __attribute__ ((section(".text.fastcode"))) IRRF_Encode (void) -{ - switch(ir.state) - { - case IRRF_IDLE: - mod_enable = 0; - break; - - case IRRF_WAIT: - mod_enable = 0; - ir.general.wait++; - if(ir.general.wait >= IRRF_WAITTIME) - { - ir.general.bit = 0; - ir.general.wait = 0; - ir.state = IRRF_IDLE; - } - break; - } - T1MR0 = 15*1000; -} - -void IRRF_Init(unsigned char map) -{ - if(map < IRRF.num_tables) - { - ir.state = IRRF_IDLE; - ir.cmd = 0x0000; - ir.actcmd = 0x0000; - ir.general.bit = 0x00; - ir.general.wait = 0; - copyMapS((unsigned short*)IRRF.table[map].codes); - setIR(IRRF_Module); - cycles = IRRF_BITTIME; - } -} - -void IRRF_Send(unsigned long cmd) -{ - ir.actcmd = cmd; - ir.general.trail=(unsigned int)openEP(0,0, packet_RFenc); - setIRspeed(IRRF_Module); - - if((ir.toggle & 0x01) &&(ir.actcmd != 0x0000)) - ir.actcmd |= 0x0080; - IRRF_Repeat(); -} - -void IRRF_Repeat(void) -{ - if(ir.actcmd != 0x0000) - { - if(ir.state == IRRF_IDLE) - { - struct RFendpoint_* cur_ep; - cur_ep = (struct RFendpoint_*)ir.general.trail; - if((cur_ep) && !(cur_ep->flags & EPnewdata)) { - cur_ep->dest = 0; - cur_ep->data[1] = (ir.actcmd & 0x00ff); - cur_ep->data[0] = (ir.actcmd & 0xff00) >> 8; - cur_ep->bufferlen = 2; - cur_ep->flags |= EPenabled | EPoutput | EPnewdata; - - RF_changestate(RFtx); - } - ir.state++; - runIR(); - } - } -} - -void IRRF_Stop(void) -{ - if(ir.actcmd != 0x00000000) - while(ir.state != IRRF_IDLE); - - closeEP((struct RFendpoint_*)ir.general.trail); - ir.toggle++; - ir.actcmd = 0x0000; - stopIR(); -} - - diff --git a/boop/infrared/ir_rf.h b/boop/infrared/ir_rf.h deleted file mode 100644 index 2f3c546..0000000 --- a/boop/infrared/ir_rf.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - iir_rf.h - RF IR encoder - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef IR_RF_H -#define IR_RF_H - -void IRRF_Encode (void) __attribute__ ((section(".text.fastcode"))); - -void IRRF_Init(unsigned char map); -void IRRF_Send(unsigned long cmd); -void IRRF_Repeat(void); -void IRRF_Stop(void); - -#endif diff --git a/boop/infrared/ir_selector.c b/boop/infrared/ir_selector.c deleted file mode 100644 index 385525d..0000000 --- a/boop/infrared/ir_selector.c +++ /dev/null @@ -1,311 +0,0 @@ -/* - ir_selector.c - select ir encoder & codetable - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "infrared.h" -#include "codes.h" -#include "encoders.h" -#include "lcd.h" -#include "fonty.h" -#include "keyboard.h" -#include "ir_selector.h" -#include "bfs.h" -#include "ir_capture.h" -#include "controls.h" -#include "global.h" - -extern volatile unsigned char autorepeat; -extern unsigned char act_encoder, act_set; - -const struct irDeviceTable_ default_irDevTab = -{ - 0x04, - 0x00, - { - { 0x01, 0x00 }, - { 0x02, 0x00 }, - { 0xff, 0xff }, - { 0xff, 0xff } - } -}; - -struct irDeviceTable_ irDevTab; - -char* getEncName(unsigned char enc) -{ - return (char*) encoders.encoder[enc].name; -} - -char* getSetName(unsigned char enc, unsigned char set) -{ - struct TABLES_C *ctab; - struct TABLES_S *stab; - struct TABLES_I *itab; - struct TABLES_N *ntab; - struct TABLES_L *ltab; - struct RAWset_ *RAWset; - - if (enc < encoders.num_encoders) { - switch(encoders.encoder[enc].type) - { - case 0: - ctab = (TABLES_C*)encoders.encoder[enc].data; - if (set < ctab->num_tables) - return (char*) ctab->table[set].name; - break; - case 1: - stab = (TABLES_S*)encoders.encoder[enc].data; - if (set < stab->num_tables) - return (char*) stab->table[set].name; - break; - case 2: - itab = (TABLES_I*)encoders.encoder[enc].data; - if (set < itab->num_tables) - return (char*) itab->table[set].name; - break; - case 3: - ntab = (TABLES_N*)encoders.encoder[enc].data; - if (set < ntab->num_tables) { - RAWset = (struct RAWset_*)BFS_LoadFileAddr(BFS_ID_RAWslot0 + set); - if(RAWset && (RAWset->name[0] != 0xff)) { - return (char*) RAWset->name; - } - else - return (char*) ntab->table[set].name; - } - break; - case 4: - ltab = (TABLES_L*)encoders.encoder[enc].data; - if (set < ltab->num_tables) { - return (char*) ltab->table[set].name; - } - break; - } - } - - return "unknown\0"; -} - -unsigned char EncIsValid(unsigned char enc, unsigned char set) -{ - struct TABLES_C *ctab; - - if (!(enc < encoders.num_encoders)) - return 0; - ctab = (TABLES_C*)encoders.encoder[enc].data; - if (!(set < ctab->num_tables)) - return 0; - return 1; -} - -unsigned char listSet(unsigned int enc, unsigned char sset) -{ - unsigned char set; - - if (!(sset < (((TABLES_C*)(encoders.encoder[enc].data))->num_tables))) - sset = 0; - - lcd_fill(0); - set_font(BOLDFONT); - draw_hexC(0,0,((TABLES_C*)(encoders.encoder[enc].data))->num_tables, 3, DRAW_PUT); - draw_string(16, 0, "remotes in", 3, DRAW_PUT); - draw_string(77, 0, (char*) encoders.encoder[enc].name, 3, DRAW_PUT); - draw_block(0,10,128,2,3,DRAW_PUT); - - set_font(SMALLFONT); - - for(set=0;set<((TABLES_C*)(encoders.encoder[enc].data))->num_tables; set++) - { - draw_string(1, 15+(set*9), getSetName(enc, set), 3, DRAW_PUT); - } - - draw_string(0, 120, "\"Left\" to return", 3, DRAW_PUT); - draw_string(0, 130, "\"OK\" to select remote", 3, DRAW_PUT); - - draw_block(0, 14+(sset*9), 128, 9, 3, DRAW_XOR); - - while(!KEY_Left) - { - waitKeyUpDown(); - draw_block(0, 14+(sset*9), 128, 9, 3, DRAW_XOR); - if(KEY_OK) - { - return sset; - } - if(KEY_Up) - { - sset--; - if(sset >= ((TABLES_C*)(encoders.encoder[enc].data))->num_tables) - sset = ((TABLES_C*)(encoders.encoder[enc].data))->num_tables-1; - } - if(KEY_Down) - { - sset++; - if(sset == ((TABLES_C*)(encoders.encoder[enc].data))->num_tables) - sset = 0; - } - draw_block(0, 14+(sset*9), 128, 9, 3, DRAW_XOR); - } - return 0xFF; -} - -#define maxenclist 8 -void select_ir(unsigned char *encoder,unsigned char *set) -{ - static unsigned char enc, senc, cenc, sset; - unsigned char moff; - unsigned char moffold; - - if (*encoder < encoders.num_encoders) - senc = *encoder; - else - senc = 0; - cenc = senc; - sset = *set; - moff = 0; - - if(senc >= maxenclist) - moff = senc - maxenclist +1; - -again: - moffold = encoders.num_encoders; - - set_font(BOLDFONT); - - lcd_fill(0); - draw_string(0, 0, "Encoders: ", 3, DRAW_PUT); - draw_hexC(54,0,encoders.num_encoders,3,DRAW_PUT); - draw_block(0,10,128,2,3,DRAW_PUT); - - set_font(SMALLFONT); - - draw_string(0, 106, "\"OK\" to accept select remote", 3, DRAW_PUT); - draw_string(0, 115, "\"Exit\" to return", 3, DRAW_PUT); - draw_string(0, 124, "\"Right\" to show names for", 3, DRAW_PUT); - draw_string(35, 133, "selected encoder", 3, DRAW_PUT); - set_font(BOLDFONT); - draw_string(0, 142, "Currently Selected:", 3, DRAW_PUT); - draw_string(0, 152, (char*) encoders.encoder[cenc].name, 3, DRAW_PUT); - draw_string(48, 152, getSetName(cenc,sset), 3, DRAW_PUT); - set_font(SMALLFONT); - - while(!KEY_Exit) - { - if(moff!=moffold) { - draw_block(0, 14, 128, 9*maxenclist, 3, DRAW_ERASE); - for(enc=moff;(encnum_tables, 3, DRAW_PUT); - draw_string(15, 15+((enc-moff)*9), "remotes in", 3, DRAW_PUT); - draw_string(65, 15+((enc-moff)*9), (char*) encoders.encoder[enc].name, 3, DRAW_PUT); - } - - if(encoders.num_encoders > moff+maxenclist) { - draw_hline(120,8+9*maxenclist,5,3,DRAW_PUT); - draw_hline(121,9+9*maxenclist,3,3,DRAW_PUT); - draw_hline(122,10+9*maxenclist,1,3,DRAW_PUT); - } - if(moff) { - draw_hline(120,19,5,3,DRAW_PUT); - draw_hline(121,18,3,3,DRAW_PUT); - draw_hline(122,17,1,3,DRAW_PUT); - } - draw_block(0, 14+((senc-moff)*9), 128, 9, 3, DRAW_XOR); - } - moffold = moff; - waitKeyUpDown(); - draw_block(0, 14+((senc-moff)*9), 128, 9, 3, DRAW_XOR); - if(KEY_Right) - { - enc = sset; - sset = listSet(senc,sset); - if(sset != 0xFF) - cenc = senc; - else - sset = enc; - goto again; - } - if(KEY_Up) - { - senc--; - if(senc= encoders.num_encoders) { - if(encoders.num_encoders > maxenclist) - moff = encoders.num_encoders - maxenclist; - senc = encoders.num_encoders-1; - } - } - if(KEY_Down) - { - senc++; - if(senc == maxenclist+moff) - moff++; - if(senc == encoders.num_encoders) { - moff = 0; - senc = 0; - } - } - if(KEY_OK) - { - //setEncoder(cenc, sset); - *encoder = cenc; - *set = sset; - return; - } - draw_block(0, 14+((senc-moff)*9), 128, 9, 3, DRAW_XOR); - } -} - -void remote_click(FORM* form, CONTROL* control) { - unsigned char sel; - - sel = ((LABEL*)control)->tag; - select_ir(&irDevTab.device[sel].encoder, &irDevTab.device[sel].set); - ((LABEL*)control)->caption = getSetName(irDevTab.device[sel].encoder, irDevTab.device[sel].set); - - form_draw(form); -} - -void RC_setting(void) { - unsigned char set; - unsigned char i; - - LABEL label[irDevTab.count]; - LABEL remote[irDevTab.count]; - char caption[irDevTab.count][6]; - - CONTROL* controls[irDevTab.count * 2]; - - for(i=0;i - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef IR_SELECTOR_H -#define IR_SELECTOR_H - -struct irDevice_ { - unsigned char encoder; - unsigned char set; -}; - -struct irDeviceTable_ { - unsigned char count; - unsigned char active; - struct irDevice_ device[4]; -}; - -struct irDeviceTable_ irDevTab; -const struct irDeviceTable_ default_irDevTab; - -char* getSetName(unsigned char enc, unsigned char set); -unsigned char EncIsValid(unsigned char enc, unsigned char set); -void select_ir(unsigned char *encoder,unsigned char *set); -void RC_setting(void); - -#endif diff --git a/boop/infrared/ir_spaceenc.c b/boop/infrared/ir_spaceenc.c deleted file mode 100644 index 73b0228..0000000 --- a/boop/infrared/ir_spaceenc.c +++ /dev/null @@ -1,255 +0,0 @@ -/* - ir_spaceenc.c - space modulated protocoll encoder - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "infrared.h" -#include "ir_spaceenc.h" -#include "encoders.h" -#include "codes.h" -#include "ir_codes/spaceenc/schneider_dtv3_xtra" - -const struct irModule SPACEENC_Module = -{ - SPACEENC_Encode, - SPACEENC_Send, - SPACEENC_Repeat, - SPACEENC_Stop, - 119, // carrier - 1, // carrier-on - 3 // carrier-off -}; - -const struct irModule SPACEENC2_Module = -{ - SPACEENC_Encode, - SPACEENC2_Send, - SPACEENC2_Repeat, - SPACEENC2_Stop, - 119, // carrier - 1, // carrier-on - 3 // carrier-off -}; - -static unsigned int *ir_codes; -static unsigned char *ir_precodes; - -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; -extern volatile unsigned long keyMap[42]; - -#define SPACEENC_IDLE 0x00 -#define SPACEENC_PRE_A 0x01 -#define SPACEENC_PRE_B 0x02 -#define SPACEENC_BIT_A 0x03 -#define SPACEENC_BIT_B 0x04 -#define SPACEENC_STOP 0x05 -#define SPACEENC_WAIT 0x06 - -#define SPACEENC_NUMBITS 6 -#define SPACEENC_BITTIME 20 -#define SPACEENC_BIT0 65 -#define SPACEENC_BIT1 150 -#define SPACEENC_WAITTIME 59 - -#define SPACEENC2_BITTIME 14 -#define SPACEENC2_BIT0 7 -#define SPACEENC2_BIT1 28 -#define SPACEENC2_WAITTIME 170 - -void __attribute__ ((section(".text.fastcode"))) SPACEENC_Encode (void) -{ - switch(ir.state) - { - case SPACEENC_IDLE: - mod_enable = 0; - break; - - case SPACEENC_PRE_A: - case SPACEENC_BIT_A: - cycles = ir.general.bittime; - mod_enable = 1; - ir.state++; - break; - - case SPACEENC_PRE_B: - mod_enable = 0; - if(ir.cmd & 0x01) - cycles = ir.general.bittime1; - else - cycles = ir.general.bittime0; - ir.cmd >>= 1; - ir.general.bit++; - if(ir.general.bit == ir.general.prebits) - { - ir.state = SPACEENC_BIT_A; - ir.general.bit = 0; - ir.cmd = ir_codes[ir.actcmd]; - } - else - { - ir.state--; - } - break; - - case SPACEENC_BIT_B: - mod_enable = 0; - if(ir.cmd & 0x01) - cycles = ir.general.bittime1; - else - cycles = ir.general.bittime0; - ir.cmd >>= 1; - ir.general.bit++; - if(ir.general.bit == ir.general.numbits) - ir.state++; - else - ir.state--; - break; - - case SPACEENC_STOP: - cycles = ir.general.bittime; - mod_enable = 1; - ir.state++; - break; - - case SPACEENC_WAIT: - mod_enable = 0; - ir.general.wait++; - if(ir.general.wait >= ir.general.waittime) - { - ir.general.bit = 0; - ir.general.wait = 0; - ir.state = SPACEENC_IDLE; - } - break; - } - T1MR0 = cycles * SPACEENC_Module.lo_border * SPACEENC_Module.tval; -} - -void SPACEENC_LoadMap(unsigned char map) -{ - switch(map) - { - case 1: - ir.general.numbits = SPACEENC_NUMBITS; - ir.general.prebits = 0; - ir.general.pre = 0x00; - ir.general.bittime = SPACEENC_BITTIME; - ir.general.bittime0 = SPACEENC_BIT0; - ir.general.bittime1 = SPACEENC_BIT1; - ir.general.waittime = SPACEENC_WAITTIME; - setIR(SPACEENC_Module); - break; - default: - ir.general.numbits = 32; - ir.general.prebits = 8; - ir.general.bittime = SPACEENC2_BITTIME; - ir.general.bittime0 = SPACEENC2_BIT0; - ir.general.bittime1 = SPACEENC2_BIT1; - ir.general.waittime = SPACEENC2_WAITTIME; - ir_codes = (unsigned int*) dtv3_codes; - ir_precodes = (unsigned char*) dtv3_pre; - setIR(SPACEENC2_Module); - break; - } -} - -void SPACEENC_Init(unsigned char map) -{ - if(map < SPACEENC.num_tables) - { - ir.state = SPACEENC_IDLE; - ir.cmd = 0x0000; - ir.actcmd = 0x0000; - ir.general.wait = 0; - ir.general.bit = 0; - copyMapC((unsigned char*)SPACEENC.table[map].codes); - SPACEENC_LoadMap(map); - cycles = SPACEENC_BITTIME; - } -} - -void SPACEENC_Send(unsigned long cmd) -{ - ir.actcmd = cmd; - setIRspeed(SPACEENC_Module); - SPACEENC_Repeat(); - runIR(); -} - -void SPACEENC_Repeat(void) -{ - if(ir.actcmd != 0x00000000) - { - if(ir.state == SPACEENC_IDLE) - { - ir.cmd = ir.actcmd; - ir.state = SPACEENC_BIT_A; - } - } -} - -void SPACEENC_Stop(void) -{ -waitend1: - while(ir.state != SPACEENC_IDLE) - goto waitend1; - - if(ir.actcmd != 0x00000000) - { - SPACEENC_Repeat(); - -waitend2: - if(ir.state != SPACEENC_IDLE) - goto waitend2; - } - ir.actcmd = 0x00000000; - stopIR(); -} - -void SPACEENC2_Send(unsigned long cmd) -{ - ir.actcmd = cmd; - SPACEENC2_Repeat(); -} - -void SPACEENC2_Repeat(void) -{ - if(ir.actcmd != 0x00000000) - { - if(ir.state == SPACEENC_IDLE) - { - ir.cmd = ir_precodes[ir.actcmd]; - ir.state = SPACEENC_PRE_A; - runIR(); - } - } -} - -void SPACEENC2_Stop(void) -{ - if(ir.actcmd != 0x00000000) - { -waitend2: - if(ir.state != SPACEENC_IDLE) - goto waitend2; - } - ir.actcmd = 0x00000000; - stopIR(); -} - - diff --git a/boop/infrared/pwm.c b/boop/infrared/pwm.c deleted file mode 100644 index 7c891c6..0000000 --- a/boop/infrared/pwm.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - pwm.c - pwm control - Copyright (C) 2017 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "global.h" -#include "lpc2220.h" -#include "irq.h" - -void PWM_init(void) -{ - //Set pin P0.21 IR_OUT as PWM - PINSEL1 &= ~(3 << (10)); // IO - PINSEL1 |= (1 << (10)); // PWM5 - - PWMTC = 0; //Timer Counter - PWMPR = 0; //Prescale Register - PWMPC = 0; //Prescale Counter - - PWMMR0 = 416; // pwm rate - PWMMR2 = 0x00; // pwm value sound - PWMMR5 = 0x00; // pwm value IR - - PWMLER = 0x26; //Latch Enable - PWMMCR = 0x03; //Match Control - PWMPCR |= (1<<13) | (1<<10); - PWMTCR = 0x03; - PWMTCR = 0x09; - - /* PWMTC = 0; - PWMPR = 7; - PWMMR0 = 0x1E6; // pwm rate - PWMMR2 = 0x00; // pwm value - PWMLER = 0x05; - PWMPCR = (1<<10); -*/ - - //VICVectAddr0 = (unsigned long)&(soundIRQ); - //VICVectCntl0 = VIC_SLOT_EN | INT_SRC_PWM; - VICIntSelect |= INT_PWM; - VICIntEnable = INT_PWM; - -} - -void PWM_set_frequency(unsigned long f) -{ - if(f<5000) { - PWMPR = 7; - PWMMR0 = 1875000 / f; - } else { - PWMPR = 0; - PWMMR0 = 15000000 / f; - } - PWMLER |= 0x01; //Latch Enable - - - if(f < 32000) { - PWMMCR = 0x03; - } else { - PWMMCR = 0x02; - } - -} - -void PWM_set_IR_duty_cycle(unsigned char d) { - PWMMR5 = (PWMMR0 * d) / 100; - PWMLER |= 0x20; -} - diff --git a/boop/infrared/pwm.h b/boop/infrared/pwm.h deleted file mode 100644 index 8d47ff6..0000000 --- a/boop/infrared/pwm.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - pwm.h - pwm control - Copyright (C) 2017 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#pragma once - - -void PWM_init(void); -void PWM_set_frequency(unsigned long f); -void PWM_set_IR_duty_cycle(unsigned char d); - - diff --git a/boop/interrupt/Make.conf b/boop/interrupt/Make.conf deleted file mode 100644 index e7853f8..0000000 --- a/boop/interrupt/Make.conf +++ /dev/null @@ -1 +0,0 @@ -SRCS := irq.c diff --git a/boop/infrared/ir_itt.c b/boop/ir_itt.c similarity index 53% rename from boop/infrared/ir_itt.c rename to boop/ir_itt.c index 1156947..04ebf64 100644 --- a/boop/infrared/ir_itt.c +++ b/boop/ir_itt.c @@ -16,11 +16,9 @@ along with this program. If not, see . */ -#include "lpc2220.h" #include "infrared.h" #include "ir_itt.h" -#include "encoders.h" -#include "codes.h" +#include "itt_codes.h" const struct irModule ITT_Module = { @@ -28,7 +26,7 @@ const struct irModule ITT_Module = ITT_Send, ITT_Repeat, ITT_Stop, - 103, // carrier + 43, // carrier 2, // carrier-on 3 // carrier-off }; @@ -39,14 +37,20 @@ const struct irModule ITT2_Module = ITT_Send, ITT_Repeat, ITT_Stop, - 111, // carrier + 46, // carrier 1, // carrier-on 3 // carrier-off }; -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; -extern volatile unsigned long keyMap[42]; +static unsigned short itt_cmd; +static unsigned short itt_actcmd; +static unsigned char itt_state; +static unsigned char itt_bit; +static unsigned char itt_numbits; +static unsigned char itt_wait; +static unsigned char itt_leadtime; +static unsigned char itt_bittime0; +static unsigned char itt_bittime1; #define ITT_IDLE 0x00 #define ITT_LEADIN_A 0x01 @@ -69,9 +73,9 @@ extern volatile unsigned long keyMap[42]; #define ITT2_BITTIME_0 4 #define ITT2_BITTIME_1 9 -void __attribute__ ((section(".text.fastcode"))) ITT_Encode (void) +void ITT_Encode (void) { - switch(ir.state) + switch(itt_state) { case ITT_IDLE: mod_enable = 0; @@ -84,109 +88,76 @@ void __attribute__ ((section(".text.fastcode"))) ITT_Encode (void) case ITT_STOP: cycles = 1; mod_enable = 1; - ir.state++; + itt_state++; break; case ITT_LEADIN_B: case ITT_LEADOUT_B: mod_enable = 0; - cycles = ir.general.leadtime; - ir.state++; + cycles = itt_leadtime; + itt_state++; break; case ITT_START_B: mod_enable = 0; - cycles = ir.general.bittime0; - ir.state++; + cycles = itt_bittime0; + itt_state++; break; case ITT_BIT_B: mod_enable = 0; - if(ir.cmd & 0x01) - cycles = ir.general.bittime1; + if(itt_cmd & 0x01) + cycles = itt_bittime1; else - cycles = ir.general.bittime0; - ir.cmd >>= 1; - ir.general.bit++; - if(ir.general.bit == ir.general.numbits) - ir.state++; + cycles = itt_bittime0; + itt_cmd >>= 1; + itt_bit++; + if(itt_bit == itt_numbits) + itt_state++; else - ir.state--; + itt_state--; break; case ITT_WAIT: mod_enable = 0; cycles = 40; - ir.general.wait++; - if(ir.general.wait >= ITT_WAITTIME) + itt_wait++; + if(itt_wait >= ITT_WAITTIME) { - ir.general.bit = 0; - ir.general.wait = 0; - ir.state = ITT_IDLE; + itt_bit = 0; + itt_wait = 0; + itt_state = ITT_IDLE; } break; } - T1MR0 = cycles * ITT2_Module.lo_border * ITT2_Module.tval; -} - -void ITT_LoadMap(unsigned char map) -{ - switch(map) - { - case 2: - ir.general.leadtime = ITT2_LEADTIME; - ir.general.bittime0 = ITT2_BITTIME_0; - ir.general.bittime1 = ITT2_BITTIME_1; - setIR(ITT2_Module); - break; - default: - ir.general.leadtime = ITT_LEADTIME; - ir.general.bittime0 = ITT_BITTIME_0; - ir.general.bittime1 = ITT_BITTIME_1; - setIR(ITT_Module); - break; - } } void ITT_Init(unsigned char map) { - if(map < ITT.num_tables) - { - ir.state = ITT_IDLE; - ir.cmd = 0x0000; - ir.actcmd = 0x0000; - ir.general.bit = 0x00; - ir.general.numbits = 0x0A; - ir.general.wait = 0; - copyMapS((unsigned short*)ITT.table[map].codes); - ITT_LoadMap(map); - cycles = 1; - } + itt_state = ITT_IDLE; + itt_cmd = 0x0000; + itt_actcmd = 0x0000; + itt_bit = 0x00; + itt_numbits = 0x0A; + itt_wait = 0; + ITT_LoadMap(map); + cycles = 1; } -void ITT_Send(unsigned long cmd) +void ITT_Send(void) { - ir.actcmd = cmd; - setIRspeed(ITT_Module); - if(ir.actcmd != 0x0000) - { - if(ir.state == ITT_IDLE) - { - ir.cmd = ir.actcmd; - ir.state++; - runIR(); - } - } + itt_actcmd = getCode(); + ITT_Repeat(); } void ITT_Repeat(void) { - if(ir.actcmd != 0x0000) + if(itt_actcmd != 0x0000) { - if(ir.state == ITT_IDLE) + if(itt_state == ITT_IDLE) { - ir.cmd = ir.actcmd ^ 0x00f; - ir.state++; + itt_cmd = itt_actcmd; + itt_state++; runIR(); } } @@ -194,21 +165,64 @@ void ITT_Repeat(void) void ITT_Stop(void) { -/* waitend1: - if(ir.state != ITT_IDLE) + if(itt_state != ITT_IDLE) goto waitend1; - ir.state++; -*/ - if(ir.actcmd != 0x00000000) + itt_state++; + + if(itt_actcmd != 0x00000000) { waitend2: - if(ir.state != ITT_IDLE) + if(itt_state != ITT_IDLE) goto waitend2; } - ir.actcmd = 0x0000; + itt_actcmd = 0x0000; stopIR(); } +void ITT_CopyMap(unsigned short *map) +{ + int x; + for(x=0;x<42;x++) + { + keyMap[x] = map[x]; + } +} + +void ITT_LoadMap(unsigned char map) +{ + switch(map) + { + case 0: + itt_leadtime = ITT_LEADTIME; + itt_bittime0 = ITT_BITTIME_0; + itt_bittime1 = ITT_BITTIME_1; + setIR(ITT_Module); + ITT_CopyMap((unsigned short*)ITT_seleco_019); + break; + case 1: + itt_leadtime = ITT_LEADTIME; + itt_bittime0 = ITT_BITTIME_0; + itt_bittime1 = ITT_BITTIME_1; + setIR(ITT_Module); + ITT_CopyMap((unsigned short*)ITT_seleco_049); + break; + case 2: + itt_leadtime = ITT2_LEADTIME; + itt_bittime0 = ITT2_BITTIME_0; + itt_bittime1 = ITT2_BITTIME_1; + setIR(ITT2_Module); + ITT_CopyMap((unsigned short*)ITT_seleco_108); + break; + default: + itt_leadtime = ITT_LEADTIME; + itt_bittime0 = ITT_BITTIME_0; + itt_bittime1 = ITT_BITTIME_1; + setIR(ITT_Module); + ITT_CopyMap((unsigned short*)ITT_seleco_131); + break; + } +} + diff --git a/boop/infrared/ir_itt.h b/boop/ir_itt.h similarity index 89% rename from boop/infrared/ir_itt.h rename to boop/ir_itt.h index b9faf4f..cf8fa75 100644 --- a/boop/infrared/ir_itt.h +++ b/boop/ir_itt.h @@ -19,11 +19,12 @@ #ifndef IR_ITT_H #define IR_ITT_H -void ITT_Encode (void) __attribute__ ((section(".text.fastcode"))); +void ITT_Encode (void) ; void ITT_Init(unsigned char map); -void ITT_Send(unsigned long cmd); +void ITT_Send(void); void ITT_Repeat(void); void ITT_Stop(void); +void ITT_LoadMap(unsigned char map); #endif diff --git a/boop/infrared/ir_nrc17.c b/boop/ir_nrc17.c similarity index 53% rename from boop/infrared/ir_nrc17.c rename to boop/ir_nrc17.c index 229caf4..b7820d8 100644 --- a/boop/infrared/ir_nrc17.c +++ b/boop/ir_nrc17.c @@ -16,11 +16,9 @@ along with this program. If not, see . */ -#include "lpc2220.h" #include "infrared.h" #include "ir_nrc17.h" -#include "encoders.h" -#include "codes.h" +#include "nrc17_codes.h" #define NRC17_IDLE 0x00 #define NRC17_PRE_A 0x01 @@ -46,18 +44,24 @@ const struct irModule NRC17_Module = NRC17_Send, NRC17_Repeat, NRC17_Stop, - 132, // carrier + 40, // carrier 1, // carrier-on - 3 // carrier-off + 4 // carrier-off }; -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; -extern volatile unsigned long keyMap[42]; -void __attribute__ ((section(".text.fastcode"))) NRC17_Encode(void) +static unsigned short nrc17_cmd; +static unsigned short nrc17_actcmd; +static unsigned short nrc17_startstop; +static unsigned char nrc17_state; +static unsigned char nrc17_bit; +static unsigned char nrc17_numbits; +static unsigned short nrc17_wait; +static unsigned short nrc17_pause; + +void NRC17_Encode(void) { - switch(ir.state) + switch(nrc17_state) { case NRC17_IDLE: mod_enable = 0; @@ -67,26 +71,26 @@ void __attribute__ ((section(".text.fastcode"))) NRC17_Encode(void) case NRC17_START_A: cycles = NRC17_BONTIME; // 0.5 ms mod_enable = 1; - ir.state++; + nrc17_state++; break; case NRC17_PRE_B: case NRC17_START_B: - if(ir.state == NRC17_PRE_B) + if(nrc17_state == NRC17_PRE_B) cycles = NRC17_PTIME; // 2,5 ms else cycles = NRC17_BOFFTIME; // 0.5 ms mod_enable = 0; - ir.state++; + nrc17_state++; break; case NRC17_BIT_A: - if(ir.cmd & 0x0001) + if(nrc17_cmd & 0x0001) mod_enable = 1; else mod_enable = 0; - ir.cmd >>= 1; - ir.state++; + nrc17_cmd >>= 1; + nrc17_state++; break; case NRC17_BIT_B: @@ -94,30 +98,29 @@ void __attribute__ ((section(".text.fastcode"))) NRC17_Encode(void) mod_enable = 0; else mod_enable = 1; - ir.general.bit++; - if(ir.general.bit == ir.general.numbits) - ir.state++; + nrc17_bit++; + if(nrc17_bit == nrc17_numbits) + nrc17_state++; else - ir.state--; + nrc17_state--; break; case NRC17_WAIT: mod_enable = 0; - ir.general.wait++; + nrc17_wait++; cycles = NRC17_BONTIME; // 1 ms - if(ir.general.wait >= ir.general.pause) + if(nrc17_wait >= nrc17_pause) { - ir.general.bit = 0; - ir.general.wait = 0; - ir.general.pause = NRC17_PTIME; - ir.state = NRC17_IDLE; + nrc17_bit = 0; + nrc17_wait = 0; + nrc17_pause = NRC17_PTIME; + nrc17_state = NRC17_IDLE; } break; } - T1MR0 = cycles * NRC17_Module.lo_border * NRC17_Module.tval; } -/* + void NRC17_CopyMap(unsigned char xtra, unsigned short *map) { int x; @@ -125,52 +128,58 @@ void NRC17_CopyMap(unsigned char xtra, unsigned short *map) { keyMap[x] = map[x]; } -}*/ +} void NRC17_LoadMap(unsigned char map) { switch(map) { - case 1: // tp720 - tv, 9 bit data - ir.general.startstop = NRC17_STARTSTOP_TP720; - ir.general.numbits = 9; + case 0: // nokia dbox2, 16 bit data + NRC17_CopyMap(0x00, (unsigned short*)NRC17_dbox2); + nrc17_startstop = NRC17_STARTSTOP_DBOX2; + nrc17_numbits = 16; break; - default: // nokia dbox2, 16 bit data - ir.general.startstop = NRC17_STARTSTOP_DBOX2; - ir.general.numbits = 16; + case 1: // tp720 - tv, 9 bit data + NRC17_CopyMap(0x00, (unsigned short*)NRC17_grundig_tp720); + nrc17_startstop = NRC17_STARTSTOP_TP720; + nrc17_numbits = 9; + break; + case 2 : // tp720 - sat, 9 bit data + NRC17_CopyMap(0x40, (unsigned short*)NRC17_grundig_tp720); + nrc17_startstop = NRC17_STARTSTOP_TP720; + nrc17_numbits = 9; + break; + default : // tp720 - video, 9 bit data + NRC17_CopyMap(0x80, (unsigned short*)NRC17_grundig_tp720); + nrc17_startstop = NRC17_STARTSTOP_TP720; + nrc17_numbits = 9; break; } - } void NRC17_Init(unsigned char map) { - if(map < NRC17.num_tables) - { - ir.state = NRC17_IDLE; - ir.cmd = 0x0000; - ir.actcmd = 0x0000; - ir.general.bit = 0x00; - ir.general.numbits = 16; - ir.general.wait = 0; - ir.general.pause = NRC17_BONTIME; - copyMapS((unsigned short*)NRC17.table[map].codes); - NRC17_LoadMap(map); - setIR(NRC17_Module); - } + nrc17_state = NRC17_IDLE; + nrc17_cmd = 0x0000; + nrc17_actcmd = 0x0000; + nrc17_bit = 0x00; + nrc17_numbits = 16; + nrc17_wait = 0; + nrc17_pause = NRC17_BONTIME; + NRC17_LoadMap(map); + setIR(NRC17_Module); } -void NRC17_Send(unsigned long cmd) +void NRC17_Send(void) { - ir.actcmd = cmd; - if(ir.actcmd != 0x0000) + nrc17_actcmd = getCode(); + if(nrc17_actcmd != 0x0000) { - setIRspeed(NRC17_Module); - if(ir.state == NRC17_IDLE) + if(nrc17_state == NRC17_IDLE) { - ir.general.pause = NRC17_WTIME; - ir.cmd = ir.general.startstop; - ir.state++; + nrc17_pause = NRC17_WTIME; + nrc17_cmd = nrc17_startstop; + nrc17_state++; runIR(); } } @@ -178,35 +187,35 @@ void NRC17_Send(unsigned long cmd) void NRC17_Repeat(void) { - if(ir.actcmd != 0x0000) + if(nrc17_actcmd != 0x0000) { - if(ir.state == NRC17_IDLE) + if(nrc17_state == NRC17_IDLE) { - ir.general.pause = NRC17_GTIME; - ir.cmd = ir.actcmd; - ir.state++; + nrc17_pause = NRC17_GTIME; + nrc17_cmd = nrc17_actcmd; + nrc17_state++; } } } void NRC17_Stop(void) { - if(ir.actcmd != 0x0000) + if(nrc17_actcmd != 0x0000) { retry: - if(ir.state == NRC17_IDLE) + if(nrc17_state == NRC17_IDLE) { - ir.cmd = ir.general.startstop; - ir.state++; + nrc17_cmd = nrc17_startstop; + nrc17_state++; } else goto retry; waitend: - if(ir.state != NRC17_IDLE) + if(nrc17_state != NRC17_IDLE) goto waitend; } - ir.actcmd = 0x0000; + nrc17_actcmd = 0x0000; stopIR(); } diff --git a/boop/infrared/ir_nrc17.h b/boop/ir_nrc17.h similarity index 89% rename from boop/infrared/ir_nrc17.h rename to boop/ir_nrc17.h index 73cf199..96ea18f 100644 --- a/boop/infrared/ir_nrc17.h +++ b/boop/ir_nrc17.h @@ -19,10 +19,11 @@ #ifndef IR_NRC17_H #define IR_NRC17_H -void NRC17_Encode (void) __attribute__ ((section(".text.fastcode"))); +void NRC17_Encode (void) ; +void NRC17_LoadMap(unsigned char map); void NRC17_Init(unsigned char map); -void NRC17_Send(unsigned long cmd); +void NRC17_Send(void); void NRC17_Repeat(void); void NRC17_Stop(void); diff --git a/boop/infrared/ir_rc5.c b/boop/ir_rc5.c similarity index 54% rename from boop/infrared/ir_rc5.c rename to boop/ir_rc5.c index 624620f..5ffdd36 100644 --- a/boop/infrared/ir_rc5.c +++ b/boop/ir_rc5.c @@ -16,26 +16,27 @@ along with this program. If not, see . */ -#include "lpc2220.h" #include "infrared.h" #include "ir_rc5.h" -#include "encoders.h" -#include "codes.h" +#include "rc5_codes.h" const struct irModule RC5_Module = -{ +{ RC5_Encode, RC5_Send, RC5_Repeat, RC5_Stop, - 139, // carrier + 42, // carrier 1, // carrier-on - 3 // carrier-off + 4 // carrier-off }; -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; -extern volatile unsigned long keyMap[42]; +static unsigned short rc5_cmd; +static unsigned short rc5_actcmd; +static unsigned char rc5_state; +static unsigned char rc5_bit; +static unsigned char rc5_wait; +static unsigned char rc5_toggle; #define RC5_IDLE 0x00 #define RC5_START_A 0x01 @@ -48,9 +49,9 @@ extern volatile unsigned long keyMap[42]; #define RC5_BITTIME 32 #define RC5_WAITTIME 100 -void __attribute__ ((section(".text.fastcode"))) RC5_Encode (void) +void RC5_Encode (void) { - switch(ir.state) + switch(rc5_state) { case RC5_IDLE: mod_enable = 0; @@ -58,21 +59,21 @@ void __attribute__ ((section(".text.fastcode"))) RC5_Encode (void) case RC5_START_A: mod_enable = 0; - ir.state++; + rc5_state++; break; case RC5_START_B: mod_enable = 1; - ir.state++; + rc5_state++; break; case RC5_BIT_A: - if(ir.cmd & 0x1000) + if(rc5_cmd & 0x1000) mod_enable = 0; else mod_enable = 1; - ir.cmd <<= 1; - ir.state++; + rc5_cmd <<= 1; + rc5_state++; break; case RC5_BIT_B: @@ -80,65 +81,55 @@ void __attribute__ ((section(".text.fastcode"))) RC5_Encode (void) mod_enable = 1; else mod_enable = 0; - ir.general.bit++; - if(ir.general.bit == 13) - ir.state++; + rc5_bit++; + if(rc5_bit == 13) + rc5_state++; else - ir.state--; + rc5_state--; break; case RC5_WAIT: mod_enable = 0; - ir.general.wait++; - if(ir.general.wait >= RC5_WAITTIME) + rc5_wait++; + if(rc5_wait >= RC5_WAITTIME) { - ir.general.bit = 0; - ir.general.wait = 0; - ir.state = RC5_IDLE; + rc5_bit = 0; + rc5_wait = 0; + rc5_state = RC5_IDLE; } break; } - T1MR0 = cycles * RC5_Module.lo_border * RC5_Module.tval; } void RC5_Init(unsigned char map) { - if(map < RC5.num_tables) - { - ir.state = RC5_IDLE; - ir.cmd = 0x0000; - ir.actcmd = 0x0000; - ir.general.bit = 0x00; - ir.general.wait = 0; - copyMapS((unsigned short*)RC5.table[map].codes); - setIR(RC5_Module); - cycles = RC5_BITTIME; - } + rc5_state = RC5_IDLE; + rc5_cmd = 0x0000; + rc5_actcmd = 0x0000; + rc5_bit = 0x00; + rc5_wait = 0; + RC5_LoadMap(map); + setIR(RC5_Module); + cycles = RC5_BITTIME; } -void RC5_Send(unsigned long cmd) +void RC5_Send(void) { - ir.actcmd = cmd; - setIRspeed(RC5_Module); - if((ir.actcmd != 0x0000) && (ir.actcmd != 0x1000)) - { - //toggle bit sollte nicht über dir Konfiguration gesetzt werden - if(ir.toggle & 0x01) - ir.actcmd &= 0xF7FF; - else - ir.actcmd |= 0x0800; - RC5_Repeat(); - } + rc5_actcmd = getCode(); + + if(rc5_toggle & 0x01) + rc5_actcmd &= 0xF7FF; + RC5_Repeat(); } void RC5_Repeat(void) { - if((ir.actcmd != 0x0000) && (ir.actcmd != 0x1000)) + if(rc5_actcmd != 0x0000) { - if(ir.state == RC5_IDLE) + if(rc5_state == RC5_IDLE) { - ir.cmd = ir.actcmd; - ir.state++; + rc5_cmd = rc5_actcmd; + rc5_state++; runIR(); } } @@ -146,16 +137,35 @@ void RC5_Repeat(void) void RC5_Stop(void) { - if((ir.actcmd != 0x0000) && (ir.actcmd != 0x1000)) + if(rc5_actcmd != 0x00000000) { waitend: - if(ir.state != RC5_IDLE) + if(rc5_state != RC5_IDLE) goto waitend; } - ir.toggle++; - ir.actcmd = 0x0000; + rc5_toggle++; + rc5_actcmd = 0x0000; stopIR(); } +void RC5_CopyMap(unsigned short *map) +{ + int x; + for(x=0;x<42;x++) + { + keyMap[x] = map[x]; + } +} + +void RC5_LoadMap(unsigned char map) +{ + switch(map) + { + default: + RC5_CopyMap((unsigned short*)RC5_tv); + break; + } +} + diff --git a/boop/infrared/ir_rc5.h b/boop/ir_rc5.h similarity index 89% rename from boop/infrared/ir_rc5.h rename to boop/ir_rc5.h index 7f199ff..f820b7a 100644 --- a/boop/infrared/ir_rc5.h +++ b/boop/ir_rc5.h @@ -19,11 +19,12 @@ #ifndef IR_RC5_H #define IR_RC5_H -void RC5_Encode (void) __attribute__ ((section(".text.fastcode"))); +void RC5_Encode (void) ; void RC5_Init(unsigned char map); -void RC5_Send(unsigned long cmd); +void RC5_Send(void); void RC5_Repeat(void); void RC5_Stop(void); +void RC5_LoadMap(unsigned char map); #endif diff --git a/boop/infrared/ir_rca.c b/boop/ir_rca.c similarity index 55% rename from boop/infrared/ir_rca.c rename to boop/ir_rca.c index 1ba24d7..808cc55 100644 --- a/boop/infrared/ir_rca.c +++ b/boop/ir_rca.c @@ -16,12 +16,9 @@ along with this program. If not, see . */ -#include "lpc2220.h" #include "infrared.h" #include "ir_rca.h" -#include "encoders.h" -#include "codes.h" -#include "global.h" +#include "rca_codes.h" const struct irModule RCA_Module = { @@ -29,14 +26,16 @@ const struct irModule RCA_Module = RCA_Send, RCA_Repeat, RCA_Stop, - 134, // carrier + 37, // carrier 1, // carrier-on - 2 // carrier-off + 3 // carrier-off }; -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; -extern volatile unsigned long keyMap[42]; +static unsigned int rca_cmd; +static unsigned int rca_actcmd; +static unsigned char rca_state; +static unsigned char rca_bit; +static unsigned char rca_wait; #define RCA_IDLE 0x00 #define RCA_PRE_A 0x01 @@ -53,11 +52,11 @@ extern volatile unsigned long keyMap[42]; #define RCA_BIT0 2*RCA_BITTIME #define RCA_BIT1 4*RCA_BITTIME #define RCA_PRETIME 8*RCA_BITTIME -#define RCA_WAITTIME 16 +#define RCA_WAITTIME 30 -void __attribute__ ((section(".text.fastcode"))) RCA_Encode (void) +void RCA_Encode (void) { - switch(ir.state) + switch(rca_state) { case RCA_IDLE: mod_enable = 0; @@ -66,13 +65,13 @@ void __attribute__ ((section(".text.fastcode"))) RCA_Encode (void) case RCA_PRE_A: cycles = RCA_PRETIME; mod_enable = 1; - ir.state++; + rca_state++; break; case RCA_PRE_B: mod_enable = 0; - ir.cmd = ir.actcmd; - ir.state++; + rca_cmd = rca_actcmd; + rca_state++; break; case RCA_BIT_A: @@ -80,47 +79,96 @@ void __attribute__ ((section(".text.fastcode"))) RCA_Encode (void) case RCA_STOP: cycles = RCA_BITTIME; mod_enable = 1; - ir.state++; + rca_state++; break; case RCA_BIT_B: case RCA_IBIT_B: mod_enable = 0; - if(ir.cmd & 0x0800) + if(rca_cmd & 0x0800) cycles = RCA_BIT1; else cycles = RCA_BIT0; - ir.cmd <<= 1; - ir.general.bit++; - if(ir.general.bit == RCA_NUMBITS) + rca_cmd <<= 1; + rca_bit++; + if(rca_bit == RCA_NUMBITS) { - if(ir.state == RCA_BIT_B) + if(rca_state == RCA_BIT_B) { - ir.cmd = ~ir.actcmd; - ir.general.bit = 0; + rca_cmd = ~rca_actcmd; + rca_bit = 0; } - ir.state++; + rca_state++; } else - ir.state--; + rca_state--; break; case RCA_WAIT: mod_enable = 0; cycles = RCA_BITTIME; - ir.general.wait++; - if(ir.general.wait >= RCA_WAITTIME) + rca_wait++; + if(rca_wait >= RCA_WAITTIME) { - ir.general.bit = 0; - ir.general.wait = 0; - if (ir.general.trail) - ir.state = RCA_PRE_A; - else - ir.state = RCA_IDLE; + rca_bit = 0; + rca_wait = 0; + rca_state = RCA_IDLE; } break; } - T1MR0 = cycles * RCA_Module.lo_border * RCA_Module.tval; +} + +void RCA_Init(unsigned char map) +{ + rca_state = RCA_IDLE; + rca_cmd = 0x0000; + rca_actcmd = 0x0000; + rca_bit = 0x00; + rca_wait = 0; + RCA_LoadMap(map); + setIR(RCA_Module); + cycles = RCA_BITTIME; +} + +void RCA_Send(void) +{ + rca_actcmd = getCode(); + RCA_Repeat(); +} + +void RCA_Repeat(void) +{ + if(rca_actcmd != 0x0000) + { + if(rca_state == RCA_IDLE) + { + rca_state++; + runIR(); + } + } +} + +void RCA_Stop(void) +{ + if(rca_actcmd != 0x00000000) + { +waitend: + if(rca_state != RCA_IDLE) + goto waitend; + } + stopIR(); +} + +void RCA_CopyMapPC(unsigned short pre, unsigned char *map) +{ + int x; + for(x=0;x<42;x++) + { + if(map[x] != 0) + keyMap[x] = pre | map[x]; + else + keyMap[x] = 0x0000; + } } void RCA_LoadMap(unsigned char map) @@ -128,63 +176,9 @@ void RCA_LoadMap(unsigned char map) switch(map) { default: - copyMapPC(0x0500, (unsigned char*)RCA.table[map].codes); + RCA_CopyMapPC(0x0500, (unsigned char*)RCA_xbox); break; } } -void RCA_Init(unsigned char map) -{ - if(map < RCA.num_tables) - { - ir.state = RCA_IDLE; - ir.cmd = 0x0000; - ir.actcmd = 0x0000; - ir.general.bit = 0x00; - ir.general.wait = 0; - RCA_LoadMap(map); - setIR(RCA_Module); - cycles = RCA_BITTIME; - } -} - -void RCA_Send(unsigned long cmd) -{ - ir.actcmd = cmd; - if(ir.actcmd != 0x0000) { - setIRspeed(RCA_Module); - ir.general.trail = 0x01; - sysInfo |= SYS_IR; - if (ir.state != RCA_IDLE) - while(ir.state != RCA_IDLE); - ir.state = RCA_PRE_A; - runIR(); - } -} - -void RCA_Repeat(void) -{ - if(ir.actcmd != 0x0000) - { - - if(ir.state == RCA_IDLE) - { - //ir.state++; - //runIR(); - } - } -} - -void RCA_Stop(void) -{ - if(ir.actcmd != 0x00000000) - { - ir.general.trail = 0; - sysInfo &= ~SYS_IR; -waitend: - if(ir.state != RCA_IDLE) - goto waitend; - } - stopIR(); -} diff --git a/boop/infrared/ir_rca.h b/boop/ir_rca.h similarity index 89% rename from boop/infrared/ir_rca.h rename to boop/ir_rca.h index 19738c8..495b7b8 100644 --- a/boop/infrared/ir_rca.h +++ b/boop/ir_rca.h @@ -19,11 +19,12 @@ #ifndef IR_RCA_H #define IR_RCA_H -void RCA_Encode (void) __attribute__ ((section(".text.fastcode"))); +void RCA_Encode (void) ; void RCA_Init(unsigned char map); -void RCA_Send(unsigned long cmd); +void RCA_Send(void); void RCA_Repeat(void); void RCA_Stop(void); +void RCA_LoadMap(unsigned char map); #endif diff --git a/boop/infrared/ir_rcmm.c b/boop/ir_rcmm.c similarity index 53% rename from boop/infrared/ir_rcmm.c rename to boop/ir_rcmm.c index e477185..7f5a505 100644 --- a/boop/infrared/ir_rcmm.c +++ b/boop/ir_rcmm.c @@ -16,11 +16,9 @@ along with this program. If not, see . */ -#include "lpc2220.h" #include "infrared.h" #include "ir_rcmm.h" -#include "encoders.h" -#include "codes.h" +#include "rcmm_codes.h" const struct irModule RCMM_Module = { @@ -28,14 +26,19 @@ const struct irModule RCMM_Module = RCMM_Send, RCMM_Repeat, RCMM_Stop, - 139, // carrier + 42, // carrier 1, // carrier-on - 3 // carrier-off + 4 // carrier-off }; -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; -extern volatile unsigned long keyMap[42]; +static unsigned int rcmm_cmd; +static unsigned int rcmm_actcmd; +static unsigned char rcmm_state; +static unsigned char rcmm_bit; +static unsigned short rcmm_wait; +static unsigned short rcmm_pause; +static unsigned char rcmm_len; +static unsigned char rcmm_trail; #define RCMM_IDLE 0x00 #define RCMM_HEADER_A 0x01 @@ -54,11 +57,11 @@ extern volatile unsigned long keyMap[42]; #define RCMM_BIT_11 28 #define RCMM_PTIME 110; -const unsigned char ir_times[4] = { RCMM_BIT_00, RCMM_BIT_01, RCMM_BIT_10, RCMM_BIT_11 }; +const unsigned char rcmm_times[4] = { RCMM_BIT_00, RCMM_BIT_01, RCMM_BIT_10, RCMM_BIT_11 }; -void __attribute__ ((section(".text.fastcode"))) RCMM_Encode (void) +void RCMM_Encode (void) { - switch(ir.state) + switch(rcmm_state) { case RCMM_IDLE: mod_enable = 0; @@ -67,116 +70,84 @@ void __attribute__ ((section(".text.fastcode"))) RCMM_Encode (void) case RCMM_HEADER_A: case RCMM_BIT_A: mod_enable = 1; - if(ir.state == RCMM_HEADER_A) + if(rcmm_state == RCMM_HEADER_A) cycles = RCMM_HEADER_ON; else cycles = RCMM_BIT_ON; - ir.state++; + rcmm_state++; break; case RCMM_HEADER_B: mod_enable = 0; cycles = RCMM_HEADER_OFF; - ir.state++; + rcmm_state++; break; case RCMM_BIT_B: mod_enable = 0; - cycles = ir_times[(ir.cmd & 0xC0000000) >> 30]; - ir.cmd <<= 2; - ir.general.bit += 2; - if(ir.general.bit == ir.general.len) - ir.state++; + cycles = rcmm_times[(rcmm_cmd & 0xC0000000) >> 30]; + rcmm_cmd <<= 2; + rcmm_bit += 2; + if(rcmm_bit == rcmm_len) + rcmm_state++; else - ir.state--; + rcmm_state--; break; case RCMM_TRAIL: - if(ir.general.trail) + if(rcmm_trail) { mod_enable = 1; cycles = RCMM_BIT_ON; } else cycles = 1; - ir.state++; + rcmm_state++; break; case RCMM_WAIT: mod_enable = 0; - ir.general.wait++; + rcmm_wait++; cycles = RCMM_BIT_ON; // 1 ms - if(ir.general.wait >= ir.general.pause) + if(rcmm_wait >= rcmm_pause) { - ir.general.bit = 0; - ir.general.wait = 0; - ir.general.pause = RCMM_PTIME; - ir.state = RCMM_IDLE; + rcmm_bit = 0; + rcmm_wait = 0; + rcmm_pause = RCMM_PTIME; + rcmm_state = RCMM_IDLE; } break; } - T1MR0 = cycles * RCMM_Module.lo_border * RCMM_Module.tval; -} - -void RCMM_LoadMap(unsigned char map) -{ - copyMapI((unsigned int*)RCMM.table[map].codes); - - switch(map) - { - case 1: - ir.general.len = 32; - ir.general.trail = 1; - ir.general.togglebit = 16; - break; - default: - ir.general.len = 32; - ir.general.trail = 1; - ir.general.togglebit = 0; - break; - } } void RCMM_Init(unsigned char map) { - if(map < RCMM.num_tables) - { - ir.cmd = 0x00000000; - ir.actcmd = 0x00000000; - ir.state = RCMM_IDLE; - ir.general.bit = 0; - ir.general.wait = 0; - ir.general.pause = RCMM_PTIME; - RCMM_LoadMap(map); - setIR(RCMM_Module); - } + rcmm_cmd = 0x00000000; + rcmm_actcmd = 0x00000000; + rcmm_state = RCMM_IDLE; + rcmm_bit = 0; + rcmm_wait = 0; + rcmm_pause = RCMM_PTIME; + RCMM_LoadMap(map); + setIR(RCMM_Module); } -void RCMM_Send(unsigned long cmd) +void RCMM_Send(void) { - ir.actcmd = cmd; - if(ir.actcmd != 0x00000000) { - if(ir.general.togglebit) { - if(ir.toggle & 0x01) - ir.actcmd &= ~(1<<(ir.general.togglebit-1)); - else - ir.actcmd |= 1<<(ir.general.togglebit-1); - } - setIRspeed(RCMM_Module); - RCMM_Repeat(); - } + rcmm_actcmd = getCode(); + RCMM_Repeat(); } void RCMM_Repeat(void) { - if(ir.actcmd != 0x00000000) + if(rcmm_actcmd != 0x00000000) { - if(ir.state == RCMM_IDLE) + if(rcmm_state == RCMM_IDLE) { - ir.cmd = ir.actcmd; - ir.state++; + rcmm_cmd = rcmm_actcmd; + rcmm_state++; runIR(); } } @@ -184,15 +155,36 @@ void RCMM_Repeat(void) void RCMM_Stop(void) { - if(ir.actcmd != 0x00000000) + if(rcmm_actcmd != 0x00000000) { waitend: - if(ir.state != RCMM_IDLE) + if(rcmm_state != RCMM_IDLE) goto waitend; } - ir.actcmd = 0x0000; - ir.toggle++; + rcmm_actcmd = 0x0000; stopIR(); } +void RCMM_CopyMapPrefix(unsigned int prefix, unsigned char *map) +{ + int x; + for(x=0;x<42;x++) + { + keyMap[x] = prefix + map[x]; + } + keyMap[0] = 0x00000000; +} + +void RCMM_LoadMap(unsigned char map) +{ + switch(map) + { + default: + RCMM_CopyMapPrefix(0x0D500800, (unsigned char*)RCMM_galaxis); + rcmm_len = 32; + rcmm_trail = 1; + break; + } +} + diff --git a/boop/infrared/ir_rcmm.h b/boop/ir_rcmm.h similarity index 89% rename from boop/infrared/ir_rcmm.h rename to boop/ir_rcmm.h index b71dec4..35fce71 100644 --- a/boop/infrared/ir_rcmm.h +++ b/boop/ir_rcmm.h @@ -19,11 +19,12 @@ #ifndef IR_RCMM_H #define IR_RCMM_H -void RCMM_Encode (void) __attribute__ ((section(".text.fastcode"))); +void RCMM_Encode (void) ; void RCMM_Init(unsigned char map); -void RCMM_Send(unsigned long cmd); +void RCMM_Send(void); void RCMM_Repeat(void); void RCMM_Stop(void); +void RCMM_LoadMap(unsigned char map); #endif diff --git a/boop/infrared/ir_rec80.c b/boop/ir_rec80.c similarity index 58% rename from boop/infrared/ir_rec80.c rename to boop/ir_rec80.c index 02fb5f7..daf2bb2 100644 --- a/boop/infrared/ir_rec80.c +++ b/boop/ir_rec80.c @@ -16,11 +16,9 @@ along with this program. If not, see . */ -#include "lpc2220.h" #include "infrared.h" #include "ir_rec80.h" -#include "encoders.h" -#include "codes.h" +#include "rec80_codes.h" const struct irModule REC80_Module = { @@ -28,15 +26,19 @@ const struct irModule REC80_Module = REC80_Send, REC80_Repeat, REC80_Stop, - 151, // carrier + 47, // carrier 1, // carrier-on - 3 // carrier-off + 4, // carrier-off }; - -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; -extern volatile unsigned long keyMap[42]; +static unsigned int rec80_cmd; +static unsigned int rec80_actcmd; +static unsigned int rec80_preamble; +static unsigned char rec80_state; +static unsigned char rec80_bit; +static unsigned char rec80_numbits; +static unsigned short rec80_wait; +static unsigned short rec80_pause; #define REC80_IDLE 0x00 #define REC80_HEAD_A 0x01 @@ -55,9 +57,9 @@ extern volatile unsigned long keyMap[42]; #define REC80_BITTIME_1 38 #define REC80_WAITTIME 187 -void __attribute__ ((section(".text.fastcode"))) REC80_Encode (void) +void REC80_Encode (void) { - switch(ir.state) + switch(rec80_state) { case REC80_IDLE: mod_enable = 0; @@ -66,9 +68,9 @@ void __attribute__ ((section(".text.fastcode"))) REC80_Encode (void) case REC80_HEAD_B: mod_enable = 0; cycles = REC80_HEADER_0; - ir.cmd = ir.general.preamble; - ir.general.bit = 0; - ir.state++; + rec80_cmd = rec80_preamble; + rec80_bit = 0; + rec80_state++; break; case REC80_HEAD_A: @@ -76,99 +78,83 @@ void __attribute__ ((section(".text.fastcode"))) REC80_Encode (void) case REC80_BIT_A: case REC80_TRAIL: mod_enable = 1; - if(ir.state == REC80_HEAD_A) + if(rec80_state == REC80_HEAD_A) cycles = REC80_HEADER_1; else cycles = REC80_BONTIME; - ir.state++; + rec80_state++; break; case REC80_PRE_B: case REC80_BIT_B: mod_enable = 0; - if(ir.cmd & 0x01) + if(rec80_cmd & 0x01) cycles = REC80_BITTIME_1; else cycles = REC80_BITTIME_0; - ir.cmd >>= 1; - ir.general.bit++; - if(ir.general.bit == ir.general.numbits) + rec80_cmd >>= 1; + rec80_bit++; + if(rec80_bit == rec80_numbits) { - if(ir.state == REC80_PRE_B) + if(rec80_state == REC80_PRE_B) { - ir.general.bit = 0; - ir.cmd = ir.actcmd; + rec80_bit = 0; + rec80_cmd = rec80_actcmd; } - ir.state++; + rec80_state++; } else - ir.state--; + rec80_state--; break; case REC80_WAIT: mod_enable = 0; - ir.general.wait++; + rec80_wait++; cycles = REC80_BONTIME; // 1 ms - if(ir.general.wait >= ir.general.pause) + if(rec80_wait >= rec80_pause) { - ir.general.bit = 0; - ir.general.wait = 0; - ir.state = REC80_IDLE; + rec80_bit = 0; + rec80_wait = 0; + rec80_state = REC80_IDLE; } break; } - T1MR0 = cycles * REC80_Module.lo_border * REC80_Module.tval; -} - -void REC80_LoadMap(unsigned char map) -{ - switch(map) - { - default: - ir.general.preamble = 0x00A02002; - copyMapI((unsigned int*)REC80.table[map].codes); - break; - } } void REC80_Init(unsigned char map) { - if(map < REC80.num_tables) - { - ir.cmd = 0x00000000; - ir.actcmd = 0x00000000; - ir.general.bit = 0; - ir.general.numbits = 24; - ir.general.wait = 0; - ir.general.pause = REC80_WAITTIME; - ir.state = REC80_IDLE; - REC80_LoadMap(map); - setIR(REC80_Module); - } + rec80_cmd = 0x00000000; + rec80_actcmd = 0x00000000; + rec80_bit = 0; + rec80_numbits = 24; + rec80_wait = 0; + rec80_pause = REC80_WAITTIME; + rec80_state = REC80_IDLE; + REC80_LoadMap(map); + setIR(REC80_Module); } -void REC80_Send(unsigned long cmd) +void REC80_Send(void) { - ir.actcmd = cmd; + rec80_actcmd = getCode(); - if(ir.actcmd & 0x80000000) - ir.general.numbits = 24; + if(rec80_actcmd & 0x80000000) + rec80_numbits = 24; else - ir.general.numbits = 0; + rec80_numbits = 0; - ir.actcmd &= 0x0FFFFFFF; + rec80_actcmd &= 0x0FFFFFFF; - setIRspeed(REC80_Module); REC80_Repeat(); } void REC80_Repeat(void) { - if(ir.actcmd != 0x00000000) + if(rec80_actcmd != 0x00000000) { - if(ir.state == REC80_IDLE) + if(rec80_state == REC80_IDLE) { - ir.state++; + rec80_state++; runIR(); } } @@ -176,12 +162,34 @@ void REC80_Repeat(void) void REC80_Stop(void) { - if(ir.actcmd != 0x00000000) + if(rec80_actcmd != 0x00000000) { waitend: - if(ir.state != REC80_IDLE) + if(rec80_state != REC80_IDLE) goto waitend; } - ir.actcmd = 0x00000000; + rec80_actcmd = 0x00000000; stopIR(); } + +void REC80_CopyMap(unsigned int *map) +{ + int x; + for(x=0;x<42;x++) + { + keyMap[x] = map[x]; + } +} + +void REC80_LoadMap(unsigned char map) +{ + switch(map) + { + default: + rec80_preamble = 0x00A02002; + REC80_CopyMap((unsigned int*)REC80_rak_sc957wk); + break; + } +} + + diff --git a/boop/infrared/ir_rec80.h b/boop/ir_rec80.h similarity index 89% rename from boop/infrared/ir_rec80.h rename to boop/ir_rec80.h index 641408e..ae1d73c 100644 --- a/boop/infrared/ir_rec80.h +++ b/boop/ir_rec80.h @@ -19,11 +19,12 @@ #ifndef IR_REC80_H #define IR_REC80_H -void REC80_Encode (void) __attribute__ ((section(".text.fastcode"))); +void REC80_Encode (void) ; void REC80_Init(unsigned char map); -void REC80_Send(unsigned long cmd); +void REC80_Send(void); void REC80_Repeat(void); void REC80_Stop(void); +void REC80_LoadMap(unsigned char map); #endif diff --git a/boop/infrared/ir_recs80.c b/boop/ir_recs80.c similarity index 55% rename from boop/infrared/ir_recs80.c rename to boop/ir_recs80.c index cabd96b..6bf980b 100644 --- a/boop/infrared/ir_recs80.c +++ b/boop/ir_recs80.c @@ -16,11 +16,9 @@ along with this program. If not, see . */ -#include "lpc2220.h" #include "infrared.h" #include "ir_recs80.h" -#include "encoders.h" -#include "codes.h" +#include "recs80_codes.h" const struct irModule RECS80_Module = { @@ -28,14 +26,17 @@ const struct irModule RECS80_Module = RECS80_Send, RECS80_Repeat, RECS80_Stop, - 128, // carrier + 40, // carrier 1, // carrier-on - 3 // carrier-off + 4 // carrier-off }; -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; -extern volatile unsigned long keyMap[42]; +static unsigned int recs80_cmd; +static unsigned int recs80_actcmd; +static unsigned char recs80_state; +static unsigned char recs80_bit; +static unsigned char recs80_wait; +static unsigned char recs80_toggle; #define RECS80_IDLE 0x00 #define RECS80_BIT_A 0x01 @@ -49,9 +50,9 @@ extern volatile unsigned long keyMap[42]; #define RECS80_BIT1 41*RECS80_BITTIME #define RECS80_WAITTIME 10 -void __attribute__ ((section(".text.fastcode"))) RECS80_Encode (void) +void RECS80_Encode (void) { - switch(ir.state) + switch(recs80_state) { case RECS80_IDLE: mod_enable = 0; @@ -61,72 +62,67 @@ void __attribute__ ((section(".text.fastcode"))) RECS80_Encode (void) case RECS80_STOP: cycles = RECS80_BITTIME; mod_enable = 1; - ir.state++; + recs80_state++; break; case RECS80_BIT_B: mod_enable = 0; - if(ir.cmd & 0x0400) + if(recs80_cmd & 0x0400) cycles = RECS80_BIT1; else cycles = RECS80_BIT0; - ir.cmd <<= 1; - ir.general.bit++; - if(ir.general.bit == RECS80_NUMBITS) - ir.state++; + recs80_cmd <<= 1; + recs80_bit++; + if(recs80_bit == RECS80_NUMBITS) + recs80_state++; else - ir.state--; + recs80_state--; break; case RECS80_WAIT: mod_enable = 0; cycles = RECS80_BIT0; - ir.general.wait++; - if(ir.general.wait >= RECS80_WAITTIME) + recs80_wait++; + if(recs80_wait >= RECS80_WAITTIME) { - ir.general.bit = 0; - ir.general.wait = 0; - ir.state = RECS80_IDLE; + recs80_bit = 0; + recs80_wait = 0; + recs80_state = RECS80_IDLE; } break; } - T1MR0 = cycles * RECS80_Module.lo_border * RECS80_Module.tval; } void RECS80_Init(unsigned char map) { - if(map < RECS80.num_tables) - { - ir.state = RECS80_IDLE; - ir.cmd = 0x0000; - ir.actcmd = 0x0000; - ir.general.bit = 0x00; - ir.general.wait = 0; - ir.toggle = 1; - copyMapS((unsigned short*)RECS80.table[map].codes); - setIR(RECS80_Module); - cycles = RECS80_BITTIME; - } + recs80_state = RECS80_IDLE; + recs80_cmd = 0x0000; + recs80_actcmd = 0x0000; + recs80_bit = 0x00; + recs80_wait = 0; + recs80_toggle = 1; + RECS80_LoadMap(map); + setIR(RECS80_Module); + cycles = RECS80_BITTIME; } -void RECS80_Send(unsigned long cmd) +void RECS80_Send(void) { - ir.actcmd = cmd; + recs80_actcmd = getCode(); - if(ir.toggle & 0x01) - ir.actcmd |= 0x0200; - setIRspeed(RECS80_Module); + if(recs80_toggle & 0x01) + recs80_actcmd |= 0x0200; RECS80_Repeat(); } void RECS80_Repeat(void) { - if(ir.actcmd != 0x0000) + if(recs80_actcmd != 0x0000) { - if(ir.state == RECS80_IDLE) + if(recs80_state == RECS80_IDLE) { - ir.cmd = ir.actcmd; - ir.state++; + recs80_cmd = recs80_actcmd; + recs80_state++; runIR(); } } @@ -134,12 +130,36 @@ void RECS80_Repeat(void) void RECS80_Stop(void) { - if(ir.actcmd != 0x00000000) + if(recs80_actcmd != 0x00000000) { waitend: - if(ir.state != RECS80_IDLE) + if(recs80_state != RECS80_IDLE) goto waitend; } - ir.toggle++; + recs80_toggle++; stopIR(); } + +void RECS80_CopyMap(unsigned short *map) +{ + int x; + for(x=0;x<42;x++) + { + keyMap[x] = map[x]; + } +} + +void RECS80_LoadMap(unsigned char map) +{ + switch(map) + { + case 0: + RECS80_CopyMap((unsigned short*)RECS80_seleco_020); + break; + default: + RECS80_CopyMap((unsigned short*)RECS80_seleco_157); + break; + } +} + + diff --git a/boop/infrared/ir_recs80.h b/boop/ir_recs80.h similarity index 89% rename from boop/infrared/ir_recs80.h rename to boop/ir_recs80.h index fbcbe99..d094f15 100644 --- a/boop/infrared/ir_recs80.h +++ b/boop/ir_recs80.h @@ -19,11 +19,12 @@ #ifndef IR_RECS80_H #define IR_RECS80_H -void RECS80_Encode (void) __attribute__ ((section(".text.fastcode"))); +void RECS80_Encode (void) ; void RECS80_Init(unsigned char map); -void RECS80_Send(unsigned long cmd); +void RECS80_Send(void); void RECS80_Repeat(void); void RECS80_Stop(void); +void RECS80_LoadMap(unsigned char map); #endif diff --git a/boop/infrared/ir_sirc.c b/boop/ir_sirc.c similarity index 53% rename from boop/infrared/ir_sirc.c rename to boop/ir_sirc.c index dd9e4b4..29e6b01 100644 --- a/boop/infrared/ir_sirc.c +++ b/boop/ir_sirc.c @@ -16,15 +16,17 @@ along with this program. If not, see . */ -#include "lpc2220.h" #include "infrared.h" #include "ir_sirc.h" -#include "encoders.h" -#include "codes.h" +#include "sirc_codes.h" -extern volatile unsigned char mod_enable; -extern volatile unsigned int cycles; -extern volatile unsigned long keyMap[42]; +static unsigned int sirc_cmd; +static unsigned int sirc_actcmd; +static unsigned char sirc_state; +static unsigned char sirc_bit; +static unsigned char sirc_numbits; +static unsigned short sirc_wait; +static unsigned short sirc_pause; #define SIRC_IDLE 0x00 #define SIRC_START_A 0x01 @@ -45,14 +47,14 @@ const struct irModule SIRC_Module = SIRC_Send, SIRC_Repeat, SIRC_Stop, - 122, // carrier + 38, // carrier 1, // carrier-on - 3, // carrier-off + 4, // carrier-off }; -void __attribute__ ((section(".text.fastcode"))) SIRC_Encode (void) +void SIRC_Encode (void) { - switch(ir.state) + switch(sirc_state) { case SIRC_IDLE: mod_enable = 0; @@ -61,90 +63,84 @@ void __attribute__ ((section(".text.fastcode"))) SIRC_Encode (void) case SIRC_START_A: mod_enable = 1; cycles = SIRC_STARTLEN; - ir.state++; + sirc_state++; break; case SIRC_START_B: mod_enable = 0; cycles = SIRC_BITOFF; - ir.state++; + sirc_state++; break; case SIRC_BIT_A: mod_enable = 1; - if(ir.cmd & 0x01) + if(sirc_cmd & 0x01) cycles = SIRC_BITLEN_1; else cycles = SIRC_BITLEN_0; - ir.cmd >>= 1; - ir.state++; + sirc_cmd >>= 1; + sirc_state++; break; case SIRC_BIT_B: mod_enable = 0; cycles = SIRC_BITOFF; - ir.general.bit++; - if(ir.general.bit == ir.general.numbits) - ir.state++; + sirc_bit++; + if(sirc_bit == sirc_numbits) + sirc_state++; else - ir.state--; + sirc_state--; break; case SIRC_WAIT: mod_enable = 0; - ir.general.wait++; + sirc_wait++; cycles = SIRC_BITOFF; // 1 ms - if(ir.general.wait >= ir.general.pause) + if(sirc_wait >= sirc_pause) { - ir.general.bit = 0; - ir.general.wait = 0; - ir.state = SIRC_IDLE; + sirc_bit = 0; + sirc_wait = 0; + sirc_state = SIRC_IDLE; } break; } - - T1MR0 = cycles * SIRC_Module.lo_border * SIRC_Module.tval; } void SIRC_Init(unsigned char map) { - if(map < SIRC.num_tables) - { - ir.cmd = 0x00000000; - ir.actcmd = 0x00000000; - ir.general.bit = 0; - ir.general.numbits = 12; - ir.general.wait = 0; - ir.general.pause = SIRC_GTIME; - ir.state = SIRC_IDLE; - copyMapS((unsigned short*)SIRC.table[map].codes); - setIR(SIRC_Module); - } + sirc_cmd = 0x00000000; + sirc_actcmd = 0x00000000; + sirc_bit = 0; + sirc_numbits = 12; + sirc_wait = 0; + sirc_pause = SIRC_GTIME; + sirc_state = SIRC_IDLE; + SIRC_LoadMap(map); + setIR(SIRC_Module); } -void SIRC_Send(unsigned long cmd) +void SIRC_Send(void) { - ir.actcmd = cmd; + sirc_actcmd = getCode(); - if(ir.actcmd & 0x800000) - ir.general.numbits = 20; - else if(ir.actcmd & 0x8000) - ir.general.numbits = 15; + if(sirc_actcmd & 0x800000) + sirc_numbits = 20; + else if(sirc_actcmd & 0x8000) + sirc_numbits = 15; else - ir.general.numbits = 12; - setIRspeed(SIRC_Module); + sirc_numbits = 12; SIRC_Repeat(); } void SIRC_Repeat(void) { - if(ir.actcmd != 0x00000000) + if(sirc_actcmd != 0x00000000) { - if(ir.state == SIRC_IDLE) + if(sirc_state == SIRC_IDLE) { - ir.cmd = ir.actcmd; - ir.state++; + sirc_cmd = sirc_actcmd; + sirc_state++; runIR(); } } @@ -152,12 +148,44 @@ void SIRC_Repeat(void) void SIRC_Stop(void) { - if(ir.actcmd != 0x00000000) + if(sirc_actcmd != 0x00000000) { waitend: - if(ir.state != SIRC_IDLE) + if(sirc_state != SIRC_IDLE) goto waitend; } - ir.actcmd = 0x0000; + sirc_actcmd = 0x0000; stopIR(); } + +void SIRC_CopyMapS(unsigned int pre, unsigned short *map) +{ + int x; + for(x=0;x<42;x++) + { + keyMap[x] = map[x]; + } +} + +void SIRC_CopyMapI(unsigned int pre, unsigned int *map) +{ + int x; + for(x=0;x<42;x++) + { + keyMap[x] = map[x]; + } +} + +void SIRC_LoadMap(unsigned char map) +{ + switch(map) + { + case 0: + SIRC_CopyMapS(0x8000, (unsigned short*)SIRC_rm_pp411_av2); + break; + default: + SIRC_CopyMapS(0, (unsigned short*)SIRC_tv); + break; + } +} + diff --git a/boop/infrared/ir_sirc.h b/boop/ir_sirc.h similarity index 89% rename from boop/infrared/ir_sirc.h rename to boop/ir_sirc.h index 358096f..35c28b1 100644 --- a/boop/infrared/ir_sirc.h +++ b/boop/ir_sirc.h @@ -19,11 +19,12 @@ #ifndef IR_SIRC_H #define IR_SIRC_H -void SIRC_Encode (void) __attribute__ ((section(".text.fastcode"))); +void SIRC_Encode (void) ; void SIRC_Init(unsigned char map); -void SIRC_Send(unsigned long cmd); +void SIRC_Send(void); void SIRC_Repeat(void); void SIRC_Stop(void); +void SIRC_LoadMap(unsigned char map); #endif diff --git a/boop/ir_spaceenc.c b/boop/ir_spaceenc.c new file mode 100644 index 0000000..bb24046 --- /dev/null +++ b/boop/ir_spaceenc.c @@ -0,0 +1,285 @@ +/* + ir_spaceenc.c - space modulated protocoll encoder + Copyright (C) 2007 Ch. Klippel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "infrared.h" +#include "ir_spaceenc.h" +#include "spaceenc_codes.h" + +const struct irModule SPACEENC_Module = +{ + SPACEENC_Encode, + SPACEENC_Send, + SPACEENC_Repeat, + SPACEENC_Stop, + 37, // carrier + 1, // carrier-on + 4 // carrier-off +}; + +const struct irModule SPACEENC2_Module = +{ + SPACEENC_Encode, + SPACEENC2_Send, + SPACEENC2_Repeat, + SPACEENC2_Stop, + 37, // carrier + 1, // carrier-on + 4 // carrier-off +}; + +static unsigned int spaceenc_cmd; +static unsigned int spaceenc_pre; +static unsigned int spaceenc_actcmd; +static unsigned int spaceenc_bit; +static unsigned char spaceenc_state; +static unsigned char spaceenc_numbits; +static unsigned char spaceenc_prebits; +static unsigned char spaceenc_wait; +static unsigned char spaceenc_waittime; + +static unsigned char spaceenc_bittime; +static unsigned char spaceenc_bit0; +static unsigned char spaceenc_bit1; + +static unsigned int *spaceenc_codes; +static unsigned char *spaceenc_precodes; + +#define SPACEENC_IDLE 0x00 +#define SPACEENC_PRE_A 0x01 +#define SPACEENC_PRE_B 0x02 +#define SPACEENC_BIT_A 0x03 +#define SPACEENC_BIT_B 0x04 +#define SPACEENC_STOP 0x05 +#define SPACEENC_WAIT 0x06 + +#define SPACEENC_NUMBITS 6 +#define SPACEENC_BITTIME 20 +#define SPACEENC_BIT0 65 +#define SPACEENC_BIT1 150 +#define SPACEENC_WAITTIME 59 + +#define SPACEENC2_BITTIME 14 +#define SPACEENC2_BIT0 7 +#define SPACEENC2_BIT1 28 +#define SPACEENC2_WAITTIME 170 + +void SPACEENC_Encode (void) +{ + switch(spaceenc_state) + { + case SPACEENC_IDLE: + mod_enable = 0; + break; + + case SPACEENC_PRE_A: + case SPACEENC_BIT_A: + cycles = spaceenc_bittime; + mod_enable = 1; + spaceenc_state++; + break; + + case SPACEENC_PRE_B: + mod_enable = 0; + if(spaceenc_cmd & 0x01) + cycles = spaceenc_bit1; + else + cycles = spaceenc_bit0; + spaceenc_cmd >>= 1; + spaceenc_bit++; + if(spaceenc_bit == spaceenc_prebits) + { + spaceenc_state = SPACEENC_BIT_A; + spaceenc_bit = 0; + spaceenc_cmd = spaceenc_codes[spaceenc_actcmd]; + } + else + { + spaceenc_state--; + } + break; + + case SPACEENC_BIT_B: + mod_enable = 0; + if(spaceenc_cmd & 0x01) + cycles = spaceenc_bit1; + else + cycles = spaceenc_bit0; + spaceenc_cmd >>= 1; + spaceenc_bit++; + if(spaceenc_bit == spaceenc_numbits) + spaceenc_state++; + else + spaceenc_state--; + break; + + case SPACEENC_STOP: + cycles = spaceenc_bittime; + mod_enable = 1; + spaceenc_state++; + break; + + case SPACEENC_WAIT: + mod_enable = 0; + spaceenc_wait++; + if(spaceenc_wait >= spaceenc_waittime) + { + spaceenc_bit = 0; + spaceenc_wait = 0; + spaceenc_state = SPACEENC_IDLE; + } + break; + } +} + +void SPACEENC_Init(unsigned char map) +{ + spaceenc_state = SPACEENC_IDLE; + spaceenc_cmd = 0x0000; + spaceenc_actcmd = 0x0000; + spaceenc_wait = 0; + spaceenc_bit = 0; + SPACEENC_LoadMap(map); + cycles = SPACEENC_BITTIME; +} + +void SPACEENC_Send(void) +{ + spaceenc_actcmd = getCode(); + SPACEENC_Repeat(); + runIR(); +} + +void SPACEENC_Repeat(void) +{ + if(spaceenc_actcmd != 0x00000000) + { + if(spaceenc_state == SPACEENC_IDLE) + { + spaceenc_cmd = spaceenc_actcmd; + spaceenc_state = SPACEENC_BIT_A; + } + } +} + +void SPACEENC_Stop(void) +{ +waitend1: + while(spaceenc_state != SPACEENC_IDLE) + goto waitend1; + + if(spaceenc_actcmd != 0x00000000) + { + SPACEENC_Repeat(); + +waitend2: + if(spaceenc_state != SPACEENC_IDLE) + goto waitend2; + } + spaceenc_actcmd = 0x00000000; + stopIR(); +} + +void SPACEENC2_Send(void) +{ + spaceenc_actcmd = getCode(); + SPACEENC2_Repeat(); +} + +void SPACEENC2_Repeat(void) +{ + if(spaceenc_actcmd != 0x00000000) + { + if(spaceenc_state == SPACEENC_IDLE) + { + spaceenc_cmd = spaceenc_precodes[spaceenc_actcmd]; + spaceenc_state = SPACEENC_PRE_A; + runIR(); + } + } +} + +void SPACEENC2_Stop(void) +{ + if(spaceenc_actcmd != 0x00000000) + { +waitend2: + if(spaceenc_state != SPACEENC_IDLE) + goto waitend2; + } + spaceenc_actcmd = 0x00000000; + stopIR(); +} + +void SPACEENC_CopyMapC(unsigned char *map) +{ + int x; + for(x=0;x<42;x++) + { + keyMap[x] = map[x]; + } +} + +void SPACEENC_CopyMapS(unsigned short *map) +{ + int x; + for(x=0;x<42;x++) + { + keyMap[x] = map[x]; + } +} + +void SPACEENC_CopyMapI(unsigned int *map) +{ + int x; + for(x=0;x<42;x++) + { + keyMap[x] = map[x]; + } +} + +void SPACEENC_LoadMap(unsigned char map) +{ + switch(map) + { + case 0: + SPACEENC_CopyMapC((unsigned char*)SPACEENC_seleco_027); + spaceenc_numbits = SPACEENC_NUMBITS; + spaceenc_prebits = 0; + spaceenc_pre = 0x00; + spaceenc_bittime = SPACEENC_BITTIME; + spaceenc_bit0 = SPACEENC_BIT0; + spaceenc_bit1 = SPACEENC_BIT1; + spaceenc_waittime = SPACEENC_WAITTIME; + setIR(SPACEENC_Module); + break; + default: + SPACEENC_CopyMapC((unsigned char*)SPACEENC_schneider_dtv3); + spaceenc_numbits = 32; + spaceenc_prebits = 8; + spaceenc_bittime = SPACEENC2_BITTIME; + spaceenc_bit0 = SPACEENC2_BIT0; + spaceenc_bit1 = SPACEENC2_BIT1; + spaceenc_waittime = SPACEENC2_WAITTIME; + spaceenc_codes = (unsigned int*) dtv3_codes; + spaceenc_precodes = (unsigned char*) dtv3_pre; + setIR(SPACEENC2_Module); + break; + } +} + + diff --git a/boop/infrared/ir_spaceenc.h b/boop/ir_spaceenc.h similarity index 86% rename from boop/infrared/ir_spaceenc.h rename to boop/ir_spaceenc.h index 8132701..a1238db 100644 --- a/boop/infrared/ir_spaceenc.h +++ b/boop/ir_spaceenc.h @@ -19,14 +19,15 @@ #ifndef IR_SPACEENC_H #define IR_SPACEENC_H -void SPACEENC_Encode (void) __attribute__ ((section(".text.fastcode"))); +void SPACEENC_Encode (void) ; void SPACEENC_Init(unsigned char map); -void SPACEENC_Send(unsigned long cmd); +void SPACEENC_Send(void); void SPACEENC_Repeat(void); void SPACEENC_Stop(void); -void SPACEENC2_Send(unsigned long cmd); +void SPACEENC2_Send(void); void SPACEENC2_Repeat(void); void SPACEENC2_Stop(void); +void SPACEENC_LoadMap(unsigned char map); #endif diff --git a/boop/interrupt/irq.c b/boop/irq.c similarity index 75% rename from boop/interrupt/irq.c rename to boop/irq.c index 331fa55..9992c8d 100644 --- a/boop/interrupt/irq.c +++ b/boop/irq.c @@ -18,18 +18,15 @@ #include "lpc2220.h" #include "irq.h" -#include "soundirq.h" -#include "infraredirq.h" -#define IRQ_MASK 0x000000C0 - -extern unsigned char bl_val, cmp_val; +#define IRQ_MASK 0x00000080 static inline unsigned asm_get_cpsr(void) { unsigned long retval; asm volatile (" mrs %0, cpsr" : "=r" (retval) : /* no inputs */ ); return retval; + } static inline void asm_set_cpsr(unsigned val) @@ -64,20 +61,12 @@ unsigned restoreIRQ(unsigned oldCPSR) return _cpsr; } +void IRQ_Routine (void) { -// handle sound, IR, backlight in timer ISR -// user manual section 5.1, p. 62: -// Fast Interrupt reQuest (FIQ) requests have the highest priority. -// (where's the vector? in lpc2220_rom.ld ?) -void __attribute__ ((section(".text.fastcode"))) FIQ_Routine (void) -{ - //while ((PWMIR == 0x01)) - { - if (PWMIR == 0x01) - soundIRQ(); // sound, backlight - //if (T1IR == 1) - // irIRQ(); // IR - } +} + +void FIQ_Routine (void) { + while (1) ; } diff --git a/boop/interrupt/irq.h b/boop/irq.h similarity index 92% rename from boop/interrupt/irq.h rename to boop/irq.h index 23b898a..798224b 100644 --- a/boop/interrupt/irq.h +++ b/boop/irq.h @@ -35,7 +35,7 @@ #define INT_EINT0 0x00004000 #define INT_EINT1 0x00008000 #define INT_EINT2 0x00010000 -#define INT_EINT3 0x00020000 +#define INT_EINTT2 0x00020000 #define INT_ADC 0x00040000 #define INT_SRC_WDT 0 @@ -59,7 +59,8 @@ #define VIC_SLOT_EN 0x00000020 -void __attribute__ ((section(".text.fastcode"))) FIQ_Routine (void); +void IRQ_Routine (void) __attribute__ ((interrupt("IRQ"))); +void FIQ_Routine (void) __attribute__ ((interrupt("FIQ"))); void SWI_Routine (void) __attribute__ ((interrupt("SWI"))); void UNDEF_Routine (void) __attribute__ ((interrupt("UNDEF"))); diff --git a/boop/itt_codes.h b/boop/itt_codes.h new file mode 100644 index 0000000..da46d08 --- /dev/null +++ b/boop/itt_codes.h @@ -0,0 +1,10 @@ +#ifndef ITT_CODES_H +#define ITT_CODES_H + +#include "ir-codes/itt/seleco_019" +#include "ir-codes/itt/seleco_049" +#include "ir-codes/itt/seleco_108" +#include "ir-codes/itt/seleco_131" + +#endif + diff --git a/boop/keyboard.c b/boop/keyboard.c new file mode 100644 index 0000000..546a168 --- /dev/null +++ b/boop/keyboard.c @@ -0,0 +1,101 @@ +/* + keyboard.c - button handling + Copyright (C) 2007 Ch. Klippel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "keyboard.h" +#include "lpc2220.h" +#include "irq.h" + +unsigned int keys[2]; +unsigned char autorepeat; +unsigned char batcnt; + +static unsigned int xkeys[2]; +static unsigned int keytest; +static unsigned char half; +static int x; + +void initKeys(void) +{ + keys[0] = 0; + keys[1] = 0; +} + +void startKeyIRQ(void) +{ + autorepeat = 0; + + T0TCR = 0x02; + T0TC = 187490; + T0PR = 0x03; // 7.500.000 Hz / 4 = 1.875.000 Hz + T0MR0 = 187500; // 1.875.000 Hz / 187.500 = 10 Hz + T0MCR = 0x03; + T0TCR = 0x01; + + VICVectAddr15 = (unsigned long)&(keyIRQ); + VICVectCntl15 = VIC_SLOT_EN | INT_SRC_TIMER0; + VICIntEnable = INT_TIMER0; +} + +/* Stubs for various interrupts (may be replaced later) */ +/* ---------------------------------------------------- */ + +void __attribute__ ((interrupt("IRQ"))) keyIRQ(void) +{ + xkeys[0] = 0; + xkeys[1] = 0; + keytest = 0x01; + half = 0; + + batcnt--; + + for(x=(1<<18); x!=(1<<23); x<<=1) + { + IOCLR2=x; + testLine(FIOPIN0&(1<<28)); + testLine(FIOPIN0&(1<<27)); + testLine(FIOPIN0&(1<<22)); + testLine(FIOPIN0&(1<<13)); + testLine(IOPIN3&(1<<21)); + testLine(IOPIN3&(1<<20)); + IOSET2=x; + } + + keytest = 0x01; + half = 1; + + for(; x!=(1<<25); x<<=1) + { + IOCLR2=x; + testLine(FIOPIN0&(1<<28)); + testLine(FIOPIN0&(1<<27)); + testLine(FIOPIN0&(1<<22)); + testLine(FIOPIN0&(1<<13)); + testLine(IOPIN3&(1<<21)); + testLine(IOPIN3&(1<<20)); + IOSET2=x; + } + + keys[0] = xkeys[0]; + keys[1] = xkeys[1]; + if(autorepeat < AUTO_TIMEOUT) + autorepeat++; + T0IR = 1; + VICVectAddr = 0; + + +} diff --git a/boop/keyboard.h b/boop/keyboard.h new file mode 100644 index 0000000..1875ad8 --- /dev/null +++ b/boop/keyboard.h @@ -0,0 +1,83 @@ +/* + keyboard.h - button handling + Copyright (C) 2007 Ch. Klippel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef KEYBOARD_H +#define KEYBOARD_H + +#define KEY_5 (keys[0] & 0x00000001) +#define KEY_6 (keys[0] & 0x00000002) +#define KEY_C (keys[0] & 0x00000004) +#define KEY_B (keys[0] & 0x00000008) +#define KEY_A (keys[0] & 0x00000010) +#define KEY_1 (keys[0] & 0x00000020) +#define KEY_8 (keys[0] & 0x00000040) +#define KEY_9 (keys[0] & 0x00000080) +#define KEY_D (keys[0] & 0x00000100) +#define KEY_Up (keys[0] & 0x00000200) +#define KEY_Betty (keys[0] & 0x00000400) +#define KEY_4 (keys[0] & 0x00000800) +#define KEY_0 (keys[0] & 0x00001000) +#define KEY_AV (keys[0] & 0x00002000) +#define KEY_Right (keys[0] & 0x00004000) +#define KEY_Left (keys[0] & 0x00008000) +#define KEY_Vplus (keys[0] & 0x00010000) +#define KEY_7 (keys[0] & 0x00020000) +#define KEY_AB (keys[0] & 0x00040000) +#define KEY_16_9 (keys[0] & 0x00080000) +#define KEY_Exit (keys[0] & 0x00100000) +#define KEY_OK (keys[0] & 0x00200000) +#define KEY_Vminus (keys[0] & 0x00400000) +#define KEY_Minus (keys[0] & 0x00800000) +#define KEY_VTX2 (keys[0] & 0x01000000) +#define KEY_VTX3 (keys[0] & 0x02000000) +#define KEY_Pplus (keys[0] & 0x04000000) +#define KEY_Down (keys[0] & 0x08000000) +#define KEY_Menu (keys[0] & 0x10000000) +#define KEY_PiP (keys[0] & 0x20000000) + +#define KEY_Yellow (keys[1] & 0x00000001) +#define KEY_Blue (keys[1] & 0x00000002) +#define KEY_Pminus (keys[1] & 0x00000004) +#define KEY_Mute (keys[1] & 0x00000008) +#define KEY_Info (keys[1] & 0x00000010) +#define KEY_VTX1 (keys[1] & 0x00000020) +#define KEY_TV (keys[1] & 0x00000040) +#define KEY_Power (keys[1] & 0x00000080) +#define KEY_3 (keys[1] & 0x00000100) +#define KEY_2 (keys[1] & 0x00000200) +#define KEY_Red (keys[1] & 0x00000400) +#define KEY_Green (keys[1] & 0x00000800) + +#define AUTO_TIMEOUT 5 + +#define testLine(_c) \ +{ \ + if(!(_c)) \ + { \ + xkeys[half] |= keytest; \ + } \ + keytest <<= 1; \ +} + +void __attribute__ ((interrupt("IRQ"))) keyIRQ (void); + +void startKeyIRQ(void); +void initKeys(void); +void scanKeys(void); + +#endif diff --git a/boop/keyboard/Make.conf b/boop/keyboard/Make.conf deleted file mode 100644 index 42df737..0000000 --- a/boop/keyboard/Make.conf +++ /dev/null @@ -1,2 +0,0 @@ -THUMBSRCS := keyboard.c -SRCS := keyirq.c diff --git a/boop/keyboard/keyboard.c b/boop/keyboard/keyboard.c deleted file mode 100644 index d01eceb..0000000 --- a/boop/keyboard/keyboard.c +++ /dev/null @@ -1,150 +0,0 @@ -/* - keyboard.c - button handling - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "keyboard.h" -#include "keyirq.h" -#include "lpc2220.h" -#include "timerfuncs.h" -#include "backlight.h" -#include "irq.h" - - -void initKeys(void) -{ - keys[0] = 0; - keys[1] = 0; - IOCLR2=((1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)|(1<<24)); - FIODIR0 &= ~(1<<30); - startCB(addTimerCB(keyScanner, 15)); - - EXTWAKE |= 0x08; - PINSEL1 |= (1<<29); -} - -void waitKeyUp(void) -{ - while((keys[0] != 0) || (keys[1] != 0)) {}; -} - -extern void cpu_idle(); - -void waitKeyDown(void) -{ - while ((keys[0] == 0) && (keys[1] == 0)) - { - cpu_idle(); - }; - setBacklight(BL_AUTO); // pwm value -} - -char isKeyPressed (void) -{ - return ((keys[0] != 0) || (keys[1] != 0)); -} - -signed char getNumKeyValue(void) { - signed char x; - - switch (keys[0]) { - case 0x00000002: - x= 7; - break; - case 0x00000008: - x= 4; - break; - case 0x00000020: - x= 1; - break; - case 0x00020000: - x= 0; - break; - case 0x00040000: - x= 9; - break; - case 0x00080000: - x= 8; - break; - case 0x00100000: - x= 6; - break; - default: - x=-1; - } - switch (keys[1]) { - case 0x00000040: - x= 2; - break; - case 0x00000080: - x= 3; - break; - case 0x00040000: - x= 5; - break; - } - return(x); -} - -#define keynum( _X, _Y ) if(_X) return _Y - -unsigned char getKeynum(void) -{ - keynum(KEY_A, 0); - keynum(KEY_B, 1); - keynum(KEY_C, 2); - keynum(KEY_D, 3); - keynum(KEY_Betty, 4); - keynum(KEY_Exit, 5); - keynum(KEY_Up, 6); - keynum(KEY_Down, 7); - keynum(KEY_Left, 8); - keynum(KEY_Right, 9); - keynum(KEY_OK, 10); - keynum(KEY_Vplus, 11); - keynum(KEY_Vminus, 12); - keynum(KEY_Mute, 13); - keynum(KEY_Pplus, 14); - keynum(KEY_Pminus, 15); - keynum(KEY_1, 16); - keynum(KEY_2, 17); - keynum(KEY_3, 18); - keynum(KEY_4, 19); - keynum(KEY_5, 20); - keynum(KEY_6, 21); - keynum(KEY_7, 22); - keynum(KEY_8, 23); - keynum(KEY_9, 24); - keynum(KEY_0, 25); - keynum(KEY_Minus, 26); - keynum(KEY_AV, 27); - keynum(KEY_Menu, 28); - keynum(KEY_PiP, 29); - keynum(KEY_AB, 30); - keynum(KEY_16_9, 31); - keynum(KEY_Info, 32); - keynum(KEY_VTX1, 33); - keynum(KEY_VTX2, 34); - keynum(KEY_VTX3, 35); - keynum(KEY_Blue, 36); - keynum(KEY_Yellow, 37); - keynum(KEY_Green, 38); - keynum(KEY_Red, 39); - keynum(KEY_TV, 40); - keynum(KEY_Power, 41); - return 42; -} - diff --git a/boop/keyboard/keyboard.h b/boop/keyboard/keyboard.h deleted file mode 100644 index 64772a9..0000000 --- a/boop/keyboard/keyboard.h +++ /dev/null @@ -1,197 +0,0 @@ -/* - keyboard.h - button handling - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef KEYBOARD_H -#define KEYBOARD_H - - -//Uncomment if you have a swisscom Betty -//#define SWISSCOM - -/* -#define KEY_5 (keys[0] & 0x00000001) -#define KEY_6 (keys[0] & 0x00000002) -#define KEY_C (keys[0] & 0x00000004) -#define KEY_B (keys[0] & 0x00000008) -#define KEY_A (keys[0] & 0x00000010) -#define KEY_1 (keys[0] & 0x00000020) -#define KEY_8 (keys[0] & 0x00000040) -#define KEY_9 (keys[0] & 0x00000080) -#define KEY_D (keys[0] & 0x00000100) -#define KEY_Up (keys[0] & 0x00000200) -#define KEY_Betty (keys[0] & 0x00000400) -#define KEY_4 (keys[0] & 0x00000800) -#define KEY_0 (keys[0] & 0x00001000) -#define KEY_AV (keys[0] & 0x00002000) -#define KEY_Right (keys[0] & 0x00004000) -#define KEY_Left (keys[0] & 0x00008000) -#define KEY_Vplus (keys[0] & 0x00010000) -#define KEY_7 (keys[0] & 0x00020000) -#define KEY_AB (keys[0] & 0x00040000) -#define KEY_16_9 (keys[0] & 0x00080000) -#define KEY_Exit (keys[0] & 0x00100000) -#define KEY_OK (keys[0] & 0x00200000) -#define KEY_Vminus (keys[0] & 0x00400000) -#define KEY_Minus (keys[0] & 0x00800000) -#define KEY_VTX2 (keys[0] & 0x01000000) -#define KEY_VTX3 (keys[0] & 0x02000000) -#define KEY_Pplus (keys[0] & 0x04000000) -#define KEY_Down (keys[0] & 0x08000000) -#define KEY_Menu (keys[0] & 0x10000000) -#define KEY_PiP (keys[0] & 0x20000000) - -#define KEY_Yellow (keys[1] & 0x00000001) -#define KEY_Blue (keys[1] & 0x00000002) -#define KEY_Pminus (keys[1] & 0x00000004) -#define KEY_Mute (keys[1] & 0x00000008) -#define KEY_Info (keys[1] & 0x00000010) -#define KEY_VTX1 (keys[1] & 0x00000020) -#define KEY_TV (keys[1] & 0x00000040) -#define KEY_Power (keys[1] & 0x00000080) -#define KEY_3 (keys[1] & 0x00000100) -#define KEY_2 (keys[1] & 0x00000200) -#define KEY_Red (keys[1] & 0x00000400) -#define KEY_Green (keys[1] & 0x00000800) -*/ - -#ifdef SWISSCOM - #define KEY_B (keys[0] & 0x00000001) - #define KEY_C (keys[0] & 0x00000002) - #define KEY_6 (keys[0] & 0x00000004) - #define KEY_5 (keys[0] & 0x00000008) - #define KEY_Up (keys[0] & 0x00000010) - #define KEY_D (keys[0] & 0x00000020) - #define KEY_9 (keys[0] & 0x00000040) - #define KEY_8 (keys[0] & 0x00000080) - #define KEY_Left (keys[0] & 0x00000100) - #define KEY_Right (keys[0] & 0x00000200) - #define KEY_AV (keys[0] & 0x00000400) - #define KEY_0 (keys[0] & 0x00000800) - #define KEY_OK (keys[0] & 0x00001000) - #define KEY_Exit (keys[0] & 0x00002000) - #define KEY_16_9 (keys[0] & 0x00004000) - #define KEY_AB (keys[0] & 0x00008000) - #define KEY_Down (keys[0] & 0x00010000) - #define KEY_Pplus (keys[0] & 0x00020000) - #define KEY_VTX3 (keys[0] & 0x00040000) - #define KEY_VTX2 (keys[0] & 0x00080000) - #define KEY_Mute (keys[0] & 0x00100000) - #define KEY_Pminus (keys[0] & 0x00200000) - #define KEY_Blue (keys[0] & 0x00400000) - #define KEY_Yellow (keys[0] & 0x00800000) - #define KEY_2 (keys[0] & 0x01000000) - #define KEY_3 (keys[0] & 0x02000000) - #define KEY_Power (keys[0] & 0x04000000) - #define KEY_TV (keys[0] & 0x08000000) - - #define KEY_A (keys[1] & 0x00000001) - #define KEY_1 (keys[1] & 0x00000002) - #define KEY_Betty (keys[1] & 0x00000004) - #define KEY_4 (keys[1] & 0x00000008) - #define KEY_Vplus (keys[1] & 0x00000010) - #define KEY_7 (keys[1] & 0x00000020) - #define KEY_Vminus (keys[1] & 0x00000040) - #define KEY_Minus (keys[1] & 0x00000080) - #define KEY_Menu (keys[1] & 0x00000100) - #define KEY_PiP (keys[1] & 0x00000200) - #define KEY_Info (keys[1] & 0x00000400) - #define KEY_VTX1 (keys[1] & 0x00000800) - #define KEY_Red (keys[1] & 0x00001000) - #define KEY_Green (keys[1] & 0x00002000) - -#else - - #define KEY_OK (keys[0] & 0x00000001) - #define KEY_7 (keys[0] & 0x00000002) - #define KEY_Vplus (keys[0] & 0x00000004) - #define KEY_4 (keys[0] & 0x00000008) - #define KEY_Betty (keys[0] & 0x00000010) - #define KEY_1 (keys[0] & 0x00000020) - #define KEY_A (keys[0] & 0x00000040) - #define KEY_Left (keys[0] & 0x00000080) - #define KEY_Exit (keys[0] & 0x00000100) - #define KEY_Up (keys[0] & 0x00000200) - #define KEY_B (keys[0] & 0x00000400) - #define KEY_16_9 (keys[0] & 0x00000800) - #define KEY_AB (keys[0] & 0x00001000) - #define KEY_D (keys[0] & 0x00002000) - #define KEY_Right (keys[0] & 0x00004000) - #define KEY_C (keys[0] & 0x00008000) - #define KEY_AV (keys[0] & 0x00010000) - #define KEY_0 (keys[0] & 0x00020000) - #define KEY_9 (keys[0] & 0x00040000) - #define KEY_8 (keys[0] & 0x00080000) - #define KEY_6 (keys[0] & 0x00100000) - - #define KEY_Green (keys[1] & 0x00000001) - #define KEY_Red (keys[1] & 0x00000002) - #define KEY_VTX1 (keys[1] & 0x00000004) - #define KEY_Info (keys[1] & 0x00000008) - #define KEY_PiP (keys[1] & 0x00000010) - #define KEY_Menu (keys[1] & 0x00000020) - #define KEY_2 (keys[1] & 0x00000040) - #define KEY_3 (keys[1] & 0x00000080) - #define KEY_Mute (keys[1] & 0x00000100) - #define KEY_Pminus (keys[1] & 0x00000200) - #define KEY_Down (keys[1] & 0x00000400) - #define KEY_Pplus (keys[1] & 0x00000800) - #define KEY_Power (keys[1] & 0x00001000) - #define KEY_TV (keys[1] & 0x00002000) - #define KEY_Blue (keys[1] & 0x00004000) - #define KEY_Yellow (keys[1] & 0x00008000) - #define KEY_VTX3 (keys[1] & 0x00010000) - #define KEY_VTX2 (keys[1] & 0x00020000) - #define KEY_5 (keys[1] & 0x00040000) - #define KEY_Minus (keys[1] & 0x00080000) - #define KEY_Vminus (keys[1] & 0x00100000) - -#endif - -#define AUTO_TIMEOUT 5 - -#define KEY_IDLE 0x00 -#define KEY_PRESS 0x01 -#define KEY_HOLD 0x02 -#define KEY_RELEASE 0x03 - -#define FIOPIN0_KBDINT (1<<30) -#define ANYKEY (!(FIOPIN0 & FIOPIN0_KBDINT)) - -#define testLine(_c) \ -{ \ - if(!(_c)) \ - { \ - keys[half] |= keytest; \ - } \ - keytest <<= 1; \ -} - -volatile unsigned int keys[2]; - -void initKeys(void); -void scanKeys(void); -void waitKeyUp(void); -void waitKeyDown(void); -/// Return 1 if any key is pressed. -char isKeyPressed (void); -signed char getNumKeyValue(void); -unsigned char getKeynum(void); - -#define waitKeyUpDown() { waitKeyUp(); waitKeyDown(); } - -#endif diff --git a/boop/keyboard/keyirq.c b/boop/keyboard/keyirq.c deleted file mode 100644 index 6a11f45..0000000 --- a/boop/keyboard/keyirq.c +++ /dev/null @@ -1,195 +0,0 @@ -/* - keyirq.c - keyboard scanning interrupt - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "keyboard.h" -#include "keyirq.h" -#include "lpc2220.h" -#include "timerfuncs.h" -#include "global.h" - -static unsigned char scannerTimeout; -static unsigned char repeatTimeout; -static unsigned char fastToggle; -static unsigned char scannerState = 0; - -#define S_IDLE 0x00 -#define S_PRESSED 0x01 -#define S_HOLD 0x02 -#define S_REPEAT 0x03 - -#define S_REPEATDELAY 6 -#define S_REPEATRATE 4 - -#define MASK0 0x18402000 -#define MASK3 0x00300000 - -void __attribute__ ((section(".text.fastcode"))) keyScanner(unsigned int cb) -{ -#ifdef SWISSCOM - static unsigned int IO2_P, IO2_PC, IO2_0, IO2_1; -#else - static unsigned int temp; - - keys[0] = 0; - keys[1] = 0; -#endif - - if(ANYKEY) - { -#ifdef SWISSCOM - IOSET2= (126<<18); - IO2_P = (1<<18); - IO2_0=0; - IO2_1=0; - keys[0]=0; - keys[1]=0; - for(IO2_PC=18;IO2_PC<=24;IO2_PC++) - { - IOCLR2 = IO2_P; - keys[0] |= ((IOPIN1>>16) & 0xF)<>21) & 0x3)<>1; - keys[0] |= (IOPIN3 & MASK3) >> 14; - - IOSET2 = (1<<18); - IOCLR2 = (1<<19); - - keys[0] |= FIOPIN0>> 3; - keys[0] |= (IOPIN3 & MASK3) >> 16; - - IOSET2 = (1<<19); - IOCLR2 = (1<<20); - - keys[0] |= FIOPIN0>> 5; - keys[0] |= (IOPIN3 & MASK3) >> 18; - - IOSET2 = (1<<20); - IOCLR2 = (1<<21); - - keys[0] |= FIOPIN0 >> 13; - keys[0] |= (IOPIN3 & MASK3) << 8; - - keys[0] = ~keys[0]; - keys[0] &= 0x3FEAD7FD; - - IOSET2 = (1<<21); - IOCLR2 = (1<<22); - - keys[1] = FIOPIN0>> 3; - keys[1] |= (IOPIN3 & MASK3) >> 16; - - IOSET2 = (1<<22); - IOCLR2 = (1<<23); - - keys[1] |= FIOPIN0>> 5; - keys[1] |= (IOPIN3 & MASK3) >> 18; - - IOSET2 = (1<<23); - IOCLR2 = (1<<24); - - keys[1] |= FIOPIN0>> 7; - keys[1] |= (IOPIN3 & MASK3) >> 20; - - keys[1] = ~keys[1]; - keys[1] &= 0x3FA857F; - - temp = (keys[0] & 0x3FE80000)>>3; - keys[0] &= 0x0002D7FD; - keys[0] |= temp; - - temp = (keys[0] & 0x07FFD000)>>1; - keys[0] &= 0x000007FD; - keys[0] |= temp; - - temp = keys[0]>>1; - keys[0] &= 0x00000001; - keys[0] |= temp; - - temp = (keys[0] & 0x1FFF000)>>1; - keys[0] &= 0x7FF; - keys[0] |= temp; - - temp = (keys[1] & 0x03FA8000) >> 8; - keys[1] &= 0x0000057F; - keys[1] |= temp; - - temp = keys[0] & 0x00E00000; - keys[0] &= 0x1FFFFF; - keys[1] |= (temp>>3); - - FIOMASK0 &= MASK0; - IOCLR2=((1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)); -#endif - } - - if((keys[0] == 0) && (keys[1] == 0)) - { - scannerTimeout = 0; - repeatTimeout = S_REPEATDELAY; - scannerState = S_IDLE; - } - else if(scannerState == S_IDLE) - { - scannerState = S_PRESSED; - } - - switch(scannerState) - { - case S_PRESSED: - scannerTimeout++; - if((scannerTimeout > repeatTimeout) && (repeatTimeout != 0) && !(sysInfo & SYS_IR)) - { - repeatTimeout = S_REPEATRATE; - scannerState++; - } - break; - case S_HOLD: - keys[0] = 0; - keys[1] = 0; - scannerState++; - break; - - case S_REPEAT: - scannerTimeout++; - if(scannerTimeout > repeatTimeout) - { - keys[0] = 0; - keys[1] = 0; - scannerTimeout = 0; - fastToggle++; - if((fastToggle > 4) && (repeatTimeout > 1)) - { - repeatTimeout >>= 1; - fastToggle = 0; - } - } - break; - } -} diff --git a/boop/keyboard/keyirq.h b/boop/keyboard/keyirq.h deleted file mode 100644 index c510ce1..0000000 --- a/boop/keyboard/keyirq.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - keyirq.h - keyboard scanning interrupt - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef KEYIRQ_H -#define KEYIRQ_H - -#define AUTO_TIMEOUT 5 - -#define testLine(_c) \ -{ \ - if(!(_c)) \ - { \ - keys[half] |= keytest; \ - } \ - keytest <<= 1; \ -} - -void __attribute__ ((section(".text.fastcode"))) keyScanner (unsigned int cb); - -#endif diff --git a/boop/lcd.c b/boop/lcd.c new file mode 100644 index 0000000..71af337 --- /dev/null +++ b/boop/lcd.c @@ -0,0 +1,617 @@ +/* + lcd.c - lcd control & graphics primitives + Copyright (C) 2007 Ch. Klippel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "lpc2220.h" +#include "lcd.h" +#include "fonty.h" +//#include "b.h" + +void pause(unsigned int ptime) +{ + unsigned long xx; + xx = ptime * 750; + while(xx) + { + xx--; + }; +} + +void lcd_set(unsigned char s) +{ + if(s == 0) + { + LCD_CMD = 0xA0; // set segment remap (00H mapped to seg0) + LCD_CMD = 0xC8; // set com output scan direction (remapped mode) + } + else + { + LCD_CMD = 0xA1; // set segment remap (7FH mapped to seg0) + LCD_CMD = 0xC0; // set com output scan direction (normal mode) + } +} + +void lcd_init(unsigned char s) +{ + + LCD_CMD = 0xE1; // exit power save mode + LCD_CMD = 0xE2; // software reset + pause(0x32); + LCD_CMD = 0xAB; // start internal oscillator + LCD_CMD = 0x27; // set internal regulator resistor ratio (8.1) + LCD_CMD = 0x81; // volume cmd + LCD_CMD = 0x3A; // volume cmd value + LCD_CMD = 0x65; // set DC-DC converter factor (4x) + LCD_CMD = 0x60; // set upper window corner ax cmd + LCD_CMD = 0x1C; // set upper window corner ax value + LCD_CMD = 0x61; // set upper window corner ay cmd + LCD_CMD = 0x0A; // set upper window corner ay value + LCD_CMD = 0x62; // set lower window corner bx cmd + LCD_CMD = 0x75; // set lower window corner bx value + LCD_CMD = 0x63; // set lower window corner by cmd + LCD_CMD = 0x81; // set lower window corner by value + LCD_CMD = 0x90; // set PWM and FRC (4-frames) + LCD_CMD = 0x88; // set white mode frame 2nd and 1st cmd + LCD_CMD = 0x00; // set white mode frame 2nd and 1st value + LCD_CMD = 0x89; // set white mode frame 4th and 3rd cmd + LCD_CMD = 0x00; // set white mode frame 4th and 3rd value + LCD_CMD = 0x8A; // set light gray mode frame 2nd and 1st cmd + LCD_CMD = 0x36; // set light gray mode frame 2nd and 1st value + LCD_CMD = 0x8B; // set light gray mode frame 4th and 3rd cmd + LCD_CMD = 0x63; // set light gray mode frame 4th and 3rd vakue + LCD_CMD = 0x8C; // set dark gray mode frame 2nd and 1st cmd + LCD_CMD = 0x67; // set dark gray mode frame 2nd and 1st value + LCD_CMD = 0x8D; // set dark gray mode frame 4th and 3rd cmd + LCD_CMD = 0x76; // set dark gray mode frame 4th and 3rd vakue + LCD_CMD = 0x8E; // set black mode frame 2nd and 1st cmd + LCD_CMD = 0xAC; // set black mode frame 2nd and 1st value + LCD_CMD = 0x8F; // set black mode frame 4th and 3rd cmd + LCD_CMD = 0xCA; // set black mode frame 4th and 3rd value + LCD_CMD = 0x66; // set DC-DC converter factor (5x) + lcd_set(s); + +// LCD_CMD = 0x2E; // set power control register (boost on, reg on, buffer off) + +// pause(0x64); + + LCD_CMD = 0x2f; // set power control register (boost on, reg on, buffer on) 0x2F; + LCD_CMD = 0xA4; // set entire display on, normal mode) + LCD_CMD = 0xA6; // set normal display mode, inverse = 0xA7 + + + lcd_fill(0x00); + + LCD_CMD = 0xAF; + + set_font(0); +} + +void lcd_enable(unsigned char e) +{ + if(e) + { + LCD_CMD = 0xAF; // set display on + } + else + { + LCD_CMD = 0xAE; // set display off + } +} + +void lcd_fill(unsigned char f) +{ + unsigned char x,y; + for(y=0;y<20;y++) + { + LCD_CMD = 0xB0; + LCD_CMD = y; + LCD_CMD = 0x10; + LCD_CMD = 0x00; + for(x=0;x<128;x++) + { + LCD_DATA = f; + LCD_DATA = f; + } + } +} + +void draw_logo(void) +{/* + unsigned short f; + unsigned char x,y; + f=0; + for(y=0;y>3;y++) + { + LCD_CMD = 0xB0; + LCD_CMD = y; + LCD_CMD = 0x10; + LCD_CMD = 0x00; + for(x=0;x> 3); + LCD_CMD = (0x10 + (x >> 4)); + LCD_CMD = (x & 0x0F); + + q = LCD_DATA; + q = l; + + while(q--) + { + rcubuf[0][q] = LCD_DATA; + rcubuf[1][q] = LCD_DATA; + } + + q = LCD_DATA; + + LCD_CMD = 0xB0; + LCD_CMD = (y >> 3); + LCD_CMD = (0x10 + (x >> 4)); + LCD_CMD = (x & 0x0F); + + q = l; + + switch(m) + { + case DRAW_PUT: // draw put + while(q--) + { + LCD_DATA = rcubuf[0][q] | drawbuf[0][q]; + LCD_DATA = rcubuf[1][q] | drawbuf[1][q]; + } + break; + case DRAW_XOR: // draw xor + while(q--) + { + LCD_DATA = rcubuf[0][q] ^ drawbuf[0][q]; + LCD_DATA = rcubuf[1][q] ^ drawbuf[1][q]; + } + break; + case DRAW_ERASE: // draw erase + while(q--) + { + LCD_DATA = rcubuf[0][q] & ~drawbuf[0][q]; + LCD_DATA = rcubuf[1][q] & ~drawbuf[1][q]; + } + break; + } +} + +void do_rcuS(unsigned char x, unsigned char y, unsigned char m) +{ + unsigned char q; + + LCD_CMD = 0xB0; + LCD_CMD = (y >> 3); + LCD_CMD = (0x10 + (x >> 4)); + LCD_CMD = (x & 0x0F); + + q = LCD_DATA; + rcubuf[0][0] = LCD_DATA; + rcubuf[1][0] = LCD_DATA; + + q = LCD_DATA; + + LCD_CMD = 0xB0; + LCD_CMD = (y >> 3); + LCD_CMD = (0x10 + (x >> 4)); + LCD_CMD = (x & 0x0F); + + switch(m) + { + case 0: // draw put + LCD_DATA = rcubuf[0][0] | drawbuf[0][0]; + LCD_DATA = rcubuf[1][0] | drawbuf[1][0]; + break; + case 1: // draw xor + LCD_DATA = rcubuf[0][0] ^ drawbuf[0][0]; + LCD_DATA = rcubuf[1][0] ^ drawbuf[1][0]; + break; + case 2: // draw erase + LCD_DATA = rcubuf[0][0] & ~drawbuf[0][0]; + LCD_DATA = rcubuf[1][0] & ~drawbuf[1][0]; + break; + } +} + +void draw_block(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char c, unsigned char m) +{ + unsigned char q,s; + unsigned char yy,ss,vv,ww,xx; + unsigned char segm; + + s = y; + + if(h) + { + + + + yy = h; + ss = y >> 3; + vv = y & 0x07; + + ww = yy & 0x07; + + segm = 0xFF; + + xx = 8; + if(yy < 8) + { + segm >>= (8-ww); + xx -= (8-ww); + if(vv > (8-xx)) + { + xx = yy -(vv-(8-xx)); + } + else + { + xx = yy; + } + } + else + { + xx -= vv; + } + + segm <<= vv; + + q = w; + while(q--) + { + if(c & 0x02) + drawbuf[0][q] = segm; + else + drawbuf[0][q] = 0; + + if(c & 0x01) + drawbuf[1][q] = segm; + else + drawbuf[1][q] = 0; + } + do_rcu(x,s,w,m); + + yy -= xx; + + while(yy > 8) + { + s += 8; + yy -= 8; + q = w; + while(q--) + { + if(c & 0x02) + drawbuf[0][q] = 0xFF; + else + drawbuf[0][q] = 0; + + if(c & 0x01) + drawbuf[1][q] = 0xFF; + else + drawbuf[1][q] = 0; + } + do_rcu(x,s,w,m); + } + + if(yy) + { + s += 8; + q = w; + while(q--) + { + if(c & 0x02) + drawbuf[0][q] = 0xFF >> (8-yy); + else + drawbuf[0][q] = 0; + + if(c & 0x01) + drawbuf[1][q] = 0xFF >> (8-yy); + else + drawbuf[1][q] = 0; + } + do_rcu(x,s,w,m); + } + } +} + +void draw_hline(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m) +{ + unsigned char p,q; + + q = l; + p = 0x01 << (y & 0x07); + + while(q--) + { + if(c & 0x02) + drawbuf[0][q] = p; + else + drawbuf[0][q] = 0; + + if(c & 0x01) + drawbuf[1][q] = p; + else + drawbuf[1][q] = 0; + } + do_rcu(x,y,l,m); +} + +void draw_vline(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m) +{ + unsigned char s; + unsigned char yy,ss,vv,ww,xx; + unsigned char segm; + + s = y; + + if(l) + { + + + + yy = l; + ss = y >> 3; + vv = y & 0x07; + + ww = yy & 0x07; + + segm = 0xFF; + + xx = 8; + if(yy < 8) + { + segm >>= (8-ww); + xx -= (8-ww); + if(vv > (8-xx)) + { + xx = yy -(vv-(8-xx)); + } + else + { + xx = yy; + } + } + else + { + xx -= vv; + } + + segm <<= vv; + + if(c & 0x02) + drawbuf[0][0] = segm; + else + drawbuf[0][0] = 0; + + if(c & 0x01) + drawbuf[1][0] = segm; + else + drawbuf[1][0] = 0; + + do_rcuS(x,s,m); + + yy -= xx; + + while(yy > 8) + { + s += 8; + yy -= 8; + if(c & 0x02) + drawbuf[0][0] = 0xFF; + else + drawbuf[0][0] = 0; + + if(c & 0x01) + drawbuf[1][0] = 0xFF; + else + drawbuf[1][0] = 0; + do_rcuS(x,s,m); + } + + if(yy) + { + s += 8; + if(c & 0x02) + drawbuf[0][0] = 0xFF >> (8-yy); + else + drawbuf[0][0] = 0; + + if(c & 0x01) + drawbuf[1][0] = 0xFF >> (8-yy); + else + drawbuf[1][0] = 0; + do_rcuS(x,s,m); + } + } +} + +void draw_rect(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char lw, unsigned char c, unsigned char m) +{ + if(lw) + { + if(lw == 1) + { + draw_hline(x, y, w, c, m); + draw_hline(x, y+h-1, w, c, m); + + draw_vline(x, y+1, h-2, c, m); + draw_vline(x+w-1, y+1, h-2, c, m); + } + else + { + draw_block(x, y, w, lw, c, m); + draw_block(x, y+h-lw, w, lw, c, m); + draw_block(x, y+lw, lw, h-(2*lw), c, m); + draw_block(x+w-lw, y+lw, lw, h-(2*lw), c, m); + } + } +} + +void draw_pixel(unsigned char x, unsigned char y, unsigned char c, unsigned char m) +{ + unsigned char p; + + p = 0x01 << (y & 0x07); + + if(c & 0x02) + drawbuf[0][0] = p; + else + drawbuf[0][0] = 0; + + if(c & 0x01) + drawbuf[1][0] = p; + else + drawbuf[1][0] = 0; + + do_rcuS(x,y,m); +} + +void draw_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char c, unsigned char m) +{ + unsigned char i,dx,dy,px,py; + unsigned int x,y; + + if (y2 > y1) // incl. POSITIVE + { + dx=x2-x1; + dy=y2-y1; + px=x1; + py=y1; + draw_pixel(x1, y1, c, m); // first pixel + if (dx>=dy) // incl. is more horizontal than vertical + { + y = y1; + for(i=0;i=dx) + { + y-=dx; + py+=1; + } + px+=1; + draw_pixel(px, py, c, m); + } + } + else // incl. is more vertical than horizontal + { + x = x1; + for(i=0;i=dy) + { + x-=dy; + px+=1; + } + py+=1; + draw_pixel(px, py, c, m); //?????? + } + }; + } + else if (y2 < y1) // incl. NEGATIVE + { + dx=x2-x1; + dy=y1-y2; // inverted to produce a positive value + dx=dx; + dy=dy; + px=x1; + py=y2; // Note: due to inverted "dy", + draw_pixel(x2, y2, c, m); // the first pixel became the last one + if (dx>=dy) // incl. is more horizontal than vertical + { + y = y1; + py=y1; + for(i=0;i=dx) + { + y-=dx; + py-=1; + } + px+=1; + draw_pixel(px, py, c, m); + } + } + else // incl. is more vertical than horizontal + { + x = x1; + px=x2; + for(i=0;i=dy) + { + x-=dy; + px-=1; + } + py+=1; + draw_pixel(px, py, c, m); + } + }; + } +} + +void draw_circle(unsigned char cx, unsigned char cy, unsigned char radius, unsigned char c, unsigned char m) +{ + signed int tswitch; + unsigned char y, x = 0; + unsigned char d; + + d = cy - cx; + y = radius; + tswitch = 3 - 2 * radius; + while (x <= y) + { + draw_pixel(cx + x, cy + y, c, m); + draw_pixel(cx + x, cy - y, c, m); + draw_pixel(cx - x, cy + y, c, m); + draw_pixel(cx - x, cy - y, c, m); + + draw_pixel(cy + y - d, cy + x, c, m); + draw_pixel(cy + y - d, cy - x, c, m); + draw_pixel(cy - y - d, cy + x, c, m); + draw_pixel(cy - y - d, cy - x, c, m); + + if (tswitch < 0) + { + tswitch += (4 * x + 6); + } + else + { + tswitch += (4 * (x - y) + 10); + y--; + } + x++; + } +} + + diff --git a/boop/lcd.h b/boop/lcd.h new file mode 100644 index 0000000..8aaa59d --- /dev/null +++ b/boop/lcd.h @@ -0,0 +1,47 @@ +/* + lcd.h - lcd control & graphics primitives + Copyright (C) 2007 Ch. Klippel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef LCD_H +#define LCD_H + +// the lcd data & command ports +#define LCD_CMD (*((volatile unsigned char *) 0x81000000)) +#define LCD_DATA (*((volatile unsigned char *) 0x81000001)) + +// drawmodes +#define DRAW_PUT 0 +#define DRAW_XOR 1 +#define DRAW_ERASE 2 + +void lcd_init(unsigned char s); +void lcd_enable(unsigned char e); +void do_rcu(unsigned char x, unsigned char y, unsigned char l, unsigned char m); +void do_rcuS(unsigned char x, unsigned char y, unsigned char m); +void pause(unsigned int ptime); + +void lcd_fill(unsigned char f); +void draw_logo(void); +void draw_block(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char c, unsigned char m); +void draw_hline(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m); +void draw_vline(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m); +void draw_rect(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char lw, unsigned char c, unsigned char m); +void draw_pixel(unsigned char x, unsigned char y, unsigned char c, unsigned char m); +void draw_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char c, unsigned char m); +void draw_circle(unsigned char cx, unsigned char cy, unsigned char radius, unsigned char c, unsigned char m); + +#endif diff --git a/boop/lpc2220.h b/boop/lpc2220.h index 36693c3..0a65789 100644 --- a/boop/lpc2220.h +++ b/boop/lpc2220.h @@ -70,12 +70,11 @@ #define VICVectCntl14 (*((volatile unsigned long *) 0xFFFFF238)) #define VICVectCntl15 (*((volatile unsigned long *) 0xFFFFF23C)) -#define SCS (*((volatile unsigned char *) 0xE01FC1A0)) +#define SCS (*((volatile unsigned char *) 0xE01FC1A0)) #define FIOPIN0 (*((volatile unsigned long *) 0x3FFFC014)) #define FIOSET0 (*((volatile unsigned long *) 0x3FFFC018)) #define FIODIR0 (*((volatile unsigned long *) 0x3FFFC000)) #define FIOCLR0 (*((volatile unsigned long *) 0x3FFFC01C)) -#define FIOMASK0 (*((volatile unsigned long *) 0x3FFFC010)) /* Pin Connect Block */ #define PINSEL0 (*((volatile unsigned long *) 0xE002C000)) @@ -267,8 +266,6 @@ /* A/D Converter */ #define ADCR (*((volatile unsigned long *) 0xE0034000)) #define ADDR (*((volatile unsigned long *) 0xE0034004)) -#define ADINTEN (*((volatile unsigned long *) 0xE003400C)) -#define ADSTAT (*((volatile unsigned long *) 0xE0034030)) /* Watchdog */ #define WDMOD (*((volatile unsigned char *) 0xE0000000)) @@ -279,12 +276,10 @@ /* Memory Mapping control register */ #define MEMMAP (*((volatile unsigned long *) 0xE01FC040)) -/* SSP control register */ #define SSPCR0 (*((volatile unsigned long *) 0xE005C000)) #define SSPCR1 (*((volatile unsigned char *) 0xE005C004)) #define SSPDR (*((volatile unsigned char *) 0xE005C008)) #define SSPSR (*((volatile unsigned char *) 0xE005C00C)) #define SSPCPSR (*((volatile unsigned char *) 0xE005C010)) - #endif /* __ASM_ARCH_HARDWARE_H */ diff --git a/boop/lpc2220.ld b/boop/lpc2220.ld new file mode 100644 index 0000000..27e6dfd --- /dev/null +++ b/boop/lpc2220.ld @@ -0,0 +1,66 @@ +/* identify the Entry Point */ + +ENTRY(Reset_Handler) + +/* specify the LPC2106 memory areas */ + +MEMORY +{ + flash : ORIGIN = 0x00000000, LENGTH = 128K /* free FLASH EPROM area */ + ram : ORIGIN = 0x40000200, LENGTH = 64K - 0x200 /* free RAM area */ +} + +/* define a global symbol _stack_end */ + +_stack_end = 0x4000FEDC; + +/* now define the output sections */ + +SECTIONS +{ + startup : + { + *(.startup) + } >ram /* the startup code goes into FLASH */ + + .text : /* collect all sections that should go into FLASH after startup */ + { + *(.text) /* all .text sections (code) */ + *(.rodata) /* all .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* all .rodata* sections (constants, strings, etc.) */ + *(.glue_7) /* all .glue_7 sections (no idea what these are) */ + *(.glue_7t) /* all .glue_7t sections (no idea what these are) */ + _etext = .; /* define a global symbol _etext just after the last code byte */ + } >ram /* put all the above into FLASH */ + + .data : /* collect all initialized .data sections that go into RAM */ + { + _data = .; /* create a global symbol marking the start of the .data section */ + *(.data) /* all .data sections */ + _edata = .; /* define a global symbol marking the end of the .data section */ + } >ram /* put all the above into RAM (but load the LMA copy into FLASH) */ + + .bss : /* collect all uninitialized .bss sections that go into RAM */ + { + _bss_start = .; /* define a global symbol marking the start of the .bss section */ + *(.bss) /* all .bss sections */ + } >ram /* put all the above in RAM (it will be cleared in the startup code */ + + . = ALIGN(4); /* advance location counter to the next 32-bit boundary */ + _bss_end = . ; /* define a global symbol marking the end of the .bss section */ + + _end = .; /* define a global symbol marking the end of application RAM */ +} + +PROVIDE( MEMMAP = 0xE01FC040 ); +PROVIDE( BCFG0 = 0xFFE00000 ); +PROVIDE( BCFG1 = 0xFFE00004 ); +PROVIDE( BCFG2 = 0xFFE00008 ); +PROVIDE( PINSEL0 = 0xE002C000 ); +PROVIDE( PINSEL1 = 0xE002C004 ); +PROVIDE( PINSEL2 = 0xE002C014 ); +PROVIDE( IO0PIN = 0xE0028000 ); +PROVIDE( IO0DIR = 0xE0028008 ); +PROVIDE( IO2SET = 0xE0028024 ); +PROVIDE( VICVectAddr = 0xFFFFF030 ); + diff --git a/boop/lpc2220_rom.ld b/boop/lpc2220_rom.ld index f7470bf..73ff62a 100644 --- a/boop/lpc2220_rom.ld +++ b/boop/lpc2220_rom.ld @@ -24,14 +24,13 @@ ENTRY(_startup) MEMORY { - ram : ORIGIN = 0x40000000, LENGTH = 64K-0x400 /* free RAM area */ + ram : ORIGIN = 0x40000000, LENGTH = 64K /* free RAM area */ flash : ORIGIN = 0x80000000, LENGTH = 1M /* FLASH ROM */ } /* define a global symbol _stack_end */ -/* _stack_end = 0x4000F9DC; */ -_stack_end = 0x40010000; +_stack_end = 0x4000FEDC; /* now define the output sections */ @@ -55,56 +54,28 @@ SECTIONS _etext = .; /* define a global symbol _etext just after the last code byte */ } >flash /* put all the above into FLASH */ . = ALIGN(4); /* advance location counter to the next 32-bit boundary */ - - __exidx_start = .; - PROVIDE(__exidx_start = __exidx_start); - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*); - } > flash AT > flash /* index entries for section unwinding */ - - . = ALIGN(4); - __exidx_end = .; - PROVIDE(__exidx_end = __exidx_end); - - . = ALIGN(4); /* advance location counter to the next 32-bit boundary */ - .fastcode : { __fastcode_load = LOADADDR(.fastcode); __fastcode_start = .; /* functions with __attribute__ ((section (".text.fastcode")))*/ - *(.text.fastcode) + *(.text.fastcode) *(.text.ramvectors) - *(.text.do_vic) - *(.text.do_fiq) - *(.text.timerIRQ) + *(.text.keyIRQ) *(.text.soundIRQ) - *(.text.FIQ_Routine) - *(.text.keyScanner) - *(.text.adcIRQ) *(.text.irIRQ) + *(.text.scanKeys) *(.text.defIR) - *(.text.NRC17_Encode) - *(.text.ITT_Encode) *(.text.RC5_Encode) - *(.text.RCA_Encode) *(.text.RCMM_Encode) - *(.text.REC80_Encode) - *(.text.RECS80_Encode) + *(.text.NRC17_Encode) *(.text.SIRC_Encode) + *(.text.REC80_Encode) + *(.text.ITT_Encode) *(.text.SPACEENC_Encode) - *(.text.cc1100IRQ) - *(.text._evaluate) - *(.text._push_state) - *(.text._mcpy) - *(.text._do_rcu) - *(.text._do_rcuS) - *(.text._draw_block) - *(.text._draw_hline) - *(.text._draw_vline) - + *(.text.RECS80_Encode) + *(.text.RCA_Encode) . = ALIGN (4); __fastcode_end = .; } >ram AT>flash @@ -127,7 +98,7 @@ SECTIONS . = ALIGN(4); /* advance location counter to the next 32-bit boundary */ _bss_end = . ; /* define a global symbol marking the end of the .bss section */ } -end = .; /* define a global symbol marking the end of application RAM */ +_end = .; /* define a global symbol marking the end of application RAM */ PROVIDE( MEMMAP = 0xE01FC040 ); PROVIDE( BCFG0 = 0xFFE00000 ); @@ -139,6 +110,4 @@ PROVIDE( PINSEL2 = 0xE002C014 ); PROVIDE( IO0PIN = 0xE0028000 ); PROVIDE( IO0DIR = 0xE0028008 ); PROVIDE( IO2SET = 0xE0028024 ); -PROVIDE( SCS = 0xE01FC1A0 ); -PROVIDE( FIODIR0 = 0x3FFFC000 ); PROVIDE( VICVectAddr = 0xFFFFF030 ); diff --git a/boop/main.c b/boop/main.c index 9744389..a8bd367 100644 --- a/boop/main.c +++ b/boop/main.c @@ -1,80 +1,54 @@ /* - main.c - main program routines - Copyright (C) 2007 Ch. Klippel + main.c - main program routines + Copyright (C) 2007 Ch. Klippel - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program. If not, see . + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ -//typedef volatile unsigned int *reg32_t; +//#define WITH_SOUND + +typedef volatile unsigned int *reg32_t; #include "lpc2220.h" - - #include "lcd.h" #include "irq.h" -#include "keyboard.h" -#include "lcd.h" +#include "soundcore.h" #include "fonty.h" -#include "sid.h" -#include "sound.h" -//#include "sounds.h" -//#include "sound3.h" -#include "infrared.h" -#include "pwm.h" -#include "codes.h" -#include "encoders.h" -#include "ir_selector.h" -#include "serial.h" -#include "flash.h" -#include "rf.h" -#include "menu.h" -#include "testmenu.h" -#include "mainmenu.h" -#include "timerfuncs.h" -#define __MAIN_C__ -#include "global.h" -#include "adc.h" -#include "backlight.h" -#include "rtc.h" -#include "i2c.h" -#include "bfs.h" -#include "settingsmenu.h" -#include "ir_raw.h" -#include "ir_capture.h" -#include "controls.h" -#include "buffer.h" +#include "keyboard.h" +#include "externs.h" -unsigned char sysInfo; +static unsigned int old_tval; -extern volatile char timeout; +unsigned long checksum; +unsigned short count; +unsigned long adr; +const char hval[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; -extern ir_sfn irSend; -extern ir_fn irRepeat; -extern ir_fn irStop; +unsigned char idle; +unsigned char ccbuf[64]; -const char hval[16] = "0123456789ABCDEF"; +extern unsigned char cc1100rx; +extern unsigned char batcnt; -unsigned int oldkeys[2]; -unsigned int key_state; +#define KEY_IDLE 0x00 +#define KEY_PRESS 0x01 +#define KEY_HOLD 0x02 +#define KEY_RELEASE 0x03 -extern unsigned char act_encoder, act_set; +#define SPEED_30 0 +#define SPEED_60 1 -extern unsigned char bl_val; - - -// betty runs on 10 MHz * 1/4 on reset -// this enables the PLL clock generation and sets the prescaler void setSpeed(unsigned char sp) { disableIRQ(); @@ -88,10 +62,9 @@ void setSpeed(unsigned char sp) VPBDIV = 0x00; - BCFG0 = 0x10001CA0; - BCFG2 = 0x10001CA0; + BCFG0 = 0x100004A0; + BCFG2 = 0x100004A0; BCFG1 = 0x00000C21; - sysInfo |= SYS_TURBO; break; case SPEED_30: // normal speed (30 mhz) @@ -103,319 +76,167 @@ void setSpeed(unsigned char sp) VPBDIV = 0x02; - BCFG0 = 0x10000A20; - BCFG2 = 0x10000A20; + BCFG0 = 0x10000420; + BCFG2 = 0x10000420; BCFG1 = 0x00000400; - sysInfo &= ~SYS_TURBO; break; } enableIRQ(); } -/* -// draw "emitting waves" symbol -// used when a button is pressed -void draw_ir (unsigned char x, unsigned char y, unsigned char m) -{ - //~ 0 1: ##### - //~ 1 2: # # - //~ 2 4: ### - //~ 3 8: # # - //~ 4 1: - //~ 5 2: ### - //~ 6 4: ##### - - draw_hline(x+1,y,5,3,m); // 0 - - draw_pixel(x ,y+1,3,m); // 1 - draw_pixel(x+6,y+1,3,m); // 1 - - draw_hline(x+2,y+2,3,3,m); // 2 - - draw_pixel(x+1,y+3,3,m); // 3 - draw_pixel(x+5,y+3,3,m); // 3 - - draw_hline(x+2,y+5,3,3,m); // 5 - - draw_hline(x+1,y+6,5,3,m); // 6 - - draw_symbol(x,y,7,(unsigned char*)symIR,LCD_COLOR_B,m); - -}*/ - - - -// shows current IR set on top of main screen -void drawSet (void) -{ - set_font(SMALLFONT); - draw_block (0, 0, 99, 9, LCD_COLOR_B, DRAW_ERASE); - draw_string (0,0,getSetName (irDevTab.device[irDevTab.active].encoder, irDevTab.device[irDevTab.active].set), LCD_COLOR_B, DRAW_PUT); -} - - -// -void drawMainscreen (void) -{ - //~ set_font(SMALLFONT); // done in drawSet() - - lcd_fill(0); - draw_logo(); - - // top bar - drawSet(); - -/* is updated in main loop - // time -#if FF_LARGE_IDLE_CLOCK - printTime (6,20, (struct time_ *)&rtc.time, 1); -#else - printTime (86,152, (struct time_ *)&rtc.time, 0); - printDate(0,152,(struct date_ *)&rtc.date,0); -#endif -*/ - showBat(0xff); // battery indicator - redraw_symbols(); // -} - - -//unsigned char i; - -/** let the LPC2200 sleep until the next IRQ - * - * This function tries to enter the sleep mode and stays - * there until the next interrupt wakes up the CPU. - * If that is not possible, the function returns immediately. - */ -extern unsigned char sact; -void cpu_idle () -{ - /* fall through if a key was pressed */ - if (ANYKEY) - return; - - //fall through if UART0 Scratch pad register is not empty - //OpenOCD can set this register with "mwb 0xE000C01C 0x01" to disable idle and power down mode - if(U0SCR) - return; - - return; - - /* only idle mode instead of power down when: - * * backlight on - * * IR transmission - * * RF is activated - * * sound is playing - * * I2C access - * * SYS_NOPDOWN in sysInfo is set - */ - if (bl_val != 0 || key_state != KEY_IDLE || - (RF.state > RFidle) || - (SID.flags & SIDenable) || sact || i2ccurrentjob || (sysInfo & SYS_NOPDOWN)) - { - if(sysInfo & SYS_NOIDLE) - return; - /* WARNING: no code reuse here: - * PCON = causes timing problems */ - EXTINT = 0x08; - PCON = PCON_IDLE; - PLLFEED = 0xAA; - PLLFEED = 0x55; - } - else - { - refresh_symbols(0xff); - EXTINT = 0x08; - sysInfo |= SYS_NOIDLE; - PCON = PCON_PDOWN; - PLLFEED = 0xAA; - PLLFEED = 0x55; - } -} // cpu_idle int main(void) { - sysInfo = SYS_NOIDLE; - - SCS |= 0x01; - FIODIR0 |= ((1<<21) | (1<<11) | (1<<6) | (1<<23) | (1<<19) | (1<<17)); - FIODIR0 |= (1<<12); - FIOSET0 |= (1<<12); - FIOCLR0 |= (1<<4); - - setSpeed(SPEED_60); - BFS_Mount(); // flash file system - - lcd_init(0); - serial_init(); - - startTimerIRQ(); - startADC(); - - initKeys(); - - initSound(); - //startSoundIRQ(); - - initIR(); - startIrIRQ(); - - PWM_init(); - - RF_init(); - load_RF_setting(); - startRFIRQ(); - RF_changestate(RFwor); - - initI2C(); - initRTC(); - startRtcIRQ(); - - enableIRQ(); - - //testmenu_init(); - init_menu(); - - initBacklight(); - - oldkeys[0] = keys[0]; - oldkeys[1] = keys[0]; - - key_state = KEY_IDLE; - - set_font(BOLDFONT); - - load_setting(); // display settings - load_RC_setting(); // learned remote codes + unsigned char key_state, bl_vol; + unsigned int oldkeys[2], ok[2]; - // recorded raw IR commands - { - struct RAWset_ RAWset; - unsigned char x; - unsigned long RAWcmdbase; + setSpeed(SPEED_30); + + //************************************************************************************* + + + + //************************************************************************************* + oldkeys[0] = 0; + oldkeys[1] = 0; + ok[0] = 0; + ok[1] = 0; + key_state = KEY_IDLE; + old_tval = 0; + bl_vol = 0xff; + lcd_init(0); + SCS |= 0x01; + FIODIR0 |= ((1<<21) | (1<<4) | (1<<11) | (1<<6) | (1<<23) | (1<<19) | (1<<17)); + + initKeys(); + //initIR(); + IODIR0 |= (1<<12); + //VPBDIV = 0x02; + startKeyIRQ(); + startPWMIRQ(); - RAWcmdbase = FLASH1_BASE +(secaddr[0]<<1); // data address - x=memcmp((void*)RAWcmdbase,"RC01",4); // check ID - - if(!x) // - { - memcpy(&RAWset,(void *)RAWcmdbase,sizeof(struct RAWset_)); - RAWset.name[7] = 0; - BFS_SaveFile(BFS_ID_RAWslot0, sizeof(struct RAWset_), (unsigned char*) &RAWset); - eraseSector(1,0); - } - } - - setEncoder(irDevTab.device[irDevTab.active].encoder, irDevTab.device[irDevTab.active].set); - - drawMainscreen(); - ask_for_time(0); - -/* - playSound((unsigned char*)sound1_data, sound1_len); - waitSound(); - playSound((unsigned char*)sound2_data, sound2_len); -*/ - - // main loop + idle =0; + enableIRQ(); + while (1) - { - // detect keyboard action (keyboard matrix scanned by interrupt) - if(keys[0] != oldkeys[0] || keys[1] != oldkeys[1]) - { - oldkeys[0] = keys[0]; - oldkeys[1] = keys[1]; - sysInfo |= SYS_KEY; - } - - // determine keyboard actions on main screen + { + switch(key_state) { case KEY_IDLE: - if(sysInfo & SYS_KEY) + if(keys[0] != oldkeys[0] || keys[1] != oldkeys[1]) { - sysInfo &= ~SYS_KEY; - if(KEY_Betty) + if(keys[0] != 0 || keys[1] != 0) { - setBacklight(BL_AUTO); // activate backlight - menu_exec(&mainMenu); // select menu - setEncoder(irDevTab.device[irDevTab.active].encoder, irDevTab.device[irDevTab.active].set); - drawMainscreen(); // draw new menu - while(KEY_Exit); // block until - } - //~ else if(KEY_2) - //~ { - //setSpeed(SPEED_30); - //~ } - //~ else if(KEY_3) - //~ { - //setSpeed(SPEED_60); - //~ } - else if(KEY_A || KEY_B || KEY_C || KEY_D) - { - // select encoder - unsigned char x; - //playSound((unsigned char*)sound3_data, sound3_len); - x=0; - if (KEY_B) x=1; - if (KEY_C) x=2; - if (KEY_D) x=3; - - if (setEncoder(irDevTab.device[x].encoder, irDevTab.device[x].set)) { - setBacklight(BL_AUTO); - irDevTab.active = x; - //~ drawMainscreen(); - drawSet(); - } - } - - // (last-minute detection of regular key?) - if((keys[0] != 0) || (keys[1] != 0)) + draw_hexW(72,140,ok[0],3,DRAW_ERASE); + draw_hexW(72,150,ok[1],3,DRAW_ERASE); + draw_hexW(72,140,keys[0],3,DRAW_PUT); + draw_hexW(72,150,keys[1],3,DRAW_PUT); + ok[0] = keys[0]; + ok[1] = keys[1]; key_state = KEY_PRESS; + } + + oldkeys[0] = keys[0]; + oldkeys[1] = keys[1]; + + if(KEY_A) + { + if(timeout & 0x08) + timeout = 0; + else + timeout = 0x08; + } + else if(KEY_B) + { + + + } + else if(KEY_C) + { + + } + else if(KEY_D) + { + + } + else if(KEY_Vminus) + { + FIOCLR0 |= (1<<11); + } + else if(KEY_Vplus) + { + FIOSET0 |= (1<<11); + playSID(); + } + else if(KEY_OK) + { + + } + else if(KEY_Mute) + { + + } + else if(KEY_1) + { + + } + else if(KEY_2) + { + + } + else if(KEY_3) + { + + } + else if(KEY_4) + { + + } + else if(KEY_5) + { + + } + else if(KEY_6) + { + + } + else if(KEY_7) + { + + } + else if(KEY_8) + { + + } + else if(KEY_9) + { + + } } break; - case KEY_PRESS: - irSend(getCode()); + //irSend(); key_state = KEY_HOLD; - if(!(T1TCR & 0x02)) - draw_symbol(90,0,7,(unsigned char*)symIR,LCD_COLOR_B,DRAW_PUT); -// autorepeat = 0; + autorepeat = 0; break; - case KEY_HOLD: -// if(autorepeat >= AUTO_TIMEOUT) - irRepeat(); - //draw_ir(90, 0, DRAW_XOR); + if(autorepeat >= AUTO_TIMEOUT) + //irRepeat(); + if(keys[0] == 0 && keys[1] == 0) key_state = KEY_RELEASE; break; - case KEY_RELEASE: - if(!(T1TCR & 0x02)) - draw_symbol(90,0,7,(unsigned char*)symIR,LCD_COLOR_B,DRAW_ERASE); - irStop(); + //irStop(); key_state = KEY_IDLE; break; } - cpu_idle(); // let the LPC2200 sleep until the next IRQ + + } + return 0; +} - // display time - if (timeInfo & TIMECHANGED) - { -#if FF_LARGE_IDLE_CLOCK - // time large, no date - printTime( 6, 20, (struct time_ *)&rtc.time, 1); -#else - // time and date small - printTime( 86, 152, (struct time_ *)&rtc.time, 0); - printDate( 0, 152, (struct date_ *)&rtc.date, 0); -#endif - timeInfo &= ~TIMECHANGED; // clear update flag - } - } // while (1) - return 0; // never returns -} // main diff --git a/boop/rtc/Make.conf b/boop/rtc/Make.conf deleted file mode 100644 index 8293f8f..0000000 --- a/boop/rtc/Make.conf +++ /dev/null @@ -1 +0,0 @@ -THUMBSRCS := rtc.c i2c.c rtctimer.c diff --git a/boop/rtc/i2c.c b/boop/rtc/i2c.c deleted file mode 100644 index 3aa1edd..0000000 --- a/boop/rtc/i2c.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - i2c.c - - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "i2c.h" -#include "irq.h" -#include "rtc.h" -#include "global.h" - -volatile struct i2cjob_* volatile i2ccurrentjob; - -unsigned char i2c_jobexec(struct i2cjob_* job) { - - VICVectCntl3 &= ~VIC_SLOT_EN; - while(i2ccurrentjob); - i2ccurrentjob = job; - I2CONSET = STA; - while(i2ccurrentjob); - VICVectCntl3 |= VIC_SLOT_EN; - return 1; -} - -void i2cIRQ(void) { - unsigned char state; - - state = I2STAT; - i2ccurrentjob->buffer; - - switch(state) { - case 0x08: //A START condition has been transmitted - I2DAT = RTCslaveaddr | I2C_write; - I2CONSET = AA; - I2CONCLR = SI | STA; - i2ccurrentjob->pos = 0; - break; - case 0x18: //SLA+W has been transmitted; ACK has been received. - I2DAT = i2ccurrentjob->byteaddr; - I2CONSET = AA; - I2CONCLR = SI; - break; - case 0x28: //Data byte in I2DAT has been transmitted; ACK has been received. - switch(i2ccurrentjob->action) { - case I2C_read: - I2CONSET = STA; - I2CONCLR = AA | SI; - break; - case I2C_write: - if(i2ccurrentjob->len > i2ccurrentjob->pos) { - I2DAT = i2ccurrentjob->buffer[i2ccurrentjob->pos++]; - I2CONSET = AA; - I2CONCLR = SI; - } - else - i2ccurrentjob->action = I2C_done; - break; - default: - i2ccurrentjob->action = I2C_error; - } - break; - case 0x10: //A repeated START condition has been transmitted - I2DAT = RTCslaveaddr | I2C_read; - I2CONSET = AA; - I2CONCLR = SI | STA; - break; - case 0x40: //SLA+R has been transmitted; ACK has been received. - I2CONSET = AA; - I2CONCLR = SI; - break; - case 0x50: //Data byte has been received; ACK has been returned. - i2ccurrentjob->buffer[i2ccurrentjob->pos++] = I2DAT; - if(i2ccurrentjob->len > i2ccurrentjob->pos+1) - I2CONSET = AA; - else - I2CONCLR = AA; - I2CONCLR = SI; - break; - case 0x58: //Data byte has been received; NOT ACK has been returned. - i2ccurrentjob->buffer[i2ccurrentjob->pos] = I2DAT; - i2ccurrentjob->action = I2C_done; - break; - case 0x20: //SLA+W has been transmitted; NOT ACK has been received. - case 0x30: //Data byte in I2DAT has been transmitted; NOT ACK has been received. - if(i2ccurrentjob->pos) - i2ccurrentjob->pos--; - default: - i2ccurrentjob->action = I2C_error; - break; - } - - if((i2ccurrentjob->action == I2C_done) || (i2ccurrentjob->action == I2C_error)) { - I2CONSET = STO; - I2CONCLR = SI; - if(i2ccurrentjob->onfinish) { - struct i2cjob_* job; - job = (struct i2cjob_*)i2ccurrentjob; - i2ccurrentjob = 0; - job->onfinish(job); - } - else - i2ccurrentjob = 0; - } -} - -void initI2C(void) { - PINSEL0 |= (1<<4) | (1<<6); - I2SCLL = 19; - I2SCLH = 19; - - I2CONSET = I2EN; - i2ccurrentjob = 0; - - VICVectAddr4 = (unsigned long)&(i2cIRQ); - VICVectCntl4 = VIC_SLOT_EN | INT_SRC_I2C; - VICIntEnable = INT_I2C; -} - diff --git a/boop/rtc/i2c.h b/boop/rtc/i2c.h deleted file mode 100644 index 82f6932..0000000 --- a/boop/rtc/i2c.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - i2c.h - - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef I2C_H -#define I2C_H - -#define AA 0x04 -#define SI 0x08 -#define STO 0x10 -#define STA 0x20 -#define I2EN 0x40 - -extern struct i2cjob_ dummyjob; - -typedef void(*i2c_fn)(struct i2cjob_*); - -struct i2cjob_ { - unsigned char* buffer; - i2c_fn onfinish; - unsigned char len; - unsigned char pos; - unsigned char byteaddr; - unsigned char action; -}; - -#define I2C_write 0 -#define I2C_read 1 -#define I2C_done 2 -#define I2C_error 3 - -volatile struct i2cjob_* volatile i2ccurrentjob; - -unsigned char i2c_jobexec(struct i2cjob_* job); -void initI2C(void); - -#endif diff --git a/boop/rtc/rtc.c b/boop/rtc/rtc.c deleted file mode 100644 index 271e201..0000000 --- a/boop/rtc/rtc.c +++ /dev/null @@ -1,432 +0,0 @@ -/* - rtc.c - - real-time clock PCF8563 by NXP Semiconductors - I2C Bus - Interrupt - - display date / time - set date / time - date calculations - settings menu - - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "rtc.h" -#include "i2c.h" -#include "lcd.h" -#include "fonty.h" -#include "drawDigit.h" -#include "irq.h" -#include "adc.h" -#include "keyboard.h" -#include "rf.h" -#include "global.h" -#include "rtc.h" -#include "controls.h" -#include "timerfuncs.h" - -const unsigned long default_time[1] = {0x00000000}; -const unsigned char default_date[4] = {0x01, 0x02, 0x01, 0x08}; -const unsigned char months[36] = "JANFEBMRZAPRMAIJUNJULAUGSEPOKTNOVDEZ"; -const unsigned char days[14] = "SOMODIMIDOFRSA"; - -void initRTC (void) -{ - struct i2cjob_ job; - unsigned char buffer[4]; - - job.buffer = buffer; - job.onfinish = 0; - - //init rtc - job.len = 2; - job.byteaddr = RTCREG_CONTROL_STATUS_1; - job.buffer[0] = 0x08; - job.buffer[1] = 0x01; - do { - job.action = I2C_write; - i2c_jobexec(&job); - } while(!(job.action == I2C_done)); - - //init rtc alarm - job.len = 4; - job.byteaddr = RTCREG_MINUTE_ALARM;; - job.buffer[0] = (1<<7); - job.buffer[1] = (1<<7); - job.buffer[2] = (1<<7); - job.buffer[3] = (1<<7); - job.action = I2C_write; - i2c_jobexec(&job); - - //init rtc timer - job.len = 2; - job.byteaddr = RTCREG_TIMER_CONTROL; - job.buffer[0] = 0x82; - job.buffer[1] = 0x01; - job.action = I2C_write; - i2c_jobexec(&job); - - timeInfo =0; - - setTimeDate((struct time_*) default_time,(struct date_*) default_date); -} - -unsigned char getTimeDate (struct time_* t, struct date_ *d) -{ - struct i2cjob_ job; - unsigned char buffer[7]; - - job.buffer = buffer; - job.onfinish = 0; - job.len = 7; - job.byteaddr = RTCREG_SECOND; - job.action = I2C_read; - i2c_jobexec(&job); - - t->second = buffer[0] & 0x7F; - t->minute = buffer[1] & 0x7F; - t->hour = buffer[2] & 0x3F; - d->day = buffer[3] & 0x3F; - d->weekday = buffer[4] & 0x07; - d->month = buffer[5] & 0x1F; - d->year = buffer[6]; - - return buffer[0] & 0x80; /// \return VL - clock integrity. 0 is good. -} - -void setTimeDate (struct time_ *t, struct date_ *d) -{ - struct i2cjob_ job; - unsigned char buffer[7]; - - job.buffer = buffer; - job.onfinish = 0; - memcpy(job.buffer,(unsigned char *)t,3); - memcpy(job.buffer+3,(unsigned char *)d,4); - job.len = 7; - job.byteaddr = RTCREG_SECOND; - job.action = I2C_write; - i2c_jobexec(&job); - -} - -void printTime (unsigned char x, unsigned char y, struct time_* t, unsigned char format) -{ - if (format) - { - // 00:00 - unsigned char w = 25; - unsigned char h = 45; - - drawDigit (x+0, y, w, h, (t->hour >> 4) & 0x0F, 5, LCD_COLOR_B, DRAW_PUT); - drawDigit (x+w+2, y, w, h, t->hour & 0x0F, 5, LCD_COLOR_B, DRAW_PUT); - drawDigit (x+2*w +15, y, w, h, (t->minute >> 4) & 0x0F, 5, LCD_COLOR_B, DRAW_PUT); - drawDigit (x+3*w+2+15, y, w, h, t->minute & 0x0F, 5, LCD_COLOR_B, DRAW_PUT); - - draw_char (x+2*w+10, y+h/2, ':', LCD_COLOR_B, DRAW_PUT); - } - else - { - unsigned char f = activefont; - - set_font (SMALLFONT); - draw_block (x,y,42,7,LCD_COLOR_B,DRAW_ERASE); - draw_hexC (x+30,y,t->second, LCD_COLOR_B, DRAW_PUT); - draw_hexC (x+15,y,t->minute, LCD_COLOR_B, DRAW_PUT); - draw_hexC (x+0,y,t->hour, LCD_COLOR_B, DRAW_PUT); - draw_char (x+12,y,':', LCD_COLOR_B, DRAW_PUT); - draw_char (x+27,y,':', LCD_COLOR_B, DRAW_PUT); - set_font (f); - } -} - - -void printDate (unsigned char x, unsigned char y, struct date_* d, unsigned char format) -{ - unsigned char f; - char s[17]; - - f=activefont; - set_font(SMALLFONT); - - switch(format) { - case 1: - draw_block (x,y,80,7,LCD_COLOR_B,DRAW_ERASE); - s[ 0] = days[d->weekday * 2]; - s[ 1] = days[(d->weekday * 2) + 1]; - s[ 2] = ','; - s[ 3] = ' '; - s[ 4] = ((d->day & 0xf0)>>4) + 0x30; - s[ 5] = ((d->day & 0x0f)) + 0x30; - s[ 6] = '.'; - s[ 7] = ' '; - s[ 8] = months[(d->month - 1) * 3]; - s[ 9] = months[((d->month - 1) * 3)+1]; - s[10] = months[((d->month - 1) * 3)+2]; - s[11] = ' '; - s[12] = '2'; - s[13] = '0'; - s[14] = ((d->year & 0xf0)>>4) + 0x30; - s[15] = ((d->year & 0x0f)) + 0x30; - s[16] = 0; - draw_string (x, y, s, LCD_COLOR_B, DRAW_PUT); - break; - default: - draw_block(x,y,57,7,3,DRAW_ERASE); - draw_char (x+0,y,days[d->weekday * 2], LCD_COLOR_B, DRAW_PUT); - draw_char (x+6,y,days[ (d->weekday * 2) + 1], LCD_COLOR_B, DRAW_PUT); - draw_hexC (x+15,y,d->day, LCD_COLOR_B, DRAW_PUT); - draw_char (x+27,y,'.', LCD_COLOR_B, DRAW_PUT); - draw_hexC (x+30,y,d->month, LCD_COLOR_B, DRAW_PUT); - draw_char (x+42,y,'.', LCD_COLOR_B, DRAW_PUT); - draw_hexC (x+45,y,d->year, LCD_COLOR_B, DRAW_PUT); - } - - set_font(f); -} - -void rtcIRQreenable (struct i2cjob_* job) -{ - EXTINT |= (1<<2); - VICIntEnable = INT_EINT2; -} - -void rtcAckIRQ (struct i2cjob_* job) -{ - if (timeInfo & SETNEWTIME) { - rtcbuffer[1] = rtc.time.second; - rtcbuffer[2] = rtc.time.minute; - rtcbuffer[3] = rtc.time.hour; - rtcbuffer[4] = rtc.date.day; - rtcbuffer[5] = rtc.date.weekday; - rtcbuffer[6] = rtc.date.month; - rtcbuffer[7] = rtc.date.year; - i2cintjob.len = 8; - timeInfo &= ~SETNEWTIME; - timeInfo |= TIME_ACCURATE; // doesn't mean it's accurate, just that it was set - } - else { - rtc.time.second = job->buffer[1] & 0x7F; - rtc.time.minute = job->buffer[2] & 0x7F; - rtc.time.hour = job->buffer[3] & 0x3F; - rtc.date.day = job->buffer[4] & 0x3F; - rtc.date.weekday = job->buffer[5] & 0x07; - rtc.date.month = job->buffer[6] & 0x1F; - rtc.date.year = job->buffer[7]; - i2cintjob.len = 1; - } - - if(job->buffer[0] & ALARM_FLAG) - timeInfo |= ALARM_PENDING; - - timeInfo |= TIMECHANGED; - T0overflow = 0; - - i2cintjob.byteaddr = RTCREG_CONTROL_STATUS_2; - i2cintjob.buffer = rtcbuffer; - i2cintjob.buffer[0] = 0x01 | (timeInfo & ALARM_ENABLED); - i2cintjob.onfinish = rtcIRQreenable; - i2cintjob.action = I2C_write; - i2ccurrentjob = &i2cintjob; - I2CONSET = STA; - -} - -void rtcIRQ (void) -{ - EXTINT = (1<<2); - - i2cintjob.buffer = rtcbuffer; - i2cintjob.onfinish = rtcAckIRQ; - i2cintjob.len = 8; - i2cintjob.byteaddr = RTCREG_CONTROL_STATUS_2; - i2cintjob.action = I2C_read; - i2ccurrentjob = &i2cintjob; - I2CONSET = STA; - - if (!(PLLSTAT & (1<<8))) { - if ((rtc.time.second & 0x0f) == 9) - calcBat(0xff); - if ((rtc.time.second & 0x0f) == 0) - showBat(0xff); - } - - VICSoftIntClr = INT_EINT2; - VICIntEnClr = INT_EINT2; -} - -void startRtcIRQ (void) -{ - PINSEL0 |= (1<<31); - EXTWAKE |= (1<<2); - EXTINT |= (1<<2); - - VICVectAddr3 = (unsigned long)&(rtcIRQ); - VICVectCntl3 = VIC_SLOT_EN | INT_SRC_EINT2; - VICIntEnable = INT_EINT2; -} - -void calcBCD (unsigned char* value, char a, char max, char min) -{ - signed char x; - unsigned char y; - - x = (((*value & 0xf0)>>4) * 10 + (*value & 0x0f)) + a; - if (x > max) - x -= (1 + max - min); - if (x < min) - x += (1 + max - min); - y = x % 10; - y |= ((x-y) / 10)<<4; - *value = y; -} - -unsigned char checkBCD (unsigned char value, char max, char min) -{ - signed char x; - unsigned char y; - - x = (((value & 0xf0)>>4) * 10 + (value & 0x0f)); - if (x > max) - x = max; - if (x < min) - x = min; - y = x % 10; - y |= ((x-y) / 10)<<4; - return(y); -} - -void send_time (unsigned char dest, unsigned char wor) -{ - struct RFendpoint_* cur_ep; - - cur_ep = openEP((unsigned char*)&rtc,0, packet_time); - if (cur_ep) - { - cur_ep->dest = dest; - cur_ep->bufferlen = 7; - - cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce; - if(wor) - cur_ep->flags |= EPsendwor; - RF_changestate(RFtx); - } -} - -void ask_for_time (unsigned char dest) -{ - struct RFendpoint_* cur_ep; - - cur_ep = openEP(0,0, packet_time); - if(cur_ep) - { - cur_ep->dest = dest; - cur_ep->data[0] = 0xFF; - cur_ep->bufferlen = 1; - - cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce | EPsendwor; - - RF_changestate(RFtx); - RF_timed_rx(400); - } -} - -void settime_click (FORM* form, CONTROL* control) -{ - VICIntEnClr = INT_EINT2; - rtc.date = ((DATEBOX*)(form->controls[0]))->date; - rtc.time = ((TIMEBOX*)(form->controls[1]))->time; - send_time(0,1); - setTimeDate((struct time_ *)&rtc.time, (struct date_ *)&rtc.date); - timeInfo |= TIME_ACCURATE; - VICIntEnable = INT_EINT2; - - form->flags |= BC_Form_exit; -} - - -// Settings > Clock menu -// -void change_clock (void) -{ - const LABEL label1 = {BC_Labelnotab,0,15,100,10,BOLDFONT,0,"Datum",0}; - DATEBOX datebox1 = {BC_Datebox,0,25,58,9,SMALLFONT,0,{0x00,0x00,0x00,0x00},NULL,NULL}; - const LABEL label2 = {BC_Labelnotab,0,37,100,10,BOLDFONT,0,"Uhrzeit",0}; - TIMEBOX timebox1 = {BC_Timebox,0,47,43,9,SMALLFONT,0,{0x00,0x00,0x00,0x00},NULL,NULL}; - const BUTTON button1 = {BC_Button,0,63,50,15,SMALLFONT,0,"Speichern",settime_click}; - - timebox1.time = rtc.time; - datebox1.date = rtc.date; - - CONTROL* controls[5] = { (CONTROL*)&datebox1, - (CONTROL*)&timebox1, - (CONTROL*)&label1, - (CONTROL*)&label2, - (CONTROL*)&button1}; - - FORM form = {"Datum & Uhrzeit"," ",0,0,0,0,controls,0,5,0,0}; - - form_exec(&form); -} - -/* Globale zur Verfügung stehenden Variablen: -//Variablen für die Zeit: -u08 dayofweek = 1, day = 1, month = 1; -u16 year = 2004; -u08 isschaltjahr; -*/ - -unsigned char isschaltjahr(unsigned int year) { - - if ( (((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0) ) - return 1; - else - return 0; -} - -void calcweekday(struct date_* d) { - - unsigned int tagdesjahres; - unsigned int jahrdiff; - unsigned int tempwochentag; - unsigned char day; - unsigned char month; - unsigned char year; - - day = (d->day >> 4)*10 + (d->day & 0x0f); - month = (d->month >> 4)*10 + (d->month & 0x0f); - year = 2000+(d->year >> 4)*10 + (d->year & 0x0f); - - tagdesjahres = 31*(month-1); - if (month > 2) tagdesjahres = tagdesjahres -3 +isschaltjahr(year); - if (month > 4) tagdesjahres--; - if (month > 6) tagdesjahres--; - if (month > 9) tagdesjahres--; - if (month > 11) tagdesjahres--; - tagdesjahres += day; - - jahrdiff = year -2000; - tempwochentag = jahrdiff + (jahrdiff-1) / 4 - (jahrdiff-1) / 100 + (jahrdiff-1) / 400 + tagdesjahres; - if (jahrdiff > 0) - tempwochentag++; - tempwochentag = (tempwochentag % 7)+3; - if (tempwochentag > 6) - tempwochentag -= 7; - d->weekday = tempwochentag; -} diff --git a/boop/rtc/rtc.h b/boop/rtc/rtc.h deleted file mode 100644 index 81a520e..0000000 --- a/boop/rtc/rtc.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - rtc.h - - Copyright (C) 2008 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef RTC_H -#define RTC_H - -#include "i2c.h" - -#define RTCslaveaddr 0xA2 - -//PCF8563 registers -#define RTCREG_CONTROL_STATUS_1 0x00 -#define RTCREG_CONTROL_STATUS_2 0x01 -#define RTCREG_SECOND 0x02 -#define RTCREG_MINUTES 0x03 -#define RTCREG_HOURS 0x04 -#define RTCREG_DAYS 0x05 -#define RTCREG_WEEKDAYS 0x06 -#define RTCREG_MONTHS_CENTURY 0x07 -#define RTCREG_YEARS 0x08 -#define RTCREG_MINUTE_ALARM 0x09 -#define RTCREG_HOUR_ALARM 0x0A -#define RTCREG_DAY_ALARM 0x0B -#define RTCREG_WEEKDAY_ALARM 0x0C -#define RTCREG_CLKOUT_CONTROL 0x0D -#define RTCREG_TIMER_CONTROL 0x0E -#define RTCREG_TIMER 0x0F - -//RTCREG_CONTROL_STATUS_2 -#define TIMER_INT_EN (1<<0) -#define ALARM_INT_EN (1<<1) -#define TIMER_FLAG (1<<2) -#define ALARM_FLAG (1<<3) - -struct time_ -{ - unsigned char second; - unsigned char minute; - unsigned char hour; - unsigned char tag; -}; - -struct date_ -{ - unsigned char day; - unsigned char weekday; - unsigned char month; - unsigned char year; -}; - -struct rtc_ -{ - struct date_ date; - struct time_ time; -}; - -volatile struct rtc_ rtc; - -volatile unsigned char timeInfo; -#define TIMECHANGED (1<<0) -#define ALARM_ENABLED (1<<1) -#define SETNEWTIME (1<<2) -#define TIME_ACCURATE (1<<3) -#define ALARM_PENDING (1<<3) - - -struct i2cjob_ i2cintjob; -unsigned char rtcbuffer[8]; - -const unsigned char days[14]; - -void initRTC(void); -unsigned char getTimeDate(struct time_* t, struct date_ *d); -void setTimeDate(struct time_* t, struct date_ *d); -void printTime (unsigned char x, unsigned char y, struct time_* t, unsigned char format); -void printDate(unsigned char x, unsigned char y, struct date_* d, unsigned char format); -void rtcIRQ (void); -void startRtcIRQ(void); -void change_clock(void); -void calcweekday(struct date_* d); - -/// Send the time via RF packet @see RF_PACKET_TIME to dest -void send_time(unsigned char dest, unsigned char wor); - -/// Request to receive time via RF packet @see RF_PACKET_TIME from dest -void ask_for_time(unsigned char dest); - -void calcBCD(unsigned char* value, char a, char max, char min); -unsigned char checkBCD(unsigned char value, char max, char min); - -#endif diff --git a/boop/rtc/rtctimer.c b/boop/rtc/rtctimer.c deleted file mode 100644 index 1944f90..0000000 --- a/boop/rtc/rtctimer.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - rtctimer.c - real-time clock timer - Copyright (C) 2010 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "rtc.h" -#include "lcd.h" -#include "fonty.h" -#include "keyboard.h" -#include "global.h" -#include "controls.h" -#include "sid.h" - -void initRTCtimer (void) { - -} - - -void RTCtimer_timer (FORM* form) -{ - ((TIMEBOX*)(form->controls[0]))->time = rtc.time; - control_draw(form->controls[0],0); //redraw timebox1 - if(timeInfo & ALARM_PENDING) { - form->tag=9; - timeInfo &= ~ALARM_PENDING; - } - if(form->tag) { - if(form->tag & 0x01) beep(1); - form->tag--; - } -} - -void RTCsave_click(FORM* form, CONTROL* control) { - struct i2cjob_ job; - unsigned char buffer[4]; - - buffer[0] = ((TIMEBOX*)(form->controls[8]))->time.minute; - buffer[1] = ((TIMEBOX*)(form->controls[8]))->time.hour | (1<<7); - buffer[2] = (1<<7); - buffer[3] = (1<<7); - - job.buffer = buffer; - job.onfinish = 0; - job.len = 4; - job.byteaddr = RTCREG_MINUTE_ALARM; - job.action = I2C_write; - i2c_jobexec(&job); - - timeInfo |= ALARM_ENABLED; -} - -void RTCtimer_edit(void) { - - const char* listbox1items[] = {"Alarm","Tastendruck","Makro","Funktion"}; - const char* listbox2items[] = {"Stunde","Tag","Monat"}; - - TIMEBOX timebox1 = {BC_Timebox | BC_NoTabStop,85,151,43,8,SMALLFONT,0,{0x00,0x00,0x00,0x00},NULL,NULL}; - timebox1.time = rtc.time; - - const LABEL label1 = {BC_Labelnotab,0,20,70,9,BOLDFONT,0,"Timer",0}; - const LABEL label2 = {BC_Labelnotab,0,32,70,9,BOLDFONT,0,"Typ",0}; - const LABEL label3 = {BC_Labelnotab,0,44,70,9,BOLDFONT,0,"Wiederholung",0}; - const LABEL label4 = {BC_Labelnotab,0,56,70,9,BOLDFONT,0,"Alarmzeit",0}; - - NUMBOX numbox1 = {BC_Numbox,76,20,20,9,SMALLFONT,1,1,1,NULL,NULL}; - LISTBOX listbox1 = {BC_Listbox,76,32,50,10,SMALLFONT,0,1,(char**)listbox1items,NULL,NULL}; - LISTBOX listbox2 = {BC_Listbox,76,44,50,10,SMALLFONT,0,1,(char**)listbox2items,NULL,NULL}; - TIMEBOX timebox2 = {BC_Timebox,76,56,43,8,SMALLFONT,0,{0x00,0x00,0x00,0x00},NULL,NULL}; - - const BUTTON button1 = {BC_Button,0,80,60,15,SMALLFONT,0,"Speichern",RTCsave_click}; - - CONTROL* controls[] = { (CONTROL*)&timebox1, - (CONTROL*)&label1, - (CONTROL*)&label2, - (CONTROL*)&label3, - (CONTROL*)&label4, - (CONTROL*)&numbox1, - (CONTROL*)&listbox1, - (CONTROL*)&listbox2, - (CONTROL*)&timebox2, - (CONTROL*)&button1}; - - timebox2.time = rtc.time; - - FORM form = {"Timer bearbeiten","",NULL,NULL,RTCtimer_timer,0,controls,0,NUM_OF_ELEMENTS(controls),0,200}; - form_exec(&form); - - timeInfo &= ~ALARM_ENABLED; -} diff --git a/boop/rtc/rtctimer.h b/boop/rtc/rtctimer.h deleted file mode 100644 index 6bc0018..0000000 --- a/boop/rtc/rtctimer.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - rtctimer.h - real-time clock timer - Copyright (C) 2010 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef RTCTIMER_H -#define RTCTIMER_H - -struct RTCtimer_ { - unsigned char flags; - unsigned char minute; - unsigned char hour; - unsigned char day; - unsigned char month; - unsigned char repeat; //!< repeat alarm: Bit0=So...Bit6=Sa - unsigned char arg[4]; //!< argument for timer execution -}; -#endif - -//RTCtimer_ flags -#define RTCTIMER_TYPEMASK 0x07 -#define RTCTIMER_ALARM 0x00 -#define RTCTIMER_KEY 0x01 -#define RTCTIMER_MACRO 0x02 -#define RTCTIMER_FUNCTION 0x03 -#define RTCTIMER_OBSOLETE (1<<6) -#define RTCTIMER_SLOTFREE (1<<7) - -void RTCtimer_edit(void); diff --git a/boop/serial/serial.c b/boop/serial.c similarity index 70% rename from boop/serial/serial.c rename to boop/serial.c index e67e5ef..9ceb8be 100644 --- a/boop/serial/serial.c +++ b/boop/serial.c @@ -36,25 +36,15 @@ * */ - #include "lpc2220.h" #include "serial.h" -#include "irq.h" -#include "backlight.h" -#include "buffer.h" - -extern const char hval[16]; - -extern void uart0_irq(void); /* flush serial input queue. returns 0 on success or negative error * number otherwise */ int serial_flush_input(void) { - volatile unsigned int tmp=0; - - (void)(tmp); + volatile unsigned int tmp; /* keep on reading as long as the receiver is not empty */ while(RX_DATA(U0LSR)) { @@ -82,96 +72,77 @@ void serial_setbrg (unsigned int baudrate) { /* get correct divisor */ - /*for PCLK 15 Mhz */ U0LCR = 0x83; switch(baudrate) { case 75: - U0DLL = 5; - U0DLM = 195; - U0FDR = (1 << 4) + 3; + U0DLL = 161; + U0DLM = 1; + U0FDR = (1 << 4) + 14; break; case 150: - U0DLL = 5; - U0DLM = 195; - U0FDR = (1 << 4) + 1; + U0DLL = 195; + U0DLM = 0; + U0FDR = (1 << 4) + 15; break; case 300: - U0DLL = 5; - U0DLM = 195; - U0FDR = (1 << 4) + 0; + U0DLL = 184; + U0DLM = 0; + U0FDR = (2 << 4) + 15; break; case 600: - U0DLL = 2; - U0DLM = 78; - U0FDR = (4 << 4) + 1; + U0DLL = 156; + U0DLM = 0; + U0FDR = (1 << 4) + 4; break; case 1200: - U0DLL = 1; - U0DLM = 39; - U0FDR = (4 << 4) + 1; + U0DLL = 130; + U0DLM = 0; + U0FDR = (7 << 4) + 14; break; case 2400: - U0DLL = 186; + U0DLL = 180; U0DLM = 0; - U0FDR = (10 << 4) + 11; + U0FDR = (12 << 4) + 1; break; case 4800: - U0DLL = 93; + U0DLL = 90; U0DLM = 0; - U0FDR = (10 << 4) + 11; + U0FDR = (1 << 4) + 4; break; case 9600: - U0DLL = 71; + U0DLL = 23; U0DLM = 0; - U0FDR = (8 << 4) + 3; - break; - - case 14400: - U0DLL = 31; - U0DLM = 0; - U0FDR = (10 << 4) + 11; + U0FDR = (8 << 4) + 9; break; case 19200: - U0DLL = 38; + U0DLL = 11; U0DLM = 0; - U0FDR = (14 << 4) + 4; - break; - - case 28800: - U0DLL = 24; - U0DLM = 0; - U0FDR = (14 << 4) + 5; + U0FDR = (9 << 4) + 11; break; case 38400: - U0DLL = 19; + U0DLL = 5; U0DLM = 0; - U0FDR = (14 << 4) + 4; + U0FDR = (9 << 4) + 13; break; case 57600: - U0DLL = 12; - U0DLM = 0; - U0FDR = (14 << 4) + 5; - break; - - case 115200: U0DLL = 6; U0DLM = 0; U0FDR = (14 << 4) + 5; break; - case 230400: + case 115200: U0DLL = 3; U0DLM = 0; U0FDR = (14 << 4) + 5; @@ -192,17 +163,9 @@ void serial_setbrg (unsigned int baudrate) int serial_init (void) { // PINSEL0=0x05; // pin select -> tx, rx - serial_setbrg (DEFAULTBRG); + serial_setbrg (115200); // serial_setbrg (57600); U0FCR = 0x07; // enable fifo - uart0_incbuffer = 0; - uart0_outcbuffer = 0; - - // enable IRQ5 for UART0 - VICVectAddr5 = (unsigned long)&(uart0_irq); - VICVectCntl5 = VIC_SLOT_EN | INT_SRC_UART0; - VICIntEnable = INT_UART0; - U0IER = IER_RBR | IER_RXLS; return (0); } @@ -212,23 +175,12 @@ int serial_init (void) */ void serial_putc (const char c) { - // proper CRLF transmission - if (c == '\n') - serial_putc('\r'); - /* wait for room in the transmit FIFO */ while(TX_READY(U0LSR)==0); PUT_CHAR(U0THR,c); } -void serial_putbyte (const char c) -{ - /* wait for room in the transmit FIFO */ - while(TX_READY(U0LSR)==0); - - PUT_CHAR(U0THR,c); -} /* * Read a single byte from the serial port. Returns 1 on success, 0 * otherwise. When the function is succesfull, the character read is @@ -264,6 +216,8 @@ serial_puts (const char *s) } } +const char hval[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; + void putHexC(const unsigned char v) { serial_putc(hval[v>>4]); @@ -281,23 +235,3 @@ void putHexW(const unsigned long v) putHexS(v >> 16); putHexS(v & 0xFFFF); } - -void serial_interactive(void) { - int ch = serial_getc(); - switch (ch) { - case '.': - serial_puts("Betty Boop ("__DATE__ " " __TIME__ ")\n"); - break; - case '0': - setBacklight(0x00); // pwm value - break; - case '1': - setBacklight(0x1F); // pwm value - break; - case '2': - setBacklight(0x3F); // pwm value - break; - default: - serial_putc(ch); - } -} diff --git a/boop/serial/serial.h b/boop/serial.h similarity index 81% rename from boop/serial/serial.h rename to boop/serial.h index 292174f..95739b6 100644 --- a/boop/serial/serial.h +++ b/boop/serial.h @@ -21,32 +21,16 @@ #define USRRxData (1 << 0) #define USRTxHoldEmpty (1 << 6) - -#define IER_RBR 1 -#define IER_THRE 2 -#define IER_RXLS 4 - -#define IIR_RLS 0x06 -#define IIR_RDA 0x04 -#define IIR_CTI 0x0c -#define IIR_THRE 0x02 - #define GET_CHAR(p) p #define PUT_CHAR(p,c) (p= (unsigned )(c)) #define TX_READY(s) ((s) & USRTxHoldEmpty) #define RX_DATA(s) ((s) & USRRxData) -#define DEFAULTBRG 115200 - -struct cBuffer_* uart0_incbuffer; -struct cBuffer_* uart0_outcbuffer; - int serial_flush_input(void); int serial_flush_output(void); void serial_setbrg (unsigned int baudrate); int serial_init (void); void serial_putc (const char c); -void serial_putbyte (const char c); int serial_tstc (void); int serial_getc (void); void serial_puts (const char *s); @@ -55,6 +39,4 @@ void putHexC(const unsigned char v); void putHexS(const unsigned short v); void putHexW(const unsigned long v); -void serial_interactive(void); - #endif /* BOOP_SERIAL_H */ diff --git a/boop/serial/Make.conf b/boop/serial/Make.conf deleted file mode 100644 index e36a9e2..0000000 --- a/boop/serial/Make.conf +++ /dev/null @@ -1,2 +0,0 @@ -THUMBSRCS := serial.c redirector.c -SRCS := serirq.c diff --git a/boop/serial/redirector.c b/boop/serial/redirector.c deleted file mode 100644 index df263bd..0000000 --- a/boop/serial/redirector.c +++ /dev/null @@ -1,306 +0,0 @@ -/* - redirector.h - serial port redirector - Copyright (C) 2009 Telekatz - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "redirector.h" -#include "serial.h" -#include "buffer.h" -#include "global.h" -#include "controls.h" -#include "fonty.h" -#include "rf.h" -#include "timerfuncs.h" - -#define redirectorbuffersize 200 - -extern unsigned int is_drawing; - -struct redirector_ { - struct cBuffer_ incbuffer; - struct cBuffer_ outcbuffer; - struct RFendpoint_* dataout_ep; - struct RFendpoint_* datain_ep; - struct RFendpoint_* cmdout_ep; - struct RFendpoint_* cmdin_ep; - unsigned long lastlen; - unsigned char timeoutcnt; - unsigned char inbuffer[redirectorbuffersize]; - unsigned char outbuffer[redirectorbuffersize]; - unsigned char status; -}; - -const unsigned int listbrg[8] = { 1200,2400,4800,9600,14400,19200,28800,38400}; - -void redirector_start(FORM* form, struct redirector_* redirectorvars) { - - redirectorvars->dataout_ep->dest = ((NUMBOX*)(form->controls[3]))->value; - redirectorvars->lastlen = 0; - redirectorvars->timeoutcnt = 0; - - cBufferFlush(&redirectorvars->incbuffer); - cBufferFlush(&redirectorvars->outcbuffer); - uart0_incbuffer = &redirectorvars->incbuffer; - uart0_outcbuffer = &redirectorvars->outcbuffer; - - redirectorvars->dataout_ep->flags |= EPenabled; - redirectorvars->datain_ep->flags |= EPenabled; - - U0FCR |= (1<<7); // trigger level 1 - serial_setbrg (listbrg[((LISTBOX*)(form->controls[2]))->listindex]); - sysInfo |= SYS_NOPDOWN; - - form->controls[2]->type |= BC_NoTabStop; - form->controls[3]->type |= BC_NoTabStop; - form->controls[5]->type |= BC_Disabled; - form->controls[6]->type &= ~BC_Disabled; - form->sel = 6; - form->flags |= BC_Form_redraw; - -} - -void redirector_start_click(FORM* form, CONTROL* control) { - - volatile unsigned long timeout; - - struct redirector_* redirectorvars; - redirectorvars = (struct redirector_*)form->tag; - - RF_changestate(RFrx); - - redirectorvars->cmdout_ep->dest = ((NUMBOX*)(form->controls[3]))->value; - redirectorvars->cmdout_ep->data[0] = redir_SET; - redirectorvars->cmdout_ep->data[1] = ((LISTBOX*)(form->controls[2]))->listindex; - redirectorvars->cmdout_ep->bufferlen = 2; - redirectorvars->cmdout_ep->flags |= EPnewdata | EPsendwor; - redirectorvars->cmdin_ep->flags &= ~EPnewdata; - - RF_changestate(RFtx); - - addTimeout(&timeout, 200); - while(timeout && !(redirectorvars->cmdin_ep->flags & EPnewdata)); - removeTimeout(&timeout); - - if(!timeout) { - msgbox(30,BC_OKOnly | BC_DefaultButton1,"Fehler:\nZiel antwortet nicht"); - form_draw(form); - RF_changestate(RFwor); - return; - } - - redirectorvars->cmdout_ep->data[0] = redir_START; - redirectorvars->cmdout_ep->bufferlen = 1; - redirectorvars->cmdout_ep->flags |= EPnewdata; - redirectorvars->cmdin_ep->flags &= ~EPnewdata; - - RF_changestate(RFtx); - - addTimeout(&timeout, 200); - while(timeout && !(redirectorvars->cmdin_ep->flags & EPnewdata)); - removeTimeout(&timeout); - - if(!timeout) { - msgbox(30,BC_OKOnly | BC_DefaultButton1,"Fehler:\nZiel antwortet nicht"); - form->flags |= BC_Form_redraw; - RF_changestate(RFwor); - return; - } - - redirector_start(form, redirectorvars); - -} - - -void redirector_stop_click(FORM* form, CONTROL* control) { - - struct redirector_* redirectorvars; - redirectorvars = (struct redirector_*)form->tag; - - redirectorvars->cmdout_ep->dest = ((NUMBOX*)(form->controls[3]))->value; - redirectorvars->cmdout_ep->data[0] = redir_STOP; - redirectorvars->cmdout_ep->bufferlen = 1; - redirectorvars->cmdout_ep->flags |= EPnewdata; - - RF_changestate(RFtx); - - redirectorvars->dataout_ep->flags &= ~EPenabled; - redirectorvars->datain_ep->flags &= ~EPenabled; - - U0FCR &= ~((1<<6) | (1<<7)); // trigger level 0 - uart0_incbuffer = 0; - uart0_outcbuffer = 0; - serial_setbrg (DEFAULTBRG); - sysInfo &= ~SYS_NOPDOWN; - RF_changestate(RFwor); - - form->controls[2]->type &= ~BC_NoTabStop; - form->controls[3]->type &= ~BC_NoTabStop; - form->controls[5]->type &= ~BC_Disabled; - form->controls[6]->type |= BC_Disabled; - form->sel = 5; - form->flags |= BC_Form_redraw; - -} - -#define sendcount 59 -void redirector_timer(FORM* form) { - struct redirector_* redirectorvars; - redirectorvars = (struct redirector_*)form->tag; - - //((NUMBOX*)(form->controls[4]))->value = redirectorvars->outcbuffer.len; - //control_draw(form->controls[4],0); - - if(redirectorvars->incbuffer.len == redirectorvars->lastlen) { - if(redirectorvars->timeoutcnt) - redirectorvars->timeoutcnt--; - } - else { - redirectorvars->timeoutcnt = 2; - } - redirectorvars->lastlen = redirectorvars->incbuffer.len; - - - if(redirectorvars->dataout_ep && redirectorvars->incbuffer.len && !(redirectorvars->dataout_ep->flags & EPnewdata) && - ((redirectorvars->incbuffer.len >= sendcount) | !(redirectorvars->timeoutcnt))) { - - if(redirectorvars->incbuffer.len >= sendcount) - redirectorvars->dataout_ep->bufferlen = sendcount; - else - redirectorvars->dataout_ep->bufferlen = redirectorvars->incbuffer.len; - - redirectorvars->dataout_ep->flags |= EPnewdata; - RF_changestate(RFtx); - } - - if(redirectorvars->outcbuffer.len) { - if(!(U0IER & IER_THRE)) { - U0IER |= IER_THRE; - U0THR = cBufferGet(uart0_outcbuffer); - (((NUMBOX*)(form->controls[4]))->value)++; - control_draw(form->controls[4],0); - } - } - - if(redirectorvars->cmdin_ep->flags & EPnewdata) { - unsigned char ACK = 0; - switch (redirectorvars->cmdin_ep->data[0]) { - case redir_ACK: - break; - case redir_SET: - if (redirectorvars->cmdin_ep->bufferlen > 1) { - if(redirectorvars->cmdin_ep->data[1] <= baud_38400) { - ((LISTBOX*)(form->controls[2]))->listindex = redirectorvars->cmdin_ep->data[1]; - form->flags |= BC_Form_redraw; - } - ACK = 1; - } - break; - case redir_START: - ((NUMBOX*)(form->controls[3]))->value = redirectorvars->cmdin_ep->dest; - form->flags |= BC_Form_redraw; - /*redir_dest = RXframe->srcAddr; - setbaud(redir_baud); - redirector = 1; - ACK = 1;*/ - break; - case redir_STOP: - /*redirector = 0; - setbaud(baud_default); - ACK = 1;*/ - break; - case redir_PING: - ACK = 1; - break; - } - - redirectorvars->cmdin_ep->flags &= ~EPnewdata; - - if(ACK) { - redirectorvars->cmdout_ep->data[0] = redir_ACK; - redirectorvars->cmdout_ep->dest = redirectorvars->cmdin_ep->dest; - redirectorvars->cmdout_ep->bufferlen = 1; - redirectorvars->cmdout_ep->flags |= EPnewdata; - RF_changestate(RFtx); - } - } -} - - -void redirector_test(FORM* form, CONTROL* control) { - - if(uart0_incbuffer) { - cBufferAdd(uart0_incbuffer,'a'); - cBufferAdd(uart0_incbuffer,'b'); - cBufferAdd(uart0_incbuffer,'c'); - } -} - - -// menu (Tool>Redirector) -void uarto_redirector(void) { - - struct redirector_ redirectorvars; - - cBufferInit(&redirectorvars.incbuffer, redirectorvars.inbuffer, redirectorbuffersize); - cBufferInit(&redirectorvars.outcbuffer, redirectorvars.outbuffer, redirectorbuffersize); - - const char* listbox1items[8] = {"1200","2400","4800","9600","14400","19200","28800","38400"}; - - const LABEL label1 = {BC_Labelnotab,0,20,70,9,BOLDFONT,0,"Baud",0}; - const LABEL label2 = {BC_Labelnotab,0,32,70,9,BOLDFONT,0,"Zieladresse",0}; - LISTBOX listbox1 = {BC_Listbox,78,20,40,10,SMALLFONT,5,8,(char**)listbox1items,NULL,NULL}; - NUMBOX numbox1 = {BC_Numbox,78,32,20,9,SMALLFONT,1,0,255,NULL,NULL}; - NUMBOX numbox2 = {BC_Numbox | BC_NoTabStop,0,100,20,9,SMALLFONT,redirectorvars.outcbuffer.len,0,redirectorbuffersize,NULL,NULL}; - BUTTON button1 = {BC_Button,10,120,48,15,SMALLFONT,0,"Start",redirector_start_click}; - BUTTON button2 = {BC_Button | BC_Disabled,70,120,48,15,SMALLFONT,0,"Stop",redirector_stop_click}; - const BUTTON button3 = {BC_Button, 0,50,48,15,SMALLFONT,0,"test",redirector_test}; - - CONTROL* controls[8] = { (CONTROL*)&label1, - (CONTROL*)&label2, - (CONTROL*)&listbox1, - (CONTROL*)&numbox1, - (CONTROL*)&numbox2, - (CONTROL*)&button1, - (CONTROL*)&button2, - (CONTROL*)&button3}; - - FORM form = {"Com redirector","",NULL,NULL,redirector_timer,(unsigned long)&redirectorvars,controls,2,8,0,2}; - - redirectorvars.dataout_ep = openEP(&redirectorvars.incbuffer, 0, packet_redirDAT); - redirectorvars.datain_ep = openEP(&redirectorvars.outcbuffer, 0, packet_redirDAT); - redirectorvars.cmdout_ep = openEP(0, 0, packet_redirCMD); - redirectorvars.cmdin_ep = openEP(0, 0, packet_redirCMD); - - if(redirectorvars.dataout_ep && redirectorvars.datain_ep && redirectorvars.cmdout_ep && redirectorvars.cmdin_ep) { - redirectorvars.dataout_ep->flags |= EPoutput | EPtypecbuffer; - redirectorvars.datain_ep->flags |= EPinput | EPtypecbuffer; - redirectorvars.cmdout_ep->flags |= EPoutput | EPtypedata | EPenabled; - redirectorvars.cmdin_ep->flags |= EPinput | EPtypedata | EPenabled; - form_exec(&form); - } - else { - msgbox(30,BC_OKOnly | BC_DefaultButton1,"Fehler:\nKein freier RF Endpoint\nverfuegbar.\n"); - } - - redirector_stop_click(&form,form.controls[6]); - - closeEP(redirectorvars.datain_ep); - closeEP(redirectorvars.dataout_ep); - closeEP(redirectorvars.cmdin_ep); - closeEP(redirectorvars.cmdout_ep); - -} diff --git a/boop/serial/redirector.h b/boop/serial/redirector.h deleted file mode 100644 index 428fbe8..0000000 --- a/boop/serial/redirector.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - redirector.h - serial port redirector - Copyright (C) 2009 Telekatz - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef REDIRECTOR_H -#define REDIRECTOR_H - -#define redir_ACK 0 -#define redir_SET 1 -#define redir_START 2 -#define redir_STOP 3 -#define redir_PING 4 - -#define baud_1200 0 -#define baud_2400 1 -#define baud_4800 2 -#define baud_9600 3 -#define baud_14400 4 -#define baud_19200 5 -#define baud_28800 6 -#define baud_38400 7 -#define baud_57600 8 -#define baud_115200 9 - -void uarto_redirector(void); - -#endif diff --git a/boop/serial/serirq.c b/boop/serial/serirq.c deleted file mode 100644 index 8216acb..0000000 --- a/boop/serial/serirq.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - serirq.c - serial interrupr - Copyright (C) 2009 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "backlight.h" -#include "lpc2220.h" -#include "serial.h" -#include "buffer.h" - -//volatile int uart0_active = 0; - -void uart0_irq(void) { - char st = U0IIR & 0x0f; - - // IRQ only valid when IIR_bit_0 == 0 - if (st & 1) - return; - - switch (st) { - case IIR_RLS: // Receive Line Status - putHexW(U0LSR); - serial_puts(" RLS?!\n"); - - break; - case IIR_RDA: // Receive Data Available - case IIR_CTI: // Character Time-out indication - if(uart0_incbuffer) { - while(U0LSR & (1 << 0)) { - cBufferAdd(uart0_incbuffer,U0RBR); - } - } - else { - setBacklight(BL_AUTO); - serial_interactive(); - } - break; - case IIR_THRE: - if(uart0_outcbuffer) { - if(uart0_outcbuffer->len) { - unsigned char x = 14; - while(x-- && uart0_outcbuffer->len) { - U0THR = cBufferGet(uart0_outcbuffer); - } - } - else { - U0IER &= ~IER_THRE; - } - } - else { - serial_puts("THRE?!\n"); - } - - } - -} - - diff --git a/boop/sirc_codes.h b/boop/sirc_codes.h new file mode 100644 index 0000000..83b1bac --- /dev/null +++ b/boop/sirc_codes.h @@ -0,0 +1,7 @@ +#ifndef SIRC_CODES_H +#define SIRC_CODES_H + +#include "./ir-codes/sirc/rm-pp411" +#include "./ir-codes/sirc/tv" + +#endif diff --git a/boop/soundcore.c b/boop/soundcore.c new file mode 100644 index 0000000..89a9176 --- /dev/null +++ b/boop/soundcore.c @@ -0,0 +1,961 @@ +/* + soundcore.c - sound core routines (output, ipol, mixing, ...) + Copyright (C) 2007 Ch. Klippel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "irq.h" +#include "soundcore.h" +#include "lpc2220.h" + +#define AUTO_OFF_TIME 0xf000 + +static unsigned char bl_val, cmp_val; +unsigned char out1; +unsigned char timeout; +static unsigned int auto_timeout; + +struct t_voice voices[MAXVOICES]; + +//*************************************************************************** + +typedef unsigned short uint16_t; +typedef unsigned char uint8_t; +typedef signed char int8_t; +typedef signed short int16_t; +typedef unsigned long uint32_t; + + +#define FALSE 0 +#define TRUE 1 + +// CPU clock 16MHz +#define F_CPU 16000000 + +#define FINT (F_CPU/512) // 512=256PWM steps / 0.5 step per PWM interrupt +// FINT = 31250Hz @F_CPU16MHz + +#define FS (FINT/2) +// FS = 15625Hz @F_CPU16MHz + +#define MAXTIME 6000 +#define OSCILLATORS 3 + +struct IIR_filter* filter04_06; + +uint16_t freq_coefficient[OSCILLATORS]; + +uint16_t mstimer=0; + +uint16_t noise; + +// SID registers + +struct Voice +{ + uint16_t Freq; // Frequency: FreqLo/FreqHi + uint16_t PW; // PulseWitdht: PW LO/HI only 12 bits used in SID + uint8_t ControlReg; // NOISE,RECTANGLE,SAWTOOTH,TRIANGLE,TEST,RINGMOD,SYNC,GATE + uint8_t AttackDecay; // bit0-3 decay, bit4-7 attack + uint8_t SustainRelease; // bit0-3 release, bit4-7 sustain +}; + +struct Blocks +{ + struct Voice voice1; + struct Voice voice2; + struct Voice voice3; + uint16_t FC; // not implemented + uint8_t RES_Filt; // partly implemented + uint8_t Mode_Vol; // partly implemented + uint8_t POTX; // not implemented + uint8_t POTY; // not implemented + uint8_t OSC3_Random;// not implemented + uint8_t ENV3; // not implemented +}; + +#define NUMREGISTERS 29 + +union Soundprocessor +{ + struct Blocks block; + uint8_t sidregister[NUMREGISTERS]; +} Sid; + +// SID voice controll register bits +#define GATE (1<<0) +#define SYNC (1<<1) // not implemented +#define RINGMOD (1<<2) // implemented +#define TEST (1<<3) // not implemented +#define TRIANGLE (1<<4) +#define SAWTOOTH (1<<5) +#define RECTANGLE (1<<6) +#define NOISE (1<<7) + +// SID RES/FILT ( reg.23 ) +#define FILT1 (1<<0) +#define FILT2 (1<<1) +#define FILT3 (1<<2) +// SID MODE/VOL ( reg.24 ) +#define VOICE3OFF (1<<7) + +// attack, decay, release envelope timings +uint16_t AttackRate[16]={2,4,16,24,38,58,68,80,100,250,500,800,1000,3000,5000,8000}; +uint16_t DecayReleaseRate[16]={6,24,48,72,114,168,204,240,300,750,1500,2400,3000,9000,15000,24000}; + +// oszillator waveform arrays +int8_t wave0[256]; +int8_t wave1[256]; +int8_t wave2[256]; + +// envelope arrays + +uint8_t envelope[OSCILLATORS]; + +uint16_t m_attack[OSCILLATORS]; +uint16_t m_decay[OSCILLATORS]; +uint16_t m_release[OSCILLATORS]; + +uint8_t release_flag[OSCILLATORS]; +uint8_t attackdecay_flag[OSCILLATORS]; + + +int16_t level_sustain[OSCILLATORS]; +//int test[9]; +//struct IIR_filter filter04_06; +// = {0,0,0,0, B0, B1, B2, A1, A2}; //initialize filter with 0.4 cutoff frequency + +//uint16_t t_attack[OSCILLATORS]; +//uint16_t t_decay[OSCILLATORS]; +//uint16_t t_release[OSCILLATORS]; + +/************************************************************************ + + interrupt routine + + - calculate waverform phases + - calculate waveforms + - set PWM output + - increase system timer + +************************************************************************/ +uint8_t get_wavenum(struct Voice *voice) +{ + uint8_t n; + + if(voice==&Sid.block.voice1) n=0; + if(voice==&Sid.block.voice2) n=1; + if(voice==&Sid.block.voice3) n=2; + + return n; +} + +void setfreq(struct Voice *voice,uint16_t freq) +{ + uint32_t templong; + uint8_t n; + + n=get_wavenum(voice); + + templong=freq; + freq_coefficient[n]=templong*65536/FS; +} + +void init_waveform(struct Voice *voice) +{ + uint16_t n; + int16_t val; + uint8_t wavetype; + int8_t *wave_array; + + wavetype=voice->ControlReg; + + n=get_wavenum(voice); + + if(n==0) wave_array=wave0; + if(n==1) wave_array=wave1; + if(n==2) wave_array=wave2; + + val=-128; + + for(n=0;n<256;n++) + { + *wave_array=0xFF; + + if(wavetype&SAWTOOTH) + { + *wave_array&=val; + } + + if(wavetype&TRIANGLE) + { + if(n&0x80) *wave_array&=((n^0xFF)<<1)-128; + else *wave_array&=(n<<1)-128; + } + + if(wavetype&RECTANGLE) + { + if(n>(voice->PW >> 4)) // SID has 12Bit pwm, here we use only 8Bit + { + *wave_array&=127; + } + else *wave_array&=-127; + } + + // if(wavetype&NOISE) *wave_array&=zufall(); + // noise has to be online calculated + + val++; + wave_array++; + } +} +//#define MAXLEVEL ( 0xFFFF / OSCILLATORS ) +#define MAXLEVEL 19000 +#define SUSTAINFAKTOR ( MAXLEVEL / 15 ) + +void setenvelope(struct Voice *voice) +{ + uint8_t n; + + n=get_wavenum(voice); + attackdecay_flag[n]=TRUE; + +// t_attack[n]=AttackRate[voice->AttackDecay>>4]; +// t_decay[n]=DecayReleaseRate[voice->AttackDecay&0x0F]; +// t_release[n]=DecayReleaseRate[voice->SustainRelease&0x0F]; + level_sustain[n]=(voice->SustainRelease>>4)*SUSTAINFAKTOR; + +// m_attack[n]=MAXLEVEL/t_attack[n]; + m_attack[n]=MAXLEVEL/AttackRate[voice->AttackDecay>>4]; +// m_decay[n]=(MAXLEVEL-level_sustain[n]*SUSTAINFAKTOR)/t_decay[n]; + m_decay[n]=(MAXLEVEL-level_sustain[n]*SUSTAINFAKTOR)/DecayReleaseRate[voice->AttackDecay&0x0F]; + +// m_release[n]=(level_sustain[n]*SUSTAINFAKTOR)/t_release[n]; + m_release[n]=(level_sustain[n])/DecayReleaseRate[voice->SustainRelease&0x0F]; +} +/************************************************************************ + + uint8_t set_sidregister(uint8_t regnum, uint8_t value) + + The registers of the virtual SID are set by this routine. + For some registers it is necessary to transform the SID-register + values to some internal settings of the emulator. + To select this registers and to start the calculation, the switch/ + case statement is used. + For instance: If setting the SID status register, new waveforms in + the waveform array are calculated. + + 4.2007 ch + +************************************************************************/ +uint8_t set_sidregister(uint8_t regnum, uint8_t value) +{ + //uint16_t temp; + uint8_t regnum1; + + regnum1=regnum; + + if (regnum > 13) regnum++; + if (regnum > 6 ) regnum++; + + if(regnum>NUMREGISTERS-1) return 1; + Sid.sidregister[regnum]=value; + + switch(regnum1) + { + //voice1 + case 1: + { + //temp=(Sid.sidregister[0]+(Sid.sidregister[1]<<8))/17; + //setfreq(&Sid.block.voice1,temp); + + freq_coefficient[0]=(Sid.sidregister[0]+(Sid.sidregister[1]<<8))/4; + + }break; + case 3: init_waveform(&Sid.block.voice1);break; + case 4: init_waveform(&Sid.block.voice1);break; + case 5: setenvelope(&Sid.block.voice1);break; + case 6: setenvelope(&Sid.block.voice1);break; + + //voice2 + case 8: + { + //temp=(Sid.sidregister[7]+(Sid.sidregister[8]<<8))/17; + //setfreq(&Sid.block.voice2,temp); + freq_coefficient[1]=(Sid.sidregister[7]+(Sid.sidregister[8]<<8))/4; + }break; + case 10: init_waveform(&Sid.block.voice2);break; + case 11: init_waveform(&Sid.block.voice2);break; + case 12: setenvelope(&Sid.block.voice2);break; + case 13: setenvelope(&Sid.block.voice2);break; + + //voice3 + case 15: + { + //temp=(Sid.sidregister[14]+(Sid.sidregister[15]<<8))/17; + //setfreq(&Sid.block.voice3,temp); + freq_coefficient[2]=(Sid.sidregister[14]+(Sid.sidregister[15]<<8))/4; + }break; + case 17: init_waveform(&Sid.block.voice3);break; + case 18: init_waveform(&Sid.block.voice3);break; + case 19: setenvelope(&Sid.block.voice3);break; + case 20: setenvelope(&Sid.block.voice3);break; + } + return 0; +} + + +void startPWMIRQ(void) +{ + timeout = 0; + auto_timeout = 0; + out1 = 0; + + PWMTC = 0; +// PWMPR = 0; + PWMPR = 0; + PWMMR0 = 0x1FF; // pwm rate + PWMMR2 = 0x00; // pwm value + PWMLER = 0x05; + PWMMCR = 0x03; + PWMPCR = (1<<10); + PWMTCR = 0x03; + PWMTCR = 0x09; + + VICVectAddr0 = (unsigned long)&(soundIRQ); + VICVectCntl0 = VIC_SLOT_EN | INT_SRC_PWM; + //VICIntSelect |= INT_PWM; + VICIntEnable = INT_PWM; + +} + + +void setBL(unsigned char level) +{ + bl_val = level; +} + +unsigned char getBL(void) +{ + return bl_val; +} + + + +void __attribute__ ((interrupt("IRQ"))) soundIRQ (void) +{ + + PWMIR = 0x01; + + static uint16_t phase0,phase1,phase2; + static int16_t temp,temp1; + static uint8_t k,flag=0; + static uint8_t timer; + static uint16_t noise8; + static uint16_t sig0,sig1,sig2; + static uint16_t tempphase; + + + + //DEBUGPIN_ON; // Pin to measure processing time + + flag^=1; + if(flag) + { + //DEBUGPIN_ON; // Pin to measure processing time + // Voice1 + tempphase=phase0+freq_coefficient[0]; //0.88us + if(Sid.block.voice1.ControlReg&NOISE) + { + if((tempphase^phase0)&0x4000) sig0=noise8*envelope[0]; + } + else + { + if(Sid.block.voice1.ControlReg&RINGMOD) + { + if(phase2&0x8000) sig0=envelope[0]*-wave0[phase0>>8]; + else sig0=envelope[0]*wave0[phase0>>8]; + } + else sig0=envelope[0]*wave0[phase0>>8]; //2.07us + } + phase0=tempphase; + + // Voice2 + tempphase=phase1+freq_coefficient[1]; //0.88us + if(Sid.block.voice2.ControlReg&NOISE) + { + if((tempphase^phase1)&0x4000) sig1=noise8*envelope[1]; + } + else + { + if(Sid.block.voice2.ControlReg&RINGMOD) + { + if(phase0&0x8000) sig1=envelope[1]*-wave1[phase1>>8]; + else sig1=envelope[1]*wave1[phase1>>8]; + } + else sig1=0xff*wave1[phase1>>8]; //2.07us + } + phase1=tempphase; + + // Voice3 + tempphase=phase2+freq_coefficient[2]; //0.88us + if(Sid.block.voice3.ControlReg&NOISE) + { + if((tempphase^phase2)&0x4000) sig2=noise8*envelope[2]; + } + else + { + if(Sid.block.voice3.ControlReg&RINGMOD) + { + if(phase1&0x8000) sig2=envelope[2]*-wave2[phase2>>8]; + else sig2=envelope[2]*wave2[phase2>>8]; + } + else sig2=envelope[2]*wave2[phase2>>8]; //2.07us + } + phase2=tempphase; + } + else + { + + // temp=sig0+sig1+sig2; + + // voice filter selection + temp=0; // direct output variable + temp1=0; // filter output variable + if(Sid.block.RES_Filt&FILT1) temp1+=sig0; + else temp+=sig0; + if(Sid.block.RES_Filt&FILT2) temp1+=sig1; + else temp+=sig1; + if(Sid.block.RES_Filt&FILT3) temp1+=sig2; + else if(!(Sid.block.Mode_Vol&VOICE3OFF))temp+=sig2; // voice 3 with specal turn off bit + + //filterOutput = IIR2((struct IIR_filter*)&filter04_06, filterInput); + //IIR2(filter04_06, temp1); + k=(temp>>8)+128; + k+=temp1>>10; // not real filter implemeted yet + + //OCR1A=k; // Output to PWM + PWMMR2 = k; + PWMLER = 0x04; + + //DEBUGPIN_ON; // Pin to measure processing time + + // noise generator + for(k=1;k<2;k++) + { + temp1 = noise; + noise=noise << 1; + + temp1 ^= noise; + if ( ( temp1 & 0x4000 ) == 0x4000 ) + { + noise |= 1; + } + } + noise8=noise>>6; +#ifdef NOISEOFF + noise8=0; +#endif + } + + timer--; + if(timer==0) + { + mstimer++; // increase millisecond timer + // mstimerrate=0.992 milli seconds @FCPU16MHz + timer=31; + } + + + VICVectAddr = 0; +} + + + +// SID Registers +#define VOICE1 0 +#define VOICE2 7 +#define VOICE3 14 +#define CONTROLREG 4 +#define ATTACKDECAY 5 +#define SUSTAINRELEASE 6 + +// SID Control Register Bits +#define GATE (1<<0) +#define GATEOFF 0 +#define SYNC (1<<1) // not implemented +#define RINGMOD (1<<2) +#define TEST (1<<3) // not implemented +#define TRIANGLE (1<<4) +#define SAWTOOTH (1<<5) +#define RECTANGLE (1<<6) +#define NOISE (1<<7) + +// notes VOICE1 +#define C1_1 1+VOICE1,0x02,0+VOICE1,0x25, +#define C2_1 1+VOICE1,0x04,0+VOICE1,0x49, +#define C3_1 1+VOICE1,0x08,0+VOICE1,0x93, +#define C4_1 1,0x11,0,0x25, +#define D4_1 1,0x13,0,0x3F, +#define E4_1 1,0x15,0,0x9A, +#define F4_1 1,0x16,0,0xE3, +#define G4_1 1,0x19,0,0x81, +#define A4_1 1,0x1C,0,0xC6, +#define B4_1 1,0x20,0,0x5E, +#define C5_1 1,0x22,0,0x4B, + +// notes VOICE3 +#define C2_2 1+VOICE2,0x04,0+VOICE2,0x49, +#define C4_2 1+VOICE2,0x11,0+VOICE2,0x25, +#define D4_2 1+VOICE2,0x13,0+VOICE2,0x3F, +#define E4_2 1+VOICE2,0x15,0+VOICE2,0x9A, + +// notes VOICE3 +#define C2_3 1+VOICE3,0x04,0+VOICE3,0x49, +#define C4_3 1+VOICE3,0x11,0+VOICE3,0x25, +#define D4_3 1+VOICE3,0x13,0+VOICE3,0x3F, +#define E4_3 1+VOICE3,0x15,0+VOICE3,0x9A, +#define F4_3 1+VOICE3,0x16,0+VOICE3,0xE3, +#define G4_3 1+VOICE3,0x19,0+VOICE3,0x81, +#define A4_3 1+VOICE3,0x1C,0+VOICE3,0xC6, +#define B4_3 1+VOICE3,0x20,0+VOICE3,0x5E, +#define C5_3 1+VOICE3,0x22,0+VOICE3,0x4B, + +// waveforms +#define SETNOISE_1 4,0x81,5,0xBB,6,0xAD, +#define SETNOISE_2 11,0x81,12,0xBB,13,0xAD, +#define SETNOISE_3 18,0x81,19,0xBB,20,0xAD, +#define SETTRIANGLE_1 4,0x11,5,0xBB,6,0xAA, +#define SETTRIANGLE_2 4+VOICE2,0x11,5+VOICE2,0xBB,6+VOICE2,0xAA, +#define SETTRIANGLE_3 4+VOICE3,0x11,5+VOICE3,0xBB,6+VOICE3,0xAA, +#define SETRECTANGLE_1 VOICE1+CONTROLREG,RECTANGLE+GATE,5+VOICE1,0xBB,6+VOICE1,0xAA, + +#define SLOWATTACK 0xB0 +#define FASTATTACK 0x00 +#define SLOWDECAY 0x0A +#define FASTDECAY 0x00 +#define SUSTAINQUITE 0x00 +#define SUSTAINNORM 0xA0 +#define SUSTAINLOUD 0xF0 +#define SLOWRELEASE 0x09 +#define FASTRELEASE 0x00 + + +// pause controll, no SID registers, values will be interpreted by the EMULATOR +#define QUARTER 0xF0,0x00,0xF1,0x01, // pause quarter tone +#define HALF 0xF0,0x00,0xF1,0x02, // pause half tone +#define ONESEC 0xF0,0x00,0xF1,0x04, // pause 2 seconds +#define TWOSEC 0xF0,0x00,0xF1,0x08, // pause 2 seconds +#define FIVESEC 0xF0,0x00,0xF1,40, // pause 2 seconds +#define STOP 0xFF,0xFF, // stops sound generation + +/**************************************************************************** + + static uint8_t sound[] + + Sound Data Array + + The main programm parses the sound data array. + It reads the register address and data from the array + and writes it to the "virtual SID registers". + 0xF0,0xF1 and 0xFF are no SID registers and interpreted as + controll code for the parser. F0+256*F1 gives the value in milliseconds + to pause parsing and let the SID playing it's sound. + After the pause the next register values are read and written to the SID. + At the end of the array ther should be the values 0xFF,0xFF which stop + the parser and stop sound generation. + + syntax: + +static uint8_t sound[] PROGMEM ={ + sidregister,value, + sidregister,value, + .... + 0xF0,pauselowvalue, + 0xF1,pausehighvalue, + .... + sidregister,value, + sidregister,value, + 0xF0,pauselowvalue, + 0xF1,pausehighvalue, + 0xFF,0xFF // stop command, turn sound off +}; + + April 2007 (c) Christoph Haberer, christoph(at)roboterclub-freiburg.de + +****************************************************************************/ +static uint8_t sound[] = { + +/************************************************************* + attack,decay,sustain,release example +*************************************************************/ + + + SETTRIANGLE_1 // set triangle waveform + + ATTACKDECAY+VOICE1,SLOWATTACK+SLOWDECAY, + SUSTAINRELEASE+VOICE1,SUSTAINNORM+SLOWRELEASE, + + + //ATTACKDECAY+VOICE1,0xAA, + //SUSTAINRELEASE+VOICE1,0x1A, + + //ATTACKDECAY+VOICE1,FASTATTACK+5, + //ATTACKDECAY+VOICE1,0xA, + //SUSTAINRELEASE+VOICE1,0x8A, + //SUSTAINRELEASE+VOICE1,SUSTAINQUITE+FASTRELEASE, + + C4_1 // note C4 one channel1 ( voice1 ) + TWOSEC // wait 2 seconds + //FIVESEC + + VOICE1+CONTROLREG,TRIANGLE+GATEOFF, // gate off to start release cycle + + TWOSEC // wait 2 seconds + + //STOP + +/************************************************************* + tone latter +*************************************************************/ + + SETTRIANGLE_1 + C4_1 + HALF + D4_1 + HALF + E4_1 + HALF + F4_1 + HALF + G4_1 + HALF + A4_1 + HALF + B4_1 + HALF + C5_1 + HALF + + TWOSEC + +/************************************************************* + 3 tone example +*************************************************************/ + + SETTRIANGLE_1 + C4_1 + HALF + SETTRIANGLE_2 + E4_2 + HALF + SETTRIANGLE_3 + G4_3 + HALF + + TWOSEC + + // start release cycle + VOICE1+CONTROLREG,TRIANGLE+GATEOFF, + VOICE2+CONTROLREG,TRIANGLE+GATEOFF, + VOICE3+CONTROLREG,TRIANGLE+GATEOFF, + + TWOSEC + TWOSEC + +/************************************************************* + PWM example +*************************************************************/ + + SETRECTANGLE_1 + C4_1 + + 2,0x00, // set PWM value + 3,0x04, // set PWM value + ONESEC + + 2,0x00, // set PWM value + 3,0x06, // set PWM value + ONESEC + + 2,0x00, // set PWM value + 3,0x08, // set PWM value + TWOSEC + +/************************************************************* + ring modulation example +*************************************************************/ + + SETTRIANGLE_1 + F4_1 + + 6,0x8B, // sustain/release + + SETTRIANGLE_3 + C4_3 + 6+VOICE3,0x08, // sustain/release + + VOICE1+CONTROLREG,0x14, // set ringmod, gate off for decay + VOICE3+CONTROLREG,0x00, // gate off + + TWOSEC + TWOSEC + +/************************************************************* + noise example +*************************************************************/ + + // shotnoise + 1,0x40, + 0,0x00, + SETNOISE_1 + ATTACKDECAY+VOICE1,FASTATTACK+5, + SUSTAINRELEASE+VOICE1,SUSTAINQUITE+FASTRELEASE, + QUARTER + + // shotnoise + 1,0x40, + 0,0x00, + SETNOISE_1 + ATTACKDECAY+VOICE1,FASTATTACK+5, + SUSTAINRELEASE+VOICE1,SUSTAINQUITE+FASTRELEASE, + QUARTER + + // shotnoise + 1,0x40, + 0,0x00, + SETNOISE_1 + ATTACKDECAY+VOICE1,FASTATTACK+5, + SUSTAINRELEASE+VOICE1,SUSTAINQUITE+FASTRELEASE, + QUARTER + + VOICE1+CONTROLREG,NOISE+GATEOFF, + + TWOSEC + + // light noise + SETNOISE_1 + 1,0x40, + 0,0x00, + + ATTACKDECAY+VOICE1,SLOWATTACK+SLOWDECAY, + SUSTAINRELEASE+VOICE1,SUSTAINNORM+0x0B, + TWOSEC + + VOICE1+CONTROLREG,NOISE+GATEOFF, + TWOSEC + + // dark noise + SETNOISE_1 + 1,0x05, + 0,0x00, + TWOSEC + +/************************************************************* + 3 tone example +*************************************************************/ + + SETTRIANGLE_1 + C4_1 + HALF + SETTRIANGLE_2 + E4_2 + HALF + SETTRIANGLE_3 + G4_3 + HALF + + TWOSEC + + // start release cycle + VOICE1+CONTROLREG,TRIANGLE+GATEOFF, + VOICE2+CONTROLREG,TRIANGLE+GATEOFF, + VOICE3+CONTROLREG,TRIANGLE+GATEOFF, + + TWOSEC + TWOSEC + + +/************************************************************* + 3 tone gong +*************************************************************/ +/* + SETTRIANGLE_1 + ATTACKDECAY+VOICE1,FASTATTACK+SLOWDECAY, + SUSTAINRELEASE+VOICE1,1+SLOWRELEASE, + C4_1 + HALF + + SETTRIANGLE_2 + ATTACKDECAY+VOICE2,FASTATTACK+SLOWDECAY, + SUSTAINRELEASE+VOICE2,1+SLOWRELEASE, + D4_2 + HALF + + SETTRIANGLE_3 + ATTACKDECAY+VOICE3,FASTATTACK+SLOWDECAY, + SUSTAINRELEASE+VOICE3,1+SLOWRELEASE, + E4_3 + HALF + + TWOSEC + + // start release cycle + VOICE1+CONTROLREG,TRIANGLE+GATEOFF, + VOICE2+CONTROLREG,TRIANGLE+GATEOFF, + VOICE3+CONTROLREG,TRIANGLE+GATEOFF, +*/ +/*************************************************************/ + STOP + }; + + +void playSID(void) { + + int16_t amp[OSCILLATORS]; + uint16_t schedule_timer,temp; + uint8_t n,flag; + uint8_t controll_regadr[3]; + uint16_t soundindex; + + soundindex = 0; + schedule_timer=0; + noise = 0xaa; + + controll_regadr[0] = 4; + controll_regadr[1] = 12; + controll_regadr[2] = 20; + +// struct Voice voice; + + attackdecay_flag[0]=TRUE; + attackdecay_flag[1]=TRUE; + attackdecay_flag[2]=TRUE; + + //initialize SID-registers + + Sid.sidregister[6]=0xF0; + Sid.sidregister[14]=0xF0; + Sid.sidregister[22]=0xF0; + setenvelope(&Sid.block.voice1); + setenvelope(&Sid.block.voice2); + setenvelope(&Sid.block.voice3); + + // set all amplitudes to zero + for(n=0;nMAXLEVEL) + { + amp[n]=MAXLEVEL; + attackdecay_flag[n]=FALSE; // if level reached, then switch to decay + } + } + else // decay cycle + { + if(amp[n]>level_sustain[n]) + { + amp[n]-=m_decay[n]; + if(amp[n]0) + { + amp[n]-=m_release[n]; + if(amp[n]<0) amp[n]=0; + } + } + envelope[n]=amp[n]>>8; + } + //DEBUGPIN_OFF; // Pin to measure processing time + + //DEBUGPIN_ON; // Pin to measure processing time + if(schedule_timer==0) + { +// schedule_timer=MAXTIME; + + flag=TRUE; + while(flag) + { + n=sound[soundindex]; + soundindex++; + + if(n This program is free software: you can redistribute it and/or modify @@ -16,23 +16,48 @@ along with this program. If not, see . */ -#ifndef SOUND_H -#define SOUND_H +#ifndef SOUNDCORE_H +#define SOUNDCORE_H #define SOUND_OFF 0x00 #define SOUND_ON 0x01 -//IO PINS on P0 -#define SND_ON 6 -#define SND_EN 11 -#define SND_PWM 7 +#define MODE_STOP 0x01 +#define MODE_START 0x02 +#define MODE_ONESHOT 0x04 +#define MODE_LOOP 0x08 +#define MODE_SAMPLE 0x10 +#define MODE_SYNTH 0x20 +#define MODE_FREE 0x40 -void startSoundIRQ(void); +#define MAXVOICES 16 +typedef void(*callback_fn)(void *voice); + +struct t_voice +{ + callback_fn callback; + unsigned char *buffer; + unsigned char mode; + unsigned int len; + unsigned int pos; + short speed; +}; + +extern unsigned char timeout; + +void startPWMIRQ(void); +void __attribute__ ((interrupt("IRQ"))) soundIRQ (void); + +void setBL(unsigned char level); +unsigned char getBL(void); void initSound(void); void switchSound(unsigned char onoff); void playSound(unsigned char *sound, unsigned long len); void stopSound(void); void waitSound(void); +void initVoices(void); + +void playSID(void); #endif diff --git a/boop/audio/sounds.h b/boop/sounds.h similarity index 100% rename from boop/audio/sounds.h rename to boop/sounds.h diff --git a/boop/spaceenc_codes.h b/boop/spaceenc_codes.h new file mode 100644 index 0000000..501d6f4 --- /dev/null +++ b/boop/spaceenc_codes.h @@ -0,0 +1,8 @@ +#ifndef SPACEENC_CODES_H +#define SPACEENC_CODES_H + +#include "ir-codes/spaceenc/seleco_027" +#include "ir-codes/spaceenc/schneider_dtv3" + +#endif + diff --git a/boop/syscalls.c b/boop/syscalls.c deleted file mode 100644 index eea9557..0000000 --- a/boop/syscalls.c +++ /dev/null @@ -1,22 +0,0 @@ -/* based on a example-code from Keil for CS G++ */ - -/* for caddr_t (typedef char * caddr_t;) */ -#include - -extern int _bss_end; - -caddr_t _sbrk ( int incr ) -{ - static unsigned char *heap = NULL; - unsigned char *prev_heap; - - if (heap == NULL) { - heap = (unsigned char *)&_bss_end; - } - prev_heap = heap; - /* check removed to show basic approach */ - - heap += incr; - - return (caddr_t) prev_heap; -} diff --git a/boop/timer/Make.conf b/boop/timer/Make.conf deleted file mode 100644 index 6a23f8a..0000000 --- a/boop/timer/Make.conf +++ /dev/null @@ -1,2 +0,0 @@ -THUMBSRCS := timerfuncs.c -SRCS := timerirq.c diff --git a/boop/timer/timerfuncs.c b/boop/timer/timerfuncs.c deleted file mode 100644 index 7467050..0000000 --- a/boop/timer/timerfuncs.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - timerfuncs.c - timer control functions - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "timerfuncs.h" -#include "irq.h" -#include "keyboard.h" - -extern struct CB callbacks[MAX_CB]; -extern unsigned long* timeouts[MAX_TO]; - -void startTimerIRQ(void) -{ - int i; - struct CB *cur_cb; - - for(i=0; istate = SLOT_FREE; - cur_cb->exec = 0; - } - - for(i=0; i PR = 15 - 1 = 0x0e - T0MR0 = 250; // 1.000.000 Hz / 250 = 4000 Hz = 0,25msec intervall time - T0MCR = 0x03; // reset and issue IRQ on TC == MR0 - T0TCR = 0x01; // enable timer - - T0overflow = 0; - - VICVectAddr15 = (unsigned long)&(timerIRQ); - VICVectCntl15 = VIC_SLOT_EN | INT_SRC_TIMER0; - VICIntEnable = INT_TIMER0; -} - -void wait5ms(void) { - - unsigned long x; - - x=T0TC; - while(x==T0TC); - while(x!=T0TC); -} - -void waitus(unsigned long d) { - - unsigned long x,y; - - x=(T0TC+d)%5000; - y= T0overflow; - - if(xT0TC); -} - -unsigned int addTimerCB(cb_fn cb, unsigned short intervall) -{ - int i; - struct CB *cur_cb; - - for(i=0; istate == SLOT_FREE) - { - cur_cb->exec = cb; - cur_cb->intervall = intervall; - cur_cb->cur_intervall = 0; - cur_cb->state = SLOT_HALT | SLOT_USED; - return i; - } - i++; - } - return 0xFF; -} - -unsigned int removeTimerCB(unsigned int cb) -{ - if(cb < MAX_CB) - { - callbacks[cb].state = SLOT_FREE; - return MAX_CB; - } - return 0xFF; -} - -void startCB(unsigned int cb) -{ - if(cb < MAX_CB) - { - callbacks[cb].state &= ~SLOT_HALT; - } -} - -void stopCB(unsigned int cb) -{ - if(cb < MAX_CB) - { - callbacks[cb].state |= SLOT_HALT; - } -} - -void setCBIntervall(unsigned int cb, unsigned short intervall) -{ - if(cb < MAX_CB) - { - callbacks[cb].intervall = intervall; - callbacks[cb].cur_intervall = 0; - } -} - -unsigned char addTimeout(volatile unsigned long* counter, unsigned long value) { - - int i; - - for(i=0; i - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef TIMERFUNCS_H -#define TIMERFUNCS_H - -//////////////////////////////////////////////// -///@Attention: Timer are using 5msec intervall! -//////////////////////////////////////////////// -#define TIME_MSEC2TICKS(t) (t/5) - -#include "timerirq.h" - -volatile unsigned long T0overflow; - -void startTimerIRQ(void); - -/** -@brief Alocate a timer, set the time but do *NOT* start. - - Use @see startCB to start the timer - -@Param Timer expiry callback, time intervall - -@return index of the allocated timer on success - 0xFF is no timer left -*/ -unsigned int addTimerCB(cb_fn cb, unsigned short intervall); -unsigned int removeTimerCB(unsigned int cb); -void startCB(unsigned int cb); -void stopCB(unsigned int cb); -void setCBIntervall(unsigned int cb, unsigned short intervall); -void wait5ms(void); -void waitus(unsigned long d); -unsigned char addTimeout(volatile unsigned long* counter, unsigned long value); -unsigned char removeTimeout(volatile unsigned long* counter); - -#endif diff --git a/boop/timer/timerirq.c b/boop/timer/timerirq.c deleted file mode 100644 index 873274f..0000000 --- a/boop/timer/timerirq.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - timerirq.c - timekeeping and calllbacks - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "lpc2220.h" -#include "timerirq.h" -#include "timerfuncs.h" -#include "lcd.h" - -#define TIMER_PRESCALER 20 - -struct CB callbacks[MAX_CB]; -unsigned long* timeouts[MAX_TO]; -unsigned char timerPrescaler = TIMER_PRESCALER; -unsigned char bl_val, cmp_val; // backlight PWM - -// wird alle 0.25 ms aufgerufen (s. startTimerIRQ() in timerfuncs) -// bearbeitet eingetragene "timer" -void __attribute__ ((section(".text.fastcode"))) timerIRQ(void) -{ - // backlight pwm - cmp_val += bl_val; - if (cmp_val >= 63) - { - FIODIR0 |= (1<<4); // sck0/P0.4 - cmp_val -= 63; - } - else - { - FIODIR0 &= ~(1<<4); // sck0/P0.4 - } - - - if(--timerPrescaler) { - T0IR = 1; - return; - } - timerPrescaler = TIMER_PRESCALER; - - //5 msec intervall time - unsigned int cnt; - struct CB *cur_cb; - - for(cnt=0; cntstate & SLOT_USED) - { - if(!(cur_cb->state & SLOT_HALT)) - { - cur_cb->cur_intervall++; - if(cur_cb->cur_intervall >= cur_cb->intervall) - { - if(cur_cb->exec) - (cur_cb->exec)(cnt); // run callback function - cur_cb->cur_intervall = 0; - } - } - } - } - - for(cnt = 0; cnt < MAX_TO; cnt++) { - if(timeouts[cnt]) { - if(*timeouts[cnt]) - (*timeouts[cnt])--; - else - timeouts[cnt] = 0; - } - } - - if(oldsymbols != symbols) { - volatile cb_fn x; - x=refresh_symbols; - x(0xff); - } - - T0overflow++; - T0IR = 1; -} diff --git a/boop/timer/timerirq.h b/boop/timer/timerirq.h deleted file mode 100644 index c39a6ae..0000000 --- a/boop/timer/timerirq.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - timerirq.h - timekeeping and calllbacks - Copyright (C) 2007 Ch. Klippel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef TIMERIRQ_H -#define TIMERIRQ_H - -#define MAX_CB 32 -#define MAX_TO 10 - -#define SLOT_FREE 0x00 -#define SLOT_USED 0x01 -#define SLOT_HALT 0x02 - -typedef void(*cb_fn)(unsigned int cb); - -typedef struct CB -{ - unsigned int state; - unsigned short cur_intervall; - unsigned short intervall; - cb_fn exec; -} CB; - -void __attribute__ ((section(".text.fastcode"))) timerIRQ (void); - -#endif diff --git a/boop/tools/Make.conf b/boop/tools/Make.conf deleted file mode 100644 index 1ed1f58..0000000 --- a/boop/tools/Make.conf +++ /dev/null @@ -1 +0,0 @@ -THUMBSRCS := toolsmenu.c scart_icp.c diff --git a/boop/tools/scart_icp.c b/boop/tools/scart_icp.c deleted file mode 100644 index 3bc6cb2..0000000 --- a/boop/tools/scart_icp.c +++ /dev/null @@ -1,715 +0,0 @@ -/* - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ -#ifndef DEBUGMODE - #define USE_SCART_ICP 1 -#endif - -#include "lpc2220.h" -#include "lcd.h" -#include "fonty.h" -#include "keyboard.h" - -#if USE_SCART_ICP - -#include "scart_icp.h" -#include "scart_image.h" - - - -/* The portpins (P0.x) to use to connect to scart */ -#define PIN_RST (1<<14) /* Portpin P0.14 to RST/P1.5 on Scart */ -#define PIN_PDA (1<<1) /* Portpin P0.1 to PDA/P0.4 on Scart */ -#define PIN_PCL (1<<0) /* Portpin P0.0 to PCL/P0.5 on Scart */ - -/* bit mask for port value and direction register */ -#define PORT_MASK (PIN_RST | PIN_PDA | PIN_PCL) -/* bit mask for pin function select register */ -#define PINSEL_MASK (((PIN_RST*PIN_RST) | (PIN_PDA*PIN_PDA) | (PIN_PCL*PIN_PCL)) * 3) - - -/* Definitions of the ICP commands/opcodes */ -/* see http://www.zlgmcu.com/philips/yingrong/lpc900/LPC900_ICP_Spec_en.pdf */ -#define OP_NOP 0x00 /* NOP */ -#define OP_WR_FMADRL 0x08 /* Write address low command */ -#define OP_RD_FMADRL 0x09 /* Read address low command */ -#define OP_WR_FMADRH 0x0A /* Write address high command */ -#define OP_RD_FMADRH 0x0B /* Read address high command */ -#define OP_WR_FMCON 0x0E /* Write a command to FMCON */ -#define OP_RD_FMCON 0x0F /* Read a command from FMCON */ -#define OP_WR_FMDATA_PG 0x14 /* Write a command to FMDATA and increment address */ -#define OP_RD_FMDATA_PG 0x15 /* Read a command from FMDATA and increment address */ -#define OP_WR_FMDATA 0x0C /* Write a command to FMDATA */ -#define OP_RD_FMDATA 0x0D /* Read a command from FMDATA */ -#define OP_WR_FMDATA_I 0x04 /* Write a command to FMDATA and increment address */ -#define OP_RD_FMDATA_I 0x05 /* Read a command from FMDATA and increment address */ - -#define CMD_LOAD 0x00 /* Clear and then load the page register */ -#define CMD_PROG 0x48 /* Program page with page register command */ -#define CMD_ERS_G 0x72 /* Erase global command */ -#define CMD_ERS_S 0x71 /* Erase sector command */ -#define CMD_ERS_P 0x70 /* Erase page command */ -#define CMD_CONF 0x6C /* Accesses user configuration information addressed by FMADRL */ -#define CMD_CRC_G 0x1A /* Calculate CRC on the entire user code command */ -#define CMD_CRC_S 0x19 /* Calculate CRC on a sector command */ -#define CMD_CCP 0x67 /* Clear configuration protection */ - -#define ADR_UCFG1 0x00 /* User Configuration Reg. #1 */ -#define ADR_UCFG2 0x01 /* User Configuration Reg. #2 */ -#define ADR_BootVector 0x02 /* Bootvector */ -#define ADR_StatusByte 0x03 /* Status Byte */ -#define ADR_SEC0 0x08 /* Security byte, sector 0 */ -#define ADR_SEC1 0x09 /* Security byte, sector 1 */ -#define ADR_SEC2 0x0A /* Security byte, sector 2 */ -#define ADR_SEC3 0x0B /* Security byte, sector 3 */ -#define ADR_SEC4 0x0C /* Security byte, sector 4 */ -#define ADR_SEC5 0x0D /* Security byte, sector 5 */ -#define ADR_SEC6 0x0E /* Security byte, sector 6 */ -#define ADR_SEC7 0x0F /* Security byte, sector 7 */ -#define ADR_MFGID 0x10 /* Manufacturer ID */ -#define ADR_ID1 0x11 /* Device ID 1 */ -#define ADR_ID2 0x12 /* Device ID 2 */ - - -/* Scart's flash memory attributes */ -#define PAGE_SIZE 64 /* flash page size of LPC931 */ -#define SECTOR_SIZE 1024 /* flash sector size of LPC931 */ - - -/* saved pin configuration for later restore */ -static unsigned int savedPinsel0, savedPindir0, savedPin0; - - -/**************************************************************************/ -/* icp_init() */ -/* Purpose: Initialize the portpins for use as ICP */ -/* Input: - */ -/* Output: - */ -/* Return: - */ -/**************************************************************************/ -static void icp_init() -{ - /* save the current pin configuration */ - savedPinsel0 = PINSEL0; - savedPindir0 = FIODIR0; - savedPin0 = FIOPIN0; - - /* setup all used pins as GPIO, output, low */ - PINSEL0 &= ~PINSEL_MASK; - FIODIR0 |= (PIN_RST | PIN_PDA | PIN_PCL); - FIOCLR0 = (PIN_RST | PIN_PDA | PIN_PCL); -} - -/**************************************************************************/ -/* icp_close() */ -/* Purpose: Configure the portpins as they was before used for ICP */ -/* Input: - */ -/* Output: - */ -/* Return: - */ -/**************************************************************************/ -static void icp_close() -{ - /* restore the saved pin configuration */ - PINSEL0 = (PINSEL0 & ~PINSEL_MASK) | (savedPinsel0 & PINSEL_MASK); - FIODIR0 = (FIODIR0 & ~PORT_MASK) | (savedPindir0 & PORT_MASK); - FIOPIN0 = (FIOPIN0 & ~PORT_MASK) | (savedPin0 & PORT_MASK); -} - -/**************************************************************************/ -/* icp_wait_us() */ -/* Purpose: Wait some us */ -/* Input: time: the time to wait in us */ -/* Output: - */ -/* Return: - */ -/**************************************************************************/ -static void icp_wait_us(int time) -{ - int start; - - /* use Timer0, which increments every 1us and rollover at T0MR0 */ - start = T0TC; - if ((start + time) < T0MR0) - { - while (T0TC < (start + time)); - } - else - { - while ((T0TC < (start + time - T0MR0)) || (T0TC >= start)); - } -} - -/**************************************************************************/ -/* icp_wait_ns() */ -/* Purpose: Wait some ns */ -/* Input: time: the time to wait in ns */ -/* Output: - */ -/* Return: - */ -/**************************************************************************/ -static void icp_wait_ns(int time) -{ - int i; - - /* inaccurate, but okay */ - for (i=0; i<(time>>4); i++); -} - -/**************************************************************************/ -/* icp_mode_entry() */ -/* Purpose: Bring the scart's CPU into ICP mode */ -/* Input: - */ -/* Output: - */ -/* Return: - */ -/**************************************************************************/ -static void icp_mode_entry() -{ - int i; - - /* see ICP spec */ - for (i=0; i<8; i++) - { - FIOCLR0 = PIN_RST; - icp_wait_us(10); - FIOSET0 = PIN_RST; - icp_wait_us(10); - } - icp_wait_us(50); -} - -/**************************************************************************/ -/* icp_mode_exit() */ -/* Purpose: Bring the scart's CPU out of ICP mode, reset CPU */ -/* Input: - */ -/* Output: - */ -/* Return: - */ -/**************************************************************************/ -static void icp_mode_exit() -{ - FIOCLR0 = (PIN_RST | PIN_PDA | PIN_PCL); -} - -/**************************************************************************/ -/* icp_shift_out() */ -/* Purpose: Shift out one byte to scart */ -/* Input: val: byte to shift out */ -/* Output: - */ -/* Return: - */ -/**************************************************************************/ -static void icp_shift_out(unsigned char val) -{ - int i; - - for (i=0; i<8; i++) - { - FIOCLR0 = PIN_PCL; - icp_wait_ns(50); - if (val & 1) - { - FIOSET0 = PIN_PDA; - } - else - { - FIOCLR0 = PIN_PDA; - } - val >>= 1; - icp_wait_ns(50); - FIOSET0 = PIN_PCL; - icp_wait_ns(100); - } - icp_wait_ns(100); -} - -/**************************************************************************/ -/* icp_shift_in() */ -/* Purpose: Shift in one byte from scart */ -/* Input: - */ -/* Output: - */ -/* Return: byte shifted in */ -/**************************************************************************/ -static unsigned char icp_shift_in() -{ - int i; - unsigned char val; - - /* configure pin as input */ - FIODIR0 &= ~PIN_PDA; - val = 0; - for (i=0; i<8; i++) - { - FIOCLR0 = PIN_PCL; - icp_wait_ns(100); - val >>= 1; - val |= ((FIOPIN0 & PIN_PDA) ? 0x80 : 0); - FIOSET0 = PIN_PCL; - icp_wait_ns(100); - } - /* configure pin as output */ - FIODIR0 |= PIN_PDA; - icp_wait_ns(100); - return val; -} - -/**************************************************************************/ -/* icp_read_config_byte() */ -/* Purpose: Read a configuration byte from scart */ -/* Input: adr: address of the config byte */ -/* Output: - */ -/* Return: value of the config byte */ -/**************************************************************************/ -static unsigned char icp_read_config_byte(unsigned char adr) -{ - icp_shift_out(OP_WR_FMCON); - icp_shift_out(CMD_CONF); - icp_shift_out(OP_WR_FMADRL); - icp_shift_out(adr); - icp_shift_out(OP_RD_FMDATA); - return icp_shift_in(); -} - -/**************************************************************************/ -/* icp_write_config_byte() */ -/* Purpose: Write a configuration byte to scart */ -/* Input: adr: address of the config byte */ -/* val: value of the config byte */ -/* Output: - */ -/* Return: 0 on success, else error code */ -/**************************************************************************/ -static unsigned char icp_write_config_byte(unsigned char adr, unsigned char val) -{ - unsigned char status; - - icp_shift_out(OP_WR_FMCON); - icp_shift_out(CMD_CONF); - icp_shift_out(OP_WR_FMADRL); - icp_shift_out(adr); - icp_shift_out(OP_WR_FMDATA); - icp_shift_out(val); - - do - { - icp_shift_out(OP_RD_FMCON); - status = icp_shift_in(); - } while ((status & 0x8F) == 0x80); - - return (status & 0x8F); -} - -/**************************************************************************/ -/* icp_calc_sector_crc() */ -/* Purpose: Calculate the CRC of one sector */ -/* Input: adr: start address of the sector */ -/* Output: crc: value of the CRC */ -/* Return: 0 on success, else error code */ -/**************************************************************************/ -static unsigned char icp_calc_sector_crc(unsigned short adr, unsigned int *pcrc) -{ - int i; - unsigned char status; - - icp_shift_out(OP_WR_FMADRH); - icp_shift_out(adr>>8); - icp_shift_out(OP_WR_FMCON); - icp_shift_out(CMD_CRC_S); - - do - { - icp_shift_out(OP_RD_FMCON); - status = icp_shift_in(); - } while ((status & 0x8F) == 0x80); - - if (status & 0x8F) return (status & 0x8F); - - *pcrc = 0; - for (i=0; i<4; i++) - { - icp_shift_out(OP_RD_FMDATA_I); - *pcrc >>= 8; - *pcrc |= (unsigned int)icp_shift_in() << 24; - } - return 0; -} - -/**************************************************************************/ -/* icp_load_page_register() */ -/* Purpose: Load the page registers with bytes */ -/* Input: adr: start address of the bytes in the flash */ -/* pval: pointer to the bytes to load */ -/* nbytes: number of bytes to load */ -/* Output: - */ -/* Return: - */ -/**************************************************************************/ -static void icp_load_page_register(unsigned short adr, const unsigned char *pval, unsigned char nbytes) -{ - int i; - - icp_shift_out(OP_WR_FMCON); - icp_shift_out(CMD_LOAD); - icp_shift_out(OP_WR_FMADRL); - icp_shift_out(adr & 0xFF); - icp_shift_out(OP_WR_FMDATA_PG); - for (i=0; i> 8); - icp_shift_out(OP_WR_FMCON); - icp_shift_out(CMD_PROG); - - do - { - icp_shift_out(OP_RD_FMCON); - status = icp_shift_in(); - } while ((status & 0x8F) == 0x80); - - return (status & 0x8F); -} - -/**************************************************************************/ -/* icp_erase_sector() */ -/* Purpose: Erase one flash sector */ -/* Input: adr: start address of the sector in the flash */ -/* Output: - */ -/* Return: 0 on success, else error code */ -/**************************************************************************/ -static unsigned char icp_erase_sector(unsigned short adr) -{ - unsigned char status; - - icp_shift_out(OP_WR_FMADRH); - icp_shift_out(adr >> 8); - icp_shift_out(OP_WR_FMCON); - icp_shift_out(CMD_ERS_S); - - do - { - icp_shift_out(OP_RD_FMCON); - status = icp_shift_in(); - } while ((status & 0x8F) == 0x80); - - return (status & 0x8F); -} - -void scart_icp_header(void) { - set_font(BOLDFONT); - draw_string(0, 0, "Scart ICP", 3, DRAW_PUT); - draw_block(0,10,128,2,3,DRAW_PUT); - draw_block(0,149,128,2,3,DRAW_PUT); - set_font(SMALLFONT); -} - -/**************************************************************************/ -/* scart_icp() */ -/* Purpose: Use ICP to program an image into scart's flash */ -/* and read some infos from scart */ -/* Input: - */ -/* Output: - */ -/* Return: - */ -/**************************************************************************/ -void scart_icp(void) -{ - int i; - unsigned short offs, addr, blklen; - unsigned int err, crc_sc, crc_im, tap, poly, crcf; - unsigned char data; - - - set_font(SMALLFONT); - - lcd_fill(0); - scart_icp_header(); - draw_string(0, 20, "Um Schaeden an der Betty", 3, DRAW_PUT); - draw_string(0, 29, "und am Scart-Adapter zu", 3, DRAW_PUT); - draw_string(0, 38, "vermeiden, folgen Sie", 3, DRAW_PUT); - draw_string(0, 47, "bitte den Anweisungen!", 3, DRAW_PUT); - draw_string(0, 56, "Entfernen Sie alle", 3, DRAW_PUT); - draw_string(0, 65, "Kabel von der Betty!", 3, DRAW_PUT); - draw_string(0, 74, "Druecken Sie dann OK.", 3, DRAW_PUT); - draw_string(0, 83, "Oder druecken Sie EXIT", 3, DRAW_PUT); - draw_string(0, 92, "um jetzt abzubrechen.", 3, DRAW_PUT); - - do - { - waitKeyUpDown(); - } while(!KEY_OK && !KEY_Exit); - - if (KEY_Exit) return; - - /* init port pins */ - icp_init(); - - lcd_fill(0); - scart_icp_header(); - draw_string(0, 20, "Trennen Sie zuerst die", 3, DRAW_PUT); - draw_string(0, 29, "Stromversorgung des", 3, DRAW_PUT); - draw_string(0, 38, "SCART-Adapters.", 3, DRAW_PUT); - draw_string(0, 47, "Verbinden Sie danach die", 3, DRAW_PUT); - draw_string(0, 56, "Betty mit dem SCART-", 3, DRAW_PUT); - draw_string(0, 65, "Adapter. Schliessen Sie", 3, DRAW_PUT); - draw_string(0, 74, "dann die Stromversorgung", 3, DRAW_PUT); - draw_string(0, 83, "des SCART-Adapters", 3, DRAW_PUT); - draw_string(0, 92, "wieder an.", 3, DRAW_PUT); - draw_string(0, 101, "Druecken Sie dann OK.", 3, DRAW_PUT); - - do - { - waitKeyUpDown(); - } while(!KEY_OK); - - /* bring scart into ICP mode */ - icp_mode_entry(); - - while (1) - { - lcd_fill(0); - scart_icp_header(); - draw_string(0, 20, "Druecken Sie eine Taste", 3, DRAW_PUT); - draw_string(0, 40, "1 Lese Config-Bytes", 3, DRAW_PUT); - draw_string(0, 49, "2 Programmiere Image", 3, DRAW_PUT); - draw_string(0, 58, "3 Vergleiche CRCs", 3, DRAW_PUT); - draw_string(0, 67, "4 Schreibe Config-Bytes", 3, DRAW_PUT); - draw_string(0, 84, "Exit Beenden", 3, DRAW_PUT); - - do - { - waitKeyUpDown(); - } while(!KEY_Exit && !KEY_1 && !KEY_2 && !KEY_3 && !KEY_4); - - lcd_fill(0); - scart_icp_header(); - if (KEY_Exit) break; - - if (KEY_1) - { /* show all config bytes */ - draw_string(0, 14, "UCFG1 & 2", 3, DRAW_PUT); - draw_hexC (60, 14, icp_read_config_byte(ADR_UCFG1), 3, DRAW_PUT); - draw_hexC (80, 14, icp_read_config_byte(ADR_UCFG2), 3, DRAW_PUT); - draw_string(0, 23, "BootVector", 3, DRAW_PUT); - draw_hexC (60, 23, icp_read_config_byte(ADR_BootVector), 3, DRAW_PUT); - draw_string(0, 32, "StatusByte", 3, DRAW_PUT); - draw_hexC (60, 32, icp_read_config_byte(ADR_StatusByte), 3, DRAW_PUT); - draw_string(0, 41, "SEC0", 3, DRAW_PUT); - draw_hexC (60, 41, icp_read_config_byte(ADR_SEC0), 3, DRAW_PUT); - draw_string(0, 50, "SEC1", 3, DRAW_PUT); - draw_hexC (60, 50, icp_read_config_byte(ADR_SEC1), 3, DRAW_PUT); - draw_string(0, 59, "SEC2", 3, DRAW_PUT); - draw_hexC (60, 59, icp_read_config_byte(ADR_SEC2), 3, DRAW_PUT); - draw_string(0, 68, "SEC3", 3, DRAW_PUT); - draw_hexC (60, 68, icp_read_config_byte(ADR_SEC3), 3, DRAW_PUT); - draw_string(0, 77, "SEC4", 3, DRAW_PUT); - draw_hexC (60, 77, icp_read_config_byte(ADR_SEC4), 3, DRAW_PUT); - draw_string(0, 86, "SEC5", 3, DRAW_PUT); - draw_hexC (60, 86, icp_read_config_byte(ADR_SEC5), 3, DRAW_PUT); - draw_string(0, 95, "SEC6", 3, DRAW_PUT); - draw_hexC (60, 95, icp_read_config_byte(ADR_SEC6), 3, DRAW_PUT); - draw_string(0, 104, "SEC7", 3, DRAW_PUT); - draw_hexC (60, 104, icp_read_config_byte(ADR_SEC7), 3, DRAW_PUT); - draw_string(0, 113, "MFGID", 3, DRAW_PUT); - draw_hexC (60, 113, icp_read_config_byte(ADR_MFGID), 3, DRAW_PUT); - draw_string(0, 122, "ID1", 3, DRAW_PUT); - draw_hexC (60, 122, icp_read_config_byte(ADR_ID1), 3, DRAW_PUT); - draw_string(0, 131, "ID2", 3, DRAW_PUT); - draw_hexC (60, 131, icp_read_config_byte(ADR_ID2), 3, DRAW_PUT); - } - - if (KEY_2) - { /* erase sectors and program image */ - draw_string(0, 20, "Loesche", 3, DRAW_PUT); - - /* only erase first 7 sectors, not all! */ - for (i=0; i<7; i++) - { - draw_block (0, 29, 128, 9, 3, DRAW_ERASE); - draw_string(0, 29, "Sektor", 3, DRAW_PUT); - draw_numU (40, 29, i, 0, 3, DRAW_PUT); - err = icp_erase_sector(i*SECTOR_SIZE); - if (err) break; - } - - if (!err) - { - lcd_fill(0); - draw_string(0, 20, "Programmiere", 3, DRAW_PUT); - } - - offs = 0; - addr = scart_image_startaddr; - while (!err && (offs < sizeof(scart_image))) - { - blklen = (addr | (PAGE_SIZE-1)) + 1 - addr; - if ((sizeof(scart_image) - offs) < blklen) - { - blklen = sizeof(scart_image) - offs; - } - - draw_block(0, 29, 128, 9, 3, DRAW_ERASE); - draw_hexS (0, 29, addr, 3, DRAW_PUT); - - icp_load_page_register(addr, &scart_image[offs], blklen); - err = icp_prog_page_register(addr); - - addr += blklen; - offs += blklen; - } - - if (!err) - { - draw_block(0, 29, 128, 9, 3, DRAW_ERASE); - draw_string(0, 29, "BootVector", 3, DRAW_PUT); - err = icp_write_config_byte(ADR_BootVector, scart_bootvec); - } - if (!err) - { - draw_block(0, 29, 128, 9, 3, DRAW_ERASE); - draw_string(0, 29, "StatusByte", 3, DRAW_PUT); - err = icp_write_config_byte(ADR_StatusByte, scart_bootstat); - } - if (err) - { - draw_string(0, 40, "Fehler", 3, DRAW_PUT); - draw_hexC (40, 40, err, 3, DRAW_PUT); - } - else - { - draw_string(0, 40, "OK", 3, DRAW_PUT); - } - } - - if (KEY_3) - { /* compare CRC of all programmed sectors */ - draw_string(0, 20, "Vergleiche", 3, DRAW_PUT); - err = 0; - crc_sc = 0; - offs = 0; - addr = scart_image_startaddr; - while (!err && (offs < sizeof(scart_image))) - { - blklen = (addr | (SECTOR_SIZE-1)) + 1 - addr; - if ((sizeof(scart_image) - offs) < blklen) - { - blklen = sizeof(scart_image) - offs; - } - - draw_block (0, 29, 128, 9, 3, DRAW_ERASE); - draw_string(0, 29, "Sektor @", 3, DRAW_PUT); - draw_hexS (44, 29, addr, 3, DRAW_PUT); - - /* calculate CRC from scart */ - err = icp_calc_sector_crc(addr, &crc_sc); - - /* calculate CRC from image */ - poly = 0x00400007; - crc_im = tap = 0; - for (i=0; i. -*/ - - -#ifndef SCART_ICP -#define SCART_ICP - -extern void scart_icp(void); - -#endif diff --git a/boop/tools/scart_image.h b/boop/tools/scart_image.h deleted file mode 100644 index 52887f1..0000000 --- a/boop/tools/scart_image.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -/* bootstat register */ -const unsigned char scart_bootstat = 0x01; - -/* bootvec register, high byte of the reset vector */ -const unsigned char scart_bootvec = 0x00; - -/* address of the first byte of scart_image to program to */ -const unsigned short scart_image_startaddr = 0x0000; - -/* from betty_scart.bin SVN #14 */ -/* truncated to a size of 0x1C00 = 7168 to preserve the content of the last flash sector */ -#include "scart_image_data.h" diff --git a/boop/tools/scart_image_data.h b/boop/tools/scart_image_data.h deleted file mode 100644 index 514f01c..0000000 --- a/boop/tools/scart_image_data.h +++ /dev/null @@ -1,484 +0,0 @@ -// Array representation of binary file betty_scart.bin - - -const unsigned char scart_image[] = -{ - 0x02,0x00,0x73,0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x02,0x03,0xf7,0xff,0xff,0xff,0xff,0xff,0x32,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x02, - 0x09,0x90,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x02,0x04,0x46,0x12,0x00,0xdb,0x80,0xfe,0x75,0x81,0xac,0x12,0x0d, - 0x0e,0xe5,0x82,0x60,0x03,0x02,0x00,0x6e,0x79,0x00,0xe9,0x44,0x00,0x60,0x1b, - 0x7a,0x00,0x90,0x0d,0xd3,0x78,0x00,0x75,0xa0,0x00,0xe4,0x93,0xf2,0xa3,0x08, - 0xb8,0x00,0x02,0x05,0xa0,0xd9,0xf4,0xda,0xf2,0x75,0xa0,0xff,0xe4,0x78,0xff, - 0xf6,0xd8,0xfd,0x78,0x00,0xe8,0x44,0x00,0x60,0x0a,0x79,0x00,0x75,0xa0,0x00, - 0xe4,0xf3,0x09,0xd8,0xfc,0x78,0x00,0xe8,0x44,0x00,0x60,0x0c,0x79,0x00,0x90, - 0x00,0x00,0xe4,0xf0,0xa3,0xd8,0xfc,0xd9,0xfa,0x75,0x08,0x00,0x75,0x09,0x00, - 0x75,0x22,0x00,0x75,0x23,0x05,0x02,0x00,0x6e,0x53,0x84,0x6c,0x43,0x85,0x92, - 0x75,0x80,0x83,0x53,0x91,0x3e,0x43,0x92,0xcd,0x75,0x90,0xcd,0x53,0xb1,0xfe, - 0x43,0xb2,0x01,0x75,0xb0,0x00,0x12,0x0c,0xd3,0x12,0x03,0x12,0x12,0x09,0x77, - 0x12,0x09,0x84,0xd2,0xaf,0x90,0x0d,0x12,0x75,0xf0,0x80,0x12,0x03,0x2c,0x90, - 0x0d,0x15,0x75,0xf0,0x80,0x12,0x03,0x2c,0x90,0x0d,0x12,0x75,0xf0,0x80,0x12, - 0x03,0x2c,0xd2,0x00,0x7a,0x00,0x30,0x01,0x2b,0x74,0xc6,0x25,0x09,0x50,0x0f, - 0x85,0x22,0x28,0x75,0x82,0x3a,0xc0,0x02,0x12,0x07,0x2e,0xd0,0x02,0x80,0xe8, - 0xe5,0x09,0x60,0xe4,0x30,0x8d,0xe1,0x85,0x22,0x28,0x85,0x09,0x82,0xc0,0x02, - 0x12,0x07,0x2e,0xd0,0x02,0x80,0xd2,0x20,0x00,0x03,0x02,0x02,0x63,0xc3,0xea, - 0x95,0x09,0x50,0xc6,0x8a,0x82,0x0a,0xc0,0x02,0x12,0x04,0xe1,0xab,0x82,0xd0, - 0x02,0xbb,0x0d,0x02,0x80,0x03,0x02,0x02,0x57,0x90,0x0d,0x12,0x75,0xf0,0x80, - 0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0xea,0x25,0x08,0x14,0x54,0x3f,0x24,0x2d, - 0xf8,0x76,0x00,0xc0,0x02,0x12,0x04,0x92,0xab,0x82,0xd0,0x02,0xda,0x03,0x02, - 0x02,0x36,0xbb,0x62,0x02,0x80,0x62,0xbb,0x63,0x02,0x80,0x54,0xbb,0x72,0x02, - 0x80,0x29,0xbb,0x73,0x02,0x80,0x41,0xbb,0x74,0x02,0x80,0x05,0xbb,0x77,0x65, - 0x80,0x57,0xe5,0x09,0x60,0x6c,0x8a,0x82,0x12,0x06,0xb8,0x7a,0x00,0x90,0x0d, - 0x12,0x75,0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x80,0x56,0xe5,0x09, - 0x60,0x52,0x75,0x28,0x00,0x8a,0x82,0x12,0x07,0x2e,0x7a,0x00,0x90,0x0d,0x1b, - 0x75,0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x80,0x39,0xc0,0x02,0x12, - 0x08,0x9d,0xd0,0x02,0x80,0x30,0xc0,0x02,0x12,0x07,0xd1,0xd0,0x02,0x80,0x27, - 0xc2,0x00,0x75,0x82,0x01,0xc0,0x02,0x12,0x03,0xad,0xd0,0x02,0x80,0x19,0x75, - 0x82,0x00,0xc0,0x02,0x12,0x0c,0x55,0xd0,0x02,0x80,0x0d,0x90,0x0d,0x23,0x75, - 0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x8a,0x04,0xec,0x60,0x1b,0xc0, - 0x04,0x12,0x04,0x92,0xd0,0x04,0x1c,0x8c,0x02,0x80,0xf1,0x90,0x0d,0x15,0x75, - 0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x80,0x02,0x8c,0x02,0x90,0x0d, - 0x12,0x75,0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x02,0x01,0x23,0x8b, - 0x82,0xc0,0x02,0x12,0x03,0xad,0xd0,0x02,0x02,0x01,0x23,0xe5,0x09,0x70,0x03, - 0x02,0x01,0x23,0xc0,0x02,0x12,0x04,0x92,0xab,0x82,0xd0,0x02,0xeb,0x24,0xf8, - 0x40,0x60,0xeb,0x2b,0x2b,0x90,0x02,0x7f,0x73,0x02,0x02,0x97,0x02,0x02,0x99, - 0x02,0x02,0xa2,0x02,0x02,0xab,0x02,0x02,0xb4,0x02,0x02,0xbd,0x02,0x02,0xc6, - 0x02,0x02,0xcf,0x80,0x49,0xc0,0x02,0x12,0x07,0x7d,0xd0,0x02,0x80,0x40,0xc0, - 0x02,0x12,0x09,0x68,0xd0,0x02,0x80,0x37,0xc0,0x02,0x12,0x08,0xc1,0xd0,0x02, - 0x80,0x2e,0xc0,0x02,0x12,0x08,0xdb,0xd0,0x02,0x80,0x25,0xc0,0x02,0x12,0x08, - 0xf5,0xd0,0x02,0x80,0x1c,0xc0,0x02,0x12,0x09,0x2d,0xd0,0x02,0x80,0x13,0xc0, - 0x02,0x12,0x09,0x71,0xd0,0x02,0x80,0x0a,0x75,0x82,0x00,0xc0,0x02,0x12,0x03, - 0xad,0xd0,0x02,0x30,0x00,0x03,0x02,0x01,0x23,0x75,0x82,0x01,0xc0,0x02,0x12, - 0x03,0xad,0xd0,0x02,0x02,0x01,0x23,0xe5,0x82,0x25,0x82,0x24,0x33,0xfa,0xe4, - 0x34,0x0d,0xfb,0x8a,0x82,0x8b,0x83,0xa3,0xe4,0x93,0xf5,0xbe,0x8a,0x82,0x8b, - 0x83,0xe4,0x93,0xf5,0xbf,0x22,0x75,0x98,0x52,0x43,0xba,0xa0,0x75,0x82,0x07, - 0x12,0x02,0xf5,0x75,0xbd,0x03,0xc2,0x98,0xd2,0xac,0xd2,0x99,0xd2,0xbc,0xd2, - 0xfe,0x22,0xaa,0x82,0xab,0x83,0xac,0xf0,0x7d,0x00,0xed,0x2a,0xfe,0xe4,0x3b, - 0xff,0x8c,0x00,0x8e,0x82,0x8f,0x83,0x88,0xf0,0x12,0x0c,0xf2,0x60,0x2b,0x8d, - 0x06,0x0d,0xee,0x2a,0xfe,0xe4,0x3b,0xff,0x8c,0x00,0x8e,0x82,0x8f,0x83,0x88, - 0xf0,0x12,0x0c,0xf2,0xf5,0x82,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0x12, - 0x03,0xad,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0x80,0xc2,0x22,0xaa,0x82, - 0xab,0x83,0xac,0xf0,0x7d,0x00,0xc3,0xed,0x95,0x0c,0x50,0x2b,0x8d,0x06,0x0d, - 0xee,0x2a,0xfe,0xe4,0x3b,0xff,0x8c,0x00,0x8e,0x82,0x8f,0x83,0x88,0xf0,0x12, - 0x0c,0xf2,0xf5,0x82,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0x12,0x03,0xad, - 0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0x80,0xcf,0x22,0xaa,0x82,0x8a,0x82, - 0xc0,0x02,0x12,0x05,0x06,0xe5,0x82,0xd0,0x02,0x70,0x04,0xd2,0xee,0x80,0xef, - 0xd2,0xee,0x22,0xe5,0x82,0xfa,0xc4,0x54,0x0f,0xfb,0x53,0x03,0x0f,0x74,0x30, - 0x2b,0xfb,0x24,0xc6,0x50,0x04,0x74,0x07,0x2b,0xfb,0x8b,0x82,0xc0,0x02,0x12, - 0x03,0xad,0xd0,0x02,0x74,0x0f,0x5a,0xfb,0x74,0x30,0x2b,0xfb,0x24,0xc6,0x50, - 0x04,0x74,0x07,0x2b,0xfb,0x8b,0x82,0x02,0x03,0xad,0xc0,0x21,0xc0,0xe0,0xc0, - 0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06, - 0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,0xd0,0x75,0xd0,0x00,0x74,0xc0,0x25,0x09, - 0x40,0x06,0x85,0x99,0x82,0x12,0x04,0xef,0xc2,0x98,0xc2,0x8d,0x75,0x8c,0x00, - 0xd0,0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0, - 0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0xd0,0x21,0x32,0xc0, - 0x21,0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0x04, - 0xc0,0x05,0xc0,0x06,0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,0xd0,0x75,0xd0,0x00, - 0xe5,0x0b,0x60,0x0a,0x12,0x04,0xad,0x85,0x82,0x99,0xc2,0x99,0x80,0x02,0xc2, - 0xee,0xd0,0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04, - 0xd0,0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0xd0,0x21,0x32, - 0x7a,0x00,0xc2,0xaf,0xe5,0x09,0x60,0x0e,0x15,0x09,0xab,0x08,0x05,0x08,0x74, - 0x3f,0x5b,0x24,0x2d,0xf8,0x86,0x02,0xd2,0xaf,0x8a,0x82,0x22,0x7a,0x00,0xc2, - 0xaf,0xe5,0x0b,0x60,0x0e,0x15,0x0b,0xab,0x0a,0x05,0x0a,0x74,0x3f,0x5b,0x24, - 0x6d,0xf8,0x86,0x02,0xd2,0xaf,0x8a,0x82,0x22,0xe5,0x09,0x60,0xfc,0xc2,0xaf, - 0x15,0x09,0xaa,0x08,0x05,0x08,0x74,0x3f,0x5a,0x24,0x2d,0xf8,0x86,0x02,0xd2, - 0xaf,0x8a,0x82,0x22,0xe5,0x82,0x25,0x08,0x54,0x3f,0x24,0x2d,0xf8,0x86,0x02, - 0x8a,0x82,0x22,0xaa,0x82,0x74,0xc0,0x25,0x09,0x40,0x0e,0xab,0x09,0x05,0x09, - 0xeb,0x25,0x08,0x54,0x3f,0x24,0x2d,0xf8,0xa6,0x02,0x22,0xaa,0x82,0xc2,0xaf, - 0x74,0xc0,0x25,0x0b,0x40,0x14,0xab,0x0b,0x05,0x0b,0xeb,0x25,0x0a,0x54,0x3f, - 0x24,0x6d,0xf8,0xa6,0x02,0xd2,0xaf,0x75,0x82,0x01,0x22,0xd2,0xaf,0x75,0x82, - 0x00,0x22,0xaa,0x82,0x7b,0x08,0xeb,0x60,0x10,0xc2,0x97,0xea,0x33,0x92,0x96, - 0xd2,0x97,0xea,0xa2,0x95,0x3a,0xfa,0x1b,0x80,0xed,0xc2,0x97,0x8a,0x82,0x22, - 0x7a,0x00,0xc2,0x96,0xc2,0x97,0x7b,0x08,0xeb,0x60,0x0c,0xd2,0x97,0xea,0xa2, - 0x95,0x3a,0xfa,0xc2,0x97,0x1b,0x80,0xf1,0x8a,0x82,0x22,0xd2,0x97,0xc2,0x96, - 0xc2,0x81,0x7a,0xff,0xea,0x60,0x03,0x1a,0x80,0xfa,0xd2,0x81,0x7a,0xff,0xea, - 0x60,0x03,0x1a,0x80,0xfa,0xc2,0x81,0xc2,0x97,0x20,0x95,0xfd,0x75,0x82,0x30, - 0x12,0x05,0x2a,0x20,0x95,0xfd,0x75,0x82,0x40,0x12,0x05,0x2a,0x7a,0x00,0xba, - 0x2f,0x00,0x50,0x11,0xea,0x90,0x0d,0x47,0x93,0xf5,0x82,0xc0,0x02,0x12,0x05, - 0x2a,0xd0,0x02,0x0a,0x80,0xea,0xd2,0x81,0x75,0x11,0xc0,0x75,0x82,0x3e,0x12, - 0x06,0x07,0x75,0x82,0x36,0x12,0x06,0x90,0x75,0x82,0x33,0x12,0x06,0x90,0x75, - 0x82,0x3a,0x12,0x06,0x90,0x75,0x82,0x34,0x02,0x06,0x90,0xaa,0x82,0xc2,0x81, - 0x20,0x95,0xfd,0x8a,0x82,0x12,0x05,0x2a,0xaa,0x82,0x7b,0x00,0xc3,0xeb,0x95, - 0x10,0x50,0x23,0xeb,0x25,0x0d,0xfc,0xe4,0x35,0x0e,0xfd,0xae,0x0f,0x8c,0x82, - 0x8d,0x83,0x8e,0xf0,0x12,0x0c,0xf2,0xf5,0x82,0xc0,0x02,0xc0,0x03,0x12,0x05, - 0x2a,0xd0,0x03,0xd0,0x02,0x0b,0x80,0xd7,0xd2,0x81,0x8a,0x82,0x22,0xaa,0x82, - 0xc2,0x81,0x20,0x95,0xfd,0x8a,0x82,0x12,0x05,0x2a,0xaa,0x82,0x85,0x11,0x82, - 0xc0,0x02,0x12,0x05,0x2a,0xd0,0x02,0xd2,0x81,0x8a,0x82,0x22,0xaa,0x82,0xc2, - 0x81,0x20,0x95,0xfd,0x74,0x80,0x4a,0xf5,0x82,0x12,0x05,0x2a,0xaa,0x82,0x7b, - 0x00,0xac,0x15,0xec,0x60,0x37,0x8b,0x05,0x0b,0xed,0x25,0x12,0xfd,0xe4,0x35, - 0x13,0xfe,0xaf,0x14,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0, - 0x07,0x12,0x05,0x46,0xa8,0x82,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0, - 0x03,0xd0,0x02,0x8d,0x82,0x8e,0x83,0x8f,0xf0,0xe8,0x12,0x0c,0xd9,0x1c,0x80, - 0xc6,0xd2,0x81,0x8a,0x82,0x22,0xaa,0x82,0xc2,0x81,0x20,0x95,0xfd,0x74,0x80, - 0x4a,0xf5,0x82,0x12,0x05,0x2a,0x75,0x82,0x00,0x12,0x05,0x2a,0xd2,0x81,0x22, - 0xaa,0x82,0xc2,0x81,0x20,0x95,0xfd,0x8a,0x82,0x12,0x05,0x2a,0xd2,0x81,0x22, - 0xaa,0x82,0x10,0x81,0x02,0x80,0x03,0x20,0x95,0xfd,0x8a,0x82,0x12,0x05,0x2a, - 0xaa,0x82,0x30,0x02,0x02,0xd2,0x81,0x8a,0x82,0x22,0xaa,0x82,0x75,0x82,0x00, - 0xc0,0x02,0x12,0x0c,0x55,0xc2,0xe9,0x75,0x82,0x36,0x12,0x06,0x90,0xd0,0x02, - 0x75,0x82,0xf5,0xc0,0x02,0x12,0x06,0x78,0xab,0x82,0xd0,0x02,0xbb,0x01,0xf1, - 0x74,0x03,0x2a,0xf5,0x24,0x75,0x25,0x00,0x85,0x16,0x26,0x75,0x27,0x01,0x75, - 0x0d,0x24,0x75,0x0e,0x00,0x75,0x0f,0x40,0x75,0x10,0x04,0x75,0x82,0x7f,0xc0, - 0x02,0x12,0x05,0xc9,0xc2,0x02,0x75,0x82,0x7f,0x12,0x06,0x9f,0xd0,0x02,0x8a, - 0x03,0x1a,0xeb,0x60,0x0e,0xc0,0x02,0x12,0x04,0x92,0xc2,0x02,0x12,0x06,0x9f, - 0xd0,0x02,0x80,0xec,0xd2,0x81,0x75,0x82,0x35,0x12,0x06,0x90,0xd2,0xe9,0x90, - 0x0d,0x79,0x75,0xf0,0x80,0x02,0x03,0x2c,0xaa,0x82,0x74,0x03,0x2a,0xf5,0x29, - 0x85,0x28,0x2a,0x85,0x16,0x2b,0x75,0x2c,0x05,0xc2,0xe9,0x75,0x0d,0x29,0x75, - 0x0e,0x00,0x75,0x0f,0x40,0x75,0x10,0x04,0x75,0x82,0x7f,0xc0,0x02,0x12,0x05, - 0xc9,0xc2,0x02,0x75,0x82,0x7f,0x12,0x06,0x9f,0xd0,0x02,0x8a,0x03,0x1a,0xeb, - 0x60,0x0e,0xc0,0x02,0x12,0x04,0x92,0xc2,0x02,0x12,0x06,0x9f,0xd0,0x02,0x80, - 0xec,0xd2,0x81,0x75,0x82,0x35,0x12,0x06,0x90,0xd2,0xe9,0x22,0xe5,0x09,0x60, - 0xfc,0x12,0x04,0x92,0xaa,0x82,0xba,0x3e,0x00,0x50,0x40,0xc2,0x02,0x75,0x82, - 0x7f,0xc0,0x02,0x12,0x06,0x9f,0xd0,0x02,0xc2,0x02,0x8a,0x82,0xc0,0x02,0x12, - 0x06,0x9f,0xd0,0x02,0x7b,0x00,0xc3,0xeb,0x9a,0x50,0x17,0xe5,0x09,0x60,0xfc, - 0xc0,0x02,0xc0,0x03,0x12,0x04,0x92,0xc2,0x02,0x12,0x06,0x9f,0xd0,0x03,0xd0, - 0x02,0x0b,0x80,0xe4,0xd2,0x81,0x75,0x82,0x35,0x12,0x06,0x90,0x02,0x0c,0x10, - 0x75,0x82,0x00,0x02,0x03,0xad,0xc2,0x02,0x75,0x82,0xc0,0x12,0x06,0x9f,0x7a, - 0x00,0xba,0x2f,0x00,0x50,0x50,0x90,0x0d,0x81,0x75,0xf0,0x80,0xc0,0x02,0x12, - 0x03,0x2c,0xd0,0x02,0x8a,0x82,0xc0,0x02,0x12,0x03,0xc3,0x90,0x0d,0x88,0x75, - 0xf0,0x80,0x12,0x03,0x2c,0xc2,0x02,0x75,0x82,0x00,0x12,0x06,0x9f,0x12,0x03, - 0xc3,0xd0,0x02,0x74,0x03,0x5a,0xfb,0xbb,0x03,0x0f,0x90,0x0d,0x76,0x75,0xf0, - 0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x80,0x0d,0x90,0x0d,0x8e,0x75,0xf0, - 0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x0a,0x80,0xab,0xd2,0x81,0x90,0x0d, - 0x76,0x75,0xf0,0x80,0x12,0x03,0x2c,0xc2,0x02,0x75,0x82,0xfe,0x12,0x06,0x9f, - 0x7a,0x00,0xba,0x08,0x00,0x50,0x50,0x90,0x0d,0x92,0x75,0xf0,0x80,0xc0,0x02, - 0x12,0x03,0x2c,0xd0,0x02,0x8a,0x82,0xc0,0x02,0x12,0x03,0xc3,0x90,0x0d,0x9b, - 0x75,0xf0,0x80,0x12,0x03,0x2c,0xc2,0x02,0x75,0x82,0x00,0x12,0x06,0x9f,0x12, - 0x03,0xc3,0xd0,0x02,0x74,0x03,0x5a,0xfb,0xbb,0x03,0x0f,0x90,0x0d,0x76,0x75, - 0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x80,0x0d,0x90,0x0d,0xa2,0x75, - 0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x0a,0x80,0xab,0xd2,0x81,0x22, - 0x90,0x0d,0xa5,0x75,0xf0,0x80,0x12,0x03,0x2c,0x75,0x82,0xbd,0x12,0x06,0x90, - 0x12,0x03,0xc3,0x90,0x0d,0xba,0x75,0xf0,0x80,0x12,0x03,0x2c,0x75,0x82,0x3d, - 0x12,0x06,0x90,0x02,0x03,0xc3,0x12,0x04,0xc8,0xaa,0x82,0x74,0x80,0x4a,0xf5, - 0x82,0xc2,0x02,0x12,0x06,0x9f,0xd2,0x02,0x75,0x82,0x00,0x12,0x06,0x9f,0x02, - 0x03,0xad,0x12,0x04,0xc8,0xaa,0x82,0xc2,0x02,0x8a,0x82,0x12,0x06,0x9f,0x30, - 0x98,0xfd,0xaa,0x99,0xc2,0x98,0xd2,0x02,0x8a,0x82,0x02,0x06,0x9f,0x12,0x04, - 0xc8,0xaa,0x82,0xc0,0x02,0x12,0x04,0xc8,0xab,0x82,0x74,0xc0,0x4b,0xf5,0x82, - 0xc2,0x02,0x12,0x06,0x9f,0xd0,0x02,0x7c,0x00,0xc3,0xec,0x9a,0x50,0x16,0xc2, - 0x02,0x75,0x82,0x00,0xc0,0x02,0xc0,0x04,0x12,0x06,0x9f,0x12,0x03,0xad,0xd0, - 0x04,0xd0,0x02,0x0c,0x80,0xe5,0xd2,0x81,0x22,0x12,0x04,0xc8,0xaa,0x82,0xc0, - 0x02,0x12,0x04,0xc8,0xab,0x82,0x74,0x40,0x4b,0xf5,0x82,0xc2,0x02,0x12,0x06, - 0x9f,0xd0,0x02,0x7c,0x00,0xc3,0xec,0x9a,0x50,0x19,0x30,0x98,0xfd,0xab,0x99, - 0xc2,0x98,0xc2,0x02,0x8b,0x82,0xc0,0x02,0xc0,0x04,0x12,0x06,0x9f,0xd0,0x04, - 0xd0,0x02,0x0c,0x80,0xe2,0xd2,0x81,0x22,0x12,0x04,0xc8,0x12,0x06,0x90,0x02, - 0x03,0xad,0x12,0x04,0xc8,0x02,0x0c,0x55,0x12,0x05,0x60,0xc2,0x03,0x90,0x0d, - 0x50,0xe4,0x93,0xf5,0x16,0x22,0x75,0x93,0x40,0x75,0x86,0x40,0x75,0x94,0x02, - 0xd2,0xe9,0x22,0xc0,0x21,0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02, - 0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0, - 0xd0,0x75,0xd0,0x00,0xe5,0x93,0x30,0xe6,0x09,0x75,0x93,0x00,0x75,0x94,0x02, - 0x02,0x0b,0xf3,0x75,0x82,0xfb,0x12,0x06,0x78,0xe5,0x82,0xf5,0x17,0xfa,0x70, - 0x03,0x02,0x0b,0xbd,0xc2,0x04,0xea,0x24,0xfc,0x50,0x14,0x75,0x12,0x17,0x75, - 0x13,0x00,0x75,0x14,0x40,0x75,0x15,0x04,0x75,0x82,0xff,0x12,0x06,0x24,0x80, - 0x11,0x75,0x12,0x17,0x75,0x13,0x00,0x75,0x14,0x40,0x8a,0x15,0x75,0x82,0xff, - 0x12,0x06,0x24,0xe5,0x17,0x24,0xfc,0x40,0x03,0x02,0x0b,0x93,0x20,0x00,0x06, - 0x20,0x01,0x03,0x02,0x0b,0x5d,0xc2,0x05,0xaa,0x1a,0xba,0x02,0x02,0x80,0x0d, - 0xba,0x05,0x02,0x80,0x45,0xba,0x06,0x02,0x80,0x67,0x02,0x0b,0x13,0x75,0x82, - 0xff,0x12,0x06,0x78,0xaa,0x82,0xba,0x01,0x02,0x80,0x03,0x02,0x0b,0x93,0x75, - 0x17,0x04,0xaa,0x19,0x8a,0x18,0x85,0x16,0x19,0x75,0x1a,0x02,0x75,0x0d,0x17, - 0x75,0x0e,0x00,0x75,0x0f,0x40,0x75,0x10,0x04,0x75,0x82,0x7f,0x12,0x05,0xc9, - 0x75,0x11,0x02,0x75,0x82,0x7f,0x12,0x06,0x07,0xd2,0x04,0x02,0x0b,0x93,0xc2, - 0x02,0x75,0x82,0xff,0x12,0x06,0x9f,0x7a,0x03,0xc3,0xea,0x95,0x17,0x50,0x12, - 0xc2,0x02,0x75,0x82,0x00,0xc0,0x02,0x12,0x06,0x9f,0x12,0x03,0xad,0xd0,0x02, - 0x0a,0x80,0xe8,0xd2,0x81,0x02,0x0b,0x93,0x75,0x82,0xff,0x12,0x06,0x78,0xe5, - 0x82,0xfa,0x24,0xfb,0x40,0x4e,0xea,0x2a,0x2a,0x90,0x0a,0x99,0x73,0x02,0x0a, - 0xa8,0x02,0x0a,0xaa,0x02,0x0a,0xc3,0x02,0x0a,0xd2,0x02,0x0a,0xde,0x80,0x36, - 0xe5,0x17,0x24,0xfb,0x50,0x30,0x75,0x82,0xff,0x12,0x06,0x78,0xe5,0x82,0xfa, - 0x24,0xf6,0x40,0x02,0x8a,0x23,0xd2,0x05,0x80,0x1d,0x85,0x19,0x22,0x85,0x23, - 0x82,0x12,0x02,0xf5,0xd2,0x01,0xd2,0x05,0x80,0x0e,0xc2,0x01,0x75,0x82,0x07, - 0x12,0x02,0xf5,0xd2,0x05,0x80,0x02,0xd2,0x05,0x20,0x05,0x03,0x02,0x0b,0x93, - 0x75,0x17,0x04,0xaa,0x19,0x8a,0x18,0x85,0x16,0x19,0x75,0x1a,0x06,0x75,0x0d, - 0x17,0x75,0x0e,0x00,0x75,0x0f,0x40,0x75,0x10,0x04,0x75,0x82,0x7f,0x12,0x05, - 0xc9,0x75,0x11,0x00,0x75,0x82,0x7f,0x12,0x06,0x07,0xd2,0x04,0x02,0x0b,0x93, - 0xe5,0x17,0x24,0xfc,0x50,0x7a,0x30,0x00,0x77,0x90,0x0d,0xcb,0x75,0xf0,0x80, - 0x12,0x03,0x2c,0x90,0x0d,0xce,0x75,0xf0,0x80,0x12,0x03,0x2c,0xc2,0x02,0x75, - 0x82,0xff,0x12,0x06,0x9f,0x7a,0x03,0xc3,0xea,0x95,0x17,0x50,0x12,0xc2,0x02, - 0x75,0x82,0x00,0xc0,0x02,0x12,0x06,0x9f,0x12,0x03,0xad,0xd0,0x02,0x0a,0x80, - 0xe8,0xd2,0x81,0x90,0x0d,0xcb,0x75,0xf0,0x80,0x12,0x03,0x2c,0x80,0x36,0x75, - 0x82,0x02,0x12,0x03,0xad,0x75,0x0c,0x04,0x90,0x00,0x17,0x75,0xf0,0x40,0x12, - 0x03,0x73,0xc2,0x02,0x75,0x82,0xff,0x12,0x06,0x9f,0x7a,0x03,0xc3,0xea,0x95, - 0x17,0x50,0x12,0xc2,0x02,0x75,0x82,0x00,0xc0,0x02,0x12,0x06,0x9f,0x12,0x03, - 0xad,0xd0,0x02,0x0a,0x80,0xe8,0xd2,0x81,0x75,0x82,0x36,0x12,0x06,0x90,0x75, - 0x82,0xf5,0x12,0x06,0x78,0xaa,0x82,0xba,0x01,0xf5,0x75,0x82,0x3a,0x12,0x06, - 0x90,0x30,0x04,0x08,0x75,0x82,0x35,0x12,0x06,0x90,0x80,0x38,0x75,0x82,0x34, - 0x12,0x06,0x90,0x80,0x30,0x75,0x82,0xf5,0x12,0x06,0x78,0xaa,0x82,0xba,0x0d, - 0x02,0x80,0x23,0x75,0x82,0x36,0x12,0x06,0x90,0x75,0x82,0xf5,0x12,0x06,0x78, - 0xaa,0x82,0xba,0x01,0xf5,0x75,0x82,0x3a,0x12,0x06,0x90,0x75,0x82,0x3b,0x12, - 0x06,0x90,0x75,0x82,0x34,0x12,0x06,0x90,0x75,0x93,0x40,0x75,0x94,0x02,0xd0, - 0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03, - 0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0xd0,0x21,0x32,0x7a,0x01, - 0xea,0x60,0x3f,0x75,0x82,0x3d,0xc0,0x02,0x12,0x06,0x90,0xe5,0x82,0xd0,0x02, - 0x54,0xf0,0xfb,0x60,0x21,0xbb,0x10,0x02,0x80,0x0f,0xbb,0x70,0xe4,0x75,0x82, - 0x3b,0xc0,0x02,0x12,0x06,0x90,0xd0,0x02,0x80,0xd8,0x30,0x03,0x06,0x75,0x82, - 0x36,0x12,0x06,0x90,0x7a,0x00,0x80,0xcb,0x20,0x03,0x06,0x75,0x82,0x34,0x12, - 0x06,0x90,0x7a,0x00,0x80,0xbe,0x22,0xaa,0x82,0x75,0x1b,0x01,0x8a,0x1c,0xc2, - 0xe9,0xd2,0x03,0x90,0x0d,0x5f,0xe4,0x93,0xfa,0x74,0xcf,0x5a,0xf5,0x11,0x75, - 0x82,0x18,0x12,0x06,0x07,0x75,0x82,0x36,0x12,0x06,0x90,0x75,0x82,0x33,0x12, - 0x06,0x90,0x12,0x0c,0x10,0x7a,0x00,0x7b,0x00,0x8a,0x04,0x8b,0x05,0x0a,0xba, - 0x00,0x01,0x0b,0xc3,0xec,0x94,0xfa,0xed,0x94,0x00,0x50,0x25,0x75,0x0d,0x1b, - 0x75,0x0e,0x00,0x75,0x0f,0x40,0x75,0x10,0x02,0x75,0x82,0x7f,0xc0,0x02,0xc0, - 0x03,0x12,0x05,0xc9,0x75,0x82,0x35,0x12,0x06,0x90,0x12,0x0c,0x10,0xd0,0x03, - 0xd0,0x02,0x80,0xc9,0x90,0x0d,0x5f,0xe4,0x93,0xf5,0x11,0x75,0x82,0x18,0x12, - 0x06,0x07,0xc2,0x03,0x12,0x0c,0x10,0x75,0x94,0x02,0xd2,0xe9,0x22,0x43,0x89, - 0x01,0xd2,0x8c,0x22,0x20,0xf7,0x10,0x30,0xf6,0x11,0x88,0x83,0xa8,0x82,0x20, - 0xf5,0x07,0xf6,0xa8,0x83,0x75,0x83,0x00,0x22,0xf2,0x80,0xf7,0xf0,0x22,0x20, - 0xf7,0x14,0x30,0xf6,0x14,0x88,0x83,0xa8,0x82,0x20,0xf5,0x07,0xe6,0xa8,0x83, - 0x75,0x83,0x00,0x22,0xe2,0x80,0xf7,0xe4,0x93,0x22,0xe0,0x22,0x75,0x82,0x00, - 0x22,0x0d,0x0a,0x00,0x52,0x65,0x61,0x64,0x79,0x00,0x54,0x58,0x20,0x44,0x6f, - 0x6e,0x65,0x00,0x53,0x79,0x6e,0x74,0x61,0x78,0x20,0x65,0x72,0x72,0x6f,0x72, - 0x00,0x0d,0x0a,0x00,0x2d,0x1b,0x16,0x85,0x0b,0x3b,0x05,0x95,0x03,0xb4,0x02, - 0xc3,0x01,0xd2,0x01,0x59,0x00,0xe1,0x00,0x68,0x29,0x2e,0x06,0x47,0xd3,0x91, - 0x3e,0x1a,0x45,0x01,0x01,0x06,0x00,0x10,0x0b,0xda,0x8a,0x75,0x13,0x22,0xc1, - 0x35,0x07,0x03,0x38,0x16,0x6c,0x43,0x40,0x91,0x46,0x50,0x78,0x56,0x10,0xa9, - 0x0a,0x00,0x11,0x41,0x00,0x57,0x7f,0x3f,0x98,0x31,0x0b,0x0d,0x0a,0x00,0x54, - 0x58,0x20,0x44,0x6f,0x6e,0x65,0x00,0x52,0x65,0x67,0x20,0x30,0x78,0x00,0x20, - 0x3d,0x20,0x30,0x78,0x00,0x20,0x20,0x20,0x00,0x50,0x41,0x54,0x41,0x42,0x4c, - 0x45,0x5b,0x00,0x5d,0x20,0x3d,0x20,0x30,0x78,0x00,0x20,0x20,0x00,0x43,0x43, - 0x31,0x31,0x30,0x30,0x20,0x52,0x65,0x61,0x64,0x20,0x53,0x74,0x61,0x74,0x75, - 0x73,0x3a,0x20,0x00,0x20,0x20,0x57,0x72,0x69,0x74,0x65,0x20,0x53,0x74,0x61, - 0x74,0x75,0x73,0x3a,0x20,0x00,0x0d,0x0a,0x00,0x52,0x58,0x3a,0x20,0x00,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,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, - 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,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,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,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,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,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,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,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,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,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,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,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,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,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,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, - 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,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,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,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,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,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,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,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,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,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,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,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, -}; diff --git a/boop/tools/toolsmenu.c b/boop/tools/toolsmenu.c deleted file mode 100644 index d2b3173..0000000 --- a/boop/tools/toolsmenu.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ -#include "global.h" -#include "menu.h" -#include "scart_icp.h" -#include "redirector.h" -#include "fs20.h" - -const struct MENU_ENTRY toolsMenuEntries[] = -{ - { scart_icp, 0, FUNCENTRY, "Scart ICP", "Program the SCART unit" }, // tools/scarticp.c -#if FF_UART_REDIRECT - { uarto_redirector, 0, FUNCENTRY, "Redirector", "Serial redirector" }, // serial/redirector.c -#endif - { fs20_decoder, 0, FUNCENTRY, "FS20 decoder", "FS20 decoder" } // cc1100/fs20.c - -}; - -const struct MENU toolsMenu = -{ - NUM_OF_ELEMENTS (toolsMenuEntries), (MENU_ENTRY*)&toolsMenuEntries, "Tools" -}; diff --git a/boop/tools/toolsmenu.h b/boop/tools/toolsmenu.h deleted file mode 100644 index 4411339..0000000 --- a/boop/tools/toolsmenu.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef TOOLSMENU_H -#define TOOLSMENU_H - -extern const struct MENU toolsMenu; - -#endif diff --git a/boop/version.h b/boop/version.h deleted file mode 100644 index b2ffa08..0000000 --- a/boop/version.h +++ /dev/null @@ -1,2 +0,0 @@ -#define SVNVERSION 00 -