/C-OSD/trunk/C-OSD AGRESSiVA mod/C-OSD.aps |
---|
0,0 → 1,0 |
<AVRStudio><MANAGEMENT><ProjectName>C-OSD</ProjectName><Created>24-Mar-2009 01:26:47</Created><LastEdit>22-Feb-2010 22:48:32</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>24-Mar-2009 01:26:47</Created><Version>4</Version><Build>4, 16, 0, 626</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\C-OSD.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega162.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><modules><module></module></modules><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>max7456_software_spi.c</SOURCEFILE><SOURCEFILE>usart1.c</SOURCEFILE><SOURCEFILE>characters.c</SOURCEFILE><SOURCEFILE>osd_helpers.c</SOURCEFILE><SOURCEFILE>osd_ncmode_default.c</SOURCEFILE><SOURCEFILE>osd_fcmode_default.c</SOURCEFILE><SOURCEFILE>config.c</SOURCEFILE><SOURCEFILE>spi.c</SOURCEFILE><SOURCEFILE>buttons.c</SOURCEFILE><SOURCEFILE>ppm.c</SOURCEFILE><SOURCEFILE>osd_ncmode_minimal.c</SOURCEFILE><SOURCEFILE>osd_fcmode_jopl.c</SOURCEFILE><HEADERFILE>mk-data-structs.h</HEADERFILE><HEADERFILE>max7456_software_spi.h</HEADERFILE><HEADERFILE>usart1.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>osd_helpers.h</HEADERFILE><HEADERFILE>config.h</HEADERFILE><HEADERFILE>spi.h</HEADERFILE><HEADERFILE>buttons.h</HEADERFILE><HEADERFILE>ppm.h</HEADERFILE><HEADERFILE>osd_ncmode_default.h</HEADERFILE><HEADERFILE>osd_ncmode_minimal.h</HEADERFILE><HEADERFILE>osd_fcmode_default.h</HEADERFILE><HEADERFILE>characters.h</HEADERFILE><HEADERFILE>osd_fcmode_jopl.h</HEADERFILE><OTHERFILE>default\C-OSD.lss</OTHERFILE><OTHERFILE>default\C-OSD.map</OTHERFILE><OTHERFILE>default\Makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>default\Makefile</EXTERNALMAKEFILE><PART>atmega162</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>C-OSD.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20100110\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20100110\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\mk-data-structs.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\max7456_software_spi.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\usart1.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\main.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_helpers.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\config.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\spi.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\buttons.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\ppm.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_ncmode_default.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_ncmode_minimal.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_fcmode_default.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\characters.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_fcmode_jopl.h</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\main.c</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\max7456_software_spi.c</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\usart1.c</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\characters.c</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_helpers.c</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_ncmode_default.c</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_fcmode_default.c</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\config.c</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\spi.c</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\buttons.c</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\ppm.c</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_ncmode_minimal.c</Name><Name>C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_fcmode_jopl.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>257</Status></File00000><File00001><FileId>00001</FileId><FileName>mk-data-structs.h</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>max7456_software_spi.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>max7456_software_spi.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>usart1.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>usart1.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>characters.c</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>main.h</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>osd_helpers.c</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>osd_helpers.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>osd_ncmode_default.c</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>osd_fcmode_default.c</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>config.c</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>config.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>spi.c</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>spi.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>buttons.c</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>buttons.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>ppm.c</FileName><Status>1</Status></File00018><File00019><FileId>00019</FileId><FileName>ppm.h</FileName><Status>1</Status></File00019><File00020><FileId>00020</FileId><FileName>osd_ncmode_minimal.c</FileName><Status>1</Status></File00020><File00021><FileId>00021</FileId><FileName>osd_ncmode_default.h</FileName><Status>1</Status></File00021><File00022><FileId>00022</FileId><FileName>osd_ncmode_minimal.h</FileName><Status>1</Status></File00022><File00023><FileId>00023</FileId><FileName>osd_fcmode_default.h</FileName><Status>1</Status></File00023><File00024><FileId>00024</FileId><FileName>characters.h</FileName><Status>1</Status></File00024><File00025><FileId>00025</FileId><FileName>osd_fcmode_jopl.c</FileName><Status>1</Status></File00025><File00026><FileId>00026</FileId><FileName>default\Makefile</FileName><Status>1</Status></File00026></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> |
/C-OSD/trunk/C-OSD AGRESSiVA mod/CHANGE.LOG |
---|
0,0 → 1,239 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
20100218-2330 |
*hopefully fixed the laggy osd data problem |
-send_data_mk has been striked out to save space |
@nc-mode should be small enough for bootloader again ( Program: 14986 bytes (91.5% Full) ) |
20100216-1430 |
*some menu stuff |
*stats in nc_default do not disturb the bigvario anymore |
*reduced code size from 16088 bytes (98.2% Full) 15436 bytes (94.2% Full) |
20100214-1700 |
+mah wasted per flight (still counts up after landing, but space gets tight) |
*init phase from 2000ms to 3000ms |
*init only takes place after first "valid" UBat is received (<4V should case the Mega to reset anyways) |
20100212-2310 |
*adapted MK-datastructs to NC 0.18c |
*added choice for current display measured by FC |
20091109-1100 |
+fc-only mode by Josef "jopl" Plasil (MK3Mag on FC and no NC) |
*usart1 routine to filter out unwanted datasets (also big thanks to jopl) |
20091102-2205 |
+nc/fc software version display in bootup |
*changed checkbytes because of previously removed EEPROM data |
20091030-2222 |
*synced NaviStruct to NC Code v0.17e |
(since nothing of the new stuff is used right now, older NC version will still work) |
20090714-2100 |
*fixed the flags (hopefully) for C-Strom and stuff |
20090706-2000 |
*hopefully fixed the new 10th number showing functions |
+support for GPS height instead of Baro |
20090703-0005 |
*write-number-functions changed, using itoa now, saves space, should be faster |
*inline added for basic max7456-spi_send because saves procedure call (^= time) |
20090627-1415 |
*ALL characters now in Progmem, from now on there will be only ONE char-file! |
20090612-2100 |
*spi transfer now struct driven (needs C-Strom 20090612-2100 now!!!) |
*lesser spi update rate (caused problems on some strom-slaves) |
*voltage gets transfered via spi as well |
*menu to switch display of 2nd voltage measured by C-Strom on and off |
20090604-1350 |
*bugfix for stats |
20090604-1330 |
*possible to choose between different osd-layouts (via menu) |
20090604-0700 |
+(shaddi)osd_ncmode_minimal for less symbols during FPV |
20090601-2233 |
*(woggle) changed timer init an interupt to be more precise |
*(woggle) remove all warning during compile |
*(woggle) simplify draw_big_variometer |
*(woggle) put compass rose to PROGMEM |
*(woggle) put directions array to PROGMEM |
20090525-2305 |
+HUD on/off via RC (connect to PPM, according to manual) testing stuff |
20090523-1150 |
+pal/ntsc changable in menu (applied immedeately!) |
20090519-2245 |
*mah corrected |
+config gets saved now (menu item!) |
*source moved a bit |
20090519-0115 |
+mah currently wasted |
*some small changes |
20090517-2345 |
*modded the real alpha stuff i have been talking about below |
20090516-2345 |
+some really testing stuff 'bout current measurement, more to come |
20090513-2350 |
*cellnumber autoconfig modified, offset set to 1,5V |
*copy paste nick/roll error fixed |
*clean after build in dist.sh |
+a little shellscript to auto-build the files (testing) |
*osd-layouts in seperate files so including own layouts should get easier |
+build date is displayed during init to know which version you are runing |
20090513-1040 |
*some code movement |
+artificial horizon for FC-ONLY mode |
20090512-2100 |
+some FCONLY basics (set FCONLY to 1 in main.h to use it) |
20090511-2345 |
*battery voltages now calculated according to CELL_VOLT_MIN CELL_VOLT_MAX and CELL_NUM |
*CELL_NUM -1 causes a rough auto detection of cell number |
-UBAT_WRN and UBAT_MAX are now deprecated |
20090427-2315 |
+write_gps_pos(...) (needs to be tested) |
+gps position is shown in stats screen for testing purpose |
20090427-2131 |
*stats are only collected while engines running (shaddi) |
20090427-2102 |
*fixed maximum distance in stats (shaddi) |
20090427-2050 |
*clear() now faster |
*fixed calculation of max speed in stats (shaddi) |
*littel typo in artificial horizon (thx joko) |
*stats are only shown AFTER flight (more specific, after motors had been on at least once) |
+indication icon for serial link (requires new character 198) |
+indication icon for manual controll (stick > stick threshold) |
(Character set 192 needs to be reflashed since new icon is in it) |
20090420-0205 |
*reset-bug fixed |
*moved code a bit |
20090419-2145 |
*reset-bug workaround in usart1.c: usart1_DisableTXD and usart1_EnableTXD |
20090419-1900 |
*fixed bug in heading-fine conv for bearing to home |
20090419-1245 |
*compass characters bigger |
*battery position |
+voltage-symbol to battery-voltage |
(Character Set 208 needs to be reflashed since compass chars are in it) |
20090418-2015 |
*fixed bug in Character Set 128 (reflash it if you already flashed it!) |
+another set of vario chars |
*changed vario to use new characters |
*moved vario/home-bearing positions |
*big vario now enabled via menu or BIGVARIO |
(Character Set 112 needs to be flashed) |
20090418-1235 |
+big vario for testing purpose |
(Character Set 192 needs to be flashed) |
20090418-0100 |
*variometer uses more steps (9 instead of 5) |
*home-arrow is now home-clock using more steps (22,5° resolution) |
+visual battery-gauge according to difference between UBAT_WRN and UBAT_MAX |
20090417-1115 |
*changed calculation of km/h (thx wowie) |
*added JochenK_(joko)'s characters |
(Character-Sets 128, 136, 144, 152, 160, 168, 176 and 184 need to be flashed!) |
20090408-1245 (shaddi) |
*fixed distance towards home |
20090408-0035 |
*rewrote number->display functions |
*fixed height bug (uint vs int) |
20090407-2100 |
+added request of OSD data, disrequest of debug data and uptime reset to menu |
-removed the uptime-reset binding from S2 |
+pgm space for some strings to save _normal_ data space |
*some code movement |
20090406-0130 |
*MK-Datastruct updated to work with NaviCtrl 0.15c firmware |
*changed flags from NO* to invers versions |
*enhanced the menu a bit |
-artificial horizon at bootup, the menu is cooler imho |
20090405-0207 |
+NOOSD as requested |
*height now corrected (thx lephisto) and displayed as .x up to 10m |
20090402-0106 |
+ disabling the txd pin while not using it so it won't interfere with KopterTool usage (thx joko) |
+ if no data has been received for over 2sec we re-request it |
* tried source organisation a bit |
20090401-1741 (shaddi) |
+ More precise Veriometer. Uses more more characters to show the speed of the movement |
(Character-Set 232 needs to be flashed!) |
20090331-1549 |
+ simple config menu during runtime, press S1 to jump in, S2 to cyle and S1 to accept choice |
- S1 no longer requests the NC data |
20090331-1305 |
+ added more statistics |
* corrected S1/S2 mapping (d'oh) |
+ started simple mode controll, press S2 during bootup toggles artificial horizon |
20090329-1452 |
* fixed bearing to home |
+ added flight stats (shown while engines off) |
+ sat icon should indicate PH/CH/Free now |
+ you need to flash characters 224-231 if you were using previous versions |
20090327-2140 |
* fixed km/h (was cm/s) |
* fixed height m (was dm) |
* modified incoming data speed to 100ms (was 200ms) |
20090326-2031 |
+ first binary release |
/C-OSD/trunk/C-OSD AGRESSiVA mod/LICENSE.TXT |
---|
0,0 → 1,340 |
GNU GENERAL PUBLIC LICENSE |
Version 2, June 1991 |
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
Everyone is permitted to copy and distribute verbatim copies |
of this license document, but changing it is not allowed. |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
License is intended to guarantee your freedom to share and change free |
software--to make sure the software is free for all its users. This |
General Public License applies to most of the Free Software |
Foundation's software and to any other program whose authors commit to |
using it. (Some other Free Software Foundation software is covered by |
the GNU Library General Public License instead.) You can apply it to |
your programs, too. |
When we speak of free software, we are referring to freedom, not |
price. Our General Public Licenses are designed to make sure that you |
have the freedom to distribute copies of free software (and charge for |
this service if you wish), that you receive source code or can get it |
if you want it, that you can change the software or use pieces of it |
in new free programs; and that you know you can do these things. |
To protect your rights, we need to make restrictions that forbid |
anyone to deny you these rights or to ask you to surrender the rights. |
These restrictions translate to certain responsibilities for you if you |
distribute copies of the software, or if you modify it. |
For example, if you distribute copies of such a program, whether |
gratis or for a fee, you must give the recipients all the rights that |
you have. You must make sure that they, too, receive or can get the |
source code. And you must show them these terms so they know their |
rights. |
We protect your rights with two steps: (1) copyright the software, and |
(2) offer you this license which gives you legal permission to copy, |
distribute and/or modify the software. |
Also, for each author's protection and ours, we want to make certain |
that everyone understands that there is no warranty for this free |
software. If the software is modified by someone else and passed on, we |
want its recipients to know that what they have is not the original, so |
that any problems introduced by others will not reflect on the original |
authors' reputations. |
Finally, any free program is threatened constantly by software |
patents. We wish to avoid the danger that redistributors of a free |
program will individually obtain patent licenses, in effect making the |
program proprietary. To prevent this, we have made it clear that any |
patent must be licensed for everyone's free use or not licensed at all. |
The precise terms and conditions for copying, distribution and |
modification follow. |
GNU GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License applies to any program or other work which contains |
a notice placed by the copyright holder saying it may be distributed |
under the terms of this General Public License. The "Program", below, |
refers to any such program or work, and a "work based on the Program" |
means either the Program or any derivative work under copyright law: |
that is to say, a work containing the Program or a portion of it, |
either verbatim or with modifications and/or translated into another |
language. (Hereinafter, translation is included without limitation in |
the term "modification".) Each licensee is addressed as "you". |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running the Program is not restricted, and the output from the Program |
is covered only if its contents constitute a work based on the |
Program (independent of having been made by running the Program). |
Whether that is true depends on what the Program does. |
1. You may copy and distribute verbatim copies of the Program's |
source code as you receive it, in any medium, provided that you |
conspicuously and appropriately publish on each copy an appropriate |
copyright notice and disclaimer of warranty; keep intact all the |
notices that refer to this License and to the absence of any warranty; |
and give any other recipients of the Program a copy of this License |
along with the Program. |
You may charge a fee for the physical act of transferring a copy, and |
you may at your option offer warranty protection in exchange for a fee. |
2. You may modify your copy or copies of the Program or any portion |
of it, thus forming a work based on the Program, and copy and |
distribute such modifications or work under the terms of Section 1 |
above, provided that you also meet all of these conditions: |
a) You must cause the modified files to carry prominent notices |
stating that you changed the files and the date of any change. |
b) You must cause any work that you distribute or publish, that in |
whole or in part contains or is derived from the Program or any |
part thereof, to be licensed as a whole at no charge to all third |
parties under the terms of this License. |
c) If the modified program normally reads commands interactively |
when run, you must cause it, when started running for such |
interactive use in the most ordinary way, to print or display an |
announcement including an appropriate copyright notice and a |
notice that there is no warranty (or else, saying that you provide |
a warranty) and that users may redistribute the program under |
these conditions, and telling the user how to view a copy of this |
License. (Exception: if the Program itself is interactive but |
does not normally print such an announcement, your work based on |
the Program is not required to print an announcement.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Program, |
and can be reasonably considered independent and separate works in |
themselves, then this License, and its terms, do not apply to those |
sections when you distribute them as separate works. But when you |
distribute the same sections as part of a whole which is a work based |
on the Program, the distribution of the whole must be on the terms of |
this License, whose permissions for other licensees extend to the |
entire whole, and thus to each and every part regardless of who wrote it. |
Thus, it is not the intent of this section to claim rights or contest |
your rights to work written entirely by you; rather, the intent is to |
exercise the right to control the distribution of derivative or |
collective works based on the Program. |
In addition, mere aggregation of another work not based on the Program |
with the Program (or with a work based on the Program) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may copy and distribute the Program (or a work based on it, |
under Section 2) in object code or executable form under the terms of |
Sections 1 and 2 above provided that you also do one of the following: |
a) Accompany it with the complete corresponding machine-readable |
source code, which must be distributed under the terms of Sections |
1 and 2 above on a medium customarily used for software interchange; or, |
b) Accompany it with a written offer, valid for at least three |
years, to give any third party, for a charge no more than your |
cost of physically performing source distribution, a complete |
machine-readable copy of the corresponding source code, to be |
distributed under the terms of Sections 1 and 2 above on a medium |
customarily used for software interchange; or, |
c) Accompany it with the information you received as to the offer |
to distribute corresponding source code. (This alternative is |
allowed only for noncommercial distribution and only if you |
received the program in object code or executable form with such |
an offer, in accord with Subsection b above.) |
The source code for a work means the preferred form of the work for |
making modifications to it. For an executable work, complete source |
code means all the source code for all modules it contains, plus any |
associated interface definition files, plus the scripts used to |
control compilation and installation of the executable. However, as a |
special exception, the source code distributed need not include |
anything that is normally distributed (in either source or binary |
form) with the major components (compiler, kernel, and so on) of the |
operating system on which the executable runs, unless that component |
itself accompanies the executable. |
If distribution of executable or object code is made by offering |
access to copy from a designated place, then offering equivalent |
access to copy the source code from the same place counts as |
distribution of the source code, even though third parties are not |
compelled to copy the source along with the object code. |
4. You may not copy, modify, sublicense, or distribute the Program |
except as expressly provided under this License. Any attempt |
otherwise to copy, modify, sublicense or distribute the Program is |
void, and will automatically terminate your rights under this License. |
However, parties who have received copies, or rights, from you under |
this License will not have their licenses terminated so long as such |
parties remain in full compliance. |
5. You are not required to accept this License, since you have not |
signed it. However, nothing else grants you permission to modify or |
distribute the Program or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Program (or any work based on the |
Program), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Program or works based on it. |
6. Each time you redistribute the Program (or any work based on the |
Program), the recipient automatically receives a license from the |
original licensor to copy, distribute or modify the Program subject to |
these terms and conditions. You may not impose any further |
restrictions on the recipients' exercise of the rights granted herein. |
You are not responsible for enforcing compliance by third parties to |
this License. |
7. If, as a consequence of a court judgment or allegation of patent |
infringement or for any other reason (not limited to patent issues), |
conditions are imposed on you (whether by court order, agreement or |
otherwise) that contradict the conditions of this License, they do not |
excuse you from the conditions of this License. If you cannot |
distribute so as to satisfy simultaneously your obligations under this |
License and any other pertinent obligations, then as a consequence you |
may not distribute the Program at all. For example, if a patent |
license would not permit royalty-free redistribution of the Program by |
all those who receive copies directly or indirectly through you, then |
the only way you could satisfy both it and this License would be to |
refrain entirely from distribution of the Program. |
If any portion of this section is held invalid or unenforceable under |
any particular circumstance, the balance of the section is intended to |
apply and the section as a whole is intended to apply in other |
circumstances. |
It is not the purpose of this section to induce you to infringe any |
patents or other property right claims or to contest validity of any |
such claims; this section has the sole purpose of protecting the |
integrity of the free software distribution system, which is |
implemented by public license practices. Many people have made |
generous contributions to the wide range of software distributed |
through that system in reliance on consistent application of that |
system; it is up to the author/donor to decide if he or she is willing |
to distribute software through any other system and a licensee cannot |
impose that choice. |
This section is intended to make thoroughly clear what is believed to |
be a consequence of the rest of this License. |
8. If the distribution and/or use of the Program is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Program under this License |
may add an explicit geographical distribution limitation excluding |
those countries, so that distribution is permitted only in or among |
countries not thus excluded. In such case, this License incorporates |
the limitation as if written in the body of this License. |
9. The Free Software Foundation may publish revised and/or new versions |
of the General Public License from time to time. Such new versions will |
be similar in spirit to the present version, but may differ in detail to |
address new problems or concerns. |
Each version is given a distinguishing version number. If the Program |
specifies a version number of this License which applies to it and "any |
later version", you have the option of following the terms and conditions |
either of that version or of any later version published by the Free |
Software Foundation. If the Program does not specify a version number of |
this License, you may choose any version ever published by the Free Software |
Foundation. |
10. If you wish to incorporate parts of the Program into other free |
programs whose distribution conditions are different, write to the author |
to ask for permission. For software which is copyrighted by the Free |
Software Foundation, write to the Free Software Foundation; we sometimes |
make exceptions for this. Our decision will be guided by the two goals |
of preserving the free status of all derivatives of our free software and |
of promoting the sharing and reuse of software generally. |
NO WARRANTY |
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
REPAIR OR CORRECTION. |
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
POSSIBILITY OF SUCH DAMAGES. |
END OF TERMS AND CONDITIONS |
How to Apply These Terms to Your New Programs |
If you develop a new program, and you want it to be of the greatest |
possible use to the public, the best way to achieve this is to make it |
free software which everyone can redistribute and change under these terms. |
To do so, attach the following notices to the program. It is safest |
to attach them to the start of each source file to most effectively |
convey the exclusion of warranty; and each file should have at least |
the "copyright" line and a pointer to where the full notice is found. |
<one line to give the program's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
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 2 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, write to the Free Software |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
Also add information on how to contact you by electronic and paper mail. |
If the program is interactive, make it output a short notice like this |
when it starts in an interactive mode: |
Gnomovision version 69, Copyright (C) year name of author |
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
This is free software, and you are welcome to redistribute it |
under certain conditions; type `show c' for details. |
The hypothetical commands `show w' and `show c' should show the appropriate |
parts of the General Public License. Of course, the commands you use may |
be called something other than `show w' and `show c'; they could even be |
mouse-clicks or menu items--whatever suits your program. |
You should also get your employer (if you work as a programmer) or your |
school, if any, to sign a "copyright disclaimer" for the program, if |
necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the program |
`Gnomovision' (which makes passes at compilers) written by James Hacker. |
<signature of Ty Coon>, 1 April 1989 |
Ty Coon, President of Vice |
This General Public License does not permit incorporating your program into |
proprietary programs. If your program is a subroutine library, you may |
consider it more useful to permit linking proprietary applications with the |
library. If this is what you want to do, use the GNU Library General |
Public License instead of this License. |
/C-OSD/trunk/C-OSD AGRESSiVA mod/README.TXT |
---|
0,0 → 1,61 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
Look at |
http://www.mylifesucks.de/oss/c-osd/ |
to see what this is all about. |
Simple way: |
- Flash C-OSD-characters-(pal|ntsc).hex |
- the 3rd LED (green one) should blink now |
- wait till all chars appear on screen and ALL 4 LEDs are on |
- Flash C-OSD-*-(pal|ntsc).hex acording to your needs |
If you already have flashed a specific character file (or more) and you just want to |
update the software itself, you do not need to flash the character files again. |
Instructions: |
Connect the "To FC" port from EPi-OSD to the Debug port of the NaviCtrl. |
You will need NaviCtrl 0.18c soft to fully enjoy the software. |
S1 enters a menu where you can cycle through using S2 and toggle/accept choice with S1 |
You can connect a spare RC-Channel to the PPM connector and enable/disable the HUD remotely with it, hopefully. |
Known Problems: |
When using the EPi-OSD, NaviCtrl and another Pc-Connection (direct or via wireless connections like bluetooth, WI232, WiFi and such) on the same wire there might be data collisions causing laggy screen updates, and in some hypothetical cases that are not scientifically proven, harm to the Atmega and other attached Hardware. So it is not recommended to use the stuff like that, altough some people are and not experiencing any problems at all. |
Software may fry your cat when flashing the micro-oven with it, or even when using the software near a micro-oven. |
How To Flash the software (the MK-user way): |
Requirements: |
- Windows PC with a real SerialPort |
- PonyProg (http://www.LancOS.com) |
- SerCon |
HowTo: |
- Connect the ISP1 from SerCon to the ISP connector of the EPi-OSD board using a |
normal 1:1 cable |
- Set the Jumper on the SerCon |
- SetUp PonyProg |
Setup -> Interfac Setup |
and select the correct Serial Port and "SI Prog API" |
- Select Chip manufacturer "AVR micro" and Chip "ATMega162" |
- If this is the first time using you board check the fuses (only BOD1LEVEL and EESAVE are checked) |
- Open the .hex file and Writa All (Ctrl+W) |
- Hopefully done :) |
/C-OSD/trunk/C-OSD AGRESSiVA mod/buttons.c |
---|
0,0 → 1,42 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include <avr/io.h> |
#include <util/delay.h> |
#include "main.h" |
/* ########################################################################## |
* debounce buttons |
* ##########################################################################*/ |
int s1_pressed() { |
if (S1_PRESSED) { |
_delay_ms(25); |
if (S1_PRESSED) return 1; |
} |
return 0; |
} |
int s2_pressed() { |
if (S2_PRESSED) { |
_delay_ms(25); |
if (S2_PRESSED) return 1; |
} |
return 0; |
} |
/C-OSD/trunk/C-OSD AGRESSiVA mod/buttons.h |
---|
0,0 → 1,25 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
/* ########################################################################## |
* debounce buttons |
* ##########################################################################*/ |
int s1_pressed(); |
int s2_pressed(); |
/C-OSD/trunk/C-OSD AGRESSiVA mod/c-osd.aws |
---|
0,0 → 1,0 |
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA162"/><Files><File00000 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\main.c" Position="393 137 1391 603" LineCol="4 47" State="Maximized"/><File00001 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\mk-data-structs.h" Position="418 162 1433 623" LineCol="41 0" State="Maximized"/><File00002 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\max7456_software_spi.h" Position="443 187 1458 648" LineCol="0 0" State="Maximized"/><File00003 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\max7456_software_spi.c" Position="468 212 1483 673" LineCol="162 0" State="Maximized"/><File00004 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\usart1.c" Position="493 237 1508 698" LineCol="42 0" State="Maximized"/><File00005 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\usart1.h" Position="518 262 1533 723" LineCol="0 0" State="Maximized"/><File00006 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\characters.c" Position="385 107 1620 810" LineCol="5925 0" State="Maximized"/><File00007 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\main.h" Position="568 312 1583 773" LineCol="20 0" State="Maximized"/><File00008 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_helpers.c" Position="593 337 1608 798" LineCol="229 0" State="Maximized"/><File00009 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_helpers.h" Position="393 137 1408 598" LineCol="69 0" State="Maximized"/><File00010 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_ncmode_default.c" Position="418 162 1433 623" LineCol="0 0" State="Maximized"/><File00011 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_fcmode_default.c" Position="443 187 1458 648" LineCol="104 0" State="Maximized"/><File00012 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\config.c" Position="468 212 1483 673" LineCol="90 55" State="Maximized"/><File00013 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\config.h" Position="493 237 1508 698" LineCol="0 0" State="Maximized"/><File00014 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\spi.c" Position="518 262 1533 723" LineCol="0 0" State="Maximized"/><File00015 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\spi.h" Position="543 287 1558 748" LineCol="0 0" State="Maximized"/><File00016 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\buttons.c" Position="568 312 1583 773" LineCol="0 0" State="Maximized"/><File00017 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\buttons.h" Position="593 337 1608 798" LineCol="0 0" State="Maximized"/><File00018 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\ppm.c" Position="393 137 1408 598" LineCol="0 0" State="Maximized"/><File00019 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\ppm.h" Position="418 162 1433 623" LineCol="0 0" State="Maximized"/><File00020 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_ncmode_minimal.c" Position="443 187 1458 648" LineCol="0 0" State="Maximized"/><File00021 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_ncmode_default.h" Position="468 212 1483 673" LineCol="0 0" State="Maximized"/><File00022 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_ncmode_minimal.h" Position="493 237 1508 698" LineCol="0 0" State="Maximized"/><File00023 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_fcmode_default.h" Position="518 262 1533 723" LineCol="7 0" State="Maximized"/><File00024 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\characters.h" Position="543 287 1558 748" LineCol="24 0" State="Maximized"/><File00025 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\osd_fcmode_jopl.c" Position="568 312 1583 773" LineCol="26 0" State="Maximized"/><File00026 Name="C:\Users\eduardo\Desktop\C-OSD 18_02_2010\default\Makefile" Position="593 337 1608 798" LineCol="79 0" State="Maximized"/></Files></AVRWorkspace> |
/C-OSD/trunk/C-OSD AGRESSiVA mod/c-osd.mcm |
---|
0,0 → 1,16385 |
MAX7456 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10101000 |
01010101 |
01010010 |
10101000 |
01010101 |
01010000 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
00101000 |
00010101 |
01010010 |
10101010 |
10000101 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
10000000 |
10101000 |
00101010 |
00010101 |
00101000 |
01000000 |
01010101 |
00101000 |
01010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000101 |
01010101 |
00101010 |
00010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
00101000 |
01010101 |
01000000 |
10101000 |
01010101 |
00101010 |
10100001 |
01010101 |
00101010 |
10100001 |
01010101 |
01000000 |
10101000 |
01000001 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00010101 |
01010101 |
01010010 |
10000101 |
01010101 |
01001010 |
10000101 |
01010101 |
00101010 |
10000101 |
01010100 |
10101010 |
10000101 |
01010010 |
10100010 |
10000101 |
01001010 |
10000010 |
10000101 |
00101010 |
00010010 |
10000101 |
00101000 |
00000010 |
10000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
01000000 |
00000010 |
10000001 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010100 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
00101000 |
00000000 |
00000001 |
00101000 |
00000000 |
00010101 |
00101010 |
10101010 |
10000101 |
00101010 |
10101010 |
10100001 |
01000000 |
00000000 |
10101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01000001 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
01000001 |
00101000 |
00000000 |
00010101 |
00101010 |
10101010 |
10000101 |
00101010 |
10101010 |
10100001 |
00101000 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
01000000 |
00000000 |
00101000 |
01010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000101 |
01010101 |
00101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
00101000 |
01001010 |
10101010 |
10101000 |
01010010 |
10101010 |
10101000 |
01010100 |
00000000 |
00101000 |
01000001 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10000010 |
10100001 |
00101010 |
00010100 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
00000000 |
00101000 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
00101000 |
00000000 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00010101 |
00101010 |
10101010 |
10000101 |
00101010 |
10101010 |
10100001 |
00101000 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
00000000 |
10101000 |
00101010 |
10101010 |
10100001 |
00101010 |
10101010 |
10100001 |
00101000 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
00000000 |
10101000 |
00101010 |
10101010 |
10100001 |
00101010 |
10101010 |
10000101 |
01000000 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
01000001 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000001 |
01010101 |
00101010 |
10101000 |
01010101 |
00101010 |
10101010 |
00010101 |
00101000 |
00001010 |
10000101 |
00101000 |
01010010 |
10100001 |
00101000 |
01010100 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010100 |
10101000 |
00101000 |
01010010 |
10100001 |
00101000 |
00001010 |
10000101 |
00101010 |
10101010 |
00010101 |
00101010 |
10101000 |
01010101 |
01000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
00101000 |
00000000 |
00000001 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
00000000 |
00010101 |
00101010 |
10101010 |
10000101 |
00101010 |
10101010 |
10000101 |
00101000 |
00000000 |
00010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
00000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
00101000 |
00000000 |
00000001 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
00000000 |
00010101 |
00101010 |
10101010 |
10000101 |
00101010 |
10101010 |
10000101 |
00101000 |
00000000 |
00010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000010 |
10100001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
01000001 |
00101000 |
01000000 |
00000001 |
00101000 |
00101010 |
10101000 |
00101000 |
00101010 |
10101000 |
00101000 |
01000000 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
00101000 |
01001010 |
10101010 |
10101000 |
01010010 |
10101010 |
10101000 |
01010100 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
00000000 |
00101000 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
00101000 |
00000000 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01010010 |
10101010 |
10000101 |
01010100 |
00101000 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
00101000 |
00010101 |
01010010 |
10101010 |
10000101 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000001 |
01010101 |
00101010 |
10101000 |
01010101 |
00101010 |
10101000 |
01010101 |
01000010 |
10000001 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01000001 |
01010010 |
10000101 |
00101000 |
01010010 |
10000101 |
00101010 |
00001010 |
10000101 |
01001010 |
10101010 |
00010101 |
01010010 |
10101000 |
01010101 |
01010100 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010100 |
10101000 |
00101000 |
01010010 |
10100001 |
00101000 |
01001010 |
10000101 |
00101000 |
00101010 |
00010101 |
00101000 |
10101000 |
01010101 |
00101010 |
10100001 |
01010101 |
00101010 |
10100001 |
01010101 |
00101000 |
10101000 |
01010101 |
00101000 |
00101010 |
00010101 |
00101000 |
01001010 |
10000101 |
00101000 |
01010010 |
10100001 |
00101000 |
01010100 |
10101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
00000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101010 |
00010100 |
10101000 |
00101010 |
10000010 |
10101000 |
00101010 |
10101010 |
10101000 |
00101000 |
10101010 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
01000001 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101010 |
00010101 |
00101000 |
00101010 |
10000101 |
00101000 |
00101010 |
10000101 |
00101000 |
00101000 |
10100001 |
00101000 |
00101000 |
10100001 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
01001010 |
00101000 |
00101000 |
01001010 |
00101000 |
00101000 |
01010010 |
10101000 |
00101000 |
01010010 |
10101000 |
00101000 |
01010100 |
10101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00010101 |
00101010 |
10101010 |
10000101 |
00101010 |
10101010 |
10100001 |
00101000 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
00000000 |
10101000 |
00101010 |
10101010 |
10100001 |
00101010 |
10101010 |
10000101 |
00101000 |
00000000 |
00010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01000001 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101010 |
00101000 |
00101000 |
01001010 |
10101000 |
00101010 |
00000010 |
10100001 |
01001010 |
10101010 |
10101000 |
01010010 |
10101000 |
00101000 |
01010100 |
00000001 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00010101 |
00101010 |
10101010 |
10000101 |
00101010 |
10101010 |
10100001 |
00101000 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
00000000 |
10101000 |
00101010 |
10101010 |
10100001 |
00101010 |
10101010 |
10000101 |
00101000 |
10101000 |
00010101 |
00101000 |
00101010 |
00010101 |
00101000 |
01001010 |
10000101 |
00101000 |
01010010 |
10100001 |
00101000 |
01010100 |
10101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00000101 |
01010010 |
10101010 |
10100001 |
01001010 |
10101010 |
10101000 |
00101010 |
00000000 |
00101000 |
00101000 |
01010101 |
01000001 |
00101000 |
01010101 |
01010101 |
00101010 |
00000000 |
00010101 |
01001010 |
10101010 |
10000101 |
01010010 |
10101010 |
10100001 |
01010100 |
00000000 |
10101000 |
01010101 |
01010101 |
00101000 |
01000001 |
01010101 |
00101000 |
00101000 |
00000000 |
10101000 |
00101010 |
10101010 |
10100001 |
01001010 |
10101010 |
10000101 |
01010000 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
01000000 |
00101000 |
00000001 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00010100 |
10101000 |
01001010 |
10000010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01000001 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101010 |
10101010 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10000010 |
10000101 |
01010100 |
00010100 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00010100 |
10101000 |
01001010 |
10000010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10000010 |
10100001 |
00101010 |
00010100 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00010100 |
10101000 |
01001010 |
10000010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
01000000 |
00000000 |
00101000 |
01010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000101 |
01010101 |
00101010 |
00010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000101 |
01010101 |
00101010 |
00010101 |
01010101 |
00101000 |
00000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01010010 |
10101010 |
10100001 |
01010100 |
00000000 |
10101000 |
01010100 |
00000000 |
00101000 |
01010010 |
10101010 |
00101000 |
01001010 |
10101010 |
10101000 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10101000 |
01010010 |
10101010 |
00101000 |
01010100 |
00000000 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01000000 |
01010101 |
00101000 |
00101010 |
00010101 |
00101000 |
10101010 |
10000101 |
00101010 |
10100010 |
10100001 |
00101010 |
10000100 |
10101000 |
00101010 |
00010101 |
00101000 |
00101010 |
00010101 |
00101000 |
00101010 |
00010101 |
00101000 |
00101010 |
10000100 |
10101000 |
00101010 |
10100010 |
10100001 |
00101000 |
10101010 |
10000101 |
00101000 |
00101010 |
00010101 |
01000001 |
01000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
01000001 |
00101000 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
00000001 |
00101000 |
01010100 |
10101000 |
00101000 |
01010010 |
10101010 |
00101000 |
01001010 |
10001010 |
10101000 |
00101010 |
00010010 |
10101000 |
00101000 |
01010100 |
10101000 |
00101000 |
01010100 |
10101000 |
00101000 |
01010100 |
10101000 |
00101010 |
00010010 |
10101000 |
01001010 |
10001010 |
10101000 |
01010010 |
10101010 |
00101000 |
01010100 |
10101000 |
00101000 |
01010101 |
00000001 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
00000000 |
00101000 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10100001 |
00101000 |
00000000 |
00000101 |
00101000 |
01010101 |
00000001 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010000 |
00000101 |
01010101 |
01001010 |
10100001 |
01010101 |
00101010 |
10100001 |
01010101 |
00101000 |
00000101 |
01010000 |
00101000 |
00000101 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01010000 |
00101000 |
00000101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10101000 |
01010010 |
10101010 |
00101000 |
01010100 |
00000000 |
00101000 |
01010000 |
01010101 |
00101000 |
01001010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01000000 |
01010101 |
00101000 |
00101010 |
00010101 |
00101000 |
10101010 |
10000101 |
00101010 |
10100010 |
10100001 |
00101010 |
10000100 |
10101000 |
00101010 |
00010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010100 |
00000001 |
01010101 |
01010010 |
10101000 |
01010101 |
01010010 |
10101000 |
01010101 |
01010100 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101010 |
00010101 |
01010101 |
01001010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010100 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00010101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010100 |
00010101 |
01010101 |
01000000 |
00010101 |
01010101 |
00101010 |
10000101 |
01010101 |
00101010 |
10000101 |
01010101 |
01000010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010100 |
00001010 |
10000101 |
01010010 |
10101010 |
00010101 |
01010010 |
10101000 |
01010101 |
01010100 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010100 |
10101000 |
00101000 |
01010010 |
10100001 |
00101000 |
01001010 |
10000101 |
00101000 |
00101010 |
00010101 |
00101000 |
10101000 |
01010101 |
00101010 |
10101010 |
00010101 |
00101010 |
10001010 |
10000101 |
00101010 |
00010010 |
10100001 |
00101000 |
01010100 |
10101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
00000000 |
00010101 |
00101000 |
10101010 |
10000101 |
00101010 |
10101010 |
10100001 |
00101010 |
00101000 |
10101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
01000001 |
01000001 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
00000000 |
00010101 |
00101000 |
10101010 |
10000101 |
00101010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
00000000 |
00010101 |
00101000 |
10101010 |
10000101 |
00101010 |
10101010 |
10100001 |
00101010 |
10000000 |
10101000 |
00101010 |
00010101 |
00101000 |
00101010 |
00010101 |
00101000 |
00101010 |
00010101 |
00101000 |
00101010 |
10000000 |
10101000 |
00101010 |
10101010 |
10100001 |
00101000 |
10101010 |
10000101 |
00101000 |
00000000 |
00010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
01000001 |
01010010 |
10101010 |
00101000 |
01001010 |
10101010 |
10101000 |
00101010 |
00000010 |
10101000 |
00101000 |
01010100 |
10101000 |
00101000 |
01010100 |
10101000 |
00101000 |
01010100 |
10101000 |
00101010 |
00000010 |
10101000 |
01001010 |
10101010 |
10101000 |
01010010 |
10101000 |
10101000 |
01010100 |
00000001 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01000000 |
00010101 |
00101000 |
00101010 |
10000101 |
00101000 |
10101010 |
10100001 |
00101010 |
10100000 |
10101000 |
00101010 |
10000101 |
00101000 |
00101010 |
00010101 |
01000001 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101010 |
00000001 |
00101000 |
01001010 |
10101000 |
00000001 |
01010000 |
10101010 |
10000101 |
01000001 |
00001010 |
10100001 |
00101000 |
01010000 |
10101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
00101000 |
00010101 |
01010010 |
10101010 |
10000101 |
01010010 |
10101010 |
10000101 |
01010100 |
00101000 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101010 |
00010101 |
01010101 |
01001010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010100 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00000000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101010 |
00010100 |
10101000 |
01001010 |
10000010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01000001 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101000 |
00101010 |
00101000 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10000010 |
10000101 |
01010100 |
00010100 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101010 |
00010100 |
10101000 |
01001010 |
10000010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10000010 |
10100001 |
00101010 |
00010100 |
10101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01000001 |
00101000 |
01010101 |
00101000 |
00101000 |
01010101 |
00101000 |
00101000 |
01010100 |
10101000 |
00101000 |
01010100 |
10101000 |
00101000 |
01010010 |
10101000 |
00101010 |
00001010 |
10101000 |
01001010 |
10101010 |
00101000 |
01010010 |
10101000 |
00101000 |
01010100 |
00000001 |
00101000 |
01010100 |
00000000 |
10101000 |
01010010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
01000000 |
00000000 |
10101000 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000101 |
01010101 |
00101010 |
00010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000101 |
01010101 |
01010100 |
10100001 |
01010101 |
01010010 |
10000101 |
01010101 |
01001010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01001010 |
00010101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010100 |
10100001 |
01010101 |
01010101 |
00000101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00010101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010100 |
10100001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01001010 |
00010101 |
01010101 |
01001010 |
00010101 |
01010101 |
01001010 |
00010101 |
01010101 |
01001010 |
00010101 |
01010101 |
01001010 |
00010101 |
01010101 |
01001010 |
00010101 |
01010101 |
01001010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10100001 |
01010101 |
01010010 |
10000101 |
01010101 |
01010100 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00010101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010100 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
00000000 |
10101000 |
00101000 |
01010101 |
00101000 |
01000001 |
01010101 |
00101000 |
01010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000101 |
01010101 |
00101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10100001 |
01010101 |
01010010 |
10000101 |
01010101 |
01010100 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10100001 |
01010101 |
01010010 |
10000101 |
01010101 |
01010100 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010001 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
00101010 |
00010101 |
01010101 |
01001010 |
00010101 |
01010101 |
01010010 |
00010101 |
01010101 |
01010010 |
00010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01010001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000101 |
01010101 |
00101010 |
00010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000101 |
01010101 |
00101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
01010101 |
00010101 |
01010010 |
00010100 |
10000101 |
01001010 |
10000010 |
10100001 |
01010010 |
10000100 |
10100001 |
01010100 |
10000101 |
00100001 |
01010100 |
10000101 |
00100001 |
01010010 |
00010100 |
10000101 |
01010100 |
01010101 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000101 |
01010100 |
10101010 |
10100001 |
01010100 |
10101010 |
10100001 |
01010101 |
00000000 |
00000101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000101 |
01010101 |
01010100 |
10100001 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000101 |
01010101 |
00101010 |
00010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000101 |
01010101 |
01001010 |
10000101 |
01010101 |
01010010 |
10100001 |
01010101 |
01010100 |
10101000 |
01010101 |
01010101 |
00101010 |
00010101 |
01010101 |
01001010 |
10000101 |
01010101 |
01010010 |
10100001 |
01010101 |
01010100 |
10100001 |
01010101 |
01010101 |
00000101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010000 |
01010101 |
01010101 |
01001010 |
00010101 |
01010101 |
01001010 |
10000101 |
01010101 |
01010010 |
10100001 |
01010101 |
01010100 |
10101000 |
01010101 |
01010101 |
00101010 |
00010101 |
01010101 |
01001010 |
10000101 |
01010101 |
01010010 |
10100001 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000101 |
01010101 |
00101010 |
00010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10100001 |
01010101 |
01001010 |
10000101 |
01010101 |
01001010 |
00010101 |
01010101 |
01010000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
00000000 |
10000101 |
01001000 |
00000100 |
00100001 |
00100000 |
10100010 |
00001000 |
00100010 |
00001010 |
00001000 |
00100010 |
00000010 |
00001000 |
00100010 |
00001010 |
00001000 |
00100000 |
10100010 |
00100001 |
00100001 |
00000100 |
10000101 |
01001000 |
01010101 |
00000101 |
01010010 |
00000000 |
00100001 |
01010100 |
10101010 |
10000101 |
01010101 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101010 |
10101010 |
10101010 |
01010101 |
01010101 |
01010110 |
01010101 |
01011001 |
01010110 |
01010101 |
01011001 |
01011001 |
01010101 |
01011001 |
01100101 |
01010101 |
01011010 |
10010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010110 |
10010101 |
01010101 |
01101010 |
01010101 |
01010110 |
10010110 |
01010101 |
01101001 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01101010 |
10101010 |
10101010 |
01100101 |
01010101 |
01010110 |
01100101 |
01010101 |
01010110 |
01100101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011010 |
10101010 |
10101001 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01101010 |
10101010 |
10101010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01101010 |
10101010 |
10101010 |
01010101 |
01011010 |
01010101 |
01010101 |
01100110 |
01010101 |
01010101 |
01100110 |
01010101 |
01010101 |
10010110 |
01010101 |
01010101 |
10010110 |
01010101 |
01010110 |
01010110 |
01010101 |
01011001 |
01010110 |
01010101 |
01100101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01101010 |
10101010 |
10101010 |
01010101 |
01011001 |
01010110 |
01010101 |
01011001 |
01010110 |
01010101 |
01100101 |
01010110 |
01010101 |
01100101 |
01010110 |
01010101 |
01100101 |
01010110 |
01010101 |
10010101 |
01010110 |
01010101 |
10010101 |
01010110 |
01010110 |
01010101 |
01010110 |
01010110 |
01010101 |
01010110 |
01011001 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01011010 |
10101010 |
10100101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01011001 |
01010101 |
01101010 |
10101010 |
10101010 |
01010101 |
01011001 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10101010 |
10101010 |
01010101 |
10010101 |
01010110 |
01010110 |
01010101 |
01010110 |
01011001 |
01010101 |
01010110 |
01100101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01101010 |
01010101 |
01011010 |
10010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011010 |
10101010 |
10101010 |
01011001 |
01010110 |
01010101 |
01100101 |
01010110 |
01010101 |
01100101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010110 |
10010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011010 |
10101010 |
10101001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01011010 |
10101010 |
10101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
01010101 |
01100101 |
01010110 |
01010101 |
01100101 |
01101010 |
10101010 |
10101010 |
01010110 |
01010101 |
01100101 |
01010110 |
01010101 |
01100101 |
01010110 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01011010 |
01010101 |
01010101 |
10100101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101010 |
10010101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
01101010 |
10010101 |
01010110 |
01010101 |
01100101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010110 |
10010101 |
01101010 |
10101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101010 |
10101010 |
10101001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011010 |
01010101 |
01010101 |
01100101 |
10010101 |
01010101 |
10010101 |
01100101 |
01010110 |
01010101 |
01011001 |
01101001 |
01010101 |
01010110 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01101010 |
10101010 |
01101010 |
10010101 |
01010110 |
01010110 |
01010101 |
01011001 |
01010110 |
01010101 |
01100101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
01101010 |
10101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
01100101 |
01010101 |
01010110 |
01011001 |
01010101 |
01010110 |
01011001 |
01010101 |
01010110 |
01010110 |
01010101 |
01010110 |
01010101 |
10010101 |
01010110 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01101001 |
01010101 |
01011010 |
10010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01101010 |
10101010 |
01010101 |
10010101 |
01010110 |
01010101 |
10010101 |
01010110 |
01010110 |
01010101 |
01010110 |
01101001 |
01100101 |
01011001 |
01010101 |
01011010 |
01011001 |
01010101 |
01010101 |
10100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01011010 |
01010101 |
01010101 |
10100101 |
01010101 |
01101010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010110 |
10010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01101010 |
10101010 |
10101010 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01011010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01100101 |
10010101 |
01011001 |
01100101 |
10010101 |
01011001 |
01011001 |
01100101 |
01011001 |
01011001 |
01100101 |
01011001 |
01011001 |
01100101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
10100101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
10101010 |
10100101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101010 |
10101010 |
10101010 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01011010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
10010101 |
01010101 |
01010110 |
01101001 |
01010101 |
01010110 |
01010110 |
01010101 |
01010110 |
01010101 |
10010101 |
01010110 |
01010101 |
01100101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01101010 |
10101010 |
10101010 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01011010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
10101010 |
10100101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101010 |
10101010 |
10101010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
10101010 |
10101001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
10010101 |
01100101 |
01010101 |
01100101 |
01100101 |
01010101 |
01011001 |
10010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011001 |
10010101 |
01010101 |
10100101 |
01100101 |
01011010 |
01010101 |
01011001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010101 |
01010101 |
01011010 |
10101010 |
10101001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011010 |
01010101 |
01010101 |
01101001 |
10100101 |
01010110 |
10011001 |
01011001 |
01101001 |
01011001 |
01010110 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01011010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01100101 |
10010101 |
01010101 |
01100101 |
10010101 |
01010101 |
01100101 |
01100101 |
01010101 |
10010101 |
01100101 |
01010101 |
10010101 |
01100101 |
01010101 |
10010101 |
01100101 |
01010110 |
01010101 |
01011001 |
01010110 |
01010101 |
01011001 |
01010110 |
01010101 |
01011001 |
01011001 |
01010101 |
01010110 |
01011001 |
01010101 |
01010110 |
01011001 |
01010101 |
01010110 |
01100101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
10101001 |
01101010 |
10101010 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010110 |
01010110 |
10101010 |
10101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101010 |
10101010 |
10101001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10100101 |
01010101 |
01010110 |
01100101 |
01010101 |
01010110 |
01011001 |
01010101 |
01011001 |
01010110 |
01010101 |
01011001 |
01010110 |
01010101 |
01100101 |
01010101 |
10010101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01101010 |
10101010 |
10101010 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010110 |
01011001 |
01100101 |
01010110 |
01011001 |
01100101 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01100101 |
01011001 |
01010110 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101010 |
10101010 |
10101010 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010110 |
01010101 |
01100101 |
01010101 |
10010101 |
10010101 |
01010101 |
01101010 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011010 |
10100101 |
01010101 |
01010101 |
01011010 |
01010101 |
01010101 |
01010101 |
10100101 |
01010101 |
01010101 |
01010101 |
01011010 |
10100101 |
01010101 |
01010101 |
01011010 |
01010101 |
01010101 |
01010101 |
10100101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011010 |
10100101 |
01010101 |
01010101 |
01011010 |
01010101 |
01010101 |
01010101 |
10100101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010110 |
01010101 |
01010110 |
01010101 |
10010101 |
01010110 |
01010101 |
10010101 |
01011001 |
01010101 |
01100101 |
01011001 |
01011010 |
10100101 |
01101010 |
10100101 |
01011001 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
10010101 |
01100101 |
01010101 |
01101001 |
01100101 |
01010101 |
01010110 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010110 |
01100101 |
01010101 |
01010110 |
01011001 |
01010101 |
01011001 |
01010110 |
01010101 |
01100101 |
01010101 |
01010110 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011010 |
10101010 |
10101001 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01101010 |
10101010 |
10101010 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01011010 |
10101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
10101010 |
10101000 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
10101010 |
10101000 |
00000000 |
00000000 |
00000000 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
10101010 |
10101000 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
10101010 |
10101000 |
00000000 |
00000000 |
00000000 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
10101010 |
10101000 |
00000000 |
00000000 |
00000000 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
10101010 |
10101000 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
01010101 |
01010100 |
00000000 |
00010101 |
01010000 |
00000000 |
00000101 |
01000000 |
00000000 |
00000001 |
00000000 |
00000000 |
00000000 |
00000000 |
00000000 |
00000000 |
01010101 |
00000000 |
01010101 |
01010100 |
00000000 |
00010101 |
01010000 |
00000000 |
00000101 |
01000000 |
00000000 |
00000001 |
00000000 |
00000000 |
00000000 |
00000000 |
00000000 |
00000000 |
01010101 |
00000000 |
01010101 |
01010100 |
00000000 |
00010101 |
01010000 |
00000000 |
00000101 |
01000000 |
00000000 |
00000001 |
00000000 |
00000000 |
00000000 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
00000000 |
00000000 |
00000000 |
01000000 |
00000000 |
00000001 |
01010000 |
00000000 |
00000101 |
01010100 |
00000000 |
00010101 |
01010101 |
00000000 |
01010101 |
00000000 |
00000000 |
00000000 |
00000000 |
00000000 |
00000000 |
01000000 |
00000000 |
00000001 |
01010000 |
00000000 |
00000101 |
01010100 |
00000000 |
00010101 |
01010101 |
00000000 |
01010101 |
00000000 |
00000000 |
00000000 |
00000000 |
00000000 |
00000000 |
01000000 |
00000000 |
00000001 |
01010000 |
00000000 |
00000101 |
01010100 |
00000000 |
00010101 |
01010101 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
00101010 |
10101010 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
00000000 |
00000000 |
00000000 |
00101010 |
10101010 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
00000000 |
00000000 |
00000000 |
00101010 |
10101010 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
00101010 |
10101010 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
00000000 |
00000000 |
00000000 |
00101010 |
10101010 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
00101010 |
10101010 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101010 |
10101010 |
10101001 |
01100101 |
01010101 |
01011001 |
01100101 |
01010101 |
01011001 |
01100101 |
01010101 |
01011001 |
01100101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01011010 |
01010101 |
01010110 |
10100101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01011010 |
01010101 |
01010110 |
01010101 |
10100101 |
01010110 |
01010101 |
01011001 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01101001 |
01010101 |
01011010 |
10010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
10010110 |
01010101 |
01010101 |
01100101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
10101001 |
01101010 |
10101010 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010110 |
01010110 |
10101010 |
10101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010101 |
10010110 |
01010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101010 |
10101010 |
10101001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010101 |
10010110 |
01010101 |
01010101 |
01101001 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01101010 |
10101010 |
10101001 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010110 |
01011001 |
01100101 |
01010110 |
01011001 |
01100101 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01100101 |
01011001 |
01010110 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
10010110 |
01010101 |
01010101 |
01100101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
10101001 |
01101010 |
10101010 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010110 |
01010110 |
10101010 |
10101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
10010110 |
01010101 |
01010101 |
01100101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01101010 |
10101010 |
10101001 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010110 |
01011001 |
01100101 |
01010110 |
01011001 |
01100101 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01011001 |
01100101 |
01011001 |
01010110 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
10010110 |
01010101 |
01010101 |
01100101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10101010 |
10101010 |
01010101 |
10010101 |
01010110 |
01010110 |
01010101 |
01010110 |
01011001 |
01010101 |
01010110 |
01100101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01101010 |
01010101 |
01011010 |
10010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000101 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100000 |
00010101 |
01010101 |
00100010 |
00010101 |
01010101 |
00101000 |
00000000 |
01010101 |
00100010 |
00101000 |
01010101 |
00000100 |
00100010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00100000 |
00010101 |
01010101 |
00100000 |
10000101 |
01010101 |
00000000 |
10000000 |
01010101 |
01010100 |
10101000 |
01010101 |
01010100 |
10001000 |
01010101 |
01010100 |
10001000 |
01010101 |
01010100 |
00010000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011010 |
01010101 |
10010101 |
01100000 |
10010110 |
00100101 |
10001010 |
00101000 |
10001001 |
10001010 |
00100010 |
00100101 |
01100000 |
10001000 |
10010101 |
01011010 |
00100010 |
10010101 |
01011000 |
10001000 |
00100101 |
01100010 |
00100010 |
10001001 |
10001000 |
10100010 |
10001001 |
01100010 |
01011000 |
00100101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00100010 |
00100010 |
00000000 |
10010101 |
01010100 |
10101000 |
00010101 |
01010101 |
00101000 |
10010101 |
01010100 |
10001000 |
00010101 |
01010010 |
00010010 |
10010101 |
01001000 |
01010100 |
00010101 |
00100001 |
01010110 |
10000100 |
10000101 |
01010100 |
00100010 |
00010101 |
01010110 |
00101000 |
01010101 |
01010100 |
00101010 |
00010101 |
01010110 |
00000000 |
10001000 |
10001000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10001001 |
01010101 |
01010110 |
00100010 |
01010101 |
01011000 |
10101000 |
10010101 |
01100010 |
10101010 |
00100101 |
01011000 |
10101000 |
10010101 |
01010110 |
00100010 |
01010101 |
01010101 |
10001001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
01010101 |
00101010 |
10101010 |
00010101 |
00100000 |
10000010 |
00010101 |
00100000 |
10000010 |
00010101 |
00100001 |
00010010 |
00010101 |
01000100 |
00000100 |
01010101 |
01000010 |
10100000 |
01010101 |
01001000 |
00001000 |
01010101 |
01001010 |
10101000 |
01010101 |
01001000 |
00001000 |
01010101 |
01001000 |
01001000 |
01010101 |
01010001 |
01010001 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
00000000 |
01010101 |
01001010 |
10101000 |
01010101 |
01001000 |
00001000 |
01010101 |
01001000 |
01001000 |
01010101 |
01010001 |
01010001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00101010 |
10101010 |
00001000 |
00101000 |
00101000 |
00101000 |
10101010 |
00000000 |
10101010 |
10101010 |
10000010 |
10101010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
00001010 |
10000010 |
10000000 |
00000000 |
10000010 |
00100000 |
00000010 |
10000010 |
00100000 |
00000000 |
10000010 |
00100000 |
00001010 |
10000010 |
10000000 |
00000000 |
00000000 |
00000000 |
00001010 |
10001000 |
00000000 |
00001000 |
00000000 |
00000000 |
00001010 |
00001000 |
10001000 |
00001000 |
00001000 |
00100000 |
00001000 |
00001000 |
10001000 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010000 |
01010101 |
01010101 |
01001010 |
00010101 |
01010101 |
00100000 |
10000101 |
01010101 |
00100000 |
10000101 |
01010101 |
00101010 |
10000101 |
01010101 |
00100000 |
10000101 |
01010101 |
00100000 |
10000101 |
01010101 |
01000101 |
00010101 |
01010101 |
01010100 |
10000101 |
01010101 |
01010100 |
10000101 |
01010101 |
01010100 |
10000101 |
01010101 |
01010100 |
10000001 |
00000001 |
01010100 |
10101000 |
10101000 |
01010101 |
00000001 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
01000101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000101 |
01000101 |
01010101 |
00100001 |
00100001 |
01010101 |
00100001 |
00100001 |
01010101 |
00100001 |
00100001 |
01010101 |
00100001 |
00100001 |
01010101 |
01001000 |
10000101 |
01010101 |
01010010 |
00000000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010100 |
10000000 |
01010101 |
01010100 |
10101000 |
01010101 |
01010100 |
10000001 |
00010101 |
01010100 |
10000000 |
10000101 |
01010100 |
10101010 |
10000101 |
01010101 |
00000000 |
10000101 |
01010101 |
01010100 |
10000101 |
01010101 |
01010100 |
10000000 |
01010101 |
01010100 |
10101010 |
01010101 |
01010101 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00010101 |
01010101 |
00101010 |
00000101 |
01010101 |
00100000 |
10000101 |
01010101 |
00100000 |
10000101 |
01010101 |
00100000 |
10000101 |
01010101 |
00101010 |
00000000 |
01010101 |
01000000 |
10101010 |
00010101 |
01010100 |
10000000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010100 |
00000010 |
00010101 |
01010100 |
10101010 |
00000001 |
01010101 |
00001010 |
10101000 |
01010101 |
01010000 |
10000001 |
01010101 |
01010100 |
10000101 |
01010101 |
01010100 |
10000101 |
01010101 |
01010100 |
10000101 |
01010101 |
01010101 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
01010101 |
00101010 |
10101010 |
00010101 |
00100000 |
10000010 |
00010101 |
00100000 |
10000010 |
00010101 |
00100000 |
10000010 |
00010101 |
00100001 |
00010010 |
00010101 |
01000101 |
01010100 |
01010101 |
01000000 |
00000000 |
01010101 |
00101010 |
10101010 |
00010101 |
00101010 |
10101010 |
00010101 |
01000000 |
00000000 |
01010101 |
01010000 |
00000001 |
01010101 |
01001010 |
10101000 |
01010101 |
01001000 |
00000000 |
01010101 |
01001010 |
10101000 |
01010101 |
01000000 |
00001000 |
01010101 |
01001010 |
10101000 |
01010101 |
01010000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011010 |
10010101 |
01010101 |
01100000 |
00100101 |
01010101 |
10000010 |
00001001 |
01010101 |
10001001 |
10001001 |
01010101 |
10000010 |
00001001 |
01010101 |
01100000 |
00100101 |
01010101 |
01011010 |
10010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
01010101 |
00101010 |
10101010 |
00010101 |
00100000 |
10000010 |
00010101 |
00100000 |
10000010 |
00010101 |
00100000 |
10000010 |
00010101 |
00100001 |
00010010 |
00010101 |
01000101 |
01010100 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
01011000 |
10010101 |
01010101 |
01100010 |
00100101 |
01010101 |
10001010 |
10001010 |
10101001 |
00000010 |
00000000 |
00001001 |
10100010 |
00101000 |
10001001 |
01100010 |
00101000 |
10001010 |
01100010 |
00101000 |
10000000 |
01100010 |
00101000 |
10101000 |
01100010 |
00101000 |
10001000 |
01100010 |
00101000 |
10001000 |
01100010 |
00101000 |
10001000 |
10100010 |
00101000 |
00000000 |
00000010 |
00000010 |
10101010 |
10001010 |
10001001 |
01010101 |
01100010 |
00100101 |
01010101 |
01011000 |
10010101 |
01010101 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011000 |
10010101 |
01010101 |
01011000 |
10010101 |
01010101 |
10101000 |
10010101 |
01010110 |
00000000 |
10010101 |
01011000 |
10101000 |
10010101 |
01011000 |
10011000 |
10010101 |
01011000 |
10101000 |
10010101 |
01010110 |
00000000 |
10010101 |
01010101 |
10101010 |
01010101 |
01100101 |
01010101 |
01011001 |
10001001 |
01010101 |
01100010 |
10001001 |
00010100 |
01100010 |
10001000 |
10000010 |
00100010 |
10000010 |
10101010 |
10000010 |
10001000 |
10000010 |
00100010 |
10001001 |
00010100 |
01100010 |
01100101 |
01010101 |
01011001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01010110 |
10010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010110 |
10010101 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001000 |
00000000 |
00100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01000000 |
10101010 |
00000001 |
01001010 |
10000010 |
10100001 |
01001010 |
10000010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000101 |
01000101 |
01010101 |
00100001 |
00100001 |
01010101 |
00100001 |
00100001 |
01010101 |
00100001 |
00100001 |
01010101 |
00100001 |
00100001 |
01010101 |
00001000 |
10000001 |
01010101 |
01000010 |
00000101 |
01010101 |
01010000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010000 |
00010101 |
01010101 |
01001010 |
10000101 |
01010101 |
00100000 |
00100001 |
01010101 |
00100000 |
00100001 |
01010101 |
00101010 |
10100001 |
01010101 |
00100000 |
00100001 |
01010101 |
00100001 |
00100001 |
01010101 |
01000101 |
01000101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10000010 |
10001001 |
10001010 |
10000010 |
10100010 |
00101010 |
10000010 |
10101000 |
00101010 |
10000010 |
10101000 |
10101010 |
10000010 |
10101010 |
10101010 |
10000010 |
10101010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
00001001 |
10001010 |
10101000 |
00100010 |
00101010 |
10100000 |
10101000 |
00101010 |
10100000 |
10101000 |
10101010 |
10000010 |
10101010 |
10101010 |
10000010 |
10101010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
00000010 |
00101010 |
10101000 |
00001000 |
00101010 |
10100000 |
00101000 |
10101010 |
10000000 |
10101010 |
10101010 |
10000010 |
10101010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00101010 |
10101010 |
10000000 |
00101010 |
10101000 |
00001000 |
10101010 |
10000000 |
00101010 |
10101010 |
10000010 |
10101010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10101010 |
10000000 |
00000010 |
10101010 |
10000000 |
00000010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10101010 |
10000010 |
10101010 |
10101010 |
10000000 |
00101010 |
00101010 |
10101000 |
00001000 |
00101010 |
10101010 |
10000000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10101010 |
10000010 |
10101010 |
10101010 |
10000000 |
10101010 |
00101010 |
10100000 |
00101000 |
00101010 |
10101000 |
00001000 |
10001010 |
10101010 |
00000010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10101010 |
10000010 |
10101010 |
10101010 |
10000010 |
10101010 |
00101010 |
10100000 |
10101000 |
00101010 |
10100000 |
10101000 |
10001010 |
10101000 |
00100010 |
01100010 |
10101010 |
00001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10101010 |
10000010 |
10101010 |
10101010 |
10000010 |
10101010 |
00101010 |
10000010 |
10101000 |
00101010 |
10000010 |
10101000 |
10001010 |
10000010 |
10100010 |
01100010 |
10000010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10101010 |
10000010 |
10101010 |
10101010 |
10000010 |
10101010 |
00101010 |
00001010 |
10101000 |
00101010 |
00001010 |
10101000 |
10001000 |
00101010 |
10100010 |
01100000 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10101010 |
10000010 |
10101010 |
10101010 |
00000010 |
10101010 |
00101000 |
00001010 |
10101000 |
00100000 |
00101010 |
10101000 |
10000000 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10101010 |
10000010 |
10101010 |
10101000 |
00000010 |
10101010 |
00100000 |
00101010 |
10101000 |
00000010 |
10101010 |
10101000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10000000 |
00000010 |
10101010 |
10000000 |
00000010 |
10101010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00000010 |
10101010 |
10101000 |
00100000 |
00101010 |
10101000 |
10101000 |
00000010 |
10101010 |
10101010 |
10000010 |
10101010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10000000 |
10101010 |
10100010 |
00100000 |
00101010 |
10101000 |
00101000 |
00001010 |
10101000 |
10101010 |
00000010 |
10101010 |
10101010 |
10000010 |
10101010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100000 |
10101010 |
10001001 |
10001000 |
00101010 |
10100010 |
00101010 |
00001010 |
10101000 |
00101010 |
00001010 |
10101000 |
10101010 |
10000010 |
10101010 |
10101010 |
10000010 |
10101010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01011000 |
01010101 |
01010101 |
01011000 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010110 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01101001 |
01010101 |
01010110 |
10000010 |
10010101 |
01011000 |
00101000 |
00100101 |
01100010 |
10101010 |
10001001 |
10001010 |
10101010 |
10100010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10101010 |
10000010 |
10101010 |
10101010 |
10000010 |
10101010 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
10001010 |
10101010 |
10100010 |
01100010 |
10101010 |
10001001 |
01011000 |
00101000 |
00100101 |
01010110 |
10000010 |
10010101 |
01010101 |
01101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
00100101 |
01010101 |
01010101 |
00100101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
10010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
10101010 |
01010101 |
01010101 |
10000010 |
01010101 |
01010101 |
10000010 |
01010101 |
01010101 |
10000010 |
01010101 |
10101010 |
10000010 |
10101010 |
10000000 |
00000000 |
00000010 |
10001010 |
10101010 |
10100010 |
10001000 |
00101000 |
00100010 |
10001000 |
00101000 |
00100010 |
10001010 |
10101010 |
10100010 |
10001010 |
10101010 |
10100010 |
10000000 |
00000000 |
00000010 |
10101010 |
10101010 |
10101010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011001 |
01010101 |
01010101 |
01100101 |
01010101 |
01010101 |
00010101 |
01010101 |
01000001 |
00010101 |
01010101 |
00000000 |
00010101 |
01010100 |
00000000 |
00010101 |
01010000 |
00000000 |
00000101 |
01000000 |
00000000 |
00000001 |
00001010 |
10101010 |
10100000 |
01001010 |
10100000 |
00100001 |
01001010 |
10100001 |
00100001 |
01001010 |
10100000 |
00100001 |
01001010 |
10101010 |
10100001 |
01001010 |
10101010 |
10100001 |
01001000 |
00001010 |
10100001 |
01001000 |
01001010 |
10100001 |
01001000 |
01001010 |
10100001 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000001 |
01010101 |
00101010 |
10100001 |
01010101 |
00100010 |
00100001 |
01010101 |
00100010 |
00100001 |
01010101 |
00000000 |
00000001 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
00100010 |
00010101 |
01010100 |
10000000 |
10000101 |
01010100 |
10101010 |
10000101 |
01010100 |
10000000 |
10000101 |
01010100 |
10000100 |
10000101 |
01010101 |
00000100 |
00000101 |
01010101 |
01010100 |
10000101 |
01010101 |
01010100 |
10000000 |
01010101 |
01010100 |
10101000 |
01010101 |
01010100 |
10001000 |
01010101 |
01010100 |
10001000 |
01010101 |
01010100 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011010 |
10010101 |
01010101 |
01100000 |
00100101 |
01101001 |
01100010 |
00001001 |
10001001 |
01100010 |
10000010 |
00100101 |
01100000 |
10100000 |
10010101 |
01011000 |
00101000 |
00100101 |
01010110 |
00001010 |
00001001 |
01010101 |
10000010 |
10000010 |
01010101 |
10000000 |
10100010 |
01010101 |
10001000 |
00000010 |
01010101 |
10001000 |
10101001 |
01010101 |
10001000 |
10010101 |
01010101 |
10001000 |
10010101 |
01010110 |
00001000 |
00100101 |
01011000 |
10101010 |
10001001 |
01100010 |
10101010 |
10100010 |
01100000 |
00000000 |
00000010 |
01011010 |
10101010 |
10101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01010000 |
00101000 |
00000101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01010000 |
00101000 |
00000101 |
01010101 |
00101000 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
00101000 |
01010101 |
01010000 |
00101000 |
00000101 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010000 |
00101000 |
00000101 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00000001 |
01001010 |
10101010 |
10100001 |
01001000 |
00101000 |
00100001 |
01001000 |
10001000 |
10100001 |
01001000 |
00101000 |
10100001 |
01001000 |
10101000 |
10100001 |
01001000 |
10101000 |
00100001 |
01001010 |
10101010 |
10100001 |
00000000 |
00101000 |
00000000 |
00101010 |
10101010 |
10101000 |
00100000 |
00000000 |
00001000 |
00100010 |
00100010 |
00101000 |
00101000 |
10001000 |
10001000 |
00100010 |
00100010 |
00101000 |
00101000 |
00000000 |
00101000 |
00101010 |
10101010 |
10101000 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01011010 |
10101010 |
10101001 |
01011001 |
01010101 |
01011001 |
01011001 |
01010101 |
01011001 |
01011001 |
01010101 |
01011001 |
01011001 |
01010101 |
01011001 |
01011001 |
01010101 |
01011001 |
01011010 |
10101010 |
10101001 |
01011001 |
01010101 |
01011001 |
01011001 |
01010101 |
01011001 |
01011001 |
01010101 |
01011001 |
01011001 |
01010101 |
01011001 |
01011001 |
01010101 |
01011001 |
01011010 |
10101010 |
10101001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010000 |
01010101 |
01010101 |
01001010 |
00010101 |
01010101 |
00101010 |
10000101 |
01010101 |
00101010 |
10100001 |
01010101 |
01001010 |
10101000 |
01010101 |
01010010 |
10101000 |
01010101 |
01010100 |
10101010 |
01010101 |
01010101 |
00001001 |
01010101 |
01010101 |
01010010 |
01010101 |
01010101 |
00011010 |
01010101 |
01010001 |
10010110 |
01010101 |
00011000 |
10000101 |
01010100 |
10001000 |
00101000 |
01010100 |
10000010 |
00000101 |
01010101 |
00100000 |
10100001 |
01010101 |
01001000 |
00010101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010100 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000101 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
10101000 |
01010101 |
01010101 |
10100001 |
01010101 |
01010101 |
10011000 |
00010101 |
01010101 |
00101010 |
10000101 |
01010101 |
01001010 |
10100001 |
01010101 |
01001010 |
10101000 |
01010101 |
01010010 |
10101010 |
00010101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
10101010 |
10000101 |
01010010 |
00000000 |
00100001 |
01001000 |
00101010 |
00001000 |
01100000 |
10000000 |
10000010 |
01100010 |
00001000 |
00100010 |
01100010 |
00101010 |
00100010 |
01100010 |
00001000 |
00100010 |
01100000 |
10001000 |
10000010 |
01001000 |
00001000 |
00001000 |
01010010 |
00001000 |
00100001 |
01010100 |
01001000 |
01000101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
00101010 |
00010101 |
01010100 |
10101010 |
10000101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100000 |
00010101 |
01010101 |
00100010 |
00010101 |
01010101 |
00101000 |
00010101 |
01010101 |
00100010 |
00010101 |
01010101 |
00000000 |
00000000 |
00010101 |
01010010 |
10101010 |
00010101 |
01010010 |
00100010 |
00010101 |
01010010 |
00100010 |
00010101 |
01010000 |
00000000 |
00000101 |
01010101 |
01010100 |
10000101 |
01010101 |
01010100 |
10000000 |
01010101 |
01010100 |
10101000 |
01010101 |
01010100 |
10001000 |
01010101 |
01010100 |
10001000 |
01010101 |
01010100 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00010101 |
00100010 |
10001010 |
00010101 |
00101000 |
10100010 |
00010101 |
00100000 |
10000010 |
00010101 |
00100000 |
10000010 |
00010101 |
00000000 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
00000000 |
00101000 |
00000000 |
00101010 |
10101010 |
10101000 |
00001010 |
10101010 |
10100000 |
01000010 |
10101010 |
10000001 |
01010000 |
10101010 |
00000101 |
01010100 |
00101000 |
00010101 |
01010101 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
01010101 |
01010100 |
00101000 |
00010101 |
01010000 |
10101010 |
00000101 |
01000010 |
10101010 |
10000001 |
00001010 |
10101010 |
10100000 |
00101010 |
10101010 |
10101000 |
00000000 |
00101000 |
00000000 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000001 |
01010101 |
01010010 |
10101000 |
01010101 |
01001000 |
00000010 |
00010101 |
01001000 |
01010010 |
00010101 |
01001000 |
01010010 |
00010101 |
01001000 |
00000010 |
00010101 |
01010010 |
10101000 |
01010101 |
01010100 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00010100 |
01010001 |
01010010 |
10000010 |
00001000 |
01001000 |
00100010 |
10001000 |
01001000 |
00100010 |
00101000 |
01001000 |
00100010 |
00101000 |
01010010 |
10000010 |
00001000 |
01010100 |
00010100 |
01010001 |
01010101 |
01000000 |
01010101 |
01010101 |
00101010 |
00010101 |
01010100 |
10001000 |
10000101 |
01010010 |
00001000 |
00100001 |
01001000 |
01001000 |
00001000 |
01001000 |
01001010 |
10001000 |
01001000 |
01010000 |
00001000 |
01010010 |
00010101 |
00100001 |
01010100 |
10000000 |
10000101 |
01010101 |
00101010 |
00010101 |
01010101 |
01000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
01000101 |
00010001 |
00101010 |
00100000 |
10001000 |
00100000 |
00100000 |
10001000 |
00101000 |
00100001 |
00100001 |
00100001 |
00100000 |
00100001 |
00100001 |
00101010 |
00100001 |
01000101 |
01000000 |
01000101 |
01010101 |
01000000 |
01010101 |
01010101 |
00101010 |
00010101 |
01010100 |
10001000 |
10000101 |
01010010 |
00001000 |
00100001 |
01001000 |
01001000 |
00001000 |
01001000 |
01001010 |
10001000 |
01001000 |
01010000 |
00001000 |
01010010 |
00010101 |
00100001 |
01010100 |
10000000 |
10000101 |
01010101 |
00101010 |
00010101 |
01010101 |
01000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010000 |
01010101 |
00000101 |
01001010 |
00010100 |
10100001 |
01001010 |
10000100 |
10100001 |
01001010 |
10000000 |
10100001 |
01001010 |
10100000 |
10100001 |
00001010 |
00101000 |
10100000 |
10001010 |
00101000 |
10100010 |
00001010 |
00001010 |
10100000 |
01001010 |
00000010 |
10100001 |
01001010 |
00010010 |
10100001 |
01001010 |
00010100 |
10100001 |
01010000 |
01010101 |
00000101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01010010 |
10000000 |
10000101 |
01010010 |
10000101 |
01010101 |
00000010 |
10101010 |
00000000 |
10101000 |
10101010 |
10001010 |
00000000 |
00000010 |
10000000 |
01010010 |
00000010 |
10000101 |
01010010 |
10101010 |
10000101 |
01010000 |
10101010 |
00000101 |
01010101 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
00000000 |
00010101 |
01010010 |
10101010 |
10000101 |
01010010 |
10101010 |
10000101 |
01010010 |
10000000 |
00010101 |
01010010 |
10000101 |
01010101 |
00000010 |
10101000 |
00000000 |
10100010 |
10101000 |
10101010 |
00000010 |
10000000 |
00000000 |
01010010 |
10000000 |
01010101 |
01010010 |
10101010 |
10000101 |
01010010 |
10101010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010000 |
01010101 |
00000101 |
01001010 |
00010100 |
10100001 |
01001010 |
00010100 |
10100001 |
01001010 |
00010100 |
10100001 |
01001010 |
00000000 |
10100001 |
00001010 |
00101000 |
10100000 |
10100010 |
00101000 |
10001010 |
00000010 |
00101000 |
10000000 |
01010010 |
10000010 |
10000101 |
01010010 |
10000010 |
10000101 |
01010010 |
10000010 |
10000101 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000101 |
01010101 |
01010101 |
00100001 |
01010101 |
00000001 |
00100001 |
00000000 |
10101000 |
00100000 |
10101010 |
00000001 |
00100001 |
00000000 |
01010101 |
00100001 |
01010101 |
01010101 |
01000101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00010101 |
01010101 |
01010100 |
10000101 |
01000000 |
00000000 |
10100001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
01000000 |
00000000 |
10100001 |
01010101 |
01010100 |
10000101 |
01010101 |
01010101 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000001 |
01010101 |
00101010 |
10101000 |
01010101 |
01001010 |
10101000 |
01010101 |
01010010 |
10101000 |
01010101 |
01001010 |
10101000 |
01010101 |
00101010 |
00101000 |
01010100 |
10101000 |
01001000 |
01010010 |
10100001 |
01010001 |
01001010 |
10000101 |
01010101 |
01010010 |
00010101 |
01010101 |
01010100 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01010100 |
00101000 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000001 |
01010101 |
00101010 |
10101000 |
01010101 |
00101010 |
10100001 |
01010101 |
00101010 |
10000101 |
01010101 |
00101010 |
10100001 |
01010101 |
00101000 |
10101000 |
01010101 |
00100001 |
00101010 |
00010101 |
01000101 |
01001010 |
10000101 |
01010101 |
01010010 |
10100001 |
01010101 |
01010100 |
10000101 |
01010101 |
01010101 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
01010101 |
01010101 |
01010010 |
00010101 |
01010101 |
01001010 |
00000000 |
00000001 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
01001010 |
00000000 |
00000001 |
01010010 |
00010101 |
01010101 |
01010100 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00010101 |
01010101 |
01010100 |
10000101 |
01010101 |
01010010 |
10100001 |
01000101 |
01001010 |
10000101 |
00100001 |
00101010 |
00010101 |
00101000 |
10101000 |
01010101 |
00101010 |
10100001 |
01010101 |
00101010 |
10000101 |
01010101 |
00101010 |
10100001 |
01010101 |
00101010 |
10101000 |
01010101 |
01000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
00101000 |
00010101 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
01010101 |
01010101 |
01010010 |
00010101 |
01010101 |
01001010 |
10000101 |
01010101 |
01010010 |
10100001 |
01010001 |
01010100 |
10101000 |
01001000 |
01010101 |
00101010 |
00101000 |
01010101 |
01001010 |
10101000 |
01010101 |
01010010 |
10101000 |
01010101 |
01001010 |
10101000 |
01010101 |
00101010 |
10101000 |
01010101 |
01000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00010100 |
00000000 |
10101010 |
00010100 |
10101010 |
10101010 |
10000010 |
10101010 |
00000000 |
10101010 |
00000000 |
01010100 |
00000000 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
01010101 |
00000000 |
00101010 |
00010100 |
10101000 |
01001010 |
10000010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000101 |
00010001 |
01010100 |
10100000 |
10001000 |
01010100 |
10001000 |
10001000 |
01010100 |
10100000 |
10101000 |
01010100 |
10000100 |
10001000 |
01000100 |
10000100 |
10001000 |
00100001 |
00010101 |
00010001 |
10101000 |
01010101 |
01010101 |
10100001 |
01010101 |
01010101 |
10011000 |
00010101 |
01010101 |
00101010 |
10000101 |
01010101 |
01001010 |
10100001 |
01010101 |
01001010 |
10101000 |
01010101 |
01010010 |
10101010 |
00010101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10000001 |
01010101 |
01010100 |
10000101 |
01010101 |
01010100 |
10000001 |
01000101 |
01010101 |
00101000 |
00100001 |
01010101 |
00000001 |
10101000 |
01010100 |
10001000 |
10100001 |
01010100 |
10001000 |
10011000 |
00010100 |
10101000 |
00101010 |
10000100 |
10001000 |
01001010 |
10100000 |
10001000 |
01001010 |
10101000 |
00010001 |
01010010 |
10101010 |
00010101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
00001010 |
10101010 |
10100000 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
00000000 |
00101000 |
00000000 |
01010101 |
00101000 |
01010101 |
01000000 |
00101000 |
00000001 |
00101010 |
10101010 |
10101000 |
01001010 |
10101010 |
10100001 |
01010010 |
10101010 |
10000101 |
01010100 |
10101010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
00001010 |
10101010 |
10100000 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01001010 |
10101010 |
10100001 |
00101010 |
10101010 |
10101000 |
01000000 |
00101000 |
00000001 |
01010101 |
00101000 |
01010101 |
00000000 |
00101000 |
00000000 |
00101010 |
10101010 |
10101000 |
00101010 |
10101010 |
10101000 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00000000 |
00101010 |
10101010 |
10101010 |
00100000 |
00000000 |
00001000 |
00100010 |
00010100 |
10001000 |
00100010 |
00010010 |
10001000 |
00100010 |
00001010 |
10001000 |
00100010 |
00101010 |
10001000 |
00100010 |
10101010 |
10001000 |
00100010 |
10101010 |
10001000 |
00100010 |
00101010 |
10001000 |
00100010 |
00001010 |
10001000 |
00100010 |
00010010 |
10001000 |
00100010 |
00010100 |
10001000 |
00100000 |
00000000 |
00001000 |
00101010 |
10101010 |
10101010 |
01000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010000 |
01010101 |
01010101 |
01001010 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001000 |
01010101 |
01010101 |
01001010 |
01010101 |
01010101 |
01010000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10000101 |
10101010 |
10101010 |
10000101 |
10101010 |
10101010 |
10000101 |
10101010 |
10101010 |
10000101 |
10101010 |
10101010 |
10000101 |
10101010 |
10101010 |
10000101 |
10101010 |
10101010 |
10000101 |
10101010 |
10101010 |
10000101 |
10101010 |
10101010 |
10000101 |
10101010 |
10101010 |
10000101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
10101010 |
10100001 |
01010101 |
10101010 |
10100001 |
01010101 |
10101010 |
10100001 |
01010101 |
10101010 |
10100001 |
01010101 |
10101010 |
10100001 |
01010101 |
10101010 |
10100001 |
01010101 |
10101010 |
10100001 |
01010101 |
10101010 |
10100001 |
01010101 |
10101010 |
10100001 |
01010101 |
10101010 |
10100001 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
10101000 |
01010101 |
01010101 |
10101000 |
01010101 |
01010101 |
10101000 |
01010101 |
01010101 |
10101000 |
01010101 |
01010101 |
10101000 |
01010101 |
01010101 |
10101000 |
01010101 |
01010101 |
10101000 |
01010101 |
01010101 |
10101000 |
01010101 |
01010101 |
10101000 |
01010101 |
01010101 |
10101000 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000000 |
10101010 |
10101010 |
10101010 |
00000000 |
00000000 |
00000000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000101 |
01010101 |
01010101 |
10100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
00100001 |
01010101 |
01010101 |
10100001 |
01010101 |
01010101 |
00000101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000000 |
00000000 |
00000001 |
10101010 |
10101010 |
10101000 |
00100000 |
00000000 |
00001000 |
00100010 |
00010100 |
10001000 |
00100010 |
10000100 |
10001000 |
00100010 |
10100000 |
10001000 |
00100010 |
10101000 |
10001000 |
00100010 |
10101010 |
10001000 |
00100010 |
10101010 |
10001000 |
00100010 |
10101000 |
10001000 |
00100010 |
10100000 |
10001000 |
00100010 |
10000100 |
10001000 |
00100010 |
00010100 |
10001000 |
00100000 |
00000000 |
00001000 |
10101010 |
10101010 |
10101000 |
00000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010100 |
01010101 |
01010101 |
01010010 |
01010101 |
01010000 |
01010010 |
01010101 |
01001010 |
00010000 |
01010101 |
01001010 |
00001010 |
01010101 |
01010000 |
00101010 |
01010101 |
01010100 |
10100000 |
01010101 |
00000010 |
10000101 |
01010100 |
10100010 |
10000101 |
01010100 |
10100010 |
10000101 |
01010101 |
00000010 |
10000101 |
01010101 |
01010100 |
10100000 |
01010101 |
01010000 |
00101010 |
01010101 |
01001010 |
00001010 |
01010101 |
01001010 |
00010000 |
01010101 |
01010000 |
01010010 |
01010101 |
01010101 |
01010010 |
01010101 |
01010101 |
01010000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00010101 |
01010101 |
01010101 |
10000101 |
01010101 |
01010101 |
10000101 |
00000101 |
01010101 |
00000100 |
10100001 |
01010101 |
10100000 |
10100001 |
01010101 |
10101000 |
00000101 |
01010101 |
00001010 |
00010101 |
01010101 |
01010010 |
10000000 |
01010101 |
01010010 |
10001010 |
00010101 |
01010010 |
10001010 |
00010101 |
01010010 |
10000000 |
01010101 |
00001010 |
00010101 |
01010101 |
10101000 |
00000101 |
01010101 |
10100000 |
10100001 |
01010101 |
00000100 |
10100001 |
01010101 |
10000101 |
00000101 |
01010101 |
10000101 |
01010101 |
01010101 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010000 |
01010101 |
01010101 |
00001010 |
01010101 |
01010100 |
10101010 |
01010101 |
01010010 |
10100000 |
01010101 |
01001010 |
00000100 |
01010101 |
01001010 |
00010100 |
01010101 |
00101000 |
01010100 |
01010101 |
00101000 |
01010100 |
01010101 |
00101000 |
01010100 |
01010101 |
00101000 |
01010100 |
01010101 |
01001010 |
00010100 |
01010101 |
01001010 |
00000100 |
01010101 |
01010010 |
10100000 |
01010101 |
01010100 |
10101010 |
01010101 |
01010101 |
00001010 |
01010101 |
01010101 |
01010000 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
00000101 |
01010101 |
01010101 |
10100000 |
01010101 |
01010101 |
10101010 |
00010101 |
01010101 |
10101010 |
10000101 |
01010101 |
10101010 |
10100001 |
01010101 |
10101010 |
10100001 |
01010101 |
10101010 |
10101000 |
01010101 |
10101010 |
10101000 |
01010101 |
10101010 |
10101000 |
01010101 |
10101010 |
10101000 |
01010101 |
10101010 |
10100001 |
01010101 |
10101010 |
10100001 |
01010101 |
10101010 |
10000101 |
01010101 |
10101010 |
00010101 |
01010101 |
10100000 |
01010101 |
01010101 |
00000101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10101000 |
01010101 |
01010010 |
10001000 |
01000000 |
00001010 |
00001000 |
00101010 |
10101000 |
01001000 |
00100000 |
10100001 |
01001000 |
00100000 |
10100001 |
01001000 |
00100000 |
10100001 |
01001000 |
00100000 |
10100001 |
01001000 |
00100000 |
10100001 |
01001000 |
00101010 |
10101000 |
01001000 |
01000000 |
00001010 |
00001000 |
01010101 |
01010010 |
10001000 |
01010101 |
01010100 |
10101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010101 |
01000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010001 |
01010101 |
01010101 |
01101000 |
01010101 |
01010101 |
01011010 |
00010101 |
01010100 |
00010010 |
00010101 |
01010010 |
10000010 |
00010101 |
01000100 |
10000010 |
10000101 |
00100000 |
10100000 |
10000101 |
00101000 |
00100000 |
10000101 |
01001000 |
00100000 |
10000101 |
00101000 |
00100000 |
10000101 |
00100000 |
10100000 |
10000101 |
01000100 |
10000010 |
10000101 |
01010010 |
10000010 |
00010101 |
01010100 |
00010010 |
00010101 |
01010101 |
01011010 |
00010101 |
01010101 |
01101000 |
01010101 |
01010101 |
01010001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
00000000 |
00000001 |
00101010 |
10101010 |
10101000 |
01001000 |
00000000 |
00100001 |
01001000 |
01010101 |
00100001 |
01001000 |
01010101 |
00100001 |
01001000 |
01010101 |
00100001 |
01010010 |
00010100 |
10000101 |
01010100 |
10000010 |
00010101 |
01010101 |
00101000 |
01010101 |
01010101 |
00101000 |
01010101 |
01010100 |
10000010 |
00010101 |
01010010 |
00010100 |
10000101 |
01001000 |
01010101 |
00100001 |
01001000 |
01010101 |
00100001 |
01001000 |
01010101 |
00100001 |
01001000 |
00000000 |
00100001 |
00101010 |
10101010 |
10101000 |
01000000 |
00000000 |
00000001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010000 |
01010101 |
01010101 |
01010010 |
00010101 |
01010101 |
01010010 |
10000101 |
01010101 |
01010010 |
10100001 |
01010101 |
01010010 |
10101000 |
01010101 |
01010010 |
10101010 |
00010101 |
01010010 |
10101010 |
10000101 |
01010010 |
10101010 |
10100001 |
01010010 |
10101010 |
10101000 |
01010010 |
10101010 |
00000000 |
01010010 |
10101010 |
00000101 |
01010010 |
00001010 |
10000101 |
01010000 |
00001010 |
10000001 |
01010101 |
01010010 |
10100001 |
01010101 |
01010010 |
10100001 |
01010101 |
01010000 |
10000001 |
01010101 |
01010101 |
00010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010000 |
01010001 |
01010001 |
01001010 |
00001000 |
01001000 |
00100000 |
10001010 |
00101000 |
00100000 |
10001000 |
10001000 |
00100000 |
10001000 |
10001000 |
00101010 |
10001000 |
00001000 |
00100000 |
10001000 |
01001000 |
00100000 |
10001000 |
01001000 |
00100000 |
10001000 |
01001000 |
00100000 |
10001000 |
01001000 |
01000101 |
00010001 |
01010001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01000000 |
01010001 |
01010001 |
00101010 |
00001000 |
01001000 |
00100000 |
10001010 |
00101000 |
00100000 |
10001000 |
10001000 |
00100000 |
10001000 |
10001000 |
00101010 |
00001000 |
00001000 |
00100000 |
01001000 |
01001000 |
00100001 |
01001000 |
01001000 |
00100001 |
01001000 |
01001000 |
00100001 |
01001000 |
01001000 |
01000101 |
01010001 |
01010001 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
10101010 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
01010101 |
/C-OSD/trunk/C-OSD AGRESSiVA mod/characters.c |
---|
0,0 → 1,5975 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <util/delay.h> |
#include "main.h" |
#include "max7456_software_spi.h" |
#if (ALLCHARSDEBUG|(WRITECHARS != -1)) |
/** |
* easy char creation: |
* http://www.mylifesucks.de/tools/max7456/ |
*/ |
// chars 0 - 255 with 54 byte per char |
// orginal filename: c-osd.mcm |
// Sun, 28 Jun 2009 13:41:07 +0200 |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr0[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 -----##----- |
// 3 ----# #---- |
// 4 ---# #---- |
// 5 --# #---- |
// 6 --# #---- |
// 7 --### #---- |
// 8 ----# #---- |
// 9 ----# #---- |
// 10 ----# #---- |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 ----# #---- |
// 14 ---## ##--- |
// 15 --# #-- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr1[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x54,0xa8,0x55,0x52,0xa8,0x55,0x52,0xa8,0x55,0x50,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x54,0x28,0x15,0x52,0xaa,0x85,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---######--- |
// 3 --# #-- |
// 4 -# #- |
// 5 # ### # |
// 6 # #---# # |
// 7 -###----# # |
// 8 -------# # |
// 9 ------# #- |
// 10 -----# #-- |
// 11 ----# #--- |
// 12 ---# #---- |
// 13 --# #----- |
// 14 -# ######- |
// 15 # # |
// 16 # # |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr2[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x80,0xa8,0x2a,0x15,0x28,0x40,0x55,0x28,0x55,0x54,0xa8,0x55,0x52,0xa1,0x55,0x4a,0x85,0x55,0x2a,0x15,0x54,0xa8,0x55,0x52,0xa1,0x55,0x4a,0x80,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0x01}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---######--- |
// 3 --# #-- |
// 4 -# #- |
// 5 # #### # |
// 6 # #----# # |
// 7 -##-----# # |
// 8 -----### # |
// 9 ----# #- |
// 10 ----# #- |
// 11 -----### # |
// 12 -##-----# # |
// 13 # #----# # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr3[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x41,0x55,0x28,0x55,0x40,0xa8,0x55,0x2a,0xa1,0x55,0x2a,0xa1,0x55,0x40,0xa8,0x41,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 -------##--- |
// 3 ------# #-- |
// 4 -----# #-- |
// 5 ----# #-- |
// 6 ---# #-- |
// 7 --# # #-- |
// 8 -# ## #-- |
// 9 # #-# #-- |
// 10 # #### ##- |
// 11 # # |
// 12 # # |
// 13 -###### ##- |
// 14 ------# #-- |
// 15 ------# #-- |
// 16 ------# #-- |
// 17 -------##--- |
// 000000000011 |
// 012345678901 |
const char chr4[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x15,0x55,0x52,0x85,0x55,0x4a,0x85,0x55,0x2a,0x85,0x54,0xaa,0x85,0x52,0xa2,0x85,0x4a,0x82,0x85,0x2a,0x12,0x85,0x28,0x02,0x81,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x02,0x81,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x54,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##########- |
// 3 # # |
// 4 # # |
// 5 # ########- |
// 6 # ######--- |
// 7 # #-- |
// 8 # #- |
// 9 -####### # |
// 10 --------# # |
// 11 --------# # |
// 12 -##-----# # |
// 13 # #----# # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr5[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x28,0x00,0x01,0x28,0x00,0x15,0x2a,0xaa,0x85,0x2a,0xaa,0xa1,0x40,0x00,0xa8,0x55,0x55,0x28,0x55,0x55,0x28,0x41,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---######--- |
// 3 --# #-- |
// 4 -# #- |
// 5 # #### # |
// 6 # #----# # |
// 7 # #-----##- |
// 8 # ######--- |
// 9 # #-- |
// 10 # #- |
// 11 # ##### # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr6[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x41,0x28,0x00,0x15,0x2a,0xaa,0x85,0x2a,0xaa,0xa1,0x28,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##########- |
// 3 # # |
// 4 # # |
// 5 -######## # |
// 6 -------# # |
// 7 ------# #- |
// 8 -----# #-- |
// 9 ----# #--- |
// 10 ----# #---- |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 ----# #---- |
// 14 ----# #---- |
// 15 ----# #---- |
// 16 ----# #---- |
// 17 -----##----- |
// 000000000011 |
// 012345678901 |
const char chr7[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0x28,0x55,0x54,0xa8,0x55,0x52,0xa1,0x55,0x4a,0x85,0x55,0x2a,0x15,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---######--- |
// 3 --# #-- |
// 4 -# #- |
// 5 # #### # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # #### # |
// 9 -# #- |
// 10 -# #- |
// 11 # #### # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr8[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---######--- |
// 3 --# #-- |
// 4 -# #- |
// 5 # #### # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # ##### # |
// 9 -# # |
// 10 --# # |
// 11 ---###### # |
// 12 -##-----# # |
// 13 # #----# # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr9[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0x28,0x4a,0xaa,0xa8,0x52,0xaa,0xa8,0x54,0x00,0x28,0x41,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---######--- |
// 3 --# #-- |
// 4 -# #- |
// 5 # #### # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # #----# # |
// 9 # #----# # |
// 10 # #----# # |
// 11 # #----# # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr10[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 -----##----- |
// 3 ----# #---- |
// 4 ---# #--- |
// 5 --# #-- |
// 6 -# ## #- |
// 7 # #--# # |
// 8 # #----# # |
// 9 # #----# # |
// 10 # ###### # |
// 11 # # |
// 12 # # |
// 13 # ###### # |
// 14 # #----# # |
// 15 # #----# # |
// 16 # #----# # |
// 17 -##------##- |
// 000000000011 |
// 012345678901 |
const char chr11[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x4a,0x82,0xa1,0x2a,0x14,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x00,0x28,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x28,0x00,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x41,0x55,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 -########--- |
// 3 # #-- |
// 4 # #- |
// 5 # ##### # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # ##### # |
// 9 # #- |
// 10 # #- |
// 11 # ##### # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # ##### # |
// 15 # #- |
// 16 # #-- |
// 17 -########--- |
// 000000000011 |
// 012345678901 |
const char chr12[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x15,0x2a,0xaa,0x85,0x2a,0xaa,0xa1,0x28,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x00,0xa8,0x2a,0xaa,0xa1,0x2a,0xaa,0xa1,0x28,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x00,0xa8,0x2a,0xaa,0xa1,0x2a,0xaa,0x85,0x40,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---######--- |
// 3 --# #-- |
// 4 -# #- |
// 5 # #### # |
// 6 # #----# # |
// 7 # #-----##- |
// 8 # #-------- |
// 9 # #-------- |
// 10 # #-------- |
// 11 # #-------- |
// 12 # #-----##- |
// 13 # #----# # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr13[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x41,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x41,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 -######----- |
// 3 # #---- |
// 4 # #--- |
// 5 # ### #-- |
// 6 # #--# #- |
// 7 # #---# # |
// 8 # #----# # |
// 9 # #----# # |
// 10 # #----# # |
// 11 # #----# # |
// 12 # #---# # |
// 13 # #--# #- |
// 14 # ### #-- |
// 15 # #--- |
// 16 # #---- |
// 17 -######----- |
// 000000000011 |
// 012345678901 |
const char chr14[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x01,0x55,0x2a,0xa8,0x55,0x2a,0xaa,0x15,0x28,0x0a,0x85,0x28,0x52,0xa1,0x28,0x54,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x54,0xa8,0x28,0x52,0xa1,0x28,0x0a,0x85,0x2a,0xaa,0x15,0x2a,0xa8,0x55,0x40,0x01,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##########- |
// 3 # # |
// 4 # # |
// 5 # ########- |
// 6 # #-------- |
// 7 # #-------- |
// 8 # ######--- |
// 9 # #-- |
// 10 # #-- |
// 11 # ######--- |
// 12 # #-------- |
// 13 # #-------- |
// 14 # ########- |
// 15 # # |
// 16 # # |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr15[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x28,0x00,0x01,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x00,0x15,0x2a,0xaa,0x85,0x2a,0xaa,0x85,0x28,0x00,0x15,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0x01}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##########- |
// 3 # # |
// 4 # # |
// 5 # ########- |
// 6 # #-------- |
// 7 # #-------- |
// 8 # ######--- |
// 9 # #-- |
// 10 # #-- |
// 11 # ######--- |
// 12 # #-------- |
// 13 # #-------- |
// 14 # #-------- |
// 15 # #-------- |
// 16 # #-------- |
// 17 -##--------- |
// 000000000011 |
// 012345678901 |
const char chr16[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x28,0x00,0x01,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x00,0x15,0x2a,0xaa,0x85,0x2a,0xaa,0x85,0x28,0x00,0x15,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---######--- |
// 3 --# #-- |
// 4 -# #- |
// 5 # ### #- |
// 6 # #----# # |
// 7 # #----# # |
// 8 # #-----##- |
// 9 # #-######- |
// 10 # ## # |
// 11 # ## # |
// 12 # #-#### # |
// 13 # #----# # |
// 14 # ##### # |
// 15 -# # |
// 16 --# # |
// 17 ---########- |
// 000000000011 |
// 012345678901 |
const char chr17[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x02,0xa1,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x41,0x28,0x40,0x01,0x28,0x2a,0xa8,0x28,0x2a,0xa8,0x28,0x40,0x28,0x28,0x55,0x28,0x2a,0x00,0x28,0x4a,0xaa,0xa8,0x52,0xaa,0xa8,0x54,0x00,0x01}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##------##- |
// 3 # #----# # |
// 4 # #----# # |
// 5 # #----# # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # ###### # |
// 9 # # |
// 10 # # |
// 11 # ###### # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # #----# # |
// 15 # #----# # |
// 16 # #----# # |
// 17 -##------##- |
// 000000000011 |
// 012345678901 |
const char chr18[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x00,0x28,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x28,0x00,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x41,0x55,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---######--- |
// 3 --# #-- |
// 4 --# #-- |
// 5 ---## ##--- |
// 6 ----# #---- |
// 7 ----# #---- |
// 8 ----# #---- |
// 9 ----# #---- |
// 10 ----# #---- |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 ----# #---- |
// 14 ---## ##--- |
// 15 --# #-- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr19[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x52,0xaa,0x85,0x54,0x28,0x15,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x54,0x28,0x15,0x52,0xaa,0x85,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 -----######- |
// 3 ----# # |
// 4 ----# # |
// 5 -----## ##- |
// 6 ------# #-- |
// 7 ------# #-- |
// 8 ------# #-- |
// 9 ------# #-- |
// 10 ------# #-- |
// 11 ------# #-- |
// 12 -##---# #-- |
// 13 # #--# #-- |
// 14 # ## #-- |
// 15 -# #--- |
// 16 --# #---- |
// 17 ---####----- |
// 000000000011 |
// 012345678901 |
const char chr20[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x01,0x55,0x2a,0xa8,0x55,0x2a,0xa8,0x55,0x42,0x81,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x52,0x85,0x41,0x52,0x85,0x28,0x52,0x85,0x2a,0x0a,0x85,0x4a,0xaa,0x15,0x52,0xa8,0x55,0x54,0x01,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##------##- |
// 3 # #----# # |
// 4 # #---# # |
// 5 # #--# #- |
// 6 # #-# #-- |
// 7 # ## #--- |
// 8 # # #---- |
// 9 # #----- |
// 10 # #----- |
// 11 # # #---- |
// 12 # ## #--- |
// 13 # #-# #-- |
// 14 # #--# #- |
// 15 # #---# # |
// 16 # #----# # |
// 17 -##------##- |
// 000000000011 |
// 012345678901 |
const char chr21[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x28,0x54,0xa8,0x28,0x52,0xa1,0x28,0x4a,0x85,0x28,0x2a,0x15,0x28,0xa8,0x55,0x2a,0xa1,0x55,0x2a,0xa1,0x55,0x28,0xa8,0x55,0x28,0x2a,0x15,0x28,0x4a,0x85,0x28,0x52,0xa1,0x28,0x54,0xa8,0x28,0x55,0x28,0x41,0x55,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##--------- |
// 3 # #-------- |
// 4 # #-------- |
// 5 # #-------- |
// 6 # #-------- |
// 7 # #-------- |
// 8 # #-------- |
// 9 # #-------- |
// 10 # #-------- |
// 11 # #-------- |
// 12 # #-------- |
// 13 # #-------- |
// 14 # ########- |
// 15 # # |
// 16 # # |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr22[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0x01}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##------##- |
// 3 # #----# # |
// 4 # #--# # |
// 5 # ## # |
// 6 # # |
// 7 # # # # |
// 8 # ## ## # |
// 9 # ## ## # |
// 10 # #-##-# # |
// 11 # #----# # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # #----# # |
// 15 # #----# # |
// 16 # #----# # |
// 17 -##------##- |
// 000000000011 |
// 012345678901 |
const char chr23[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x2a,0x14,0xa8,0x2a,0x82,0xa8,0x2a,0xaa,0xa8,0x28,0xaa,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x41,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x41,0x55,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##------##- |
// 3 # #----# # |
// 4 # #---# # |
// 5 # #--# # |
// 6 # #--# # |
// 7 # # #-# # |
// 8 # # #-# # |
// 9 # ## ## # |
// 10 # ## ## # |
// 11 # #-# # # |
// 12 # #-# # # |
// 13 # #--# # |
// 14 # #--# # |
// 15 # #---# # |
// 16 # #----# # |
// 17 -##------##- |
// 000000000011 |
// 012345678901 |
const char chr24[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x2a,0x15,0x28,0x2a,0x85,0x28,0x2a,0x85,0x28,0x28,0xa1,0x28,0x28,0xa1,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x4a,0x28,0x28,0x4a,0x28,0x28,0x52,0xa8,0x28,0x52,0xa8,0x28,0x54,0xa8,0x28,0x55,0x28,0x41,0x55,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---######--- |
// 3 --# #-- |
// 4 -# #- |
// 5 # #### # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # #----# # |
// 9 # #----# # |
// 10 # #----# # |
// 11 # #----# # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr25[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 -########--- |
// 3 # #-- |
// 4 # #- |
// 5 # ##### # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # ##### # |
// 9 # #- |
// 10 # #-- |
// 11 # ######--- |
// 12 # #-------- |
// 13 # #-------- |
// 14 # #-------- |
// 15 # #-------- |
// 16 # #-------- |
// 17 -##--------- |
// 000000000011 |
// 012345678901 |
const char chr26[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x15,0x2a,0xaa,0x85,0x2a,0xaa,0xa1,0x28,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x00,0xa8,0x2a,0xaa,0xa1,0x2a,0xaa,0x85,0x28,0x00,0x15,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---######--- |
// 3 --# #-- |
// 4 -# #- |
// 5 # #### # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # #----# # |
// 9 # #----# # |
// 10 # #-##-# # |
// 11 # ## ## # |
// 12 # ## # # |
// 13 # #-# # |
// 14 # ### #- |
// 15 -# # |
// 16 --# ## # |
// 17 ---####--##- |
// 000000000011 |
// 012345678901 |
const char chr27[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x41,0x28,0x28,0x28,0x28,0x28,0x2a,0x28,0x28,0x4a,0xa8,0x2a,0x02,0xa1,0x4a,0xaa,0xa8,0x52,0xa8,0x28,0x54,0x01,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 -########--- |
// 3 # #-- |
// 4 # #- |
// 5 # ##### # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # ##### # |
// 9 # #- |
// 10 # #-- |
// 11 # # ##--- |
// 12 # ## #--- |
// 13 # #-# #-- |
// 14 # #--# #- |
// 15 # #---# # |
// 16 # #----# # |
// 17 -##------##- |
// 000000000011 |
// 012345678901 |
const char chr28[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x15,0x2a,0xaa,0x85,0x2a,0xaa,0xa1,0x28,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x00,0xa8,0x2a,0xaa,0xa1,0x2a,0xaa,0x85,0x28,0xa8,0x15,0x28,0x2a,0x15,0x28,0x4a,0x85,0x28,0x52,0xa1,0x28,0x54,0xa8,0x28,0x55,0x28,0x41,0x55,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---#######-- |
// 3 --# #- |
// 4 -# # |
// 5 # ##### # |
// 6 # #-----##- |
// 7 # #-------- |
// 8 # #####--- |
// 9 -# #-- |
// 10 --# #- |
// 11 ---##### # |
// 12 --------# # |
// 13 -##-----# # |
// 14 # ##### # |
// 15 # #- |
// 16 -# #-- |
// 17 --#######--- |
// 000000000011 |
// 012345678901 |
const char chr29[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x05,0x52,0xaa,0xa1,0x4a,0xaa,0xa8,0x2a,0x00,0x28,0x28,0x55,0x41,0x28,0x55,0x55,0x2a,0x00,0x15,0x4a,0xaa,0x85,0x52,0xaa,0xa1,0x54,0x00,0xa8,0x55,0x55,0x28,0x41,0x55,0x28,0x28,0x00,0xa8,0x2a,0xaa,0xa1,0x4a,0xaa,0x85,0x50,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##########- |
// 3 # # |
// 4 # # |
// 5 -#### ####- |
// 6 ----# #---- |
// 7 ----# #---- |
// 8 ----# #---- |
// 9 ----# #---- |
// 10 ----# #---- |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 ----# #---- |
// 14 ----# #---- |
// 15 ----# #---- |
// 16 ----# #---- |
// 17 -----##----- |
// 000000000011 |
// 012345678901 |
const char chr30[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x28,0x01,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##------##- |
// 3 # #----# # |
// 4 # #----# # |
// 5 # #----# # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # #----# # |
// 9 # #----# # |
// 10 # #----# # |
// 11 # #----# # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr31[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##------##- |
// 3 # #----# # |
// 4 # #----# # |
// 5 # #----# # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # #----# # |
// 9 # #----# # |
// 10 # #----# # |
// 11 # #----# # |
// 12 # #--# # |
// 13 -# ## #- |
// 14 --# #-- |
// 15 ---# #--- |
// 16 ----# #---- |
// 17 -----##----- |
// 000000000011 |
// 012345678901 |
const char chr32[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x14,0xa8,0x4a,0x82,0xa1,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##------##- |
// 3 # #----# # |
// 4 # #----# # |
// 5 # #----# # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # #-##-# # |
// 9 # ## ## # |
// 10 # ## ## # |
// 11 # ## ## # |
// 12 # ## ## # |
// 13 # ## ## # |
// 14 # # |
// 15 -# #- |
// 16 --# ## #-- |
// 17 ---##--##--- |
// 000000000011 |
// 012345678901 |
const char chr33[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x41,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2a,0xaa,0xa8,0x4a,0xaa,0xa1,0x52,0x82,0x85,0x54,0x14,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##------##- |
// 3 # #----# # |
// 4 # #----# # |
// 5 # #----# # |
// 6 # #--# # |
// 7 -# ## #- |
// 8 --# #-- |
// 9 ---# #--- |
// 10 ---# #--- |
// 11 --# #-- |
// 12 -# ## #- |
// 13 # #--# # |
// 14 # #----# # |
// 15 # #----# # |
// 16 # #----# # |
// 17 -##------##- |
// 000000000011 |
// 012345678901 |
const char chr34[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x14,0xa8,0x4a,0x82,0xa1,0x52,0xaa,0x85,0x54,0xaa,0x15,0x54,0xaa,0x15,0x52,0xaa,0x85,0x4a,0x82,0xa1,0x2a,0x14,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x41,0x55,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##------##- |
// 3 # #----# # |
// 4 # #----# # |
// 5 # #----# # |
// 6 # #----# # |
// 7 # #----# # |
// 8 # #--# # |
// 9 -# ## #- |
// 10 --# #-- |
// 11 ---# #--- |
// 12 ----# #---- |
// 13 ----# #---- |
// 14 ----# #---- |
// 15 ----# #---- |
// 16 ----# #---- |
// 17 -----##----- |
// 000000000011 |
// 012345678901 |
const char chr35[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x14,0xa8,0x4a,0x82,0xa1,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##########- |
// 3 # # |
// 4 # # |
// 5 -######## # |
// 6 -------# # |
// 7 ------# #- |
// 8 -----# #-- |
// 9 ----# #--- |
// 10 ---# #---- |
// 11 --# #----- |
// 12 -# #------ |
// 13 # #------- |
// 14 # ########- |
// 15 # # |
// 16 # # |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr36[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0x28,0x55,0x54,0xa8,0x55,0x52,0xa1,0x55,0x4a,0x85,0x55,0x2a,0x15,0x54,0xa8,0x55,0x52,0xa1,0x55,0x4a,0x85,0x55,0x2a,0x15,0x55,0x28,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0x01}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ---######--- |
// 5 --# #-- |
// 6 --# #- |
// 7 ---##### # |
// 8 ---###### # |
// 9 --# # # |
// 10 -# # |
// 11 # #### # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # #### # |
// 15 -# # |
// 16 --# # # |
// 17 ---#####-##- |
// 000000000011 |
// 012345678901 |
const char chr37[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x52,0xaa,0xa1,0x54,0x00,0xa8,0x54,0x00,0x28,0x52,0xaa,0x28,0x4a,0xaa,0xa8,0x2a,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa8,0x52,0xaa,0x28,0x54,0x00,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##--------- |
// 3 # #-------- |
// 4 # #-------- |
// 5 # #-###---- |
// 6 # ## #--- |
// 7 # # #-- |
// 8 # # #- |
// 9 # #-# # |
// 10 # #---# # |
// 11 # #---# # |
// 12 # #---# # |
// 13 # #-# # |
// 14 # # #- |
// 15 # # #-- |
// 16 # ## #--- |
// 17 -##--###---- |
// 000000000011 |
// 012345678901 |
const char chr38[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x40,0x55,0x28,0x2a,0x15,0x28,0xaa,0x85,0x2a,0xa2,0xa1,0x2a,0x84,0xa8,0x2a,0x15,0x28,0x2a,0x15,0x28,0x2a,0x15,0x28,0x2a,0x84,0xa8,0x2a,0xa2,0xa1,0x28,0xaa,0x85,0x28,0x2a,0x15,0x41,0x40,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ---######--- |
// 6 --# #-- |
// 7 -# #- |
// 8 # #### # |
// 9 # #----# # |
// 10 # #----# # |
// 11 # #-----##- |
// 12 # #-----##- |
// 13 # #----# # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr39[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x41,0x28,0x55,0x41,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---------##- |
// 3 --------# # |
// 4 --------# # |
// 5 ----###-# # |
// 6 ---# ## # |
// 7 --# # # |
// 8 -# # # |
// 9 # #-# # |
// 10 # #---# # |
// 11 # #---# # |
// 12 # #---# # |
// 13 # #-# # |
// 14 -# # # |
// 15 --# # # |
// 16 ---# ## # |
// 17 ----###--##- |
// 000000000011 |
// 012345678901 |
const char chr40[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x01,0x28,0x54,0xa8,0x28,0x52,0xaa,0x28,0x4a,0x8a,0xa8,0x2a,0x12,0xa8,0x28,0x54,0xa8,0x28,0x54,0xa8,0x28,0x54,0xa8,0x2a,0x12,0xa8,0x4a,0x8a,0xa8,0x52,0xaa,0x28,0x54,0xa8,0x28,0x55,0x01,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ---######--- |
// 6 --# #-- |
// 7 -# #- |
// 8 # #### # |
// 9 # ###### # |
// 10 # # |
// 11 # #- |
// 12 # #######-- |
// 13 # #----###- |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr41[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x00,0x28,0x2a,0xaa,0xa8,0x2a,0xaa,0xa1,0x28,0x00,0x05,0x28,0x55,0x01,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------####-- |
// 3 -----# #- |
// 4 ----# #- |
// 5 ----# ###-- |
// 6 --### ###-- |
// 7 -# #- |
// 8 -# #- |
// 9 --### ###-- |
// 10 ----# #---- |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 ----# #---- |
// 14 ----# #---- |
// 15 ----# #---- |
// 16 ----# #---- |
// 17 -----##----- |
// 000000000011 |
// 012345678901 |
const char chr42[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x05,0x55,0x4a,0xa1,0x55,0x2a,0xa1,0x55,0x28,0x05,0x50,0x28,0x05,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x50,0x28,0x05,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ---######--- |
// 5 --# #-- |
// 6 -# #- |
// 7 # #### # |
// 8 # #----# # |
// 9 # #### # |
// 10 -# # |
// 11 --# # # |
// 12 ---###### # |
// 13 --##----# # |
// 14 -# #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr43[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa8,0x52,0xaa,0x28,0x54,0x00,0x28,0x50,0x55,0x28,0x4a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##--------- |
// 3 # #-------- |
// 4 # #-------- |
// 5 # #-###---- |
// 6 # ## #--- |
// 7 # # #-- |
// 8 # # #- |
// 9 # #-# # |
// 10 # #---# # |
// 11 # #----# # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # #----# # |
// 15 # #----# # |
// 16 # #----# # |
// 17 -##------##- |
// 000000000011 |
// 012345678901 |
const char chr44[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x40,0x55,0x28,0x2a,0x15,0x28,0xaa,0x85,0x2a,0xa2,0xa1,0x2a,0x84,0xa8,0x2a,0x15,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x41,0x55,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 -----##----- |
// 4 ----# #---- |
// 5 ----# #---- |
// 6 -----##----- |
// 7 ---####----- |
// 8 --# #---- |
// 9 --# #---- |
// 10 ---## #---- |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 ----# #---- |
// 14 ----# #--- |
// 15 -----# #-- |
// 16 ------# #-- |
// 17 -------##--- |
// 000000000011 |
// 012345678901 |
const char chr45[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55,0x54,0x01,0x55,0x52,0xa8,0x55,0x52,0xa8,0x55,0x54,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x2a,0x15,0x55,0x4a,0x85,0x55,0x52,0x85,0x55,0x54,0x15}; |
// 0 ------------ |
// 1 -------##--- |
// 2 ------# #-- |
// 3 ------# #-- |
// 4 -------##--- |
// 5 -----####--- |
// 6 ----# #-- |
// 7 ----# #-- |
// 8 -----## #-- |
// 9 ------# #-- |
// 10 ------# #-- |
// 11 ------# #-- |
// 12 ------# #-- |
// 13 ------# #-- |
// 14 ---### #-- |
// 15 --# #--- |
// 16 --# #---- |
// 17 ---####----- |
// 000000000011 |
// 012345678901 |
const char chr46[] PROGMEM = {0x55,0x55,0x55,0x55,0x54,0x15,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x54,0x15,0x55,0x40,0x15,0x55,0x2a,0x85,0x55,0x2a,0x85,0x55,0x42,0x85,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x52,0x85,0x54,0x0a,0x85,0x52,0xaa,0x15,0x52,0xa8,0x55,0x54,0x01,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 -##--------- |
// 3 # #-------- |
// 4 # #-------- |
// 5 # #-----##- |
// 6 # #----# # |
// 7 # #---# # |
// 8 # #--# #- |
// 9 # #-# #-- |
// 10 # ## #--- |
// 11 # # #---- |
// 12 # #--- |
// 13 # # #-- |
// 14 # #-# #- |
// 15 # #---# # |
// 16 # #----# # |
// 17 -##------##- |
// 000000000011 |
// 012345678901 |
const char chr47[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x41,0x28,0x55,0x28,0x28,0x54,0xa8,0x28,0x52,0xa1,0x28,0x4a,0x85,0x28,0x2a,0x15,0x28,0xa8,0x55,0x2a,0xaa,0x15,0x2a,0x8a,0x85,0x2a,0x12,0xa1,0x28,0x54,0xa8,0x28,0x55,0x28,0x41,0x55,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 -----##----- |
// 3 ----# #---- |
// 4 ----# #---- |
// 5 ----# #---- |
// 6 ----# #---- |
// 7 ----# #---- |
// 8 ----# #---- |
// 9 ----# #---- |
// 10 ----# #---- |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 ----# #---- |
// 14 ----# #---- |
// 15 ----# #---- |
// 16 ----# #---- |
// 17 -----##----- |
// 000000000011 |
// 012345678901 |
const char chr48[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -##-#####--- |
// 6 # # #-- |
// 7 # #- |
// 8 # # # # |
// 9 # ## ## # |
// 10 # ## ## # |
// 11 # ## ## # |
// 12 # ## ## # |
// 13 # ## ## # |
// 14 # ## ## # |
// 15 # ## ## # |
// 16 # ## ## # |
// 17 -##--##--##- |
// 000000000011 |
// 012345678901 |
const char chr49[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x00,0x15,0x28,0xaa,0x85,0x2a,0xaa,0xa1,0x2a,0x28,0xa8,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x41,0x41,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -##-#####--- |
// 6 # # #-- |
// 7 # #- |
// 8 # #### # |
// 9 # #----# # |
// 10 # #----# # |
// 11 # #----# # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # #----# # |
// 15 # #----# # |
// 16 # #----# # |
// 17 -##------##- |
// 000000000011 |
// 012345678901 |
const char chr50[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x00,0x15,0x28,0xaa,0x85,0x2a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x41,0x55,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ---######--- |
// 6 --# #-- |
// 7 -# #- |
// 8 # #### # |
// 9 # #----# # |
// 10 # #----# # |
// 11 # #----# # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr51[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 -##-#####--- |
// 5 # # #-- |
// 6 # #- |
// 7 # ### # |
// 8 # #---# # |
// 9 # #---# # |
// 10 # #---# # |
// 11 # ### # |
// 12 # #- |
// 13 # # #-- |
// 14 # ######--- |
// 15 # #-------- |
// 16 # #-------- |
// 17 -##--------- |
// 000000000011 |
// 012345678901 |
const char chr52[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x00,0x15,0x28,0xaa,0x85,0x2a,0xaa,0xa1,0x2a,0x80,0xa8,0x2a,0x15,0x28,0x2a,0x15,0x28,0x2a,0x15,0x28,0x2a,0x80,0xa8,0x2a,0xaa,0xa1,0x28,0xaa,0x85,0x28,0x00,0x15,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ---#####-##- |
// 5 --# # # |
// 6 -# # |
// 7 # ### # |
// 8 # #---# # |
// 9 # #---# # |
// 10 # #---# # |
// 11 # ### # |
// 12 -# # |
// 13 --# # # |
// 14 ---####-# # |
// 15 --------# # |
// 16 --------# # |
// 17 ---------##- |
// 000000000011 |
// 012345678901 |
const char chr53[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x41,0x52,0xaa,0x28,0x4a,0xaa,0xa8,0x2a,0x02,0xa8,0x28,0x54,0xa8,0x28,0x54,0xa8,0x28,0x54,0xa8,0x2a,0x02,0xa8,0x4a,0xaa,0xa8,0x52,0xa8,0xa8,0x54,0x01,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -##--####--- |
// 6 # ## #-- |
// 7 # # #- |
// 8 # ## # |
// 9 # #--# # |
// 10 # #----##- |
// 11 # #-------- |
// 12 # #-------- |
// 13 # #-------- |
// 14 # #-------- |
// 15 # #-------- |
// 16 # #-------- |
// 17 -##--------- |
// 000000000011 |
// 012345678901 |
const char chr54[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x40,0x15,0x28,0x2a,0x85,0x28,0xaa,0xa1,0x2a,0xa0,0xa8,0x2a,0x85,0x28,0x2a,0x15,0x41,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ---######--- |
// 6 --# #-- |
// 7 -# #- |
// 8 # #### # |
// 9 # ###-# # |
// 10 -# ####- |
// 11 --## #-- |
// 12 -##-## #- |
// 13 # #--## # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr55[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x2a,0x01,0x28,0x4a,0xa8,0x01,0x50,0xaa,0x85,0x41,0x0a,0xa1,0x28,0x50,0xa8,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 -----##----- |
// 3 ----# #---- |
// 4 ----# #---- |
// 5 ---## ##--- |
// 6 --# #-- |
// 7 --# #-- |
// 8 ---## ##--- |
// 9 ----# #---- |
// 10 ----# #---- |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 ----# #---- |
// 14 ----# #--- |
// 15 -----# #-- |
// 16 ------# #-- |
// 17 -------##--- |
// 000000000011 |
// 012345678901 |
const char chr56[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x54,0x28,0x15,0x52,0xaa,0x85,0x52,0xaa,0x85,0x54,0x28,0x15,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x2a,0x15,0x55,0x4a,0x85,0x55,0x52,0x85,0x55,0x54,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -##------##- |
// 6 # #----# # |
// 7 # #----# # |
// 8 # #----# # |
// 9 # #----# # |
// 10 # #----# # |
// 11 # #----# # |
// 12 # #----# # |
// 13 # #----# # |
// 14 # #### # |
// 15 -# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr57[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x00,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -##------##- |
// 6 # #----# # |
// 7 # #----# # |
// 8 # #----# # |
// 9 # #----# # |
// 10 # #----# # |
// 11 # #----# # |
// 12 # #--# # |
// 13 -# ## #- |
// 14 --# #-- |
// 15 ---# #--- |
// 16 ----# #---- |
// 17 -----##----- |
// 000000000011 |
// 012345678901 |
const char chr58[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x2a,0x14,0xa8,0x4a,0x82,0xa1,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -##------##- |
// 6 # #----# # |
// 7 # #----# # |
// 8 # #----# # |
// 9 # #-##-# # |
// 10 # ## ## # |
// 11 # ## ## # |
// 12 # ## ## # |
// 13 # ## ## # |
// 14 # # # # |
// 15 -# #- |
// 16 --# ## #-- |
// 17 ---##--##--- |
// 000000000011 |
// 012345678901 |
const char chr59[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x41,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2a,0x28,0xa8,0x4a,0xaa,0xa1,0x52,0x82,0x85,0x54,0x14,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -##------##- |
// 6 # #----# # |
// 7 # #--# # |
// 8 -# ## #- |
// 9 --# #-- |
// 10 ---# #--- |
// 11 ----# #---- |
// 12 ---# #--- |
// 13 --# #-- |
// 14 -# ## #- |
// 15 # #--# # |
// 16 # #----# # |
// 17 -##------##- |
// 000000000011 |
// 012345678901 |
const char chr60[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x2a,0x14,0xa8,0x4a,0x82,0xa1,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x4a,0x82,0xa1,0x2a,0x14,0xa8,0x28,0x55,0x28,0x41,0x55,0x41}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 -##------##- |
// 5 # #----# # |
// 6 # #----# # |
// 7 # #---# # |
// 8 # #---# # |
// 9 # #--# # |
// 10 # ## # |
// 11 -# # # |
// 12 --# ## # |
// 13 ---####-# # |
// 14 ---##### # |
// 15 --# #- |
// 16 --# #-- |
// 17 ---######--- |
// 000000000011 |
// 012345678901 |
const char chr61[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x41,0x28,0x55,0x28,0x28,0x55,0x28,0x28,0x54,0xa8,0x28,0x54,0xa8,0x28,0x52,0xa8,0x2a,0x0a,0xa8,0x4a,0xaa,0x28,0x52,0xa8,0x28,0x54,0x01,0x28,0x54,0x00,0xa8,0x52,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -##########- |
// 6 # # |
// 7 # # |
// 8 -####### # |
// 9 ------# #- |
// 10 -----# #-- |
// 11 ----# #--- |
// 12 ---# #---- |
// 13 --# #----- |
// 14 -# ######- |
// 15 # # |
// 16 # # |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr62[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0xa8,0x55,0x52,0xa1,0x55,0x4a,0x85,0x55,0x2a,0x15,0x54,0xa8,0x55,0x52,0xa1,0x55,0x4a,0x80,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0x01}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 --------##-- |
// 4 -------# #- |
// 5 ------# #-- |
// 6 -----# #--- |
// 7 ----# #---- |
// 8 ----# #---- |
// 9 ----# #---- |
// 10 ----# #---- |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 ----# #---- |
// 14 -----# #--- |
// 15 ------# #-- |
// 16 -------# #- |
// 17 --------##-- |
// 000000000011 |
// 012345678901 |
const char chr63[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x05,0x55,0x54,0xa1,0x55,0x52,0x85,0x55,0x4a,0x15,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x4a,0x15,0x55,0x52,0x85,0x55,0x54,0xa1,0x55,0x55,0x05}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ---##------- |
// 4 --# #------ |
// 5 ---# #----- |
// 6 ----# #---- |
// 7 -----# #--- |
// 8 -----# #--- |
// 9 -----# #--- |
// 10 -----# #--- |
// 11 -----# #--- |
// 12 -----# #--- |
// 13 -----# #--- |
// 14 ----# #---- |
// 15 ---# #----- |
// 16 --# #------ |
// 17 ---##------- |
// 000000000011 |
// 012345678901 |
const char chr64[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x15,0x55,0x52,0x85,0x55,0x54,0xa1,0x55,0x55,0x28,0x55,0x55,0x4a,0x15,0x55,0x4a,0x15,0x55,0x4a,0x15,0x55,0x4a,0x15,0x55,0x4a,0x15,0x55,0x4a,0x15,0x55,0x4a,0x15,0x55,0x28,0x55,0x54,0xa1,0x55,0x52,0x85,0x55,0x54,0x15,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 -------##--- |
// 15 ------# #-- |
// 16 ------# #-- |
// 17 -------##--- |
// 000000000011 |
// 012345678901 |
const char chr65[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x15,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x54,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ---######--- |
// 3 --# #-- |
// 4 -# #- |
// 5 # #### # |
// 6 # #----# # |
// 7 -##-----# # |
// 8 -------# # |
// 9 ------# #- |
// 10 -----# #-- |
// 11 ----# #--- |
// 12 ----# #---- |
// 13 -----##----- |
// 14 -----##----- |
// 15 ----# #---- |
// 16 ----# #---- |
// 17 -----##----- |
// 000000000011 |
// 012345678901 |
const char chr66[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0x00,0xa8,0x28,0x55,0x28,0x41,0x55,0x28,0x55,0x54,0xa8,0x55,0x52,0xa1,0x55,0x4a,0x85,0x55,0x2a,0x15,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 -----##----- |
// 5 ----# #---- |
// 6 ----# #---- |
// 7 -----##----- |
// 8 ------------ |
// 9 ------------ |
// 10 -----##----- |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 ---# #----- |
// 14 --# #------ |
// 15 ---##------- |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr67[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x54,0xa1,0x55,0x52,0x85,0x55,0x54,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 -----##----- |
// 5 ----# #---- |
// 6 ----# #---- |
// 7 -----##----- |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 -----##----- |
// 13 ----# #---- |
// 14 ----# #---- |
// 15 -----##----- |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr68[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 -----##----- |
// 13 ----# #---- |
// 14 ----# #---- |
// 15 ---# #----- |
// 16 --# #------ |
// 17 ---##------- |
// 000000000011 |
// 012345678901 |
const char chr69[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x54,0xa1,0x55,0x52,0x85,0x55,0x54,0x15,0x55}; |
// 0 ------------ |
// 1 ------#----- |
// 2 -----# #---- |
// 3 ----# #--- |
// 4 -----# #--- |
// 5 ------# #--- |
// 6 ------# #--- |
// 7 -----# #---- |
// 8 ------#----- |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr70[] PROGMEM = {0x55,0x55,0x55,0x55,0x51,0x55,0x55,0x48,0x55,0x55,0x2a,0x15,0x55,0x4a,0x15,0x55,0x52,0x15,0x55,0x52,0x15,0x55,0x48,0x55,0x55,0x51,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ---------##- |
// 5 --------# # |
// 6 -------# # |
// 7 ------# #- |
// 8 -----# #-- |
// 9 ----# #--- |
// 10 ---# #---- |
// 11 --# #----- |
// 12 -# #------ |
// 13 # #------- |
// 14 # #-------- |
// 15 -##--------- |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr71[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x54,0xa8,0x55,0x52,0xa1,0x55,0x4a,0x85,0x55,0x2a,0x15,0x54,0xa8,0x55,0x52,0xa1,0x55,0x4a,0x85,0x55,0x2a,0x15,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ---#----#--- |
// 2 --# #--# #-- |
// 3 -# ## #- |
// 4 --# #-# #- |
// 5 ---# #--# #- |
// 6 ---# #--# #- |
// 7 --# #--# #-- |
// 8 ---#----#--- |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr72[] PROGMEM = {0x55,0x55,0x55,0x54,0x55,0x15,0x52,0x14,0x85,0x4a,0x82,0xa1,0x52,0x84,0xa1,0x54,0x85,0x21,0x54,0x85,0x21,0x52,0x14,0x85,0x54,0x55,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ----######-- |
// 8 ---# #- |
// 9 ---# #- |
// 10 ----######-- |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr73[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x05,0x54,0xaa,0xa1,0x54,0xaa,0xa1,0x55,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 --------##-- |
// 3 -------# #- |
// 4 ------# #- |
// 5 -----# #-- |
// 6 ----# #--- |
// 7 ---# #---- |
// 8 --# #----- |
// 9 -# #------ |
// 10 -# #------ |
// 11 --# #----- |
// 12 ---# #---- |
// 13 ----# #--- |
// 14 -----# #-- |
// 15 ------# #- |
// 16 -------# #- |
// 17 --------##-- |
// 000000000011 |
// 012345678901 |
const char chr74[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x05,0x55,0x54,0xa1,0x55,0x52,0xa1,0x55,0x4a,0x85,0x55,0x2a,0x15,0x54,0xa8,0x55,0x52,0xa1,0x55,0x4a,0x85,0x55,0x4a,0x85,0x55,0x52,0xa1,0x55,0x54,0xa8,0x55,0x55,0x2a,0x15,0x55,0x4a,0x85,0x55,0x52,0xa1,0x55,0x54,0xa1,0x55,0x55,0x05}; |
// 0 ------------ |
// 1 ------------ |
// 2 --##-------- |
// 3 -# #------- |
// 4 -# #------ |
// 5 --# #----- |
// 6 ---# #---- |
// 7 ----# #--- |
// 8 -----# #-- |
// 9 ------# #- |
// 10 ------# #- |
// 11 -----# #-- |
// 12 ----# #--- |
// 13 ---# #---- |
// 14 --# #----- |
// 15 -# #------ |
// 16 -# #------- |
// 17 --##-------- |
// 000000000011 |
// 012345678901 |
const char chr75[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x55,0x55,0x4a,0x15,0x55,0x4a,0x85,0x55,0x52,0xa1,0x55,0x54,0xa8,0x55,0x55,0x2a,0x15,0x55,0x4a,0x85,0x55,0x52,0xa1,0x55,0x52,0xa1,0x55,0x4a,0x85,0x55,0x2a,0x15,0x54,0xa8,0x55,0x52,0xa1,0x55,0x4a,0x85,0x55,0x4a,0x15,0x55,0x50,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ----####---- |
// 5 ---# #--- |
// 6 --# #### #-- |
// 7 -# ###-## #- |
// 8 # ## # ## # |
// 9 # # ## ## # |
// 10 # # ### ## # |
// 11 # # ## ## # |
// 12 # ## # # #- |
// 13 # #-##-# #-- |
// 14 -# #----##-- |
// 15 --# ##### #- |
// 16 ---# #-- |
// 17 ----#####--- |
// 000000000011 |
// 012345678901 |
const char chr76[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x55,0x54,0xaa,0x15,0x52,0x00,0x85,0x48,0x04,0x21,0x20,0xa2,0x08,0x22,0x0a,0x08,0x22,0x02,0x08,0x22,0x0a,0x08,0x20,0xa2,0x21,0x21,0x04,0x85,0x48,0x55,0x05,0x52,0x00,0x21,0x54,0xaa,0x85,0x55,0x00,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 - |
// 5 ----------- |
// 6 ------ ---- |
// 7 ------ --- - |
// 8 ------ -- -- |
// 9 ------ --- |
// 10 ------ ----- |
// 11 ----- ------ |
// 12 ----- ------ |
// 13 ---- ------- |
// 14 ---- ------- |
// 15 --- -------- |
// 16 -- --------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr77[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6a,0xaa,0xaa,0x55,0x55,0x56,0x55,0x59,0x56,0x55,0x59,0x59,0x55,0x59,0x65,0x55,0x5a,0x95,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x55,0x95,0x55,0x56,0x55,0x55,0x59,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ----------- |
// 4 ----------- |
// 5 ---------- - |
// 6 --------- -- |
// 7 ------- --- |
// 8 ----- ---- |
// 9 --- -- ---- |
// 10 - ---- ---- |
// 11 ------- ---- |
// 12 ------- ---- |
// 13 ------- ---- |
// 14 ------- ---- |
// 15 ------- ---- |
// 16 ------- ---- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr78[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x56,0x95,0x55,0x6a,0x55,0x56,0x96,0x55,0x69,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------ ----- |
// 4 ------ ----- |
// 5 - |
// 6 - --------- |
// 7 - --------- |
// 8 - --------- |
// 9 ----------- |
// 10 ---------- - |
// 11 ---------- - |
// 12 --------- -- |
// 13 --------- -- |
// 14 -------- --- |
// 15 ------- ---- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr79[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x6a,0xaa,0xaa,0x65,0x55,0x56,0x65,0x55,0x56,0x65,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x56,0x55,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -- - |
// 6 ------ ----- |
// 7 ------ ----- |
// 8 ------ ----- |
// 9 ------ ----- |
// 10 ------ ----- |
// 11 ------ ----- |
// 12 ------ ----- |
// 13 ------ ----- |
// 14 ------ ----- |
// 15 ------ ----- |
// 16 - |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr80[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5a,0xaa,0xa9,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x6a,0xaa,0xaa,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------- ---- |
// 4 ------- ---- |
// 5 ------- ---- |
// 6 - |
// 7 ------ ---- |
// 8 ----- - ---- |
// 9 ----- - ---- |
// 10 ---- -- ---- |
// 11 ---- -- ---- |
// 12 --- --- ---- |
// 13 -- ---- ---- |
// 14 - ----- ---- |
// 15 ------- ---- |
// 16 ------ ---- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr81[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x6a,0xaa,0xaa,0x55,0x5a,0x55,0x55,0x66,0x55,0x55,0x66,0x55,0x55,0x96,0x55,0x55,0x96,0x55,0x56,0x56,0x55,0x59,0x56,0x55,0x65,0x56,0x55,0x55,0x56,0x55,0x55,0x5a,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------ ----- |
// 4 ------ ----- |
// 5 ------ ----- |
// 6 - |
// 7 ------ ---- |
// 8 ------ ---- |
// 9 ----- ----- |
// 10 ----- ----- |
// 11 ----- ----- |
// 12 ---- ------ |
// 13 ---- ------ |
// 14 --- ------- |
// 15 --- ------- |
// 16 -- ------ - |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr82[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x6a,0xaa,0xaa,0x55,0x59,0x56,0x55,0x59,0x56,0x55,0x65,0x56,0x55,0x65,0x56,0x55,0x65,0x56,0x55,0x95,0x56,0x55,0x95,0x56,0x56,0x55,0x56,0x56,0x55,0x56,0x59,0x55,0x69,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ---- ------- |
// 4 ---- ------- |
// 5 -- -- |
// 6 ----- ------ |
// 7 ----- ------ |
// 8 ----- ------ |
// 9 ------ ----- |
// 10 - |
// 11 ------ ----- |
// 12 ------- ---- |
// 13 ------- ---- |
// 14 ------- ---- |
// 15 -------- --- |
// 16 -------- --- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr83[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x95,0x55,0x55,0x95,0x55,0x5a,0xaa,0xa5,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x59,0x55,0x6a,0xaa,0xaa,0x55,0x59,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x55,0x95,0x55,0x55,0x95,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ----- ------ |
// 4 ----- ------ |
// 5 ---- |
// 6 ---- ------ |
// 7 --- ------- |
// 8 -- -------- |
// 9 - -------- - |
// 10 ---------- - |
// 11 ---------- - |
// 12 --------- -- |
// 13 --------- -- |
// 14 -------- --- |
// 15 ----- ---- |
// 16 -- ------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr84[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0xaa,0xaa,0x55,0x95,0x56,0x56,0x55,0x56,0x59,0x55,0x56,0x65,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x6a,0x55,0x5a,0x95,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 -- --------- |
// 4 -- --------- |
// 5 -- |
// 6 -- ---- ---- |
// 7 - ----- ---- |
// 8 - ----- ---- |
// 9 ------- ---- |
// 10 ------- ---- |
// 11 ------- ---- |
// 12 ------- ---- |
// 13 ------ ----- |
// 14 ------ ----- |
// 15 ----- ------ |
// 16 --- ------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr85[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x5a,0xaa,0xaa,0x59,0x56,0x55,0x65,0x56,0x55,0x65,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x56,0x95,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -- - |
// 6 ---------- - |
// 7 ---------- - |
// 8 ---------- - |
// 9 ---------- - |
// 10 ---------- - |
// 11 ---------- - |
// 12 ---------- - |
// 13 ---------- - |
// 14 ---------- - |
// 15 ---------- - |
// 16 -- - |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr86[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5a,0xaa,0xa9,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x5a,0xaa,0xa9,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 --- ----- -- |
// 4 --- ----- -- |
// 5 - |
// 6 --- ----- -- |
// 7 --- ----- -- |
// 8 --- ----- -- |
// 9 --------- -- |
// 10 --------- -- |
// 11 --------- -- |
// 12 --------- -- |
// 13 -------- --- |
// 14 -------- --- |
// 15 ------ ---- |
// 16 ---- ------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr87[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x55,0x65,0x56,0x55,0x65,0x6a,0xaa,0xaa,0x56,0x55,0x65,0x56,0x55,0x65,0x56,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x55,0x95,0x55,0x5a,0x55,0x55,0xa5,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 - ------- |
// 5 ----- ------ |
// 6 ------------ |
// 7 ----------- |
// 8 - ------ |
// 9 ----- ----- |
// 10 ----------- |
// 11 ----------- |
// 12 ---------- - |
// 13 ---------- - |
// 14 --------- -- |
// 15 ------- --- |
// 16 - ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr88[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6a,0x95,0x55,0x55,0x65,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x6a,0x95,0x56,0x55,0x65,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x56,0x95,0x6a,0xa9,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 - - |
// 6 ---------- - |
// 7 --------- -- |
// 8 --------- -- |
// 9 -------- --- |
// 10 -------- --- |
// 11 ------- ---- |
// 12 ------ ---- |
// 13 ----- -- --- |
// 14 ---- ---- -- |
// 15 --- ------ - |
// 16 - -------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr89[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6a,0xaa,0xa9,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x55,0x95,0x55,0x56,0x55,0x55,0x5a,0x55,0x55,0x65,0x95,0x55,0x95,0x65,0x56,0x55,0x59,0x69,0x55,0x56,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 --- -------- |
// 4 --- -------- |
// 5 --- -------- |
// 6 --- -------- |
// 7 --- - |
// 8 - ------ |
// 9 --- ------ - |
// 10 --- ----- -- |
// 11 --- -------- |
// 12 --- -------- |
// 13 --- -------- |
// 14 --- -------- |
// 15 ---- ------- |
// 16 ----- - |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr90[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x6a,0xaa,0x6a,0x95,0x56,0x56,0x55,0x59,0x56,0x55,0x65,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x55,0x95,0x55,0x55,0x6a,0xa9,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ----------- |
// 5 - --------- |
// 6 -- -------- |
// 7 -- -------- |
// 8 --- ------- |
// 9 ---- ------ |
// 10 ---------- - |
// 11 ---------- - |
// 12 --------- -- |
// 13 -------- --- |
// 14 ------- ---- |
// 15 ----- ----- |
// 16 -- ------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr91[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x65,0x55,0x56,0x59,0x55,0x56,0x59,0x55,0x56,0x56,0x55,0x56,0x55,0x95,0x56,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x56,0x55,0x55,0x69,0x55,0x5a,0x95,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ----- ------ |
// 4 ----- ------ |
// 5 ----- |
// 6 ---- ------ |
// 7 ---- ------ |
// 8 --- ------- |
// 9 - -- ---- - |
// 10 ------ -- - |
// 11 -------- -- |
// 12 --------- -- |
// 13 -------- --- |
// 14 ------ ---- |
// 15 ---- ------ |
// 16 - -------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr92[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x6a,0xaa,0x55,0x95,0x56,0x55,0x95,0x56,0x56,0x55,0x56,0x69,0x65,0x59,0x55,0x5a,0x59,0x55,0x55,0xa5,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x5a,0x55,0x55,0xa5,0x55,0x6a,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 --------- -- |
// 4 ------- --- |
// 5 ----- ----- |
// 6 --- -- ---- |
// 7 ------- ---- |
// 8 ------- ---- |
// 9 - |
// 10 ------- ---- |
// 11 ------- ---- |
// 12 ------ ----- |
// 13 ------ ----- |
// 14 ----- ------ |
// 15 ---- ------- |
// 16 -- -------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr93[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x65,0x55,0x56,0x95,0x55,0x69,0x55,0x56,0x96,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x6a,0xaa,0xaa,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x5a,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 - -- ----- - |
// 5 - -- ----- - |
// 6 -- -- ---- - |
// 7 -- -- ---- - |
// 8 -- -- ---- - |
// 9 ---------- - |
// 10 --------- -- |
// 11 --------- -- |
// 12 -------- --- |
// 13 -------- --- |
// 14 ------- ---- |
// 15 ------ ----- |
// 16 ---- ------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr94[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x65,0x95,0x59,0x65,0x95,0x59,0x59,0x65,0x59,0x59,0x65,0x59,0x59,0x65,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x55,0x95,0x55,0x56,0x55,0x55,0x59,0x55,0x55,0xa5,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 --- -- |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 - |
// 9 ------ ----- |
// 10 ------ ----- |
// 11 ------ ----- |
// 12 ------ ----- |
// 13 ----- ------ |
// 14 ----- ------ |
// 15 ---- ------- |
// 16 -- -------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr95[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0xaa,0xa5,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6a,0xaa,0xaa,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x5a,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 --- -------- |
// 4 --- -------- |
// 5 --- -------- |
// 6 --- -------- |
// 7 --- -------- |
// 8 --- ------- |
// 9 --- - ----- |
// 10 --- --- ---- |
// 11 --- ---- --- |
// 12 --- ----- -- |
// 13 --- -------- |
// 14 --- -------- |
// 15 --- -------- |
// 16 --- -------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr96[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x95,0x55,0x56,0x69,0x55,0x56,0x56,0x55,0x56,0x55,0x95,0x56,0x55,0x65,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------- ---- |
// 4 ------- ---- |
// 5 ------- ---- |
// 6 - |
// 7 ------- ---- |
// 8 ------- ---- |
// 9 ------- ---- |
// 10 ------- ---- |
// 11 ------- ---- |
// 12 ------ ----- |
// 13 ------ ----- |
// 14 ----- ------ |
// 15 ---- ------- |
// 16 -- -------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr97[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x6a,0xaa,0xaa,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x5a,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 --- -- |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 - |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr98[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0xaa,0xa5,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6a,0xaa,0xaa,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 --- - |
// 6 ---------- - |
// 7 ---------- - |
// 8 ---------- - |
// 9 ---- ---- -- |
// 10 ----- --- -- |
// 11 ------ - --- |
// 12 ------- ---- |
// 13 ------- ---- |
// 14 ------ - --- |
// 15 ---- --- -- |
// 16 -- ------ - |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr99[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0xaa,0xa9,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x95,0x65,0x55,0x65,0x65,0x55,0x59,0x95,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x59,0x95,0x55,0xa5,0x65,0x5a,0x55,0x59,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ----- ----- |
// 4 ------- ---- |
// 5 ------------ |
// 6 -- - |
// 7 --------- -- |
// 8 -------- --- |
// 9 ------- ---- |
// 10 ------ ---- |
// 11 ----- - -- |
// 12 --- - --- - |
// 13 - --- ---- |
// 14 ------ ----- |
// 15 ------ ----- |
// 16 ------ ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr100[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x69,0x55,0x55,0x56,0x55,0x55,0x55,0x55,0x5a,0xaa,0xa9,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x56,0x55,0x55,0x5a,0x55,0x55,0x69,0xa5,0x56,0x99,0x59,0x69,0x59,0x56,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ---------- - |
// 5 ---------- - |
// 6 ---------- - |
// 7 ---------- - |
// 8 --------- -- |
// 9 --------- -- |
// 10 -------- --- |
// 11 -------- --- |
// 12 ------- ---- |
// 13 ------ ----- |
// 14 ----- ------ |
// 15 ---- ------- |
// 16 -- -------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr101[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x55,0x95,0x55,0x56,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x5a,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ----- -- --- |
// 5 ----- -- --- |
// 6 ----- --- -- |
// 7 ---- ---- -- |
// 8 ---- ---- -- |
// 9 ---- ---- -- |
// 10 --- ------ - |
// 11 --- ------ - |
// 12 --- ------ - |
// 13 -- -------- |
// 14 -- -------- |
// 15 -- -------- |
// 16 - --------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr102[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x65,0x95,0x55,0x65,0x95,0x55,0x65,0x65,0x55,0x95,0x65,0x55,0x95,0x65,0x55,0x95,0x65,0x56,0x55,0x59,0x56,0x55,0x59,0x56,0x55,0x59,0x59,0x55,0x56,0x59,0x55,0x56,0x59,0x55,0x56,0x65,0x55,0x56,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 - ---------- |
// 4 - ---------- |
// 5 - ---------- |
// 6 - ---------- |
// 7 - ------ - |
// 8 - ---- |
// 9 - ---------- |
// 10 - ---------- |
// 11 - ---------- |
// 12 - ---------- |
// 13 - ---------- |
// 14 - ---------- |
// 15 -- -------- |
// 16 --- - |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr103[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0xa9,0x6a,0xaa,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x59,0x55,0x56,0x56,0xaa,0xa9,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 - - |
// 6 ---------- - |
// 7 ---------- - |
// 8 ---------- - |
// 9 ---------- - |
// 10 --------- -- |
// 11 --------- -- |
// 12 -------- --- |
// 13 -------- --- |
// 14 ------- ---- |
// 15 ----- ----- |
// 16 --- ------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr104[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6a,0xaa,0xa9,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x55,0x95,0x55,0x56,0x55,0x55,0x69,0x55,0x56,0x95,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ---- ------- |
// 6 ---- ------ |
// 7 --- - ------ |
// 8 --- -- ----- |
// 9 -- ---- ---- |
// 10 -- ---- ---- |
// 11 - ------ --- |
// 12 --------- -- |
// 13 --------- -- |
// 14 ---------- - |
// 15 ----------- |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr105[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x95,0x55,0x55,0xa5,0x55,0x56,0x65,0x55,0x56,0x59,0x55,0x59,0x56,0x55,0x59,0x56,0x55,0x65,0x55,0x95,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x59,0x55,0x55,0x56,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------ ----- |
// 3 ------ ----- |
// 4 - |
// 5 ------ ----- |
// 6 ------ ----- |
// 7 ------ ----- |
// 8 ------ ----- |
// 9 --- -- -- -- |
// 10 --- -- -- -- |
// 11 -- --- --- - |
// 12 -- --- --- - |
// 13 -- --- --- - |
// 14 - ---- ---- |
// 15 ------ ----- |
// 16 ------ ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr106[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x6a,0xaa,0xaa,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x56,0x59,0x65,0x56,0x59,0x65,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x65,0x59,0x56,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 - |
// 6 ----------- |
// 7 ----------- |
// 8 ---------- - |
// 9 ---------- - |
// 10 --- ----- -- |
// 11 ---- --- --- |
// 12 ----- ---- |
// 13 ------ ----- |
// 14 ------- ---- |
// 15 -------- --- |
// 16 --------- -- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr107[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6a,0xaa,0xaa,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x59,0x55,0x55,0x59,0x56,0x55,0x65,0x55,0x95,0x95,0x55,0x6a,0x55,0x55,0x59,0x55,0x55,0x56,0x55,0x55,0x55,0x95,0x55,0x55,0x65,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -- ------ |
// 6 ------ ---- |
// 7 -------- -- |
// 8 ------------ |
// 9 -- ------ |
// 10 ------ ---- |
// 11 -------- -- |
// 12 ------------ |
// 13 ------------ |
// 14 -- ------ |
// 15 ------ ---- |
// 16 -------- -- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr108[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5a,0xa5,0x55,0x55,0x5a,0x55,0x55,0x55,0xa5,0x55,0x55,0x55,0x5a,0xa5,0x55,0x55,0x5a,0x55,0x55,0x55,0xa5,0x55,0x55,0x55,0x55,0x55,0x55,0x5a,0xa5,0x55,0x55,0x5a,0x55,0x55,0x55,0xa5,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------ ----- |
// 5 ------ ----- |
// 6 ----- ------ |
// 7 ----- ------ |
// 8 ---- ------- |
// 9 ---- ------- |
// 10 ---- -- ---- |
// 11 --- ---- --- |
// 12 --- ---- --- |
// 13 -- ------ -- |
// 14 -- --- -- |
// 15 - ---- - |
// 16 ----------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr109[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x55,0x95,0x55,0x55,0x96,0x55,0x56,0x55,0x95,0x56,0x55,0x95,0x59,0x55,0x65,0x59,0x5a,0xa5,0x6a,0xa5,0x59,0x55,0x55,0x56,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ---------- - |
// 4 ---------- - |
// 5 ---------- - |
// 6 --------- -- |
// 7 ---- ---- -- |
// 8 ----- -- -- |
// 9 ------- --- |
// 10 -------- --- |
// 11 ------- - -- |
// 12 ------- -- - |
// 13 ------ ---- |
// 14 ----- ------ |
// 15 --- ------- |
// 16 - --------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr110[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x95,0x65,0x55,0x69,0x65,0x55,0x56,0x95,0x55,0x55,0x95,0x55,0x56,0x65,0x55,0x56,0x59,0x55,0x59,0x56,0x55,0x65,0x55,0x56,0x95,0x55,0x69,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 -- - |
// 5 ----- ------ |
// 6 ----- ------ |
// 7 ----- ------ |
// 8 ----- ------ |
// 9 - |
// 10 ----- ------ |
// 11 ----- ------ |
// 12 ----- ------ |
// 13 ----- ------ |
// 14 ----- ------ |
// 15 ----- ------ |
// 16 ------ - |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr111[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5a,0xaa,0xa9,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x6a,0xaa,0xaa,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x5a,0xa9,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 -----##----- |
// 12 ----# #---- |
// 13 ---# #--- |
// 14 --# #-- |
// 15 -# #- |
// 16 # # |
// 17 ############ |
// 000000000011 |
// 012345678901 |
const char chr112[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0xaa,0xa8,0x00,0x00,0x00}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -----##----- |
// 6 ----# #---- |
// 7 ---# #--- |
// 8 --# #-- |
// 9 -# #- |
// 10 # # |
// 11 ############ |
// 12 ----# #---- |
// 13 ---# #--- |
// 14 --# #-- |
// 15 -# #- |
// 16 # # |
// 17 ############ |
// 000000000011 |
// 012345678901 |
const char chr113[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0xaa,0xa8,0x00,0x00,0x00,0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0xaa,0xa8,0x00,0x00,0x00}; |
// 0 ----# #---- |
// 1 ---# #--- |
// 2 --# #-- |
// 3 -# #- |
// 4 # # |
// 5 ############ |
// 6 ----# #---- |
// 7 ---# #--- |
// 8 --# #-- |
// 9 -# #- |
// 10 # # |
// 11 ############ |
// 12 ----# #---- |
// 13 ---# #--- |
// 14 --# #-- |
// 15 -# #- |
// 16 # # |
// 17 ############ |
// 000000000011 |
// 012345678901 |
const char chr114[] PROGMEM = {0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0xaa,0xa8,0x00,0x00,0x00,0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0xaa,0xa8,0x00,0x00,0x00,0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0xaa,0xa8,0x00,0x00,0x00}; |
// 0 ----####---- |
// 1 ---######--- |
// 2 --########-- |
// 3 -##########- |
// 4 ############ |
// 5 ############ |
// 6 ----####---- |
// 7 ---######--- |
// 8 --########-- |
// 9 -##########- |
// 10 ############ |
// 11 ############ |
// 12 ----####---- |
// 13 ---######--- |
// 14 --########-- |
// 15 -##########- |
// 16 ############ |
// 17 ############ |
// 000000000011 |
// 012345678901 |
const char chr115[] PROGMEM = {0x55,0x00,0x55,0x54,0x00,0x15,0x50,0x00,0x05,0x40,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x00,0x55,0x54,0x00,0x15,0x50,0x00,0x05,0x40,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x00,0x55,0x54,0x00,0x15,0x50,0x00,0x05,0x40,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00}; |
// 0 ############ |
// 1 ############ |
// 2 -##########- |
// 3 --########-- |
// 4 ---######--- |
// 5 ----####---- |
// 6 ############ |
// 7 ############ |
// 8 -##########- |
// 9 --########-- |
// 10 ---######--- |
// 11 ----####---- |
// 12 ############ |
// 13 ############ |
// 14 -##########- |
// 15 --########-- |
// 16 ---######--- |
// 17 ----####---- |
// 000000000011 |
// 012345678901 |
const char chr116[] PROGMEM = {0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x01,0x50,0x00,0x05,0x54,0x00,0x15,0x55,0x00,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x01,0x50,0x00,0x05,0x54,0x00,0x15,0x55,0x00,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x01,0x50,0x00,0x05,0x54,0x00,0x15,0x55,0x00,0x55}; |
// 0 ############ |
// 1 # # |
// 2 -# #- |
// 3 --# #-- |
// 4 ---# #--- |
// 5 ----# #---- |
// 6 ############ |
// 7 # # |
// 8 -# #- |
// 9 --# #-- |
// 10 ---# #--- |
// 11 ----# #---- |
// 12 ############ |
// 13 # # |
// 14 -# #- |
// 15 --# #-- |
// 16 ---# #--- |
// 17 ----# #---- |
// 000000000011 |
// 012345678901 |
const char chr117[] PROGMEM = {0x00,0x00,0x00,0x2a,0xaa,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x00,0x00,0x00,0x2a,0xaa,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x00,0x00,0x00,0x2a,0xaa,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55}; |
// 0 ############ |
// 1 # # |
// 2 -# #- |
// 3 --# #-- |
// 4 ---# #--- |
// 5 ----# #---- |
// 6 ############ |
// 7 # # |
// 8 -# #- |
// 9 --# #-- |
// 10 ---# #--- |
// 11 ----# #---- |
// 12 -----##----- |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr118[] PROGMEM = {0x00,0x00,0x00,0x2a,0xaa,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x00,0x00,0x00,0x2a,0xaa,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ############ |
// 1 # # |
// 2 -# #- |
// 3 --# #-- |
// 4 ---# #--- |
// 5 ----# #---- |
// 6 -----##----- |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr119[] PROGMEM = {0x00,0x00,0x00,0x2a,0xaa,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 - - |
// 6 - -------- - |
// 7 - -------- - |
// 8 - -------- - |
// 9 - -------- - |
// 10 ---------- - |
// 11 ---------- - |
// 12 --------- -- |
// 13 --------- -- |
// 14 -------- --- |
// 15 ------ ---- |
// 16 --- ------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr120[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6a,0xaa,0xa9,0x65,0x55,0x59,0x65,0x55,0x59,0x65,0x55,0x59,0x65,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x5a,0x55,0x56,0xa5,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 - ---------- |
// 6 -- ------- |
// 7 ---- ----- |
// 8 ------ ---- |
// 9 ----------- |
// 10 ---------- - |
// 11 ---------- - |
// 12 --------- -- |
// 13 -------- --- |
// 14 ------- ---- |
// 15 ----- ----- |
// 16 -- ------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr121[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x65,0x55,0x55,0x5a,0x55,0x56,0x55,0xa5,0x56,0x55,0x59,0x56,0x55,0x55,0x56,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x56,0x55,0x55,0x69,0x55,0x5a,0x95,0x55,0x55,0x55,0x55}; |
// 0 ---------- - |
// 1 -------- -- |
// 2 --------- -- |
// 3 - ---------- |
// 4 - ---------- |
// 5 - ---------- |
// 6 - ---------- |
// 7 - ------ - |
// 8 - ---- |
// 9 - ---------- |
// 10 - ---------- |
// 11 - ---------- |
// 12 - ---------- |
// 13 - ---------- |
// 14 - ---------- |
// 15 -- -------- |
// 16 --- - |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr122[] PROGMEM = {0x55,0x55,0x59,0x55,0x55,0x96,0x55,0x55,0x65,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0xa9,0x6a,0xaa,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x59,0x55,0x56,0x56,0xaa,0xa9,0x55,0x55,0x55}; |
// 0 --------- - |
// 1 -------- -- |
// 2 --------- - |
// 3 ------------ |
// 4 ------------ |
// 5 - - |
// 6 ---------- - |
// 7 ---------- - |
// 8 ---------- - |
// 9 ---------- - |
// 10 --------- -- |
// 11 --------- -- |
// 12 -------- --- |
// 13 -------- --- |
// 14 ------- ---- |
// 15 ----- ----- |
// 16 --- ------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr123[] PROGMEM = {0x55,0x55,0x69,0x55,0x55,0x96,0x55,0x55,0x69,0x55,0x55,0x55,0x55,0x55,0x55,0x6a,0xaa,0xa9,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x55,0x95,0x55,0x56,0x55,0x55,0x69,0x55,0x56,0x95,0x55,0x55,0x55,0x55}; |
// 0 --------- - |
// 1 -------- -- |
// 2 --------- - |
// 3 ------ ----- |
// 4 ------ ----- |
// 5 - - |
// 6 ------ ----- |
// 7 ------ ----- |
// 8 ------ ----- |
// 9 --- -- -- -- |
// 10 --- -- -- -- |
// 11 -- --- --- - |
// 12 -- --- --- - |
// 13 -- --- --- - |
// 14 - ---- ---- |
// 15 ------ ----- |
// 16 ------ ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr124[] PROGMEM = {0x55,0x55,0x69,0x55,0x55,0x96,0x55,0x55,0x69,0x55,0x59,0x55,0x55,0x59,0x55,0x6a,0xaa,0xa9,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x56,0x59,0x65,0x56,0x59,0x65,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x65,0x59,0x56,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x55,0x55}; |
// 0 ---------- - |
// 1 -------- -- |
// 2 --------- -- |
// 3 - ---------- |
// 4 - ---------- |
// 5 - ---------- |
// 6 - ---------- |
// 7 - ------ - |
// 8 - ---- |
// 9 - ---------- |
// 10 - ---------- |
// 11 - ---------- |
// 12 - ---------- |
// 13 - ---------- |
// 14 - ---------- |
// 15 -- -------- |
// 16 --- - |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr125[] PROGMEM = {0x55,0x55,0x59,0x55,0x55,0x96,0x55,0x55,0x65,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0xa9,0x6a,0xaa,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x59,0x55,0x56,0x56,0xaa,0xa9,0x55,0x55,0x55}; |
// 0 ---------- - |
// 1 -------- -- |
// 2 --------- -- |
// 3 ------ ----- |
// 4 ------ ----- |
// 5 - - |
// 6 ------ ----- |
// 7 ------ ----- |
// 8 ------ ----- |
// 9 --- -- -- -- |
// 10 --- -- -- -- |
// 11 -- --- --- - |
// 12 -- --- --- - |
// 13 -- --- --- - |
// 14 - ---- ---- |
// 15 ------ ----- |
// 16 ------ ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr126[] PROGMEM = {0x55,0x55,0x59,0x55,0x55,0x96,0x55,0x55,0x65,0x55,0x59,0x55,0x55,0x59,0x55,0x6a,0xaa,0xa9,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x56,0x59,0x65,0x56,0x59,0x65,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x65,0x59,0x56,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x55,0x55}; |
// 0 ---------- - |
// 1 -------- -- |
// 2 --------- -- |
// 3 ----- ------ |
// 4 ----- ------ |
// 5 ---- |
// 6 ---- ------ |
// 7 --- ------- |
// 8 -- -------- |
// 9 - -------- - |
// 10 ---------- - |
// 11 ---------- - |
// 12 --------- -- |
// 13 --------- -- |
// 14 -------- --- |
// 15 ----- ---- |
// 16 -- ------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr127[] PROGMEM = {0x55,0x55,0x59,0x55,0x55,0x96,0x55,0x55,0x65,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0xaa,0xaa,0x55,0x95,0x56,0x56,0x55,0x56,0x59,0x55,0x56,0x65,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x6a,0x55,0x5a,0x95,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 -#---------- |
// 2 # #--------- |
// 3 # #--------- |
// 4 # ###------- |
// 5 # # #------- |
// 6 # #####---- |
// 7 # # # #---- |
// 8 ##-## # #--- |
// 9 ----# #---- |
// 10 ----# ###--- |
// 11 ----# ## #-- |
// 12 ----#### ### |
// 13 -------# # |
// 14 -------# # # |
// 15 -------# # # |
// 16 -------##-## |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr128[] PROGMEM = {0x55,0x55,0x55,0x45,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x20,0x15,0x55,0x22,0x15,0x55,0x28,0x00,0x55,0x22,0x28,0x55,0x04,0x22,0x15,0x55,0x28,0x55,0x55,0x20,0x15,0x55,0x20,0x85,0x55,0x00,0x80,0x55,0x54,0xa8,0x55,0x54,0x88,0x55,0x54,0x88,0x55,0x54,0x10,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 -- ---- --- |
// 9 - ## -- # -- |
// 10 # # # # - |
// 11 # # # # -- |
// 12 - ## # # --- |
// 13 -- # # --- |
// 14 -- # # ## -- |
// 15 - # # # # - |
// 16 # # # # - |
// 17 - # -- ## -- |
// 000000000011 |
// 012345678901 |
const char chr129[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5a,0x55,0x95,0x60,0x96,0x25,0x8a,0x28,0x89,0x8a,0x22,0x25,0x60,0x88,0x95,0x5a,0x22,0x95,0x58,0x88,0x25,0x62,0x22,0x89,0x88,0xa2,0x89,0x62,0x58,0x25}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 # # # # #### |
// 7 ------# # |
// 8 #-------# # |
// 9 ------# # # |
// 10 #-----# #-# |
// 11 ----# #---# |
// 12 #---# #---- |
// 13 #-# #-----# |
// 14 # # #------ |
// 15 # #-------# |
// 16 # #------ |
// 17 #### # # # # |
// 000000000011 |
// 012345678901 |
const char chr130[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x22,0x22,0x00,0x95,0x54,0xa8,0x15,0x55,0x28,0x95,0x54,0x88,0x15,0x52,0x12,0x95,0x48,0x54,0x15,0x21,0x56,0x84,0x85,0x54,0x22,0x15,0x56,0x28,0x55,0x54,0x2a,0x15,0x56,0x00,0x88,0x88}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ----- ------ |
// 6 ---- # ----- |
// 7 --- # # ---- |
// 8 -- # # --- |
// 9 - # # -- |
// 10 -- # # --- |
// 11 --- # # ---- |
// 12 ---- # ----- |
// 13 ----- ------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr131[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x65,0x55,0x55,0x89,0x55,0x56,0x22,0x55,0x58,0xa8,0x95,0x62,0xaa,0x25,0x58,0xa8,0x95,0x56,0x22,0x55,0x55,0x89,0x55,0x55,0x65,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 -#######---- |
// 1 # #--- |
// 2 # ## ## #--- |
// 3 # ## ## #--- |
// 4 # #-#-# #--- |
// 5 -#-###-#---- |
// 6 -## ##---- |
// 7 -# ### #---- |
// 8 -# #---- |
// 9 -# ### #---- |
// 10 -# #-# #---- |
// 11 --#---#----- |
// 12 -# #-------- |
// 13 -# #####---- |
// 14 -# #---- |
// 15 -# ### #---- |
// 16 -# #-# #---- |
// 17 --#---#----- |
// 000000000011 |
// 012345678901 |
const char chr132[] PROGMEM = {0x40,0x00,0x55,0x2a,0xaa,0x15,0x20,0x82,0x15,0x20,0x82,0x15,0x21,0x12,0x15,0x44,0x04,0x55,0x42,0xa0,0x55,0x48,0x08,0x55,0x4a,0xa8,0x55,0x48,0x08,0x55,0x48,0x48,0x55,0x51,0x51,0x55,0x48,0x55,0x55,0x48,0x00,0x55,0x4a,0xa8,0x55,0x48,0x08,0x55,0x48,0x48,0x55,0x51,0x51,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 # ## # |
// 7 # ## ## # |
// 8 #### |
// 9 ## |
// 10 # # |
// 11 # # |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr133[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x2a,0xaa,0x08,0x28,0x28,0x28,0xaa,0x00,0xaa,0xaa,0x82,0xaa,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 |
// 2 ############ |
// 3 ## ## ### |
// 4 #### ## # ## |
// 5 ### ## # ## |
// 6 #### ## # ## |
// 7 ## ## ### |
// 8 ############ |
// 9 ## # ##### |
// 10 ## ######### |
// 11 ## ## # # # |
// 12 ## ### ## ## |
// 13 ## ### # # # |
// 14 ############ |
// 15 |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr134[] PROGMEM = {0x55,0x55,0x55,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x0a,0x82,0x80,0x00,0x82,0x20,0x02,0x82,0x20,0x00,0x82,0x20,0x0a,0x82,0x80,0x00,0x00,0x00,0x0a,0x88,0x00,0x08,0x00,0x00,0x0a,0x08,0x88,0x08,0x08,0x20,0x08,0x08,0x88,0x00,0x00,0x00,0xaa,0xaa,0xaa,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 --##-------- |
// 1 -# #------- |
// 2 # ## #------ |
// 3 # ## #------ |
// 4 # #------ |
// 5 # ## #------ |
// 6 # ## #------ |
// 7 -#--#------- |
// 8 ---# #------ |
// 9 ---# #------ |
// 10 ---# #------ |
// 11 ---# ##-###- |
// 12 ---# # # |
// 13 ----###-# #- |
// 14 --------# #- |
// 15 --------# #- |
// 16 --------# #- |
// 17 ---------#-- |
// 000000000011 |
// 012345678901 |
const char chr135[] PROGMEM = {0x50,0x55,0x55,0x4a,0x15,0x55,0x20,0x85,0x55,0x20,0x85,0x55,0x2a,0x85,0x55,0x20,0x85,0x55,0x20,0x85,0x55,0x45,0x15,0x55,0x54,0x85,0x55,0x54,0x85,0x55,0x54,0x85,0x55,0x54,0x81,0x01,0x54,0xa8,0xa8,0x55,0x01,0x21,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x45}; |
// 0 -#---#------ |
// 1 # #-# #----- |
// 2 # #-# #----- |
// 3 # #-# #----- |
// 4 # #-# #----- |
// 5 -# # #------ |
// 6 --# ####---- |
// 7 ---# #--- |
// 8 ---# ###---- |
// 9 ---# #---- |
// 10 ---# ##-#--- |
// 11 ---# ### #-- |
// 12 ---# #-- |
// 13 ----#### #-- |
// 14 -------# #-- |
// 15 -------# ### |
// 16 -------# |
// 17 --------#### |
// 000000000011 |
// 012345678901 |
const char chr136[] PROGMEM = {0x45,0x45,0x55,0x21,0x21,0x55,0x21,0x21,0x55,0x21,0x21,0x55,0x21,0x21,0x55,0x48,0x85,0x55,0x52,0x00,0x55,0x54,0xaa,0x15,0x54,0x80,0x55,0x54,0xa8,0x55,0x54,0x81,0x15,0x54,0x80,0x85,0x54,0xaa,0x85,0x55,0x00,0x85,0x55,0x54,0x85,0x55,0x54,0x80,0x55,0x54,0xaa,0x55,0x55,0x00}; |
// 0 ------------ |
// 1 -####------- |
// 2 # ##------ |
// 3 # ## #------ |
// 4 # ## #------ |
// 5 # ## #------ |
// 6 # ####---- |
// 7 -### #--- |
// 8 ---# ###---- |
// 9 ---# #--- |
// 10 ---#### #--- |
// 11 ---# ###- |
// 12 ----## # |
// 13 ------## ##- |
// 14 -------# #-- |
// 15 -------# #-- |
// 16 -------# #-- |
// 17 --------#--- |
// 000000000011 |
// 012345678901 |
const char chr137[] PROGMEM = {0x55,0x55,0x55,0x40,0x15,0x55,0x2a,0x05,0x55,0x20,0x85,0x55,0x20,0x85,0x55,0x20,0x85,0x55,0x2a,0x00,0x55,0x40,0xaa,0x15,0x54,0x80,0x55,0x54,0xaa,0x15,0x54,0x02,0x15,0x54,0xaa,0x01,0x55,0x0a,0xa8,0x55,0x50,0x81,0x55,0x54,0x85,0x55,0x54,0x85,0x55,0x54,0x85,0x55,0x55,0x15}; |
// 0 -#######---- |
// 1 # #--- |
// 2 # ## ## #--- |
// 3 # ## ## #--- |
// 4 # ## ## #--- |
// 5 # #-#-# #--- |
// 6 -#-----#---- |
// 7 -#######---- |
// 8 # #--- |
// 9 # #--- |
// 10 -#######---- |
// 11 --#####----- |
// 12 -# #---- |
// 13 -# #####---- |
// 14 -# #---- |
// 15 -##### #---- |
// 16 -# #---- |
// 17 --#####----- |
// 000000000011 |
// 012345678901 |
const char chr138[] PROGMEM = {0x40,0x00,0x55,0x2a,0xaa,0x15,0x20,0x82,0x15,0x20,0x82,0x15,0x20,0x82,0x15,0x21,0x12,0x15,0x45,0x54,0x55,0x40,0x00,0x55,0x2a,0xaa,0x15,0x2a,0xaa,0x15,0x40,0x00,0x55,0x50,0x01,0x55,0x4a,0xa8,0x55,0x48,0x00,0x55,0x4a,0xa8,0x55,0x40,0x08,0x55,0x4a,0xa8,0x55,0x50,0x01,0x55}; |
// 0 -- ------- |
// 1 - ### ------ |
// 2 ## ## ----- |
// 3 # - # ----- |
// 4 ## ## ----- |
// 5 - ### ------ |
// 6 -- ------- |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr139[] PROGMEM = {0x5a,0x95,0x55,0x60,0x25,0x55,0x82,0x09,0x55,0x89,0x89,0x55,0x82,0x09,0x55,0x60,0x25,0x55,0x5a,0x95,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 -#######---- |
// 12 # #--- |
// 13 # ## ## #--- |
// 14 # ## ## #--- |
// 15 # ## ## #--- |
// 16 # #-#-# #--- |
// 17 -#-----#---- |
// 000000000011 |
// 012345678901 |
const char chr140[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x55,0x2a,0xaa,0x15,0x20,0x82,0x15,0x20,0x82,0x15,0x20,0x82,0x15,0x21,0x12,0x15,0x45,0x54,0x55}; |
// 0 ############ |
// 1 -- # ------- |
// 2 - # # ------ |
// 3 # # - |
// 4 ### ###### - |
// 5 # # # # - |
// 6 - # # # # |
// 7 - # # # ### |
// 8 - # # # # |
// 9 - # # # # # |
// 10 - # # # # # |
// 11 - # # # # # |
// 12 # # ##### |
// 13 ### ### |
// 14 # # ----- |
// 15 - # # ------ |
// 16 -- # ------- |
// 17 ############ |
// 000000000011 |
// 012345678901 |
const char chr141[] PROGMEM = {0x00,0x00,0x00,0x58,0x95,0x55,0x62,0x25,0x55,0x8a,0x8a,0xa9,0x02,0x00,0x09,0xa2,0x28,0x89,0x62,0x28,0x8a,0x62,0x28,0x80,0x62,0x28,0xa8,0x62,0x28,0x88,0x62,0x28,0x88,0x62,0x28,0x88,0xa2,0x28,0x00,0x02,0x02,0xaa,0x8a,0x89,0x55,0x62,0x25,0x55,0x58,0x95,0x55,0x00,0x00,0x00}; |
// 0 ------- ---- |
// 1 ------ # --- |
// 2 ------ # --- |
// 3 ---- # --- |
// 4 --- #### --- |
// 5 -- # # --- |
// 6 -- # - # --- |
// 7 -- # # --- |
// 8 --- #### --- |
// 9 ---- ---- |
// 10 - -------- - |
// 11 # ------ # |
// 12 # -#--#- # |
// 13 # # ## # # |
// 14 ## ## |
// 15 # # ## # # |
// 16 # -#--#- # |
// 17 - -------- - |
// 000000000011 |
// 012345678901 |
const char chr142[] PROGMEM = {0x55,0x56,0x55,0x55,0x58,0x95,0x55,0x58,0x95,0x55,0xa8,0x95,0x56,0x00,0x95,0x58,0xa8,0x95,0x58,0x98,0x95,0x58,0xa8,0x95,0x56,0x00,0x95,0x55,0xaa,0x55,0x65,0x55,0x59,0x89,0x55,0x62,0x89,0x14,0x62,0x88,0x82,0x22,0x82,0xaa,0x82,0x88,0x82,0x22,0x89,0x14,0x62,0x65,0x55,0x59}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 -------- --- |
// 4 --------- -- |
// 5 -------- --- |
// 6 ------- ---- |
// 7 ----- ----- |
// 8 --- ------- |
// 9 -- --------- |
// 10 -- --------- |
// 11 --- ------- |
// 12 ----- ----- |
// 13 ------- --- |
// 14 --------- -- |
// 15 ---------- - |
// 16 ---------- - |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr143[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x95,0x55,0x55,0x65,0x55,0x55,0x95,0x55,0x56,0x55,0x55,0x69,0x55,0x56,0x95,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x56,0x95,0x55,0x55,0x69,0x55,0x55,0x56,0x95,0x55,0x55,0x65,0x55,0x55,0x59,0x55,0x55,0x59,0x55,0x55,0x55}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ## #- |
// 4 -# #- |
// 5 -# #- |
// 6 -# #- |
// 7 -# #- |
// 8 -# #- |
// 9 -# #- |
// 10 -# #- |
// 11 -# #- |
// 12 -# #- |
// 13 -# #- |
// 14 -# #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr144[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x4a,0x82,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# #- |
// 5 -# #- |
// 6 -# #- |
// 7 -# #- |
// 8 -# #- |
// 9 -# #- |
// 10 -# #- |
// 11 -# #- |
// 12 -# #- |
// 13 -# #- |
// 14 -# #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr145[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# ###### #- |
// 5 -# #- |
// 6 -# #- |
// 7 -# #- |
// 8 -# #- |
// 9 -# #- |
// 10 -# #- |
// 11 -# #- |
// 12 -# #- |
// 13 -# #- |
// 14 -# #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr146[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# ###### #- |
// 5 -# ###### #- |
// 6 -# #- |
// 7 -# #- |
// 8 -# #- |
// 9 -# #- |
// 10 -# #- |
// 11 -# #- |
// 12 -# #- |
// 13 -# #- |
// 14 -# #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr147[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# ###### #- |
// 5 -# ###### #- |
// 6 -# ###### #- |
// 7 -# #- |
// 8 -# #- |
// 9 -# #- |
// 10 -# #- |
// 11 -# #- |
// 12 -# #- |
// 13 -# #- |
// 14 -# #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr148[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# ###### #- |
// 5 -# ###### #- |
// 6 -# ###### #- |
// 7 -# ###### #- |
// 8 -# #- |
// 9 -# #- |
// 10 -# #- |
// 11 -# #- |
// 12 -# #- |
// 13 -# #- |
// 14 -# #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr149[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# ###### #- |
// 5 -# ###### #- |
// 6 -# ###### #- |
// 7 -# ###### #- |
// 8 -# ###### #- |
// 9 -# #- |
// 10 -# #- |
// 11 -# #- |
// 12 -# #- |
// 13 -# #- |
// 14 -# #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr150[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# ###### #- |
// 5 -# ###### #- |
// 6 -# ###### #- |
// 7 -# ###### #- |
// 8 -# ###### #- |
// 9 -# ###### #- |
// 10 -# #- |
// 11 -# #- |
// 12 -# #- |
// 13 -# #- |
// 14 -# #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr151[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# ###### #- |
// 5 -# ###### #- |
// 6 -# ###### #- |
// 7 -# ###### #- |
// 8 -# ###### #- |
// 9 -# ###### #- |
// 10 -# ###### #- |
// 11 -# #- |
// 12 -# #- |
// 13 -# #- |
// 14 -# #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr152[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# ###### #- |
// 5 -# ###### #- |
// 6 -# ###### #- |
// 7 -# ###### #- |
// 8 -# ###### #- |
// 9 -# ###### #- |
// 10 -# ###### #- |
// 11 -# ###### #- |
// 12 -# #- |
// 13 -# #- |
// 14 -# #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr153[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# ###### #- |
// 5 -# ###### #- |
// 6 -# ###### #- |
// 7 -# ###### #- |
// 8 -# ###### #- |
// 9 -# ###### #- |
// 10 -# ###### #- |
// 11 -# ###### #- |
// 12 -# ###### #- |
// 13 -# #- |
// 14 -# #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr154[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# ###### #- |
// 5 -# ###### #- |
// 6 -# ###### #- |
// 7 -# ###### #- |
// 8 -# ###### #- |
// 9 -# ###### #- |
// 10 -# ###### #- |
// 11 -# ###### #- |
// 12 -# ###### #- |
// 13 -# ###### #- |
// 14 -# #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr155[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# ###### #- |
// 5 -# ###### #- |
// 6 -# ###### #- |
// 7 -# ###### #- |
// 8 -# ###### #- |
// 9 -# ###### #- |
// 10 -# ###### #- |
// 11 -# ###### #- |
// 12 -# ###### #- |
// 13 -# ###### #- |
// 14 -# ###### #- |
// 15 -# #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr156[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ---######--- |
// 1 -### ###- |
// 2 -# ## #- |
// 3 -# ###### #- |
// 4 -# ###### #- |
// 5 -# ###### #- |
// 6 -# ###### #- |
// 7 -# ###### #- |
// 8 -# ###### #- |
// 9 -# ###### #- |
// 10 -# ###### #- |
// 11 -# ###### #- |
// 12 -# ###### #- |
// 13 -# ###### #- |
// 14 -# ###### #- |
// 15 -# ###### #- |
// 16 -# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr157[] PROGMEM = {0x54,0x00,0x15,0x40,0xaa,0x01,0x4a,0x82,0xa1,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x48,0x00,0x21,0x4a,0xaa,0xa1,0x40,0x00,0x01}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 -#---#------ |
// 11 # #-# #----- |
// 12 # #-# #----- |
// 13 # #-# #----- |
// 14 # #-# #----- |
// 15 ## # ##----- |
// 16 -## ##------ |
// 17 --###------- |
// 000000000011 |
// 012345678901 |
const char chr158[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x45,0x45,0x55,0x21,0x21,0x55,0x21,0x21,0x55,0x21,0x21,0x55,0x21,0x21,0x55,0x08,0x81,0x55,0x42,0x05,0x55,0x50,0x15,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 --###------- |
// 11 -# #------ |
// 12 # ### #----- |
// 13 # ### #----- |
// 14 # #----- |
// 15 # ### #----- |
// 16 # #-# #----- |
// 17 -#---#------ |
// 000000000011 |
// 012345678901 |
const char chr159[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x15,0x55,0x4a,0x85,0x55,0x20,0x21,0x55,0x20,0x21,0x55,0x2a,0xa1,0x55,0x20,0x21,0x55,0x21,0x21,0x55,0x45,0x45,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # ## # - |
// 5 # ## # |
// 6 # ## # |
// 7 # ## # |
// 8 ## |
// 9 ## |
// 10 # # |
// 11 # # |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr160[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0x82,0x89,0x8a,0x82,0xa2,0x2a,0x82,0xa8,0x2a,0x82,0xa8,0xaa,0x82,0xaa,0xaa,0x82,0xaa,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # ## - |
// 5 # ## # |
// 6 # ## # |
// 7 # ## # |
// 8 ## |
// 9 ## |
// 10 # # |
// 11 # # |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr161[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x09,0x8a,0xa8,0x22,0x2a,0xa0,0xa8,0x2a,0xa0,0xa8,0xaa,0x82,0xaa,0xaa,0x82,0xaa,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # ### |
// 6 # ### # |
// 7 # ### # |
// 8 ### |
// 9 ## |
// 10 # # |
// 11 # # |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr162[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0x02,0x2a,0xa8,0x08,0x2a,0xa0,0x28,0xaa,0x80,0xaa,0xaa,0x82,0xaa,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 # ### |
// 7 # ### # |
// 8 #### |
// 9 ## |
// 10 # # |
// 11 # # |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr163[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x2a,0xaa,0x80,0x2a,0xa8,0x08,0xaa,0x80,0x2a,0xaa,0x82,0xaa,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 # # |
// 7 # # |
// 8 ###### |
// 9 ###### |
// 10 # # |
// 11 # # |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr164[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0xaa,0x80,0x02,0xaa,0x80,0x02,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 # # |
// 7 # # |
// 8 ## |
// 9 #### |
// 10 # ### # |
// 11 # ### |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr165[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0xaa,0x82,0xaa,0xaa,0x80,0x2a,0x2a,0xa8,0x08,0x2a,0xaa,0x80,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 # # |
// 7 # # |
// 8 ## |
// 9 ### |
// 10 # ### # |
// 11 # ### # |
// 12 # ### |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr166[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0xaa,0x82,0xaa,0xaa,0x80,0xaa,0x2a,0xa0,0x28,0x2a,0xa8,0x08,0x8a,0xaa,0x02,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 # # |
// 7 # # |
// 8 ## |
// 9 ## |
// 10 # ## # |
// 11 # ## # |
// 12 # ## # |
// 13 - # ## - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr167[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0xaa,0x82,0xaa,0xaa,0x82,0xaa,0x2a,0xa0,0xa8,0x2a,0xa0,0xa8,0x8a,0xa8,0x22,0x62,0xaa,0x09,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 # # |
// 7 # # |
// 8 ## |
// 9 ## |
// 10 # ## # |
// 11 # ## # |
// 12 # ## # |
// 13 - # ## # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr168[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0xaa,0x82,0xaa,0xaa,0x82,0xaa,0x2a,0x82,0xa8,0x2a,0x82,0xa8,0x8a,0x82,0xa2,0x62,0x82,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 # # |
// 7 # # |
// 8 ## |
// 9 ## |
// 10 # ## # |
// 11 # ## # |
// 12 # ## # |
// 13 - ## # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr169[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0xaa,0x82,0xaa,0xaa,0x82,0xaa,0x2a,0x0a,0xa8,0x2a,0x0a,0xa8,0x88,0x2a,0xa2,0x60,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 # # |
// 7 # # |
// 8 ## |
// 9 ### |
// 10 # ### # |
// 11 # ### # |
// 12 ### # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr170[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0xaa,0x82,0xaa,0xaa,0x02,0xaa,0x28,0x0a,0xa8,0x20,0x2a,0xa8,0x80,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 # # |
// 7 # # |
// 8 ## |
// 9 #### |
// 10 # ### # |
// 11 ### # |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr171[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0xaa,0x82,0xaa,0xa8,0x02,0xaa,0x20,0x2a,0xa8,0x02,0xaa,0xa8,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 # # |
// 7 # # |
// 8 ###### |
// 9 ###### |
// 10 # # |
// 11 # # |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr172[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x80,0x02,0xaa,0x80,0x02,0xaa,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 ### # |
// 7 # ### # |
// 8 #### |
// 9 ## |
// 10 # # |
// 11 # # |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr173[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x02,0xaa,0xa8,0x20,0x2a,0xa8,0xa8,0x02,0xaa,0xaa,0x82,0xaa,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 ### # |
// 6 # ### # |
// 7 # ### # |
// 8 ### |
// 9 ## |
// 10 # # |
// 11 # # |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr174[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x80,0xaa,0xa2,0x20,0x2a,0xa8,0x28,0x0a,0xa8,0xaa,0x02,0xaa,0xaa,0x82,0xaa,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - ## # - |
// 5 # ## # |
// 6 # ## # |
// 7 # ## # |
// 8 ## |
// 9 ## |
// 10 # # |
// 11 # # |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr175[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x60,0xaa,0x89,0x88,0x2a,0xa2,0x2a,0x0a,0xa8,0x2a,0x0a,0xa8,0xaa,0x82,0xaa,0xaa,0x82,0xaa,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ----------- |
// 7 ----------- |
// 8 ---------- # |
// 9 ---------- # |
// 10 ----------- |
// 11 ----------- |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr176[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x58,0x55,0x55,0x58,0x55,0x55,0x56,0x55,0x55,0x56,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----- ----- |
// 2 --- ## --- |
// 3 -- ## ## -- |
// 4 - # # - |
// 5 # # |
// 6 # # |
// 7 # # |
// 8 ## |
// 9 ## |
// 10 # # |
// 11 # # |
// 12 # # |
// 13 - # # - |
// 14 -- ## ## -- |
// 15 --- ## --- |
// 16 ----- ----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr177[] PROGMEM = {0x55,0x55,0x55,0x55,0x69,0x55,0x56,0x82,0x95,0x58,0x28,0x25,0x62,0xaa,0x89,0x8a,0xaa,0xa2,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0xaa,0x82,0xaa,0xaa,0x82,0xaa,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x8a,0xaa,0xa2,0x62,0xaa,0x89,0x58,0x28,0x25,0x56,0x82,0x95,0x55,0x69,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ----------- |
// 7 ----------- |
// 8 # ---------- |
// 9 # ---------- |
// 10 ----------- |
// 11 ----------- |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr178[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x95,0x55,0x55,0x95,0x55,0x55,0x25,0x55,0x55,0x25,0x55,0x55,0x95,0x55,0x55,0x95,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ---- ---- |
// 5 ---- ## ---- |
// 6 ---- ## ---- |
// 7 ---- ## ---- |
// 8 ## |
// 9 ########## |
// 10 # # |
// 11 # ## ## # |
// 12 # ## ## # |
// 13 # # |
// 14 # # |
// 15 ########## |
// 16 |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr179[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xaa,0x55,0x55,0x82,0x55,0x55,0x82,0x55,0x55,0x82,0x55,0xaa,0x82,0xaa,0x80,0x00,0x02,0x8a,0xaa,0xa2,0x88,0x28,0x22,0x88,0x28,0x22,0x8a,0xaa,0xa2,0x8a,0xaa,0xa2,0x80,0x00,0x02,0xaa,0xaa,0xaa,0x55,0x55,0x55}; |
// 0 ---------- - |
// 1 --------- -- |
// 2 --------#--- |
// 3 -----##-#--- |
// 4 ----#####--- |
// 5 ---######--- |
// 6 --########-- |
// 7 -##########- |
// 8 ## ## |
// 9 -# ### #- |
// 10 -# #-# #- |
// 11 -# ### #- |
// 12 -# #- |
// 13 -# #- |
// 14 -# ### #- |
// 15 -# #-# #- |
// 16 -# #-# #- |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr180[] PROGMEM = {0x55,0x55,0x59,0x55,0x55,0x65,0x55,0x55,0x15,0x55,0x41,0x15,0x55,0x00,0x15,0x54,0x00,0x15,0x50,0x00,0x05,0x40,0x00,0x01,0x0a,0xaa,0xa0,0x4a,0xa0,0x21,0x4a,0xa1,0x21,0x4a,0xa0,0x21,0x4a,0xaa,0xa1,0x4a,0xaa,0xa1,0x48,0x0a,0xa1,0x48,0x4a,0xa1,0x48,0x4a,0xa1,0x40,0x00,0x01}; |
// 0 #######----- |
// 1 # #----- |
// 2 # # # #----- |
// 3 # # # #----- |
// 4 #######----- |
// 5 -----# #---- |
// 6 ----# # #--- |
// 7 ---# ### #-- |
// 8 ---# #-- |
// 9 ---# ### #-- |
// 10 ---# #-# #-- |
// 11 ----##-###-- |
// 12 -------# #-- |
// 13 -------# ### |
// 14 -------# # |
// 15 -------# # # |
// 16 -------# # # |
// 17 -------##### |
// 000000000011 |
// 012345678901 |
const char chr181[] PROGMEM = {0x00,0x01,0x55,0x2a,0xa1,0x55,0x22,0x21,0x55,0x22,0x21,0x55,0x00,0x01,0x55,0x55,0x48,0x55,0x55,0x22,0x15,0x54,0x80,0x85,0x54,0xaa,0x85,0x54,0x80,0x85,0x54,0x84,0x85,0x55,0x04,0x05,0x55,0x54,0x85,0x55,0x54,0x80,0x55,0x54,0xa8,0x55,0x54,0x88,0x55,0x54,0x88,0x55,0x54,0x00}; |
// 0 -- ------- |
// 1 - ### --- - |
// 2 - # ## - # - |
// 3 - # ## # -- |
// 4 - ## ## --- |
// 5 -- ## ## -- |
// 6 --- ## ## - |
// 7 ---- ## ## |
// 8 ---- ### # |
// 9 ---- # #### |
// 10 ---- # # - |
// 11 ---- # # --- |
// 12 ---- # # --- |
// 13 --- ## ## -- |
// 14 -- # # - |
// 15 - # # |
// 16 - ######### |
// 17 -- - |
// 000000000011 |
// 012345678901 |
const char chr182[] PROGMEM = {0x5a,0x95,0x55,0x60,0x25,0x69,0x62,0x09,0x89,0x62,0x82,0x25,0x60,0xa0,0x95,0x58,0x28,0x25,0x56,0x0a,0x09,0x55,0x82,0x82,0x55,0x80,0xa2,0x55,0x88,0x02,0x55,0x88,0xa9,0x55,0x88,0x95,0x55,0x88,0x95,0x56,0x08,0x25,0x58,0xaa,0x89,0x62,0xaa,0xa2,0x60,0x00,0x02,0x5a,0xaa,0xa9}; |
// 0 -----##----- |
// 1 ----# #---- |
// 2 ---# #--- |
// 3 --# #-- |
// 4 --### ###-- |
// 5 ----# #---- |
// 6 ----# #---- |
// 7 ############ |
// 8 |
// 9 |
// 10 ############ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr183[] PROGMEM = {0x55,0x41,0x55,0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x50,0x28,0x05,0x55,0x28,0x55,0x55,0x28,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 -----##----- |
// 2 ----# #---- |
// 3 ---# #--- |
// 4 --# #-- |
// 5 --### ###-- |
// 6 ----# #---- |
// 7 ############ |
// 8 |
// 9 |
// 10 ############ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr184[] PROGMEM = {0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x50,0x28,0x05,0x55,0x28,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 -----##----- |
// 4 ----# #---- |
// 5 ---# #--- |
// 6 --# #-- |
// 7 ############ |
// 8 |
// 9 |
// 10 ############ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr185[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 -----##----- |
// 5 ----# #---- |
// 6 ---# #--- |
// 7 ############ |
// 8 |
// 9 |
// 10 ############ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr186[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x54,0xaa,0x15,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ############ |
// 8 |
// 9 |
// 10 ############ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr187[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ############ |
// 8 |
// 9 |
// 10 ############ |
// 11 ---# #--- |
// 12 ----# #---- |
// 13 -----##----- |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr188[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ############ |
// 8 |
// 9 |
// 10 ############ |
// 11 --# #-- |
// 12 ---# #--- |
// 13 ----# #---- |
// 14 -----##----- |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr189[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ############ |
// 8 |
// 9 |
// 10 ############ |
// 11 ----# #---- |
// 12 --### ###-- |
// 13 --# #-- |
// 14 ---# #--- |
// 15 ----# #---- |
// 16 -----##----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr190[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x28,0x55,0x50,0x28,0x05,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ############ |
// 8 |
// 9 |
// 10 ############ |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 --### ###-- |
// 14 --# #-- |
// 15 ---# #--- |
// 16 ----# #---- |
// 17 -----##----- |
// 000000000011 |
// 012345678901 |
const char chr191[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x28,0x55,0x55,0x28,0x55,0x50,0x28,0x05,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55}; |
// 0 |
// 1 |
// 2 |
// 3 |
// 4 |
// 5 |
// 6 |
// 7 |
// 8 |
// 9 |
// 10 |
// 11 |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr192[] PROGMEM = {0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 |
// 1 |
// 2 |
// 3 |
// 4 |
// 5 |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr193[] PROGMEM = {0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ############ |
// 8 |
// 9 |
// 10 |
// 11 |
// 12 |
// 13 |
// 14 |
// 15 |
// 16 |
// 17 |
// 000000000011 |
// 012345678901 |
const char chr194[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}; |
// 0 |
// 1 |
// 2 |
// 3 |
// 4 |
// 5 |
// 6 |
// 7 |
// 8 |
// 9 |
// 10 ############ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr195[] PROGMEM = {0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 |
// 13 |
// 14 |
// 15 |
// 16 |
// 17 |
// 000000000011 |
// 012345678901 |
const char chr196[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 |
// 7 |
// 8 |
// 9 |
// 10 |
// 11 |
// 12 |
// 13 |
// 14 |
// 15 |
// 16 |
// 17 |
// 000000000011 |
// 012345678901 |
const char chr197[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}; |
// 0 ------------ |
// 1 -##########- |
// 2 -# #- |
// 3 -# ## ## #- |
// 4 -# # # # #- |
// 5 -# ## # #- |
// 6 -# # # #- |
// 7 -# # ## #- |
// 8 -# #- |
// 9 ##### ##### |
// 10 # # |
// 11 # ######## # |
// 12 # # # # # # |
// 13 # # # # # # |
// 14 # # # # # # |
// 15 # ###### # |
// 16 # # |
// 17 ############ |
// 000000000011 |
// 012345678901 |
const char chr198[] PROGMEM = {0x55,0x55,0x55,0x40,0x00,0x01,0x4a,0xaa,0xa1,0x48,0x28,0x21,0x48,0x88,0xa1,0x48,0x28,0xa1,0x48,0xa8,0xa1,0x48,0xa8,0x21,0x4a,0xaa,0xa1,0x00,0x28,0x00,0x2a,0xaa,0xa8,0x20,0x00,0x08,0x22,0x22,0x28,0x28,0x88,0x88,0x22,0x22,0x28,0x28,0x00,0x28,0x2a,0xaa,0xa8,0x00,0x00,0x00}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 -- - |
// 5 -- ------- - |
// 6 -- ------- - |
// 7 -- ------- - |
// 8 -- ------- - |
// 9 -- ------- - |
// 10 -- - |
// 11 -- ------- - |
// 12 -- ------- - |
// 13 -- ------- - |
// 14 -- ------- - |
// 15 -- ------- - |
// 16 -- - |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr199[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5a,0xaa,0xa9,0x59,0x55,0x59,0x59,0x55,0x59,0x59,0x55,0x59,0x59,0x55,0x59,0x59,0x55,0x59,0x5a,0xaa,0xa9,0x59,0x55,0x59,0x59,0x55,0x59,0x59,0x55,0x59,0x59,0x55,0x59,0x59,0x55,0x59,0x5a,0xaa,0xa9,0x55,0x55,0x55}; |
// 0 ------##---- |
// 1 -----# #--- |
// 2 ----# #-- |
// 3 ----# #- |
// 4 -----# # |
// 5 ------# # |
// 6 -------# |
// 7 --------## - |
// 8 ----------# |
// 9 --------#- |
// 10 ------#- -- |
// 11 ----#- # #-- |
// 12 ---# # ## # |
// 13 ---# ## ##-- |
// 14 ----# ## #- |
// 15 -----# ##--- |
// 16 ------# #-- |
// 17 -------##--- |
// 000000000011 |
// 012345678901 |
const char chr200[] PROGMEM = {0x55,0x50,0x55,0x55,0x4a,0x15,0x55,0x2a,0x85,0x55,0x2a,0xa1,0x55,0x4a,0xa8,0x55,0x52,0xa8,0x55,0x54,0xaa,0x55,0x55,0x09,0x55,0x55,0x52,0x55,0x55,0x1a,0x55,0x51,0x96,0x55,0x18,0x85,0x54,0x88,0x28,0x54,0x82,0x05,0x55,0x20,0xa1,0x55,0x48,0x15,0x55,0x52,0x85,0x55,0x54,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 -#---------- |
// 6 # #--------- |
// 7 #-------- |
// 8 #--------- |
// 9 - ##------- |
// 10 # #------ |
// 11 -# #----- |
// 12 -# #---- |
// 13 --# #--- |
// 14 ---# #--- |
// 15 ----# #---- |
// 16 -----##----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr201[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x45,0x55,0x55,0x21,0x55,0x55,0xa8,0x55,0x55,0xa1,0x55,0x55,0x98,0x15,0x55,0x2a,0x85,0x55,0x4a,0xa1,0x55,0x4a,0xa8,0x55,0x52,0xaa,0x15,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55}; |
// 0 ---# #-- |
// 1 --# ##### #- |
// 2 -# ## ## # |
// 3 - ## ### ## |
// 4 - # ## ## # |
// 5 - # # # # |
// 6 - # ## ## # |
// 7 - ## # # ## |
// 8 -# ### ### # |
// 9 --# ## ## #- |
// 10 ---#-# #-#-- |
// 11 -----# #---- |
// 12 -----# #---- |
// 13 -----# #---- |
// 14 -----# #---- |
// 15 -----# #---- |
// 16 ----# #--- |
// 17 ---# #-- |
// 000000000011 |
// 012345678901 |
const char chr202[] PROGMEM = {0x54,0xaa,0x85,0x52,0x00,0x21,0x48,0x2a,0x08,0x60,0x80,0x82,0x62,0x08,0x22,0x62,0x2a,0x22,0x62,0x08,0x22,0x60,0x88,0x82,0x48,0x08,0x08,0x52,0x08,0x21,0x54,0x48,0x45,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x2a,0x15,0x54,0xaa,0x85}; |
// 0 ------------ |
// 1 ###--------- |
// 2 # #--------- |
// 3 # ###------- |
// 4 # # #------- |
// 5 # ##------- |
// 6 # # #------- |
// 7 #########--- |
// 8 --# #--- |
// 9 --# # # #--- |
// 10 --# # # #--- |
// 11 --########-- |
// 12 -------# #-- |
// 13 -------# ### |
// 14 -------# # |
// 15 -------# # # |
// 16 -------# # # |
// 17 -------##### |
// 000000000011 |
// 012345678901 |
const char chr203[] PROGMEM = {0x55,0x55,0x55,0x01,0x55,0x55,0x21,0x55,0x55,0x20,0x15,0x55,0x22,0x15,0x55,0x28,0x15,0x55,0x22,0x15,0x55,0x00,0x00,0x15,0x52,0xaa,0x15,0x52,0x22,0x15,0x52,0x22,0x15,0x50,0x00,0x05,0x55,0x54,0x85,0x55,0x54,0x80,0x55,0x54,0xa8,0x55,0x54,0x88,0x55,0x54,0x88,0x55,0x54,0x00}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 #########--- |
// 13 # # # #--- |
// 14 # # # #--- |
// 15 # ## ## #--- |
// 16 # ## ## #--- |
// 17 #########--- |
// 000000000011 |
// 012345678901 |
const char chr204[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x15,0x22,0x8a,0x15,0x28,0xa2,0x15,0x20,0x82,0x15,0x20,0x82,0x15,0x00,0x00,0x15}; |
// 0 ----####---- |
// 1 ----# #---- |
// 2 ----# #---- |
// 3 ----# #---- |
// 4 ----# #---- |
// 5 ----# #---- |
// 6 ----# #---- |
// 7 ----# #---- |
// 8 ----# #---- |
// 9 ----# #---- |
// 10 ----# #---- |
// 11 ##### ##### |
// 12 # # |
// 13 ## ## |
// 14 -## ##- |
// 15 --## ##-- |
// 16 ---## ##--- |
// 17 ----####---- |
// 000000000011 |
// 012345678901 |
const char chr205[] PROGMEM = {0x55,0x00,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x00,0x28,0x00,0x2a,0xaa,0xa8,0x0a,0xaa,0xa0,0x42,0xaa,0x81,0x50,0xaa,0x05,0x54,0x28,0x15,0x55,0x00,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ############ |
// 8 # # |
// 9 # # |
// 10 ############ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr206[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ----####---- |
// 1 ---## ##--- |
// 2 --## ##-- |
// 3 -## ##- |
// 4 ## ## |
// 5 # # |
// 6 ##### ##### |
// 7 ----# #---- |
// 8 ----# #---- |
// 9 ----# #---- |
// 10 ----# #---- |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 ----# #---- |
// 14 ----# #---- |
// 15 ----# #---- |
// 16 ----# #---- |
// 17 ----####---- |
// 000000000011 |
// 012345678901 |
const char chr207[] PROGMEM = {0x55,0x00,0x55,0x54,0x28,0x15,0x50,0xaa,0x05,0x42,0xaa,0x81,0x0a,0xaa,0xa0,0x2a,0xaa,0xa8,0x00,0x28,0x00,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x00,0x55}; |
// 0 ------------ |
// 1 ---####----- |
// 2 --# #---- |
// 3 -# #### #--- |
// 4 -# #--# #--- |
// 5 -# #--# #--- |
// 6 -# #### #--- |
// 7 --# #---- |
// 8 ---####----- |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr208[] PROGMEM = {0x55,0x55,0x55,0x54,0x01,0x55,0x52,0xa8,0x55,0x48,0x02,0x15,0x48,0x52,0x15,0x48,0x52,0x15,0x48,0x02,0x15,0x52,0xa8,0x55,0x54,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ---##--#--#- |
// 1 --# ## ## # |
// 2 -# ## # # # |
// 3 -# ## # # # |
// 4 -# ## # # # |
// 5 --# ## ## # |
// 6 ---##--#--#- |
// 7 -----###---- |
// 8 ----# #--- |
// 9 ---# # # #-- |
// 10 --# ## ## #- |
// 11 -# #-# ### # |
// 12 -# #-# # # |
// 13 -# #--#### # |
// 14 --# #---# #- |
// 15 ---# ### #-- |
// 16 ----# #--- |
// 17 -----###---- |
// 000000000011 |
// 012345678901 |
const char chr209[] PROGMEM = {0x54,0x14,0x51,0x52,0x82,0x08,0x48,0x22,0x88,0x48,0x22,0x28,0x48,0x22,0x28,0x52,0x82,0x08,0x54,0x14,0x51,0x55,0x40,0x55,0x55,0x2a,0x15,0x54,0x88,0x85,0x52,0x08,0x21,0x48,0x48,0x08,0x48,0x4a,0x88,0x48,0x50,0x08,0x52,0x15,0x21,0x54,0x80,0x85,0x55,0x2a,0x15,0x55,0x40,0x55}; |
// 0 -###-#--#-#- |
// 1 # # ## # # |
// 2 # ### ## # # |
// 3 # ## #-# #- |
// 4 # #-# ### #- |
// 5 # #-# # #- |
// 6 -#---###-#-- |
// 7 -----###---- |
// 8 ----# #--- |
// 9 ---# # # #-- |
// 10 --# ## ## #- |
// 11 -# #-# ### # |
// 12 -# #-# # # |
// 13 -# #--#### # |
// 14 --# #---# #- |
// 15 ---# ### #-- |
// 16 ----# #--- |
// 17 -----###---- |
// 000000000011 |
// 012345678901 |
const char chr210[] PROGMEM = {0x40,0x45,0x11,0x2a,0x20,0x88,0x20,0x20,0x88,0x28,0x21,0x21,0x21,0x20,0x21,0x21,0x2a,0x21,0x45,0x40,0x45,0x55,0x40,0x55,0x55,0x2a,0x15,0x54,0x88,0x85,0x52,0x08,0x21,0x48,0x48,0x08,0x48,0x4a,0x88,0x48,0x50,0x08,0x52,0x15,0x21,0x54,0x80,0x85,0x55,0x2a,0x15,0x55,0x40,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 --##----##-- |
// 4 -# #--# #- |
// 5 -# #-# #- |
// 6 -# ### #- |
// 7 -# ## #- |
// 8 ## # # ## |
// 9 # # # # |
// 10 ## ## ## |
// 11 -# ### #- |
// 12 -# #-# #- |
// 13 -# #--# #- |
// 14 --##----##-- |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr211[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x55,0x05,0x4a,0x14,0xa1,0x4a,0x84,0xa1,0x4a,0x80,0xa1,0x4a,0xa0,0xa1,0x0a,0x28,0xa0,0x8a,0x28,0xa2,0x0a,0x0a,0xa0,0x4a,0x02,0xa1,0x4a,0x12,0xa1,0x4a,0x14,0xa1,0x50,0x55,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ----####---- |
// 4 ---# #--- |
// 5 --# #-- |
// 6 --# ### #-- |
// 7 --# #------ |
// 8 ### #### |
// 9 # # |
// 10 ####### ### |
// 11 --# ### #-- |
// 12 --# #-- |
// 13 --## ##-- |
// 14 ----#####--- |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr212[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x52,0x80,0x85,0x52,0x85,0x55,0x02,0xaa,0x00,0xa8,0xaa,0x8a,0x00,0x02,0x80,0x52,0x02,0x85,0x52,0xaa,0x85,0x50,0xaa,0x05,0x55,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ---##------- |
// 4 --# #------ |
// 5 --# #------ |
// 6 --# #------ |
// 7 --# #------ |
// 8 ### ####### |
// 9 # # |
// 10 ### ####### |
// 11 --# ####--- |
// 12 --# #-- |
// 13 --# #-- |
// 14 ---######--- |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr213[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x15,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x52,0x85,0x55,0x02,0x80,0x00,0xa2,0x8a,0xaa,0x02,0x80,0x00,0x52,0x80,0x15,0x52,0xaa,0x85,0x52,0xaa,0x85,0x54,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ---######--- |
// 4 --# #-- |
// 5 -# #- |
// 6 -# ## #- |
// 7 -# #--# #- |
// 8 ## #--# ## |
// 9 #--# |
// 10 ## #--# ## |
// 11 -# ## #- |
// 12 -# #- |
// 13 --# #-- |
// 14 ---######--- |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr214[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x4a,0x82,0xa1,0x4a,0x14,0xa1,0x0a,0x14,0xa0,0xaa,0x14,0xaa,0x0a,0x14,0xa0,0x4a,0x82,0xa1,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 -----#------ |
// 7 ----# #----- |
// 8 ###-# #-#### |
// 9 ## ## |
// 10 ###-# #-#### |
// 11 ----# #----- |
// 12 -----#------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr215[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x45,0x55,0x55,0x21,0x55,0x01,0x21,0x00,0xa8,0x20,0xaa,0x01,0x21,0x00,0x55,0x21,0x55,0x55,0x45,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ############ |
// 9 |
// 10 ############ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr216[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 --------#--- |
// 6 -------# #-- |
// 7 -####### #- |
// 8 # # |
// 9 # # |
// 10 -####### #- |
// 11 -------# #-- |
// 12 --------#--- |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr217[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x15,0x55,0x54,0x85,0x40,0x00,0xa1,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0xa1,0x55,0x54,0x85,0x55,0x55,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 -----######- |
// 4 ----# # |
// 5 -----# # |
// 6 ------# # |
// 7 -----# # |
// 8 ----# # # |
// 9 ---# #-# # |
// 10 --# #---#- |
// 11 -# #------ |
// 12 --# #------- |
// 13 ---#-------- |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr218[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x01,0x55,0x2a,0xa8,0x55,0x4a,0xa8,0x55,0x52,0xa8,0x55,0x4a,0xa8,0x55,0x2a,0x28,0x54,0xa8,0x48,0x52,0xa1,0x51,0x4a,0x85,0x55,0x52,0x15,0x55,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 -----##----- |
// 4 ----# #---- |
// 5 ---# #--- |
// 6 --# #-- |
// 7 ---## ##--- |
// 8 ----# #---- |
// 9 ----# #---- |
// 10 ----# #---- |
// 11 ----# #---- |
// 12 ----# #---- |
// 13 ----# #---- |
// 14 -----##----- |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr219[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x54,0x28,0x15,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 -######----- |
// 4 # #---- |
// 5 # #----- |
// 6 # #------ |
// 7 # #----- |
// 8 # # #---- |
// 9 # #-# #--- |
// 10 -#---# #-- |
// 11 ------# #- |
// 12 -------# #-- |
// 13 --------#--- |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr220[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x01,0x55,0x2a,0xa8,0x55,0x2a,0xa1,0x55,0x2a,0x85,0x55,0x2a,0xa1,0x55,0x28,0xa8,0x55,0x21,0x2a,0x15,0x45,0x4a,0x85,0x55,0x52,0xa1,0x55,0x54,0x85,0x55,0x55,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ---#-------- |
// 6 --# #------- |
// 7 -# #######- |
// 8 # # |
// 9 # # |
// 10 -# #######- |
// 11 --# #------- |
// 12 ---#-------- |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr221[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x55,0x55,0x52,0x15,0x55,0x4a,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x4a,0x00,0x01,0x52,0x15,0x55,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 --------#--- |
// 5 -------# #-- |
// 6 ------# #- |
// 7 -#---# #-- |
// 8 # #-# #--- |
// 9 # # #---- |
// 10 # #----- |
// 11 # #------ |
// 12 # #----- |
// 13 # #---- |
// 14 -######----- |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr222[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x15,0x55,0x54,0x85,0x55,0x52,0xa1,0x45,0x4a,0x85,0x21,0x2a,0x15,0x28,0xa8,0x55,0x2a,0xa1,0x55,0x2a,0x85,0x55,0x2a,0xa1,0x55,0x2a,0xa8,0x55,0x40,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 -----##----- |
// 4 ----# #---- |
// 5 ----# #---- |
// 6 ----# #---- |
// 7 ----# #---- |
// 8 ----# #---- |
// 9 ----# #---- |
// 10 ---## ##--- |
// 11 --# #-- |
// 12 ---# #--- |
// 13 ----# #---- |
// 14 -----##----- |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr223[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x55,0x28,0x55,0x54,0x28,0x15,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ---#-------- |
// 5 --# #------- |
// 6 -# #------ |
// 7 --# #---#- |
// 8 ---# #-# # |
// 9 ----# # # |
// 10 -----# # |
// 11 ------# # |
// 12 -----# # |
// 13 ----# # |
// 14 -----######- |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr224[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x55,0x55,0x52,0x15,0x55,0x4a,0x85,0x55,0x52,0xa1,0x51,0x54,0xa8,0x48,0x55,0x2a,0x28,0x55,0x4a,0xa8,0x55,0x52,0xa8,0x55,0x4a,0xa8,0x55,0x2a,0xa8,0x55,0x40,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 -##########- |
// 2 # # |
// 3 # # |
// 4 -##########- |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr225[] PROGMEM = {0x55,0x55,0x55,0x40,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 -##########- |
// 5 # # |
// 6 # # |
// 7 -##########- |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr226[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 -##########- |
// 8 # # |
// 9 # # |
// 10 -##########- |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr227[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 -##########- |
// 11 # # |
// 12 # # |
// 13 -##########- |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr228[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 -##########- |
// 14 # # |
// 15 # # |
// 16 -##########- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr229[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x40,0x00,0x01,0x55,0x55,0x55}; |
// 0 ----##--#-#- |
// 1 ---# ## # # |
// 2 ---# # # # # |
// 3 ---# ## # |
// 4 ---# #-# # # |
// 5 -#-# #-# # # |
// 6 # #-#---#-#- |
// 7 #-------- |
// 8 #--------- |
// 9 - ##------- |
// 10 # #------ |
// 11 -# #----- |
// 12 -# #---- |
// 13 --# #--- |
// 14 ---# #--- |
// 15 ----# #---- |
// 16 -----##----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr230[] PROGMEM = {0x55,0x05,0x11,0x54,0xa0,0x88,0x54,0x88,0x88,0x54,0xa0,0xa8,0x54,0x84,0x88,0x44,0x84,0x88,0x21,0x15,0x11,0xa8,0x55,0x55,0xa1,0x55,0x55,0x98,0x15,0x55,0x2a,0x85,0x55,0x4a,0xa1,0x55,0x4a,0xa8,0x55,0x52,0xaa,0x15,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55}; |
// 0 ---------##- |
// 1 --------# # |
// 2 -------# ##- |
// 3 -------# #-- |
// 4 -------# ##- |
// 5 -#------# # |
// 6 # #-----###- |
// 7 #---# # # |
// 8 #----# # # |
// 9 - ##--# # |
// 10 # #-# # # |
// 11 -# ## # # |
// 12 -# ##-#- |
// 13 --# #--- |
// 14 ---# #--- |
// 15 ----# #---- |
// 16 -----##----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr231[] PROGMEM = {0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x54,0x81,0x55,0x54,0x85,0x55,0x54,0x81,0x45,0x55,0x28,0x21,0x55,0x01,0xa8,0x54,0x88,0xa1,0x54,0x88,0x98,0x14,0xa8,0x2a,0x84,0x88,0x4a,0xa0,0x88,0x4a,0xa8,0x11,0x52,0xaa,0x15,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ############ |
// 8 # # |
// 9 # # |
// 10 ## ## |
// 11 --# #-- |
// 12 ---# #--- |
// 13 ----# #---- |
// 14 -----##----- |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr232[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x0a,0xaa,0xa0,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ############ |
// 8 # # |
// 9 # # |
// 10 ##### ##### |
// 11 ----# #---- |
// 12 -#### ####- |
// 13 # # |
// 14 -# #- |
// 15 --# #-- |
// 16 ---# #--- |
// 17 ----# #---- |
// 000000000011 |
// 012345678901 |
const char chr233[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x00,0x28,0x00,0x55,0x28,0x55,0x40,0x28,0x01,0x2a,0xaa,0xa8,0x4a,0xaa,0xa1,0x52,0xaa,0x85,0x54,0xaa,0x15,0x55,0x28,0x55}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 -----##----- |
// 4 ----# #---- |
// 5 ---# #--- |
// 6 --# #-- |
// 7 ## ## |
// 8 # # |
// 9 # # |
// 10 ############ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr234[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x0a,0xaa,0xa0,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ----# #---- |
// 1 ---# #--- |
// 2 --# #-- |
// 3 -# #- |
// 4 # # |
// 5 -#### ####- |
// 6 ----# #---- |
// 7 ##### ##### |
// 8 # # |
// 9 # # |
// 10 ############ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ------------ |
// 15 ------------ |
// 16 ------------ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr235[] PROGMEM = {0x55,0x28,0x55,0x54,0xaa,0x15,0x52,0xaa,0x85,0x4a,0xaa,0xa1,0x2a,0xaa,0xa8,0x40,0x28,0x01,0x55,0x28,0x55,0x00,0x28,0x00,0x2a,0xaa,0xa8,0x2a,0xaa,0xa8,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 -########### |
// 2 # |
// 3 # ######## # |
// 4 # # #--# # # |
// 5 # # #-# # # |
// 6 # # ## # # |
// 7 # # # # # |
// 8 # # # # |
// 9 # # # # |
// 10 # # # # # |
// 11 # # ## # # |
// 12 # # #-# # # |
// 13 # # #--# # # |
// 14 # ######## # |
// 15 # |
// 16 -########### |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr236[] PROGMEM = {0x55,0x55,0x55,0x40,0x00,0x00,0x2a,0xaa,0xaa,0x20,0x00,0x08,0x22,0x14,0x88,0x22,0x12,0x88,0x22,0x0a,0x88,0x22,0x2a,0x88,0x22,0xaa,0x88,0x22,0xaa,0x88,0x22,0x2a,0x88,0x22,0x0a,0x88,0x22,0x12,0x88,0x22,0x14,0x88,0x20,0x00,0x08,0x2a,0xaa,0xaa,0x40,0x00,0x00,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ----------## |
// 2 ---------# |
// 3 ---------# # |
// 4 ---------# # |
// 5 ---------# # |
// 6 ---------# # |
// 7 ---------# # |
// 8 ---------# # |
// 9 ---------# # |
// 10 ---------# # |
// 11 ---------# # |
// 12 ---------# # |
// 13 ---------# # |
// 14 ---------# # |
// 15 ---------# |
// 16 ----------## |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr237[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x50,0x55,0x55,0x4a,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x48,0x55,0x55,0x4a,0x55,0x55,0x50,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ############ |
// 2 |
// 3 ############ |
// 4 |
// 5 |
// 6 |
// 7 |
// 8 |
// 9 |
// 10 |
// 11 |
// 12 |
// 13 |
// 14 ############ |
// 15 |
// 16 ############ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr238[] PROGMEM = {0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,0x00,0x00,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ############ |
// 2 |
// 3 ############ |
// 4 #-- |
// 5 #-- |
// 6 #-- |
// 7 #-- |
// 8 #-- |
// 9 #-- |
// 10 #-- |
// 11 #-- |
// 12 #-- |
// 13 #-- |
// 14 ############ |
// 15 |
// 16 ############ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr239[] PROGMEM = {0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0x00,0x00,0x00,0xaa,0xaa,0x85,0xaa,0xaa,0x85,0xaa,0xaa,0x85,0xaa,0xaa,0x85,0xaa,0xaa,0x85,0xaa,0xaa,0x85,0xaa,0xaa,0x85,0xaa,0xaa,0x85,0xaa,0xaa,0x85,0xaa,0xaa,0x85,0x00,0x00,0x00,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ############ |
// 2 |
// 3 ############ |
// 4 #----- |
// 5 #----- |
// 6 #----- |
// 7 #----- |
// 8 #----- |
// 9 #----- |
// 10 #----- |
// 11 #----- |
// 12 #----- |
// 13 #----- |
// 14 ############ |
// 15 |
// 16 ############ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr240[] PROGMEM = {0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0x00,0x00,0x00,0xaa,0xa1,0x55,0xaa,0xa1,0x55,0xaa,0xa1,0x55,0xaa,0xa1,0x55,0xaa,0xa1,0x55,0xaa,0xa1,0x55,0xaa,0xa1,0x55,0xaa,0xa1,0x55,0xaa,0xa1,0x55,0xaa,0xa1,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ############ |
// 2 |
// 3 ############ |
// 4 #-------- |
// 5 #-------- |
// 6 #-------- |
// 7 #-------- |
// 8 #-------- |
// 9 #-------- |
// 10 #-------- |
// 11 #-------- |
// 12 #-------- |
// 13 #-------- |
// 14 ############ |
// 15 |
// 16 ############ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr241[] PROGMEM = {0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0x00,0x00,0x00,0xa8,0x55,0x55,0xa8,0x55,0x55,0xa8,0x55,0x55,0xa8,0x55,0x55,0xa8,0x55,0x55,0xa8,0x55,0x55,0xa8,0x55,0x55,0xa8,0x55,0x55,0xa8,0x55,0x55,0xa8,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ############ |
// 2 |
// 3 ############ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 ------------ |
// 8 ------------ |
// 9 ------------ |
// 10 ------------ |
// 11 ------------ |
// 12 ------------ |
// 13 ------------ |
// 14 ############ |
// 15 |
// 16 ############ |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr242[] PROGMEM = {0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ##---------- |
// 2 #--------- |
// 3 # #--------- |
// 4 # #--------- |
// 5 # #--------- |
// 6 # #--------- |
// 7 # #--------- |
// 8 # #--------- |
// 9 # #--------- |
// 10 # #--------- |
// 11 # #--------- |
// 12 # #--------- |
// 13 # #--------- |
// 14 # #--------- |
// 15 #--------- |
// 16 ##---------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr243[] PROGMEM = {0x55,0x55,0x55,0x05,0x55,0x55,0xa1,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0x21,0x55,0x55,0xa1,0x55,0x55,0x05,0x55,0x55,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ###########- |
// 2 # |
// 3 # ######## # |
// 4 # # #--# # # |
// 5 # # #-# # # |
// 6 # # ## # # |
// 7 # # # # # |
// 8 # # # # |
// 9 # # # # |
// 10 # # # # # |
// 11 # # ## # # |
// 12 # # #-# # # |
// 13 # # #--# # # |
// 14 # ######## # |
// 15 # |
// 16 ###########- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr244[] PROGMEM = {0x55,0x55,0x55,0x00,0x00,0x01,0xaa,0xaa,0xa8,0x20,0x00,0x08,0x22,0x14,0x88,0x22,0x84,0x88,0x22,0xa0,0x88,0x22,0xa8,0x88,0x22,0xaa,0x88,0x22,0xaa,0x88,0x22,0xa8,0x88,0x22,0xa0,0x88,0x22,0x84,0x88,0x22,0x14,0x88,0x20,0x00,0x08,0xaa,0xaa,0xa8,0x00,0x00,0x01,0x55,0x55,0x55}; |
// 0 -----------# |
// 1 ----------# |
// 2 ------##--# |
// 3 -----# #-## |
// 4 -----# ## |
// 5 ------### |
// 6 -------# ## |
// 7 ----### #-- |
// 8 ---# # #-- |
// 9 ---# # #-- |
// 10 ----### #-- |
// 11 -------# ## |
// 12 ------### |
// 13 -----# ## |
// 14 -----# #-## |
// 15 ------##--# |
// 16 ----------# |
// 17 ----------## |
// 000000000011 |
// 012345678901 |
const char chr245[] PROGMEM = {0x55,0x55,0x54,0x55,0x55,0x52,0x55,0x50,0x52,0x55,0x4a,0x10,0x55,0x4a,0x0a,0x55,0x50,0x2a,0x55,0x54,0xa0,0x55,0x02,0x85,0x54,0xa2,0x85,0x54,0xa2,0x85,0x55,0x02,0x85,0x55,0x54,0xa0,0x55,0x50,0x2a,0x55,0x4a,0x0a,0x55,0x4a,0x10,0x55,0x50,0x52,0x55,0x55,0x52,0x55,0x55,0x50}; |
// 0 #----------- |
// 1 #---------- |
// 2 #--##------ |
// 3 ##-# #----- |
// 4 ## #----- |
// 5 ###------ |
// 6 ## #------- |
// 7 --# ###---- |
// 8 --# # #--- |
// 9 --# # #--- |
// 10 --# ###---- |
// 11 ## #------- |
// 12 ###------ |
// 13 ## #----- |
// 14 ##-# #----- |
// 15 #--##------ |
// 16 #---------- |
// 17 #----------- |
// 000000000011 |
// 012345678901 |
const char chr246[] PROGMEM = {0x15,0x55,0x55,0x85,0x55,0x55,0x85,0x05,0x55,0x04,0xa1,0x55,0xa0,0xa1,0x55,0xa8,0x05,0x55,0x0a,0x15,0x55,0x52,0x80,0x55,0x52,0x8a,0x15,0x52,0x8a,0x15,0x52,0x80,0x55,0x0a,0x15,0x55,0xa8,0x05,0x55,0xa0,0xa1,0x55,0x04,0xa1,0x55,0x85,0x05,0x55,0x85,0x55,0x55,0x15,0x55,0x55}; |
// 0 ------------ |
// 1 ----------## |
// 2 --------## |
// 3 -------# |
// 4 ------# ## |
// 5 -----# ##-# |
// 6 -----# #--# |
// 7 ----# #---# |
// 8 ----# #---# |
// 9 ----# #---# |
// 10 ----# #---# |
// 11 -----# #--# |
// 12 -----# ##-# |
// 13 ------# ## |
// 14 -------# |
// 15 --------## |
// 16 ----------## |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr247[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x50,0x55,0x55,0x0a,0x55,0x54,0xaa,0x55,0x52,0xa0,0x55,0x4a,0x04,0x55,0x4a,0x14,0x55,0x28,0x54,0x55,0x28,0x54,0x55,0x28,0x54,0x55,0x28,0x54,0x55,0x4a,0x14,0x55,0x4a,0x04,0x55,0x52,0xa0,0x55,0x54,0xaa,0x55,0x55,0x0a,0x55,0x55,0x50,0x55,0x55,0x55}; |
// 0 ------------ |
// 1 ##---------- |
// 2 ##-------- |
// 3 #------- |
// 4 #------ |
// 5 #----- |
// 6 #----- |
// 7 #---- |
// 8 #---- |
// 9 #---- |
// 10 #---- |
// 11 #----- |
// 12 #----- |
// 13 #------ |
// 14 #------- |
// 15 ##-------- |
// 16 ##---------- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr248[] PROGMEM = {0x55,0x55,0x55,0x05,0x55,0x55,0xa0,0x55,0x55,0xaa,0x15,0x55,0xaa,0x85,0x55,0xaa,0xa1,0x55,0xaa,0xa1,0x55,0xaa,0xa8,0x55,0xaa,0xa8,0x55,0xaa,0xa8,0x55,0xaa,0xa8,0x55,0xaa,0xa1,0x55,0xaa,0xa1,0x55,0xaa,0x85,0x55,0xaa,0x15,0x55,0xa0,0x55,0x55,0x05,0x55,0x55,0x55,0x55,0x55}; |
// 0 ---------##- |
// 1 --------# # |
// 2 -------# # |
// 3 ------# # # |
// 4 -##### ## # |
// 5 # #-# # |
// 6 # ## #--# # |
// 7 # ## #--# # |
// 8 # ## #--# # |
// 9 # ## #--# # |
// 10 # ## #--# # |
// 11 # #-# # |
// 12 -##### ## # |
// 13 ------# # # |
// 14 -------# # |
// 15 --------# # |
// 16 ---------##- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr249[] PROGMEM = {0x55,0x55,0x41,0x55,0x55,0x28,0x55,0x54,0xa8,0x55,0x52,0x88,0x40,0x0a,0x08,0x2a,0xa8,0x48,0x20,0xa1,0x48,0x20,0xa1,0x48,0x20,0xa1,0x48,0x20,0xa1,0x48,0x20,0xa1,0x48,0x2a,0xa8,0x48,0x40,0x0a,0x08,0x55,0x52,0x88,0x55,0x54,0xa8,0x55,0x55,0x28,0x55,0x55,0x41,0x55,0x55,0x55}; |
// 0 ------#----- |
// 1 ----- #---- |
// 2 ------ #--- |
// 3 ---##-# #--- |
// 4 --# ## #--- |
// 5 -#-# ## #-- |
// 6 # ## ## #-- |
// 7 # ## ## #-- |
// 8 -# ## ## #-- |
// 9 # ## ## #-- |
// 10 # ## ## #-- |
// 11 -#-# ## #-- |
// 12 --# ## #--- |
// 13 ---##-# #--- |
// 14 ------ #--- |
// 15 ----- #---- |
// 16 ------#----- |
// 17 ------------ |
// 000000000011 |
// 012345678901 |
const char chr250[] PROGMEM = {0x55,0x51,0x55,0x55,0x68,0x55,0x55,0x5a,0x15,0x54,0x12,0x15,0x52,0x82,0x15,0x44,0x82,0x85,0x20,0xa0,0x85,0x28,0x20,0x85,0x48,0x20,0x85,0x28,0x20,0x85,0x20,0xa0,0x85,0x44,0x82,0x85,0x52,0x82,0x15,0x54,0x12,0x15,0x55,0x5a,0x15,0x55,0x68,0x55,0x55,0x51,0x55,0x55,0x55,0x55}; |
// 0 -##########- |
// 1 # # |
// 2 -# ###### #- |
// 3 -# #----# #- |
// 4 -# #----# #- |
// 5 -# #----# #- |
// 6 --# #--# #-- |
// 7 ---# ## #--- |
// 8 ----# #---- |
// 9 ----# #---- |
// 10 ---# ## #--- |
// 11 --# #--# #-- |
// 12 -# #----# #- |
// 13 -# #----# #- |
// 14 -# #----# #- |
// 15 -# ###### #- |
// 16 # # |
// 17 -##########- |
// 000000000011 |
// 012345678901 |
const char chr251[] PROGMEM = {0x40,0x00,0x01,0x2a,0xaa,0xa8,0x48,0x00,0x21,0x48,0x55,0x21,0x48,0x55,0x21,0x48,0x55,0x21,0x52,0x14,0x85,0x54,0x82,0x15,0x55,0x28,0x55,0x55,0x28,0x55,0x54,0x82,0x15,0x52,0x14,0x85,0x48,0x55,0x21,0x48,0x55,0x21,0x48,0x55,0x21,0x48,0x00,0x21,0x2a,0xaa,0xa8,0x40,0x00,0x01}; |
// 0 ------------ |
// 1 --##-------- |
// 2 --# #------- |
// 3 --# #------ |
// 4 --# #----- |
// 5 --# #---- |
// 6 --# #--- |
// 7 --# #-- |
// 8 --# #- |
// 9 --# # |
// 10 --# #### |
// 11 --# ##-- |
// 12 --# ## #-- |
// 13 --#### ##- |
// 14 ------# #- |
// 15 ------# #- |
// 16 ------## ##- |
// 17 --------#--- |
// 000000000011 |
// 012345678901 |
const char chr252[] PROGMEM = {0x55,0x55,0x55,0x50,0x55,0x55,0x52,0x15,0x55,0x52,0x85,0x55,0x52,0xa1,0x55,0x52,0xa8,0x55,0x52,0xaa,0x15,0x52,0xaa,0x85,0x52,0xaa,0xa1,0x52,0xaa,0xa8,0x52,0xaa,0x00,0x52,0xaa,0x05,0x52,0x0a,0x85,0x50,0x0a,0x81,0x55,0x52,0xa1,0x55,0x52,0xa1,0x55,0x50,0x81,0x55,0x55,0x15}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 --##--#---#- |
// 8 -# ## #-# # |
// 9 # ## # # # |
// 10 # ## # # # # |
// 11 # ## # # # # |
// 12 # # ### # |
// 13 # ## # #-# # |
// 14 # ## # #-# # |
// 15 # ## # #-# # |
// 16 # ## # #-# # |
// 17 -#--#-#---#- |
// 000000000011 |
// 012345678901 |
const char chr253[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x51,0x51,0x4a,0x08,0x48,0x20,0x8a,0x28,0x20,0x88,0x88,0x20,0x88,0x88,0x2a,0x88,0x08,0x20,0x88,0x48,0x20,0x88,0x48,0x20,0x88,0x48,0x20,0x88,0x48,0x45,0x11,0x51}; |
// 0 ------------ |
// 1 ------------ |
// 2 ------------ |
// 3 ------------ |
// 4 ------------ |
// 5 ------------ |
// 6 ------------ |
// 7 -###--#---#- |
// 8 # ## #-# # |
// 9 # ## # # # |
// 10 # ## # # # # |
// 11 # ## # # # # |
// 12 # ## ### # |
// 13 # ##-# #-# # |
// 14 # #--# #-# # |
// 15 # #--# #-# # |
// 16 # #--# #-# # |
// 17 -#----#---#- |
// 000000000011 |
// 012345678901 |
const char chr254[] PROGMEM = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x51,0x51,0x2a,0x08,0x48,0x20,0x8a,0x28,0x20,0x88,0x88,0x20,0x88,0x88,0x2a,0x08,0x08,0x20,0x48,0x48,0x21,0x48,0x48,0x21,0x48,0x48,0x21,0x48,0x48,0x45,0x51,0x51}; |
// 0 |
// 1 |
// 2 |
// 3 |
// 4 |
// 5 |
// 6 |
// 7 |
// 8 |
// 9 |
// 10 |
// 11 |
// 12 |
// 13 |
// 14 |
// 15 |
// 16 |
// 17 |
// 000000000011 |
// 012345678901 |
const char chr255[] PROGMEM = {0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}; |
const char *chars[] PROGMEM = { chr0, chr1, chr2, chr3, chr4, chr5, chr6, chr7, chr8, chr9, chr10, chr11, chr12, chr13, chr14, chr15, chr16, chr17, chr18, chr19, chr20, chr21, chr22, chr23, chr24, chr25, chr26, chr27, chr28, chr29, chr30, chr31, chr32, chr33, chr34, chr35, chr36, chr37, chr38, chr39, chr40, chr41, chr42, chr43, chr44, chr45, chr46, chr47, chr48, chr49, chr50, chr51, chr52, chr53, chr54, chr55, chr56, chr57, chr58, chr59, chr60, chr61, chr62, chr63, chr64, chr65, chr66, chr67, chr68, chr69, chr70, chr71, chr72, chr73, chr74, chr75, chr76, chr77, chr78, chr79, chr80, chr81, chr82, chr83, chr84, chr85, chr86, chr87, chr88, chr89, chr90, chr91, chr92, chr93, chr94, chr95, chr96, chr97, chr98, chr99, chr100, chr101, chr102, chr103, chr104, chr105, chr106, chr107, chr108, chr109, chr110, chr111, chr112, chr113, chr114, chr115, chr116, chr117, chr118, chr119, chr120, chr121, chr122, chr123, chr124, chr125, chr126, chr127, chr128, chr129, chr130, chr131, chr132, chr133, chr134, chr135, chr136, chr137, chr138, chr139, chr140, chr141, chr142, chr143, chr144, chr145, chr146, chr147, chr148, chr149, chr150, chr151, chr152, chr153, chr154, chr155, chr156, chr157, chr158, chr159, chr160, chr161, chr162, chr163, chr164, chr165, chr166, chr167, chr168, chr169, chr170, chr171, chr172, chr173, chr174, chr175, chr176, chr177, chr178, chr179, chr180, chr181, chr182, chr183, chr184, chr185, chr186, chr187, chr188, chr189, chr190, chr191, chr192, chr193, chr194, chr195, chr196, chr197, chr198, chr199, chr200, chr201, chr202, chr203, chr204, chr205, chr206, chr207, chr208, chr209, chr210, chr211, chr212, chr213, chr214, chr215, chr216, chr217, chr218, chr219, chr220, chr221, chr222, chr223, chr224, chr225, chr226, chr227, chr228, chr229, chr230, chr231, chr232, chr233, chr234, chr235, chr236, chr237, chr238, chr239, chr240, chr241, chr242, chr243, chr244, chr245, chr246, chr247, chr248, chr249, chr250, chr251, chr252, chr253, chr254, chr255}; |
/** |
* put the above chars in the memory of the MAX7456 |
* TODO: read out character, compare and write only if different |
*/ |
void learn_all_chars_pgm(void) { |
char *pointer; |
for (uint16_t c = 0; c < 256; c++) { |
LED3_ON |
// select character to write (CMAH) |
spi_send_byte(0x09, c); |
_delay_ms(1); |
pointer = (char*) pgm_read_word(&chars[c]); |
for (uint8_t i = 0; i < 54; i++) { |
// select 4pixel byte of char (CMAL) |
spi_send_byte(0x0A, i); |
_delay_ms(1); |
// write 4pixel byte of char (CMDI) |
spi_send_byte(0x0B, pgm_read_byte(pointer++)); |
_delay_ms(1); |
} |
// write to the NVM array from the shadow RAM (CMM) |
spi_send_byte(0x08, 0b10100000); |
LED3_OFF |
// according to maxim writing to nvram takes about 12ms, lets wait longer |
_delay_ms(50); |
} |
} |
#endif |
/C-OSD/trunk/C-OSD AGRESSiVA mod/characters.h |
---|
0,0 → 1,24 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
/** |
* put the above chars in the memory of the MAX7456 |
*/ |
void learn_all_chars_pgm(void); |
/C-OSD/trunk/C-OSD AGRESSiVA mod/config.c |
---|
0,0 → 1,369 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include <avr/io.h> |
#include <avr/eeprom.h> |
#include <avr/pgmspace.h> |
#include <avr/interrupt.h> |
#include <util/delay.h> |
#include "max7456_software_spi.h" |
#include "config.h" |
#include "main.h" |
#include "buttons.h" |
#include "usart1.h" |
uint8_t EEMEM ee_checkbyte1 = CHECKBYTE1; |
uint8_t EEMEM ee_checkbyte2 = CHECKBYTE2; |
uint8_t EEMEM ee_COSD_FLAGS_MODES = 0; |
uint8_t EEMEM ee_COSD_FLAGS_CONFIG = 0; |
uint8_t EEMEM ee_COSD_DISPLAYMODE = 0; |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
// video modes |
const char VM_PAL[] PROGMEM = "PAL "; |
const char VM_NTSC[] PROGMEM = "NTSC"; |
const displaymode_t * mode; |
#endif |
const char ee_message0[] PROGMEM = "Loading Data from EEPROM"; |
const char ee_message1[] PROGMEM = "No saved Data in EEPROM"; |
const char* ee_msg[] PROGMEM = {ee_message0, ee_message1}; |
/** |
* read data saved in eeprom, print out message if <verbose> is set |
*/ |
void get_eeprom(uint8_t verbose) { |
if (eeprom_read_byte(&ee_checkbyte1) == CHECKBYTE1 && eeprom_read_byte(&ee_checkbyte2) == CHECKBYTE2) { |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
if (verbose) write_ascii_string_pgm(2, 9, ee_msg[0]); // Loading data |
#endif |
COSD_FLAGS_MODES = eeprom_read_byte(&ee_COSD_FLAGS_MODES); |
COSD_FLAGS_CONFIG = eeprom_read_byte(&ee_COSD_FLAGS_CONFIG); |
COSD_DISPLAYMODE = eeprom_read_byte(&ee_COSD_DISPLAYMODE); |
//if (verbose) write_ndigit_number_u(23, 11, COSD_DISPLAYMODE, 2, 0); |
} else { |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
if (verbose) write_ascii_string_pgm(2, 9, ee_msg[1]); // Loading data |
#endif |
} |
} |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
/** |
* save data to eeprom |
*/ |
void save_eeprom() { |
eeprom_write_byte(&ee_checkbyte1, CHECKBYTE1); |
eeprom_write_byte(&ee_checkbyte2, CHECKBYTE2); |
eeprom_write_byte(&ee_COSD_FLAGS_MODES, COSD_FLAGS_MODES); |
eeprom_write_byte(&ee_COSD_FLAGS_CONFIG, COSD_FLAGS_CONFIG); |
eeprom_write_byte(&ee_COSD_DISPLAYMODE, COSD_DISPLAYMODE); |
} |
/** |
* auto config some stuff on startup, currently only battery cells |
* TODO: this is testing stuff, strings should go progmem and so on... |
*/ |
void init_cosd(uint8_t UBat) { |
clear(); |
write_ascii_string_pgm(2, 1, PSTR("C-OSD AGRESSiVA MOD")); // C-OSD Initialisation |
#if FCONLY |
write_ascii_string_pgm(2, 2, PSTR("FC only Mode")); // FC only mode |
#else |
write_ascii_string_pgm(2, 2, PSTR("NaviCtrl Mode")); // NaviCtrl Mode |
#endif |
write_ascii_string_pgm(2, 3, PSTR(BUILDDATE)); |
uint8_t cellnum = 0; |
if (CELL_NUM == -1) { |
write_ascii_string_pgm(2, 4, PSTR("Guessing Number of Cells")); // Guessing Number of Cells |
do { |
cellnum++; |
} while (UBat > ((cellnum * CELL_VOLT_MAX) + 23)); |
} else { |
cellnum = CELL_NUM; |
} |
min_voltage = cellnum * CELL_VOLT_MIN; |
max_voltage = cellnum * CELL_VOLT_MAX; |
write_ascii_string_pgm(2, 5, PSTR("Number of Cells:")); // Number of Cells |
write_ndigit_number_u(21, 5, cellnum, 1, 0); |
write_ascii_string_pgm(2, 6, PSTR("Warn Voltage :")); // Warn Voltage |
write_ndigit_number_s_10th(20, 6, min_voltage, 3, 0); |
write_ascii_string_pgm(2, 7, PSTR("Max Voltage :")); // Max Voltage |
write_ndigit_number_s_10th(20, 7, max_voltage, 3, 0); |
get_eeprom(1); |
//write_ascii_string_pgm(23, 2, vm[COSD_FLAGS & COSD_FLAG_NTSC]); |
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) { |
write_ascii_string_pgm(23, 2, VM_NTSC); |
} else { |
write_ascii_string_pgm(23, 2, VM_PAL); |
} |
// request version from board |
rxd_buffer_locked = 0; |
usart1_EnableTXD(); |
#if FCONLY |
//usart1_request_mk_data(0, 'v', 0); |
write_ascii_string_pgm(2, 11, PSTR("FC VERSION: ........")); |
usart1_puts_pgm(PSTR(REQUEST_FC_VERSION)); |
#else |
//usart1_request_mk_data(1, 'v', 0); |
usart1_puts_pgm(PSTR(REQUEST_NC_VERSION)); |
write_ascii_string_pgm(2, 11, PSTR("NC VERSION: ........")); |
#endif |
usart1_DisableTXD(); |
// wait for response |
while (rxd_buffer_locked == 0) { |
asm("nop"); |
} |
Decode64(); |
str_VersionInfo VersionInfo; |
VersionInfo = *((str_VersionInfo*) pRxData); |
write_ndigit_number_u(14, 11, VersionInfo.SWMajor, 3, 1); |
write_ndigit_number_u(18, 11, VersionInfo.SWMinor, 3, 1); |
write_ascii_char(22 + 11*30, 'a' + VersionInfo.SWPatch); |
// end version request |
#if FCONLY |
COSD_DISPLAYMODE %= (sizeof(fcdisplaymodes) / sizeof(displaymode_t)); |
mode = fcdisplaymodes; |
mode += COSD_DISPLAYMODE; |
osd_fcmode = (int(*)(void)) pgm_read_word(&mode->dfun); |
// re-request data ever 100ms from FC; |
//usart1_request_mk_data(0, 'd', 100); |
#else |
COSD_DISPLAYMODE %= (sizeof(ncdisplaymodes) / sizeof(displaymode_t)); |
mode = ncdisplaymodes; |
mode += COSD_DISPLAYMODE; |
osd_ncmode = (int(*)(void)) pgm_read_word(&mode->dfun); |
// re-request OSD Data from NC every 100ms |
//usart1_request_mk_data(1, 'o', 100); |
#endif |
_delay_ms(3000); |
clear(); |
// update flags to paint display again because of clear |
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN; |
} |
/* ########################################################################## |
* A simple config menu for the flags |
* ##########################################################################*/ |
/** |
* helper function for flag display |
*/ |
void onoff(uint8_t line, uint8_t onoff) { |
if (onoff) { |
write_ascii_string_pgm(23, line, PSTR("ON ")); |
} else { |
write_ascii_string_pgm(23, line, PSTR("OFF")); |
} |
} |
/** |
* helper function for menu updating |
*/ |
void config_menu_drawings(uint8_t chosen) { |
uint8_t line = 2; |
// clear prevoius _cursor_ |
//write_char_xy(3, line + ((chosen + 11) % 12), 0x00); |
for (uint8_t x = 2; x < 28; x++) { |
write_char_att_xy(x, line + ((chosen + 11) % 12), 0); |
write_char_att_xy(x, line + chosen, BLACKBG | INVERT); |
}; |
// draw current _cursor_ |
//write_char_xy(3, line + chosen, 0xD9); |
write_ascii_string_pgm(4, line, PSTR("Video Mode")); |
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) { |
write_ascii_string_pgm(23, line, VM_NTSC); |
} else { |
write_ascii_string_pgm(23, line, VM_PAL); |
} |
write_ascii_string_pgm(4, ++line, PSTR("Full HUD")); |
onoff(line, COSD_FLAGS_MODES & COSD_FLAG_HUD); |
write_ascii_string_pgm(4, ++line, PSTR("Art Horizon in HUD")); |
onoff(line, COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON); |
write_ascii_string_pgm(4, ++line, PSTR("Big Vario bar")); |
onoff(line, COSD_FLAGS_MODES & COSD_FLAG_BIGVARIO); |
write_ascii_string_pgm(4, ++line, PSTR("Statistics")); |
onoff(line, COSD_FLAGS_MODES & COSD_FLAG_STATS); |
write_ascii_string_pgm(4, ++line, PSTR("Current by FC")); |
onoff(line, COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT); |
write_ascii_string_pgm(4, ++line, PSTR("Voltage by C-Strom")); |
onoff(line, COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT); |
write_ascii_string_pgm(4, ++line, PSTR("Reset uptime")); |
write_ascii_string_pgm(4, ++line, PSTR("Display Mode")); |
write_ascii_string_pgm(18, line, (const char *) (pgm_read_word(&(mode->desc)))); |
write_ascii_string_pgm(4, ++line, PSTR("Height by")); |
if (COSD_FLAGS_CONFIG & COSD_FLAG_GPSHEIGHT) { |
write_ascii_string_pgm(20, line, PSTR(" GPS")); |
} else { |
write_ascii_string_pgm(20, line, PSTR("BARO")); |
} |
write_ascii_string_pgm(4, ++line, PSTR("Save config")); |
write_ascii_string_pgm(4, ++line, PSTR("EXIT")); |
} |
/** |
* some sort of clicking response in the menu |
*/ |
void config_menu_doclick(uint8_t chosen) { |
write_ascii_string_pgm(4, chosen + 2, PSTR("DONE ")); |
_delay_ms(500); |
config_menu_drawings(chosen); |
} |
/** |
* a simple config menu tryout |
*/ |
void config_menu(void) { |
// disable interrupts (makes the menu more smoothely) |
cli(); |
// clear screen |
clear(); |
uint8_t chosen = 0; |
uint8_t inmenu = 1; |
write_ascii_string_pgm(6, 1, PSTR("C-OSD Config Menu")); |
// wait a bit before doing stuff so user has chance to release button |
_delay_ms(250); |
config_menu_drawings(chosen); |
while (inmenu) { |
if (s2_pressed()) { |
chosen = (chosen + 1) % 12; |
config_menu_drawings(chosen); |
_delay_ms(500); |
} else if (s1_pressed()) { |
switch (chosen) { |
case 0: // NTSC or PAL |
COSD_FLAGS_CONFIG ^= COSD_FLAG_NTSC; |
// Setup Video Mode |
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) { |
// NTSC + enable display immediately (VM0) |
spi_send_byte(0x00, 0b00001000); |
bottom_line = 12; |
} else { |
// PAL + enable display immediately (VM0) |
spi_send_byte(0x00, 0b01001000); |
bottom_line = 14; |
} |
config_menu_drawings(chosen); |
break; |
case 1: // full HUD |
COSD_FLAGS_MODES ^= COSD_FLAG_HUD; |
config_menu_drawings(chosen); |
break; |
case 2: // art horizon |
COSD_FLAGS_MODES ^= COSD_FLAG_ARTHORIZON; |
config_menu_drawings(chosen); |
break; |
case 3: // big vario |
COSD_FLAGS_MODES ^= COSD_FLAG_BIGVARIO; |
config_menu_drawings(chosen); |
break; |
case 4: // statistics |
COSD_FLAGS_MODES ^= COSD_FLAG_STATS; |
config_menu_drawings(chosen); |
break; |
/*case 5: // warnings |
COSD_FLAGS_MODES ^= COSD_FLAG_WARNINGS; |
config_menu_drawings(chosen); |
break;*/ |
case 5: // current by fc |
COSD_FLAGS_MODES ^= COSD_FLAG_FCCURRENT; |
config_menu_drawings(chosen); |
break; |
case 6: // 2nd voltage by c-strom |
COSD_FLAGS_MODES ^= COSD_FLAG_STROMVOLT; |
config_menu_drawings(chosen); |
break; |
case 7: // reset uptime |
uptime = 0; |
config_menu_doclick(chosen); |
break; |
case 8: // change mode |
#if FCONLY |
COSD_DISPLAYMODE = (COSD_DISPLAYMODE + 1) % (sizeof(fcdisplaymodes) / sizeof(displaymode_t)); |
mode = fcdisplaymodes; |
mode += COSD_DISPLAYMODE; |
osd_fcmode = (int(*)(void)) pgm_read_word(&mode->dfun); |
#else |
COSD_DISPLAYMODE = (COSD_DISPLAYMODE + 1) % (sizeof(ncdisplaymodes) / sizeof(displaymode_t)); |
mode = ncdisplaymodes; |
mode += COSD_DISPLAYMODE; |
osd_ncmode = (int(*)(void)) pgm_read_word(&mode->dfun); |
#endif |
config_menu_drawings(chosen); |
break; |
case 9: // GPS or BARO height |
COSD_FLAGS_CONFIG ^= COSD_FLAG_GPSHEIGHT; |
config_menu_drawings(chosen); |
break; |
case 10: // save |
save_eeprom(); |
config_menu_doclick(chosen); |
break; |
case 11: // exit |
inmenu = 0; |
break; |
} |
_delay_ms(250); |
} |
} |
// clear screen up again |
clear(); |
// update flags to paint display again if needed |
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN; |
// enable interrupts again |
sei(); |
} |
#endif |
/C-OSD/trunk/C-OSD AGRESSiVA mod/config.h |
---|
0,0 → 1,45 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#define CHECKBYTE1 46 |
#define CHECKBYTE2 23 |
extern uint8_t COSD_FLAGS_MODES, COSD_FLAGS_CONFIG, COSD_FLAGS_RUNTIME, COSD_DISPLAYMODE; |
extern uint8_t min_voltage; |
extern uint8_t max_voltage; |
extern uint8_t bottom_line; |
extern volatile uint16_t uptime; |
/** |
* read data saved in eeprom, print out message if <verbose> is set |
*/ |
void init_cosd(uint8_t); |
/** |
* a simple config menu tryout |
*/ |
void config_menu(void); |
/** |
* read data saved in eeprom, print out message if <verbose> is set |
*/ |
void get_eeprom(uint8_t); |
/C-OSD/trunk/C-OSD AGRESSiVA mod/main.c |
---|
0,0 → 1,431 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* MOD By Eduardo R Lavratti - aKKa AGRESSiVA * |
* |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* Gregor "killagreg" Stobrawa for making the MK code readable * |
* Klaus "akku" Buettner for the hardware * |
* Manuel "KeyOz" Schrape for explaining the MK protocol to me * |
****************************************************************************/ |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <util/delay.h> |
#include <avr/pgmspace.h> |
#include "main.h" |
#include "max7456_software_spi.h" |
#include "usart1.h" |
#include "osd_helpers.h" |
#include "config.h" |
#include "spi.h" |
#include "buttons.h" |
#include "ppm.h" |
#include "osd_ncmode_default.h" |
#include "osd_ncmode_minimal.h" |
#include "osd_fcmode_default.h" |
#include "osd_fcmode_jopl.h" |
#if WRITECHARS != -1 |
#include "characters.h" |
#endif |
/* TODO: |
* - verifiy correctness of values |
* - clean up code :) |
*/ |
/* ########################################################################## |
* global definitions and global vars |
* ##########################################################################*/ |
volatile NaviData_t naviData; |
volatile DebugOut_t debugData; |
// cache old vars for blinking attribute, checkup is faster than full |
// attribute write each time |
volatile uint8_t last_UBat = 255; |
volatile uint8_t last_RC_Quality = 255; |
// 16bit should be enough, normal LiPos don't last that long |
volatile uint16_t uptime = 0; |
volatile uint16_t timer = 0; |
volatile uint16_t flytime_fc = 0; |
// remember last time data was received |
volatile uint8_t seconds_since_last_data = 0; |
// general PAL|NTSC distingiusch stuff |
uint8_t top_line = 1; |
uint8_t bottom_line = 14; |
// battery voltages |
uint8_t min_voltage = 0; |
uint8_t max_voltage = 0; |
// Flags |
uint8_t COSD_FLAGS_MODES = 0, COSD_FLAGS_CONFIG = 0, COSD_FLAGS_RUNTIME = 0, COSD_DISPLAYMODE = 0; |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
// stats for after flight |
int16_t max_Altimeter = 0; |
uint8_t min_UBat = 255; |
uint16_t max_GroundSpeed = 0; |
int16_t max_Distance = 0; |
uint16_t max_FlyingTime = 0; |
// flags from last round to check for changes |
uint8_t old_MKFlags = 0; |
// store stats description in progmem to save space |
const char stats_item_0[] PROGMEM = "max Altitude:"; |
const char stats_item_1[] PROGMEM = "max Speed :"; |
const char stats_item_2[] PROGMEM = "max Distance:"; |
const char stats_item_3[] PROGMEM = "min Voltage :"; |
const char stats_item_4[] PROGMEM = "max Time :"; |
const char stats_item_5[] PROGMEM = "longitude :"; |
const char stats_item_6[] PROGMEM = "latitude :"; |
const char stats_item_7[] PROGMEM = "max current :"; |
const char *stats_item_pointers[8] PROGMEM = {stats_item_0, stats_item_1, stats_item_2, |
stats_item_3, stats_item_4, stats_item_5, stats_item_6, stats_item_7}; |
//char* directions[8] = {"NE", "E ", "SE", "S ", "SW", "W ", "NW", "N "}; |
//char arrowdir[8] = {218, 217, 224, 223, 222, 221, 220, 219}; |
const char str_NE[] PROGMEM = "NE"; |
const char str_E[] PROGMEM = "E "; |
const char str_SE[] PROGMEM = "SE"; |
const char str_S[] PROGMEM = "S "; |
const char str_SW[] PROGMEM = "SW"; |
const char str_W[] PROGMEM = "W "; |
const char str_NW[] PROGMEM = "NW"; |
const char str_N[] PROGMEM = "N "; |
const char *directions[8] PROGMEM = { |
str_NE, |
str_E, |
str_SE, |
str_S, |
str_SW, |
str_W, |
str_NW, |
str_N}; |
/* ########################################################################## |
* Different display mode function pointers |
* ##########################################################################*/ |
const char str_1[] PROGMEM = "default"; |
const char str_2[] PROGMEM = "minimal"; |
const char str_3[] PROGMEM = " jopl"; |
const displaymode_t ncdisplaymodes[] PROGMEM = { |
{ osd_ncmode_default, (char *)str_1 }, |
{ osd_ncmode_minimal, (char *)str_2 } |
}; |
const displaymode_t fcdisplaymodes[] PROGMEM = { |
{ osd_fcmode_default, (char *)str_1 }, |
{ osd_fcmode_jopl, (char *)str_3 } |
}; |
int (*osd_ncmode)(void) = (int(*)(void)) &osd_ncmode_default; |
int (*osd_fcmode)(void) = (int(*)(void)) &osd_fcmode_default; |
#endif |
/* ########################################################################## |
* Interrupt handler |
* ##########################################################################*/ |
/** |
* handler for undefined Interrupts |
* if not defined AVR will reset in case any unhandled interrupts occur |
*/ |
ISR(__vector_default) { |
asm("nop"); |
} |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
/* ########################################################################## |
* timer stuff |
* ##########################################################################*/ |
static uint8_t delay_spi = 0; |
/** |
* timer kicks in every 1000uS ^= 1ms |
*/ |
ISR(TIMER0_COMP_vect) { |
if (!timer--) { |
uptime++; |
#if FCONLY |
if (debugData.Analog[12]>10) { |
flytime_fc++; |
} |
#endif |
timer = 999; |
seconds_since_last_data++; |
} |
// in case there is still some spi data to send do it now |
// delay to give the slave some time to compute values |
if (spi_ready && icnt) { |
if (!delay_spi--) { |
delay_spi = 8; |
spi_send_next(); |
} |
} |
} |
#endif // ends !(ALLCHARSDEBUG|(WRITECHARS != -1))#endif // ends !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
/* ########################################################################## |
* MAIN |
* ##########################################################################*/ |
int main(void) { |
// set up FLAGS |
COSD_FLAGS_MODES = 0, COSD_FLAGS_CONFIG = 0, COSD_FLAGS_RUNTIME = 0; |
#if NTSC |
COSD_FLAGS_CONFIG |= COSD_FLAG_NTSC; |
#endif |
#if HUD |
COSD_FLAGS_MODES |= COSD_FLAG_HUD; |
#endif |
#if ARTHORIZON |
COSD_FLAGS_MODES |= COSD_FLAG_ARTHORIZON; |
#endif |
#if BIGVARIO |
COSD_FLAGS_MODES |= COSD_FLAG_BIGARIO; |
#endif |
#if STATS |
COSD_FLAGS_MODES |= COSD_FLAG_STATS; |
#endif |
#if WARNINGS |
COSD_FLAGS_MODES |= COSD_FLAG_WARNINGS; |
#endif |
#if FCONLY |
COSD_FLAGS_CONFIG |= COSD_FLAG_FCMODE; |
#endif |
// set up Atmega162 Ports |
DDRA |= (1 << PA1); // PA1 output (/CS) |
MAX_CS_HIGH |
DDRA |= (1 << PA2); // PA2 output (SDIN) |
MAX_SDIN_LOW |
DDRA |= (1 << PA3); // PA3 output (SCLK) |
MAX_SCLK_LOW |
DDRA |= (1 << PA5); // PA5 output (RESET) |
MAX_RESET_HIGH |
DDRC |= (1 << PC0); // PC0 output (LED1 gn) |
LED1_OFF |
DDRC |= (1 << PC1); // PC1 output (LED2 rt) |
LED2_OFF |
DDRC |= (1 << PC2); // PC2 output (LED3 gn) |
LED3_OFF |
DDRC |= (1 << PC3); // PC3 output (LED4 rt) |
LED4_OFF |
DDRC &= ~(1 << PC4); // PC4 input (MODE) |
PORTC |= (1 << PC4); // pullup |
DDRC &= ~(1 << PC5); // PC5 input (SET) |
PORTC |= (1 << PC5); // pullup |
// reset the MAX7456 to be sure any undefined states do no harm |
MAX_RESET_LOW |
MAX_RESET_HIGH |
// give the FC/NC and the maxim time to come up |
LED4_ON |
_delay_ms(1000); |
LED4_OFF |
//Pushing NEW chars to the MAX7456 |
#if (WRITECHARS != -1) |
// DISABLE display (VM0) |
spi_send_byte(0x00, 0b00000000); |
learn_all_chars_pgm(); |
#else |
// read out config for NTSC/PAL distinguishing |
get_eeprom(0); |
#endif |
// Setup Video Mode |
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) { |
// NTSC + enable display immediately (VM0) |
spi_send_byte(0x00, 0b00001000); |
bottom_line = 12; |
} else { |
// PAL + enable display immediately (VM0) |
spi_send_byte(0x00, 0b01001000); |
bottom_line = 14; |
} |
/*// clear all display-mem (DMM) |
spi_send_byte(0x04, 0b00000100); |
// clearing takes 12uS according to maxim so lets wait longer |
_delay_us(120); |
// 8bit mode |
spi_send_byte(0x04, 0b01000000);*/ |
// clear display memory and set to 8bit mode |
clear(); |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
// init usart |
usart1_init(); |
// keep serial port clean |
usart1_DisableTXD(); |
// set up timer |
// CTC, Prescaler /64 |
TCCR0 = (1 << WGM01) | (0 << WGM00) | (0 << CS02) | (1 << CS01) | (1 << CS00); |
TCNT0 = 0; |
OCR0 = 250; |
// enable timer output compare interrupt |
TIMSK &= ~(1 << TOIE0); |
TIMSK |= (1 << OCIE0); |
// SPI setup |
DDRD |= (1 << PD2); // PD2 output (INT0) |
SpiMasterInit(); |
// PPM detection setup |
ppm_init(); |
// enable interrupts |
sei(); |
#endif |
write_ascii_string(2, 5, " AGRESSiVA MOD"); |
write_ascii_string(2, 7, " EPi OSD Firmware"); |
write_ascii_string(2, 9, " WAiTiNG for Controller"); |
// we are ready |
LED3_ON |
#if ALLCHARSDEBUG | (WRITECHARS != -1) |
clear(); |
write_all_chars(); |
LED1_ON |
LED2_ON |
LED3_ON |
LED4_ON |
#else |
// clear serial screen |
//usart1_puts("\x1B[2J\x1B[H"); |
//usart1_puts("hello world!123\r\n"); |
while (1) { |
// in case SPI is ready and there is nothing to send right now |
if (!icnt && spi_ready) { |
// correct transfer ends with d (done) |
if (SPI_buffer.buffer.chk == 'd') { |
ampere = SPI_buffer.data.ampere; |
ampere_wasted = SPI_buffer.data.mah; |
s_volt = SPI_buffer.data.volt; |
// if this is the first receival we should print the small A |
if (!(COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC)) { |
clear(); |
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN; |
// update this flag |
COSD_FLAGS_RUNTIME |= COSD_FLAG_STROMREC; |
} |
} else { |
// update flags |
COSD_FLAGS_RUNTIME &= ~COSD_FLAG_STROMREC; |
} |
StartTransfer(9); |
} |
if (rxd_buffer_locked) { |
#if FCONLY |
if (rxd_buffer[2] == 'D') { // FC Data |
Decode64(); |
debugData = *((DebugOut_t*) pRxData); |
// init on first data retrival, distinguished by last battery :) |
if (last_UBat == 255) { |
if (debugData.Analog[9] > 40) { |
// fix for min_UBat |
min_UBat = debugData.Analog[9]; |
last_UBat = debugData.Analog[9]; |
init_cosd(last_UBat); |
} |
} else { |
osd_fcmode(); |
} |
seconds_since_last_data = 0; |
} |
#else |
if (rxd_buffer[2] == 'O') { // NC OSD Data |
Decode64(); |
naviData = *((NaviData_t*) pRxData); |
// init on first data retrival, distinguished by last battery :) |
if (last_UBat == 255) { |
if (naviData.UBat > 40) { |
// fix for min_UBat |
min_UBat = naviData.UBat; |
last_UBat = naviData.UBat; |
init_cosd(last_UBat); |
} |
} else { |
osd_ncmode(); |
} |
//seconds_since_last_data = 0; |
} |
#endif |
rxd_buffer_locked = 0; |
} |
// handle keypress |
if (s1_pressed()) { |
config_menu(); |
} |
if (seconds_since_last_data > 0) { |
usart1_EnableTXD(); |
//usart1_puts_pgm(PSTR("zu alt\r\n")); |
#if FCONLY |
// request data ever 100ms from FC; |
//usart1_request_mk_data(0, 'd', 100); |
usart1_puts_pgm(PSTR(REQUEST_DBG_DATA)); |
#else |
// request OSD Data from NC every 100ms |
//usart1_request_mk_data(1, 'o', 100); |
usart1_puts_pgm(PSTR(REQUEST_OSD_DATA)); |
// and disable debug... |
//usart1_request_mk_data(0, 'd', 0); |
#endif |
// reset last time counter |
seconds_since_last_data = 0; |
usart1_DisableTXD(); |
} |
} |
#endif |
return 0; |
} |
/C-OSD/trunk/C-OSD AGRESSiVA mod/main.h |
---|
0,0 → 1,175 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include <avr/pgmspace.h> |
#include "mk-data-structs.h" |
/* ########################################################################## |
* Debugging and general purpose definitions |
* ##########################################################################*/ |
#ifndef BUILDDATE |
#define BUILDDATE "DEVEL-BUILD" // build date, this is testing... |
#endif |
#define ALLCHARSDEBUG 0 // set to 1 and flash firmware to see all chars |
#ifndef WRITECHARS // if WRITECHARS not set via makefile |
#define WRITECHARS -1 // set to 1 and flash firmware to write all chars |
#endif |
#define NEW_ARTHORIZON 1 // set to 1 for full artificial horizon (agr type) |
#ifndef NTSC // if NTSC is not thet via makefile |
#define NTSC 0 // set to 1 for NTSC mode + lifts the bottom line |
#endif |
#ifndef FCONLY |
#define FCONLY 0 // set to 1 if you do NOT have a NaviCtrl and the OSD is |
#endif // connected to the FC directly |
#define HUD 1 // set to 0 to disable HUD by default |
#define ARTHORIZON 0 // set to 1 to enable roll&nick artificial horizon by default |
#define BIGVARIO 0 // set to 1 to enable the big vario bar on right side |
#define STATS 1 // set to 1 to enable statistics during motor off by default |
#define WARNINGS 1 // set to 1 to display battery+rc warning even if HUD is disabled |
//#define UBAT_WRN 94 // voltage for blinking warning, like FC settings (deprecated) |
//#define UBAT_MAX 114 // maximal battery voltage for battery-sign (deprecated) |
#define CELL_VOLT_MAX 37 // max voltage per battery cell (37 for LiPo) |
#define CELL_VOLT_MIN 32 // min voltage per battery cell (maybe 32 for LiPo?) |
#define CELL_NUM -1 // -1 for auto, 3 for 3s1p and 4 for 4s1p |
#define RCLVL_WRN 100 // make the RC level blink if below this number |
// ### read datasheet before changing stuff below this line :) |
#define BLINK 0b01001111 // attribute byte for blinking characters |
#define INVERT 0b00101111 // attribute byte for inverted characters |
#define BLACKBG 0b10001111 // attribute byte for _black background_ on characters |
/* ########################################################################## |
* FLAGS usable during runtime that get saved |
* ##########################################################################*/ |
#define COSD_FLAG_HUD 1 |
#define COSD_FLAG_ARTHORIZON 2 |
#define COSD_FLAG_BIGVARIO 4 |
#define COSD_FLAG_STATS 8 |
#define COSD_FLAG_WARNINGS 16 |
#define COSD_FLAG_STROMVOLT 32 |
#define COSD_FLAG_FCCURRENT 64 |
#define COSD_FLAG_NTSC 1 |
#define COSD_FLAG_GPSHEIGHT 2 |
#define COSD_FLAG_FCMODE 4 |
/* ########################################################################## |
* FLAGS only usable during runtime (not saved) |
* ##########################################################################*/ |
#define COSD_FLAG_STROMREC 1 |
#define COSD_ICONS_WRITTEN 2 |
#define COSD_WASFLYING 4 |
/* ########################################################################## |
* LED controll |
* ##########################################################################*/ |
#define LED1_ON PORTC |= (1 << PC0); |
#define LED1_OFF PORTC &= ~(1 << PC0); |
#define LED2_ON PORTC |= (1 << PC1); |
#define LED2_OFF PORTC &= ~(1 << PC1); |
#define LED3_ON PORTC |= (1 << PC2); |
#define LED3_OFF PORTC &= ~(1 << PC2); |
#define LED4_ON PORTC |= (1 << PC3); |
#define LED4_OFF PORTC &= ~(1 << PC3); |
/* ########################################################################## |
* switch controll |
* ##########################################################################*/ |
#define S1_PRESSED !(PINC & (1<<PC5)) |
#define S2_PRESSED !(PINC & (1<<PC4)) |
/* ########################################################################## |
* extern spi controlled vars |
* ##########################################################################*/ |
extern volatile uint16_t icnt; |
extern volatile unsigned char * iptr; |
extern volatile uint8_t spi_cmd_buffer[]; |
extern volatile uint8_t spi_ready; |
extern int16_t ampere, max_ampere, s_volt; |
extern int32_t ampere_wasted; |
/* ########################################################################## |
* struct for displaymodes |
* ##########################################################################*/ |
typedef struct { |
int (*dfun)(void); // function pointer |
char *desc; // description text |
} displaymode_t; |
const displaymode_t ncdisplaymodes[2]; |
const displaymode_t fcdisplaymodes[2]; |
int (*osd_ncmode)(void); |
int (*osd_fcmode)(void); |
/* ########################################################################## |
* vars used by other parts as well |
* ##########################################################################*/ |
volatile uint16_t setsReceived; |
volatile NaviData_t naviData; |
volatile DebugOut_t debugData; |
// cache old vars for blinking attribute, checkup is faster than full |
// attribute write each time |
volatile uint8_t last_UBat; |
volatile uint8_t last_RC_Quality; |
// 16bit should be enough, normal LiPos don't last that long |
volatile uint16_t uptime; |
volatile uint16_t timer; |
volatile uint16_t flytime_fc; |
volatile uint16_t wasted_ampere_offset; |
// remember last time data was received |
volatile uint8_t seconds_since_last_data; |
// general PAL|NTSC distingiusch stuff |
uint8_t top_line; |
uint8_t bottom_line; |
// battery voltages |
uint8_t min_voltage; |
uint8_t max_voltage; |
// Flags |
uint8_t COSD_FLAGS_MODES, COSD_FLAGS_CONFIG, COSD_FLAGS_RUNTIME, COSD_DISPLAYMODE; |
// stats for after flight |
int16_t max_Altimeter, altimeter_offset; |
uint8_t min_UBat; |
uint16_t max_GroundSpeed; |
int16_t max_Distance; |
uint16_t max_FlyingTime; |
// flags from last round to check for changes |
uint8_t old_MKFlags; |
const char *directions[8]; |
const char *stats_item_pointers[8]; |
/C-OSD/trunk/C-OSD AGRESSiVA mod/max7456_software_spi.c |
---|
0,0 → 1,330 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include <avr/io.h> |
#include <util/delay.h> |
#include <avr/pgmspace.h> |
#include <string.h> |
#include <stdlib.h> |
#include "main.h" |
#include "max7456_software_spi.h" |
char conv_array[7]; // general array for number -> char conversation |
/* ########################################################################## |
* MAX7456 SPI & Display stuff |
* ##########################################################################*/ |
/** |
* Send a byte through SPI |
* inline because it increases the codesize currenlty 'only' by 110byte but saves |
* the context-change on every char and attribute which is at least done twice |
* (address and data byte), a significant speed-bost we do not want to miss :) |
*/ |
inline void spi_send(uint8_t byte) { |
for (int8_t i = 7; i >= 0; i--) { |
if (((byte >> i) & 1)) { |
MAX_SDIN_HIGH |
} else { |
MAX_SDIN_LOW |
} |
MAX_SCLK_HIGH |
MAX_SCLK_LOW |
} |
} |
/** |
* Send <byte> to <address> of MAX7456 |
*/ |
void spi_send_byte(uint8_t address, uint8_t byte) { |
// start sending |
MAX_CS_LOW |
spi_send(address); |
spi_send(byte); |
// end sending |
MAX_CS_HIGH |
} |
/** |
* write a <character> to <address> of MAX7456 display memory |
*/ |
void write_char(uint16_t address, char character) { |
spi_send_byte(0x05, (address & 0xFF00) >> 8); // DMAH |
spi_send_byte(0x06, (address & 0x00FF)); // DMAL |
spi_send_byte(0x07, character); // DMDI |
} |
/** |
* clear display memory |
* (also sets 8bit mode) |
*/ |
void clear(void) { |
/*uint16_t memory_address = 0; |
for (unsigned int a = 0; a < 480; a++) { |
write_char(memory_address++, 0); |
}*/ |
// clear all display-mem (DMM) |
spi_send_byte(0x04, 0b01000100); |
// clearing takes 12uS according to maxim so lets wait longer |
_delay_us(20); |
} |
#if (ALLCHARSDEBUG|(WRITECHARS != -1)) |
/** |
* for testing write all chars to screen |
*/ |
void write_all_chars() { |
uint16_t x = 3, y = 2, t = 0; |
while (t < 256) { |
write_char(x++ + y*30, t++); |
if (x > 25) { |
y++; |
x = 3; |
} |
} |
} |
/** |
* let the MAX7456 learn a new character at <number> |
* with <data>. |
*/ |
void learn_char(uint8_t number, unsigned char* data) { |
// select character to write (CMAH) |
spi_send_byte(0x09, number); |
for (uint8_t i = 0; i < 54; i++) { |
// select 4pixel byte of char (CMAL) |
spi_send_byte(0x0A, i); |
// write 4pixel byte of char (CMDI) |
spi_send_byte(0x0B, data[i]); |
} |
// write to the NVM array from the shadow RAM (CMM) |
spi_send_byte(0x08, 0b10100000); |
// according to maxim writing to nvram takes about 12ms, lets wait longer |
_delay_ms(120); |
} |
#endif |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
/** |
* write a character <attribute> to <address> of MAX7456 display memory |
*/ |
void write_char_att(uint16_t address, char attribute) { |
// the only important part is that the DMAH[1] is set |
// so we add 2 which binary is the 2nd lowest byte |
spi_send_byte(0x05, ((address & 0xFF00) >> 8) | 2); // DMAH |
spi_send_byte(0x06, (address & 0x00FF)); // DMAL |
spi_send_byte(0x07, attribute); // DMDI |
} |
/** |
* write a <character> at <x>/<y> to MAX7456 display memory |
*/ |
void write_char_xy(uint8_t x, uint8_t y, char character) { |
uint16_t address = y * 30 + x; |
write_char(address, character); |
} |
/** |
* write a character <attribute> at <x>/<y> to MAX7456 display memory |
*/ |
void write_char_att_xy(uint8_t x, uint8_t y, char attribute) { |
uint16_t address = y * 30 + x; |
write_char_att(address, attribute); |
} |
/** |
* write an ascii <character> to <address> of MAX7456 display memory |
*/ |
void write_ascii_char(uint16_t address, char c) { |
if (c == 32) c = 0; // remap space |
else if (c > 48 && c <= 57) c -= 48; // remap numbers |
else if (c == '0') c = 10; // remap zero |
else if (c >= 65 && c <= 90) c -= 54; // remap big letters |
else if (c >= 97 && c <= 122) c -= 60; // remap small letters |
else if (c == '(') c = 63; // remap |
else if (c == ')') c = 64; // remap |
else if (c == '.') c = 65; // remap |
else if (c == '-') c = 73; // remap minus |
else if (c == ';') c = 67; // remap |
else if (c == ':') c = 68; // remap |
else if (c == ',') c = 69; // remap |
// else if (c == '?') c = 66; // remap |
// else if (c == '\'') c = 70; // remap |
// else if (c == '/') c = 71; // remap |
// else if (c == '"') c = 72; // remap |
// else if (c == '<') c = 74; // remap |
// else if (c == '>') c = 75; // remap |
// else if (c == '@') c = 76; // remap |
write_char(address, c); |
} |
/** |
* write an ascii <string> at <x>/<y> to MAX7456 display memory |
*/ |
void write_ascii_string(uint8_t x, uint8_t y, char *string) { |
while (*string) { |
write_ascii_char(((x++)+(y * 30)), *string); |
string++; |
} |
} |
/** |
* write an ascii <string> from progmen at <x>/<y> to MAX7456 display memory |
*/ |
void write_ascii_string_pgm(uint8_t x, uint8_t y, const char *string) { |
while (pgm_read_byte(string) != 0x00) |
write_ascii_char(((x++)+(y * 30)), pgm_read_byte(string++)); |
} |
/** |
* write an <string> from progmen at <x>/<y> downwards to MAX7456 display memory |
*/ |
void write_string_pgm_down(uint8_t x, uint8_t y, const char *string, uint8_t length) { |
while (length--) |
write_char((x+(y++ * 30)), pgm_read_byte(string++)); |
} |
/** |
* Write a unsigned <number> at <x>/<y> to MAX7456 display memory |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u(uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
for (uint8_t i = 0; i < length - strlen(conv_array); i++) { |
if (pad) write_char((x++)+(y * 30), 10); |
else write_ascii_char((x++)+(y * 30), 0); |
} |
write_ascii_string(x, y, conv_array); |
} |
/** |
* Write a signed <number> at <x>/<y> to MAX7456 display memory |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s(uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
for (uint8_t i = 0; i < length - strlen(conv_array); i++) { |
if (pad) write_char((x++)+(y * 30), 10); |
else write_ascii_char((x++)+(y * 30), 0); |
} |
write_ascii_string(x, y, conv_array); |
} |
/** |
* Write a unsigned <number> at <x>/<y> to MAX7456 display memory as /10th of value |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u_10th(uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
uint8_t len = strlen(conv_array); |
for (uint8_t i = 0; i < length - len; i++) { |
if (pad) write_char((x++)+(y * 30), 10); // zero |
else write_char((x++)+(y * 30), 0); // blank |
} |
char rest = conv_array[len - 1]; |
conv_array[len - 1] = 0; |
if (len == 1) { |
write_char((x-1)+(y * 30), 10); // zero |
} else if (len == 2 && conv_array[0] == '-') { |
write_char((x-1)+(y * 30), 0x49); // minus |
write_char((x)+(y * 30), 10); // zero |
} else { |
write_ascii_string(x, y, conv_array); |
} |
x += len - 1; |
write_char((x++)+(y * 30), 65); // decimal point |
write_ascii_char((x++)+(y * 30), rest); // after dot |
} |
/** |
* Write a signed <number> at <x>/<y> to MAX7456 display memory as /10th of value |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s_10th(uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
uint8_t len = strlen(conv_array); |
for (uint8_t i = 0; i < length - len; i++) { |
if (pad) write_char((x++)+(y * 30), 10); // zero |
else write_char((x++)+(y * 30), 0); // blank |
} |
char rest = conv_array[len - 1]; |
conv_array[len - 1] = 0; |
if (len == 1) { |
write_char((x-1)+(y * 30), 10); // zero |
} else if (len == 2 && conv_array[0] == '-') { |
write_char((x-1)+(y * 30), 0x49); // minus |
write_char((x)+(y * 30), 10); // zero |
} else { |
write_ascii_string(x, y, conv_array); |
} |
x += len - 1; |
write_char((x++)+(y * 30), 65); // decimal point |
write_ascii_char((x++)+(y * 30), rest); // after dot |
} |
/** |
* write <seconds> as human readable time at <x>/<y> to MAX7456 display mem |
*/ |
void write_time(uint8_t x, uint8_t y, uint16_t seconds) { |
uint16_t min = seconds / 60; |
seconds -= min * 60; |
write_ndigit_number_u(x, y, min, 3, 0); |
write_char_xy(x + 3, y, 68); |
write_ndigit_number_u(x + 4, y, seconds, 2, 1); |
} |
/** |
* wirte a <position> at <x>/<y> assuming it is a gps position for long-/latitude |
*/ |
void write_gps_pos(uint8_t x, uint8_t y, int32_t position) { |
if (position < 0) { |
position ^= ~0; |
position++; |
write_char_xy(x++, y, 0x49); // minus |
} else { |
write_char_xy(x++, y, 0); // clear ('+' would be nice, maybe later) |
} |
write_ndigit_number_u(x, y, (uint16_t) (position / (int32_t) 10000000), 3, 1); |
write_char_xy(x + 3, y, 65); // decimal point |
position = position - ((position / (int32_t) 10000000) * (int32_t) 10000000); |
write_ndigit_number_u(x + 4, y, (uint16_t) (position / (int32_t) 1000), 4, 1); |
position = position - ((uint16_t) (position / (int32_t) 1000) * (int32_t) 1000); |
write_ndigit_number_u(x + 8, y, (uint16_t) position, 3, 1); |
write_char_xy(x + 11, y, 0xD0); // degree symbol |
} |
#endif |
/C-OSD/trunk/C-OSD AGRESSiVA mod/max7456_software_spi.h |
---|
0,0 → 1,141 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
/* ########################################################################## |
* Software SPI to communicate with MAX7456 |
* ##########################################################################*/ |
#define MAX_CS_HIGH PORTA |= (1 << PA1); |
#define MAX_CS_LOW PORTA &= ~(1 << PA1); |
#define MAX_SDIN_HIGH PORTA |= (1 << PA2); |
#define MAX_SDIN_LOW PORTA &= ~(1 << PA2); |
#define MAX_SCLK_HIGH PORTA |= (1 << PA3); |
#define MAX_SCLK_LOW PORTA &= ~(1 << PA3); |
#define MAX_RESET_HIGH PORTA |= (1 << PA5); |
#define MAX_RESET_LOW PORTA &= ~(1 << PA5); |
/* ########################################################################## |
* MAX7456 SPI & Display stuff |
* ##########################################################################*/ |
/** |
* Send a byte through SPI |
*/ |
void spi_send(uint8_t); |
/** |
* Send <byte> to <address> of MAX7456 |
*/ |
void spi_send_byte(uint8_t, uint8_t); |
/** |
* write a <character> to <address> of MAX7456 display memory |
*/ |
void write_char(uint16_t, char); |
/** |
* write a character <attribute> to <address> of MAX7456 display memory |
*/ |
void write_char_att(uint16_t, char); |
/** |
* write a <character> at <x>/<y> to MAX7456 display memory |
*/ |
void write_char_xy(uint8_t, uint8_t, char); |
/** |
* write a character <attribute> at <x>/<y> to MAX7456 display memory |
*/ |
void write_char_att_xy(uint8_t, uint8_t, char attribute); |
/** |
* clear display memory |
* (also sets 8bit mode) |
*/ |
void clear(void); |
/** |
* write an ascii <character> to <address> of MAX7456 display memory |
*/ |
void write_ascii_char(uint16_t, char); |
/** |
* write an ascii <string> at <x>/<y> to MAX7456 display memory |
*/ |
void write_ascii_string(uint8_t, uint8_t, char*); |
/** |
* write an ascii <string> from progmen at <x>/<y> to MAX7456 display memory |
*/ |
void write_ascii_string_pgm(uint8_t, uint8_t, const char*); |
/** |
* write an <string> from progmen at <x>/<y> downwards to MAX7456 display memory |
*/ |
void write_string_pgm_down(uint8_t, uint8_t, const char*, uint8_t); |
/** |
* Write a unsigned <number> at <x>/<y> to MAX7456 display memory |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u(uint8_t, uint8_t, uint16_t, int16_t, uint8_t); |
/** |
* Write a signed <number> at <x>/<y> to MAX7456 display memory |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s(uint8_t, uint8_t, int16_t, int16_t, uint8_t); |
/** |
* Write a unsigned <number> at <x>/<y> to MAX7456 display memory as /10th of value |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u_10th(uint8_t, uint8_t, uint16_t, int16_t, uint8_t); |
/** |
* Write a signed <number> at <x>/<y> to MAX7456 display memory as /10th of value |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s_10th(uint8_t, uint8_t, int16_t, int16_t, uint8_t); |
/** |
* write <seconds> as human readable time at <x>/<y> to MAX7456 display mem |
*/ |
void write_time(uint8_t, uint8_t, uint16_t); |
#if (ALLCHARSDEBUG|(WRITECHARS != -1)) |
/** |
* for testing write all chars to screen |
*/ |
void write_all_chars(); |
/** |
* let the MAX7456 learn a new character at <number> |
* with <data>. |
*/ |
void learn_char(uint8_t, unsigned char*); |
#endif |
/** |
* wirte a <position> at <x>/<y> assuming it is a gps position for long-/latitude |
*/ |
void write_gps_pos(uint8_t, uint8_t, int32_t); |
/C-OSD/trunk/C-OSD AGRESSiVA mod/mk-data-structs.h |
---|
0,0 → 1,141 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
/* ########################################################################## |
* gain some fake arm compat :) |
* ##########################################################################*/ |
#define u8 uint8_t |
#define s8 int8_t |
#define u16 uint16_t |
#define s16 int16_t |
#define u32 uint32_t |
#define s32 int32_t |
/* |
* FC Debug Struct |
* portions taken and adapted from |
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.72p%2Fuart.h |
*/ |
typedef struct { |
uint8_t Digital[2]; |
uint16_t Analog[32]; // Debugvalues |
} __attribute__((packed)) DebugOut_t; |
typedef struct { |
unsigned char SWMajor; |
unsigned char SWMinor; |
unsigned char ProtoMajor; |
unsigned char ProtoMinor; |
unsigned char SWPatch; |
unsigned char Reserved[5]; |
} str_VersionInfo; |
/* |
* NaviCtrl OSD Structs |
* portions taken and adapted from |
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=NaviCtrl&path=%2Ftags%2FV0.18c%2Fuart1.h |
*/ |
typedef struct { |
s32 Longitude; // in 1E-7 deg |
s32 Latitude; // in 1E-7 deg |
s32 Altitude; // in mm |
u8 Status; // validity of data |
} __attribute__((packed)) GPS_Pos_t; |
#define INVALID 0x00 |
#define NEWDATA 0x01 |
#define PROCESSED 0x02 |
+ u16 Distance; // distance to target in cm |
+ s16 Bearing; // course to target in deg |
+} __attribute__((packed)) GPS_PosDev_t; |
+ |
+typedef struct { |
+ u8 Version; // version of the data structure |
+ GPS_Pos_t CurrentPosition; // see ubx.h for details |
+ GPS_Pos_t TargetPosition; |
+ GPS_PosDev_t TargetPositionDeviation; |
+ GPS_Pos_t HomePosition; |
+ GPS_PosDev_t HomePositionDeviation; |
+ u8 WaypointIndex; // index of current waypoints running from 0 to WaypointNumber-1 |
+ u8 WaypointNumber; // number of stored waypoints |
+ u8 SatsInUse; // number of satellites used for position solution |
+ s16 Altimeter; // hight according to air pressure |
+ s16 Variometer; // climb(+) and sink(-) rate |
+ u16 FlyingTime; // in seconds |
+ u8 UBat; // Battery Voltage in 0.1 Volts |
+ u16 GroundSpeed; // speed over ground in cm/s (2D) |
+ s16 Heading; // current flight direction in � as angle to north |
+ s16 CompassHeading; // current compass value in � |
+ s8 AngleNick; // current Nick angle in 1� |
+ s8 AngleRoll; // current Rick angle in 1� |
+ u8 RC_Quality; // RC_Quality |
+ u8 FCFlags; // Flags from FC |
+ u8 NCFlags; // Flags from NC |
+ u8 Errorcode; // 0 --> okay |
+ u8 OperatingRadius; // current operation radius around the Home Position in m |
+ s16 TopSpeed; // velocity in vertical direction in cm/s |
+ u8 TargetHoldTime; // time in s to stay at the given target, counts down to 0 if target has been reached |
+ u8 RC_RSSI; // Receiver signal strength (since version 2 added) |
+ s16 SetpointAltitude; // setpoint for altitude |
+ u8 Gas; // for future use |
+ u16 Current; // actual current in 0.1A steps |
+ u16 UsedCapacity; // used capacity in mAh |
+} __attribute__((packed)) NaviData_t; |
+ |
+ |
+/* |
+ * MikroKopter Flags |
+ * taken from |
+ * http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.78b%2Ffc.h |
+ */ |
+#define FCFLAG_MOTOR_RUN 0x01 |
+#define FCFLAG_FLY 0x02 |
+#define FCFLAG_CALIBRATE 0x04 |
+#define FCFLAG_START 0x08 |
+#define FCFLAG_NOTLANDUNG 0x10 |
+#define FCFLAG_LOWBAT 0x20 |
+#define FCFLAG_SPI_RX_ERR 0x40 |
+#define FCFLAG_I2CERR 0x80 |
+ |
+// backward compat |
+#define FLAG_MOTOR_RUN FCFLAG_MOTOR_RUN |
+#define FLAG_FLY FCFLAG_FLY |
+#define FLAG_CALIBRATE FCFLAG_CALIBRATE |
+#define FLAG_START FCFLAG_START |
+ |
+/* |
+ * NaviCtrl Flags |
+ * taken from |
+ * http://mikrocontroller.cco-ev.de/mikrowebsvn/filedetails.php?repname=NaviCtrl&path=%2Ftags%2FV0.17e%2Fuart1.h |
+ */ |
+#define NC_FLAG_FREE 0x01 |
+#define NC_FLAG_PH 0x02 |
+#define NC_FLAG_CH 0x04 |
+#define NC_FLAG_RANGE_LIMIT 0x08 |
+#define NC_FLAG_NOSERIALLINK 0x10 |
+#define NC_FLAG_TARGET_REACHED 0x20 |
+#define NC_FLAG_MANUAL_CONTROL 0x40 |
+#define NC_FLAG_8 0x80 |
+ |
+ |
/C-OSD/trunk/C-OSD AGRESSiVA mod/osd_fcmode_default.c |
---|
0,0 → 1,104 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include "main.h" |
#include "max7456_software_spi.h" |
#include "osd_helpers.h" |
#include "osd_fcmode_default.h" |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
int osd_fcmode_default() { |
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) { |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
write_char_xy(10, top_line, 0xCA); // RC-transmitter |
write_char_xy(27, top_line, 0xCC); // small meters m height |
write_char_xy(7, bottom_line, 0x9E); // small v |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
write_char_xy(7, bottom_line - 1, 0x9F); // small A |
write_char_xy(14, bottom_line - 1, 0xB5); // mah |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
write_char_xy(21, bottom_line - 1, 0x9E); // small V |
} |
} |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
} |
write_ndigit_number_u(7, top_line, debugData.Analog[10], 3, 0); |
if (debugData.Analog[10] <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (debugData.Analog[10] > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, 0); |
} |
if (debugData.Analog[5] > 300 || debugData.Analog[5] < -300) { |
// above 10m only write full meters |
write_ndigit_number_s(23, top_line, debugData.Analog[5] / 30, 4, 0); |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(23, top_line, debugData.Analog[5] / 3, 3, 0); |
} |
if (debugData.Analog[5] > max_Altimeter) max_Altimeter = debugData.Analog[5]; |
if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, debugData.Analog[0], debugData.Analog[1]); |
} |
// pre-bottom line |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
//write_ndigit_number_s(3, bottom_line - 1, ampere, 4, 0); |
write_ndigit_number_u_10th(3, bottom_line - 1, ampere / 10, 3, 0); |
write_ndigit_number_s(10, bottom_line - 1, ampere_wasted / 10, 4, 0); |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
write_ndigit_number_u_10th(17, bottom_line - 1, s_volt, 3, 0); |
} |
} |
draw_battery(2, bottom_line, min_voltage, debugData.Analog[9], max_voltage); |
write_ndigit_number_u_10th(3, bottom_line, debugData.Analog[9], 3, 0); |
if (debugData.Analog[9] <= min_voltage && last_UBat > min_voltage) { |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
} else if (debugData.Analog[9] > min_voltage && last_UBat < min_voltage) { |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, 0); |
} |
} |
// remember last values |
last_UBat = debugData.Analog[9]; |
last_RC_Quality = debugData.Analog[10]; |
/* |
debugData.Analog[0]); // AngleNick |
debugData.Analog[1]); // AngleRoll |
debugData.Analog[5]); // Height |
debugData.Analog[9]); // Voltage |
debugData.Analog[10]);// RC Signal |
debugData.Analog[11]);// Gyro compass |
*/ |
seconds_since_last_data = 0; |
return 0; |
} |
#endif |
/C-OSD/trunk/C-OSD AGRESSiVA mod/osd_fcmode_default.h |
---|
0,0 → 1,21 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
int osd_fcmode_default(void); |
/C-OSD/trunk/C-OSD AGRESSiVA mod/osd_fcmode_jopl.c |
---|
0,0 → 1,176 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
* * |
* This is an alternative FC-mode contributed by Josef "jopl" Plasil * |
* who is using the FC with an MK3Mag and the OSD * |
****************************************************************************/ |
#include "main.h" |
#include "max7456_software_spi.h" |
#include "osd_helpers.h" |
#include "osd_fcmode_default.h" |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
// jopl Vario |
static int16_t last_Altimeter = 0; |
static int16_t Vario = 0; |
int osd_fcmode_jopl() { |
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) { |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
write_char_xy(10, top_line, 0xCA); // RC-transmitter |
// jopl ... compass |
write_char_xy(16, top_line, 0xD0); // degree symbol |
// end jopl |
write_char_xy(26, top_line, 0xCC); // small meters m height |
write_char_xy(7, bottom_line, 0x9E); // small v |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
write_char_xy(7, bottom_line - 1, 0x9F); // small A |
write_char_xy(14, bottom_line - 1, 0xB5); // mah |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
write_char_xy(21, bottom_line - 1, 0x9E); // small V |
} |
} |
// jopl ... Times |
write_char_xy(14, bottom_line, 0xD1); // on clock |
write_char_xy(21, bottom_line, 0xD2); // fly clock |
// end jopl |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
} |
write_ndigit_number_u(7, top_line, debugData.Analog[10], 3, 0); |
if (debugData.Analog[10] <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (debugData.Analog[10] > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, 0); |
} |
// jopl ... compass |
write_ndigit_number_u(13, top_line, debugData.Analog[8], 3, 0); |
write_ascii_string_pgm(17, top_line, (const char *) (pgm_read_word(&(directions[heading_conv(debugData.Analog[8])])))); |
// end jopl |
// jopl Altimeter modification |
if ((debugData.Analog[5] > 100) || (debugData.Analog[5] < -100)) { |
// above 10m only write full meters |
write_ndigit_number_s(22, top_line, debugData.Analog[5] / 10, 4, 0); |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(22, top_line, debugData.Analog[5], 3, 0); |
} |
Vario = debugData.Analog[5] - last_Altimeter; |
draw_variometer(27, top_line, Vario); |
if (COSD_FLAGS_MODES & COSD_FLAG_BIGVARIO) { |
draw_big_variometer(27, 8, Vario); |
} |
last_Altimeter = debugData.Analog[5]; |
// end jopl |
if (debugData.Analog[5] > max_Altimeter) max_Altimeter = debugData.Analog[5]; |
if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, debugData.Analog[0], debugData.Analog[1]); |
} |
// jopl ... compass heading |
// seccond line |
draw_compass(11, top_line + 1, debugData.Analog[8]); |
// end jopl |
// pre-bottom line |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
//write_ndigit_number_s(3, bottom_line - 1, ampere, 4, 0); |
write_ndigit_number_u_10th(3, bottom_line - 1, ampere / 10, 3, 0); |
write_ndigit_number_s(10, bottom_line - 1, ampere_wasted / 10, 4, 0); |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
write_ndigit_number_u_10th(17, bottom_line - 1, s_volt, 3, 0); |
} |
} |
draw_battery(2, bottom_line, min_voltage, debugData.Analog[9], max_voltage); |
write_ndigit_number_u_10th(3, bottom_line, debugData.Analog[9], 3, 0); |
if (debugData.Analog[9] <= min_voltage && last_UBat > min_voltage) { |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
} else if (debugData.Analog[9] > min_voltage && last_UBat < min_voltage) { |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, 0); |
} |
// jopl ... Times |
write_time(8, bottom_line, uptime); |
write_time(15, bottom_line, flytime_fc); |
// Test ... show Gas value |
// write_ndigit_number_s(22, bottom_line, debugData.Analog[5], 5, 0); |
// end jopl |
} |
// remember last values |
last_UBat = debugData.Analog[9]; |
last_RC_Quality = debugData.Analog[10]; |
/* |
debugData.Analog[0]); // AngleNick |
debugData.Analog[1]); // AngleRoll |
debugData.Analog[2]); // AccNick |
debugData.Analog[3]); // AccRoll |
debugData.Analog[4]); // GyroGier |
debugData.Analog[5]); // Height Value |
debugData.Analog[6]); // AccZ |
debugData.Analog[7]); // Throttle |
debugData.Analog[8]); // Compass Value |
debugData.Analog[9]); // Voltage |
debugData.Analog[10]);// RC Signal |
debugData.Analog[11]);// Gyro compass |
debugData.Analog[12]);// Motor Front |
debugData.Analog[13]);// Motor Rear |
debugData.Analog[14]);// Motor Left |
debugData.Analog[15]);// Motor Right |
debugData.Analog[16]);// |
debugData.Analog[17]);// |
debugData.Analog[18]);// |
debugData.Analog[19]);// MK3Mag CalState |
debugData.Analog[20]);// Servo |
debugData.Analog[21]);// |
debugData.Analog[22]);// |
debugData.Analog[23]);// |
debugData.Analog[24]);// |
debugData.Analog[25]);// |
debugData.Analog[26]);// |
debugData.Analog[27]);// Kalman_MaxDrift |
debugData.Analog[28]);// |
debugData.Analog[29]);// |
debugData.Analog[30]);// GPS_Nick |
debugData.Analog[31]);// GPS_Roll |
*/ |
seconds_since_last_data = 0; |
return 0; |
} |
#endif |
/C-OSD/trunk/C-OSD AGRESSiVA mod/osd_fcmode_jopl.h |
---|
0,0 → 1,21 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
int osd_fcmode_jopl(void); |
/C-OSD/trunk/C-OSD AGRESSiVA mod/osd_helpers.c |
---|
0,0 → 1,320 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include <avr/pgmspace.h> |
#include "main.h" |
#include "osd_helpers.h" |
#include "max7456_software_spi.h" |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
/* ########################################################################## |
* compass stuff |
* ##########################################################################*/ |
/** |
* convert the <heading> gotton from NC into an index |
*/ |
uint8_t heading_conv(uint16_t heading) { |
if (heading > 23 && heading < 68) { |
//direction = "NE"; |
return 0; |
} else if (heading > 67 && heading < 113) { |
//direction = "E "; |
return 1; |
} else if (heading > 112 && heading < 158) { |
//direction = "SE"; |
return 2; |
} else if (heading > 157 && heading < 203) { |
//direction = "S "; |
return 3; |
} else if (heading > 202 && heading < 248) { |
//direction = "SW"; |
return 4; |
} else if (heading > 247 && heading < 293) { |
//direction = "W "; |
return 5; |
} else if (heading > 292 && heading < 338) { |
//direction = "NW"; |
return 6; |
} |
//direction = "N "; |
return 7; |
} |
/** |
* convert the <heading> gotton from NC into a more |
* precise index |
*/ |
uint8_t heading_fine_conv(uint16_t heading) { |
heading = ((heading * 10) + 113) % 3600; |
return (heading / 225); |
} |
/** |
* draw a compass rose at <x>/<y> for <heading> |
*/ |
void draw_compass(uint8_t x, uint8_t y, uint16_t heading) { |
//char* rose = "---N---O---S---W---N---O---S---W---N---O---S---W"; |
static char rose[48] PROGMEM = {216, 215, 216, 211, 216, 215, 216, 213, 216, 215, 216, 212, |
216, 215, 216, 214, 216, 215, 216, 211, 216, 215, 216, 213, |
216, 215, 216, 212, 216, 215, 216, 214, 216, 215, 216, 211, |
216, 215, 216, 213, 216, 215, 216, 212, 216, 215, 216, 214}; |
// the center is char 19 (north), we add the current heading in 8th |
// which would be 22.5 degrees, but float would bloat up the code |
// and *10 / 225 would take ages... so we take the uncorrect way |
uint8_t front = 19 + (heading / 22); |
for (uint8_t i = 0; i < 9; i++) { |
write_char_xy(x++, y, pgm_read_byte(&rose[front - 4 + i])); |
} |
} |
/* ########################################################################## |
* battery index |
* ##########################################################################*/ |
/** |
* draw a battery symbol at <x>/<y> according to <voltage> |
*/ |
void draw_battery(uint8_t x, uint8_t y, uint8_t min_voltage, uint8_t voltage, uint8_t max_voltage) { |
uint8_t percent = (100* (voltage - min_voltage) / (max_voltage - min_voltage)); |
if (percent > 100) percent = 100; |
if (voltage < min_voltage) percent = 0; |
write_char_xy(x, y, 0x9d - (percent * 13 / 100)); |
//write_ndigit_number_u(x, y-1, percent * 13 / 100, 100, 0); |
} |
/* ########################################################################## |
* variometer |
* ##########################################################################*/ |
/** |
* draw variometer arrows at <x>/<y> according to <variometer> |
*/ |
void draw_variometer(uint8_t x, uint8_t y, int16_t variometer) { |
if (variometer == 0) { |
write_char_xy(x, y, 0xbb); // plain line |
} else if (variometer > 0) { // gain height |
switch (variometer / 5){ |
case 0: |
//write_char_xy(x, y, 0xba); // smallest arrow up |
write_char_xy(x, y, 0x70); // one arrow up |
break; |
case 1: |
//write_char_xy(x, y, 0xb9); // small arrow up |
write_char_xy(x, y, 0x71); // two arrows up |
break; |
case 2: |
//write_char_xy(x, y, 0xb8); // large arrow up |
write_char_xy(x, y, 0x72); // three arrows up |
break; |
default: |
//write_char_xy(x, y, 0xb7); // largest arrow up |
write_char_xy(x, y, 0x73); // three black arrows up |
} |
} else { // sink |
switch (variometer / -5){ |
case 0: |
//write_char_xy(x, y, 0xbc); // smallest arrow down |
write_char_xy(x, y, 0x77); // one arrow down |
break; |
case 1: |
//write_char_xy(x, y, 0xbd); // small arrow down |
write_char_xy(x, y, 0x76); // two arrows down |
break; |
case 2: |
//write_char_xy(x, y, 0xbe); // large arrow down |
write_char_xy(x, y, 0x75); // three arrows down |
break; |
default: |
//write_char_xy(x, y, 0xbf); // largest arrow down |
write_char_xy(x, y, 0x74); // three black arrows down |
} |
} |
} |
// big vario arrays |
const char vario_00[5] PROGMEM = {0x00, 0x00, 0xc2, 0xff, 0xff}; |
const char vario_01[5] PROGMEM = {0x00, 0x00, 0xc2, 0xff, 0xc0}; |
const char vario_02[5] PROGMEM = {0x00, 0x00, 0xc2, 0xff, 0xc1}; |
const char vario_03[5] PROGMEM = {0x00, 0x00, 0xc2, 0xff, 0x00}; |
const char vario_04[5] PROGMEM = {0x00, 0x00, 0xc2, 0xc0, 0x00}; |
const char vario_05[5] PROGMEM = {0x00, 0x00, 0xc2, 0xc1, 0x00}; |
const char vario_06[5] PROGMEM = {0x00, 0x00, 0xc2, 0x00, 0x00}; |
const char vario_07[5] PROGMEM = {0x00, 0x00, 0xbb, 0x00, 0x00}; |
const char vario_08[5] PROGMEM = {0x00, 0x00, 0xc3, 0x00, 0x00}; |
const char vario_09[5] PROGMEM = {0x00, 0xc4, 0xc3, 0x00, 0x00}; |
const char vario_10[5] PROGMEM = {0x00, 0xc5, 0xc3, 0x00, 0x00}; |
const char vario_11[5] PROGMEM = {0x00, 0xff, 0xc3, 0x00, 0x00}; |
const char vario_12[5] PROGMEM = {0xc4, 0xff, 0xc3, 0x00, 0x00}; |
const char vario_13[5] PROGMEM = {0xc5, 0xff, 0xc3, 0x00, 0x00}; |
const char vario_14[5] PROGMEM = {0xff, 0xff, 0xc3, 0x00, 0x00}; |
const char* vario_pnt[15] PROGMEM = {vario_00, vario_01, vario_02, vario_03, vario_04, |
vario_05, vario_06, vario_07, vario_08, |
vario_09, vario_10, vario_11, vario_12, |
vario_13, vario_14}; |
/** |
* draw a bigger vario with middle at <x>/<y> acording to <variometer> |
*/ |
void draw_big_variometer(uint8_t x, uint8_t y, int16_t variometer) { |
int16_t index = 7 + variometer; |
if (index > 14) index = 14; |
else if (index < 0) index = 0; |
write_string_pgm_down(x, y-2, (const char *) (pgm_read_word ( &(vario_pnt[index]))), 5); |
} |
#if (NEW_ARTHORIZON == 1) |
/* ########################################################################## |
* NEW artificial horizon By AGRESSiVA --=-- COPTERTRONiC |
* ##########################################################################*/ |
// draw routine |
int draw_noodles(int8_t pos_x, int8_t pos_y, int8_t num, int8_t old_num) { |
char noodle[5] = {225, 226, 227, 228, 229}; |
int8_t line,car; |
line = num / 5; |
car = num - (line * 5); |
if (num != old_num) { |
write_char_xy(15 - pos_x , pos_y + (old_num), 0); |
} |
if (num < 0) {car = -1* car; car = 4 - car; line--; num = num - 5;} |
write_char_xy(15 - pos_x , pos_y + line, noodle[car]); |
return line; |
} |
/** |
* calculate the rails of artificial horizon |
* receive <nick> and <roll> values |
*/ |
void draw_artificial_horizon(uint8_t firstline, uint8_t lastline, int16_t nick, int16_t roll) { |
static int8_t old_ticy = 1,old_ticx = 0; |
static int8_t old1 = 0,old2 = 0,old3 = 0,old4, old5 = 0, old6 = 0,old7 = 0,old8 = 0; |
int8_t ticy = 0, ticx = 0; |
uint8_t center_x = 15; |
uint8_t center_y = lastline - firstline; |
center_y = 7; |
write_char_xy(center_x - 7 ,center_y,226); |
write_char_xy(center_x + 6 ,center_y,226); |
#if FCONLY |
ticy = -1*(roll / 10); // rescale roll from FC debug data |
ticx = -1*(nick * 10); // rescale nick from FC debug data |
#else |
ticy = -1*(roll / 2); |
ticx = -1*(nick / 1); |
#endif |
if (ticy >= 30) ticy = 30; // limit y |
if (ticx >= 30) ticx = 30; // limit x |
//write_ndigit_number_u (0 , 5 , ticy ,3, 1); |
//write_ndigit_number_u (0 , 6 , ticx ,3, 1); |
if ((ticy != old_ticy) || (ticx != old_ticx)) { |
old1 = draw_noodles( 4, 3, (ticy / 2) + 20 + ticx, old1); |
old2 = draw_noodles( 3, 3, (ticy / 3) + 20 + ticx, old2); |
old3 = draw_noodles( 2, 3, (ticy / 6) + 20 + ticx, old3); |
old4 = draw_noodles( 1, 3, (ticy / 14) + 20 + ticx, old4); |
old5 = draw_noodles( - 3, 3, -(ticy / 2) + 20 + ticx, old5); |
old6 = draw_noodles( - 2, 3, -(ticy / 3) + 20 + ticx, old6); |
old7 = draw_noodles( - 1, 3, -(ticy / 6) + 20 + ticx, old7); |
old8 = draw_noodles( 0, 3, -(ticy / 14) + 20 + ticx, old8); |
} |
// update old vars |
old_ticy = ticy; |
old_ticx = ticx; |
} |
// end NEW ARTiFiCiAL HORiZON |
#else |
/* ########################################################################## |
* OLD artificial horizon |
* ##########################################################################*/ |
// remember last time displayed values |
int8_t old_af_x = -1, old_af_y = -1; |
/** |
* draw roll und nick indicators (could be enhanced to full artificial horizon) |
* from line <firstline> to <listlines> for given <nick> and <roll> values |
*/ |
void draw_artificial_horizon(uint8_t firstline, uint8_t lastline, int16_t nick, int16_t roll) { |
char noodle[5] = {225, 225, 226, 227, 227}; |
uint8_t center_x = 15; |
uint8_t center_y = lastline - firstline; |
center_y = 7; |
write_char_xy(center_x,center_y,228); |
uint8_t cpos, nicky, rollx; |
// which line |
int8_t ypos = nick / 20; |
// which character from the array? |
if (nick < 0) { |
cpos = -1*((nick - (ypos * 20))/4); |
ypos--; |
} else cpos = 4-((nick - (ypos * 20))/4); |
if (cpos > 4) cpos = 4; |
nicky = center_y - ypos; |
if (nicky > lastline) nicky = lastline; |
else if (nicky < firstline) nicky = firstline; |
// ensure roll-borders |
rollx = (roll / 8)+15; |
if (rollx < 2) rollx = 2; |
else if (rollx > 28) rollx = 28; |
// clear roll |
if (old_af_x != rollx && old_af_x >= 0) { |
write_char_xy(old_af_x, lastline, 0); |
} |
// clear nick |
if (old_af_y != nicky && old_af_y >= 0) { |
write_char_xy(center_x-1, old_af_y, 0); |
write_char_xy(center_x+1, old_af_y, 0); |
} |
// draw nick |
write_char_xy(center_x-1, nicky, noodle[cpos]); |
write_char_xy(center_x+1, nicky, noodle[cpos]); |
// draw roll |
write_char_xy(rollx, lastline, 229); |
// update old vars |
old_af_x = rollx; |
old_af_y = nicky; |
// debug numbers |
//write_3digit_number_u(20,6,cpos); |
//write_number_s(20,7,ypos); |
//write_number_s(0,7,nick); |
//write_number_s(18,11,roll); |
} |
#endif //old artificial horizon |
#endif // debug |
/C-OSD/trunk/C-OSD AGRESSiVA mod/osd_helpers.h |
---|
0,0 → 1,69 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
/* ########################################################################## |
* compass stuff |
* ##########################################################################*/ |
/** |
* convert the <heading> gotton from NC into an index |
*/ |
uint8_t heading_conv(uint16_t); |
/** |
* convert the <heading> gotton from NC into a more |
* precise index |
*/ |
uint8_t heading_fine_conv(uint16_t ); |
/** |
* draw a compass rose at <x>/<y> for <heading> |
*/ |
void draw_compass(uint8_t, uint8_t, uint16_t); |
/* ########################################################################## |
* battery index |
* ##########################################################################*/ |
/** |
* draw a battery symbol at <x>/<y> according to <voltage> |
*/ |
void draw_battery(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t); |
/* ########################################################################## |
* variometer |
* ##########################################################################*/ |
/** |
* draw variometer arrows at <x>/<y> according to <variometer> |
*/ |
void draw_variometer(uint8_t, uint8_t, int16_t); |
/** |
* draw a bigger vario with middle at <x>/<y> acording to <variometer> |
*/ |
void draw_big_variometer(uint8_t, uint8_t, int16_t); |
/* ########################################################################## |
* artificial horizon |
* ##########################################################################*/ |
/** |
* draw roll und nick indicators (could be enhanced to full artificial horizon) |
* from line <firstline> to <listlines> for given <nick> and <roll> values |
*/ |
void draw_artificial_horizon(uint8_t, uint8_t, int16_t, int16_t); |
/C-OSD/trunk/C-OSD AGRESSiVA mod/osd_ncmode_default.c |
---|
0,0 → 1,262 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include "main.h" |
#include "max7456_software_spi.h" |
#include "osd_helpers.h" |
#include "osd_ncmode_default.h" |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
int osd_ncmode_default() { |
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) { |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
write_char_xy(5, top_line, 0xCB); // km/h |
write_char_xy(10, top_line, 0xCA); // RC-transmitter |
write_char_xy(16, top_line, 0xD0); // degree symbol |
write_char_xy(27, top_line, 0xCC); // small meters m height |
write_char_xy(20, top_line + 1, 0xB0); // left circle |
write_char_xy(22, top_line + 1, 0xB2); // right circle |
write_char_xy(27, top_line + 1, 0xCC); // small meters m home |
write_char_xy(7, bottom_line, 0x9E); // small V |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) || (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
write_char_xy(7, bottom_line - 1, 0x9F); // small A |
write_char_xy(14, bottom_line - 1, 0xB5); // mah |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
write_char_xy(21, bottom_line - 1, 0x9E); // small V |
} |
} |
write_char_xy(14, bottom_line, 0xD1); // on clock |
write_char_xy(21, bottom_line, 0xD2); // fly clock |
write_char_xy(26, bottom_line, 0xC8); // sat1 |
write_char_xy(27, bottom_line, 0xC9); // sat2 |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
} |
// first line |
write_ndigit_number_u(2, top_line, (uint16_t) (((uint32_t) naviData.GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
write_ndigit_number_u(7, top_line, naviData.RC_Quality, 3, 0); |
if (naviData.RC_Quality <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (naviData.RC_Quality > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, 0); |
} |
if (naviData.NCFlags & NC_FLAG_NOSERIALLINK) { |
write_char_xy(11, top_line, 0); // clear |
} else { |
write_char_xy(11, top_line, 0xC6); // PC icon |
} |
write_ndigit_number_u(13, top_line, naviData.CompassHeading, 3, 0); |
write_ascii_string_pgm(17, top_line, (const char *) (pgm_read_word ( &(directions[heading_conv(naviData.CompassHeading)])))); |
draw_variometer(21, top_line, naviData.Variometer); |
if (COSD_FLAGS_CONFIG & COSD_FLAG_GPSHEIGHT) { |
if (naviData.CurrentPosition.Altitude / 1000 - altimeter_offset > 10 || naviData.CurrentPosition.Altitude / 1000 - altimeter_offset < -10) { |
// above 10m only write full meters |
write_ndigit_number_s(23, top_line, (int16_t) (naviData.CurrentPosition.Altitude / 1000 - altimeter_offset), 4, 0); // GPS |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(23, top_line, (int16_t) (naviData.CurrentPosition.Altitude / 100 - altimeter_offset * 10), 3, 0); // GPS |
} |
} else { |
//note:lephisto:according to several sources it's /30 |
if (naviData.Altimeter > 300 || naviData.Altimeter < -300) { |
// above 10m only write full meters |
write_ndigit_number_s(23, top_line, naviData.Altimeter / 30, 4, 0); // BARO |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(23, top_line, naviData.Altimeter / 3, 3, 0); // BARO |
} |
} |
+ |
+ // seccond line |
+ draw_compass(11, top_line + 1, naviData.CompassHeading); |
+ |
+ // TODO: verify correctness |
+ uint16_t heading_home = (naviData.HomePositionDeviation.Bearing + 360 - naviData.CompassHeading) % 360; |
+ //write_char_xy(21, top_line + 1, arrowdir[heading_conv(heading_home)]); |
+ // finer resolution, 0xa0 is first character and we add the index 0 <= index < 16 |
+ write_char_xy(21, top_line + 1, 0xa0 + heading_fine_conv(heading_home)); |
+ |
+ write_ndigit_number_u(24, top_line + 1, naviData.HomePositionDeviation.Distance / 10, 3, 0); |
+ |
+ // center |
+ if (naviData.FCFlags & FLAG_MOTOR_RUN) { // should be engines running |
+ if (!(old_MKFlags & FLAG_MOTOR_RUN)) { // motors just started, clear middle |
+ clear(); |
+ // remember current heigth for gps offset |
+ altimeter_offset = naviData.CurrentPosition.Altitude / 1000; |
+ // set wasted counter to current offset |
+ if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
+ wasted_ampere_offset = ampere_wasted / 10; |
+ } else if (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT) { |
+ wasted_ampere_offset = naviData.UsedCapacity; |
+ } |
+ // update flags to paint display again if needed |
+ COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN; |
+ } |
+ if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { |
+ if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
+ draw_artificial_horizon(top_line + 2, bottom_line - 2, naviData.AngleNick, naviData.AngleRoll); |
+ } else { |
+ draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
+ } |
+ } |
+ // motors are on, assume we were/are flying |
+ COSD_FLAGS_RUNTIME |= COSD_WASFLYING; |
+ } else { |
+ // stats |
+ if ((COSD_FLAGS_RUNTIME & COSD_WASFLYING) && (COSD_FLAGS_MODES & COSD_FLAG_STATS)) { |
+ uint8_t line = 3; |
+ write_ascii_string_pgm(1, line, (const char *) (pgm_read_word(&(stats_item_pointers[0])))); // max Altitude |
+ write_ndigit_number_s(16, line, max_Altimeter, 4, 0); |
+ write_char_xy(20, line, 204); // small meters m |
+ write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[1])))); // max Speed |
+ write_ndigit_number_u(17, line, (uint16_t) (((uint32_t) max_GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
+ write_char_xy(20, line, 203); // km/h |
+ write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[2])))); // max Distance |
+ write_ndigit_number_u(17, line, max_Distance / 10, 3, 0); |
+ write_char_xy(20, line, 204); // small meters m |
+ write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[3])))); // min voltage |
+ write_ndigit_number_u_10th(16, line, min_UBat, 3, 0); |
+ write_char_xy(20, line, 0x9E); // small V |
+ if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) || (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
+ write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[7])))); // ampere |
+ write_ndigit_number_u_10th(16, line, max_ampere / 10, 3, 0); |
+ write_char_xy(20, line, 0x9F); // small A |
+ |
+ // wasted mampere in this flight (will count up after landing) |
+ if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
+ write_ndigit_number_u(21, line, (ampere_wasted / 10) - wasted_ampere_offset, 5, 0); |
+ } else if (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT) { |
+ |
+ write_ndigit_number_u(21, line, naviData.UsedCapacity - wasted_ampere_offset, 5, 0); |
+ } |
+ |
+ write_char_xy(26, line, 0xB5); // mah |
+ } |
+ write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[4])))); // max time |
+ write_time(14, line, max_FlyingTime); |
+ write_char_xy(20, line, 210); // fly clock |
+ write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[5])))); // longitude |
+ write_gps_pos(14, line, naviData.CurrentPosition.Longitude); |
+ write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[6])))); // latitude |
+ write_gps_pos(14, line, naviData.CurrentPosition.Latitude); |
+ } else if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { // if no stats there is space horizon |
+ if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) || (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
+ draw_artificial_horizon(top_line + 2, bottom_line - 2, naviData.AngleNick, naviData.AngleRoll); |
+ } else { |
+ draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
+ } |
+ } |
+ } |
+ if (COSD_FLAGS_MODES & COSD_FLAG_BIGVARIO) { |
+ draw_big_variometer(27, 8, naviData.Variometer); |
+ } |
+ |
+ // pre-bottom line |
+ if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
+ //write_ndigit_number_s(3, bottom_line - 1, ampere, 4, 0); |
+ write_ndigit_number_u_10th(3, bottom_line - 1, ampere / 10, 3, 0); |
+ write_ndigit_number_s(10, bottom_line - 1, ampere_wasted / 10, 4, 0); |
+ if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
+ write_ndigit_number_u_10th(17, bottom_line - 1, s_volt, 3, 0); |
+ } |
+ } else if (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT) { |
+ write_ndigit_number_u_10th(3, bottom_line - 1, naviData.Current, 3, 0); |
+ write_ndigit_number_u(10, bottom_line - 1, naviData.UsedCapacity, 4, 0); |
+ } |
+ |
+ //DEBUGwrite_ndigit_number_u(1, 5, COSD_FLAGS_MODES, 3, 0); |
+ |
+ // bottom line |
+ draw_battery(2, bottom_line, min_voltage, naviData.UBat, max_voltage); |
+ write_ndigit_number_u_10th(3, bottom_line, naviData.UBat, 3, 0); |
+ if (naviData.UBat <= min_voltage && last_UBat > min_voltage) { |
+ for (uint8_t x = 2; x < 8; x++) |
+ write_char_att_xy(x, bottom_line, BLINK); |
+ } else if (naviData.UBat > min_voltage && last_UBat < min_voltage) { |
+ for (uint8_t x = 2; x < 8; x++) |
+ write_char_att_xy(x, bottom_line, 0); |
+ } |
+ |
+ write_time(8, bottom_line, uptime); |
+ write_time(15, bottom_line, naviData.FlyingTime); |
+ |
+ write_ndigit_number_u(24, bottom_line, naviData.SatsInUse, 2, 0); |
+ |
+ if (naviData.NCFlags & NC_FLAG_MANUAL_CONTROL) { |
+ write_char_xy(23, bottom_line, 0xB3); // rc transmitter |
+ } else { |
+ write_char_xy(23, bottom_line, 0); // clear |
+ } |
+ |
+ if (naviData.NCFlags & NC_FLAG_CH) { |
+ write_char_xy(27, bottom_line, 231); // gps ch |
+ } else if (naviData.NCFlags & NC_FLAG_PH) { |
+ write_char_xy(27, bottom_line, 230); // gps ph |
+ } else { // (naviData.NCFlags & NC_FLAG_FREE) |
+ write_char_xy(27, bottom_line, 201); // sat2 (free) |
+ } |
+ } |
+ |
+ //write_number_s(8, 5, RxDataLen); |
+ //write_number_s(16, 5, setsReceived++); |
+ |
+ // remember statistics (only when engines running) |
+ if (naviData.FCFlags & FLAG_MOTOR_RUN) { |
+ if (COSD_FLAGS_CONFIG & COSD_FLAG_GPSHEIGHT) { |
+ if (naviData.CurrentPosition.Altitude / 1000 - altimeter_offset > max_Altimeter) max_Altimeter = naviData.CurrentPosition.Altitude / 1000; |
+ } else { |
+ if (naviData.Altimeter / 30 > max_Altimeter) max_Altimeter = naviData.Altimeter / 30; |
+ } |
+ if (naviData.GroundSpeed > max_GroundSpeed) max_GroundSpeed = naviData.GroundSpeed; |
+ if (naviData.HomePositionDeviation.Distance > max_Distance) { |
+ max_Distance = naviData.HomePositionDeviation.Distance; |
+ } |
+ if (naviData.UBat < min_UBat) min_UBat = naviData.UBat; |
+ if (naviData.FlyingTime > max_FlyingTime) max_FlyingTime = naviData.FlyingTime; |
+ if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
+ if (ampere > max_ampere) max_ampere = ampere; |
+ } else if (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT) { |
+ if (naviData.Current * 10 > max_ampere) max_ampere = naviData.Current * 10; |
+ } |
+ } |
+ |
+ // remember last values |
+ last_RC_Quality = naviData.RC_Quality; |
+ last_UBat = naviData.UBat; |
+ old_MKFlags = naviData.FCFlags; |
+ seconds_since_last_data = 0; |
+ |
+ return 0; |
+} |
+ |
+#endif |
/C-OSD/trunk/C-OSD AGRESSiVA mod/osd_ncmode_default.h |
---|
0,0 → 1,21 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
int osd_ncmode_default(void); |
/C-OSD/trunk/C-OSD AGRESSiVA mod/osd_ncmode_minimal.c |
---|
0,0 → 1,171 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include "main.h" |
#include "max7456_software_spi.h" |
#include "osd_helpers.h" |
#include "osd_ncmode_default.h" |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
int osd_ncmode_minimal() { |
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) { |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
write_char_xy(4, top_line, 0xCB); // km/h |
write_char_xy(15, top_line, 0xCC); // small meters m height |
write_char_xy(26, top_line, 0xCC); // small meters m height |
write_char_xy(16, top_line, 0xB0); // left circle |
write_char_xy(18, top_line, 0xB2); // right circle |
write_char_xy(7, bottom_line, 0x9E); // small V |
write_char_xy(17, bottom_line, 0xD2); // fly clock |
write_char_xy(26, bottom_line, 0xC8); // sat1 |
write_char_xy(27, bottom_line, 0xC9); // sat2 |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
} |
// first line |
write_ndigit_number_u(1, top_line, (uint16_t) (((uint32_t) naviData.GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
write_ndigit_number_u(12, top_line, naviData.HomePositionDeviation.Distance / 10, 3, 0); |
uint16_t heading_home = (naviData.HomePositionDeviation.Bearing + 360 - naviData.CompassHeading) % 360; |
write_char_xy(17, top_line, 0xa0 + heading_fine_conv(heading_home)); |
if (naviData.Altimeter > 300 || naviData.Altimeter < -300) { |
// above 10m only write full meters |
write_ndigit_number_s(22, top_line, naviData.Altimeter / 30, 4, 0); |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(22, top_line, naviData.Altimeter / 3, 3, 0); |
} |
draw_variometer(27, top_line, naviData.Variometer); |
// center |
if (naviData.FCFlags & FLAG_MOTOR_RUN) { // should be engines running |
if (!(old_MKFlags & FLAG_MOTOR_RUN)) { // motors just started, clear middle |
clear(); |
// update flags to paint display again if needed |
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN; |
} |
if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
draw_artificial_horizon(top_line + 2, bottom_line - 2, naviData.AngleNick, naviData.AngleRoll); |
} else { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
} |
} |
// motors are on, assume we were/are flying |
COSD_FLAGS_RUNTIME |= COSD_WASFLYING; |
} else { |
// stats |
if ((COSD_FLAGS_RUNTIME & COSD_WASFLYING) && (COSD_FLAGS_MODES & COSD_FLAG_STATS)) { |
uint8_t line = 3; |
write_ascii_string_pgm(2, line, (const char *) (pgm_read_word(&(stats_item_pointers[0])))); // max Altitude |
write_ndigit_number_s(18, line, max_Altimeter / 30, 4, 0); |
write_char_xy(22, line, 204); // small meters m |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[1])))); // max Speed |
write_ndigit_number_u(19, line, (uint16_t) (((uint32_t) max_GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
write_char_xy(22, line, 203); // km/h |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[2])))); // max Distance |
write_ndigit_number_u(19, line, max_Distance / 10, 3, 0); |
write_char_xy(22, line, 204); // small meters m |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[3])))); // min voltage |
write_ndigit_number_u_10th(18, line, min_UBat, 3, 0); |
write_char_xy(22, line, 0x9E); // small V |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[7])))); // ampere |
write_ndigit_number_u_10th(18, line, max_ampere / 10, 3, 0); |
write_char_xy(22, line, 0x9F); // small A |
} |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[4])))); // max time |
write_time(16, line, max_FlyingTime); |
write_char_xy(22, line, 210); // fly clock |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[5])))); // longitude |
write_gps_pos(15, line, naviData.CurrentPosition.Longitude); |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[6])))); // latitude |
write_gps_pos(15, line, naviData.CurrentPosition.Latitude); |
} else if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { // if no stats there is space horizon |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
draw_artificial_horizon(top_line + 2, bottom_line - 2, naviData.AngleNick, naviData.AngleRoll); |
} else { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
} |
} |
} |
if (COSD_FLAGS_MODES & COSD_FLAG_BIGVARIO) { |
draw_big_variometer(27, 8, naviData.Variometer); |
} |
// pre-bottom line |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
//write_ndigit_number_s(3, bottom_line - 1, ampere, 4, 0); |
write_ndigit_number_u_10th(3, bottom_line - 1, ampere / 10, 3, 0); |
write_ndigit_number_s(10, bottom_line - 1, ampere_wasted / 10, 4, 0); |
} |
// bottom line |
draw_battery(2, bottom_line, min_voltage, naviData.UBat, max_voltage); |
write_ndigit_number_u_10th(3, bottom_line, naviData.UBat, 3, 0); |
if (naviData.UBat <= min_voltage && last_UBat > min_voltage) { |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
} else if (naviData.UBat > min_voltage && last_UBat < min_voltage) { |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, 0); |
} |
write_time(11, bottom_line, naviData.FlyingTime); |
write_ndigit_number_u(24, bottom_line, naviData.SatsInUse, 2, 0); |
if (naviData.NCFlags & NC_FLAG_CH) { |
write_char_xy(27, bottom_line, 231); // gps ch |
} else if (naviData.NCFlags & NC_FLAG_PH) { |
write_char_xy(27, bottom_line, 230); // gps ph |
} else { // (naviData.NCFlags & NC_FLAG_FREE) |
write_char_xy(27, bottom_line, 201); // sat2 (free) |
} |
} |
// remember statistics (only when engines running) |
if (naviData.FCFlags & FLAG_MOTOR_RUN) { |
if (naviData.Altimeter > max_Altimeter) max_Altimeter = naviData.Altimeter; |
if (naviData.GroundSpeed > max_GroundSpeed) max_GroundSpeed = naviData.GroundSpeed; |
if (naviData.HomePositionDeviation.Distance > max_Distance) { |
max_Distance = naviData.HomePositionDeviation.Distance; |
} |
if (naviData.UBat < min_UBat) min_UBat = naviData.UBat; |
if (naviData.FlyingTime > max_FlyingTime) max_FlyingTime = naviData.FlyingTime; |
if (ampere > max_ampere) max_ampere = ampere; |
} |
// remember last values |
last_RC_Quality = naviData.RC_Quality; |
last_UBat = naviData.UBat; |
old_MKFlags = naviData.FCFlags; |
seconds_since_last_data = 0; |
return 0; |
} |
#endif |
/C-OSD/trunk/C-OSD AGRESSiVA mod/osd_ncmode_minimal.h |
---|
0,0 → 1,21 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
int osd_ncmode_minimal(void); |
/C-OSD/trunk/C-OSD AGRESSiVA mod/ppm.c |
---|
0,0 → 1,72 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include "ppm.h" |
#include "main.h" |
#include "max7456_software_spi.h" // clearing |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
volatile uint16_t old_timer1 = 0, ppm = 0; |
/** |
* init ppm, including timer1 for measurement |
*/ |
void ppm_init() { |
PORTE |= (1 << PORTE0); // enable pullup on INT0 pin |
GICR |= (1<<INT2); // External Interrupt Request 2 Enable |
EMCUCR |= (1<<ISC2); // a rising edge on INT2 activates the interrupt |
TCCR1B |= (0<<CS12)|(1<<CS10)|(1<<CS11); // timer1 up with prescaler 64 |
} |
/** |
* Handle INT2 interrupts that occur on changing edges of ppm signal |
*/ |
ISR(INT2_vect) { |
// since the pin might get bogus reads we wait for 123 signals |
static uint8_t valid_ppm_to_go = 123; |
if (EMCUCR & (1<<ISC2)) { // rising |
old_timer1 = TCNT1; |
EMCUCR &= ~(1<<ISC2); // next one is falling |
} else { |
if (valid_ppm_to_go) { |
valid_ppm_to_go--; |
} else { |
ppm = TCNT1 - old_timer1; |
ppm -= 256; |
if (ppm < 128) { // we want HUD |
COSD_FLAGS_CONFIG |= COSD_FLAG_HUD; |
} else { // we do not want hud |
if (COSD_FLAGS_CONFIG & COSD_FLAG_HUD) { |
clear(); |
} |
COSD_FLAGS_CONFIG &= ~COSD_FLAG_HUD; |
} |
} |
EMCUCR |= (1<<ISC2); // next one is rising |
} |
//write_ndigit_number_u(2, 2, ppm, 1000, 0); // debug |
//write_ndigit_number_u(2, 3, valid_ppm_to_go, 100, 0); // debug |
//write_ndigit_number_u(2, 4, COSD_FLAGS, 100, 0); // debug |
} |
#endif |
/C-OSD/trunk/C-OSD AGRESSiVA mod/ppm.h |
---|
0,0 → 1,31 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
extern uint8_t COSD_FLAGS, COSD_FLAGS2; |
/** |
* init ppm, including timer1 for measurement |
*/ |
void ppm_init(); |
/** |
* Handle INT2 interrupts that occur on changing edges of ppm signal |
*/ |
ISR(INT2_vect); |
/C-OSD/trunk/C-OSD AGRESSiVA mod/spi.c |
---|
0,0 → 1,103 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include "spi.h" |
#include "main.h" |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
volatile uint16_t icnt = 0; |
volatile uint8_t request_count = 0; |
volatile uint8_t spi_ready = 1; |
volatile union SPI_buffer_t SPI_buffer; |
int16_t ampere = 0, max_ampere = 0, s_volt; |
int32_t ampere_wasted = 0; |
#define INT0_HIGH PORTD |= (1 << PD2); |
#define INT0_LOW PORTD &= ~(1 << PD2); |
/** |
* init the SPI as master |
*/ |
void SpiMasterInit(void) { |
volatile char IOReg; |
// set PB4(/SS), PB5(MOSI), PB7(SCK) as output |
DDRB = (1 << PB4) | (1 << PB5) | (1 << PB7); |
PORTB |= (1 << PB4); // pullup SS |
// enable SPI Interrupt and SPI in Master Mode with SCK = CK/128 |
SPCR = (1 << SPIE) | (1 << SPE) | (1 << MSTR) | (1 << SPR0) | (1 << SPR1); |
IOReg = SPSR; // clear SPIF bit in SPSR |
IOReg = SPDR; |
//sei(); // we do it later |
} |
/** |
* SPI interrupt handler |
*/ |
ISR(SPI_STC_vect) { |
if (request_count == 0) { |
SPI_buffer.buffer.chk = SPDR; // firs char received is check byte from last transfer |
} else { |
SPI_buffer.buffer.c[request_count - 1] = SPDR; // safe received byte to buffer |
} |
request_count++; |
if (--icnt) { |
//SPDR = *iptr; // send next byte |
spi_ready = 1; // we _should_ send later because the slave needs more time |
} else { |
SPCR &= ~_BV(SPIE); // deactivate interrupt |
INT0_HIGH // transfer is done, slave does not need to listen |
} |
} |
/** |
* check if SPI transfer is still busy |
*/ |
int TransferIsBusy(void) { |
return SPCR & _BV(SPIE); |
} |
/** |
* start a new transfer with length <len> |
*/ |
void StartTransfer(uint16_t len) { |
INT0_LOW // /SS LOW ^= SS HIGH ^= slave should listen |
// this is a new request |
request_count = 0; |
// set up pointer and length for interrupt handler |
icnt = len; |
SPCR |= _BV(SPIE); // enable spi interrupt |
SPDR = 'A'; // start transfer by first command char |
} |
/** |
* send next command through spi |
*/ |
void spi_send_next() { |
SPDR = 'A' + request_count; |
} |
#endif |
/C-OSD/trunk/C-OSD AGRESSiVA mod/spi.h |
---|
0,0 → 1,65 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
/* |
* structs 'n union for easy SPI transfer |
*/ |
typedef struct { |
int16_t ampere; |
int32_t mah; |
int16_t volt; |
} __attribute__((packed)) SPI_strom_data_t; |
typedef struct { |
uint8_t c[10]; |
uint8_t chk; |
} __attribute__((packed)) SPI_char_buffer_t; |
union SPI_buffer_t { |
SPI_strom_data_t data; |
SPI_char_buffer_t buffer; |
}; |
volatile union SPI_buffer_t SPI_buffer; |
/** |
* SPI interrupt handler |
*/ |
ISR(SPI_STC_vect); |
/** |
* init the SPI as master |
*/ |
void SpiMasterInit(void); |
/** |
* check if SPI transfer is still busy |
*/ |
int TransferIsBusy(void); |
/** |
* start a new transfer with length <len> |
*/ |
void StartTransfer(uint16_t); |
/** |
* send next command through spi |
*/ |
void spi_send_next(); |
/C-OSD/trunk/C-OSD AGRESSiVA mod/usart1.c |
---|
0,0 → 1,279 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <util/delay.h> |
#include "main.h" |
#include "usart1.h" |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
volatile uint8_t rxd_buffer_locked = 0; |
volatile uint8_t rxd_buffer[RXD_BUFFER_LEN]; |
volatile uint8_t txd_buffer[TXD_BUFFER_LEN]; |
volatile uint8_t ReceivedBytes = 0; |
volatile uint8_t *pRxData = 0; |
volatile uint8_t RxDataLen = 0; |
/* ########################################################################## |
* USART stuff |
* ##########################################################################*/ |
/** |
* init usart1 |
*/ |
void usart1_init() { |
UBRR1H = ((F_CPU / (16UL * baud)) - 1) >> 8; |
UBRR1L = (F_CPU / (16UL * baud)) - 1; |
// Enable receiver and transmitter; enable RX interrupt |
UCSR1B = (1 << RXEN1) | (1 << TXEN1) | (1 << RXCIE1); |
//asynchronous 8N1 |
UCSR1C = (1 << URSEL1) | (3 << UCSZ10); |
} |
/** |
* disable the txd pin of usart1 |
*/ |
void usart1_DisableTXD(void) { |
UCSR1B &= ~(1 << TXCIE1); // disable TX-Interrupt |
UCSR1B &= ~(1 << TXEN1); // disable TX in USART |
DDRB &= ~(1 << DDB3); // set TXD pin as input |
PORTB &= ~(1 << PORTB3); // disable pullup on TXD pin |
} |
/** |
* enable the txd pin of usart1 |
*/ |
void usart1_EnableTXD(void) { |
DDRB |= (1 << DDB3); // set TXD pin as output |
PORTB &= ~(1 << PORTB3); // disable pullup on TXD pin |
UCSR1B |= (1 << TXEN1); // enable TX in USART |
UCSR1B |= (1 << TXCIE1); // enable TX-Interrupt |
} |
/** |
* send a single <character> through usart1 |
*/ |
void usart1_putc(unsigned char character) { |
// wait until UDR ready |
while (!(UCSR1A & (1 << UDRE1))); |
UDR1 = character; |
} |
/** |
* send a <string> throught usart1 |
*/ |
/*void usart1_puts(char *s) { |
while (*s) { |
usart1_putc(*s); |
s++; |
} |
}*/ |
/** |
* send a PGM<string> throught usart1 |
*/ |
void usart1_puts_pgm(const char* string) { |
while (pgm_read_byte(string) != 0x00) |
usart1_putc(pgm_read_byte(string++)); |
} |
/** |
* transmit interrupt handler |
* unused |
*/ |
ISR(SIG_USART1_DATA) { |
} |
/* |
* receive data through usart1 |
* portions taken and adapted from |
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Fbranches%2FV0.72p+Code+Redesign+killagreg%2Fuart0.c |
*/ |
ISR(SIG_USART1_RECV) { |
uint8_t c; |
// catch the received byte |
c = UDR1; |
if (rxd_buffer_locked) return; // if rxd buffer is locked immediately return |
static uint16_t crc; |
static uint8_t ptr_rxd_buffer = 0; |
static uint8_t c1 = 0; |
static uint8_t c2 = 0; |
static uint8_t usart_rx_ok = 0; |
uint8_t crc1, crc2; |
// the rxd buffer is unlocked |
if (usart_rx_ok == 0) { |
// if ((c2 == '#') && (c1 == 'b' || c1 == 'c') && (c == 'D' || c == 'V' || c == 'O')) { |
if ((c2 == '#') && (c1 == 'b' || c1 == 'c') && |
#if FCONLY |
(c == 'V' || c == 'D')) { // version and debug |
#else |
(c == 'V' || c == 'O')) { // version and OSD |
#endif |
usart_rx_ok = 1; |
rxd_buffer[ptr_rxd_buffer++] = c2; |
crc = c2; |
rxd_buffer[ptr_rxd_buffer++] = c1; |
crc += c1; |
rxd_buffer[ptr_rxd_buffer++] = c; |
crc += c; |
c2 = 0; |
c1 = 0; |
LED1_ON |
LED2_OFF |
} else { |
c2 = c1; |
c1 = c; |
} |
} else if (ptr_rxd_buffer < RXD_BUFFER_LEN) { // collect incomming bytes |
if (c != '\r') { // no termination character |
rxd_buffer[ptr_rxd_buffer++] = c; // copy byte to rxd buffer |
crc += c; // update crc |
} else { // termination character was received |
// the last 2 bytes are no subject for checksum calculation |
// they are the checksum itself |
crc -= rxd_buffer[ptr_rxd_buffer - 2]; |
crc -= rxd_buffer[ptr_rxd_buffer - 1]; |
// calculate checksum from transmitted data |
crc %= 4096; |
crc1 = '=' + crc / 64; |
crc2 = '=' + crc % 64; |
// compare checksum to transmitted checksum bytes |
if ((crc1 == rxd_buffer[ptr_rxd_buffer - 2]) && (crc2 == rxd_buffer[ptr_rxd_buffer - 1])) { // checksum valid |
rxd_buffer[ptr_rxd_buffer] = '\r'; // set termination character |
ReceivedBytes = ptr_rxd_buffer + 1; // store number of received bytes |
rxd_buffer_locked = 1; // lock the rxd buffer |
LED1_OFF |
} else { // checksum invalid |
rxd_buffer_locked = 0; // unlock rxd buffer |
LED2_ON |
} |
ptr_rxd_buffer = 0; // reset rxd buffer pointer |
usart_rx_ok = 0; |
} |
} else { // rxd buffer overrun |
ptr_rxd_buffer = 0; // reset rxd buffer |
rxd_buffer_locked = 0; // unlock rxd buffer |
usart_rx_ok = 0; |
LED2_ON |
} |
} |
/** |
* Decode the recevied Buffer |
* portions taken and adapted from |
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.72p%2Fuart.c |
*/ |
void Decode64(void) { |
uint8_t a, b, c, d; |
uint8_t x, y, z; |
uint8_t ptrIn = 3; |
uint8_t ptrOut = 3; |
uint8_t len = ReceivedBytes - 6; |
while (len) { |
a = rxd_buffer[ptrIn++] - '='; |
b = rxd_buffer[ptrIn++] - '='; |
c = rxd_buffer[ptrIn++] - '='; |
d = rxd_buffer[ptrIn++] - '='; |
x = (a << 2) | (b >> 4); |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
if (len--) rxd_buffer[ptrOut++] = x; |
else break; |
if (len--) rxd_buffer[ptrOut++] = y; |
else break; |
if (len--) rxd_buffer[ptrOut++] = z; |
else break; |
} |
pRxData = &rxd_buffer[3]; |
RxDataLen = ptrOut - 3; |
} |
/** |
* request Data through USART in special MK format by adding checksum and |
* encode data in modified Base64 |
* portions taken and adapted from |
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.72p%2Fuart.c |
*/ |
/*void sendMKData(unsigned char cmd, unsigned char addr, unsigned char *snd, unsigned char len) { |
unsigned int pt = 0; |
unsigned char a, b, c; |
unsigned char ptr = 0; |
txd_buffer[pt++] = '#'; // Start-Byte |
txd_buffer[pt++] = 'a' + addr; // Adress |
txd_buffer[pt++] = cmd; // Command |
while (len) { |
if (len) { |
a = snd[ptr++]; |
len--; |
} else a = 0; |
if (len) { |
b = snd[ptr++]; |
len--; |
} else b = 0; |
if (len) { |
c = snd[ptr++]; |
len--; |
} else c = 0; |
txd_buffer[pt++] = '=' + (a >> 2); |
txd_buffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
txd_buffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
txd_buffer[pt++] = '=' + (c & 0x3f); |
} |
// add crc |
unsigned int tmpCRC = 0, i; |
for (i = 0; i < pt; i++) { |
tmpCRC += txd_buffer[i]; |
} |
tmpCRC %= 4096; |
txd_buffer[i++] = '=' + tmpCRC / 64; |
txd_buffer[i++] = '=' + tmpCRC % 64; |
txd_buffer[i++] = '\r'; |
usart1_puts((char*) txd_buffer); |
}*/ |
/** |
* short script to directly send a request thorugh usart including en- and disabling it |
* where <address> is the address of the receipient, <label> is which data set to request |
* and <ms> represents the milliseconds delay between data |
*/ |
/*void usart1_request_mk_data(uint8_t address, char label, uint8_t ms) { |
// re-enable TXD pin |
usart1_EnableTXD(); |
unsigned char mstenth = ms / 10; |
sendMKData(label, address, &mstenth, 1); |
// wait until UDR ready |
while (!(UCSR1A & (1 << UDRE1))); |
// disable TXD pin again |
usart1_DisableTXD(); |
}*/ |
#endif |
/C-OSD/trunk/C-OSD AGRESSiVA mod/usart1.h |
---|
0,0 → 1,92 |
/**************************************************************************** |
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* 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 2 of the License. * |
* * |
* 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, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#define baud 57600 |
#define RXD_BUFFER_LEN 150 |
#define TXD_BUFFER_LEN 20 // not so much needed |
//#define REQUEST_OSD_DATA "#aoAm==EX\r" |
#define REQUEST_OSD_DATA "#bo?]==EG\r" |
#define REQUEST_DBG_DATA "#ad?]==D{\r" |
#define REQUEST_FC_VERSION "#av====Dk\r" |
#define REQUEST_NC_VERSION "#bv====Dl\r" |
extern volatile uint8_t rxd_buffer_locked; |
extern volatile uint8_t rxd_buffer[RXD_BUFFER_LEN]; |
extern volatile uint8_t txd_buffer[TXD_BUFFER_LEN]; |
extern volatile uint8_t ReceivedBytes; |
extern volatile uint8_t *pRxData; |
extern volatile uint8_t RxDataLen; |
/** |
* init usart1 |
*/ |
void usart1_init(); |
/** |
* disable the txd pin of usart1 |
*/ |
void usart1_DisableTXD(void); |
/** |
* enable the txd pin of usart1 |
*/ |
void usart1_EnableTXD(void); |
/** |
* send a PGM<string> throught usart1 |
*/ |
void usart1_puts_pgm(const char*); |
/** |
* transmit interrupt handler |
* unused |
*/ |
ISR(SIG_USART1_DATA); |
/** |
* receive data through usart1 |
* portions taken and adapted from |
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Fbranches%2FV0.72p+Code+Redesign+killagreg%2Fuart0.c |
*/ |
ISR(SIG_USART1_RECV); |
/** |
* Decode the recevied Buffer |
* portions taken and adapted from |
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.72p%2Fuart.c |
*/ |
void Decode64(void); |
/** |
* request Data through USART in special MK format by adding checksum and |
* encode data in modified Base64 |
* portions taken and adapted from |
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.72p%2Fuart.c |
*/ |
//void sendMKData(unsigned char, unsigned char, unsigned char*, unsigned char); |
/** |
* short script to directly send a request thorugh usart including en- and disabling it |
* where <address> is the address of the receipient, <label> is which data set to request |
* and <ms> represents the milliseconds delay between data |
*/ |
//void usart1_request_mk_data(uint8_t, char, uint8_t); |
/C-OSD/trunk/default/C-OSD.e2s |
---|
0,0 → 1,11 |
#------ START -------- |
#Programming sequence |
SELECTDEVICE ATmega8 |
CLEARBUFFER |
LOAD-PROG C-OSD.hex |
#ERASE-ALL |
WRITE&VERIFY-ALL |
/C-OSD/trunk/default/C-OSD.eep |
---|
0,0 → 1,2 |
:050000002E17000000B6 |
:00000001FF |
/C-OSD/trunk/default/C-OSD.elf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/C-OSD/trunk/default/C-OSD.hex |
---|
0,0 → 1,934 |
:100000000C94C6010C94E3010C94E3010C94A30E30 |
:100010000C94E3010C94E3010C94E3010C94E301D0 |
:100020000C94E3010C94E3010C94E3010C94E301C0 |
:100030000C94E3010C94E3010C94E3010C94E301B0 |
:100040000C94D9020C94E3010C94070E0C94E30178 |
:100050000C9464030C94E3010C945A030C94E30194 |
:100060000C94E3010C94E3010C94E3010C94E30180 |
:100070006D617820416C7469747564653A006D61D6 |
:10008000782053706565642020203A006D617820E7 |
:1000900044697374616E63653A006D696E20566FD2 |
:1000A0006C74616765203A006D61782054696D65F4 |
:1000B000202020203A006C6F6E676974756465209B |
:1000C00020203A006C6174697475646520202020DA |
:1000D0003A006D61782063757272656E74203A0023 |
:1000E00070007E008C009A00A800B600C400D20008 |
:1000F0004E450045200053450053200053570057FC |
:1001000020004E57004E2000F000F300F600F900EA |
:10011000FC00FF000201050164656661756C7400F6 |
:100120006D696E696D616C002020206A6F706C00D3 |
:100130000C0F1801021520018A181801331A280122 |
:1001400023626F3F5D3D3D45470D000000C2FFFF4C |
:100150000000C2FFC00000C2FFC10000C2FF0000DB |
:1001600000C2C0000000C2C1000000C200000000C8 |
:10017000BB00000000C3000000C4C3000000C5C3F2 |
:10018000000000FFC30000C4FFC30000C5FFC300A0 |
:1001900000FFFFC300004B01500155015A015F01F0 |
:1001A000640169016E01730178017D01820187019B |
:1001B0008C019101D8D7D8D3D8D7D8D5D8D7D8D40F |
:1001C000D8D7D8D6D8D7D8D3D8D7D8D5D8D7D8D4C1 |
:1001D000D8D7D8D6D8D7D8D3D8D7D8D5D8D7D8D4B1 |
:1001E000D8D7D8D650414C20004E545343004C6FC2 |
:1001F0006164696E6720446174612066726F6D206E |
:10020000454550524F4D004E6F2073617665642016 |
:100210004461746120696E20454550524F4D00EE97 |
:10022000010702432D4F534420436F6E66696720D8 |
:100230004D656E7500444F4E452020202020202023 |
:10024000202020202020200045584954005361766A |
:100250006520636F6E666967004241524F00204718 |
:100260005053004865696768742062790044697377 |
:10027000706C6179204D6F64650052657365742000 |
:10028000757074696D6500566F6C74616765206286 |
:100290007920432D5374726F6D0043757272656ED1 |
:1002A00074206279204643005374617469737469E1 |
:1002B00063730042696720566172696F20626172E0 |
:1002C0000041727420486F72697A6F6E20696E20E7 |
:1002D0004855440046756C6C204855440056696486 |
:1002E000656F204D6F6465004F4646004F4E2000FD |
:1002F0004E432056455253494F4E3A202E2E2E2E15 |
:100300002E2E2E2E002362763D3D3D3D446C0D0089 |
:100310004D617820566F6C74616765202020203A0B |
:10032000005761726E20566F6C74616765202020E3 |
:100330003A004E756D626572206F662043656C6C85 |
:10034000733A004775657373696E67204E756D6209 |
:100350006572206F662043656C6C7300444556459A |
:100360004C2D4255494C44004E6176694374726C81 |
:10037000204D6F646500432D4F534420496E6974CE |
:1003800069616C69736174696F6E000011241FBE2E |
:10039000CFEFD4E0DEBFCDBF11E0A0E0B1E0E8E2F6 |
:1003A000FAE302C005900D92A231B107D9F712E02D |
:1003B000A2E1B1E001C01D92A13AB107E1F70E94AC |
:1003C000F0010C94121D0C94E5011F920F920FB6D0 |
:1003D0000F92112400000F900FBE0F901F901895E0 |
:1003E00010921C0110921D0189E180931B01D19A8A |
:1003F000D99AD29ADA98D39ADB98D59ADD9AA09AAC |
:10040000A898A19AA998A29AAA98A39AAB98A498F6 |
:10041000AC9AA598AD9ADD98DD9AAB9A80E197E207 |
:1004200020E931E0F9013197F1F70197D9F7AB985D |
:1004300080E00E94BD0C80911C0180FFB2C080E072 |
:1004400068E00E94AF048CE0809303010E9475086D |
:100450000E9431030E9439038BE083BF12BE8AEFF2 |
:1004600081BF89B78D7F89BF89B7816089BF8A9A2B |
:100470000E94F50D0E94980E7894AA9A04C080916B |
:100480001801882361F58091340190913501892B01 |
:1004900091F480911001882371F080919501843648 |
:1004A00009F44CC080911D018E7F80931D0189E06D |
:1004B00090E00E94480E80912901882331F08091BC |
:1004C000EE018F34B9F0109229010E94580E892B49 |
:1004D000B1F20E949C0B809118018823A1F20E9426 |
:1004E0003E0380E491E00E944703109218010E94AD |
:1004F0003903C9CF0E943004AAE9B1E080912B01F1 |
:1005000090912C019C01F90182E501900D9281509E |
:10051000E1F7809100018F3FF1F58091D30189329D |
:1005200090F28091D301809304018091D301809354 |
:100530000001809100010E94F10CC5CF80918B01D8 |
:1005400090918C01909338018093370180918D01B7 |
:1005500090918E01A0918F01B091900180933B0109 |
:1005600090933C01A0933D01B0933E018091910195 |
:10057000909192019093A00280939F0280911D011F |
:1005800080FD95CF0E94750880911D018D7F81604F |
:1005900080931D018CCFE0910501F0910601099532 |
:1005A00092CF80E068E40E94AF048EE08093030164 |
:1005B0004DCF1F920F920FB60F9211242F933F939E |
:1005C0004F935F936F937F938F939F93AF93BF935B |
:1005D000EF93FF93809114019091150101979093EF |
:1005E0001501809314010196A1F48091120190915C |
:1005F00013010196909313018093120187EE93E00B |
:100600009093150180931401809118018F5F80935E |
:10061000180180911001882369F080913401909134 |
:100620003501892B39F08091280181508093280170 |
:100630008F5F89F0FF91EF91BF91AF919F918F9163 |
:100640007F916F915F914F913F912F910F900FBECE |
:100650000F901F90189588E0809328010E94530EF8 |
:10066000E9CF1CBE80E180B988E981B986E88CBFFA |
:1006700008950E980B98BB98C3980895BB9AC39899 |
:100680000B9A0E9A0895159BFECF83B90895AC017D |
:100690009A01FA018491882361F04F5F5F4FF9015D |
:1006A0008491159BFECF83B99A01FA018491882326 |
:1006B000A1F708951F920F920FB60F9211240F9079 |
:1006C0000FBE0F901F9018951F920F920FB60F92AA |
:1006D00011242F933F934F935F936F938F939F9327 |
:1006E000AF93BF93CF93DF93EF93FF9363B1809169 |
:1006F0002901882371F480912E018823E1F48091EF |
:100700002F018332D1F12091300120932F0160938A |
:100710003001FF91EF91DF91CF91BF91AF919F9108 |
:100720008F916F915F914F913F912F910F900FBEDD |
:100730000F901F901895309131013639B0F46D301B |
:1007400009F450C0E32FF0E0E451FE4F60833F5FB7 |
:10075000309331018091320190913301860F911DC8 |
:100760009093330180933201D4CF109231011092D3 |
:10077000290110922E01A99ACCCF20913001822F0D |
:100780008256823010F6663519F06F3409F0BDCF0D |
:1007900081E080932E0180913101E82FF0E0E45157 |
:1007A000FE4F93E290838F5FE82FF0E0E451FE4F1D |
:1007B00020838F5FE82FF0E0E451FE4F60838F5F6E |
:1007C00080933101862F90E0820F911D8396909344 |
:1007D00033018093320110922F0110923001A89AB8 |
:1007E000A99897CFA32FB0E0FD01E651FE4F90816D |
:1007F000ED01C551DE4F88814091320150913301A6 |
:10080000491B5109481B51095F70509333014093B4 |
:1008100032012081CA010024880F991F001C880F13 |
:10082000991F001C892F902D835C281741F010928E |
:100830002901A99A1092310110922E016ACF988154 |
:10084000842F8F73835C981791F7A451BE4F6C93DC |
:100850003F5F30932A0181E080932901A898EACF75 |
:1008600050912A01565009F457C033E043E01EC0AE |
:10087000972F9D53F0E02295207F892F86958695AE |
:10088000282BE451FE4F2083E42FEE5F5230C1F15C |
:100890005350F0E09295990F990F907C6D53962BE1 |
:1008A000E451FE4F90834D5F5523A1F1E32FF0E01B |
:1008B000E451FE4F80813F5FE32FF0E0E451FE4FB3 |
:1008C00020812D533F5FE32FF0E0E451FE4F708114 |
:1008D0003F5FE32FF0E0E451FE4F60813F5F922FD6 |
:1008E00092959F708D53880F880F892BE42FF0E02D |
:1008F000E451FE4F8083E42FEF5F513009F0B8CF11 |
:10090000E3508FEE91E090932C0180932B01E093C4 |
:100910002D010895E42FF4CFE0E0F3CF482F50E00D |
:1009200027E030E009C0DA9ADB9ADB9821503040AA |
:100930008FEF2F3F380791F0CA01022E02C0959524 |
:1009400087950A94E2F780FDEECFDA98DB9ADB9880 |
:10095000215030408FEF2F3F380771F70895D99815 |
:10096000482F50E027E030E009C0DA9ADB9ADB98A4 |
:10097000215030408FEF2F3F380791F0CA01022EEF |
:1009800002C0959587950A94E2F780FDEECFDA983C |
:10099000DB9ADB98215030408FEF2F3F380771F7FB |
:1009A00070E027E030E009C0DA9ADB9ADB9821504A |
:1009B00030408FEF2F3F380791F0CB01022E02C05D |
:1009C000959587950A94E2F780FDEECFDA98DB9A49 |
:1009D000DB98215030408FEF2F3F380771F7D99ABD |
:1009E00008950F931F93182F062F85E0692F0E94FB |
:1009F000AF0486E0612F0E94AF0487E0602F0E9461 |
:100A0000AF041F910F9108959EE1699FB0011124D9 |
:100A10009B01280F311DC901642F0E94F104089524 |
:100A20009C01603219F1862F81538930D0F06033F8 |
:100A300039F1862F81548A31F0F0862F81568A3120 |
:100A400020F1683231F1693211F16E3221F16D32EB |
:100A500021F16B3321F16A3321F16C3219F465E431 |
:100A600001C06053C9010E94F104089560E0C9010A |
:100A70000E94F10408956653C9010E94F10408958B |
:100A80006AE0C9010E94F10408956C53EBCF60E461 |
:100A9000E9CF6FE3E7CF61E4E5CF69E4E3CF63E457 |
:100AA000E1CF64E4DFCFFF920F931F93CF93DF93E7 |
:100AB000F82EEA0148814423D9F0262F30E0C901FD |
:100AC000880F991F820F931F8C01000F111F000FB9 |
:100AD000111F080F191F000F111FC8018F0D911D45 |
:100AE000F394642F0E941005219648814423A9F7AE |
:100AF000DF91CF911F910F91FF900895FF920F9377 |
:100B00001F93CF93DF93F82EEA01FE01849188238F |
:100B1000F1F0262F30E0C901880F991F820F931F33 |
:100B20008C01000F111F000F111F080F191F000F5C |
:100B3000111FC8018F0D911DF3942196FA01649144 |
:100B40000E941005AE01FE018491882391F7DF9188 |
:100B5000CF911F910F91FF900895DF92EF92FF9236 |
:100B60000F931F93CF93DF93062FEA01122F2223B7 |
:100B700091F0E82EFF24FEE1DF2E0D9DC00111242F |
:100B80000F5FFE012196E4918E0D9F1D6E2F0E9436 |
:100B9000F104115091F7DF91CF911F910F91FF90C8 |
:100BA000EF90DF9008958F929F92AF92BF92CF9275 |
:100BB000DF92EF92FF920F931F93CF93DF93D82E84 |
:100BC000862ECA01E901C02E06E912E0B8014AE00A |
:100BD00050E00E94CC1CF80101900020E9F78F0141 |
:100BE0000150104006591240902EA02EBB24CA1965 |
:100BF000DB091C161D060CF074C08EE1889E700186 |
:100C00001124D39410E010C09701280F311DC901A1 |
:100C10006AE00E94F1041F5F2D2D2F5F812F90E06D |
:100C20008C179D07A4F4D22E8D2D8150CC2061F716 |
:100C3000F701E80FF11DCF0160E00E94F1041F5F92 |
:100C40002D2D2F5F812F90E08C179D0764F3F50108 |
:100C5000EB56FD4FC0801082F1E09F16D1F122E0EB |
:100C6000921619F18D2D682D46E952E00E94530528 |
:100C7000192D11501D0DC701810F911D61E40E94B6 |
:100C8000F1041F5FC701810F911D6C2D0E9410059B |
:100C9000DF91CF911F910F91FF90EF90DF90CF9058 |
:100CA000BF90AF909F908F900895809196028D3263 |
:100CB000C9F60D2D10E0C7010197800F911F69E45F |
:100CC0000E94F104C8018E0D9F1D6AE00E94F1048C |
:100CD000CFCFC70101978D0D911D6AE00E94F104ED |
:100CE000C7CF8EE1889E70011124B1CF8F929F9261 |
:100CF000AF92BF92CF92DF92EF92FF920F931F932A |
:100D0000CF93DF93D82E862ECA01E901C02E06E9C3 |
:100D100012E0B8014AE050E00E94CC1CF8010190BA |
:100D20000020E9F78F010150104006591240902E23 |
:100D3000A02EBB24CA19DB091C161D060CF074C0BA |
:100D40008EE1889E70011124D39410E010C09701A9 |
:100D5000280F311DC9016AE00E94F1041F5F2D2D8B |
:100D60002F5F812F90E08C179D07A4F4D22E8D2D3C |
:100D70008150CC2061F7F701E80FF11DCF0160E051 |
:100D80000E94F1041F5F2D2D2F5F812F90E08C17A3 |
:100D90009D0764F3F501EB56FD4FC0801082F1E032 |
:100DA0009F16D1F122E0921619F18D2D682D46E99A |
:100DB00052E00E945305192D11501D0DC701810FDE |
:100DC000911D61E40E94F1041F5FC701810F911D15 |
:100DD0006C2D0E941005DF91CF911F910F91FF9014 |
:100DE000EF90DF90CF90BF90AF909F908F9008953D |
:100DF000809196028D32C9F60D2D10E0C701019742 |
:100E0000800F911F69E40E94F104C8018E0D9F1D9F |
:100E10006AE00E94F104CFCFC70101978D0D911DAB |
:100E20006AE00E94F104C7CF8EE1889E7001112410 |
:100E3000B1CFAF92BF92CF92DF92EF92FF920F931A |
:100E40001F93CF93DF93B82EA62ECA01122FF32E35 |
:100E5000A6E9CA2EA2E0DA2EB6014AE050E00E94CE |
:100E6000CC1CC12FDF2D8EE1A89E7001112410E053 |
:100E7000412F4B0DF60101900020E9F7CE018E1BAA |
:100E80009F0B212F30E089569D4F2817390790F48A |
:100E9000002341F0C701840F911D6AE00E94F10414 |
:100EA0001F5FE6CFC701840F911D60E00E9410050F |
:100EB0001F5FDECF842F6A2D46E952E00E94530562 |
:100EC000DF91CF911F910F91FF90EF90DF90CF9026 |
:100ED000BF90AF900895AF92BF92CF92DF92EF9202 |
:100EE000FF920F931F93CF93DF93B82EA62ECA01C4 |
:100EF000122FF32EB6E9CB2EB2E0DB2EB6014AE07C |
:100F000050E00E94CC1CC12FDF2D8EE1A89E700105 |
:100F1000112410E0412F4B0DF60101900020E9F75C |
:100F2000CE018E1B9F0B212F30E089569D4F281735 |
:100F3000390790F4002341F0C701840F911D6AE046 |
:100F40000E94F1041F5FE6CFC701840F911D60E08E |
:100F50000E9410051F5FDECF842F6A2D46E952E004 |
:100F60000E945305DF91CF911F910F91FF90EF9059 |
:100F7000DF90CF90BF90AF9008957F928F929F9215 |
:100F8000AF92BF92CF92DF92EF92FF920F931F9397 |
:100F9000162F69017A0157FD5EC0782E739440E0E8 |
:100FA0000E940405C701B60120E836E948E950E08F |
:100FB0000E94B11C872D612FA90123E030E001E0E0 |
:100FC0000E946B07872D8D5F612F41E40E9404050D |
:100FD000C701B60120E836E948E950E00E94B11C9B |
:100FE0006B017C01C701B60128EE33E040E050E020 |
:100FF0000E94B11C4901872D8C5F612FA90124E05B |
:1010000030E00E946B07AA24BB24C501B40128E18B |
:101010003CEF4FEF5FEF0E94491CC60ED71EE81E43 |
:10102000F91E872D885F612FA60123E030E00E9422 |
:101030006B07872D855F612F40ED0E9404051F918E |
:101040000F91FF90EF90DF90CF90BF90AF909F9067 |
:101050008F907F900895C094D094E094F094089479 |
:10106000C11CD11CE11CF11C782E739449E40E9430 |
:10107000040598CFBF92CF92DF92EF92FF920F9329 |
:101080001F93182FB62E6A01CA016CE370E00E940C |
:10109000681C7B01812F6B2DA70123E030E000E06D |
:1010A0000E946B07812F8D5F6B2D44E40E94040525 |
:1010B0008CE390E09C01E29EC001E39E900DF29EC5 |
:1010C000900D1124C81AD90A812F8C5F6B2DA601AF |
:1010D00022E030E001E00E946B071F910F91FF902A |
:1010E000EF90DF90CF90BF90089584E064E40E9479 |
:1010F000AF048AE68A95F1F708950F931F93182F8E |
:10110000062F926085E0692F0E94AF0486E0612F70 |
:101110000E94AF0487E0602F0E94AF041F910F91DF |
:1011200008959EE1699FB00111249B01280F311D94 |
:10113000C901642F0E947D0808959C0148978C97EF |
:1011400000F1C901845490408D97E8F0C90181579E |
:1011500090408D97E0F0C9018E5990408D97A8F08E |
:10116000C9018B5C90408D97A0F0C901885F9040C9 |
:101170008D9798F0255231402D32310560F087E08F |
:10118000089580E0089581E0089583E0089582E065 |
:10119000089584E0089586E0089585E008959C010F |
:1011A000880F991F880F991F880F991F220F331FCF |
:1011B000820F931F8F589F4F60E17EE00E94681C52 |
:1011C00061EE70E00E94681C862F0895AF92BF9276 |
:1011D000CF92DF92EF92FF920F931F93DF93CF9303 |
:1011E00000D000D00F92CDB7DEB7A82EC62E8A0150 |
:1011F000D22EB32E7E010894E11CF11CD701EBE046 |
:10120000F1E085E001900D928150E1F78FE067E019 |
:1012100044EE0E940405C80164E170E00E947C1C59 |
:10122000262F17FD82C08CEE6802C0011124800FAA |
:10123000911F97FDA2C09595879595958795909557 |
:1012400081959F4F182F1C5F67E0621BC61608F040 |
:1012500080C00C2D8D2D9B2D9C0137FD84C03595B4 |
:1012600027953595279535952795822F815F823073 |
:1012700008F47CC0D82E8CE18D1510F46CE1D62ECC |
:101280004D2D50E0BD2C20910901822F992787FD1B |
:1012900090958417950739F027FD05C0822F6C2D96 |
:1012A00040E00E94040560910A01262F332727FDA4 |
:1012B0003095802F90E02817390761F067FD0AC04C |
:1012C0008EE040E00E94040580E160910A0140E068 |
:1012D0000E940405812F153008F084E0E80EF11C0F |
:1012E000F70110818EE0602F412F0E94040580E1FC |
:1012F000602F412F0E9404058D2D6C2D45EE0E941C |
:101300000405B092090100930A010F900F900F900D |
:101310000F900F90CF91DF911F910F91FF90EF9061 |
:10132000DF90CF90BF90AF9008958CEE6802C0011F |
:101330001124800F911F97FD22C095958795959553 |
:101340008795182F1195215067E0621BC61608F487 |
:1013500080CF062F6A1508F07DCF0A2D8D2D9B2D8D |
:101360009C0137FF7CCF295F3F4F79CFE2E0DE2E33 |
:1013700042E050E072E0B72E86CF03965CCF039632 |
:10138000DCCF282F362F41155105B1F01416150664 |
:10139000BCF4CA0165E070E00E947C1C61307105FC |
:1013A00011F16230710589F1672B19F5822F632FD6 |
:1013B00040E70E94040508954BEB0E940405089540 |
:1013C000CA016BEF7FEF0E947C1C61307105B9F0A0 |
:1013D0006230710531F1672BF1F4822F632F47E7FB |
:1013E0000E9404050895822F632F41E70E9404059F |
:1013F0000895822F632F43E70E9404050895822FEA |
:10140000632F46E70E9404050895822F632F42E769 |
:101410000E9404050895822F632F44E70E9404056B |
:101420000895822F632F45E70E94040508950F93C6 |
:10143000E82FF62F241738F44DE98E2F6F2F0E94D6 |
:1014400004050F910895842F90E030E0281B390B9C |
:10145000602F70E0681B790B84E690E0AC01249F5C |
:10146000C001259F900D349F900D11240E947C1C7B |
:10147000653608F064E6862F90E09C01220F331F4A |
:10148000280F391F220F331F220F331F280F391F38 |
:10149000C9016CE97FEF0E947C1C462F43568E2FBA |
:1014A0006F2F0E9404050F910895EF92FF920F9302 |
:1014B0001F93CF93DF93282F062FCA0166E170E0B8 |
:1014C0000E94681C6D5E70E0EB01C055DE4F55E078 |
:1014D000E52EF12CE60EF71E84EB91E0E80EF91EE6 |
:1014E000122F1F5FFE014491822F602F0E9404057E |
:1014F0002196212FCE15DF0599F7DF91CF911F910E |
:101500000F91FF90EF900895495F5F4F57FD11C015 |
:101510004F30510514F04EE050E0FA01EE0FFF1F7E |
:10152000EA56FE4F45915491625025E00E94AD0568 |
:10153000089540E050E0ECCF982F662339F487E11E |
:10154000692F48EE52E00E947E05089587E1692FD9 |
:101550004CEE52E00E947E050895FF920F931F9378 |
:10156000282F90E00B966CE070E00E947C1C92E0CB |
:10157000F92EF80E022F0E5F12E0812F6F2D40E042 |
:101580000E949108812F602F4FEA0E9491081F5FEF |
:101590001C3199F784E062E04DED52E00E947E0537 |
:1015A00080911C0180FF85C087E162E049EE51E037 |
:1015B0000E947E0584E063E044ED52E00E947E05D7 |
:1015C00060911B01617083E00E949C0A84E064E0EA |
:1015D00041EC52E00E947E0560911B01627084E044 |
:1015E0000E949C0A84E065E043EB52E00E947E0585 |
:1015F00060911B01647085E00E949C0A84E066E0B3 |
:1016000048EA52E00E947E0560911B01687086E006 |
:101610000E949C0A84E067E04AE952E00E947E054D |
:1016200060911B01607487E00E949C0A84E068E07E |
:1016300047E852E00E947E0560911B01607288E0DD |
:101640000E949C0A84E069E04AE752E00E947E051D |
:1016500084E06AE04DE652E00E947E05E0919D0242 |
:10166000F0919E0232964591549182E16AE00E9487 |
:101670007E0584E06BE043E652E00E947E058091A7 |
:101680001C0181FD1DC084E16BE049E552E00E9430 |
:101690007E0584E06CE04DE452E00E947E0584E02B |
:1016A0006DE048E452E00E947E051F910F91FF908B |
:1016B000089587E162E044EE51E00E947E057ACF12 |
:1016C00084E16BE04EE552E00E947E05E2CF1F937D |
:1016D000182F682F6E5F84E045E352E00E947E057C |
:1016E00028E833E140E951E0CA010197F1F72150C0 |
:1016F0003040D1F7812F0E94AD0A1F91089580E0FC |
:1017000090E06EE20E94F51C81E090E067E10E94AB |
:10171000F51C82E090E060911B010E94F51C83E0C3 |
:1017200090E060911C010E94F51C84E090E06091C3 |
:101730001E010E94F51C0895AF92BF92CF92DF92D6 |
:10174000EF92FF920F931F93CF93DF93F8940E9431 |
:10175000750886E061E043E252E00E947E0524ECD9 |
:1017600039E040E951E0CA010197F1F721503040DA |
:10177000D1F780E00E94AD0A10E0C0E9D1E000E4BA |
:10178000FF24F39472E0E72E60E2D62E54E0C52EDB |
:101790004EE0B42E3CE0A32E0E94790E892BB1F0CE |
:1017A000812F90E001966CE070E00E947C1C182F65 |
:1017B0000E94AD0A28E833E1CE010197F1F72150EC |
:1017C0003040D1F70E94790E892B51F70E94580EB4 |
:1017D000892B11F3153009F4BFC0163058F51230BB |
:1017E00009F4B0C0133008F441C0133009F462C0EA |
:1017F000143009F454C041E024EC39E0CE010197E3 |
:10180000F1F721503040D1F7442309F0C5CF0E94B1 |
:10181000750880911D018D7F80931D017894DF9163 |
:10182000CF911F910F91FF90EF90DF90CF90BF90DD |
:10183000AF900895183009F463C0193048F01A3099 |
:1018400009F47AC01A3008F11B30A9F640E0D4CF71 |
:10185000163009F44BC0173071F610921301109234 |
:10186000120187E00E94670B41E0C6CF112361F1AE |
:10187000113009F0C0CF80911B01812780931B019B |
:1018800081E00E94AD0A41E0B7CF80911C018E2516 |
:1018900080931C0189E00E94AD0A41E0ADCF8091A8 |
:1018A0001B0198E0892780931B0184E00E94AD0A08 |
:1018B00041E0A2CF80911B018C2580931B0183E026 |
:1018C0000E94AD0A41E098CF80911C018F25809342 |
:1018D0001C0180FD4BC080E068E40E94AF04B09220 |
:1018E000030180E00E94AD0A41E086CF80911B0198 |
:1018F0008D2580931B0186E00E94AD0A41E07CCFDC |
:10190000E0911E01EF5FE170E0931E01F0E0EE0F49 |
:10191000FF1FEE0FFF1FE05DFE4FF0939E02E0936E |
:101920009D0285919491909306018093050188E032 |
:101930000E94AD0A41E060CF0E947F0B8AE00E94C6 |
:10194000670B59CF80911B01812780931B0182E097 |
:101950000E94AD0A41E050CF80911B018027809307 |
:101960001B0185E00E94AD0A41E046CF80E068E0BF |
:101970000E94AF04A0920301B4CF1F93182F80E000 |
:1019800090E00E94ED1C8E3251F0112331F082E084 |
:1019900069E047E052E00E947E051F91089581E0D2 |
:1019A00090E00E94ED1C873181F7112399F482E0C9 |
:1019B00090E00E94ED1C80931B0183E090E00E9468 |
:1019C000ED1C80931C0184E090E00E94ED1C80934C |
:1019D0001E01E3CF82E069E04EEE51E00E947E05F9 |
:1019E000E6CFFF920F931F93DF93CF93CDB7DEB770 |
:1019F0002A970FB6F894DEBF0FBECDBF182F0E94F6 |
:101A0000750882E061E046E753E00E947E0582E0CF |
:101A100062E048E653E00E947E0582E063E04CE528 |
:101A200053E00E947E0582E064E043E453E00E94BC |
:101A30007E05612F70E000E00F5F402F50E0CA018B |
:101A4000880F991F880F991F9C01220F331F220FA7 |
:101A5000331F220F331F280F391F240F351FC901D1 |
:101A600047968617970744F3440F551F42955295A2 |
:101A7000507F5427407F54274093190120931A0127 |
:101A800082E065E042E353E00E947E0585E165E087 |
:101A9000402F50E021E030E000E00E946B0782E040 |
:101AA00066E041E253E00E947E054091190184E125 |
:101AB00066E050E023E030E00E94D30582E067E07A |
:101AC00040E153E00E947E0540911A0184E167E005 |
:101AD00050E023E030E00E94D30581E00E94BD0C7D |
:101AE00080911C0180FF7AC087E162E049EE51E0FD |
:101AF0000E947E05109229010E943E0385E093E03A |
:101B00000E94470382E06BE040EF52E00E947E05B6 |
:101B10000E94390380912901882329F400008091D3 |
:101B200029018823D9F30E943004DE0111968091A7 |
:101B30002B0190912C019C01F9018AE001900D92FA |
:101B40008150E1F7FA801D8149818EE06BE050E021 |
:101B500023E030E001E00E946B0782E16BE04F2D53 |
:101B600050E023E030E00E946B071F5980E691E0CF |
:101B7000612F0E941005E0911E01E170E0931E01AB |
:101B8000F0E0EE0FFF1FEE0FFF1FE05DFE4FF09342 |
:101B90009E02E0939D02859194919093060180931B |
:101BA000050120E335E740E951E0CA010197F1F76B |
:101BB00021503040D1F70E94750880911D018D7F22 |
:101BC00080931D012A960FB6F894DEBF0FBECDBFDD |
:101BD000CF91DF911F910F91FF90089587E162E00F |
:101BE00044EE51E00E947E0585CFDF93CF930F92A4 |
:101BF000CDB7DEB780EB87BBC49A83ED8DB98EB1CC |
:101C000089838FB189830F90CF91DF9108951F92BF |
:101C10000F920FB60F9211248F939F93EF93FF9320 |
:101C200080913601882311F58FB1809395018091C1 |
:101C300036018F5F80933601809134019091350198 |
:101C400001979093350180933401809134019091F4 |
:101C50003501892B99F46F98929AFF91EF919F919A |
:101C60008F910F900FBE0F901F901895E091360145 |
:101C7000F0E08FB1E657FE4F8083D9CF81E08093AB |
:101C80001001EBCF2DB130E020783070C9010895FC |
:101C900092981092360190933501809334016F9A97 |
:101CA00081E48FB90895809136018F5B8FB90895D3 |
:101CB0009D9B04C020E030E0C90108952AEF30E088 |
:101CC00040E951E0CA010197F1F721503040D1F7C6 |
:101CD00083B3282F30E036952795329522952F70C3 |
:101CE00023273F7023272095309521703070C9013C |
:101CF00008959C9B04C020E030E0C90108952AEFBC |
:101D000030E040E951E0CA010197F1F7215030403D |
:101D1000D1F783B3282F30E0329522952F702327F7 |
:101D20003F7023272095309521703070C9010895A8 |
:101D3000389A8BB780628BBF86B7816086BF8EB5BD |
:101D400083608EBD08951F920F920FB60F921124DB |
:101D50002F933F934F935F936F937F938F939F93B3 |
:101D6000AF93BF93EF93FF9306B600FC40C0809102 |
:101D700011018823B9F081508093110186B78160E9 |
:101D800086BFFF91EF91BF91AF919F918F917F910E |
:101D90006F915F914F913F912F910F900FBE0F90D8 |
:101DA0001F9018958CB59DB520913F013091400151 |
:101DB000821B930B909342018093410180914101DA |
:101DC0009091420180509140909342018093410153 |
:101DD00080914101909142018038910590F080916D |
:101DE0001C0180FD14C08E7F80931C01C7CF8CB571 |
:101DF0009DB59093400180933F0186B78E7F86BF4B |
:101E0000C0CF80911C01816080931C01B7CF0E94DC |
:101E1000750880911C01E7CFEF92FF920F931F93FB |
:101E2000CF93DF9380911B0180FFE5C180911D015D |
:101E300081FFF4C22091D4013091D50140E050E0FF |
:101E4000CA01B901660F771F881F991F660F771F98 |
:101E5000881F991F660F771F881F991F620F731FB6 |
:101E6000841F951F2AEF30E040E050E00E948F1C55 |
:101E700082E060910201A90123E030E000E00E94CD |
:101E80006B074091DC0187E06091020150E023E0A4 |
:101E900030E00E946B078091DC01853608F469C24E |
:101EA0008091DC01853608F0A9C28091DE0184FFB3 |
:101EB00073C28BE06091020140E00E9404054091F2 |
:101EC000D8015091D9018DE06091020123E030E00A |
:101ED00000E00E946B07109102018091D80190915F |
:101EE000D9010E949D08E82FF0E0EE0FFF1FE85F88 |
:101EF000FE4F4591549181E1612F0E947E054091F2 |
:101F0000CF015091D00185E1609102010E94C10989 |
:101F100080911C0181FF52C06091A3017091A401C6 |
:101F20008091A5019091A601C0919801D09199014D |
:101F30007E010027F7FC0095102F28EE33E040E0EB |
:101F400050E00E94B11C2E193F09400B510B2B3061 |
:101F5000310541055105C4F46091A3017091A401BC |
:101F60008091A5019091A60128EE33E040E050E079 |
:101F70000E94B11C2E193F09400B510B265F3F4FA9 |
:101F80004F4F5F4F0CF083C46091A3017091A40187 |
:101F90008091A5019091A60128EE33E040E050E049 |
:101FA0000E94B11C2C1B3D0B87E160910201A9012D |
:101FB00024E030E000E00E94190720C08091CD01AC |
:101FC0009091CE018D52914044F48091CD01909139 |
:101FD000CE01845D9E4F0CF082C48091CD01909122 |
:101FE000CE016EE170E00E947C1CAB0187E1609144 |
:101FF000020124E030E000E00E9419074091D8017E |
:102000005091D901609102016F5F8BE00E94550AE7 |
:102010008091C8019091C9012091D8013091D901D6 |
:10202000109102011F5F88599E4F821B930B68E637 |
:1020300071E00E947C1C0E94CF08482F405685E129 |
:10204000612F0E9404058091C6019091C7012091E3 |
:1020500002012F5F6AE070E00E94681CAB0188E11A |
:10206000622F23E030E000E00E946B078091DD01E9 |
:1020700080FF84C28091270180FF91C310911B01D2 |
:1020800000911D0111FF18C000FFF7C34091DA0154 |
:102090002091DB018091020160910301625055277C |
:1020A00047FD5095332727FD30958E5F0E94E60847 |
:1020B00010911B0100911D01046000931D0112FD90 |
:1020C0007FC280911D0180FF56C216FF9AC34091C6 |
:1020D000E8015091E90160910301615083E023E040 |
:1020E00030E000E00E9476064091EA015091EB0159 |
:1020F0006091030161508AE024E030E00E946B07A8 |
:102100002091D30182E06091030140911901009177 |
:102110001A010E94170A4091D30183E060910301E4 |
:1021200050E023E030E000E00E9476068091D30189 |
:1021300090911901981708F4EFC180910001981748 |
:1021400008F0EAC182E0609103014FE40E94910827 |
:1021500083E0609103014FE40E94910884E0609164 |
:1021600003014FE40E94910885E0609103014FE470 |
:102170000E94910886E0609103014FE40E9491085B |
:1021800087E0609103014FE40E94910840911201A1 |
:102190005091130188E0609103010E943A08409138 |
:1021A000D1015091D2018FE0609103010E943A0861 |
:1021B0004091CC0188E16091030150E022E030E0E1 |
:1021C00000E00E946B078091DE0186FF04C287E178 |
:1021D0006091030143EB0E9404058091DE0182FDC2 |
:1021E00004C28091DE0181FF07C28BE1609103018F |
:1021F00046EE0E9404058091DD0180FF86C080913B |
:102200001C0181FF99C06091A3017091A40180918C |
:10221000A5019091A60128EE33E040E050E00E9435 |
:10222000B11C8091980190919901AA2797FDA095E2 |
:10223000BA2F281B390B4A0B5B0B80911F01909121 |
:102240002001AA2797FDA095BA2F82179307A4070C |
:10225000B5070CF44EC12091D4013091D501809185 |
:102260002101909122018217930740F48091D401BB |
:102270009091D50190932201809321012091C60174 |
:102280003091C70180912301909124018217930717 |
:1022900040F48091C6019091C701909324018093EE |
:1022A00023019091D30180910401981720F480912B |
:1022B000D301809304012091D1013091D20180910A |
:1022C0002501909126018217930740F48091D10156 |
:1022D0009091D201909326018093250180911D0158 |
:1022E00080FF61C080911B0186FD61C02091370194 |
:1022F000309138018091390190913A01821793070A |
:1023000024F430933A01209339018091DC018093C9 |
:1023100001018091D301809300018091DD018093C0 |
:1023200027011092180180E090E0DF91CF911F917A |
:102330000F91FF90EF9008958091CD019091CE0183 |
:102340006EE170E00E947C1C80911F019091200141 |
:10235000861797070CF07FCF8091CD019091CE0129 |
:102360006EE170E00E947C1C7093200160931F015D |
:1023700072CF80910101853608F492CD17E0812F4C |
:10238000609102014FE40E9491081F5F1B30B9F772 |
:102390008091DE0184FD8DCD8BE06091020146ECE1 |
:1023A0000E9404058CCD80911B0186FFAECF8091E9 |
:1023B000E8019091E9019C01220F331F220F331F86 |
:1023C000220F331F880F991F280F391F8091390161 |
:1023D00090913A018217930708F097CF8091E80116 |
:1023E0009091E9019C01220F331F220F331F220F0E |
:1023F000331F880F991F280F391F83CF8091010148 |
:10240000853608F052CD17E0812F6091020140E03F |
:102410000E9491081F5F1B30B9F747CD85E060919E |
:1024200002014BEC0E9404058AE0609102014AEC33 |
:102430000E94040580E16091020140ED0E940405C4 |
:102440008BE1609102014CEC0E9404056091020155 |
:102450006F5F84E140EB0E940405609102016F5FB1 |
:1024600086E142EB0E940405609102016F5F8BE1FF |
:102470004CEC0E94040587E0609103014EE90E9444 |
:10248000040580911D0180FD04C080911B0186FF21 |
:1024900012C060910301615087E04FE90E9404057A |
:1024A0006091030161508EE045EB0E94040580912C |
:1024B0001B0185FD33C28EE06091030141ED0E9456 |
:1024C000040585E16091030142ED0E9404058AE163 |
:1024D0006091030148EC0E9404058BE160910301C7 |
:1024E00049EC0E94040580911D01826080931D01CA |
:1024F000A1CC6091A3017091A4018091A50190915C |
:10250000A60128EE33E040E050E00E94B11C309379 |
:10251000200120931F019FCE8091D301981708F0CE |
:1025200035CE80910001891708F030CE82E06091AD |
:10253000030140E00E94910883E06091030140E0C4 |
:102540000E94910884E06091030140E00E9491089C |
:1025500085E06091030140E00E94910886E060916F |
:10256000030140E00E94910887E06091030140E090 |
:102570000E9491080BCE16FFC3CDA9CD80911D01FD |
:1025800082FD41C010911B0111FF99CD80FD02C059 |
:1025900016FF0CC24091DA012091DB01809102010B |
:1025A000609103016250552747FD5095332727FD61 |
:1025B00030958E5F0E94E60810911B0112FF81CDBD |
:1025C0004091CF015091D0018BE168E00E94840AD4 |
:1025D00010911B0176CD87E16091030140E00E94DC |
:1025E00004058091DE0182FFFCCD8BE16091030147 |
:1025F00047EE0E940405FFCD8BE16091030149EC99 |
:102600000E940405F8CD10911B0113FFBDCFE0EE31 |
:10261000F0E04591549181E063E00E947E05409195 |
:102620001F015091200180E163E024E030E000E0F0 |
:102630000E94190784E163E04CEC0E940405E2EE7D |
:10264000F0E04591549181E064E00E947E05209184 |
:1026500021013091220140E050E0CA01B901660F2A |
:10266000771F881F991F660F771F881F991F660F96 |
:10267000771F881F991F620F731F841F951F2AEFF2 |
:1026800030E040E050E00E948F1C81E164E0A9014D |
:1026900023E030E00E946B0784E164E04BEC0E9491 |
:1026A0000405E4EEF0E04591549181E065E00E947C |
:1026B0007E0580912301909124016AE070E00E94E0 |
:1026C0007C1CAB0181E165E023E030E00E946B07F8 |
:1026D00084E165E04CEC0E940405E6EEF0E04591F3 |
:1026E000549181E066E00E947E054091040180E102 |
:1026F00066E050E023E030E00E94760684E166E088 |
:102700004EE90E94040580911D0180FD0FC180915A |
:102710001B0186FD0BC117E008E0F9E0FF2EE8EE93 |
:10272000F0E04591549181E0612F0E947E05409137 |
:102730002501509126018EE0612F0E943A0884E124 |
:10274000612F42ED0E940405EAEEF0E045915491BC |
:1027500081E0602F0E947E0520919B0130919C01B9 |
:1027600040919D0150919E018EE0602F0E94BD0717 |
:10277000ECEEF0E04591549181E06F2D0E947E05D2 |
:1027800020919F013091A0014091A1015091A2019F |
:102790008EE06F2D0E94BD0710911B0190CC0E940E |
:1027A00075086091A3017091A4018091A501909199 |
:1027B000A60128EE33E040E050E00E94B11C3093C7 |
:1027C00099012093980100911D0100FF9AC010917A |
:1027D0001B0116FD9AC060913B0170913C018091F4 |
:1027E0003D0190913E012AE030E040E050E00E943F |
:1027F000B11C30934801209347010D7F00931D01C8 |
:1028000041CC2091030121508091370190913801F2 |
:102810006AE070E00E947C1CAB0183E0622F23E041 |
:1028200030E000E00E9476061091030111506091A3 |
:102830003B0170913C0180913D0190913E012AE065 |
:1028400030E040E050E00E94B11C8AE0612FA90115 |
:1028500024E030E00E94190780911B0185FF50CCD5 |
:1028600060910301615040919F025091A00281E16B |
:1028700023E030E00E94760643CC4091DA012091BB |
:10288000DB018091020160910301615008CC6091ED |
:10289000A3017091A4018091A5019091A6018E01E0 |
:1028A000000F111F000F111F000F111FCC0FDD1F94 |
:1028B0000C0F1D1F109501951F4F24E630E040E0DE |
:1028C00050E00E94B11C020F131F87E160910201CA |
:1028D000A80123E030E000E00E94D3058FCB809177 |
:1028E000CD019091CE0163E070E00E947C1CAB01B1 |
:1028F00087E16091020123E030E000E00E94D3050F |
:102900007DCB10911B0116FF78CF8091EA01909149 |
:10291000EB0190934801809347016FCF60910301D1 |
:10292000615085E14EE90E940405C5CDEEEEF0E070 |
:102930004591549181E067E00E947E0580913901C4 |
:1029400090913A016AE070E00E947C1CAB0180E14A |
:1029500067E023E030E000E00E94760684E167E073 |
:102960004FE90E94040580911D0180FF29C08091DC |
:102970001B0186FF2AC04091EA015091EB01809132 |
:10298000470190914801481B590B85E167E025E01C |
:1029900030E000E00E946B078AE167E045EB0E94AF |
:1029A000040518E009E0EAE0FE2EB9CE4091DA0114 |
:1029B0002091DB0180910201609103016150F3CD10 |
:1029C00080911B0186FFE8CFD6CF0091470110917F |
:1029D000480160913B0170913C0180913D019091D3 |
:1029E0003E012AE030E040E050E00E94B11C201B94 |
:1029F000310B85E167E0A90125E030E000E00E94AD |
:102A00006B07CACFFF920F931F9380911B0180FF2A |
:102A100015C180911D0181FFE8C12091D401309141 |
:102A2000D50140E050E0CA01B901660F771F881F49 |
:102A3000991F660F771F881F991F660F771F881FC2 |
:102A4000991F620F731F841F951F2AEF30E040E02B |
:102A500050E00E948F1C81E060910201A90123E0F7 |
:102A600030E000E00E946B078091C6019091C701A1 |
:102A70006AE070E00E94681CAB018CE0609102018A |
:102A800023E030E00E946B078091C8019091C9015A |
:102A90002091D8013091D9011091020188599E4F9F |
:102AA000821B930B68E671E00E947C1C0E94CF0899 |
:102AB000482F405681E1612F0E9404058091CD018D |
:102AC0009091CE018D52914044F48091CD0190912E |
:102AD000CE01845D9E4F0CF00CC28091CD0190918F |
:102AE000CE016EE170E00E947C1CAB0186E160913A |
:102AF000020124E030E000E00E9419074091CF017C |
:102B00005091D0018BE1609102010E94C109809136 |
:102B1000DD0180FF10C18091270180FFA5C1809158 |
:102B20001D0190911B0191FF18C080FFF4C14091DD |
:102B3000DA012091DB018091020160910301625072 |
:102B4000552747FD5095332727FD30958E5F0E940E |
:102B5000E60890911B0180911D01846080931D0106 |
:102B600092FD0BC180911D0180FD13C12091D30105 |
:102B700082E0609103014091190100911A010E94C5 |
:102B8000170A4091D30183E06091030150E023E0F4 |
:102B900030E000E00E9476068091D3019091190107 |
:102BA000981708F469C180910001981708F064C172 |
:102BB00082E0609103014FE40E94910883E06091FC |
:102BC00003014FE40E94910884E0609103014FE407 |
:102BD0000E94910885E0609103014FE40E949108F2 |
:102BE00086E0609103014FE40E94910887E06091C4 |
:102BF00003014FE40E9491084091D1015091D2010C |
:102C00008BE0609103010E943A084091CC0188E179 |
:102C10006091030150E022E030E000E00E946B0789 |
:102C20008091DE0182FD5EC18091DE0181FF53C192 |
:102C30008BE16091030146EE0E9404058091DD0165 |
:102C400080FF65C02091CD013091CE0180911F01A0 |
:102C5000909120018217930744F48091CD019091C7 |
:102C6000CE019093200180931F012091D4013091D7 |
:102C7000D50180912101909122018217930740F4A0 |
:102C80008091D4019091D5019093220180932101EC |
:102C90002091C6013091C7018091230190912401B8 |
:102CA0008217930740F48091C6019091C7019093D9 |
:102CB0002401809323019091D301809104019817FE |
:102CC00020F48091D301809304012091D1013091AF |
:102CD000D20180912501909126018217930740F43B |
:102CE0008091D1019091D20190932601809325018A |
:102CF00020913701309138018091390190913A014A |
:102D00008217930724F430933A012093390180917C |
:102D1000DC01809301018091D301809300018091B7 |
:102D2000DD01809327011092180180E090E01F914F |
:102D30000F91FF90089580911D0182FF92C09091A4 |
:102D40001B0193FDFCC091FF0BCF80FFEEC04091B3 |
:102D5000DA012091DB018091020160910301625050 |
:102D6000552747FD5095332727FD30958E5F0E94EC |
:102D7000E60890911B0192FFF5CE4091CF01509152 |
:102D8000D0018BE168E00E94840A80911D0180FFE0 |
:102D9000EDCE2091030121508091370190913801AF |
:102DA0006AE070E00E947C1CAB0183E0622F23E0AC |
:102DB00030E000E00E94760610910301115060910E |
:102DC0003B0170913C0180913D0190913E012AE0D0 |
:102DD00030E040E050E00E94B11C8AE0612FA90180 |
:102DE00024E030E00E941907C1CE84E06091020126 |
:102DF0004BEC0E9404058FE0609102014CEC0E94B4 |
:102E000004058AE1609102014CEC0E94040580E116 |
:102E10006091020140EB0E94040582E16091020191 |
:102E200042EB0E94040587E0609103014EE90E9495 |
:102E3000040581E16091030142ED0E9404058AE1ED |
:102E40006091030148EC0E9404058BE1609103014D |
:102E500049EC0E94040580911D01826080931D0150 |
:102E6000DCCD90911B016FCF0E94750880911D01F0 |
:102E70008D7F80931D0155CE8091D301981708F066 |
:102E8000BBCE80910001891708F0B6CE82E0609138 |
:102E9000030140E00E94910883E06091030140E05B |
:102EA0000E94910884E06091030140E00E94910833 |
:102EB00085E06091030140E00E94910886E0609106 |
:102EC000030140E00E94910887E06091030140E027 |
:102ED0000E94910891CE8BE16091030149EC0E9420 |
:102EE0000405ACCE8BE16091030147EE0E9404051E |
:102EF000A5CE8091CD019091CE0163E070E00E945B |
:102F00007C1CAB0186E16091020123E030E000E02F |
:102F10000E94D305F3CD4091DA012091DB0180912D |
:102F200002016091030161500BCE4091DA012091C2 |
:102F3000DB018091020160910301615011CFE0EE4D |
:102F4000F0E04591549182E063E00E947E0580911B |
:102F50001F01909120016EE170E00E947C1CAB018A |
:102F600082E163E024E030E000E00E94190786E19E |
:102F700063E04CEC0E940405E2EEF0E045915491D0 |
:102F800082E064E00E947E052091210130912201BF |
:102F900040E050E0CA01B901660F771F881F991FF2 |
:102FA000660F771F881F991F660F771F881F991F4D |
:102FB000620F731F841F951F2AEF30E040E050E03E |
:102FC0000E948F1C83E164E0A90123E030E00E94AD |
:102FD0006B0786E164E04BEC0E940405E4EEF0E050 |
:102FE0004591549182E065E00E947E058091230125 |
:102FF000909124016AE070E00E947C1CAB0183E1A7 |
:1030000065E023E030E00E946B0786E165E04CEC70 |
:103010000E940405E6EEF0E04591549182E066E0FE |
:103020000E947E054091040182E166E050E023E0C9 |
:1030300030E00E94760686E166E04EE90E940405D3 |
:1030400080911D0180FD44C017E008E099E0F92E51 |
:10305000E8EEF0E04591549182E0612F0E947E05F8 |
:10306000409125015091260180E1612F0E943A088C |
:1030700086E1612F42ED0E940405EAEEF0E0459101 |
:10308000549182E0602F0E947E0520919B01309137 |
:103090009C0140919D0150919E018FE0602F0E9404 |
:1030A000BD07ECEEF0E04591549182E06F2D0E9457 |
:1030B0007E0520919F013091A0014091A101509186 |
:1030C000A2018FE06F2D0E94BD0790911B0148CD9A |
:1030D000EEEEF0E04591549182E067E00E947E05BB |
:1030E0008091390190913A016AE070E00E947C1C65 |
:1030F000AB0182E167E023E030E000E00E94760669 |
:1031000086E167E04FE90E94040518E009E08AE0E3 |
:10311000F82E9ECF0F931F9380911B0180FFB7C0A5 |
:1031200080911D0181FFD6C040915F0150916001E7 |
:1031300087E06091020123E030E000E00E946B072D |
:1031400080915F01909160018536910508F4B2C0CD |
:1031500080915F01909160018536910528F0809102 |
:103160000101853608F4F5C0809155019091560112 |
:103170008D52914040F48091550190915601845DAB |
:103180009E4F08F041C180915501909156016EE12A |
:1031900070E00E94681CAB0187E16091020124E0AD |
:1031A00030E000E00E94190720915501309156014E |
:1031B00080911F01909120018217930740F4809124 |
:1031C0005501909156019093200180931F018091A9 |
:1031D0001B0181FDC9C080911D0180FDD9C02091D6 |
:1031E0005D0130915E0182E060910301409119011F |
:1031F00000911A010E94170A40915D0150915E01F1 |
:1032000083E06091030123E030E000E00E94760655 |
:1032100080915D0190915E0140911901242F30E071 |
:103220002817390728F080910001481708F46CC06E |
:1032300080915D0190915E012817390740F58091DA |
:103240000001841720F582E06091030140E00E94B4 |
:10325000910883E06091030140E00E94910884E0BE |
:103260006091030140E00E94910885E060910301B4 |
:1032700040E00E94910886E06091030140E00E94D6 |
:10328000910887E06091030140E00E9491088091DD |
:103290005D0190915E018093000180915F019091AA |
:1032A0006001809301011092180180E090E01F916D |
:1032B0000F91089580910101853608F449CF17E0F8 |
:1032C000812F609102014FE40E9491081F5F1B3023 |
:1032D000B9F74ACF8AE0609102014AEC0E940405E6 |
:1032E0008BE1609102014CEC0E94040587E0609143 |
:1032F00003014EE90E94040580911D0180FD96C0E6 |
:10330000826080931D0110CF82E0609103014FE441 |
:103310000E94910883E0609103014FE40E949108AC |
:1033200084E0609103014FE40E94910885E0609180 |
:1033300003014FE40E94910886E0609103014FE48D |
:103340000E94910887E0609103014FE40E94910878 |
:103350009ECF17E0812F6091020140E00E9491080A |
:103360001F5F1B30B9F700CF40914B0150914C01CA |
:1033700020914D0130914E01809102016091030135 |
:1033800061508E5F0E94E60880911D0180FF27CF6B |
:1033900020910301215080913701909138016AE01A |
:1033A00070E00E947C1CAB0183E0622F23E030E0E0 |
:1033B00000E00E94760610910301115060913B01DC |
:1033C00070913C0180913D0190913E012AE030E0F6 |
:1033D00040E050E00E94B11C8AE0612FA90124E086 |
:1033E00030E00E94190780911B0185FFF8CE6091A3 |
:1033F0000301615040919F025091A00281E123E0BE |
:1034000030E00E947606EBCE8091550190915601F6 |
:1034100063E070E00E94681CAB0187E160910201EB |
:1034200023E030E000E00E94D305BECE60910301AE |
:10343000615087E04FE90E940405609103016150EB |
:103440008EE045EB0E94040580911B0185FD03C0C1 |
:1034500080911D0155CF60910301615085E14EE9D6 |
:103460000E940405F5CF0F931F9380911B0180FFED |
:1034700010C180911D0181FF2FC140915F015091CA |
:10348000600187E06091020123E030E000E00E94EB |
:103490006B0780915F01909160018536910508F47A |
:1034A0000BC180915F01909160018536910528F0F4 |
:1034B00080910101853608F462C140915B01509111 |
:1034C0005C018DE06091020123E030E000E00E94A9 |
:1034D0006B071091020180915B0190915C010E9449 |
:1034E0009D08E82FF0E0EE0FFF1FE85FFE4F4591CB |
:1034F000549181E1612F0E947E0580915501909148 |
:1035000056018536910540F4809155019091560100 |
:103510008C599F4F08F096C18091550190915601AA |
:103520006AE070E00E94681CAB0186E160910201D4 |
:1035300024E030E000E00E941907409155015091CD |
:1035400056018091430190914401481B590B5093BF |
:103550004601409345018BE1609102010E94C1093F |
:1035600040911B0142FD63C180915501909156012C |
:10357000909344018093430120915501309156016D |
:1035800080911F01909120018217930740F4809150 |
:103590005501909156019093200180931F0141FDA8 |
:1035A00035C140915B0150915C01609102016F5FF8 |
:1035B0008BE00E94550A80911D0180FDEBC0209197 |
:1035C0005D0130915E0182E060910301409119013B |
:1035D00000911A010E94170A40915D0150915E010D |
:1035E00083E06091030123E030E000E00E94760672 |
:1035F00080915D0190915E0140911901242F30E08E |
:103600002817390728F080910001481708F492C064 |
:1036100080915D0190915E012817390740F58091F6 |
:103620000001841720F582E06091030140E00E94D0 |
:10363000910883E06091030140E00E94910884E0DA |
:103640006091030140E00E94910885E060910301D0 |
:1036500040E00E94910886E06091030140E00E94F2 |
:10366000910887E06091030140E00E949108409139 |
:1036700012015091130188E0609103010E943A0801 |
:1036800040911601509117018FE0609103010E9453 |
:103690003A0880915D0190915E01809300018091D4 |
:1036A0005F0190916001809301011092180180E008 |
:1036B00090E01F910F91089580910101853608F4E3 |
:1036C000F0CE17E0812F609102014FE40E94910833 |
:1036D0001F5F1B30B9F7F1CE8AE0609102014AEC1E |
:1036E0000E94040580E16091020140ED0E94040502 |
:1036F0008AE1609102014CEC0E94040587E0609130 |
:1037000003014EE90E94040580911D0180FDA7C0C0 |
:103710008EE06091030141ED0E94040585E1609116 |
:10372000030142ED0E94040580911D018260809397 |
:103730001D01A3CE82E0609103014FE40E94910835 |
:1037400083E0609103014FE40E94910884E060915E |
:1037500003014FE40E94910885E0609103014FE46A |
:103760000E94910886E0609103014FE40E94910855 |
:1037700087E0609103014FE40E94910878CF17E041 |
:10378000812F6091020140E00E9491081F5F1B3071 |
:10379000B9F793CE20910301215080913701909188 |
:1037A00038016AE070E00E947C1CAB0183E0622F6C |
:1037B00023E030E000E00E947606109103011150F2 |
:1037C00060913B0170913C0180913D0190913E01DF |
:1037D0002AE030E040E050E00E94B11C8AE0612F16 |
:1037E000A90124E030E00E94190780911B0185FFA8 |
:1037F000E6CE60910301615040919F025091A0027A |
:1038000081E123E030E00E947606D9CE40914B0161 |
:1038100050914C0120914D0130914E018091020157 |
:103820006091030161508E5F0E94E608BACE40911C |
:103830004501509146018BE168E00E94840A409165 |
:103840001B0192CE409155015091560186E1609145 |
:10385000020123E030E000E00E94D3056ECE6091CB |
:103860000301615087E04FE90E9404056091030164 |
:1038700061508EE045EB0E94040580911B0185FF9D |
:1038800047CF60910301615085E14EE90E94040534 |
:103890003FCF629FD001739FF001829FE00DF11D29 |
:1038A000649FE00DF11D929FF00D839FF00D749FBA |
:1038B000F00D659FF00D9927729FB00DE11DF91F66 |
:1038C000639FB00DE11DF91FBD01CF0111240895C3 |
:1038D000AA1BBB1B51E107C0AA1FBB1FA617B70736 |
:1038E00010F0A61BB70B881F991F5A95A9F7809552 |
:1038F0009095BC01CD01089597FB092E07260AD0AB |
:1039000077FD04D0E5DF06D000201AF470956195AC |
:103910007F4F0895F6F7909581959F4F0895A1E206 |
:103920001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F39 |
:10393000FF1FA217B307E407F50720F0A21BB30B84 |
:10394000E40BF50B661F771F881F991F1A9469F700 |
:1039500060957095809590959B01AC01BD01CF015C |
:10396000089597FB092E05260ED057FD04D0D7DF0A |
:103970000AD0001C38F450954095309521953F4F62 |
:103980004F4F5F4F0895F6F790958095709561952C |
:103990007F4F8F4F9F4F0895FB019F01E894423066 |
:1039A000C4F04532B4F44A3029F497FB1EF49095E4 |
:1039B00081959F4F642F77270E94681C805D8A3312 |
:1039C0000CF0895D8193CB010097A1F716F45DE2BD |
:1039D00051931082C9010C94021DE199FECF9FBB47 |
:1039E0008EBBE09A99278DB30895262FE199FECFDB |
:1039F0009FBB8EBB2DBB0FB6F894E29AE19A0FBE27 |
:103A000001960895DC01FC01672F71917723E1F79E |
:103A1000329704C07C916D9370836291AE17BF079B |
:083A2000C8F30895F894FFCFEC |
:103A2800FFFF010EFF0C0F8A18FFFFE1E1E2E3E35D |
:023A3800017B10 |
:00000001FF |
/C-OSD/trunk/default/C-OSD.lss |
---|
0,0 → 1,9113 |
C-OSD.elf: file format elf32-avr |
Sections: |
Idx Name Size VMA LMA File off Algn |
0 .data 00000012 00800100 00003a28 00003adc 2**0 |
CONTENTS, ALLOC, LOAD, DATA |
1 .text 00003a28 00000000 00000000 000000b4 2**1 |
CONTENTS, ALLOC, LOAD, READONLY, CODE |
2 .bss 0000018f 00800112 00800112 00003aee 2**0 |
ALLOC |
3 .eeprom 00000005 00810000 00810000 00003aee 2**0 |
CONTENTS, ALLOC, LOAD, DATA |
4 .debug_aranges 00000180 00000000 00000000 00003af3 2**0 |
CONTENTS, READONLY, DEBUGGING |
5 .debug_pubnames 0000245b 00000000 00000000 00003c73 2**0 |
CONTENTS, READONLY, DEBUGGING |
6 .debug_info 000070a3 00000000 00000000 000060ce 2**0 |
CONTENTS, READONLY, DEBUGGING |
7 .debug_abbrev 0000113c 00000000 00000000 0000d171 2**0 |
CONTENTS, READONLY, DEBUGGING |
8 .debug_line 00002b13 00000000 00000000 0000e2ad 2**0 |
CONTENTS, READONLY, DEBUGGING |
9 .debug_frame 00000430 00000000 00000000 00010dc0 2**2 |
CONTENTS, READONLY, DEBUGGING |
10 .debug_str 00000c43 00000000 00000000 000111f0 2**0 |
CONTENTS, READONLY, DEBUGGING |
11 .debug_loc 00001c20 00000000 00000000 00011e33 2**0 |
CONTENTS, READONLY, DEBUGGING |
12 .debug_ranges 00000138 00000000 00000000 00013a53 2**0 |
CONTENTS, READONLY, DEBUGGING |
Disassembly of section .text: |
00000000 <__vectors>: |
0: 0c 94 c6 01 jmp 0x38c ; 0x38c <__ctors_end> |
4: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
8: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
c: 0c 94 a3 0e jmp 0x1d46 ; 0x1d46 <__vector_3> |
10: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
14: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
18: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
1c: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
20: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
24: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
28: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
2c: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
30: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
34: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
38: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
3c: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
40: 0c 94 d9 02 jmp 0x5b2 ; 0x5b2 <__vector_16> |
44: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
48: 0c 94 07 0e jmp 0x1c0e ; 0x1c0e <__vector_18> |
4c: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
50: 0c 94 64 03 jmp 0x6c8 ; 0x6c8 <__vector_20> |
54: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
58: 0c 94 5a 03 jmp 0x6b4 ; 0x6b4 <__vector_22> |
5c: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
60: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
64: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
68: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
6c: 0c 94 e3 01 jmp 0x3c6 ; 0x3c6 <__bad_interrupt> |
00000070 <stats_item_0>: |
70: 6d 61 78 20 41 6c 74 69 74 75 64 65 3a 00 max Altitude:. |
0000007e <stats_item_1>: |
7e: 6d 61 78 20 53 70 65 65 64 20 20 20 3a 00 max Speed :. |
0000008c <stats_item_2>: |
8c: 6d 61 78 20 44 69 73 74 61 6e 63 65 3a 00 max Distance:. |
0000009a <stats_item_3>: |
9a: 6d 69 6e 20 56 6f 6c 74 61 67 65 20 3a 00 min Voltage :. |
000000a8 <stats_item_4>: |
a8: 6d 61 78 20 54 69 6d 65 20 20 20 20 3a 00 max Time :. |
000000b6 <stats_item_5>: |
b6: 6c 6f 6e 67 69 74 75 64 65 20 20 20 3a 00 longitude :. |
000000c4 <stats_item_6>: |
c4: 6c 61 74 69 74 75 64 65 20 20 20 20 3a 00 latitude :. |
000000d2 <stats_item_7>: |
d2: 6d 61 78 20 63 75 72 72 65 6e 74 20 3a 00 max current :. |
000000e0 <stats_item_pointers>: |
e0: 70 00 7e 00 8c 00 9a 00 a8 00 b6 00 c4 00 d2 00 p.~............. |
000000f0 <str_NE>: |
f0: 4e 45 00 NE. |
000000f3 <str_E>: |
f3: 45 20 00 E . |
000000f6 <str_SE>: |
f6: 53 45 00 SE. |
000000f9 <str_S>: |
f9: 53 20 00 S . |
000000fc <str_SW>: |
fc: 53 57 00 SW. |
000000ff <str_W>: |
ff: 57 20 00 W . |
00000102 <str_NW>: |
102: 4e 57 00 NW. |
00000105 <str_N>: |
105: 4e 20 00 N . |
00000108 <directions>: |
108: f0 00 f3 00 f6 00 f9 00 fc 00 ff 00 02 01 05 01 ................ |
00000118 <str_1>: |
118: 64 65 66 61 75 6c 74 00 default. |
00000120 <str_2>: |
120: 6d 69 6e 69 6d 61 6c 00 minimal. |
00000128 <str_3>: |
128: 20 20 20 6a 6f 70 6c 00 jopl. |
00000130 <ncdisplaymodes>: |
130: 0c 0f 18 01 02 15 20 01 ...... . |
00000138 <fcdisplaymodes>: |
138: 8a 18 18 01 33 1a 28 01 ....3.(. |
00000140 <__c.1706>: |
140: 23 62 6f 3f 5d 3d 3d 45 47 0d 00 #bo?]==EG.. |
0000014b <vario_00>: |
14b: 00 00 c2 ff ff ..... |
00000150 <vario_01>: |
150: 00 00 c2 ff c0 ..... |
00000155 <vario_02>: |
155: 00 00 c2 ff c1 ..... |
0000015a <vario_03>: |
15a: 00 00 c2 ff 00 ..... |
0000015f <vario_04>: |
15f: 00 00 c2 c0 00 ..... |
00000164 <vario_05>: |
164: 00 00 c2 c1 00 ..... |
00000169 <vario_06>: |
169: 00 00 c2 00 00 ..... |
0000016e <vario_07>: |
16e: 00 00 bb 00 00 ..... |
00000173 <vario_08>: |
173: 00 00 c3 00 00 ..... |
00000178 <vario_09>: |
178: 00 c4 c3 00 00 ..... |
0000017d <vario_10>: |
17d: 00 c5 c3 00 00 ..... |
00000182 <vario_11>: |
182: 00 ff c3 00 00 ..... |
00000187 <vario_12>: |
187: c4 ff c3 00 00 ..... |
0000018c <vario_13>: |
18c: c5 ff c3 00 00 ..... |
00000191 <vario_14>: |
191: ff ff c3 00 00 ..... |
00000196 <vario_pnt>: |
196: 4b 01 50 01 55 01 5a 01 5f 01 64 01 69 01 6e 01 K.P.U.Z._.d.i.n. |
1a6: 73 01 78 01 7d 01 82 01 87 01 8c 01 91 01 s.x.}......... |
000001b4 <rose.1545>: |
1b4: d8 d7 d8 d3 d8 d7 d8 d5 d8 d7 d8 d4 d8 d7 d8 d6 ................ |
1c4: d8 d7 d8 d3 d8 d7 d8 d5 d8 d7 d8 d4 d8 d7 d8 d6 ................ |
1d4: d8 d7 d8 d3 d8 d7 d8 d5 d8 d7 d8 d4 d8 d7 d8 d6 ................ |
000001e4 <VM_PAL>: |
1e4: 50 41 4c 20 00 PAL . |
000001e9 <VM_NTSC>: |
1e9: 4e 54 53 43 00 NTSC. |
000001ee <ee_message0>: |
1ee: 4c 6f 61 64 69 6e 67 20 44 61 74 61 20 66 72 6f Loading Data fro |
1fe: 6d 20 45 45 50 52 4f 4d 00 m EEPROM. |
00000207 <ee_message1>: |
207: 4e 6f 20 73 61 76 65 64 20 44 61 74 61 20 69 6e No saved Data in |
217: 20 45 45 50 52 4f 4d 00 EEPROM. |
0000021f <ee_msg>: |
21f: ee 01 07 02 .... |
00000223 <__c.1787>: |
223: 43 2d 4f 53 44 20 43 6f 6e 66 69 67 20 4d 65 6e C-OSD Config Men |
233: 75 00 u. |
00000235 <__c.1779>: |
235: 44 4f 4e 45 20 20 20 20 20 20 20 20 20 20 20 20 DONE |
245: 20 20 00 . |
00000248 <__c.1753>: |
248: 45 58 49 54 00 EXIT. |
0000024d <__c.1751>: |
24d: 53 61 76 65 20 63 6f 6e 66 69 67 00 Save config. |
00000259 <__c.1749>: |
259: 42 41 52 4f 00 BARO. |
0000025e <__c.1747>: |
25e: 20 47 50 53 00 GPS. |
00000263 <__c.1745>: |
263: 48 65 69 67 68 74 20 62 79 00 Height by. |
0000026d <__c.1740>: |
26d: 44 69 73 70 6c 61 79 20 4d 6f 64 65 00 Display Mode. |
0000027a <__c.1738>: |
27a: 52 65 73 65 74 20 75 70 74 69 6d 65 00 Reset uptime. |
00000287 <__c.1736>: |
287: 56 6f 6c 74 61 67 65 20 62 79 20 43 2d 53 74 72 Voltage by C-Str |
297: 6f 6d 00 om. |
0000029a <__c.1734>: |
29a: 43 75 72 72 65 6e 74 20 62 79 20 46 43 00 Current by FC. |
000002a8 <__c.1732>: |
2a8: 53 74 61 74 69 73 74 69 63 73 00 Statistics. |
000002b3 <__c.1730>: |
2b3: 42 69 67 20 56 61 72 69 6f 20 62 61 72 00 Big Vario bar. |
000002c1 <__c.1728>: |
2c1: 41 72 74 20 48 6f 72 69 7a 6f 6e 20 69 6e 20 48 Art Horizon in H |
2d1: 55 44 00 UD. |
000002d4 <__c.1726>: |
2d4: 46 75 6c 6c 20 48 55 44 00 Full HUD. |
000002dd <__c.1724>: |
2dd: 56 69 64 65 6f 20 4d 6f 64 65 00 Video Mode. |
000002e8 <__c.1714>: |
2e8: 4f 46 46 00 OFF. |
000002ec <__c.1712>: |
2ec: 4f 4e 20 00 ON . |
000002f0 <__c.1663>: |
2f0: 4e 43 20 56 45 52 53 49 4f 4e 3a 20 2e 2e 2e 2e NC VERSION: .... |
300: 2e 2e 2e 2e 00 ..... |
00000305 <__c.1661>: |
305: 23 62 76 3d 3d 3d 3d 44 6c 0d 00 #bv====Dl.. |
00000310 <__c.1659>: |
310: 4d 61 78 20 56 6f 6c 74 61 67 65 20 20 20 20 3a Max Voltage : |
... |
00000321 <__c.1657>: |
321: 57 61 72 6e 20 56 6f 6c 74 61 67 65 20 20 20 3a Warn Voltage : |
... |
00000332 <__c.1655>: |
332: 4e 75 6d 62 65 72 20 6f 66 20 43 65 6c 6c 73 3a Number of Cells: |
... |
00000343 <__c.1651>: |
343: 47 75 65 73 73 69 6e 67 20 4e 75 6d 62 65 72 20 Guessing Number |
353: 6f 66 20 43 65 6c 6c 73 00 of Cells. |
0000035c <__c.1648>: |
35c: 44 45 56 45 4c 2d 42 55 49 4c 44 00 DEVEL-BUILD. |
00000368 <__c.1646>: |
368: 4e 61 76 69 43 74 72 6c 20 4d 6f 64 65 00 NaviCtrl Mode. |
00000376 <__c.1644>: |
376: 43 2d 4f 53 44 20 49 6e 69 74 69 61 6c 69 73 61 C-OSD Initialisa |
386: 74 69 6f 6e 00 00 tion.. |
0000038c <__ctors_end>: |
38c: 11 24 eor r1, r1 |
38e: 1f be out 0x3f, r1 ; 63 |
390: cf ef ldi r28, 0xFF ; 255 |
392: d4 e0 ldi r29, 0x04 ; 4 |
394: de bf out 0x3e, r29 ; 62 |
396: cd bf out 0x3d, r28 ; 61 |
00000398 <__do_copy_data>: |
398: 11 e0 ldi r17, 0x01 ; 1 |
39a: a0 e0 ldi r26, 0x00 ; 0 |
39c: b1 e0 ldi r27, 0x01 ; 1 |
39e: e8 e2 ldi r30, 0x28 ; 40 |
3a0: fa e3 ldi r31, 0x3A ; 58 |
3a2: 02 c0 rjmp .+4 ; 0x3a8 <.do_copy_data_start> |
000003a4 <.do_copy_data_loop>: |
3a4: 05 90 lpm r0, Z+ |
3a6: 0d 92 st X+, r0 |
000003a8 <.do_copy_data_start>: |
3a8: a2 31 cpi r26, 0x12 ; 18 |
3aa: b1 07 cpc r27, r17 |
3ac: d9 f7 brne .-10 ; 0x3a4 <.do_copy_data_loop> |
000003ae <__do_clear_bss>: |
3ae: 12 e0 ldi r17, 0x02 ; 2 |
3b0: a2 e1 ldi r26, 0x12 ; 18 |
3b2: b1 e0 ldi r27, 0x01 ; 1 |
3b4: 01 c0 rjmp .+2 ; 0x3b8 <.do_clear_bss_start> |
000003b6 <.do_clear_bss_loop>: |
3b6: 1d 92 st X+, r1 |
000003b8 <.do_clear_bss_start>: |
3b8: a1 3a cpi r26, 0xA1 ; 161 |
3ba: b1 07 cpc r27, r17 |
3bc: e1 f7 brne .-8 ; 0x3b6 <.do_clear_bss_loop> |
3be: 0e 94 f0 01 call 0x3e0 ; 0x3e0 <main> |
3c2: 0c 94 12 1d jmp 0x3a24 ; 0x3a24 <_exit> |
000003c6 <__bad_interrupt>: |
3c6: 0c 94 e5 01 jmp 0x3ca ; 0x3ca <__vector_default> |
000003ca <__vector_default>: |
/** |
* handler for undefined Interrupts |
* if not defined AVR will reset in case any unhandled interrupts occur |
*/ |
ISR(__vector_default) { |
3ca: 1f 92 push r1 |
3cc: 0f 92 push r0 |
3ce: 0f b6 in r0, 0x3f ; 63 |
3d0: 0f 92 push r0 |
3d2: 11 24 eor r1, r1 |
asm("nop"); |
3d4: 00 00 nop |
} |
3d6: 0f 90 pop r0 |
3d8: 0f be out 0x3f, r0 ; 63 |
3da: 0f 90 pop r0 |
3dc: 1f 90 pop r1 |
3de: 18 95 reti |
000003e0 <main>: |
/* ########################################################################## |
* MAIN |
* ##########################################################################*/ |
int main(void) { |
// set up FLAGS |
COSD_FLAGS_MODES = 0, COSD_FLAGS_CONFIG = 0, COSD_FLAGS_RUNTIME = 0; |
3e0: 10 92 1c 01 sts 0x011C, r1 |
3e4: 10 92 1d 01 sts 0x011D, r1 |
#endif |
#if STATS |
COSD_FLAGS_MODES |= COSD_FLAG_STATS; |
#endif |
#if WARNINGS |
COSD_FLAGS_MODES |= COSD_FLAG_WARNINGS; |
3e8: 89 e1 ldi r24, 0x19 ; 25 |
3ea: 80 93 1b 01 sts 0x011B, r24 |
COSD_FLAGS_CONFIG |= COSD_FLAG_FCMODE; |
#endif |
// set up Atmega162 Ports |
DDRA |= (1 << PA1); // PA1 output (/CS) |
3ee: d1 9a sbi 0x1a, 1 ; 26 |
MAX_CS_HIGH |
3f0: d9 9a sbi 0x1b, 1 ; 27 |
DDRA |= (1 << PA2); // PA2 output (SDIN) |
3f2: d2 9a sbi 0x1a, 2 ; 26 |
MAX_SDIN_LOW |
3f4: da 98 cbi 0x1b, 2 ; 27 |
DDRA |= (1 << PA3); // PA3 output (SCLK) |
3f6: d3 9a sbi 0x1a, 3 ; 26 |
MAX_SCLK_LOW |
3f8: db 98 cbi 0x1b, 3 ; 27 |
DDRA |= (1 << PA5); // PA5 output (RESET) |
3fa: d5 9a sbi 0x1a, 5 ; 26 |
MAX_RESET_HIGH |
3fc: dd 9a sbi 0x1b, 5 ; 27 |
DDRC |= (1 << PC0); // PC0 output (LED1 gn) |
3fe: a0 9a sbi 0x14, 0 ; 20 |
LED1_OFF |
400: a8 98 cbi 0x15, 0 ; 21 |
DDRC |= (1 << PC1); // PC1 output (LED2 rt) |
402: a1 9a sbi 0x14, 1 ; 20 |
LED2_OFF |
404: a9 98 cbi 0x15, 1 ; 21 |
DDRC |= (1 << PC2); // PC2 output (LED3 gn) |
406: a2 9a sbi 0x14, 2 ; 20 |
LED3_OFF |
408: aa 98 cbi 0x15, 2 ; 21 |
DDRC |= (1 << PC3); // PC3 output (LED4 rt) |
40a: a3 9a sbi 0x14, 3 ; 20 |
LED4_OFF |
40c: ab 98 cbi 0x15, 3 ; 21 |
DDRC &= ~(1 << PC4); // PC4 input (MODE) |
40e: a4 98 cbi 0x14, 4 ; 20 |
PORTC |= (1 << PC4); // pullup |
410: ac 9a sbi 0x15, 4 ; 21 |
DDRC &= ~(1 << PC5); // PC5 input (SET) |
412: a5 98 cbi 0x14, 5 ; 20 |
PORTC |= (1 << PC5); // pullup |
414: ad 9a sbi 0x15, 5 ; 21 |
// reset the MAX7456 to be sure any undefined states do no harm |
MAX_RESET_LOW |
416: dd 98 cbi 0x1b, 5 ; 27 |
MAX_RESET_HIGH |
418: dd 9a sbi 0x1b, 5 ; 27 |
// give the FC/NC and the maxim time to come up |
LED4_ON |
41a: ab 9a sbi 0x15, 3 ; 21 |
41c: 80 e1 ldi r24, 0x10 ; 16 |
41e: 97 e2 ldi r25, 0x27 ; 39 |
milliseconds can be achieved. |
*/ |
void |
_delay_loop_2(uint16_t __count) |
{ |
__asm__ volatile ( |
420: 20 e9 ldi r18, 0x90 ; 144 |
422: 31 e0 ldi r19, 0x01 ; 1 |
424: f9 01 movw r30, r18 |
426: 31 97 sbiw r30, 0x01 ; 1 |
428: f1 f7 brne .-4 ; 0x426 <main+0x46> |
__ticks = (uint16_t) (__ms * 10.0); |
while(__ticks) |
{ |
// wait 1/10 ms |
_delay_loop_2(((F_CPU) / 4e3) / 10); |
__ticks --; |
42a: 01 97 sbiw r24, 0x01 ; 1 |
__ticks = 1; |
else if (__tmp > 65535) |
{ |
// __ticks = requested delay in 1/10 ms |
__ticks = (uint16_t) (__ms * 10.0); |
while(__ticks) |
42c: d9 f7 brne .-10 ; 0x424 <main+0x44> |
_delay_ms(1000); |
LED4_OFF |
42e: ab 98 cbi 0x15, 3 ; 21 |
// DISABLE display (VM0) |
spi_send_byte(0x00, 0b00000000); |
learn_all_chars_pgm(); |
#else |
// read out config for NTSC/PAL distinguishing |
get_eeprom(0); |
430: 80 e0 ldi r24, 0x00 ; 0 |
432: 0e 94 bd 0c call 0x197a ; 0x197a <get_eeprom> |
#endif |
// Setup Video Mode |
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) { |
436: 80 91 1c 01 lds r24, 0x011C |
43a: 80 ff sbrs r24, 0 |
43c: b2 c0 rjmp .+356 ; 0x5a2 <__stack+0xa3> |
// NTSC + enable display immediately (VM0) |
spi_send_byte(0x00, 0b00001000); |
43e: 80 e0 ldi r24, 0x00 ; 0 |
440: 68 e0 ldi r22, 0x08 ; 8 |
442: 0e 94 af 04 call 0x95e ; 0x95e <spi_send_byte> |
bottom_line = 12; |
446: 8c e0 ldi r24, 0x0C ; 12 |
448: 80 93 03 01 sts 0x0103, r24 |
// 8bit mode |
spi_send_byte(0x04, 0b01000000);*/ |
// clear display memory and set to 8bit mode |
clear(); |
44c: 0e 94 75 08 call 0x10ea ; 0x10ea <clear> |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
// init usart |
usart1_init(); |
450: 0e 94 31 03 call 0x662 ; 0x662 <usart1_init> |
// keep serial port clean |
usart1_DisableTXD(); |
454: 0e 94 39 03 call 0x672 ; 0x672 <usart1_DisableTXD> |
// set up timer |
// CTC, Prescaler /64 |
TCCR0 = (1 << WGM01) | (0 << WGM00) | (0 << CS02) | (1 << CS01) | (1 << CS00); |
458: 8b e0 ldi r24, 0x0B ; 11 |
45a: 83 bf out 0x33, r24 ; 51 |
TCNT0 = 0; |
45c: 12 be out 0x32, r1 ; 50 |
OCR0 = 250; |
45e: 8a ef ldi r24, 0xFA ; 250 |
460: 81 bf out 0x31, r24 ; 49 |
// enable timer output compare interrupt |
TIMSK &= ~(1 << TOIE0); |
462: 89 b7 in r24, 0x39 ; 57 |
464: 8d 7f andi r24, 0xFD ; 253 |
466: 89 bf out 0x39, r24 ; 57 |
TIMSK |= (1 << OCIE0); |
468: 89 b7 in r24, 0x39 ; 57 |
46a: 81 60 ori r24, 0x01 ; 1 |
46c: 89 bf out 0x39, r24 ; 57 |
// SPI setup |
DDRD |= (1 << PD2); // PD2 output (INT0) |
46e: 8a 9a sbi 0x11, 2 ; 17 |
SpiMasterInit(); |
470: 0e 94 f5 0d call 0x1bea ; 0x1bea <SpiMasterInit> |
// PPM detection setup |
ppm_init(); |
474: 0e 94 98 0e call 0x1d30 ; 0x1d30 <ppm_init> |
// enable interrupts |
sei(); |
478: 78 94 sei |
//write_ascii_string(2, 7, " CaScAdE "); |
//write_ascii_string(2, 8, "is TESTING his open source"); |
//write_ascii_string(2, 9, " EPi OSD Firmware"); |
// we are ready |
LED3_ON |
47a: aa 9a sbi 0x15, 2 ; 21 |
47c: 04 c0 rjmp .+8 ; 0x486 <main+0xa6> |
} |
// handle keypress |
if (s1_pressed()) { |
config_menu(); |
} |
if (seconds_since_last_data > 0) { |
47e: 80 91 18 01 lds r24, 0x0118 |
482: 88 23 and r24, r24 |
484: 61 f5 brne .+88 ; 0x4de <main+0xfe> |
//usart1_puts("\x1B[2J\x1B[H"); |
//usart1_puts("hello world!123\r\n"); |
while (1) { |
// in case SPI is ready and there is nothing to send right now |
if (!icnt && spi_ready) { |
486: 80 91 34 01 lds r24, 0x0134 |
48a: 90 91 35 01 lds r25, 0x0135 |
48e: 89 2b or r24, r25 |
490: 91 f4 brne .+36 ; 0x4b6 <main+0xd6> |
492: 80 91 10 01 lds r24, 0x0110 |
496: 88 23 and r24, r24 |
498: 71 f0 breq .+28 ; 0x4b6 <main+0xd6> |
// correct transfer ends with d (done) |
if (SPI_buffer.buffer.chk == 'd') { |
49a: 80 91 95 01 lds r24, 0x0195 |
49e: 84 36 cpi r24, 0x64 ; 100 |
4a0: 09 f4 brne .+2 ; 0x4a4 <main+0xc4> |
4a2: 4c c0 rjmp .+152 ; 0x53c <__stack+0x3d> |
// update this flag |
COSD_FLAGS_RUNTIME |= COSD_FLAG_STROMREC; |
} |
} else { |
// update flags |
COSD_FLAGS_RUNTIME &= ~COSD_FLAG_STROMREC; |
4a4: 80 91 1d 01 lds r24, 0x011D |
4a8: 8e 7f andi r24, 0xFE ; 254 |
4aa: 80 93 1d 01 sts 0x011D, r24 |
} |
StartTransfer(9); |
4ae: 89 e0 ldi r24, 0x09 ; 9 |
4b0: 90 e0 ldi r25, 0x00 ; 0 |
4b2: 0e 94 48 0e call 0x1c90 ; 0x1c90 <StartTransfer> |
} |
if (rxd_buffer_locked) { |
4b6: 80 91 29 01 lds r24, 0x0129 |
4ba: 88 23 and r24, r24 |
4bc: 31 f0 breq .+12 ; 0x4ca <main+0xea> |
osd_fcmode(); |
} |
seconds_since_last_data = 0; |
} |
#else |
if (rxd_buffer[2] == 'O') { // NC OSD Data |
4be: 80 91 ee 01 lds r24, 0x01EE |
4c2: 8f 34 cpi r24, 0x4F ; 79 |
4c4: b9 f0 breq .+46 ; 0x4f4 <main+0x114> |
osd_ncmode(); |
} |
//seconds_since_last_data = 0; |
} |
#endif |
rxd_buffer_locked = 0; |
4c6: 10 92 29 01 sts 0x0129, r1 |
} |
// handle keypress |
if (s1_pressed()) { |
4ca: 0e 94 58 0e call 0x1cb0 ; 0x1cb0 <s1_pressed> |
4ce: 89 2b or r24, r25 |
4d0: b1 f2 breq .-84 ; 0x47e <main+0x9e> |
config_menu(); |
4d2: 0e 94 9c 0b call 0x1738 ; 0x1738 <config_menu> |
} |
if (seconds_since_last_data > 0) { |
4d6: 80 91 18 01 lds r24, 0x0118 |
4da: 88 23 and r24, r24 |
4dc: a1 f2 breq .-88 ; 0x486 <main+0xa6> |
usart1_EnableTXD(); |
4de: 0e 94 3e 03 call 0x67c ; 0x67c <usart1_EnableTXD> |
//usart1_request_mk_data(0, 'd', 100); |
usart1_puts_pgm(PSTR(REQUEST_DBG_DATA)); |
#else |
// request OSD Data from NC every 100ms |
//usart1_request_mk_data(1, 'o', 100); |
usart1_puts_pgm(PSTR(REQUEST_OSD_DATA)); |
4e2: 80 e4 ldi r24, 0x40 ; 64 |
4e4: 91 e0 ldi r25, 0x01 ; 1 |
4e6: 0e 94 47 03 call 0x68e ; 0x68e <usart1_puts_pgm> |
// and disable debug... |
//usart1_request_mk_data(0, 'd', 0); |
#endif |
// reset last time counter |
seconds_since_last_data = 0; |
4ea: 10 92 18 01 sts 0x0118, r1 |
usart1_DisableTXD(); |
4ee: 0e 94 39 03 call 0x672 ; 0x672 <usart1_DisableTXD> |
4f2: c9 cf rjmp .-110 ; 0x486 <main+0xa6> |
} |
seconds_since_last_data = 0; |
} |
#else |
if (rxd_buffer[2] == 'O') { // NC OSD Data |
Decode64(); |
4f4: 0e 94 30 04 call 0x860 ; 0x860 <Decode64> |
naviData = *((NaviData_t*) pRxData); |
4f8: aa e9 ldi r26, 0x9A ; 154 |
4fa: b1 e0 ldi r27, 0x01 ; 1 |
4fc: 80 91 2b 01 lds r24, 0x012B |
500: 90 91 2c 01 lds r25, 0x012C |
504: 9c 01 movw r18, r24 |
506: f9 01 movw r30, r18 |
508: 82 e5 ldi r24, 0x52 ; 82 |
50a: 01 90 ld r0, Z+ |
50c: 0d 92 st X+, r0 |
50e: 81 50 subi r24, 0x01 ; 1 |
510: e1 f7 brne .-8 ; 0x50a <__stack+0xb> |
// init on first data retrival, distinguished by last battery :) |
if (last_UBat == 255) { |
512: 80 91 00 01 lds r24, 0x0100 |
516: 8f 3f cpi r24, 0xFF ; 255 |
518: f1 f5 brne .+124 ; 0x596 <__stack+0x97> |
if (naviData.UBat > 40) { |
51a: 80 91 d3 01 lds r24, 0x01D3 |
51e: 89 32 cpi r24, 0x29 ; 41 |
520: 90 f2 brcs .-92 ; 0x4c6 <main+0xe6> |
// fix for min_UBat |
min_UBat = naviData.UBat; |
522: 80 91 d3 01 lds r24, 0x01D3 |
526: 80 93 04 01 sts 0x0104, r24 |
last_UBat = naviData.UBat; |
52a: 80 91 d3 01 lds r24, 0x01D3 |
52e: 80 93 00 01 sts 0x0100, r24 |
init_cosd(last_UBat); |
532: 80 91 00 01 lds r24, 0x0100 |
536: 0e 94 f1 0c call 0x19e2 ; 0x19e2 <init_cosd> |
53a: c5 cf rjmp .-118 ; 0x4c6 <main+0xe6> |
while (1) { |
// in case SPI is ready and there is nothing to send right now |
if (!icnt && spi_ready) { |
// correct transfer ends with d (done) |
if (SPI_buffer.buffer.chk == 'd') { |
ampere = SPI_buffer.data.ampere; |
53c: 80 91 8b 01 lds r24, 0x018B |
540: 90 91 8c 01 lds r25, 0x018C |
544: 90 93 38 01 sts 0x0138, r25 |
548: 80 93 37 01 sts 0x0137, r24 |
ampere_wasted = SPI_buffer.data.mah; |
54c: 80 91 8d 01 lds r24, 0x018D |
550: 90 91 8e 01 lds r25, 0x018E |
554: a0 91 8f 01 lds r26, 0x018F |
558: b0 91 90 01 lds r27, 0x0190 |
55c: 80 93 3b 01 sts 0x013B, r24 |
560: 90 93 3c 01 sts 0x013C, r25 |
564: a0 93 3d 01 sts 0x013D, r26 |
568: b0 93 3e 01 sts 0x013E, r27 |
s_volt = SPI_buffer.data.volt; |
56c: 80 91 91 01 lds r24, 0x0191 |
570: 90 91 92 01 lds r25, 0x0192 |
574: 90 93 a0 02 sts 0x02A0, r25 |
578: 80 93 9f 02 sts 0x029F, r24 |
// if this is the first receival we should print the small A |
if (!(COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC)) { |
57c: 80 91 1d 01 lds r24, 0x011D |
580: 80 fd sbrc r24, 0 |
582: 95 cf rjmp .-214 ; 0x4ae <main+0xce> |
clear(); |
584: 0e 94 75 08 call 0x10ea ; 0x10ea <clear> |
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN; |
588: 80 91 1d 01 lds r24, 0x011D |
58c: 8d 7f andi r24, 0xFD ; 253 |
// update this flag |
COSD_FLAGS_RUNTIME |= COSD_FLAG_STROMREC; |
58e: 81 60 ori r24, 0x01 ; 1 |
590: 80 93 1d 01 sts 0x011D, r24 |
594: 8c cf rjmp .-232 ; 0x4ae <main+0xce> |
min_UBat = naviData.UBat; |
last_UBat = naviData.UBat; |
init_cosd(last_UBat); |
} |
} else { |
osd_ncmode(); |
596: e0 91 05 01 lds r30, 0x0105 |
59a: f0 91 06 01 lds r31, 0x0106 |
59e: 09 95 icall |
5a0: 92 cf rjmp .-220 ; 0x4c6 <main+0xe6> |
spi_send_byte(0x00, 0b00001000); |
bottom_line = 12; |
} else { |
// PAL + enable display immediately (VM0) |
spi_send_byte(0x00, 0b01001000); |
5a2: 80 e0 ldi r24, 0x00 ; 0 |
5a4: 68 e4 ldi r22, 0x48 ; 72 |
5a6: 0e 94 af 04 call 0x95e ; 0x95e <spi_send_byte> |
bottom_line = 14; |
5aa: 8e e0 ldi r24, 0x0E ; 14 |
5ac: 80 93 03 01 sts 0x0103, r24 |
5b0: 4d cf rjmp .-358 ; 0x44c <main+0x6c> |
000005b2 <__vector_16>: |
static uint8_t delay_spi = 0; |
/** |
* timer kicks in every 1000uS ^= 1ms |
*/ |
ISR(TIMER0_COMP_vect) { |
5b2: 1f 92 push r1 |
5b4: 0f 92 push r0 |
5b6: 0f b6 in r0, 0x3f ; 63 |
5b8: 0f 92 push r0 |
5ba: 11 24 eor r1, r1 |
5bc: 2f 93 push r18 |
5be: 3f 93 push r19 |
5c0: 4f 93 push r20 |
5c2: 5f 93 push r21 |
5c4: 6f 93 push r22 |
5c6: 7f 93 push r23 |
5c8: 8f 93 push r24 |
5ca: 9f 93 push r25 |
5cc: af 93 push r26 |
5ce: bf 93 push r27 |
5d0: ef 93 push r30 |
5d2: ff 93 push r31 |
if (!timer--) { |
5d4: 80 91 14 01 lds r24, 0x0114 |
5d8: 90 91 15 01 lds r25, 0x0115 |
5dc: 01 97 sbiw r24, 0x01 ; 1 |
5de: 90 93 15 01 sts 0x0115, r25 |
5e2: 80 93 14 01 sts 0x0114, r24 |
5e6: 01 96 adiw r24, 0x01 ; 1 |
5e8: a1 f4 brne .+40 ; 0x612 <__vector_16+0x60> |
uptime++; |
5ea: 80 91 12 01 lds r24, 0x0112 |
5ee: 90 91 13 01 lds r25, 0x0113 |
5f2: 01 96 adiw r24, 0x01 ; 1 |
5f4: 90 93 13 01 sts 0x0113, r25 |
5f8: 80 93 12 01 sts 0x0112, r24 |
if (debugData.Analog[12]>10) { |
flytime_fc++; |
} |
#endif |
timer = 999; |
5fc: 87 ee ldi r24, 0xE7 ; 231 |
5fe: 93 e0 ldi r25, 0x03 ; 3 |
600: 90 93 15 01 sts 0x0115, r25 |
604: 80 93 14 01 sts 0x0114, r24 |
seconds_since_last_data++; |
608: 80 91 18 01 lds r24, 0x0118 |
60c: 8f 5f subi r24, 0xFF ; 255 |
60e: 80 93 18 01 sts 0x0118, r24 |
} |
// in case there is still some spi data to send do it now |
// delay to give the slave some time to compute values |
if (spi_ready && icnt) { |
612: 80 91 10 01 lds r24, 0x0110 |
616: 88 23 and r24, r24 |
618: 69 f0 breq .+26 ; 0x634 <__vector_16+0x82> |
61a: 80 91 34 01 lds r24, 0x0134 |
61e: 90 91 35 01 lds r25, 0x0135 |
622: 89 2b or r24, r25 |
624: 39 f0 breq .+14 ; 0x634 <__vector_16+0x82> |
if (!delay_spi--) { |
626: 80 91 28 01 lds r24, 0x0128 |
62a: 81 50 subi r24, 0x01 ; 1 |
62c: 80 93 28 01 sts 0x0128, r24 |
630: 8f 5f subi r24, 0xFF ; 255 |
632: 89 f0 breq .+34 ; 0x656 <__vector_16+0xa4> |
delay_spi = 8; |
spi_send_next(); |
} |
} |
} |
634: ff 91 pop r31 |
636: ef 91 pop r30 |
638: bf 91 pop r27 |
63a: af 91 pop r26 |
63c: 9f 91 pop r25 |
63e: 8f 91 pop r24 |
640: 7f 91 pop r23 |
642: 6f 91 pop r22 |
644: 5f 91 pop r21 |
646: 4f 91 pop r20 |
648: 3f 91 pop r19 |
64a: 2f 91 pop r18 |
64c: 0f 90 pop r0 |
64e: 0f be out 0x3f, r0 ; 63 |
650: 0f 90 pop r0 |
652: 1f 90 pop r1 |
654: 18 95 reti |
} |
// in case there is still some spi data to send do it now |
// delay to give the slave some time to compute values |
if (spi_ready && icnt) { |
if (!delay_spi--) { |
delay_spi = 8; |
656: 88 e0 ldi r24, 0x08 ; 8 |
658: 80 93 28 01 sts 0x0128, r24 |
spi_send_next(); |
65c: 0e 94 53 0e call 0x1ca6 ; 0x1ca6 <spi_send_next> |
660: e9 cf rjmp .-46 ; 0x634 <__vector_16+0x82> |
00000662 <usart1_init>: |
/** |
* init usart1 |
*/ |
void usart1_init() { |
UBRR1H = ((F_CPU / (16UL * baud)) - 1) >> 8; |
662: 1c be out 0x3c, r1 ; 60 |
UBRR1L = (F_CPU / (16UL * baud)) - 1; |
664: 80 e1 ldi r24, 0x10 ; 16 |
666: 80 b9 out 0x00, r24 ; 0 |
// Enable receiver and transmitter; enable RX interrupt |
UCSR1B = (1 << RXEN1) | (1 << TXEN1) | (1 << RXCIE1); |
668: 88 e9 ldi r24, 0x98 ; 152 |
66a: 81 b9 out 0x01, r24 ; 1 |
//asynchronous 8N1 |
UCSR1C = (1 << URSEL1) | (3 << UCSZ10); |
66c: 86 e8 ldi r24, 0x86 ; 134 |
66e: 8c bf out 0x3c, r24 ; 60 |
} |
670: 08 95 ret |
00000672 <usart1_DisableTXD>: |
/** |
* disable the txd pin of usart1 |
*/ |
void usart1_DisableTXD(void) { |
UCSR1B &= ~(1 << TXCIE1); // disable TX-Interrupt |
672: 0e 98 cbi 0x01, 6 ; 1 |
UCSR1B &= ~(1 << TXEN1); // disable TX in USART |
674: 0b 98 cbi 0x01, 3 ; 1 |
DDRB &= ~(1 << DDB3); // set TXD pin as input |
676: bb 98 cbi 0x17, 3 ; 23 |
PORTB &= ~(1 << PORTB3); // disable pullup on TXD pin |
678: c3 98 cbi 0x18, 3 ; 24 |
} |
67a: 08 95 ret |
0000067c <usart1_EnableTXD>: |
/** |
* enable the txd pin of usart1 |
*/ |
void usart1_EnableTXD(void) { |
DDRB |= (1 << DDB3); // set TXD pin as output |
67c: bb 9a sbi 0x17, 3 ; 23 |
PORTB &= ~(1 << PORTB3); // disable pullup on TXD pin |
67e: c3 98 cbi 0x18, 3 ; 24 |
UCSR1B |= (1 << TXEN1); // enable TX in USART |
680: 0b 9a sbi 0x01, 3 ; 1 |
UCSR1B |= (1 << TXCIE1); // enable TX-Interrupt |
682: 0e 9a sbi 0x01, 6 ; 1 |
} |
684: 08 95 ret |
00000686 <usart1_putc>: |
/** |
* send a single <character> through usart1 |
*/ |
void usart1_putc(unsigned char character) { |
// wait until UDR ready |
while (!(UCSR1A & (1 << UDRE1))); |
686: 15 9b sbis 0x02, 5 ; 2 |
688: fe cf rjmp .-4 ; 0x686 <usart1_putc> |
UDR1 = character; |
68a: 83 b9 out 0x03, r24 ; 3 |
} |
68c: 08 95 ret |
0000068e <usart1_puts_pgm>: |
/** |
* send a PGM<string> throught usart1 |
*/ |
void usart1_puts_pgm(const char* string) { |
68e: ac 01 movw r20, r24 |
while (pgm_read_byte(string) != 0x00) |
690: 9a 01 movw r18, r20 |
692: fa 01 movw r30, r20 |
694: 84 91 lpm r24, Z+ |
696: 88 23 and r24, r24 |
698: 61 f0 breq .+24 ; 0x6b2 <usart1_puts_pgm+0x24> |
usart1_putc(pgm_read_byte(string++)); |
69a: 4f 5f subi r20, 0xFF ; 255 |
69c: 5f 4f sbci r21, 0xFF ; 255 |
69e: f9 01 movw r30, r18 |
6a0: 84 91 lpm r24, Z+ |
/** |
* send a single <character> through usart1 |
*/ |
void usart1_putc(unsigned char character) { |
// wait until UDR ready |
while (!(UCSR1A & (1 << UDRE1))); |
6a2: 15 9b sbis 0x02, 5 ; 2 |
6a4: fe cf rjmp .-4 ; 0x6a2 <usart1_puts_pgm+0x14> |
UDR1 = character; |
6a6: 83 b9 out 0x03, r24 ; 3 |
/** |
* send a PGM<string> throught usart1 |
*/ |
void usart1_puts_pgm(const char* string) { |
while (pgm_read_byte(string) != 0x00) |
6a8: 9a 01 movw r18, r20 |
6aa: fa 01 movw r30, r20 |
6ac: 84 91 lpm r24, Z+ |
6ae: 88 23 and r24, r24 |
6b0: a1 f7 brne .-24 ; 0x69a <usart1_puts_pgm+0xc> |
6b2: 08 95 ret |
000006b4 <__vector_22>: |
/** |
* transmit interrupt handler |
* unused |
*/ |
ISR(SIG_USART1_DATA) { |
6b4: 1f 92 push r1 |
6b6: 0f 92 push r0 |
6b8: 0f b6 in r0, 0x3f ; 63 |
6ba: 0f 92 push r0 |
6bc: 11 24 eor r1, r1 |
} |
6be: 0f 90 pop r0 |
6c0: 0f be out 0x3f, r0 ; 63 |
6c2: 0f 90 pop r0 |
6c4: 1f 90 pop r1 |
6c6: 18 95 reti |
000006c8 <__vector_20>: |
/* |
* receive data through usart1 |
* portions taken and adapted from |
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Fbranches%2FV0.72p+Code+Redesign+killagreg%2Fuart0.c |
*/ |
ISR(SIG_USART1_RECV) { |
6c8: 1f 92 push r1 |
6ca: 0f 92 push r0 |
6cc: 0f b6 in r0, 0x3f ; 63 |
6ce: 0f 92 push r0 |
6d0: 11 24 eor r1, r1 |
6d2: 2f 93 push r18 |
6d4: 3f 93 push r19 |
6d6: 4f 93 push r20 |
6d8: 5f 93 push r21 |
6da: 6f 93 push r22 |
6dc: 8f 93 push r24 |
6de: 9f 93 push r25 |
6e0: af 93 push r26 |
6e2: bf 93 push r27 |
6e4: cf 93 push r28 |
6e6: df 93 push r29 |
6e8: ef 93 push r30 |
6ea: ff 93 push r31 |
uint8_t c; |
// catch the received byte |
c = UDR1; |
6ec: 63 b1 in r22, 0x03 ; 3 |
if (rxd_buffer_locked) return; // if rxd buffer is locked immediately return |
6ee: 80 91 29 01 lds r24, 0x0129 |
6f2: 88 23 and r24, r24 |
6f4: 71 f4 brne .+28 ; 0x712 <__vector_20+0x4a> |
static uint8_t c1 = 0; |
static uint8_t c2 = 0; |
static uint8_t usart_rx_ok = 0; |
uint8_t crc1, crc2; |
// the rxd buffer is unlocked |
if (usart_rx_ok == 0) { |
6f6: 80 91 2e 01 lds r24, 0x012E |
6fa: 88 23 and r24, r24 |
6fc: e1 f4 brne .+56 ; 0x736 <__vector_20+0x6e> |
// if ((c2 == '#') && (c1 == 'b' || c1 == 'c') && (c == 'D' || c == 'V' || c == 'O')) { |
if ((c2 == '#') && (c1 == 'b' || c1 == 'c') && |
6fe: 80 91 2f 01 lds r24, 0x012F |
702: 83 32 cpi r24, 0x23 ; 35 |
704: d1 f1 breq .+116 ; 0x77a <__vector_20+0xb2> |
706: 20 91 30 01 lds r18, 0x0130 |
c2 = 0; |
c1 = 0; |
LED1_ON |
LED2_OFF |
} else { |
c2 = c1; |
70a: 20 93 2f 01 sts 0x012F, r18 |
c1 = c; |
70e: 60 93 30 01 sts 0x0130, r22 |
ptr_rxd_buffer = 0; // reset rxd buffer |
rxd_buffer_locked = 0; // unlock rxd buffer |
usart_rx_ok = 0; |
LED2_ON |
} |
} |
712: ff 91 pop r31 |
714: ef 91 pop r30 |
716: df 91 pop r29 |
718: cf 91 pop r28 |
71a: bf 91 pop r27 |
71c: af 91 pop r26 |
71e: 9f 91 pop r25 |
720: 8f 91 pop r24 |
722: 6f 91 pop r22 |
724: 5f 91 pop r21 |
726: 4f 91 pop r20 |
728: 3f 91 pop r19 |
72a: 2f 91 pop r18 |
72c: 0f 90 pop r0 |
72e: 0f be out 0x3f, r0 ; 63 |
730: 0f 90 pop r0 |
732: 1f 90 pop r1 |
734: 18 95 reti |
LED2_OFF |
} else { |
c2 = c1; |
c1 = c; |
} |
} else if (ptr_rxd_buffer < RXD_BUFFER_LEN) { // collect incomming bytes |
736: 30 91 31 01 lds r19, 0x0131 |
73a: 36 39 cpi r19, 0x96 ; 150 |
73c: b0 f4 brcc .+44 ; 0x76a <__vector_20+0xa2> |
if (c != '\r') { // no termination character |
73e: 6d 30 cpi r22, 0x0D ; 13 |
740: 09 f4 brne .+2 ; 0x744 <__vector_20+0x7c> |
742: 50 c0 rjmp .+160 ; 0x7e4 <__vector_20+0x11c> |
rxd_buffer[ptr_rxd_buffer++] = c; // copy byte to rxd buffer |
744: e3 2f mov r30, r19 |
746: f0 e0 ldi r31, 0x00 ; 0 |
748: e4 51 subi r30, 0x14 ; 20 |
74a: fe 4f sbci r31, 0xFE ; 254 |
74c: 60 83 st Z, r22 |
74e: 3f 5f subi r19, 0xFF ; 255 |
750: 30 93 31 01 sts 0x0131, r19 |
crc += c; // update crc |
754: 80 91 32 01 lds r24, 0x0132 |
758: 90 91 33 01 lds r25, 0x0133 |
75c: 86 0f add r24, r22 |
75e: 91 1d adc r25, r1 |
760: 90 93 33 01 sts 0x0133, r25 |
764: 80 93 32 01 sts 0x0132, r24 |
768: d4 cf rjmp .-88 ; 0x712 <__vector_20+0x4a> |
} |
ptr_rxd_buffer = 0; // reset rxd buffer pointer |
usart_rx_ok = 0; |
} |
} else { // rxd buffer overrun |
ptr_rxd_buffer = 0; // reset rxd buffer |
76a: 10 92 31 01 sts 0x0131, r1 |
rxd_buffer_locked = 0; // unlock rxd buffer |
76e: 10 92 29 01 sts 0x0129, r1 |
usart_rx_ok = 0; |
772: 10 92 2e 01 sts 0x012E, r1 |
LED2_ON |
776: a9 9a sbi 0x15, 1 ; 21 |
778: cc cf rjmp .-104 ; 0x712 <__vector_20+0x4a> |
static uint8_t usart_rx_ok = 0; |
uint8_t crc1, crc2; |
// the rxd buffer is unlocked |
if (usart_rx_ok == 0) { |
// if ((c2 == '#') && (c1 == 'b' || c1 == 'c') && (c == 'D' || c == 'V' || c == 'O')) { |
if ((c2 == '#') && (c1 == 'b' || c1 == 'c') && |
77a: 20 91 30 01 lds r18, 0x0130 |
77e: 82 2f mov r24, r18 |
780: 82 56 subi r24, 0x62 ; 98 |
782: 82 30 cpi r24, 0x02 ; 2 |
784: 10 f6 brcc .-124 ; 0x70a <__vector_20+0x42> |
786: 66 35 cpi r22, 0x56 ; 86 |
788: 19 f0 breq .+6 ; 0x790 <__vector_20+0xc8> |
78a: 6f 34 cpi r22, 0x4F ; 79 |
78c: 09 f0 breq .+2 ; 0x790 <__vector_20+0xc8> |
78e: bd cf rjmp .-134 ; 0x70a <__vector_20+0x42> |
#if FCONLY |
(c == 'V' || c == 'D')) { // version and debug |
#else |
(c == 'V' || c == 'O')) { // version and OSD |
#endif |
usart_rx_ok = 1; |
790: 81 e0 ldi r24, 0x01 ; 1 |
792: 80 93 2e 01 sts 0x012E, r24 |
rxd_buffer[ptr_rxd_buffer++] = c2; |
796: 80 91 31 01 lds r24, 0x0131 |
79a: e8 2f mov r30, r24 |
79c: f0 e0 ldi r31, 0x00 ; 0 |
79e: e4 51 subi r30, 0x14 ; 20 |
7a0: fe 4f sbci r31, 0xFE ; 254 |
7a2: 93 e2 ldi r25, 0x23 ; 35 |
7a4: 90 83 st Z, r25 |
7a6: 8f 5f subi r24, 0xFF ; 255 |
crc = c2; |
rxd_buffer[ptr_rxd_buffer++] = c1; |
7a8: e8 2f mov r30, r24 |
7aa: f0 e0 ldi r31, 0x00 ; 0 |
7ac: e4 51 subi r30, 0x14 ; 20 |
7ae: fe 4f sbci r31, 0xFE ; 254 |
7b0: 20 83 st Z, r18 |
7b2: 8f 5f subi r24, 0xFF ; 255 |
crc += c1; |
rxd_buffer[ptr_rxd_buffer++] = c; |
7b4: e8 2f mov r30, r24 |
7b6: f0 e0 ldi r31, 0x00 ; 0 |
7b8: e4 51 subi r30, 0x14 ; 20 |
7ba: fe 4f sbci r31, 0xFE ; 254 |
7bc: 60 83 st Z, r22 |
7be: 8f 5f subi r24, 0xFF ; 255 |
7c0: 80 93 31 01 sts 0x0131, r24 |
crc += c; |
7c4: 86 2f mov r24, r22 |
7c6: 90 e0 ldi r25, 0x00 ; 0 |
7c8: 82 0f add r24, r18 |
7ca: 91 1d adc r25, r1 |
7cc: 83 96 adiw r24, 0x23 ; 35 |
7ce: 90 93 33 01 sts 0x0133, r25 |
7d2: 80 93 32 01 sts 0x0132, r24 |
c2 = 0; |
7d6: 10 92 2f 01 sts 0x012F, r1 |
c1 = 0; |
7da: 10 92 30 01 sts 0x0130, r1 |
LED1_ON |
7de: a8 9a sbi 0x15, 0 ; 21 |
LED2_OFF |
7e0: a9 98 cbi 0x15, 1 ; 21 |
7e2: 97 cf rjmp .-210 ; 0x712 <__vector_20+0x4a> |
rxd_buffer[ptr_rxd_buffer++] = c; // copy byte to rxd buffer |
crc += c; // update crc |
} else { // termination character was received |
// the last 2 bytes are no subject for checksum calculation |
// they are the checksum itself |
crc -= rxd_buffer[ptr_rxd_buffer - 2]; |
7e4: a3 2f mov r26, r19 |
7e6: b0 e0 ldi r27, 0x00 ; 0 |
7e8: fd 01 movw r30, r26 |
7ea: e6 51 subi r30, 0x16 ; 22 |
7ec: fe 4f sbci r31, 0xFE ; 254 |
7ee: 90 81 ld r25, Z |
crc -= rxd_buffer[ptr_rxd_buffer - 1]; |
7f0: ed 01 movw r28, r26 |
7f2: c5 51 subi r28, 0x15 ; 21 |
7f4: de 4f sbci r29, 0xFE ; 254 |
7f6: 88 81 ld r24, Y |
// calculate checksum from transmitted data |
crc %= 4096; |
7f8: 40 91 32 01 lds r20, 0x0132 |
7fc: 50 91 33 01 lds r21, 0x0133 |
800: 49 1b sub r20, r25 |
802: 51 09 sbc r21, r1 |
804: 48 1b sub r20, r24 |
806: 51 09 sbc r21, r1 |
808: 5f 70 andi r21, 0x0F ; 15 |
80a: 50 93 33 01 sts 0x0133, r21 |
80e: 40 93 32 01 sts 0x0132, r20 |
crc1 = '=' + crc / 64; |
crc2 = '=' + crc % 64; |
// compare checksum to transmitted checksum bytes |
if ((crc1 == rxd_buffer[ptr_rxd_buffer - 2]) && (crc2 == rxd_buffer[ptr_rxd_buffer - 1])) { // checksum valid |
812: 20 81 ld r18, Z |
814: ca 01 movw r24, r20 |
816: 00 24 eor r0, r0 |
818: 88 0f add r24, r24 |
81a: 99 1f adc r25, r25 |
81c: 00 1c adc r0, r0 |
81e: 88 0f add r24, r24 |
820: 99 1f adc r25, r25 |
822: 00 1c adc r0, r0 |
824: 89 2f mov r24, r25 |
826: 90 2d mov r25, r0 |
828: 83 5c subi r24, 0xC3 ; 195 |
82a: 28 17 cp r18, r24 |
82c: 41 f0 breq .+16 ; 0x83e <__vector_20+0x176> |
rxd_buffer[ptr_rxd_buffer] = '\r'; // set termination character |
ReceivedBytes = ptr_rxd_buffer + 1; // store number of received bytes |
rxd_buffer_locked = 1; // lock the rxd buffer |
LED1_OFF |
} else { // checksum invalid |
rxd_buffer_locked = 0; // unlock rxd buffer |
82e: 10 92 29 01 sts 0x0129, r1 |
LED2_ON |
832: a9 9a sbi 0x15, 1 ; 21 |
} |
ptr_rxd_buffer = 0; // reset rxd buffer pointer |
834: 10 92 31 01 sts 0x0131, r1 |
usart_rx_ok = 0; |
838: 10 92 2e 01 sts 0x012E, r1 |
83c: 6a cf rjmp .-300 ; 0x712 <__vector_20+0x4a> |
// calculate checksum from transmitted data |
crc %= 4096; |
crc1 = '=' + crc / 64; |
crc2 = '=' + crc % 64; |
// compare checksum to transmitted checksum bytes |
if ((crc1 == rxd_buffer[ptr_rxd_buffer - 2]) && (crc2 == rxd_buffer[ptr_rxd_buffer - 1])) { // checksum valid |
83e: 98 81 ld r25, Y |
840: 84 2f mov r24, r20 |
842: 8f 73 andi r24, 0x3F ; 63 |
844: 83 5c subi r24, 0xC3 ; 195 |
846: 98 17 cp r25, r24 |
848: 91 f7 brne .-28 ; 0x82e <__vector_20+0x166> |
rxd_buffer[ptr_rxd_buffer] = '\r'; // set termination character |
84a: a4 51 subi r26, 0x14 ; 20 |
84c: be 4f sbci r27, 0xFE ; 254 |
84e: 6c 93 st X, r22 |
ReceivedBytes = ptr_rxd_buffer + 1; // store number of received bytes |
850: 3f 5f subi r19, 0xFF ; 255 |
852: 30 93 2a 01 sts 0x012A, r19 |
rxd_buffer_locked = 1; // lock the rxd buffer |
856: 81 e0 ldi r24, 0x01 ; 1 |
858: 80 93 29 01 sts 0x0129, r24 |
LED1_OFF |
85c: a8 98 cbi 0x15, 0 ; 21 |
85e: ea cf rjmp .-44 ; 0x834 <__vector_20+0x16c> |
00000860 <Decode64>: |
void Decode64(void) { |
uint8_t a, b, c, d; |
uint8_t x, y, z; |
uint8_t ptrIn = 3; |
uint8_t ptrOut = 3; |
uint8_t len = ReceivedBytes - 6; |
860: 50 91 2a 01 lds r21, 0x012A |
864: 56 50 subi r21, 0x06 ; 6 |
while (len) { |
866: 09 f4 brne .+2 ; 0x86a <Decode64+0xa> |
868: 57 c0 rjmp .+174 ; 0x918 <Decode64+0xb8> |
86a: 33 e0 ldi r19, 0x03 ; 3 |
86c: 43 e0 ldi r20, 0x03 ; 3 |
86e: 1e c0 rjmp .+60 ; 0x8ac <Decode64+0x4c> |
a = rxd_buffer[ptrIn++] - '='; |
b = rxd_buffer[ptrIn++] - '='; |
c = rxd_buffer[ptrIn++] - '='; |
870: 97 2f mov r25, r23 |
872: 9d 53 subi r25, 0x3D ; 61 |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
if (len--) rxd_buffer[ptrOut++] = x; |
else break; |
if (len--) rxd_buffer[ptrOut++] = y; |
874: f0 e0 ldi r31, 0x00 ; 0 |
b = rxd_buffer[ptrIn++] - '='; |
c = rxd_buffer[ptrIn++] - '='; |
d = rxd_buffer[ptrIn++] - '='; |
x = (a << 2) | (b >> 4); |
y = ((b & 0x0f) << 4) | (c >> 2); |
876: 22 95 swap r18 |
878: 20 7f andi r18, 0xF0 ; 240 |
87a: 89 2f mov r24, r25 |
87c: 86 95 lsr r24 |
87e: 86 95 lsr r24 |
880: 28 2b or r18, r24 |
z = ((c & 0x03) << 6) | d; |
if (len--) rxd_buffer[ptrOut++] = x; |
else break; |
if (len--) rxd_buffer[ptrOut++] = y; |
882: e4 51 subi r30, 0x14 ; 20 |
884: fe 4f sbci r31, 0xFE ; 254 |
886: 20 83 st Z, r18 |
888: e4 2f mov r30, r20 |
88a: ee 5f subi r30, 0xFE ; 254 |
else break; |
if (len--) rxd_buffer[ptrOut++] = z; |
88c: 52 30 cpi r21, 0x02 ; 2 |
88e: c1 f1 breq .+112 ; 0x900 <Decode64+0xa0> |
890: 53 50 subi r21, 0x03 ; 3 |
892: f0 e0 ldi r31, 0x00 ; 0 |
c = rxd_buffer[ptrIn++] - '='; |
d = rxd_buffer[ptrIn++] - '='; |
x = (a << 2) | (b >> 4); |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
894: 92 95 swap r25 |
896: 99 0f add r25, r25 |
898: 99 0f add r25, r25 |
89a: 90 7c andi r25, 0xC0 ; 192 |
89c: 6d 53 subi r22, 0x3D ; 61 |
89e: 96 2b or r25, r22 |
if (len--) rxd_buffer[ptrOut++] = x; |
else break; |
if (len--) rxd_buffer[ptrOut++] = y; |
else break; |
if (len--) rxd_buffer[ptrOut++] = z; |
8a0: e4 51 subi r30, 0x14 ; 20 |
8a2: fe 4f sbci r31, 0xFE ; 254 |
8a4: 90 83 st Z, r25 |
8a6: 4d 5f subi r20, 0xFD ; 253 |
uint8_t x, y, z; |
uint8_t ptrIn = 3; |
uint8_t ptrOut = 3; |
uint8_t len = ReceivedBytes - 6; |
while (len) { |
8a8: 55 23 and r21, r21 |
8aa: a1 f1 breq .+104 ; 0x914 <Decode64+0xb4> |
a = rxd_buffer[ptrIn++] - '='; |
8ac: e3 2f mov r30, r19 |
8ae: f0 e0 ldi r31, 0x00 ; 0 |
8b0: e4 51 subi r30, 0x14 ; 20 |
8b2: fe 4f sbci r31, 0xFE ; 254 |
8b4: 80 81 ld r24, Z |
b = rxd_buffer[ptrIn++] - '='; |
8b6: 3f 5f subi r19, 0xFF ; 255 |
8b8: e3 2f mov r30, r19 |
8ba: f0 e0 ldi r31, 0x00 ; 0 |
8bc: e4 51 subi r30, 0x14 ; 20 |
8be: fe 4f sbci r31, 0xFE ; 254 |
8c0: 20 81 ld r18, Z |
8c2: 2d 53 subi r18, 0x3D ; 61 |
c = rxd_buffer[ptrIn++] - '='; |
8c4: 3f 5f subi r19, 0xFF ; 255 |
8c6: e3 2f mov r30, r19 |
8c8: f0 e0 ldi r31, 0x00 ; 0 |
8ca: e4 51 subi r30, 0x14 ; 20 |
8cc: fe 4f sbci r31, 0xFE ; 254 |
8ce: 70 81 ld r23, Z |
d = rxd_buffer[ptrIn++] - '='; |
8d0: 3f 5f subi r19, 0xFF ; 255 |
8d2: e3 2f mov r30, r19 |
8d4: f0 e0 ldi r31, 0x00 ; 0 |
8d6: e4 51 subi r30, 0x14 ; 20 |
8d8: fe 4f sbci r31, 0xFE ; 254 |
8da: 60 81 ld r22, Z |
8dc: 3f 5f subi r19, 0xFF ; 255 |
x = (a << 2) | (b >> 4); |
8de: 92 2f mov r25, r18 |
8e0: 92 95 swap r25 |
8e2: 9f 70 andi r25, 0x0F ; 15 |
8e4: 8d 53 subi r24, 0x3D ; 61 |
8e6: 88 0f add r24, r24 |
8e8: 88 0f add r24, r24 |
8ea: 89 2b or r24, r25 |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
if (len--) rxd_buffer[ptrOut++] = x; |
8ec: e4 2f mov r30, r20 |
8ee: f0 e0 ldi r31, 0x00 ; 0 |
8f0: e4 51 subi r30, 0x14 ; 20 |
8f2: fe 4f sbci r31, 0xFE ; 254 |
8f4: 80 83 st Z, r24 |
8f6: e4 2f mov r30, r20 |
8f8: ef 5f subi r30, 0xFF ; 255 |
else break; |
if (len--) rxd_buffer[ptrOut++] = y; |
8fa: 51 30 cpi r21, 0x01 ; 1 |
8fc: 09 f0 breq .+2 ; 0x900 <Decode64+0xa0> |
8fe: b8 cf rjmp .-144 ; 0x870 <Decode64+0x10> |
uint8_t x, y, z; |
uint8_t ptrIn = 3; |
uint8_t ptrOut = 3; |
uint8_t len = ReceivedBytes - 6; |
while (len) { |
900: e3 50 subi r30, 0x03 ; 3 |
if (len--) rxd_buffer[ptrOut++] = y; |
else break; |
if (len--) rxd_buffer[ptrOut++] = z; |
else break; |
} |
pRxData = &rxd_buffer[3]; |
902: 8f ee ldi r24, 0xEF ; 239 |
904: 91 e0 ldi r25, 0x01 ; 1 |
906: 90 93 2c 01 sts 0x012C, r25 |
90a: 80 93 2b 01 sts 0x012B, r24 |
RxDataLen = ptrOut - 3; |
90e: e0 93 2d 01 sts 0x012D, r30 |
} |
912: 08 95 ret |
uint8_t x, y, z; |
uint8_t ptrIn = 3; |
uint8_t ptrOut = 3; |
uint8_t len = ReceivedBytes - 6; |
while (len) { |
914: e4 2f mov r30, r20 |
916: f4 cf rjmp .-24 ; 0x900 <Decode64+0xa0> |
918: e0 e0 ldi r30, 0x00 ; 0 |
91a: f3 cf rjmp .-26 ; 0x902 <Decode64+0xa2> |
0000091c <spi_send>: |
* Send a byte through SPI |
* inline because it increases the codesize currenlty 'only' by 110byte but saves |
* the context-change on every char and attribute which is at least done twice |
* (address and data byte), a significant speed-bost we do not want to miss :) |
*/ |
inline void spi_send(uint8_t byte) { |
91c: 48 2f mov r20, r24 |
91e: 50 e0 ldi r21, 0x00 ; 0 |
920: 27 e0 ldi r18, 0x07 ; 7 |
922: 30 e0 ldi r19, 0x00 ; 0 |
924: 09 c0 rjmp .+18 ; 0x938 <spi_send+0x1c> |
for (int8_t i = 7; i >= 0; i--) { |
if (((byte >> i) & 1)) { |
MAX_SDIN_HIGH |
926: da 9a sbi 0x1b, 2 ; 27 |
} else { |
MAX_SDIN_LOW |
} |
MAX_SCLK_HIGH |
928: db 9a sbi 0x1b, 3 ; 27 |
MAX_SCLK_LOW |
92a: db 98 cbi 0x1b, 3 ; 27 |
92c: 21 50 subi r18, 0x01 ; 1 |
92e: 30 40 sbci r19, 0x00 ; 0 |
* inline because it increases the codesize currenlty 'only' by 110byte but saves |
* the context-change on every char and attribute which is at least done twice |
* (address and data byte), a significant speed-bost we do not want to miss :) |
*/ |
inline void spi_send(uint8_t byte) { |
for (int8_t i = 7; i >= 0; i--) { |
930: 8f ef ldi r24, 0xFF ; 255 |
932: 2f 3f cpi r18, 0xFF ; 255 |
934: 38 07 cpc r19, r24 |
936: 91 f0 breq .+36 ; 0x95c <spi_send+0x40> |
if (((byte >> i) & 1)) { |
938: ca 01 movw r24, r20 |
93a: 02 2e mov r0, r18 |
93c: 02 c0 rjmp .+4 ; 0x942 <spi_send+0x26> |
93e: 95 95 asr r25 |
940: 87 95 ror r24 |
942: 0a 94 dec r0 |
944: e2 f7 brpl .-8 ; 0x93e <spi_send+0x22> |
946: 80 fd sbrc r24, 0 |
948: ee cf rjmp .-36 ; 0x926 <spi_send+0xa> |
MAX_SDIN_HIGH |
} else { |
MAX_SDIN_LOW |
94a: da 98 cbi 0x1b, 2 ; 27 |
} |
MAX_SCLK_HIGH |
94c: db 9a sbi 0x1b, 3 ; 27 |
MAX_SCLK_LOW |
94e: db 98 cbi 0x1b, 3 ; 27 |
950: 21 50 subi r18, 0x01 ; 1 |
952: 30 40 sbci r19, 0x00 ; 0 |
* inline because it increases the codesize currenlty 'only' by 110byte but saves |
* the context-change on every char and attribute which is at least done twice |
* (address and data byte), a significant speed-bost we do not want to miss :) |
*/ |
inline void spi_send(uint8_t byte) { |
for (int8_t i = 7; i >= 0; i--) { |
954: 8f ef ldi r24, 0xFF ; 255 |
956: 2f 3f cpi r18, 0xFF ; 255 |
958: 38 07 cpc r19, r24 |
95a: 71 f7 brne .-36 ; 0x938 <spi_send+0x1c> |
MAX_SDIN_LOW |
} |
MAX_SCLK_HIGH |
MAX_SCLK_LOW |
} |
} |
95c: 08 95 ret |
0000095e <spi_send_byte>: |
/** |
* Send <byte> to <address> of MAX7456 |
*/ |
void spi_send_byte(uint8_t address, uint8_t byte) { |
// start sending |
MAX_CS_LOW |
95e: d9 98 cbi 0x1b, 1 ; 27 |
960: 48 2f mov r20, r24 |
962: 50 e0 ldi r21, 0x00 ; 0 |
964: 27 e0 ldi r18, 0x07 ; 7 |
966: 30 e0 ldi r19, 0x00 ; 0 |
968: 09 c0 rjmp .+18 ; 0x97c <spi_send_byte+0x1e> |
* (address and data byte), a significant speed-bost we do not want to miss :) |
*/ |
inline void spi_send(uint8_t byte) { |
for (int8_t i = 7; i >= 0; i--) { |
if (((byte >> i) & 1)) { |
MAX_SDIN_HIGH |
96a: da 9a sbi 0x1b, 2 ; 27 |
} else { |
MAX_SDIN_LOW |
} |
MAX_SCLK_HIGH |
96c: db 9a sbi 0x1b, 3 ; 27 |
MAX_SCLK_LOW |
96e: db 98 cbi 0x1b, 3 ; 27 |
970: 21 50 subi r18, 0x01 ; 1 |
972: 30 40 sbci r19, 0x00 ; 0 |
* inline because it increases the codesize currenlty 'only' by 110byte but saves |
* the context-change on every char and attribute which is at least done twice |
* (address and data byte), a significant speed-bost we do not want to miss :) |
*/ |
inline void spi_send(uint8_t byte) { |
for (int8_t i = 7; i >= 0; i--) { |
974: 8f ef ldi r24, 0xFF ; 255 |
976: 2f 3f cpi r18, 0xFF ; 255 |
978: 38 07 cpc r19, r24 |
97a: 91 f0 breq .+36 ; 0x9a0 <spi_send_byte+0x42> |
if (((byte >> i) & 1)) { |
97c: ca 01 movw r24, r20 |
97e: 02 2e mov r0, r18 |
980: 02 c0 rjmp .+4 ; 0x986 <spi_send_byte+0x28> |
982: 95 95 asr r25 |
984: 87 95 ror r24 |
986: 0a 94 dec r0 |
988: e2 f7 brpl .-8 ; 0x982 <spi_send_byte+0x24> |
98a: 80 fd sbrc r24, 0 |
98c: ee cf rjmp .-36 ; 0x96a <spi_send_byte+0xc> |
MAX_SDIN_HIGH |
} else { |
MAX_SDIN_LOW |
98e: da 98 cbi 0x1b, 2 ; 27 |
} |
MAX_SCLK_HIGH |
990: db 9a sbi 0x1b, 3 ; 27 |
MAX_SCLK_LOW |
992: db 98 cbi 0x1b, 3 ; 27 |
994: 21 50 subi r18, 0x01 ; 1 |
996: 30 40 sbci r19, 0x00 ; 0 |
* inline because it increases the codesize currenlty 'only' by 110byte but saves |
* the context-change on every char and attribute which is at least done twice |
* (address and data byte), a significant speed-bost we do not want to miss :) |
*/ |
inline void spi_send(uint8_t byte) { |
for (int8_t i = 7; i >= 0; i--) { |
998: 8f ef ldi r24, 0xFF ; 255 |
99a: 2f 3f cpi r18, 0xFF ; 255 |
99c: 38 07 cpc r19, r24 |
99e: 71 f7 brne .-36 ; 0x97c <spi_send_byte+0x1e> |
9a0: 70 e0 ldi r23, 0x00 ; 0 |
9a2: 27 e0 ldi r18, 0x07 ; 7 |
9a4: 30 e0 ldi r19, 0x00 ; 0 |
9a6: 09 c0 rjmp .+18 ; 0x9ba <spi_send_byte+0x5c> |
if (((byte >> i) & 1)) { |
MAX_SDIN_HIGH |
9a8: da 9a sbi 0x1b, 2 ; 27 |
} else { |
MAX_SDIN_LOW |
} |
MAX_SCLK_HIGH |
9aa: db 9a sbi 0x1b, 3 ; 27 |
MAX_SCLK_LOW |
9ac: db 98 cbi 0x1b, 3 ; 27 |
9ae: 21 50 subi r18, 0x01 ; 1 |
9b0: 30 40 sbci r19, 0x00 ; 0 |
* inline because it increases the codesize currenlty 'only' by 110byte but saves |
* the context-change on every char and attribute which is at least done twice |
* (address and data byte), a significant speed-bost we do not want to miss :) |
*/ |
inline void spi_send(uint8_t byte) { |
for (int8_t i = 7; i >= 0; i--) { |
9b2: 8f ef ldi r24, 0xFF ; 255 |
9b4: 2f 3f cpi r18, 0xFF ; 255 |
9b6: 38 07 cpc r19, r24 |
9b8: 91 f0 breq .+36 ; 0x9de <spi_send_byte+0x80> |
if (((byte >> i) & 1)) { |
9ba: cb 01 movw r24, r22 |
9bc: 02 2e mov r0, r18 |
9be: 02 c0 rjmp .+4 ; 0x9c4 <spi_send_byte+0x66> |
9c0: 95 95 asr r25 |
9c2: 87 95 ror r24 |
9c4: 0a 94 dec r0 |
9c6: e2 f7 brpl .-8 ; 0x9c0 <spi_send_byte+0x62> |
9c8: 80 fd sbrc r24, 0 |
9ca: ee cf rjmp .-36 ; 0x9a8 <spi_send_byte+0x4a> |
MAX_SDIN_HIGH |
} else { |
MAX_SDIN_LOW |
9cc: da 98 cbi 0x1b, 2 ; 27 |
} |
MAX_SCLK_HIGH |
9ce: db 9a sbi 0x1b, 3 ; 27 |
MAX_SCLK_LOW |
9d0: db 98 cbi 0x1b, 3 ; 27 |
9d2: 21 50 subi r18, 0x01 ; 1 |
9d4: 30 40 sbci r19, 0x00 ; 0 |
* inline because it increases the codesize currenlty 'only' by 110byte but saves |
* the context-change on every char and attribute which is at least done twice |
* (address and data byte), a significant speed-bost we do not want to miss :) |
*/ |
inline void spi_send(uint8_t byte) { |
for (int8_t i = 7; i >= 0; i--) { |
9d6: 8f ef ldi r24, 0xFF ; 255 |
9d8: 2f 3f cpi r18, 0xFF ; 255 |
9da: 38 07 cpc r19, r24 |
9dc: 71 f7 brne .-36 ; 0x9ba <spi_send_byte+0x5c> |
spi_send(address); |
spi_send(byte); |
// end sending |
MAX_CS_HIGH |
9de: d9 9a sbi 0x1b, 1 ; 27 |
} |
9e0: 08 95 ret |
000009e2 <write_char>: |
/** |
* write a <character> to <address> of MAX7456 display memory |
*/ |
void write_char(uint16_t address, char character) { |
9e2: 0f 93 push r16 |
9e4: 1f 93 push r17 |
9e6: 18 2f mov r17, r24 |
9e8: 06 2f mov r16, r22 |
spi_send_byte(0x05, (address & 0xFF00) >> 8); // DMAH |
9ea: 85 e0 ldi r24, 0x05 ; 5 |
9ec: 69 2f mov r22, r25 |
9ee: 0e 94 af 04 call 0x95e ; 0x95e <spi_send_byte> |
spi_send_byte(0x06, (address & 0x00FF)); // DMAL |
9f2: 86 e0 ldi r24, 0x06 ; 6 |
9f4: 61 2f mov r22, r17 |
9f6: 0e 94 af 04 call 0x95e ; 0x95e <spi_send_byte> |
spi_send_byte(0x07, character); // DMDI |
9fa: 87 e0 ldi r24, 0x07 ; 7 |
9fc: 60 2f mov r22, r16 |
9fe: 0e 94 af 04 call 0x95e ; 0x95e <spi_send_byte> |
} |
a02: 1f 91 pop r17 |
a04: 0f 91 pop r16 |
a06: 08 95 ret |
00000a08 <write_char_xy>: |
/** |
* write a <character> at <x>/<y> to MAX7456 display memory |
*/ |
void write_char_xy(uint8_t x, uint8_t y, char character) { |
uint16_t address = y * 30 + x; |
write_char(address, character); |
a08: 9e e1 ldi r25, 0x1E ; 30 |
a0a: 69 9f mul r22, r25 |
a0c: b0 01 movw r22, r0 |
a0e: 11 24 eor r1, r1 |
a10: 9b 01 movw r18, r22 |
a12: 28 0f add r18, r24 |
a14: 31 1d adc r19, r1 |
a16: c9 01 movw r24, r18 |
a18: 64 2f mov r22, r20 |
a1a: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
} |
a1e: 08 95 ret |
00000a20 <write_ascii_char>: |
} |
/** |
* write an ascii <character> to <address> of MAX7456 display memory |
*/ |
void write_ascii_char(uint16_t address, char c) { |
a20: 9c 01 movw r18, r24 |
if (c == 32) c = 0; // remap space |
a22: 60 32 cpi r22, 0x20 ; 32 |
a24: 19 f1 breq .+70 ; 0xa6c <write_ascii_char+0x4c> |
else if (c > 48 && c <= 57) c -= 48; // remap numbers |
a26: 86 2f mov r24, r22 |
a28: 81 53 subi r24, 0x31 ; 49 |
a2a: 89 30 cpi r24, 0x09 ; 9 |
a2c: d0 f0 brcs .+52 ; 0xa62 <write_ascii_char+0x42> |
else if (c == '0') c = 10; // remap zero |
a2e: 60 33 cpi r22, 0x30 ; 48 |
a30: 39 f1 breq .+78 ; 0xa80 <write_ascii_char+0x60> |
else if (c >= 65 && c <= 90) c -= 54; // remap big letters |
a32: 86 2f mov r24, r22 |
a34: 81 54 subi r24, 0x41 ; 65 |
a36: 8a 31 cpi r24, 0x1A ; 26 |
a38: f0 f0 brcs .+60 ; 0xa76 <write_ascii_char+0x56> |
else if (c >= 97 && c <= 122) c -= 60; // remap small letters |
a3a: 86 2f mov r24, r22 |
a3c: 81 56 subi r24, 0x61 ; 97 |
a3e: 8a 31 cpi r24, 0x1A ; 26 |
a40: 20 f1 brcs .+72 ; 0xa8a <write_ascii_char+0x6a> |
else if (c == '(') c = 63; // remap |
a42: 68 32 cpi r22, 0x28 ; 40 |
a44: 31 f1 breq .+76 ; 0xa92 <write_ascii_char+0x72> |
else if (c == ')') c = 64; // remap |
a46: 69 32 cpi r22, 0x29 ; 41 |
a48: 11 f1 breq .+68 ; 0xa8e <write_ascii_char+0x6e> |
else if (c == '.') c = 65; // remap |
a4a: 6e 32 cpi r22, 0x2E ; 46 |
a4c: 21 f1 breq .+72 ; 0xa96 <write_ascii_char+0x76> |
else if (c == '-') c = 73; // remap minus |
a4e: 6d 32 cpi r22, 0x2D ; 45 |
a50: 21 f1 breq .+72 ; 0xa9a <write_ascii_char+0x7a> |
else if (c == ';') c = 67; // remap |
a52: 6b 33 cpi r22, 0x3B ; 59 |
a54: 21 f1 breq .+72 ; 0xa9e <write_ascii_char+0x7e> |
else if (c == ':') c = 68; // remap |
a56: 6a 33 cpi r22, 0x3A ; 58 |
a58: 21 f1 breq .+72 ; 0xaa2 <write_ascii_char+0x82> |
else if (c == ',') c = 69; // remap |
a5a: 6c 32 cpi r22, 0x2C ; 44 |
a5c: 19 f4 brne .+6 ; 0xa64 <write_ascii_char+0x44> |
a5e: 65 e4 ldi r22, 0x45 ; 69 |
a60: 01 c0 rjmp .+2 ; 0xa64 <write_ascii_char+0x44> |
/** |
* write an ascii <character> to <address> of MAX7456 display memory |
*/ |
void write_ascii_char(uint16_t address, char c) { |
if (c == 32) c = 0; // remap space |
else if (c > 48 && c <= 57) c -= 48; // remap numbers |
a62: 60 53 subi r22, 0x30 ; 48 |
// else if (c == '/') c = 71; // remap |
// else if (c == '"') c = 72; // remap |
// else if (c == '<') c = 74; // remap |
// else if (c == '>') c = 75; // remap |
// else if (c == '@') c = 76; // remap |
write_char(address, c); |
a64: c9 01 movw r24, r18 |
a66: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
} |
a6a: 08 95 ret |
/** |
* write an ascii <character> to <address> of MAX7456 display memory |
*/ |
void write_ascii_char(uint16_t address, char c) { |
if (c == 32) c = 0; // remap space |
a6c: 60 e0 ldi r22, 0x00 ; 0 |
// else if (c == '/') c = 71; // remap |
// else if (c == '"') c = 72; // remap |
// else if (c == '<') c = 74; // remap |
// else if (c == '>') c = 75; // remap |
// else if (c == '@') c = 76; // remap |
write_char(address, c); |
a6e: c9 01 movw r24, r18 |
a70: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
} |
a74: 08 95 ret |
*/ |
void write_ascii_char(uint16_t address, char c) { |
if (c == 32) c = 0; // remap space |
else if (c > 48 && c <= 57) c -= 48; // remap numbers |
else if (c == '0') c = 10; // remap zero |
else if (c >= 65 && c <= 90) c -= 54; // remap big letters |
a76: 66 53 subi r22, 0x36 ; 54 |
// else if (c == '/') c = 71; // remap |
// else if (c == '"') c = 72; // remap |
// else if (c == '<') c = 74; // remap |
// else if (c == '>') c = 75; // remap |
// else if (c == '@') c = 76; // remap |
write_char(address, c); |
a78: c9 01 movw r24, r18 |
a7a: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
} |
a7e: 08 95 ret |
* write an ascii <character> to <address> of MAX7456 display memory |
*/ |
void write_ascii_char(uint16_t address, char c) { |
if (c == 32) c = 0; // remap space |
else if (c > 48 && c <= 57) c -= 48; // remap numbers |
else if (c == '0') c = 10; // remap zero |
a80: 6a e0 ldi r22, 0x0A ; 10 |
// else if (c == '/') c = 71; // remap |
// else if (c == '"') c = 72; // remap |
// else if (c == '<') c = 74; // remap |
// else if (c == '>') c = 75; // remap |
// else if (c == '@') c = 76; // remap |
write_char(address, c); |
a82: c9 01 movw r24, r18 |
a84: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
} |
a88: 08 95 ret |
void write_ascii_char(uint16_t address, char c) { |
if (c == 32) c = 0; // remap space |
else if (c > 48 && c <= 57) c -= 48; // remap numbers |
else if (c == '0') c = 10; // remap zero |
else if (c >= 65 && c <= 90) c -= 54; // remap big letters |
else if (c >= 97 && c <= 122) c -= 60; // remap small letters |
a8a: 6c 53 subi r22, 0x3C ; 60 |
a8c: eb cf rjmp .-42 ; 0xa64 <write_ascii_char+0x44> |
else if (c == '(') c = 63; // remap |
else if (c == ')') c = 64; // remap |
a8e: 60 e4 ldi r22, 0x40 ; 64 |
a90: e9 cf rjmp .-46 ; 0xa64 <write_ascii_char+0x44> |
if (c == 32) c = 0; // remap space |
else if (c > 48 && c <= 57) c -= 48; // remap numbers |
else if (c == '0') c = 10; // remap zero |
else if (c >= 65 && c <= 90) c -= 54; // remap big letters |
else if (c >= 97 && c <= 122) c -= 60; // remap small letters |
else if (c == '(') c = 63; // remap |
a92: 6f e3 ldi r22, 0x3F ; 63 |
a94: e7 cf rjmp .-50 ; 0xa64 <write_ascii_char+0x44> |
else if (c == ')') c = 64; // remap |
else if (c == '.') c = 65; // remap |
a96: 61 e4 ldi r22, 0x41 ; 65 |
a98: e5 cf rjmp .-54 ; 0xa64 <write_ascii_char+0x44> |
else if (c == '-') c = 73; // remap minus |
a9a: 69 e4 ldi r22, 0x49 ; 73 |
a9c: e3 cf rjmp .-58 ; 0xa64 <write_ascii_char+0x44> |
else if (c == ';') c = 67; // remap |
a9e: 63 e4 ldi r22, 0x43 ; 67 |
aa0: e1 cf rjmp .-62 ; 0xa64 <write_ascii_char+0x44> |
else if (c == ':') c = 68; // remap |
aa2: 64 e4 ldi r22, 0x44 ; 68 |
aa4: df cf rjmp .-66 ; 0xa64 <write_ascii_char+0x44> |
00000aa6 <write_ascii_string>: |
} |
/** |
* write an ascii <string> at <x>/<y> to MAX7456 display memory |
*/ |
void write_ascii_string(uint8_t x, uint8_t y, char *string) { |
aa6: ff 92 push r15 |
aa8: 0f 93 push r16 |
aaa: 1f 93 push r17 |
aac: cf 93 push r28 |
aae: df 93 push r29 |
ab0: f8 2e mov r15, r24 |
ab2: ea 01 movw r28, r20 |
while (*string) { |
ab4: 48 81 ld r20, Y |
ab6: 44 23 and r20, r20 |
ab8: d9 f0 breq .+54 ; 0xaf0 <write_ascii_string+0x4a> |
aba: 26 2f mov r18, r22 |
abc: 30 e0 ldi r19, 0x00 ; 0 |
abe: c9 01 movw r24, r18 |
ac0: 88 0f add r24, r24 |
ac2: 99 1f adc r25, r25 |
ac4: 82 0f add r24, r18 |
ac6: 93 1f adc r25, r19 |
ac8: 8c 01 movw r16, r24 |
aca: 00 0f add r16, r16 |
acc: 11 1f adc r17, r17 |
ace: 00 0f add r16, r16 |
ad0: 11 1f adc r17, r17 |
ad2: 08 0f add r16, r24 |
ad4: 19 1f adc r17, r25 |
ad6: 00 0f add r16, r16 |
ad8: 11 1f adc r17, r17 |
write_ascii_char(((x++)+(y * 30)), *string); |
ada: c8 01 movw r24, r16 |
adc: 8f 0d add r24, r15 |
ade: 91 1d adc r25, r1 |
ae0: f3 94 inc r15 |
ae2: 64 2f mov r22, r20 |
ae4: 0e 94 10 05 call 0xa20 ; 0xa20 <write_ascii_char> |
string++; |
ae8: 21 96 adiw r28, 0x01 ; 1 |
/** |
* write an ascii <string> at <x>/<y> to MAX7456 display memory |
*/ |
void write_ascii_string(uint8_t x, uint8_t y, char *string) { |
while (*string) { |
aea: 48 81 ld r20, Y |
aec: 44 23 and r20, r20 |
aee: a9 f7 brne .-22 ; 0xada <write_ascii_string+0x34> |
write_ascii_char(((x++)+(y * 30)), *string); |
string++; |
} |
} |
af0: df 91 pop r29 |
af2: cf 91 pop r28 |
af4: 1f 91 pop r17 |
af6: 0f 91 pop r16 |
af8: ff 90 pop r15 |
afa: 08 95 ret |
00000afc <write_ascii_string_pgm>: |
/** |
* write an ascii <string> from progmen at <x>/<y> to MAX7456 display memory |
*/ |
void write_ascii_string_pgm(uint8_t x, uint8_t y, const char *string) { |
afc: ff 92 push r15 |
afe: 0f 93 push r16 |
b00: 1f 93 push r17 |
b02: cf 93 push r28 |
b04: df 93 push r29 |
b06: f8 2e mov r15, r24 |
b08: ea 01 movw r28, r20 |
while (pgm_read_byte(string) != 0x00) |
b0a: fe 01 movw r30, r28 |
b0c: 84 91 lpm r24, Z+ |
b0e: 88 23 and r24, r24 |
b10: f1 f0 breq .+60 ; 0xb4e <write_ascii_string_pgm+0x52> |
b12: 26 2f mov r18, r22 |
b14: 30 e0 ldi r19, 0x00 ; 0 |
b16: c9 01 movw r24, r18 |
b18: 88 0f add r24, r24 |
b1a: 99 1f adc r25, r25 |
b1c: 82 0f add r24, r18 |
b1e: 93 1f adc r25, r19 |
b20: 8c 01 movw r16, r24 |
b22: 00 0f add r16, r16 |
b24: 11 1f adc r17, r17 |
b26: 00 0f add r16, r16 |
b28: 11 1f adc r17, r17 |
b2a: 08 0f add r16, r24 |
b2c: 19 1f adc r17, r25 |
b2e: 00 0f add r16, r16 |
b30: 11 1f adc r17, r17 |
write_ascii_char(((x++)+(y * 30)), pgm_read_byte(string++)); |
b32: c8 01 movw r24, r16 |
b34: 8f 0d add r24, r15 |
b36: 91 1d adc r25, r1 |
b38: f3 94 inc r15 |
b3a: 21 96 adiw r28, 0x01 ; 1 |
b3c: fa 01 movw r30, r20 |
b3e: 64 91 lpm r22, Z+ |
b40: 0e 94 10 05 call 0xa20 ; 0xa20 <write_ascii_char> |
b44: ae 01 movw r20, r28 |
/** |
* write an ascii <string> from progmen at <x>/<y> to MAX7456 display memory |
*/ |
void write_ascii_string_pgm(uint8_t x, uint8_t y, const char *string) { |
while (pgm_read_byte(string) != 0x00) |
b46: fe 01 movw r30, r28 |
b48: 84 91 lpm r24, Z+ |
b4a: 88 23 and r24, r24 |
b4c: 91 f7 brne .-28 ; 0xb32 <write_ascii_string_pgm+0x36> |
write_ascii_char(((x++)+(y * 30)), pgm_read_byte(string++)); |
} |
b4e: df 91 pop r29 |
b50: cf 91 pop r28 |
b52: 1f 91 pop r17 |
b54: 0f 91 pop r16 |
b56: ff 90 pop r15 |
b58: 08 95 ret |
00000b5a <write_string_pgm_down>: |
/** |
* write an <string> from progmen at <x>/<y> downwards to MAX7456 display memory |
*/ |
void write_string_pgm_down(uint8_t x, uint8_t y, const char *string, uint8_t length) { |
b5a: df 92 push r13 |
b5c: ef 92 push r14 |
b5e: ff 92 push r15 |
b60: 0f 93 push r16 |
b62: 1f 93 push r17 |
b64: cf 93 push r28 |
b66: df 93 push r29 |
b68: 06 2f mov r16, r22 |
b6a: ea 01 movw r28, r20 |
b6c: 12 2f mov r17, r18 |
while (length--) |
b6e: 22 23 and r18, r18 |
b70: 91 f0 breq .+36 ; 0xb96 <write_string_pgm_down+0x3c> |
b72: e8 2e mov r14, r24 |
b74: ff 24 eor r15, r15 |
write_char((x+(y++ * 30)), pgm_read_byte(string++)); |
b76: fe e1 ldi r31, 0x1E ; 30 |
b78: df 2e mov r13, r31 |
b7a: 0d 9d mul r16, r13 |
b7c: c0 01 movw r24, r0 |
b7e: 11 24 eor r1, r1 |
b80: 0f 5f subi r16, 0xFF ; 255 |
b82: fe 01 movw r30, r28 |
b84: 21 96 adiw r28, 0x01 ; 1 |
b86: e4 91 lpm r30, Z+ |
b88: 8e 0d add r24, r14 |
b8a: 9f 1d adc r25, r15 |
b8c: 6e 2f mov r22, r30 |
b8e: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
b92: 11 50 subi r17, 0x01 ; 1 |
/** |
* write an <string> from progmen at <x>/<y> downwards to MAX7456 display memory |
*/ |
void write_string_pgm_down(uint8_t x, uint8_t y, const char *string, uint8_t length) { |
while (length--) |
b94: 91 f7 brne .-28 ; 0xb7a <write_string_pgm_down+0x20> |
write_char((x+(y++ * 30)), pgm_read_byte(string++)); |
} |
b96: df 91 pop r29 |
b98: cf 91 pop r28 |
b9a: 1f 91 pop r17 |
b9c: 0f 91 pop r16 |
b9e: ff 90 pop r15 |
ba0: ef 90 pop r14 |
ba2: df 90 pop r13 |
ba4: 08 95 ret |
00000ba6 <write_ndigit_number_s_10th>: |
/** |
* Write a signed <number> at <x>/<y> to MAX7456 display memory as /10th of value |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s_10th(uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad) { |
ba6: 8f 92 push r8 |
ba8: 9f 92 push r9 |
baa: af 92 push r10 |
bac: bf 92 push r11 |
bae: cf 92 push r12 |
bb0: df 92 push r13 |
bb2: ef 92 push r14 |
bb4: ff 92 push r15 |
bb6: 0f 93 push r16 |
bb8: 1f 93 push r17 |
bba: cf 93 push r28 |
bbc: df 93 push r29 |
bbe: d8 2e mov r13, r24 |
bc0: 86 2e mov r8, r22 |
bc2: ca 01 movw r24, r20 |
bc4: e9 01 movw r28, r18 |
bc6: c0 2e mov r12, r16 |
itoa(number, conv_array, 10 ); |
bc8: 06 e9 ldi r16, 0x96 ; 150 |
bca: 12 e0 ldi r17, 0x02 ; 2 |
bcc: b8 01 movw r22, r16 |
bce: 4a e0 ldi r20, 0x0A ; 10 |
bd0: 50 e0 ldi r21, 0x00 ; 0 |
bd2: 0e 94 cc 1c call 0x3998 ; 0x3998 <itoa> |
uint8_t len = strlen(conv_array); |
bd6: f8 01 movw r30, r16 |
bd8: 01 90 ld r0, Z+ |
bda: 00 20 and r0, r0 |
bdc: e9 f7 brne .-6 ; 0xbd8 <write_ndigit_number_s_10th+0x32> |
bde: 8f 01 movw r16, r30 |
be0: 01 50 subi r16, 0x01 ; 1 |
be2: 10 40 sbci r17, 0x00 ; 0 |
be4: 06 59 subi r16, 0x96 ; 150 |
be6: 12 40 sbci r17, 0x02 ; 2 |
be8: 90 2e mov r9, r16 |
for (uint8_t i = 0; i < length - len; i++) { |
bea: a0 2e mov r10, r16 |
bec: bb 24 eor r11, r11 |
bee: ca 19 sub r28, r10 |
bf0: db 09 sbc r29, r11 |
bf2: 1c 16 cp r1, r28 |
bf4: 1d 06 cpc r1, r29 |
bf6: 0c f0 brlt .+2 ; 0xbfa <write_ndigit_number_s_10th+0x54> |
bf8: 74 c0 rjmp .+232 ; 0xce2 <write_ndigit_number_s_10th+0x13c> |
bfa: 8e e1 ldi r24, 0x1E ; 30 |
bfc: 88 9e mul r8, r24 |
bfe: 70 01 movw r14, r0 |
c00: 11 24 eor r1, r1 |
c02: d3 94 inc r13 |
c04: 10 e0 ldi r17, 0x00 ; 0 |
c06: 10 c0 rjmp .+32 ; 0xc28 <write_ndigit_number_s_10th+0x82> |
if (pad) write_char((x++)+(y * 30), 10); // zero |
c08: 97 01 movw r18, r14 |
c0a: 28 0f add r18, r24 |
c0c: 31 1d adc r19, r1 |
c0e: c9 01 movw r24, r18 |
c10: 6a e0 ldi r22, 0x0A ; 10 |
c12: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s_10th(uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
uint8_t len = strlen(conv_array); |
for (uint8_t i = 0; i < length - len; i++) { |
c16: 1f 5f subi r17, 0xFF ; 255 |
c18: 2d 2d mov r18, r13 |
c1a: 2f 5f subi r18, 0xFF ; 255 |
c1c: 81 2f mov r24, r17 |
c1e: 90 e0 ldi r25, 0x00 ; 0 |
c20: 8c 17 cp r24, r28 |
c22: 9d 07 cpc r25, r29 |
c24: a4 f4 brge .+40 ; 0xc4e <write_ndigit_number_s_10th+0xa8> |
c26: d2 2e mov r13, r18 |
c28: 8d 2d mov r24, r13 |
c2a: 81 50 subi r24, 0x01 ; 1 |
if (pad) write_char((x++)+(y * 30), 10); // zero |
c2c: cc 20 and r12, r12 |
c2e: 61 f7 brne .-40 ; 0xc08 <write_ndigit_number_s_10th+0x62> |
else write_char((x++)+(y * 30), 0); // blank |
c30: f7 01 movw r30, r14 |
c32: e8 0f add r30, r24 |
c34: f1 1d adc r31, r1 |
c36: cf 01 movw r24, r30 |
c38: 60 e0 ldi r22, 0x00 ; 0 |
c3a: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s_10th(uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
uint8_t len = strlen(conv_array); |
for (uint8_t i = 0; i < length - len; i++) { |
c3e: 1f 5f subi r17, 0xFF ; 255 |
c40: 2d 2d mov r18, r13 |
c42: 2f 5f subi r18, 0xFF ; 255 |
c44: 81 2f mov r24, r17 |
c46: 90 e0 ldi r25, 0x00 ; 0 |
c48: 8c 17 cp r24, r28 |
c4a: 9d 07 cpc r25, r29 |
c4c: 64 f3 brlt .-40 ; 0xc26 <write_ndigit_number_s_10th+0x80> |
if (pad) write_char((x++)+(y * 30), 10); // zero |
else write_char((x++)+(y * 30), 0); // blank |
} |
char rest = conv_array[len - 1]; |
c4e: f5 01 movw r30, r10 |
c50: eb 56 subi r30, 0x6B ; 107 |
c52: fd 4f sbci r31, 0xFD ; 253 |
c54: c0 80 ld r12, Z |
conv_array[len - 1] = 0; |
c56: 10 82 st Z, r1 |
if (len == 1) { |
c58: f1 e0 ldi r31, 0x01 ; 1 |
c5a: 9f 16 cp r9, r31 |
c5c: d1 f1 breq .+116 ; 0xcd2 <write_ndigit_number_s_10th+0x12c> |
write_char((x-1)+(y * 30), 10); // zero |
} else if (len == 2 && conv_array[0] == '-') { |
c5e: 22 e0 ldi r18, 0x02 ; 2 |
c60: 92 16 cp r9, r18 |
c62: 19 f1 breq .+70 ; 0xcaa <write_ndigit_number_s_10th+0x104> |
write_char((x-1)+(y * 30), 0x49); // minus |
write_char((x)+(y * 30), 10); // zero |
} else { |
write_ascii_string(x, y, conv_array); |
c64: 8d 2d mov r24, r13 |
c66: 68 2d mov r22, r8 |
c68: 46 e9 ldi r20, 0x96 ; 150 |
c6a: 52 e0 ldi r21, 0x02 ; 2 |
c6c: 0e 94 53 05 call 0xaa6 ; 0xaa6 <write_ascii_string> |
} |
x += len - 1; |
c70: 19 2d mov r17, r9 |
c72: 11 50 subi r17, 0x01 ; 1 |
c74: 1d 0d add r17, r13 |
write_char((x++)+(y * 30), 65); // decimal point |
c76: c7 01 movw r24, r14 |
c78: 81 0f add r24, r17 |
c7a: 91 1d adc r25, r1 |
c7c: 61 e4 ldi r22, 0x41 ; 65 |
c7e: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
write_ascii_char((x++)+(y * 30), rest); // after dot |
c82: 1f 5f subi r17, 0xFF ; 255 |
c84: c7 01 movw r24, r14 |
c86: 81 0f add r24, r17 |
c88: 91 1d adc r25, r1 |
c8a: 6c 2d mov r22, r12 |
c8c: 0e 94 10 05 call 0xa20 ; 0xa20 <write_ascii_char> |
} |
c90: df 91 pop r29 |
c92: cf 91 pop r28 |
c94: 1f 91 pop r17 |
c96: 0f 91 pop r16 |
c98: ff 90 pop r15 |
c9a: ef 90 pop r14 |
c9c: df 90 pop r13 |
c9e: cf 90 pop r12 |
ca0: bf 90 pop r11 |
ca2: af 90 pop r10 |
ca4: 9f 90 pop r9 |
ca6: 8f 90 pop r8 |
ca8: 08 95 ret |
} |
char rest = conv_array[len - 1]; |
conv_array[len - 1] = 0; |
if (len == 1) { |
write_char((x-1)+(y * 30), 10); // zero |
} else if (len == 2 && conv_array[0] == '-') { |
caa: 80 91 96 02 lds r24, 0x0296 |
cae: 8d 32 cpi r24, 0x2D ; 45 |
cb0: c9 f6 brne .-78 ; 0xc64 <write_ndigit_number_s_10th+0xbe> |
write_char((x-1)+(y * 30), 0x49); // minus |
cb2: 0d 2d mov r16, r13 |
cb4: 10 e0 ldi r17, 0x00 ; 0 |
cb6: c7 01 movw r24, r14 |
cb8: 01 97 sbiw r24, 0x01 ; 1 |
cba: 80 0f add r24, r16 |
cbc: 91 1f adc r25, r17 |
cbe: 69 e4 ldi r22, 0x49 ; 73 |
cc0: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
write_char((x)+(y * 30), 10); // zero |
cc4: c8 01 movw r24, r16 |
cc6: 8e 0d add r24, r14 |
cc8: 9f 1d adc r25, r15 |
cca: 6a e0 ldi r22, 0x0A ; 10 |
ccc: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
cd0: cf cf rjmp .-98 ; 0xc70 <write_ndigit_number_s_10th+0xca> |
else write_char((x++)+(y * 30), 0); // blank |
} |
char rest = conv_array[len - 1]; |
conv_array[len - 1] = 0; |
if (len == 1) { |
write_char((x-1)+(y * 30), 10); // zero |
cd2: c7 01 movw r24, r14 |
cd4: 01 97 sbiw r24, 0x01 ; 1 |
cd6: 8d 0d add r24, r13 |
cd8: 91 1d adc r25, r1 |
cda: 6a e0 ldi r22, 0x0A ; 10 |
cdc: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
ce0: c7 cf rjmp .-114 ; 0xc70 <write_ndigit_number_s_10th+0xca> |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s_10th(uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
uint8_t len = strlen(conv_array); |
for (uint8_t i = 0; i < length - len; i++) { |
ce2: 8e e1 ldi r24, 0x1E ; 30 |
ce4: 88 9e mul r8, r24 |
ce6: 70 01 movw r14, r0 |
ce8: 11 24 eor r1, r1 |
cea: b1 cf rjmp .-158 ; 0xc4e <write_ndigit_number_s_10th+0xa8> |
00000cec <write_ndigit_number_u_10th>: |
/** |
* Write a unsigned <number> at <x>/<y> to MAX7456 display memory as /10th of value |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u_10th(uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad) { |
cec: 8f 92 push r8 |
cee: 9f 92 push r9 |
cf0: af 92 push r10 |
cf2: bf 92 push r11 |
cf4: cf 92 push r12 |
cf6: df 92 push r13 |
cf8: ef 92 push r14 |
cfa: ff 92 push r15 |
cfc: 0f 93 push r16 |
cfe: 1f 93 push r17 |
d00: cf 93 push r28 |
d02: df 93 push r29 |
d04: d8 2e mov r13, r24 |
d06: 86 2e mov r8, r22 |
d08: ca 01 movw r24, r20 |
d0a: e9 01 movw r28, r18 |
d0c: c0 2e mov r12, r16 |
itoa(number, conv_array, 10 ); |
d0e: 06 e9 ldi r16, 0x96 ; 150 |
d10: 12 e0 ldi r17, 0x02 ; 2 |
d12: b8 01 movw r22, r16 |
d14: 4a e0 ldi r20, 0x0A ; 10 |
d16: 50 e0 ldi r21, 0x00 ; 0 |
d18: 0e 94 cc 1c call 0x3998 ; 0x3998 <itoa> |
uint8_t len = strlen(conv_array); |
d1c: f8 01 movw r30, r16 |
d1e: 01 90 ld r0, Z+ |
d20: 00 20 and r0, r0 |
d22: e9 f7 brne .-6 ; 0xd1e <write_ndigit_number_u_10th+0x32> |
d24: 8f 01 movw r16, r30 |
d26: 01 50 subi r16, 0x01 ; 1 |
d28: 10 40 sbci r17, 0x00 ; 0 |
d2a: 06 59 subi r16, 0x96 ; 150 |
d2c: 12 40 sbci r17, 0x02 ; 2 |
d2e: 90 2e mov r9, r16 |
for (uint8_t i = 0; i < length - len; i++) { |
d30: a0 2e mov r10, r16 |
d32: bb 24 eor r11, r11 |
d34: ca 19 sub r28, r10 |
d36: db 09 sbc r29, r11 |
d38: 1c 16 cp r1, r28 |
d3a: 1d 06 cpc r1, r29 |
d3c: 0c f0 brlt .+2 ; 0xd40 <write_ndigit_number_u_10th+0x54> |
d3e: 74 c0 rjmp .+232 ; 0xe28 <write_ndigit_number_u_10th+0x13c> |
d40: 8e e1 ldi r24, 0x1E ; 30 |
d42: 88 9e mul r8, r24 |
d44: 70 01 movw r14, r0 |
d46: 11 24 eor r1, r1 |
d48: d3 94 inc r13 |
d4a: 10 e0 ldi r17, 0x00 ; 0 |
d4c: 10 c0 rjmp .+32 ; 0xd6e <write_ndigit_number_u_10th+0x82> |
if (pad) write_char((x++)+(y * 30), 10); // zero |
d4e: 97 01 movw r18, r14 |
d50: 28 0f add r18, r24 |
d52: 31 1d adc r19, r1 |
d54: c9 01 movw r24, r18 |
d56: 6a e0 ldi r22, 0x0A ; 10 |
d58: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u_10th(uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
uint8_t len = strlen(conv_array); |
for (uint8_t i = 0; i < length - len; i++) { |
d5c: 1f 5f subi r17, 0xFF ; 255 |
d5e: 2d 2d mov r18, r13 |
d60: 2f 5f subi r18, 0xFF ; 255 |
d62: 81 2f mov r24, r17 |
d64: 90 e0 ldi r25, 0x00 ; 0 |
d66: 8c 17 cp r24, r28 |
d68: 9d 07 cpc r25, r29 |
d6a: a4 f4 brge .+40 ; 0xd94 <write_ndigit_number_u_10th+0xa8> |
d6c: d2 2e mov r13, r18 |
d6e: 8d 2d mov r24, r13 |
d70: 81 50 subi r24, 0x01 ; 1 |
if (pad) write_char((x++)+(y * 30), 10); // zero |
d72: cc 20 and r12, r12 |
d74: 61 f7 brne .-40 ; 0xd4e <write_ndigit_number_u_10th+0x62> |
else write_char((x++)+(y * 30), 0); // blank |
d76: f7 01 movw r30, r14 |
d78: e8 0f add r30, r24 |
d7a: f1 1d adc r31, r1 |
d7c: cf 01 movw r24, r30 |
d7e: 60 e0 ldi r22, 0x00 ; 0 |
d80: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u_10th(uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
uint8_t len = strlen(conv_array); |
for (uint8_t i = 0; i < length - len; i++) { |
d84: 1f 5f subi r17, 0xFF ; 255 |
d86: 2d 2d mov r18, r13 |
d88: 2f 5f subi r18, 0xFF ; 255 |
d8a: 81 2f mov r24, r17 |
d8c: 90 e0 ldi r25, 0x00 ; 0 |
d8e: 8c 17 cp r24, r28 |
d90: 9d 07 cpc r25, r29 |
d92: 64 f3 brlt .-40 ; 0xd6c <write_ndigit_number_u_10th+0x80> |
if (pad) write_char((x++)+(y * 30), 10); // zero |
else write_char((x++)+(y * 30), 0); // blank |
} |
char rest = conv_array[len - 1]; |
d94: f5 01 movw r30, r10 |
d96: eb 56 subi r30, 0x6B ; 107 |
d98: fd 4f sbci r31, 0xFD ; 253 |
d9a: c0 80 ld r12, Z |
conv_array[len - 1] = 0; |
d9c: 10 82 st Z, r1 |
if (len == 1) { |
d9e: f1 e0 ldi r31, 0x01 ; 1 |
da0: 9f 16 cp r9, r31 |
da2: d1 f1 breq .+116 ; 0xe18 <write_ndigit_number_u_10th+0x12c> |
write_char((x-1)+(y * 30), 10); // zero |
} else if (len == 2 && conv_array[0] == '-') { |
da4: 22 e0 ldi r18, 0x02 ; 2 |
da6: 92 16 cp r9, r18 |
da8: 19 f1 breq .+70 ; 0xdf0 <write_ndigit_number_u_10th+0x104> |
write_char((x-1)+(y * 30), 0x49); // minus |
write_char((x)+(y * 30), 10); // zero |
} else { |
write_ascii_string(x, y, conv_array); |
daa: 8d 2d mov r24, r13 |
dac: 68 2d mov r22, r8 |
dae: 46 e9 ldi r20, 0x96 ; 150 |
db0: 52 e0 ldi r21, 0x02 ; 2 |
db2: 0e 94 53 05 call 0xaa6 ; 0xaa6 <write_ascii_string> |
} |
x += len - 1; |
db6: 19 2d mov r17, r9 |
db8: 11 50 subi r17, 0x01 ; 1 |
dba: 1d 0d add r17, r13 |
write_char((x++)+(y * 30), 65); // decimal point |
dbc: c7 01 movw r24, r14 |
dbe: 81 0f add r24, r17 |
dc0: 91 1d adc r25, r1 |
dc2: 61 e4 ldi r22, 0x41 ; 65 |
dc4: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
write_ascii_char((x++)+(y * 30), rest); // after dot |
dc8: 1f 5f subi r17, 0xFF ; 255 |
dca: c7 01 movw r24, r14 |
dcc: 81 0f add r24, r17 |
dce: 91 1d adc r25, r1 |
dd0: 6c 2d mov r22, r12 |
dd2: 0e 94 10 05 call 0xa20 ; 0xa20 <write_ascii_char> |
} |
dd6: df 91 pop r29 |
dd8: cf 91 pop r28 |
dda: 1f 91 pop r17 |
ddc: 0f 91 pop r16 |
dde: ff 90 pop r15 |
de0: ef 90 pop r14 |
de2: df 90 pop r13 |
de4: cf 90 pop r12 |
de6: bf 90 pop r11 |
de8: af 90 pop r10 |
dea: 9f 90 pop r9 |
dec: 8f 90 pop r8 |
dee: 08 95 ret |
} |
char rest = conv_array[len - 1]; |
conv_array[len - 1] = 0; |
if (len == 1) { |
write_char((x-1)+(y * 30), 10); // zero |
} else if (len == 2 && conv_array[0] == '-') { |
df0: 80 91 96 02 lds r24, 0x0296 |
df4: 8d 32 cpi r24, 0x2D ; 45 |
df6: c9 f6 brne .-78 ; 0xdaa <write_ndigit_number_u_10th+0xbe> |
write_char((x-1)+(y * 30), 0x49); // minus |
df8: 0d 2d mov r16, r13 |
dfa: 10 e0 ldi r17, 0x00 ; 0 |
dfc: c7 01 movw r24, r14 |
dfe: 01 97 sbiw r24, 0x01 ; 1 |
e00: 80 0f add r24, r16 |
e02: 91 1f adc r25, r17 |
e04: 69 e4 ldi r22, 0x49 ; 73 |
e06: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
write_char((x)+(y * 30), 10); // zero |
e0a: c8 01 movw r24, r16 |
e0c: 8e 0d add r24, r14 |
e0e: 9f 1d adc r25, r15 |
e10: 6a e0 ldi r22, 0x0A ; 10 |
e12: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
e16: cf cf rjmp .-98 ; 0xdb6 <write_ndigit_number_u_10th+0xca> |
else write_char((x++)+(y * 30), 0); // blank |
} |
char rest = conv_array[len - 1]; |
conv_array[len - 1] = 0; |
if (len == 1) { |
write_char((x-1)+(y * 30), 10); // zero |
e18: c7 01 movw r24, r14 |
e1a: 01 97 sbiw r24, 0x01 ; 1 |
e1c: 8d 0d add r24, r13 |
e1e: 91 1d adc r25, r1 |
e20: 6a e0 ldi r22, 0x0A ; 10 |
e22: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
e26: c7 cf rjmp .-114 ; 0xdb6 <write_ndigit_number_u_10th+0xca> |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u_10th(uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
uint8_t len = strlen(conv_array); |
for (uint8_t i = 0; i < length - len; i++) { |
e28: 8e e1 ldi r24, 0x1E ; 30 |
e2a: 88 9e mul r8, r24 |
e2c: 70 01 movw r14, r0 |
e2e: 11 24 eor r1, r1 |
e30: b1 cf rjmp .-158 ; 0xd94 <write_ndigit_number_u_10th+0xa8> |
00000e32 <write_ndigit_number_s>: |
/** |
* Write a signed <number> at <x>/<y> to MAX7456 display memory |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s(uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad) { |
e32: af 92 push r10 |
e34: bf 92 push r11 |
e36: cf 92 push r12 |
e38: df 92 push r13 |
e3a: ef 92 push r14 |
e3c: ff 92 push r15 |
e3e: 0f 93 push r16 |
e40: 1f 93 push r17 |
e42: cf 93 push r28 |
e44: df 93 push r29 |
e46: b8 2e mov r11, r24 |
e48: a6 2e mov r10, r22 |
e4a: ca 01 movw r24, r20 |
e4c: 12 2f mov r17, r18 |
e4e: f3 2e mov r15, r19 |
itoa(number, conv_array, 10 ); |
e50: a6 e9 ldi r26, 0x96 ; 150 |
e52: ca 2e mov r12, r26 |
e54: a2 e0 ldi r26, 0x02 ; 2 |
e56: da 2e mov r13, r26 |
e58: b6 01 movw r22, r12 |
e5a: 4a e0 ldi r20, 0x0A ; 10 |
e5c: 50 e0 ldi r21, 0x00 ; 0 |
e5e: 0e 94 cc 1c call 0x3998 ; 0x3998 <itoa> |
e62: c1 2f mov r28, r17 |
e64: df 2d mov r29, r15 |
for (uint8_t i = 0; i < length - strlen(conv_array); i++) { |
if (pad) write_char((x++)+(y * 30), 10); |
e66: 8e e1 ldi r24, 0x1E ; 30 |
e68: a8 9e mul r10, r24 |
e6a: 70 01 movw r14, r0 |
e6c: 11 24 eor r1, r1 |
e6e: 10 e0 ldi r17, 0x00 ; 0 |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s(uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
for (uint8_t i = 0; i < length - strlen(conv_array); i++) { |
e70: 41 2f mov r20, r17 |
e72: 4b 0d add r20, r11 |
e74: f6 01 movw r30, r12 |
e76: 01 90 ld r0, Z+ |
e78: 00 20 and r0, r0 |
e7a: e9 f7 brne .-6 ; 0xe76 <write_ndigit_number_s+0x44> |
e7c: ce 01 movw r24, r28 |
e7e: 8e 1b sub r24, r30 |
e80: 9f 0b sbc r25, r31 |
e82: 21 2f mov r18, r17 |
e84: 30 e0 ldi r19, 0x00 ; 0 |
e86: 89 56 subi r24, 0x69 ; 105 |
e88: 9d 4f sbci r25, 0xFD ; 253 |
e8a: 28 17 cp r18, r24 |
e8c: 39 07 cpc r19, r25 |
e8e: 90 f4 brcc .+36 ; 0xeb4 <write_ndigit_number_s+0x82> |
if (pad) write_char((x++)+(y * 30), 10); |
e90: 00 23 and r16, r16 |
e92: 41 f0 breq .+16 ; 0xea4 <write_ndigit_number_s+0x72> |
e94: c7 01 movw r24, r14 |
e96: 84 0f add r24, r20 |
e98: 91 1d adc r25, r1 |
e9a: 6a e0 ldi r22, 0x0A ; 10 |
e9c: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s(uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
for (uint8_t i = 0; i < length - strlen(conv_array); i++) { |
ea0: 1f 5f subi r17, 0xFF ; 255 |
ea2: e6 cf rjmp .-52 ; 0xe70 <write_ndigit_number_s+0x3e> |
if (pad) write_char((x++)+(y * 30), 10); |
else write_ascii_char((x++)+(y * 30), 0); |
ea4: c7 01 movw r24, r14 |
ea6: 84 0f add r24, r20 |
ea8: 91 1d adc r25, r1 |
eaa: 60 e0 ldi r22, 0x00 ; 0 |
eac: 0e 94 10 05 call 0xa20 ; 0xa20 <write_ascii_char> |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s(uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
for (uint8_t i = 0; i < length - strlen(conv_array); i++) { |
eb0: 1f 5f subi r17, 0xFF ; 255 |
eb2: de cf rjmp .-68 ; 0xe70 <write_ndigit_number_s+0x3e> |
if (pad) write_char((x++)+(y * 30), 10); |
else write_ascii_char((x++)+(y * 30), 0); |
} |
write_ascii_string(x, y, conv_array); |
eb4: 84 2f mov r24, r20 |
eb6: 6a 2d mov r22, r10 |
eb8: 46 e9 ldi r20, 0x96 ; 150 |
eba: 52 e0 ldi r21, 0x02 ; 2 |
ebc: 0e 94 53 05 call 0xaa6 ; 0xaa6 <write_ascii_string> |
} |
ec0: df 91 pop r29 |
ec2: cf 91 pop r28 |
ec4: 1f 91 pop r17 |
ec6: 0f 91 pop r16 |
ec8: ff 90 pop r15 |
eca: ef 90 pop r14 |
ecc: df 90 pop r13 |
ece: cf 90 pop r12 |
ed0: bf 90 pop r11 |
ed2: af 90 pop r10 |
ed4: 08 95 ret |
00000ed6 <write_ndigit_number_u>: |
/** |
* Write a unsigned <number> at <x>/<y> to MAX7456 display memory |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u(uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad) { |
ed6: af 92 push r10 |
ed8: bf 92 push r11 |
eda: cf 92 push r12 |
edc: df 92 push r13 |
ede: ef 92 push r14 |
ee0: ff 92 push r15 |
ee2: 0f 93 push r16 |
ee4: 1f 93 push r17 |
ee6: cf 93 push r28 |
ee8: df 93 push r29 |
eea: b8 2e mov r11, r24 |
eec: a6 2e mov r10, r22 |
eee: ca 01 movw r24, r20 |
ef0: 12 2f mov r17, r18 |
ef2: f3 2e mov r15, r19 |
itoa(number, conv_array, 10 ); |
ef4: b6 e9 ldi r27, 0x96 ; 150 |
ef6: cb 2e mov r12, r27 |
ef8: b2 e0 ldi r27, 0x02 ; 2 |
efa: db 2e mov r13, r27 |
efc: b6 01 movw r22, r12 |
efe: 4a e0 ldi r20, 0x0A ; 10 |
f00: 50 e0 ldi r21, 0x00 ; 0 |
f02: 0e 94 cc 1c call 0x3998 ; 0x3998 <itoa> |
f06: c1 2f mov r28, r17 |
f08: df 2d mov r29, r15 |
for (uint8_t i = 0; i < length - strlen(conv_array); i++) { |
if (pad) write_char((x++)+(y * 30), 10); |
f0a: 8e e1 ldi r24, 0x1E ; 30 |
f0c: a8 9e mul r10, r24 |
f0e: 70 01 movw r14, r0 |
f10: 11 24 eor r1, r1 |
f12: 10 e0 ldi r17, 0x00 ; 0 |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u(uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
for (uint8_t i = 0; i < length - strlen(conv_array); i++) { |
f14: 41 2f mov r20, r17 |
f16: 4b 0d add r20, r11 |
f18: f6 01 movw r30, r12 |
f1a: 01 90 ld r0, Z+ |
f1c: 00 20 and r0, r0 |
f1e: e9 f7 brne .-6 ; 0xf1a <write_ndigit_number_u+0x44> |
f20: ce 01 movw r24, r28 |
f22: 8e 1b sub r24, r30 |
f24: 9f 0b sbc r25, r31 |
f26: 21 2f mov r18, r17 |
f28: 30 e0 ldi r19, 0x00 ; 0 |
f2a: 89 56 subi r24, 0x69 ; 105 |
f2c: 9d 4f sbci r25, 0xFD ; 253 |
f2e: 28 17 cp r18, r24 |
f30: 39 07 cpc r19, r25 |
f32: 90 f4 brcc .+36 ; 0xf58 <write_ndigit_number_u+0x82> |
if (pad) write_char((x++)+(y * 30), 10); |
f34: 00 23 and r16, r16 |
f36: 41 f0 breq .+16 ; 0xf48 <write_ndigit_number_u+0x72> |
f38: c7 01 movw r24, r14 |
f3a: 84 0f add r24, r20 |
f3c: 91 1d adc r25, r1 |
f3e: 6a e0 ldi r22, 0x0A ; 10 |
f40: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <write_char> |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u(uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
for (uint8_t i = 0; i < length - strlen(conv_array); i++) { |
f44: 1f 5f subi r17, 0xFF ; 255 |
f46: e6 cf rjmp .-52 ; 0xf14 <write_ndigit_number_u+0x3e> |
if (pad) write_char((x++)+(y * 30), 10); |
else write_ascii_char((x++)+(y * 30), 0); |
f48: c7 01 movw r24, r14 |
f4a: 84 0f add r24, r20 |
f4c: 91 1d adc r25, r1 |
f4e: 60 e0 ldi r22, 0x00 ; 0 |
f50: 0e 94 10 05 call 0xa20 ; 0xa20 <write_ascii_char> |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u(uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad) { |
itoa(number, conv_array, 10 ); |
for (uint8_t i = 0; i < length - strlen(conv_array); i++) { |
f54: 1f 5f subi r17, 0xFF ; 255 |
f56: de cf rjmp .-68 ; 0xf14 <write_ndigit_number_u+0x3e> |
if (pad) write_char((x++)+(y * 30), 10); |
else write_ascii_char((x++)+(y * 30), 0); |
} |
write_ascii_string(x, y, conv_array); |
f58: 84 2f mov r24, r20 |
f5a: 6a 2d mov r22, r10 |
f5c: 46 e9 ldi r20, 0x96 ; 150 |
f5e: 52 e0 ldi r21, 0x02 ; 2 |
f60: 0e 94 53 05 call 0xaa6 ; 0xaa6 <write_ascii_string> |
} |
f64: df 91 pop r29 |
f66: cf 91 pop r28 |
f68: 1f 91 pop r17 |
f6a: 0f 91 pop r16 |
f6c: ff 90 pop r15 |
f6e: ef 90 pop r14 |
f70: df 90 pop r13 |
f72: cf 90 pop r12 |
f74: bf 90 pop r11 |
f76: af 90 pop r10 |
f78: 08 95 ret |
00000f7a <write_gps_pos>: |
} |
/** |
* wirte a <position> at <x>/<y> assuming it is a gps position for long-/latitude |
*/ |
void write_gps_pos(uint8_t x, uint8_t y, int32_t position) { |
f7a: 7f 92 push r7 |
f7c: 8f 92 push r8 |
f7e: 9f 92 push r9 |
f80: af 92 push r10 |
f82: bf 92 push r11 |
f84: cf 92 push r12 |
f86: df 92 push r13 |
f88: ef 92 push r14 |
f8a: ff 92 push r15 |
f8c: 0f 93 push r16 |
f8e: 1f 93 push r17 |
f90: 16 2f mov r17, r22 |
f92: 69 01 movw r12, r18 |
f94: 7a 01 movw r14, r20 |
if (position < 0) { |
f96: 57 fd sbrc r21, 7 |
f98: 5e c0 rjmp .+188 ; 0x1056 <write_gps_pos+0xdc> |
position ^= ~0; |
position++; |
write_char_xy(x++, y, 0x49); // minus |
} else { |
write_char_xy(x++, y, 0); // clear ('+' would be nice, maybe later) |
f9a: 78 2e mov r7, r24 |
f9c: 73 94 inc r7 |
f9e: 40 e0 ldi r20, 0x00 ; 0 |
fa0: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
} |
write_ndigit_number_u(x, y, (uint16_t) (position / (int32_t) 10000000), 3, 1); |
fa4: c7 01 movw r24, r14 |
fa6: b6 01 movw r22, r12 |
fa8: 20 e8 ldi r18, 0x80 ; 128 |
faa: 36 e9 ldi r19, 0x96 ; 150 |
fac: 48 e9 ldi r20, 0x98 ; 152 |
fae: 50 e0 ldi r21, 0x00 ; 0 |
fb0: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
fb4: 87 2d mov r24, r7 |
fb6: 61 2f mov r22, r17 |
fb8: a9 01 movw r20, r18 |
fba: 23 e0 ldi r18, 0x03 ; 3 |
fbc: 30 e0 ldi r19, 0x00 ; 0 |
fbe: 01 e0 ldi r16, 0x01 ; 1 |
fc0: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_char_xy(x + 3, y, 65); // decimal point |
fc4: 87 2d mov r24, r7 |
fc6: 8d 5f subi r24, 0xFD ; 253 |
fc8: 61 2f mov r22, r17 |
fca: 41 e4 ldi r20, 0x41 ; 65 |
fcc: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
position = position - ((position / (int32_t) 10000000) * (int32_t) 10000000); |
fd0: c7 01 movw r24, r14 |
fd2: b6 01 movw r22, r12 |
fd4: 20 e8 ldi r18, 0x80 ; 128 |
fd6: 36 e9 ldi r19, 0x96 ; 150 |
fd8: 48 e9 ldi r20, 0x98 ; 152 |
fda: 50 e0 ldi r21, 0x00 ; 0 |
fdc: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
fe0: 6b 01 movw r12, r22 |
fe2: 7c 01 movw r14, r24 |
write_ndigit_number_u(x + 4, y, (uint16_t) (position / (int32_t) 1000), 4, 1); |
fe4: c7 01 movw r24, r14 |
fe6: b6 01 movw r22, r12 |
fe8: 28 ee ldi r18, 0xE8 ; 232 |
fea: 33 e0 ldi r19, 0x03 ; 3 |
fec: 40 e0 ldi r20, 0x00 ; 0 |
fee: 50 e0 ldi r21, 0x00 ; 0 |
ff0: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
ff4: 49 01 movw r8, r18 |
ff6: 87 2d mov r24, r7 |
ff8: 8c 5f subi r24, 0xFC ; 252 |
ffa: 61 2f mov r22, r17 |
ffc: a9 01 movw r20, r18 |
ffe: 24 e0 ldi r18, 0x04 ; 4 |
1000: 30 e0 ldi r19, 0x00 ; 0 |
1002: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
position = position - ((uint16_t) (position / (int32_t) 1000) * (int32_t) 1000); |
write_ndigit_number_u(x + 8, y, (uint16_t) position, 3, 1); |
1006: aa 24 eor r10, r10 |
1008: bb 24 eor r11, r11 |
100a: c5 01 movw r24, r10 |
100c: b4 01 movw r22, r8 |
100e: 28 e1 ldi r18, 0x18 ; 24 |
1010: 3c ef ldi r19, 0xFC ; 252 |
1012: 4f ef ldi r20, 0xFF ; 255 |
1014: 5f ef ldi r21, 0xFF ; 255 |
1016: 0e 94 49 1c call 0x3892 ; 0x3892 <__mulsi3> |
101a: c6 0e add r12, r22 |
101c: d7 1e adc r13, r23 |
101e: e8 1e adc r14, r24 |
1020: f9 1e adc r15, r25 |
1022: 87 2d mov r24, r7 |
1024: 88 5f subi r24, 0xF8 ; 248 |
1026: 61 2f mov r22, r17 |
1028: a6 01 movw r20, r12 |
102a: 23 e0 ldi r18, 0x03 ; 3 |
102c: 30 e0 ldi r19, 0x00 ; 0 |
102e: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_char_xy(x + 11, y, 0xD0); // degree symbol |
1032: 87 2d mov r24, r7 |
1034: 85 5f subi r24, 0xF5 ; 245 |
1036: 61 2f mov r22, r17 |
1038: 40 ed ldi r20, 0xD0 ; 208 |
103a: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
} |
103e: 1f 91 pop r17 |
1040: 0f 91 pop r16 |
1042: ff 90 pop r15 |
1044: ef 90 pop r14 |
1046: df 90 pop r13 |
1048: cf 90 pop r12 |
104a: bf 90 pop r11 |
104c: af 90 pop r10 |
104e: 9f 90 pop r9 |
1050: 8f 90 pop r8 |
1052: 7f 90 pop r7 |
1054: 08 95 ret |
/** |
* wirte a <position> at <x>/<y> assuming it is a gps position for long-/latitude |
*/ |
void write_gps_pos(uint8_t x, uint8_t y, int32_t position) { |
if (position < 0) { |
position ^= ~0; |
1056: c0 94 com r12 |
1058: d0 94 com r13 |
105a: e0 94 com r14 |
105c: f0 94 com r15 |
position++; |
105e: 08 94 sec |
1060: c1 1c adc r12, r1 |
1062: d1 1c adc r13, r1 |
1064: e1 1c adc r14, r1 |
1066: f1 1c adc r15, r1 |
write_char_xy(x++, y, 0x49); // minus |
1068: 78 2e mov r7, r24 |
106a: 73 94 inc r7 |
106c: 49 e4 ldi r20, 0x49 ; 73 |
106e: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
1072: 98 cf rjmp .-208 ; 0xfa4 <write_gps_pos+0x2a> |
00001074 <write_time>: |
} |
/** |
* write <seconds> as human readable time at <x>/<y> to MAX7456 display mem |
*/ |
void write_time(uint8_t x, uint8_t y, uint16_t seconds) { |
1074: bf 92 push r11 |
1076: cf 92 push r12 |
1078: df 92 push r13 |
107a: ef 92 push r14 |
107c: ff 92 push r15 |
107e: 0f 93 push r16 |
1080: 1f 93 push r17 |
1082: 18 2f mov r17, r24 |
1084: b6 2e mov r11, r22 |
1086: 6a 01 movw r12, r20 |
uint16_t min = seconds / 60; |
1088: ca 01 movw r24, r20 |
108a: 6c e3 ldi r22, 0x3C ; 60 |
108c: 70 e0 ldi r23, 0x00 ; 0 |
108e: 0e 94 68 1c call 0x38d0 ; 0x38d0 <__udivmodhi4> |
1092: 7b 01 movw r14, r22 |
seconds -= min * 60; |
write_ndigit_number_u(x, y, min, 3, 0); |
1094: 81 2f mov r24, r17 |
1096: 6b 2d mov r22, r11 |
1098: a7 01 movw r20, r14 |
109a: 23 e0 ldi r18, 0x03 ; 3 |
109c: 30 e0 ldi r19, 0x00 ; 0 |
109e: 00 e0 ldi r16, 0x00 ; 0 |
10a0: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_char_xy(x + 3, y, 68); |
10a4: 81 2f mov r24, r17 |
10a6: 8d 5f subi r24, 0xFD ; 253 |
10a8: 6b 2d mov r22, r11 |
10aa: 44 e4 ldi r20, 0x44 ; 68 |
10ac: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_ndigit_number_u(x + 4, y, seconds, 2, 1); |
10b0: 8c e3 ldi r24, 0x3C ; 60 |
10b2: 90 e0 ldi r25, 0x00 ; 0 |
10b4: 9c 01 movw r18, r24 |
10b6: e2 9e mul r14, r18 |
10b8: c0 01 movw r24, r0 |
10ba: e3 9e mul r14, r19 |
10bc: 90 0d add r25, r0 |
10be: f2 9e mul r15, r18 |
10c0: 90 0d add r25, r0 |
10c2: 11 24 eor r1, r1 |
10c4: c8 1a sub r12, r24 |
10c6: d9 0a sbc r13, r25 |
10c8: 81 2f mov r24, r17 |
10ca: 8c 5f subi r24, 0xFC ; 252 |
10cc: 6b 2d mov r22, r11 |
10ce: a6 01 movw r20, r12 |
10d0: 22 e0 ldi r18, 0x02 ; 2 |
10d2: 30 e0 ldi r19, 0x00 ; 0 |
10d4: 01 e0 ldi r16, 0x01 ; 1 |
10d6: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
} |
10da: 1f 91 pop r17 |
10dc: 0f 91 pop r16 |
10de: ff 90 pop r15 |
10e0: ef 90 pop r14 |
10e2: df 90 pop r13 |
10e4: cf 90 pop r12 |
10e6: bf 90 pop r11 |
10e8: 08 95 ret |
000010ea <clear>: |
/*uint16_t memory_address = 0; |
for (unsigned int a = 0; a < 480; a++) { |
write_char(memory_address++, 0); |
}*/ |
// clear all display-mem (DMM) |
spi_send_byte(0x04, 0b01000100); |
10ea: 84 e0 ldi r24, 0x04 ; 4 |
10ec: 64 e4 ldi r22, 0x44 ; 68 |
10ee: 0e 94 af 04 call 0x95e ; 0x95e <spi_send_byte> |
can be achieved. |
*/ |
void |
_delay_loop_1(uint8_t __count) |
{ |
__asm__ volatile ( |
10f2: 8a e6 ldi r24, 0x6A ; 106 |
10f4: 8a 95 dec r24 |
10f6: f1 f7 brne .-4 ; 0x10f4 <clear+0xa> |
// clearing takes 12uS according to maxim so lets wait longer |
_delay_us(20); |
} |
10f8: 08 95 ret |
000010fa <write_char_att>: |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
/** |
* write a character <attribute> to <address> of MAX7456 display memory |
*/ |
void write_char_att(uint16_t address, char attribute) { |
10fa: 0f 93 push r16 |
10fc: 1f 93 push r17 |
10fe: 18 2f mov r17, r24 |
1100: 06 2f mov r16, r22 |
// the only important part is that the DMAH[1] is set |
// so we add 2 which binary is the 2nd lowest byte |
spi_send_byte(0x05, ((address & 0xFF00) >> 8) | 2); // DMAH |
1102: 92 60 ori r25, 0x02 ; 2 |
1104: 85 e0 ldi r24, 0x05 ; 5 |
1106: 69 2f mov r22, r25 |
1108: 0e 94 af 04 call 0x95e ; 0x95e <spi_send_byte> |
spi_send_byte(0x06, (address & 0x00FF)); // DMAL |
110c: 86 e0 ldi r24, 0x06 ; 6 |
110e: 61 2f mov r22, r17 |
1110: 0e 94 af 04 call 0x95e ; 0x95e <spi_send_byte> |
spi_send_byte(0x07, attribute); // DMDI |
1114: 87 e0 ldi r24, 0x07 ; 7 |
1116: 60 2f mov r22, r16 |
1118: 0e 94 af 04 call 0x95e ; 0x95e <spi_send_byte> |
} |
111c: 1f 91 pop r17 |
111e: 0f 91 pop r16 |
1120: 08 95 ret |
00001122 <write_char_att_xy>: |
/** |
* write a character <attribute> at <x>/<y> to MAX7456 display memory |
*/ |
void write_char_att_xy(uint8_t x, uint8_t y, char attribute) { |
uint16_t address = y * 30 + x; |
write_char_att(address, attribute); |
1122: 9e e1 ldi r25, 0x1E ; 30 |
1124: 69 9f mul r22, r25 |
1126: b0 01 movw r22, r0 |
1128: 11 24 eor r1, r1 |
112a: 9b 01 movw r18, r22 |
112c: 28 0f add r18, r24 |
112e: 31 1d adc r19, r1 |
1130: c9 01 movw r24, r18 |
1132: 64 2f mov r22, r20 |
1134: 0e 94 7d 08 call 0x10fa ; 0x10fa <write_char_att> |
} |
1138: 08 95 ret |
0000113a <heading_conv>: |
* ##########################################################################*/ |
/** |
* convert the <heading> gotton from NC into an index |
*/ |
uint8_t heading_conv(uint16_t heading) { |
113a: 9c 01 movw r18, r24 |
if (heading > 23 && heading < 68) { |
113c: 48 97 sbiw r24, 0x18 ; 24 |
113e: 8c 97 sbiw r24, 0x2c ; 44 |
1140: 00 f1 brcs .+64 ; 0x1182 <heading_conv+0x48> |
//direction = "NE"; |
return 0; |
} else if (heading > 67 && heading < 113) { |
1142: c9 01 movw r24, r18 |
1144: 84 54 subi r24, 0x44 ; 68 |
1146: 90 40 sbci r25, 0x00 ; 0 |
1148: 8d 97 sbiw r24, 0x2d ; 45 |
114a: e8 f0 brcs .+58 ; 0x1186 <heading_conv+0x4c> |
//direction = "E "; |
return 1; |
} else if (heading > 112 && heading < 158) { |
114c: c9 01 movw r24, r18 |
114e: 81 57 subi r24, 0x71 ; 113 |
1150: 90 40 sbci r25, 0x00 ; 0 |
1152: 8d 97 sbiw r24, 0x2d ; 45 |
1154: e0 f0 brcs .+56 ; 0x118e <heading_conv+0x54> |
//direction = "SE"; |
return 2; |
} else if (heading > 157 && heading < 203) { |
1156: c9 01 movw r24, r18 |
1158: 8e 59 subi r24, 0x9E ; 158 |
115a: 90 40 sbci r25, 0x00 ; 0 |
115c: 8d 97 sbiw r24, 0x2d ; 45 |
115e: a8 f0 brcs .+42 ; 0x118a <heading_conv+0x50> |
//direction = "S "; |
return 3; |
} else if (heading > 202 && heading < 248) { |
1160: c9 01 movw r24, r18 |
1162: 8b 5c subi r24, 0xCB ; 203 |
1164: 90 40 sbci r25, 0x00 ; 0 |
1166: 8d 97 sbiw r24, 0x2d ; 45 |
1168: a0 f0 brcs .+40 ; 0x1192 <heading_conv+0x58> |
//direction = "SW"; |
return 4; |
} else if (heading > 247 && heading < 293) { |
116a: c9 01 movw r24, r18 |
116c: 88 5f subi r24, 0xF8 ; 248 |
116e: 90 40 sbci r25, 0x00 ; 0 |
1170: 8d 97 sbiw r24, 0x2d ; 45 |
1172: 98 f0 brcs .+38 ; 0x119a <heading_conv+0x60> |
//direction = "W "; |
return 5; |
} else if (heading > 292 && heading < 338) { |
1174: 25 52 subi r18, 0x25 ; 37 |
1176: 31 40 sbci r19, 0x01 ; 1 |
1178: 2d 32 cpi r18, 0x2D ; 45 |
117a: 31 05 cpc r19, r1 |
117c: 60 f0 brcs .+24 ; 0x1196 <heading_conv+0x5c> |
117e: 87 e0 ldi r24, 0x07 ; 7 |
1180: 08 95 ret |
/** |
* convert the <heading> gotton from NC into an index |
*/ |
uint8_t heading_conv(uint16_t heading) { |
if (heading > 23 && heading < 68) { |
1182: 80 e0 ldi r24, 0x00 ; 0 |
1184: 08 95 ret |
//direction = "NE"; |
return 0; |
} else if (heading > 67 && heading < 113) { |
1186: 81 e0 ldi r24, 0x01 ; 1 |
1188: 08 95 ret |
//direction = "E "; |
return 1; |
} else if (heading > 112 && heading < 158) { |
//direction = "SE"; |
return 2; |
} else if (heading > 157 && heading < 203) { |
118a: 83 e0 ldi r24, 0x03 ; 3 |
118c: 08 95 ret |
//direction = "NE"; |
return 0; |
} else if (heading > 67 && heading < 113) { |
//direction = "E "; |
return 1; |
} else if (heading > 112 && heading < 158) { |
118e: 82 e0 ldi r24, 0x02 ; 2 |
1190: 08 95 ret |
//direction = "SE"; |
return 2; |
} else if (heading > 157 && heading < 203) { |
//direction = "S "; |
return 3; |
} else if (heading > 202 && heading < 248) { |
1192: 84 e0 ldi r24, 0x04 ; 4 |
1194: 08 95 ret |
//direction = "SW"; |
return 4; |
} else if (heading > 247 && heading < 293) { |
//direction = "W "; |
return 5; |
} else if (heading > 292 && heading < 338) { |
1196: 86 e0 ldi r24, 0x06 ; 6 |
//direction = "NW"; |
return 6; |
} |
//direction = "N "; |
return 7; |
} |
1198: 08 95 ret |
//direction = "S "; |
return 3; |
} else if (heading > 202 && heading < 248) { |
//direction = "SW"; |
return 4; |
} else if (heading > 247 && heading < 293) { |
119a: 85 e0 ldi r24, 0x05 ; 5 |
119c: 08 95 ret |
0000119e <heading_fine_conv>: |
/** |
* convert the <heading> gotton from NC into a more |
* precise index |
*/ |
uint8_t heading_fine_conv(uint16_t heading) { |
heading = ((heading * 10) + 113) % 3600; |
119e: 9c 01 movw r18, r24 |
11a0: 88 0f add r24, r24 |
11a2: 99 1f adc r25, r25 |
11a4: 88 0f add r24, r24 |
11a6: 99 1f adc r25, r25 |
11a8: 88 0f add r24, r24 |
11aa: 99 1f adc r25, r25 |
11ac: 22 0f add r18, r18 |
11ae: 33 1f adc r19, r19 |
11b0: 82 0f add r24, r18 |
11b2: 93 1f adc r25, r19 |
11b4: 8f 58 subi r24, 0x8F ; 143 |
11b6: 9f 4f sbci r25, 0xFF ; 255 |
11b8: 60 e1 ldi r22, 0x10 ; 16 |
11ba: 7e e0 ldi r23, 0x0E ; 14 |
11bc: 0e 94 68 1c call 0x38d0 ; 0x38d0 <__udivmodhi4> |
11c0: 61 ee ldi r22, 0xE1 ; 225 |
11c2: 70 e0 ldi r23, 0x00 ; 0 |
11c4: 0e 94 68 1c call 0x38d0 ; 0x38d0 <__udivmodhi4> |
11c8: 86 2f mov r24, r22 |
return (heading / 225); |
} |
11ca: 08 95 ret |
000011cc <draw_artificial_horizon>: |
/** |
* draw roll und nick indicators (could be enhanced to full artificial horizon) |
* from line <firstline> to <listlines> for given <nick> and <roll> values |
*/ |
void draw_artificial_horizon(uint8_t firstline, uint8_t lastline, int16_t nick, int16_t roll) { |
11cc: af 92 push r10 |
11ce: bf 92 push r11 |
11d0: cf 92 push r12 |
11d2: df 92 push r13 |
11d4: ef 92 push r14 |
11d6: ff 92 push r15 |
11d8: 0f 93 push r16 |
11da: 1f 93 push r17 |
11dc: df 93 push r29 |
11de: cf 93 push r28 |
11e0: 00 d0 rcall .+0 ; 0x11e2 <draw_artificial_horizon+0x16> |
11e2: 00 d0 rcall .+0 ; 0x11e4 <draw_artificial_horizon+0x18> |
11e4: 0f 92 push r0 |
11e6: cd b7 in r28, 0x3d ; 61 |
11e8: de b7 in r29, 0x3e ; 62 |
11ea: a8 2e mov r10, r24 |
11ec: c6 2e mov r12, r22 |
11ee: 8a 01 movw r16, r20 |
11f0: d2 2e mov r13, r18 |
11f2: b3 2e mov r11, r19 |
char noodle[5] = {225, 225, 226, 227, 227}; |
11f4: 7e 01 movw r14, r28 |
11f6: 08 94 sec |
11f8: e1 1c adc r14, r1 |
11fa: f1 1c adc r15, r1 |
11fc: d7 01 movw r26, r14 |
11fe: eb e0 ldi r30, 0x0B ; 11 |
1200: f1 e0 ldi r31, 0x01 ; 1 |
1202: 85 e0 ldi r24, 0x05 ; 5 |
1204: 01 90 ld r0, Z+ |
1206: 0d 92 st X+, r0 |
1208: 81 50 subi r24, 0x01 ; 1 |
120a: e1 f7 brne .-8 ; 0x1204 <draw_artificial_horizon+0x38> |
uint8_t center_x = 15; |
uint8_t center_y = lastline - firstline; |
center_y = 7; |
write_char_xy(center_x,center_y,228); |
120c: 8f e0 ldi r24, 0x0F ; 15 |
120e: 67 e0 ldi r22, 0x07 ; 7 |
1210: 44 ee ldi r20, 0xE4 ; 228 |
1212: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
uint8_t cpos, nicky, rollx; |
// which line |
int8_t ypos = nick / 20; |
1216: c8 01 movw r24, r16 |
1218: 64 e1 ldi r22, 0x14 ; 20 |
121a: 70 e0 ldi r23, 0x00 ; 0 |
121c: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
1220: 26 2f mov r18, r22 |
// which character from the array? |
if (nick < 0) { |
1222: 17 fd sbrc r17, 7 |
1224: 82 c0 rjmp .+260 ; 0x132a <draw_artificial_horizon+0x15e> |
cpos = -1*((nick - (ypos * 20))/4); |
ypos--; |
} else cpos = 4-((nick - (ypos * 20))/4); |
1226: 8c ee ldi r24, 0xEC ; 236 |
1228: 68 02 muls r22, r24 |
122a: c0 01 movw r24, r0 |
122c: 11 24 eor r1, r1 |
122e: 80 0f add r24, r16 |
1230: 91 1f adc r25, r17 |
1232: 97 fd sbrc r25, 7 |
1234: a2 c0 rjmp .+324 ; 0x137a <draw_artificial_horizon+0x1ae> |
1236: 95 95 asr r25 |
1238: 87 95 ror r24 |
123a: 95 95 asr r25 |
123c: 87 95 ror r24 |
123e: 90 95 com r25 |
1240: 81 95 neg r24 |
1242: 9f 4f sbci r25, 0xFF ; 255 |
1244: 18 2f mov r17, r24 |
1246: 1c 5f subi r17, 0xFC ; 252 |
if (cpos > 4) cpos = 4; |
nicky = center_y - ypos; |
1248: 67 e0 ldi r22, 0x07 ; 7 |
124a: 62 1b sub r22, r18 |
if (nicky > lastline) nicky = lastline; |
124c: c6 16 cp r12, r22 |
124e: 08 f0 brcs .+2 ; 0x1252 <draw_artificial_horizon+0x86> |
1250: 80 c0 rjmp .+256 ; 0x1352 <draw_artificial_horizon+0x186> |
1252: 0c 2d mov r16, r12 |
else if (nicky < firstline) nicky = firstline; |
// ensure roll-borders |
rollx = (roll / 8)+15; |
1254: 8d 2d mov r24, r13 |
1256: 9b 2d mov r25, r11 |
1258: 9c 01 movw r18, r24 |
125a: 37 fd sbrc r19, 7 |
125c: 84 c0 rjmp .+264 ; 0x1366 <draw_artificial_horizon+0x19a> |
125e: 35 95 asr r19 |
1260: 27 95 ror r18 |
1262: 35 95 asr r19 |
1264: 27 95 ror r18 |
1266: 35 95 asr r19 |
1268: 27 95 ror r18 |
126a: 82 2f mov r24, r18 |
126c: 81 5f subi r24, 0xF1 ; 241 |
if (rollx < 2) rollx = 2; |
126e: 82 30 cpi r24, 0x02 ; 2 |
1270: 08 f4 brcc .+2 ; 0x1274 <draw_artificial_horizon+0xa8> |
1272: 7c c0 rjmp .+248 ; 0x136c <draw_artificial_horizon+0x1a0> |
1274: d8 2e mov r13, r24 |
1276: 8c e1 ldi r24, 0x1C ; 28 |
1278: 8d 15 cp r24, r13 |
127a: 10 f4 brcc .+4 ; 0x1280 <draw_artificial_horizon+0xb4> |
127c: 6c e1 ldi r22, 0x1C ; 28 |
127e: d6 2e mov r13, r22 |
1280: 4d 2d mov r20, r13 |
1282: 50 e0 ldi r21, 0x00 ; 0 |
1284: bd 2c mov r11, r13 |
else if (rollx > 28) rollx = 28; |
// clear roll |
if (old_af_x != rollx && old_af_x >= 0) { |
1286: 20 91 09 01 lds r18, 0x0109 |
128a: 82 2f mov r24, r18 |
128c: 99 27 eor r25, r25 |
128e: 87 fd sbrc r24, 7 |
1290: 90 95 com r25 |
1292: 84 17 cp r24, r20 |
1294: 95 07 cpc r25, r21 |
1296: 39 f0 breq .+14 ; 0x12a6 <draw_artificial_horizon+0xda> |
1298: 27 fd sbrc r18, 7 |
129a: 05 c0 rjmp .+10 ; 0x12a6 <draw_artificial_horizon+0xda> |
write_char_xy(old_af_x, lastline, 0); |
129c: 82 2f mov r24, r18 |
129e: 6c 2d mov r22, r12 |
12a0: 40 e0 ldi r20, 0x00 ; 0 |
12a2: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
} |
// clear nick |
if (old_af_y != nicky && old_af_y >= 0) { |
12a6: 60 91 0a 01 lds r22, 0x010A |
12aa: 26 2f mov r18, r22 |
12ac: 33 27 eor r19, r19 |
12ae: 27 fd sbrc r18, 7 |
12b0: 30 95 com r19 |
12b2: 80 2f mov r24, r16 |
12b4: 90 e0 ldi r25, 0x00 ; 0 |
12b6: 28 17 cp r18, r24 |
12b8: 39 07 cpc r19, r25 |
12ba: 61 f0 breq .+24 ; 0x12d4 <draw_artificial_horizon+0x108> |
12bc: 67 fd sbrc r22, 7 |
12be: 0a c0 rjmp .+20 ; 0x12d4 <draw_artificial_horizon+0x108> |
write_char_xy(center_x-1, old_af_y, 0); |
12c0: 8e e0 ldi r24, 0x0E ; 14 |
12c2: 40 e0 ldi r20, 0x00 ; 0 |
12c4: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(center_x+1, old_af_y, 0); |
12c8: 80 e1 ldi r24, 0x10 ; 16 |
12ca: 60 91 0a 01 lds r22, 0x010A |
12ce: 40 e0 ldi r20, 0x00 ; 0 |
12d0: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
} |
// draw nick |
write_char_xy(center_x-1, nicky, noodle[cpos]); |
12d4: 81 2f mov r24, r17 |
12d6: 15 30 cpi r17, 0x05 ; 5 |
12d8: 08 f0 brcs .+2 ; 0x12dc <draw_artificial_horizon+0x110> |
12da: 84 e0 ldi r24, 0x04 ; 4 |
12dc: e8 0e add r14, r24 |
12de: f1 1c adc r15, r1 |
12e0: f7 01 movw r30, r14 |
12e2: 10 81 ld r17, Z |
12e4: 8e e0 ldi r24, 0x0E ; 14 |
12e6: 60 2f mov r22, r16 |
12e8: 41 2f mov r20, r17 |
12ea: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(center_x+1, nicky, noodle[cpos]); |
12ee: 80 e1 ldi r24, 0x10 ; 16 |
12f0: 60 2f mov r22, r16 |
12f2: 41 2f mov r20, r17 |
12f4: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
// draw roll |
write_char_xy(rollx, lastline, 229); |
12f8: 8d 2d mov r24, r13 |
12fa: 6c 2d mov r22, r12 |
12fc: 45 ee ldi r20, 0xE5 ; 229 |
12fe: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
// update old vars |
old_af_x = rollx; |
1302: b0 92 09 01 sts 0x0109, r11 |
old_af_y = nicky; |
1306: 00 93 0a 01 sts 0x010A, r16 |
// debug numbers |
//write_3digit_number_u(20,6,cpos); |
//write_number_s(20,7,ypos); |
//write_number_s(0,7,nick); |
//write_number_s(18,11,roll); |
} |
130a: 0f 90 pop r0 |
130c: 0f 90 pop r0 |
130e: 0f 90 pop r0 |
1310: 0f 90 pop r0 |
1312: 0f 90 pop r0 |
1314: cf 91 pop r28 |
1316: df 91 pop r29 |
1318: 1f 91 pop r17 |
131a: 0f 91 pop r16 |
131c: ff 90 pop r15 |
131e: ef 90 pop r14 |
1320: df 90 pop r13 |
1322: cf 90 pop r12 |
1324: bf 90 pop r11 |
1326: af 90 pop r10 |
1328: 08 95 ret |
// which line |
int8_t ypos = nick / 20; |
// which character from the array? |
if (nick < 0) { |
cpos = -1*((nick - (ypos * 20))/4); |
132a: 8c ee ldi r24, 0xEC ; 236 |
132c: 68 02 muls r22, r24 |
132e: c0 01 movw r24, r0 |
1330: 11 24 eor r1, r1 |
1332: 80 0f add r24, r16 |
1334: 91 1f adc r25, r17 |
1336: 97 fd sbrc r25, 7 |
1338: 22 c0 rjmp .+68 ; 0x137e <draw_artificial_horizon+0x1b2> |
133a: 95 95 asr r25 |
133c: 87 95 ror r24 |
133e: 95 95 asr r25 |
1340: 87 95 ror r24 |
1342: 18 2f mov r17, r24 |
1344: 11 95 neg r17 |
ypos--; |
1346: 21 50 subi r18, 0x01 ; 1 |
} else cpos = 4-((nick - (ypos * 20))/4); |
if (cpos > 4) cpos = 4; |
nicky = center_y - ypos; |
1348: 67 e0 ldi r22, 0x07 ; 7 |
134a: 62 1b sub r22, r18 |
if (nicky > lastline) nicky = lastline; |
134c: c6 16 cp r12, r22 |
134e: 08 f4 brcc .+2 ; 0x1352 <draw_artificial_horizon+0x186> |
1350: 80 cf rjmp .-256 ; 0x1252 <draw_artificial_horizon+0x86> |
1352: 06 2f mov r16, r22 |
1354: 6a 15 cp r22, r10 |
1356: 08 f0 brcs .+2 ; 0x135a <draw_artificial_horizon+0x18e> |
1358: 7d cf rjmp .-262 ; 0x1254 <draw_artificial_horizon+0x88> |
135a: 0a 2d mov r16, r10 |
else if (nicky < firstline) nicky = firstline; |
// ensure roll-borders |
rollx = (roll / 8)+15; |
135c: 8d 2d mov r24, r13 |
135e: 9b 2d mov r25, r11 |
1360: 9c 01 movw r18, r24 |
1362: 37 ff sbrs r19, 7 |
1364: 7c cf rjmp .-264 ; 0x125e <draw_artificial_horizon+0x92> |
1366: 29 5f subi r18, 0xF9 ; 249 |
1368: 3f 4f sbci r19, 0xFF ; 255 |
136a: 79 cf rjmp .-270 ; 0x125e <draw_artificial_horizon+0x92> |
if (rollx < 2) rollx = 2; |
136c: e2 e0 ldi r30, 0x02 ; 2 |
136e: de 2e mov r13, r30 |
1370: 42 e0 ldi r20, 0x02 ; 2 |
1372: 50 e0 ldi r21, 0x00 ; 0 |
1374: 72 e0 ldi r23, 0x02 ; 2 |
1376: b7 2e mov r11, r23 |
1378: 86 cf rjmp .-244 ; 0x1286 <draw_artificial_horizon+0xba> |
int8_t ypos = nick / 20; |
// which character from the array? |
if (nick < 0) { |
cpos = -1*((nick - (ypos * 20))/4); |
ypos--; |
} else cpos = 4-((nick - (ypos * 20))/4); |
137a: 03 96 adiw r24, 0x03 ; 3 |
137c: 5c cf rjmp .-328 ; 0x1236 <draw_artificial_horizon+0x6a> |
// which line |
int8_t ypos = nick / 20; |
// which character from the array? |
if (nick < 0) { |
cpos = -1*((nick - (ypos * 20))/4); |
137e: 03 96 adiw r24, 0x03 ; 3 |
1380: dc cf rjmp .-72 ; 0x133a <draw_artificial_horizon+0x16e> |
00001382 <draw_variometer>: |
* variometer |
* ##########################################################################*/ |
/** |
* draw variometer arrows at <x>/<y> according to <variometer> |
*/ |
void draw_variometer(uint8_t x, uint8_t y, int16_t variometer) { |
1382: 28 2f mov r18, r24 |
1384: 36 2f mov r19, r22 |
if (variometer == 0) { |
1386: 41 15 cp r20, r1 |
1388: 51 05 cpc r21, r1 |
138a: b1 f0 breq .+44 ; 0x13b8 <draw_variometer+0x36> |
write_char_xy(x, y, 0xbb); // plain line |
} else if (variometer > 0) { // gain height |
138c: 14 16 cp r1, r20 |
138e: 15 06 cpc r1, r21 |
1390: bc f4 brge .+46 ; 0x13c0 <draw_variometer+0x3e> |
switch (variometer / 5){ |
1392: ca 01 movw r24, r20 |
1394: 65 e0 ldi r22, 0x05 ; 5 |
1396: 70 e0 ldi r23, 0x00 ; 0 |
1398: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
139c: 61 30 cpi r22, 0x01 ; 1 |
139e: 71 05 cpc r23, r1 |
13a0: 11 f1 breq .+68 ; 0x13e6 <draw_variometer+0x64> |
13a2: 62 30 cpi r22, 0x02 ; 2 |
13a4: 71 05 cpc r23, r1 |
13a6: 89 f1 breq .+98 ; 0x140a <draw_variometer+0x88> |
13a8: 67 2b or r22, r23 |
13aa: 19 f5 brne .+70 ; 0x13f2 <draw_variometer+0x70> |
case 0: |
//write_char_xy(x, y, 0xba); // smallest arrow up |
write_char_xy(x, y, 0x70); // one arrow up |
13ac: 82 2f mov r24, r18 |
13ae: 63 2f mov r22, r19 |
13b0: 40 e7 ldi r20, 0x70 ; 112 |
13b2: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
13b6: 08 95 ret |
/** |
* draw variometer arrows at <x>/<y> according to <variometer> |
*/ |
void draw_variometer(uint8_t x, uint8_t y, int16_t variometer) { |
if (variometer == 0) { |
write_char_xy(x, y, 0xbb); // plain line |
13b8: 4b eb ldi r20, 0xBB ; 187 |
13ba: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
13be: 08 95 ret |
default: |
//write_char_xy(x, y, 0xb7); // largest arrow up |
write_char_xy(x, y, 0x73); // three black arrows up |
} |
} else { // sink |
switch (variometer / -5){ |
13c0: ca 01 movw r24, r20 |
13c2: 6b ef ldi r22, 0xFB ; 251 |
13c4: 7f ef ldi r23, 0xFF ; 255 |
13c6: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
13ca: 61 30 cpi r22, 0x01 ; 1 |
13cc: 71 05 cpc r23, r1 |
13ce: b9 f0 breq .+46 ; 0x13fe <draw_variometer+0x7c> |
13d0: 62 30 cpi r22, 0x02 ; 2 |
13d2: 71 05 cpc r23, r1 |
13d4: 31 f1 breq .+76 ; 0x1422 <draw_variometer+0xa0> |
13d6: 67 2b or r22, r23 |
13d8: f1 f4 brne .+60 ; 0x1416 <draw_variometer+0x94> |
case 0: |
//write_char_xy(x, y, 0xbc); // smallest arrow down |
write_char_xy(x, y, 0x77); // one arrow down |
13da: 82 2f mov r24, r18 |
13dc: 63 2f mov r22, r19 |
13de: 47 e7 ldi r20, 0x77 ; 119 |
13e0: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
13e4: 08 95 ret |
//write_char_xy(x, y, 0xba); // smallest arrow up |
write_char_xy(x, y, 0x70); // one arrow up |
break; |
case 1: |
//write_char_xy(x, y, 0xb9); // small arrow up |
write_char_xy(x, y, 0x71); // two arrows up |
13e6: 82 2f mov r24, r18 |
13e8: 63 2f mov r22, r19 |
13ea: 41 e7 ldi r20, 0x71 ; 113 |
13ec: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
13f0: 08 95 ret |
//write_char_xy(x, y, 0xb8); // large arrow up |
write_char_xy(x, y, 0x72); // three arrows up |
break; |
default: |
//write_char_xy(x, y, 0xb7); // largest arrow up |
write_char_xy(x, y, 0x73); // three black arrows up |
13f2: 82 2f mov r24, r18 |
13f4: 63 2f mov r22, r19 |
13f6: 43 e7 ldi r20, 0x73 ; 115 |
13f8: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
13fc: 08 95 ret |
//write_char_xy(x, y, 0xbc); // smallest arrow down |
write_char_xy(x, y, 0x77); // one arrow down |
break; |
case 1: |
//write_char_xy(x, y, 0xbd); // small arrow down |
write_char_xy(x, y, 0x76); // two arrows down |
13fe: 82 2f mov r24, r18 |
1400: 63 2f mov r22, r19 |
1402: 46 e7 ldi r20, 0x76 ; 118 |
1404: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
1408: 08 95 ret |
//write_char_xy(x, y, 0xb9); // small arrow up |
write_char_xy(x, y, 0x71); // two arrows up |
break; |
case 2: |
//write_char_xy(x, y, 0xb8); // large arrow up |
write_char_xy(x, y, 0x72); // three arrows up |
140a: 82 2f mov r24, r18 |
140c: 63 2f mov r22, r19 |
140e: 42 e7 ldi r20, 0x72 ; 114 |
1410: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
1414: 08 95 ret |
//write_char_xy(x, y, 0xbe); // large arrow down |
write_char_xy(x, y, 0x75); // three arrows down |
break; |
default: |
//write_char_xy(x, y, 0xbf); // largest arrow down |
write_char_xy(x, y, 0x74); // three black arrows down |
1416: 82 2f mov r24, r18 |
1418: 63 2f mov r22, r19 |
141a: 44 e7 ldi r20, 0x74 ; 116 |
141c: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
1420: 08 95 ret |
//write_char_xy(x, y, 0xbd); // small arrow down |
write_char_xy(x, y, 0x76); // two arrows down |
break; |
case 2: |
//write_char_xy(x, y, 0xbe); // large arrow down |
write_char_xy(x, y, 0x75); // three arrows down |
1422: 82 2f mov r24, r18 |
1424: 63 2f mov r22, r19 |
1426: 45 e7 ldi r20, 0x75 ; 117 |
1428: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
142c: 08 95 ret |
0000142e <draw_battery>: |
* battery index |
* ##########################################################################*/ |
/** |
* draw a battery symbol at <x>/<y> according to <voltage> |
*/ |
void draw_battery(uint8_t x, uint8_t y, uint8_t min_voltage, uint8_t voltage, uint8_t max_voltage) { |
142e: 0f 93 push r16 |
1430: e8 2f mov r30, r24 |
1432: f6 2f mov r31, r22 |
uint8_t percent = (100* (voltage - min_voltage) / (max_voltage - min_voltage)); |
if (percent > 100) percent = 100; |
if (voltage < min_voltage) percent = 0; |
1434: 24 17 cp r18, r20 |
1436: 38 f4 brcc .+14 ; 0x1446 <draw_battery+0x18> |
1438: 4d e9 ldi r20, 0x9D ; 157 |
write_char_xy(x, y, 0x9d - (percent * 13 / 100)); |
143a: 8e 2f mov r24, r30 |
143c: 6f 2f mov r22, r31 |
143e: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
//write_ndigit_number_u(x, y-1, percent * 13 / 100, 100, 0); |
} |
1442: 0f 91 pop r16 |
1444: 08 95 ret |
* ##########################################################################*/ |
/** |
* draw a battery symbol at <x>/<y> according to <voltage> |
*/ |
void draw_battery(uint8_t x, uint8_t y, uint8_t min_voltage, uint8_t voltage, uint8_t max_voltage) { |
uint8_t percent = (100* (voltage - min_voltage) / (max_voltage - min_voltage)); |
1446: 84 2f mov r24, r20 |
1448: 90 e0 ldi r25, 0x00 ; 0 |
144a: 30 e0 ldi r19, 0x00 ; 0 |
144c: 28 1b sub r18, r24 |
144e: 39 0b sbc r19, r25 |
1450: 60 2f mov r22, r16 |
1452: 70 e0 ldi r23, 0x00 ; 0 |
1454: 68 1b sub r22, r24 |
1456: 79 0b sbc r23, r25 |
1458: 84 e6 ldi r24, 0x64 ; 100 |
145a: 90 e0 ldi r25, 0x00 ; 0 |
145c: ac 01 movw r20, r24 |
145e: 24 9f mul r18, r20 |
1460: c0 01 movw r24, r0 |
1462: 25 9f mul r18, r21 |
1464: 90 0d add r25, r0 |
1466: 34 9f mul r19, r20 |
1468: 90 0d add r25, r0 |
146a: 11 24 eor r1, r1 |
146c: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
1470: 65 36 cpi r22, 0x65 ; 101 |
1472: 08 f0 brcs .+2 ; 0x1476 <draw_battery+0x48> |
1474: 64 e6 ldi r22, 0x64 ; 100 |
1476: 86 2f mov r24, r22 |
1478: 90 e0 ldi r25, 0x00 ; 0 |
147a: 9c 01 movw r18, r24 |
147c: 22 0f add r18, r18 |
147e: 33 1f adc r19, r19 |
1480: 28 0f add r18, r24 |
1482: 39 1f adc r19, r25 |
1484: 22 0f add r18, r18 |
1486: 33 1f adc r19, r19 |
1488: 22 0f add r18, r18 |
148a: 33 1f adc r19, r19 |
148c: 28 0f add r18, r24 |
148e: 39 1f adc r19, r25 |
1490: c9 01 movw r24, r18 |
1492: 6c e9 ldi r22, 0x9C ; 156 |
1494: 7f ef ldi r23, 0xFF ; 255 |
1496: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
149a: 46 2f mov r20, r22 |
149c: 43 56 subi r20, 0x63 ; 99 |
if (percent > 100) percent = 100; |
if (voltage < min_voltage) percent = 0; |
write_char_xy(x, y, 0x9d - (percent * 13 / 100)); |
149e: 8e 2f mov r24, r30 |
14a0: 6f 2f mov r22, r31 |
14a2: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
//write_ndigit_number_u(x, y-1, percent * 13 / 100, 100, 0); |
} |
14a6: 0f 91 pop r16 |
14a8: 08 95 ret |
000014aa <draw_compass>: |
} |
/** |
* draw a compass rose at <x>/<y> for <heading> |
*/ |
void draw_compass(uint8_t x, uint8_t y, uint16_t heading) { |
14aa: ef 92 push r14 |
14ac: ff 92 push r15 |
14ae: 0f 93 push r16 |
14b0: 1f 93 push r17 |
14b2: cf 93 push r28 |
14b4: df 93 push r29 |
14b6: 28 2f mov r18, r24 |
14b8: 06 2f mov r16, r22 |
14ba: ca 01 movw r24, r20 |
216, 215, 216, 212, 216, 215, 216, 214, 216, 215, 216, 211, |
216, 215, 216, 213, 216, 215, 216, 212, 216, 215, 216, 214}; |
// the center is char 19 (north), we add the current heading in 8th |
// which would be 22.5 degrees, but float would bloat up the code |
// and *10 / 225 would take ages... so we take the uncorrect way |
uint8_t front = 19 + (heading / 22); |
14bc: 66 e1 ldi r22, 0x16 ; 22 |
14be: 70 e0 ldi r23, 0x00 ; 0 |
14c0: 0e 94 68 1c call 0x38d0 ; 0x38d0 <__udivmodhi4> |
14c4: 6d 5e subi r22, 0xED ; 237 |
14c6: 70 e0 ldi r23, 0x00 ; 0 |
14c8: eb 01 movw r28, r22 |
14ca: c0 55 subi r28, 0x50 ; 80 |
14cc: de 4f sbci r29, 0xFE ; 254 |
for (uint8_t i = 0; i < 9; i++) { |
14ce: 55 e0 ldi r21, 0x05 ; 5 |
14d0: e5 2e mov r14, r21 |
14d2: f1 2c mov r15, r1 |
14d4: e6 0e add r14, r22 |
14d6: f7 1e adc r15, r23 |
14d8: 84 eb ldi r24, 0xB4 ; 180 |
14da: 91 e0 ldi r25, 0x01 ; 1 |
14dc: e8 0e add r14, r24 |
14de: f9 1e adc r15, r25 |
write_char_xy(x++, y, pgm_read_byte(&rose[front - 4 + i])); |
14e0: 12 2f mov r17, r18 |
14e2: 1f 5f subi r17, 0xFF ; 255 |
14e4: fe 01 movw r30, r28 |
14e6: 44 91 lpm r20, Z+ |
14e8: 82 2f mov r24, r18 |
14ea: 60 2f mov r22, r16 |
14ec: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
14f0: 21 96 adiw r28, 0x01 ; 1 |
14f2: 21 2f mov r18, r17 |
216, 215, 216, 213, 216, 215, 216, 212, 216, 215, 216, 214}; |
// the center is char 19 (north), we add the current heading in 8th |
// which would be 22.5 degrees, but float would bloat up the code |
// and *10 / 225 would take ages... so we take the uncorrect way |
uint8_t front = 19 + (heading / 22); |
for (uint8_t i = 0; i < 9; i++) { |
14f4: ce 15 cp r28, r14 |
14f6: df 05 cpc r29, r15 |
14f8: 99 f7 brne .-26 ; 0x14e0 <draw_compass+0x36> |
write_char_xy(x++, y, pgm_read_byte(&rose[front - 4 + i])); |
} |
} |
14fa: df 91 pop r29 |
14fc: cf 91 pop r28 |
14fe: 1f 91 pop r17 |
1500: 0f 91 pop r16 |
1502: ff 90 pop r15 |
1504: ef 90 pop r14 |
1506: 08 95 ret |
00001508 <draw_big_variometer>: |
/** |
* draw a bigger vario with middle at <x>/<y> acording to <variometer> |
*/ |
void draw_big_variometer(uint8_t x, uint8_t y, int16_t variometer) { |
int16_t index = 7 + variometer; |
1508: 49 5f subi r20, 0xF9 ; 249 |
150a: 5f 4f sbci r21, 0xFF ; 255 |
150c: 57 fd sbrc r21, 7 |
150e: 11 c0 rjmp .+34 ; 0x1532 <draw_big_variometer+0x2a> |
if (index > 14) index = 14; |
else if (index < 0) index = 0; |
write_string_pgm_down(x, y-2, (const char *) (pgm_read_word ( &(vario_pnt[index]))), 5); |
1510: 4f 30 cpi r20, 0x0F ; 15 |
1512: 51 05 cpc r21, r1 |
1514: 14 f0 brlt .+4 ; 0x151a <draw_big_variometer+0x12> |
1516: 4e e0 ldi r20, 0x0E ; 14 |
1518: 50 e0 ldi r21, 0x00 ; 0 |
151a: fa 01 movw r30, r20 |
151c: ee 0f add r30, r30 |
151e: ff 1f adc r31, r31 |
1520: ea 56 subi r30, 0x6A ; 106 |
1522: fe 4f sbci r31, 0xFE ; 254 |
1524: 45 91 lpm r20, Z+ |
1526: 54 91 lpm r21, Z+ |
1528: 62 50 subi r22, 0x02 ; 2 |
152a: 25 e0 ldi r18, 0x05 ; 5 |
152c: 0e 94 ad 05 call 0xb5a ; 0xb5a <write_string_pgm_down> |
} |
1530: 08 95 ret |
/** |
* draw a bigger vario with middle at <x>/<y> acording to <variometer> |
*/ |
void draw_big_variometer(uint8_t x, uint8_t y, int16_t variometer) { |
int16_t index = 7 + variometer; |
1532: 40 e0 ldi r20, 0x00 ; 0 |
1534: 50 e0 ldi r21, 0x00 ; 0 |
1536: ec cf rjmp .-40 ; 0x1510 <draw_big_variometer+0x8> |
00001538 <onoff>: |
* ##########################################################################*/ |
/** |
* helper function for flag display |
*/ |
void onoff(uint8_t line, uint8_t onoff) { |
1538: 98 2f mov r25, r24 |
if (onoff) { |
153a: 66 23 and r22, r22 |
153c: 39 f4 brne .+14 ; 0x154c <onoff+0x14> |
write_ascii_string_pgm(23, line, PSTR("ON ")); |
} else { |
write_ascii_string_pgm(23, line, PSTR("OFF")); |
153e: 87 e1 ldi r24, 0x17 ; 23 |
1540: 69 2f mov r22, r25 |
1542: 48 ee ldi r20, 0xE8 ; 232 |
1544: 52 e0 ldi r21, 0x02 ; 2 |
1546: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
154a: 08 95 ret |
/** |
* helper function for flag display |
*/ |
void onoff(uint8_t line, uint8_t onoff) { |
if (onoff) { |
write_ascii_string_pgm(23, line, PSTR("ON ")); |
154c: 87 e1 ldi r24, 0x17 ; 23 |
154e: 69 2f mov r22, r25 |
1550: 4c ee ldi r20, 0xEC ; 236 |
1552: 52 e0 ldi r21, 0x02 ; 2 |
1554: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
1558: 08 95 ret |
0000155a <config_menu_drawings>: |
} |
/** |
* helper function for menu updating |
*/ |
void config_menu_drawings(uint8_t chosen) { |
155a: ff 92 push r15 |
155c: 0f 93 push r16 |
155e: 1f 93 push r17 |
1560: 28 2f mov r18, r24 |
1562: 90 e0 ldi r25, 0x00 ; 0 |
1564: 0b 96 adiw r24, 0x0b ; 11 |
1566: 6c e0 ldi r22, 0x0C ; 12 |
1568: 70 e0 ldi r23, 0x00 ; 0 |
156a: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
156e: 92 e0 ldi r25, 0x02 ; 2 |
1570: f9 2e mov r15, r25 |
1572: f8 0e add r15, r24 |
1574: 02 2f mov r16, r18 |
1576: 0e 5f subi r16, 0xFE ; 254 |
1578: 12 e0 ldi r17, 0x02 ; 2 |
uint8_t line = 2; |
// clear prevoius _cursor_ |
//write_char_xy(3, line + ((chosen + 11) % 12), 0x00); |
for (uint8_t x = 2; x < 28; x++) { |
write_char_att_xy(x, line + ((chosen + 11) % 12), 0); |
157a: 81 2f mov r24, r17 |
157c: 6f 2d mov r22, r15 |
157e: 40 e0 ldi r20, 0x00 ; 0 |
1580: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
write_char_att_xy(x, line + chosen, BLACKBG | INVERT); |
1584: 81 2f mov r24, r17 |
1586: 60 2f mov r22, r16 |
1588: 4f ea ldi r20, 0xAF ; 175 |
158a: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
void config_menu_drawings(uint8_t chosen) { |
uint8_t line = 2; |
// clear prevoius _cursor_ |
//write_char_xy(3, line + ((chosen + 11) % 12), 0x00); |
for (uint8_t x = 2; x < 28; x++) { |
158e: 1f 5f subi r17, 0xFF ; 255 |
1590: 1c 31 cpi r17, 0x1C ; 28 |
1592: 99 f7 brne .-26 ; 0x157a <config_menu_drawings+0x20> |
}; |
// draw current _cursor_ |
//write_char_xy(3, line + chosen, 0xD9); |
write_ascii_string_pgm(4, line, PSTR("Video Mode")); |
1594: 84 e0 ldi r24, 0x04 ; 4 |
1596: 62 e0 ldi r22, 0x02 ; 2 |
1598: 4d ed ldi r20, 0xDD ; 221 |
159a: 52 e0 ldi r21, 0x02 ; 2 |
159c: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) { |
15a0: 80 91 1c 01 lds r24, 0x011C |
15a4: 80 ff sbrs r24, 0 |
15a6: 85 c0 rjmp .+266 ; 0x16b2 <config_menu_drawings+0x158> |
write_ascii_string_pgm(23, line, VM_NTSC); |
15a8: 87 e1 ldi r24, 0x17 ; 23 |
15aa: 62 e0 ldi r22, 0x02 ; 2 |
15ac: 49 ee ldi r20, 0xE9 ; 233 |
15ae: 51 e0 ldi r21, 0x01 ; 1 |
15b0: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
} else { |
write_ascii_string_pgm(23, line, VM_PAL); |
} |
write_ascii_string_pgm(4, ++line, PSTR("Full HUD")); |
15b4: 84 e0 ldi r24, 0x04 ; 4 |
15b6: 63 e0 ldi r22, 0x03 ; 3 |
15b8: 44 ed ldi r20, 0xD4 ; 212 |
15ba: 52 e0 ldi r21, 0x02 ; 2 |
15bc: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
onoff(line, COSD_FLAGS_MODES & COSD_FLAG_HUD); |
15c0: 60 91 1b 01 lds r22, 0x011B |
15c4: 61 70 andi r22, 0x01 ; 1 |
15c6: 83 e0 ldi r24, 0x03 ; 3 |
15c8: 0e 94 9c 0a call 0x1538 ; 0x1538 <onoff> |
write_ascii_string_pgm(4, ++line, PSTR("Art Horizon in HUD")); |
15cc: 84 e0 ldi r24, 0x04 ; 4 |
15ce: 64 e0 ldi r22, 0x04 ; 4 |
15d0: 41 ec ldi r20, 0xC1 ; 193 |
15d2: 52 e0 ldi r21, 0x02 ; 2 |
15d4: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
onoff(line, COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON); |
15d8: 60 91 1b 01 lds r22, 0x011B |
15dc: 62 70 andi r22, 0x02 ; 2 |
15de: 84 e0 ldi r24, 0x04 ; 4 |
15e0: 0e 94 9c 0a call 0x1538 ; 0x1538 <onoff> |
write_ascii_string_pgm(4, ++line, PSTR("Big Vario bar")); |
15e4: 84 e0 ldi r24, 0x04 ; 4 |
15e6: 65 e0 ldi r22, 0x05 ; 5 |
15e8: 43 eb ldi r20, 0xB3 ; 179 |
15ea: 52 e0 ldi r21, 0x02 ; 2 |
15ec: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
onoff(line, COSD_FLAGS_MODES & COSD_FLAG_BIGVARIO); |
15f0: 60 91 1b 01 lds r22, 0x011B |
15f4: 64 70 andi r22, 0x04 ; 4 |
15f6: 85 e0 ldi r24, 0x05 ; 5 |
15f8: 0e 94 9c 0a call 0x1538 ; 0x1538 <onoff> |
write_ascii_string_pgm(4, ++line, PSTR("Statistics")); |
15fc: 84 e0 ldi r24, 0x04 ; 4 |
15fe: 66 e0 ldi r22, 0x06 ; 6 |
1600: 48 ea ldi r20, 0xA8 ; 168 |
1602: 52 e0 ldi r21, 0x02 ; 2 |
1604: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
onoff(line, COSD_FLAGS_MODES & COSD_FLAG_STATS); |
1608: 60 91 1b 01 lds r22, 0x011B |
160c: 68 70 andi r22, 0x08 ; 8 |
160e: 86 e0 ldi r24, 0x06 ; 6 |
1610: 0e 94 9c 0a call 0x1538 ; 0x1538 <onoff> |
write_ascii_string_pgm(4, ++line, PSTR("Current by FC")); |
1614: 84 e0 ldi r24, 0x04 ; 4 |
1616: 67 e0 ldi r22, 0x07 ; 7 |
1618: 4a e9 ldi r20, 0x9A ; 154 |
161a: 52 e0 ldi r21, 0x02 ; 2 |
161c: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
onoff(line, COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT); |
1620: 60 91 1b 01 lds r22, 0x011B |
1624: 60 74 andi r22, 0x40 ; 64 |
1626: 87 e0 ldi r24, 0x07 ; 7 |
1628: 0e 94 9c 0a call 0x1538 ; 0x1538 <onoff> |
write_ascii_string_pgm(4, ++line, PSTR("Voltage by C-Strom")); |
162c: 84 e0 ldi r24, 0x04 ; 4 |
162e: 68 e0 ldi r22, 0x08 ; 8 |
1630: 47 e8 ldi r20, 0x87 ; 135 |
1632: 52 e0 ldi r21, 0x02 ; 2 |
1634: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
onoff(line, COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT); |
1638: 60 91 1b 01 lds r22, 0x011B |
163c: 60 72 andi r22, 0x20 ; 32 |
163e: 88 e0 ldi r24, 0x08 ; 8 |
1640: 0e 94 9c 0a call 0x1538 ; 0x1538 <onoff> |
write_ascii_string_pgm(4, ++line, PSTR("Reset uptime")); |
1644: 84 e0 ldi r24, 0x04 ; 4 |
1646: 69 e0 ldi r22, 0x09 ; 9 |
1648: 4a e7 ldi r20, 0x7A ; 122 |
164a: 52 e0 ldi r21, 0x02 ; 2 |
164c: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ascii_string_pgm(4, ++line, PSTR("Display Mode")); |
1650: 84 e0 ldi r24, 0x04 ; 4 |
1652: 6a e0 ldi r22, 0x0A ; 10 |
1654: 4d e6 ldi r20, 0x6D ; 109 |
1656: 52 e0 ldi r21, 0x02 ; 2 |
1658: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ascii_string_pgm(18, line, (const char *) (pgm_read_word(&(mode->desc)))); |
165c: e0 91 9d 02 lds r30, 0x029D |
1660: f0 91 9e 02 lds r31, 0x029E |
1664: 32 96 adiw r30, 0x02 ; 2 |
1666: 45 91 lpm r20, Z+ |
1668: 54 91 lpm r21, Z+ |
166a: 82 e1 ldi r24, 0x12 ; 18 |
166c: 6a e0 ldi r22, 0x0A ; 10 |
166e: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ascii_string_pgm(4, ++line, PSTR("Height by")); |
1672: 84 e0 ldi r24, 0x04 ; 4 |
1674: 6b e0 ldi r22, 0x0B ; 11 |
1676: 43 e6 ldi r20, 0x63 ; 99 |
1678: 52 e0 ldi r21, 0x02 ; 2 |
167a: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
if (COSD_FLAGS_CONFIG & COSD_FLAG_GPSHEIGHT) { |
167e: 80 91 1c 01 lds r24, 0x011C |
1682: 81 fd sbrc r24, 1 |
1684: 1d c0 rjmp .+58 ; 0x16c0 <config_menu_drawings+0x166> |
write_ascii_string_pgm(20, line, PSTR(" GPS")); |
} else { |
write_ascii_string_pgm(20, line, PSTR("BARO")); |
1686: 84 e1 ldi r24, 0x14 ; 20 |
1688: 6b e0 ldi r22, 0x0B ; 11 |
168a: 49 e5 ldi r20, 0x59 ; 89 |
168c: 52 e0 ldi r21, 0x02 ; 2 |
168e: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
} |
write_ascii_string_pgm(4, ++line, PSTR("Save config")); |
1692: 84 e0 ldi r24, 0x04 ; 4 |
1694: 6c e0 ldi r22, 0x0C ; 12 |
1696: 4d e4 ldi r20, 0x4D ; 77 |
1698: 52 e0 ldi r21, 0x02 ; 2 |
169a: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ascii_string_pgm(4, ++line, PSTR("EXIT")); |
169e: 84 e0 ldi r24, 0x04 ; 4 |
16a0: 6d e0 ldi r22, 0x0D ; 13 |
16a2: 48 e4 ldi r20, 0x48 ; 72 |
16a4: 52 e0 ldi r21, 0x02 ; 2 |
16a6: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
} |
16aa: 1f 91 pop r17 |
16ac: 0f 91 pop r16 |
16ae: ff 90 pop r15 |
16b0: 08 95 ret |
write_ascii_string_pgm(4, line, PSTR("Video Mode")); |
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) { |
write_ascii_string_pgm(23, line, VM_NTSC); |
} else { |
write_ascii_string_pgm(23, line, VM_PAL); |
16b2: 87 e1 ldi r24, 0x17 ; 23 |
16b4: 62 e0 ldi r22, 0x02 ; 2 |
16b6: 44 ee ldi r20, 0xE4 ; 228 |
16b8: 51 e0 ldi r21, 0x01 ; 1 |
16ba: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
16be: 7a cf rjmp .-268 ; 0x15b4 <config_menu_drawings+0x5a> |
write_ascii_string_pgm(4, ++line, PSTR("Display Mode")); |
write_ascii_string_pgm(18, line, (const char *) (pgm_read_word(&(mode->desc)))); |
write_ascii_string_pgm(4, ++line, PSTR("Height by")); |
if (COSD_FLAGS_CONFIG & COSD_FLAG_GPSHEIGHT) { |
write_ascii_string_pgm(20, line, PSTR(" GPS")); |
16c0: 84 e1 ldi r24, 0x14 ; 20 |
16c2: 6b e0 ldi r22, 0x0B ; 11 |
16c4: 4e e5 ldi r20, 0x5E ; 94 |
16c6: 52 e0 ldi r21, 0x02 ; 2 |
16c8: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
16cc: e2 cf rjmp .-60 ; 0x1692 <config_menu_drawings+0x138> |
000016ce <config_menu_doclick>: |
} |
/** |
* some sort of clicking response in the menu |
*/ |
void config_menu_doclick(uint8_t chosen) { |
16ce: 1f 93 push r17 |
16d0: 18 2f mov r17, r24 |
write_ascii_string_pgm(4, chosen + 2, PSTR("DONE ")); |
16d2: 68 2f mov r22, r24 |
16d4: 6e 5f subi r22, 0xFE ; 254 |
16d6: 84 e0 ldi r24, 0x04 ; 4 |
16d8: 45 e3 ldi r20, 0x35 ; 53 |
16da: 52 e0 ldi r21, 0x02 ; 2 |
16dc: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
16e0: 28 e8 ldi r18, 0x88 ; 136 |
16e2: 33 e1 ldi r19, 0x13 ; 19 |
milliseconds can be achieved. |
*/ |
void |
_delay_loop_2(uint16_t __count) |
{ |
__asm__ volatile ( |
16e4: 40 e9 ldi r20, 0x90 ; 144 |
16e6: 51 e0 ldi r21, 0x01 ; 1 |
16e8: ca 01 movw r24, r20 |
16ea: 01 97 sbiw r24, 0x01 ; 1 |
16ec: f1 f7 brne .-4 ; 0x16ea <config_menu_doclick+0x1c> |
{ |
// wait 1/10 ms |
_delay_loop_2(((F_CPU) / 4e3) / 10); |
__ticks --; |
16ee: 21 50 subi r18, 0x01 ; 1 |
16f0: 30 40 sbci r19, 0x00 ; 0 |
__ticks = 1; |
else if (__tmp > 65535) |
{ |
// __ticks = requested delay in 1/10 ms |
__ticks = (uint16_t) (__ms * 10.0); |
while(__ticks) |
16f2: d1 f7 brne .-12 ; 0x16e8 <config_menu_doclick+0x1a> |
_delay_ms(500); |
config_menu_drawings(chosen); |
16f4: 81 2f mov r24, r17 |
16f6: 0e 94 ad 0a call 0x155a ; 0x155a <config_menu_drawings> |
} |
16fa: 1f 91 pop r17 |
16fc: 08 95 ret |
000016fe <save_eeprom>: |
/** |
* save data to eeprom |
*/ |
void save_eeprom() { |
eeprom_write_byte(&ee_checkbyte1, CHECKBYTE1); |
16fe: 80 e0 ldi r24, 0x00 ; 0 |
1700: 90 e0 ldi r25, 0x00 ; 0 |
1702: 6e e2 ldi r22, 0x2E ; 46 |
1704: 0e 94 f5 1c call 0x39ea ; 0x39ea <__eewr_byte_m162> |
eeprom_write_byte(&ee_checkbyte2, CHECKBYTE2); |
1708: 81 e0 ldi r24, 0x01 ; 1 |
170a: 90 e0 ldi r25, 0x00 ; 0 |
170c: 67 e1 ldi r22, 0x17 ; 23 |
170e: 0e 94 f5 1c call 0x39ea ; 0x39ea <__eewr_byte_m162> |
eeprom_write_byte(&ee_COSD_FLAGS_MODES, COSD_FLAGS_MODES); |
1712: 82 e0 ldi r24, 0x02 ; 2 |
1714: 90 e0 ldi r25, 0x00 ; 0 |
1716: 60 91 1b 01 lds r22, 0x011B |
171a: 0e 94 f5 1c call 0x39ea ; 0x39ea <__eewr_byte_m162> |
eeprom_write_byte(&ee_COSD_FLAGS_CONFIG, COSD_FLAGS_CONFIG); |
171e: 83 e0 ldi r24, 0x03 ; 3 |
1720: 90 e0 ldi r25, 0x00 ; 0 |
1722: 60 91 1c 01 lds r22, 0x011C |
1726: 0e 94 f5 1c call 0x39ea ; 0x39ea <__eewr_byte_m162> |
eeprom_write_byte(&ee_COSD_DISPLAYMODE, COSD_DISPLAYMODE); |
172a: 84 e0 ldi r24, 0x04 ; 4 |
172c: 90 e0 ldi r25, 0x00 ; 0 |
172e: 60 91 1e 01 lds r22, 0x011E |
1732: 0e 94 f5 1c call 0x39ea ; 0x39ea <__eewr_byte_m162> |
} |
1736: 08 95 ret |
00001738 <config_menu>: |
} |
/** |
* a simple config menu tryout |
*/ |
void config_menu(void) { |
1738: af 92 push r10 |
173a: bf 92 push r11 |
173c: cf 92 push r12 |
173e: df 92 push r13 |
1740: ef 92 push r14 |
1742: ff 92 push r15 |
1744: 0f 93 push r16 |
1746: 1f 93 push r17 |
1748: cf 93 push r28 |
174a: df 93 push r29 |
// disable interrupts (makes the menu more smoothely) |
cli(); |
174c: f8 94 cli |
// clear screen |
clear(); |
174e: 0e 94 75 08 call 0x10ea ; 0x10ea <clear> |
uint8_t chosen = 0; |
uint8_t inmenu = 1; |
write_ascii_string_pgm(6, 1, PSTR("C-OSD Config Menu")); |
1752: 86 e0 ldi r24, 0x06 ; 6 |
1754: 61 e0 ldi r22, 0x01 ; 1 |
1756: 43 e2 ldi r20, 0x23 ; 35 |
1758: 52 e0 ldi r21, 0x02 ; 2 |
175a: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
175e: 24 ec ldi r18, 0xC4 ; 196 |
1760: 39 e0 ldi r19, 0x09 ; 9 |
1762: 40 e9 ldi r20, 0x90 ; 144 |
1764: 51 e0 ldi r21, 0x01 ; 1 |
1766: ca 01 movw r24, r20 |
1768: 01 97 sbiw r24, 0x01 ; 1 |
176a: f1 f7 brne .-4 ; 0x1768 <config_menu+0x30> |
{ |
// wait 1/10 ms |
_delay_loop_2(((F_CPU) / 4e3) / 10); |
__ticks --; |
176c: 21 50 subi r18, 0x01 ; 1 |
176e: 30 40 sbci r19, 0x00 ; 0 |
__ticks = 1; |
else if (__tmp > 65535) |
{ |
// __ticks = requested delay in 1/10 ms |
__ticks = (uint16_t) (__ms * 10.0); |
while(__ticks) |
1770: d1 f7 brne .-12 ; 0x1766 <config_menu+0x2e> |
// wait a bit before doing stuff so user has chance to release button |
_delay_ms(250); |
config_menu_drawings(chosen); |
1772: 80 e0 ldi r24, 0x00 ; 0 |
1774: 0e 94 ad 0a call 0x155a ; 0x155a <config_menu_drawings> |
1778: 10 e0 ldi r17, 0x00 ; 0 |
177a: c0 e9 ldi r28, 0x90 ; 144 |
177c: d1 e0 ldi r29, 0x01 ; 1 |
/*case 5: // warnings |
COSD_FLAGS_MODES ^= COSD_FLAG_WARNINGS; |
config_menu_drawings(chosen); |
break;*/ |
case 5: // current by fc |
COSD_FLAGS_MODES ^= COSD_FLAG_FCCURRENT; |
177e: 00 e4 ldi r16, 0x40 ; 64 |
config_menu_drawings(chosen); |
1780: ff 24 eor r15, r15 |
1782: f3 94 inc r15 |
osd_ncmode = (int(*)(void)) pgm_read_word(&mode->dfun); |
#endif |
config_menu_drawings(chosen); |
break; |
case 9: // GPS or BARO height |
COSD_FLAGS_CONFIG ^= COSD_FLAG_GPSHEIGHT; |
1784: 72 e0 ldi r23, 0x02 ; 2 |
1786: e7 2e mov r14, r23 |
case 5: // current by fc |
COSD_FLAGS_MODES ^= COSD_FLAG_FCCURRENT; |
config_menu_drawings(chosen); |
break; |
case 6: // 2nd voltage by c-strom |
COSD_FLAGS_MODES ^= COSD_FLAG_STROMVOLT; |
1788: 60 e2 ldi r22, 0x20 ; 32 |
178a: d6 2e mov r13, r22 |
case 2: // art horizon |
COSD_FLAGS_MODES ^= COSD_FLAG_ARTHORIZON; |
config_menu_drawings(chosen); |
break; |
case 3: // big vario |
COSD_FLAGS_MODES ^= COSD_FLAG_BIGVARIO; |
178c: 54 e0 ldi r21, 0x04 ; 4 |
178e: c5 2e mov r12, r21 |
bottom_line = 12; |
} else { |
// PAL + enable display immediately (VM0) |
spi_send_byte(0x00, 0b01001000); |
bottom_line = 14; |
1790: 4e e0 ldi r20, 0x0E ; 14 |
1792: b4 2e mov r11, r20 |
// Setup Video Mode |
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) { |
// NTSC + enable display immediately (VM0) |
spi_send_byte(0x00, 0b00001000); |
bottom_line = 12; |
1794: 3c e0 ldi r19, 0x0C ; 12 |
1796: a3 2e mov r10, r19 |
_delay_ms(250); |
config_menu_drawings(chosen); |
while (inmenu) { |
if (s2_pressed()) { |
1798: 0e 94 79 0e call 0x1cf2 ; 0x1cf2 <s2_pressed> |
179c: 89 2b or r24, r25 |
179e: b1 f0 breq .+44 ; 0x17cc <config_menu+0x94> |
chosen = (chosen + 1) % 12; |
17a0: 81 2f mov r24, r17 |
17a2: 90 e0 ldi r25, 0x00 ; 0 |
17a4: 01 96 adiw r24, 0x01 ; 1 |
17a6: 6c e0 ldi r22, 0x0C ; 12 |
17a8: 70 e0 ldi r23, 0x00 ; 0 |
17aa: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
17ae: 18 2f mov r17, r24 |
config_menu_drawings(chosen); |
17b0: 0e 94 ad 0a call 0x155a ; 0x155a <config_menu_drawings> |
17b4: 28 e8 ldi r18, 0x88 ; 136 |
17b6: 33 e1 ldi r19, 0x13 ; 19 |
17b8: ce 01 movw r24, r28 |
17ba: 01 97 sbiw r24, 0x01 ; 1 |
17bc: f1 f7 brne .-4 ; 0x17ba <config_menu+0x82> |
{ |
// wait 1/10 ms |
_delay_loop_2(((F_CPU) / 4e3) / 10); |
__ticks --; |
17be: 21 50 subi r18, 0x01 ; 1 |
17c0: 30 40 sbci r19, 0x00 ; 0 |
__ticks = 1; |
else if (__tmp > 65535) |
{ |
// __ticks = requested delay in 1/10 ms |
__ticks = (uint16_t) (__ms * 10.0); |
while(__ticks) |
17c2: d1 f7 brne .-12 ; 0x17b8 <config_menu+0x80> |
_delay_ms(250); |
config_menu_drawings(chosen); |
while (inmenu) { |
if (s2_pressed()) { |
17c4: 0e 94 79 0e call 0x1cf2 ; 0x1cf2 <s2_pressed> |
17c8: 89 2b or r24, r25 |
17ca: 51 f7 brne .-44 ; 0x17a0 <config_menu+0x68> |
chosen = (chosen + 1) % 12; |
config_menu_drawings(chosen); |
_delay_ms(500); |
} else if (s1_pressed()) { |
17cc: 0e 94 58 0e call 0x1cb0 ; 0x1cb0 <s1_pressed> |
17d0: 89 2b or r24, r25 |
17d2: 11 f3 breq .-60 ; 0x1798 <config_menu+0x60> |
switch (chosen) { |
17d4: 15 30 cpi r17, 0x05 ; 5 |
17d6: 09 f4 brne .+2 ; 0x17da <config_menu+0xa2> |
17d8: bf c0 rjmp .+382 ; 0x1958 <config_menu+0x220> |
17da: 16 30 cpi r17, 0x06 ; 6 |
17dc: 58 f5 brcc .+86 ; 0x1834 <config_menu+0xfc> |
17de: 12 30 cpi r17, 0x02 ; 2 |
17e0: 09 f4 brne .+2 ; 0x17e4 <config_menu+0xac> |
17e2: b0 c0 rjmp .+352 ; 0x1944 <config_menu+0x20c> |
17e4: 13 30 cpi r17, 0x03 ; 3 |
17e6: 08 f4 brcc .+2 ; 0x17ea <config_menu+0xb2> |
17e8: 41 c0 rjmp .+130 ; 0x186c <config_menu+0x134> |
17ea: 13 30 cpi r17, 0x03 ; 3 |
17ec: 09 f4 brne .+2 ; 0x17f0 <config_menu+0xb8> |
17ee: 62 c0 rjmp .+196 ; 0x18b4 <config_menu+0x17c> |
17f0: 14 30 cpi r17, 0x04 ; 4 |
17f2: 09 f4 brne .+2 ; 0x17f6 <config_menu+0xbe> |
17f4: 54 c0 rjmp .+168 ; 0x189e <config_menu+0x166> |
COSD_FLAGS_CONFIG ^= COSD_FLAG_GPSHEIGHT; |
config_menu_drawings(chosen); |
break; |
case 10: // save |
save_eeprom(); |
config_menu_doclick(chosen); |
17f6: 41 e0 ldi r20, 0x01 ; 1 |
17f8: 24 ec ldi r18, 0xC4 ; 196 |
17fa: 39 e0 ldi r19, 0x09 ; 9 |
17fc: ce 01 movw r24, r28 |
17fe: 01 97 sbiw r24, 0x01 ; 1 |
1800: f1 f7 brne .-4 ; 0x17fe <config_menu+0xc6> |
{ |
// wait 1/10 ms |
_delay_loop_2(((F_CPU) / 4e3) / 10); |
__ticks --; |
1802: 21 50 subi r18, 0x01 ; 1 |
1804: 30 40 sbci r19, 0x00 ; 0 |
__ticks = 1; |
else if (__tmp > 65535) |
{ |
// __ticks = requested delay in 1/10 ms |
__ticks = (uint16_t) (__ms * 10.0); |
while(__ticks) |
1806: d1 f7 brne .-12 ; 0x17fc <config_menu+0xc4> |
// wait a bit before doing stuff so user has chance to release button |
_delay_ms(250); |
config_menu_drawings(chosen); |
while (inmenu) { |
1808: 44 23 and r20, r20 |
180a: 09 f0 breq .+2 ; 0x180e <config_menu+0xd6> |
180c: c5 cf rjmp .-118 ; 0x1798 <config_menu+0x60> |
_delay_ms(250); |
} |
} |
// clear screen up again |
clear(); |
180e: 0e 94 75 08 call 0x10ea ; 0x10ea <clear> |
// update flags to paint display again if needed |
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN; |
1812: 80 91 1d 01 lds r24, 0x011D |
1816: 8d 7f andi r24, 0xFD ; 253 |
1818: 80 93 1d 01 sts 0x011D, r24 |
// enable interrupts again |
sei(); |
181c: 78 94 sei |
} |
181e: df 91 pop r29 |
1820: cf 91 pop r28 |
1822: 1f 91 pop r17 |
1824: 0f 91 pop r16 |
1826: ff 90 pop r15 |
1828: ef 90 pop r14 |
182a: df 90 pop r13 |
182c: cf 90 pop r12 |
182e: bf 90 pop r11 |
1830: af 90 pop r10 |
1832: 08 95 ret |
if (s2_pressed()) { |
chosen = (chosen + 1) % 12; |
config_menu_drawings(chosen); |
_delay_ms(500); |
} else if (s1_pressed()) { |
switch (chosen) { |
1834: 18 30 cpi r17, 0x08 ; 8 |
1836: 09 f4 brne .+2 ; 0x183a <config_menu+0x102> |
1838: 63 c0 rjmp .+198 ; 0x1900 <config_menu+0x1c8> |
183a: 19 30 cpi r17, 0x09 ; 9 |
183c: 48 f0 brcs .+18 ; 0x1850 <config_menu+0x118> |
183e: 1a 30 cpi r17, 0x0A ; 10 |
1840: 09 f4 brne .+2 ; 0x1844 <config_menu+0x10c> |
1842: 7a c0 rjmp .+244 ; 0x1938 <config_menu+0x200> |
1844: 1a 30 cpi r17, 0x0A ; 10 |
1846: 08 f1 brcs .+66 ; 0x188a <config_menu+0x152> |
1848: 1b 30 cpi r17, 0x0B ; 11 |
184a: a9 f6 brne .-86 ; 0x17f6 <config_menu+0xbe> |
184c: 40 e0 ldi r20, 0x00 ; 0 |
184e: d4 cf rjmp .-88 ; 0x17f8 <config_menu+0xc0> |
1850: 16 30 cpi r17, 0x06 ; 6 |
1852: 09 f4 brne .+2 ; 0x1856 <config_menu+0x11e> |
1854: 4b c0 rjmp .+150 ; 0x18ec <config_menu+0x1b4> |
1856: 17 30 cpi r17, 0x07 ; 7 |
1858: 71 f6 brne .-100 ; 0x17f6 <config_menu+0xbe> |
case 6: // 2nd voltage by c-strom |
COSD_FLAGS_MODES ^= COSD_FLAG_STROMVOLT; |
config_menu_drawings(chosen); |
break; |
case 7: // reset uptime |
uptime = 0; |
185a: 10 92 13 01 sts 0x0113, r1 |
185e: 10 92 12 01 sts 0x0112, r1 |
config_menu_doclick(chosen); |
1862: 87 e0 ldi r24, 0x07 ; 7 |
1864: 0e 94 67 0b call 0x16ce ; 0x16ce <config_menu_doclick> |
1868: 41 e0 ldi r20, 0x01 ; 1 |
186a: c6 cf rjmp .-116 ; 0x17f8 <config_menu+0xc0> |
if (s2_pressed()) { |
chosen = (chosen + 1) % 12; |
config_menu_drawings(chosen); |
_delay_ms(500); |
} else if (s1_pressed()) { |
switch (chosen) { |
186c: 11 23 and r17, r17 |
186e: 61 f1 breq .+88 ; 0x18c8 <config_menu+0x190> |
1870: 11 30 cpi r17, 0x01 ; 1 |
1872: 09 f0 breq .+2 ; 0x1876 <config_menu+0x13e> |
1874: c0 cf rjmp .-128 ; 0x17f6 <config_menu+0xbe> |
bottom_line = 14; |
} |
config_menu_drawings(chosen); |
break; |
case 1: // full HUD |
COSD_FLAGS_MODES ^= COSD_FLAG_HUD; |
1876: 80 91 1b 01 lds r24, 0x011B |
187a: 81 27 eor r24, r17 |
187c: 80 93 1b 01 sts 0x011B, r24 |
config_menu_drawings(chosen); |
1880: 81 e0 ldi r24, 0x01 ; 1 |
1882: 0e 94 ad 0a call 0x155a ; 0x155a <config_menu_drawings> |
1886: 41 e0 ldi r20, 0x01 ; 1 |
1888: b7 cf rjmp .-146 ; 0x17f8 <config_menu+0xc0> |
osd_ncmode = (int(*)(void)) pgm_read_word(&mode->dfun); |
#endif |
config_menu_drawings(chosen); |
break; |
case 9: // GPS or BARO height |
COSD_FLAGS_CONFIG ^= COSD_FLAG_GPSHEIGHT; |
188a: 80 91 1c 01 lds r24, 0x011C |
188e: 8e 25 eor r24, r14 |
1890: 80 93 1c 01 sts 0x011C, r24 |
config_menu_drawings(chosen); |
1894: 89 e0 ldi r24, 0x09 ; 9 |
1896: 0e 94 ad 0a call 0x155a ; 0x155a <config_menu_drawings> |
189a: 41 e0 ldi r20, 0x01 ; 1 |
189c: ad cf rjmp .-166 ; 0x17f8 <config_menu+0xc0> |
case 3: // big vario |
COSD_FLAGS_MODES ^= COSD_FLAG_BIGVARIO; |
config_menu_drawings(chosen); |
break; |
case 4: // statistics |
COSD_FLAGS_MODES ^= COSD_FLAG_STATS; |
189e: 80 91 1b 01 lds r24, 0x011B |
18a2: 98 e0 ldi r25, 0x08 ; 8 |
18a4: 89 27 eor r24, r25 |
18a6: 80 93 1b 01 sts 0x011B, r24 |
config_menu_drawings(chosen); |
18aa: 84 e0 ldi r24, 0x04 ; 4 |
18ac: 0e 94 ad 0a call 0x155a ; 0x155a <config_menu_drawings> |
18b0: 41 e0 ldi r20, 0x01 ; 1 |
18b2: a2 cf rjmp .-188 ; 0x17f8 <config_menu+0xc0> |
case 2: // art horizon |
COSD_FLAGS_MODES ^= COSD_FLAG_ARTHORIZON; |
config_menu_drawings(chosen); |
break; |
case 3: // big vario |
COSD_FLAGS_MODES ^= COSD_FLAG_BIGVARIO; |
18b4: 80 91 1b 01 lds r24, 0x011B |
18b8: 8c 25 eor r24, r12 |
18ba: 80 93 1b 01 sts 0x011B, r24 |
config_menu_drawings(chosen); |
18be: 83 e0 ldi r24, 0x03 ; 3 |
18c0: 0e 94 ad 0a call 0x155a ; 0x155a <config_menu_drawings> |
18c4: 41 e0 ldi r20, 0x01 ; 1 |
18c6: 98 cf rjmp .-208 ; 0x17f8 <config_menu+0xc0> |
config_menu_drawings(chosen); |
_delay_ms(500); |
} else if (s1_pressed()) { |
switch (chosen) { |
case 0: // NTSC or PAL |
COSD_FLAGS_CONFIG ^= COSD_FLAG_NTSC; |
18c8: 80 91 1c 01 lds r24, 0x011C |
18cc: 8f 25 eor r24, r15 |
18ce: 80 93 1c 01 sts 0x011C, r24 |
// Setup Video Mode |
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) { |
18d2: 80 fd sbrc r24, 0 |
18d4: 4b c0 rjmp .+150 ; 0x196c <config_menu+0x234> |
spi_send_byte(0x00, 0b00001000); |
bottom_line = 12; |
} else { |
// PAL + enable display immediately (VM0) |
spi_send_byte(0x00, 0b01001000); |
18d6: 80 e0 ldi r24, 0x00 ; 0 |
18d8: 68 e4 ldi r22, 0x48 ; 72 |
18da: 0e 94 af 04 call 0x95e ; 0x95e <spi_send_byte> |
bottom_line = 14; |
18de: b0 92 03 01 sts 0x0103, r11 |
} |
config_menu_drawings(chosen); |
18e2: 80 e0 ldi r24, 0x00 ; 0 |
18e4: 0e 94 ad 0a call 0x155a ; 0x155a <config_menu_drawings> |
18e8: 41 e0 ldi r20, 0x01 ; 1 |
18ea: 86 cf rjmp .-244 ; 0x17f8 <config_menu+0xc0> |
case 5: // current by fc |
COSD_FLAGS_MODES ^= COSD_FLAG_FCCURRENT; |
config_menu_drawings(chosen); |
break; |
case 6: // 2nd voltage by c-strom |
COSD_FLAGS_MODES ^= COSD_FLAG_STROMVOLT; |
18ec: 80 91 1b 01 lds r24, 0x011B |
18f0: 8d 25 eor r24, r13 |
18f2: 80 93 1b 01 sts 0x011B, r24 |
config_menu_drawings(chosen); |
18f6: 86 e0 ldi r24, 0x06 ; 6 |
18f8: 0e 94 ad 0a call 0x155a ; 0x155a <config_menu_drawings> |
18fc: 41 e0 ldi r20, 0x01 ; 1 |
18fe: 7c cf rjmp .-264 ; 0x17f8 <config_menu+0xc0> |
COSD_DISPLAYMODE = (COSD_DISPLAYMODE + 1) % (sizeof(fcdisplaymodes) / sizeof(displaymode_t)); |
mode = fcdisplaymodes; |
mode += COSD_DISPLAYMODE; |
osd_fcmode = (int(*)(void)) pgm_read_word(&mode->dfun); |
#else |
COSD_DISPLAYMODE = (COSD_DISPLAYMODE + 1) % (sizeof(ncdisplaymodes) / sizeof(displaymode_t)); |
1900: e0 91 1e 01 lds r30, 0x011E |
1904: ef 5f subi r30, 0xFF ; 255 |
1906: e1 70 andi r30, 0x01 ; 1 |
1908: e0 93 1e 01 sts 0x011E, r30 |
mode = ncdisplaymodes; |
mode += COSD_DISPLAYMODE; |
190c: f0 e0 ldi r31, 0x00 ; 0 |
190e: ee 0f add r30, r30 |
1910: ff 1f adc r31, r31 |
1912: ee 0f add r30, r30 |
1914: ff 1f adc r31, r31 |
1916: e0 5d subi r30, 0xD0 ; 208 |
1918: fe 4f sbci r31, 0xFE ; 254 |
191a: f0 93 9e 02 sts 0x029E, r31 |
191e: e0 93 9d 02 sts 0x029D, r30 |
osd_ncmode = (int(*)(void)) pgm_read_word(&mode->dfun); |
1922: 85 91 lpm r24, Z+ |
1924: 94 91 lpm r25, Z+ |
1926: 90 93 06 01 sts 0x0106, r25 |
192a: 80 93 05 01 sts 0x0105, r24 |
#endif |
config_menu_drawings(chosen); |
192e: 88 e0 ldi r24, 0x08 ; 8 |
1930: 0e 94 ad 0a call 0x155a ; 0x155a <config_menu_drawings> |
1934: 41 e0 ldi r20, 0x01 ; 1 |
1936: 60 cf rjmp .-320 ; 0x17f8 <config_menu+0xc0> |
case 9: // GPS or BARO height |
COSD_FLAGS_CONFIG ^= COSD_FLAG_GPSHEIGHT; |
config_menu_drawings(chosen); |
break; |
case 10: // save |
save_eeprom(); |
1938: 0e 94 7f 0b call 0x16fe ; 0x16fe <save_eeprom> |
config_menu_doclick(chosen); |
193c: 8a e0 ldi r24, 0x0A ; 10 |
193e: 0e 94 67 0b call 0x16ce ; 0x16ce <config_menu_doclick> |
1942: 59 cf rjmp .-334 ; 0x17f6 <config_menu+0xbe> |
case 1: // full HUD |
COSD_FLAGS_MODES ^= COSD_FLAG_HUD; |
config_menu_drawings(chosen); |
break; |
case 2: // art horizon |
COSD_FLAGS_MODES ^= COSD_FLAG_ARTHORIZON; |
1944: 80 91 1b 01 lds r24, 0x011B |
1948: 81 27 eor r24, r17 |
194a: 80 93 1b 01 sts 0x011B, r24 |
config_menu_drawings(chosen); |
194e: 82 e0 ldi r24, 0x02 ; 2 |
1950: 0e 94 ad 0a call 0x155a ; 0x155a <config_menu_drawings> |
1954: 41 e0 ldi r20, 0x01 ; 1 |
1956: 50 cf rjmp .-352 ; 0x17f8 <config_menu+0xc0> |
/*case 5: // warnings |
COSD_FLAGS_MODES ^= COSD_FLAG_WARNINGS; |
config_menu_drawings(chosen); |
break;*/ |
case 5: // current by fc |
COSD_FLAGS_MODES ^= COSD_FLAG_FCCURRENT; |
1958: 80 91 1b 01 lds r24, 0x011B |
195c: 80 27 eor r24, r16 |
195e: 80 93 1b 01 sts 0x011B, r24 |
config_menu_drawings(chosen); |
1962: 85 e0 ldi r24, 0x05 ; 5 |
1964: 0e 94 ad 0a call 0x155a ; 0x155a <config_menu_drawings> |
1968: 41 e0 ldi r20, 0x01 ; 1 |
196a: 46 cf rjmp .-372 ; 0x17f8 <config_menu+0xc0> |
case 0: // NTSC or PAL |
COSD_FLAGS_CONFIG ^= COSD_FLAG_NTSC; |
// Setup Video Mode |
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) { |
// NTSC + enable display immediately (VM0) |
spi_send_byte(0x00, 0b00001000); |
196c: 80 e0 ldi r24, 0x00 ; 0 |
196e: 68 e0 ldi r22, 0x08 ; 8 |
1970: 0e 94 af 04 call 0x95e ; 0x95e <spi_send_byte> |
bottom_line = 12; |
1974: a0 92 03 01 sts 0x0103, r10 |
1978: b4 cf rjmp .-152 ; 0x18e2 <config_menu+0x1aa> |
0000197a <get_eeprom>: |
const char* ee_msg[] PROGMEM = {ee_message0, ee_message1}; |
/** |
* read data saved in eeprom, print out message if <verbose> is set |
*/ |
void get_eeprom(uint8_t verbose) { |
197a: 1f 93 push r17 |
197c: 18 2f mov r17, r24 |
if (eeprom_read_byte(&ee_checkbyte1) == CHECKBYTE1 && eeprom_read_byte(&ee_checkbyte2) == CHECKBYTE2) { |
197e: 80 e0 ldi r24, 0x00 ; 0 |
1980: 90 e0 ldi r25, 0x00 ; 0 |
1982: 0e 94 ed 1c call 0x39da ; 0x39da <__eerd_byte_m162> |
1986: 8e 32 cpi r24, 0x2E ; 46 |
1988: 51 f0 breq .+20 ; 0x199e <get_eeprom+0x24> |
COSD_FLAGS_CONFIG = eeprom_read_byte(&ee_COSD_FLAGS_CONFIG); |
COSD_DISPLAYMODE = eeprom_read_byte(&ee_COSD_DISPLAYMODE); |
//if (verbose) write_ndigit_number_u(23, 11, COSD_DISPLAYMODE, 2, 0); |
} else { |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
if (verbose) write_ascii_string_pgm(2, 9, ee_msg[1]); // Loading data |
198a: 11 23 and r17, r17 |
198c: 31 f0 breq .+12 ; 0x199a <get_eeprom+0x20> |
198e: 82 e0 ldi r24, 0x02 ; 2 |
1990: 69 e0 ldi r22, 0x09 ; 9 |
1992: 47 e0 ldi r20, 0x07 ; 7 |
1994: 52 e0 ldi r21, 0x02 ; 2 |
1996: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
#endif |
} |
} |
199a: 1f 91 pop r17 |
199c: 08 95 ret |
/** |
* read data saved in eeprom, print out message if <verbose> is set |
*/ |
void get_eeprom(uint8_t verbose) { |
if (eeprom_read_byte(&ee_checkbyte1) == CHECKBYTE1 && eeprom_read_byte(&ee_checkbyte2) == CHECKBYTE2) { |
199e: 81 e0 ldi r24, 0x01 ; 1 |
19a0: 90 e0 ldi r25, 0x00 ; 0 |
19a2: 0e 94 ed 1c call 0x39da ; 0x39da <__eerd_byte_m162> |
19a6: 87 31 cpi r24, 0x17 ; 23 |
19a8: 81 f7 brne .-32 ; 0x198a <get_eeprom+0x10> |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
if (verbose) write_ascii_string_pgm(2, 9, ee_msg[0]); // Loading data |
19aa: 11 23 and r17, r17 |
19ac: 99 f4 brne .+38 ; 0x19d4 <get_eeprom+0x5a> |
#endif |
COSD_FLAGS_MODES = eeprom_read_byte(&ee_COSD_FLAGS_MODES); |
19ae: 82 e0 ldi r24, 0x02 ; 2 |
19b0: 90 e0 ldi r25, 0x00 ; 0 |
19b2: 0e 94 ed 1c call 0x39da ; 0x39da <__eerd_byte_m162> |
19b6: 80 93 1b 01 sts 0x011B, r24 |
COSD_FLAGS_CONFIG = eeprom_read_byte(&ee_COSD_FLAGS_CONFIG); |
19ba: 83 e0 ldi r24, 0x03 ; 3 |
19bc: 90 e0 ldi r25, 0x00 ; 0 |
19be: 0e 94 ed 1c call 0x39da ; 0x39da <__eerd_byte_m162> |
19c2: 80 93 1c 01 sts 0x011C, r24 |
COSD_DISPLAYMODE = eeprom_read_byte(&ee_COSD_DISPLAYMODE); |
19c6: 84 e0 ldi r24, 0x04 ; 4 |
19c8: 90 e0 ldi r25, 0x00 ; 0 |
19ca: 0e 94 ed 1c call 0x39da ; 0x39da <__eerd_byte_m162> |
19ce: 80 93 1e 01 sts 0x011E, r24 |
19d2: e3 cf rjmp .-58 ; 0x199a <get_eeprom+0x20> |
* read data saved in eeprom, print out message if <verbose> is set |
*/ |
void get_eeprom(uint8_t verbose) { |
if (eeprom_read_byte(&ee_checkbyte1) == CHECKBYTE1 && eeprom_read_byte(&ee_checkbyte2) == CHECKBYTE2) { |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
if (verbose) write_ascii_string_pgm(2, 9, ee_msg[0]); // Loading data |
19d4: 82 e0 ldi r24, 0x02 ; 2 |
19d6: 69 e0 ldi r22, 0x09 ; 9 |
19d8: 4e ee ldi r20, 0xEE ; 238 |
19da: 51 e0 ldi r21, 0x01 ; 1 |
19dc: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
19e0: e6 cf rjmp .-52 ; 0x19ae <get_eeprom+0x34> |
000019e2 <init_cosd>: |
/** |
* auto config some stuff on startup, currently only battery cells |
* TODO: this is testing stuff, strings should go progmem and so on... |
*/ |
void init_cosd(uint8_t UBat) { |
19e2: ff 92 push r15 |
19e4: 0f 93 push r16 |
19e6: 1f 93 push r17 |
19e8: df 93 push r29 |
19ea: cf 93 push r28 |
19ec: cd b7 in r28, 0x3d ; 61 |
19ee: de b7 in r29, 0x3e ; 62 |
19f0: 2a 97 sbiw r28, 0x0a ; 10 |
19f2: 0f b6 in r0, 0x3f ; 63 |
19f4: f8 94 cli |
19f6: de bf out 0x3e, r29 ; 62 |
19f8: 0f be out 0x3f, r0 ; 63 |
19fa: cd bf out 0x3d, r28 ; 61 |
19fc: 18 2f mov r17, r24 |
clear(); |
19fe: 0e 94 75 08 call 0x10ea ; 0x10ea <clear> |
write_ascii_string_pgm(2, 1, PSTR("C-OSD Initialisation")); // C-OSD Initialisation |
1a02: 82 e0 ldi r24, 0x02 ; 2 |
1a04: 61 e0 ldi r22, 0x01 ; 1 |
1a06: 46 e7 ldi r20, 0x76 ; 118 |
1a08: 53 e0 ldi r21, 0x03 ; 3 |
1a0a: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
#if FCONLY |
write_ascii_string_pgm(2, 2, PSTR("FC only Mode")); // FC only mode |
#else |
write_ascii_string_pgm(2, 2, PSTR("NaviCtrl Mode")); // NaviCtrl Mode |
1a0e: 82 e0 ldi r24, 0x02 ; 2 |
1a10: 62 e0 ldi r22, 0x02 ; 2 |
1a12: 48 e6 ldi r20, 0x68 ; 104 |
1a14: 53 e0 ldi r21, 0x03 ; 3 |
1a16: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
#endif |
write_ascii_string_pgm(2, 3, PSTR(BUILDDATE)); |
1a1a: 82 e0 ldi r24, 0x02 ; 2 |
1a1c: 63 e0 ldi r22, 0x03 ; 3 |
1a1e: 4c e5 ldi r20, 0x5C ; 92 |
1a20: 53 e0 ldi r21, 0x03 ; 3 |
1a22: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
uint8_t cellnum = 0; |
if (CELL_NUM == -1) { |
write_ascii_string_pgm(2, 4, PSTR("Guessing Number of Cells")); // Guessing Number of Cells |
1a26: 82 e0 ldi r24, 0x02 ; 2 |
1a28: 64 e0 ldi r22, 0x04 ; 4 |
1a2a: 43 e4 ldi r20, 0x43 ; 67 |
1a2c: 53 e0 ldi r21, 0x03 ; 3 |
1a2e: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
1a32: 61 2f mov r22, r17 |
1a34: 70 e0 ldi r23, 0x00 ; 0 |
1a36: 00 e0 ldi r16, 0x00 ; 0 |
do { |
cellnum++; |
1a38: 0f 5f subi r16, 0xFF ; 255 |
} while (UBat > ((cellnum * CELL_VOLT_MAX) + 23)); |
1a3a: 40 2f mov r20, r16 |
1a3c: 50 e0 ldi r21, 0x00 ; 0 |
1a3e: ca 01 movw r24, r20 |
1a40: 88 0f add r24, r24 |
1a42: 99 1f adc r25, r25 |
1a44: 88 0f add r24, r24 |
1a46: 99 1f adc r25, r25 |
1a48: 9c 01 movw r18, r24 |
1a4a: 22 0f add r18, r18 |
1a4c: 33 1f adc r19, r19 |
1a4e: 22 0f add r18, r18 |
1a50: 33 1f adc r19, r19 |
1a52: 22 0f add r18, r18 |
1a54: 33 1f adc r19, r19 |
1a56: 28 0f add r18, r24 |
1a58: 39 1f adc r19, r25 |
1a5a: 24 0f add r18, r20 |
1a5c: 35 1f adc r19, r21 |
1a5e: c9 01 movw r24, r18 |
1a60: 47 96 adiw r24, 0x17 ; 23 |
1a62: 86 17 cp r24, r22 |
1a64: 97 07 cpc r25, r23 |
1a66: 44 f3 brlt .-48 ; 0x1a38 <init_cosd+0x56> |
} else { |
cellnum = CELL_NUM; |
} |
min_voltage = cellnum * CELL_VOLT_MIN; |
1a68: 44 0f add r20, r20 |
1a6a: 55 1f adc r21, r21 |
1a6c: 42 95 swap r20 |
1a6e: 52 95 swap r21 |
1a70: 50 7f andi r21, 0xF0 ; 240 |
1a72: 54 27 eor r21, r20 |
1a74: 40 7f andi r20, 0xF0 ; 240 |
1a76: 54 27 eor r21, r20 |
1a78: 40 93 19 01 sts 0x0119, r20 |
max_voltage = cellnum * CELL_VOLT_MAX; |
1a7c: 20 93 1a 01 sts 0x011A, r18 |
write_ascii_string_pgm(2, 5, PSTR("Number of Cells:")); // Number of Cells |
1a80: 82 e0 ldi r24, 0x02 ; 2 |
1a82: 65 e0 ldi r22, 0x05 ; 5 |
1a84: 42 e3 ldi r20, 0x32 ; 50 |
1a86: 53 e0 ldi r21, 0x03 ; 3 |
1a88: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_u(21, 5, cellnum, 1, 0); |
1a8c: 85 e1 ldi r24, 0x15 ; 21 |
1a8e: 65 e0 ldi r22, 0x05 ; 5 |
1a90: 40 2f mov r20, r16 |
1a92: 50 e0 ldi r21, 0x00 ; 0 |
1a94: 21 e0 ldi r18, 0x01 ; 1 |
1a96: 30 e0 ldi r19, 0x00 ; 0 |
1a98: 00 e0 ldi r16, 0x00 ; 0 |
1a9a: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_ascii_string_pgm(2, 6, PSTR("Warn Voltage :")); // Warn Voltage |
1a9e: 82 e0 ldi r24, 0x02 ; 2 |
1aa0: 66 e0 ldi r22, 0x06 ; 6 |
1aa2: 41 e2 ldi r20, 0x21 ; 33 |
1aa4: 53 e0 ldi r21, 0x03 ; 3 |
1aa6: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_s_10th(20, 6, min_voltage, 3, 0); |
1aaa: 40 91 19 01 lds r20, 0x0119 |
1aae: 84 e1 ldi r24, 0x14 ; 20 |
1ab0: 66 e0 ldi r22, 0x06 ; 6 |
1ab2: 50 e0 ldi r21, 0x00 ; 0 |
1ab4: 23 e0 ldi r18, 0x03 ; 3 |
1ab6: 30 e0 ldi r19, 0x00 ; 0 |
1ab8: 0e 94 d3 05 call 0xba6 ; 0xba6 <write_ndigit_number_s_10th> |
write_ascii_string_pgm(2, 7, PSTR("Max Voltage :")); // Max Voltage |
1abc: 82 e0 ldi r24, 0x02 ; 2 |
1abe: 67 e0 ldi r22, 0x07 ; 7 |
1ac0: 40 e1 ldi r20, 0x10 ; 16 |
1ac2: 53 e0 ldi r21, 0x03 ; 3 |
1ac4: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_s_10th(20, 7, max_voltage, 3, 0); |
1ac8: 40 91 1a 01 lds r20, 0x011A |
1acc: 84 e1 ldi r24, 0x14 ; 20 |
1ace: 67 e0 ldi r22, 0x07 ; 7 |
1ad0: 50 e0 ldi r21, 0x00 ; 0 |
1ad2: 23 e0 ldi r18, 0x03 ; 3 |
1ad4: 30 e0 ldi r19, 0x00 ; 0 |
1ad6: 0e 94 d3 05 call 0xba6 ; 0xba6 <write_ndigit_number_s_10th> |
get_eeprom(1); |
1ada: 81 e0 ldi r24, 0x01 ; 1 |
1adc: 0e 94 bd 0c call 0x197a ; 0x197a <get_eeprom> |
//write_ascii_string_pgm(23, 2, vm[COSD_FLAGS & COSD_FLAG_NTSC]); |
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) { |
1ae0: 80 91 1c 01 lds r24, 0x011C |
1ae4: 80 ff sbrs r24, 0 |
1ae6: 7a c0 rjmp .+244 ; 0x1bdc <init_cosd+0x1fa> |
write_ascii_string_pgm(23, 2, VM_NTSC); |
1ae8: 87 e1 ldi r24, 0x17 ; 23 |
1aea: 62 e0 ldi r22, 0x02 ; 2 |
1aec: 49 ee ldi r20, 0xE9 ; 233 |
1aee: 51 e0 ldi r21, 0x01 ; 1 |
1af0: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
} else { |
write_ascii_string_pgm(23, 2, VM_PAL); |
} |
// request version from board |
rxd_buffer_locked = 0; |
1af4: 10 92 29 01 sts 0x0129, r1 |
usart1_EnableTXD(); |
1af8: 0e 94 3e 03 call 0x67c ; 0x67c <usart1_EnableTXD> |
//usart1_request_mk_data(0, 'v', 0); |
write_ascii_string_pgm(2, 11, PSTR("FC VERSION: ........")); |
usart1_puts_pgm(PSTR(REQUEST_FC_VERSION)); |
#else |
//usart1_request_mk_data(1, 'v', 0); |
usart1_puts_pgm(PSTR(REQUEST_NC_VERSION)); |
1afc: 85 e0 ldi r24, 0x05 ; 5 |
1afe: 93 e0 ldi r25, 0x03 ; 3 |
1b00: 0e 94 47 03 call 0x68e ; 0x68e <usart1_puts_pgm> |
write_ascii_string_pgm(2, 11, PSTR("NC VERSION: ........")); |
1b04: 82 e0 ldi r24, 0x02 ; 2 |
1b06: 6b e0 ldi r22, 0x0B ; 11 |
1b08: 40 ef ldi r20, 0xF0 ; 240 |
1b0a: 52 e0 ldi r21, 0x02 ; 2 |
1b0c: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
#endif |
usart1_DisableTXD(); |
1b10: 0e 94 39 03 call 0x672 ; 0x672 <usart1_DisableTXD> |
// wait for response |
while (rxd_buffer_locked == 0) { |
1b14: 80 91 29 01 lds r24, 0x0129 |
1b18: 88 23 and r24, r24 |
1b1a: 29 f4 brne .+10 ; 0x1b26 <init_cosd+0x144> |
asm("nop"); |
1b1c: 00 00 nop |
usart1_puts_pgm(PSTR(REQUEST_NC_VERSION)); |
write_ascii_string_pgm(2, 11, PSTR("NC VERSION: ........")); |
#endif |
usart1_DisableTXD(); |
// wait for response |
while (rxd_buffer_locked == 0) { |
1b1e: 80 91 29 01 lds r24, 0x0129 |
1b22: 88 23 and r24, r24 |
1b24: d9 f3 breq .-10 ; 0x1b1c <init_cosd+0x13a> |
asm("nop"); |
} |
Decode64(); |
1b26: 0e 94 30 04 call 0x860 ; 0x860 <Decode64> |
str_VersionInfo VersionInfo; |
VersionInfo = *((str_VersionInfo*) pRxData); |
1b2a: de 01 movw r26, r28 |
1b2c: 11 96 adiw r26, 0x01 ; 1 |
1b2e: 80 91 2b 01 lds r24, 0x012B |
1b32: 90 91 2c 01 lds r25, 0x012C |
1b36: 9c 01 movw r18, r24 |
1b38: f9 01 movw r30, r18 |
1b3a: 8a e0 ldi r24, 0x0A ; 10 |
1b3c: 01 90 ld r0, Z+ |
1b3e: 0d 92 st X+, r0 |
1b40: 81 50 subi r24, 0x01 ; 1 |
1b42: e1 f7 brne .-8 ; 0x1b3c <init_cosd+0x15a> |
1b44: fa 80 ldd r15, Y+2 ; 0x02 |
1b46: 1d 81 ldd r17, Y+5 ; 0x05 |
write_ndigit_number_u(14, 11, VersionInfo.SWMajor, 3, 1); |
1b48: 49 81 ldd r20, Y+1 ; 0x01 |
1b4a: 8e e0 ldi r24, 0x0E ; 14 |
1b4c: 6b e0 ldi r22, 0x0B ; 11 |
1b4e: 50 e0 ldi r21, 0x00 ; 0 |
1b50: 23 e0 ldi r18, 0x03 ; 3 |
1b52: 30 e0 ldi r19, 0x00 ; 0 |
1b54: 01 e0 ldi r16, 0x01 ; 1 |
1b56: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_ndigit_number_u(18, 11, VersionInfo.SWMinor, 3, 1); |
1b5a: 82 e1 ldi r24, 0x12 ; 18 |
1b5c: 6b e0 ldi r22, 0x0B ; 11 |
1b5e: 4f 2d mov r20, r15 |
1b60: 50 e0 ldi r21, 0x00 ; 0 |
1b62: 23 e0 ldi r18, 0x03 ; 3 |
1b64: 30 e0 ldi r19, 0x00 ; 0 |
1b66: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_ascii_char(22 + 11*30, 'a' + VersionInfo.SWPatch); |
1b6a: 1f 59 subi r17, 0x9F ; 159 |
1b6c: 80 e6 ldi r24, 0x60 ; 96 |
1b6e: 91 e0 ldi r25, 0x01 ; 1 |
1b70: 61 2f mov r22, r17 |
1b72: 0e 94 10 05 call 0xa20 ; 0xa20 <write_ascii_char> |
mode += COSD_DISPLAYMODE; |
osd_fcmode = (int(*)(void)) pgm_read_word(&mode->dfun); |
// re-request data ever 100ms from FC; |
//usart1_request_mk_data(0, 'd', 100); |
#else |
COSD_DISPLAYMODE %= (sizeof(ncdisplaymodes) / sizeof(displaymode_t)); |
1b76: e0 91 1e 01 lds r30, 0x011E |
1b7a: e1 70 andi r30, 0x01 ; 1 |
1b7c: e0 93 1e 01 sts 0x011E, r30 |
mode = ncdisplaymodes; |
mode += COSD_DISPLAYMODE; |
1b80: f0 e0 ldi r31, 0x00 ; 0 |
1b82: ee 0f add r30, r30 |
1b84: ff 1f adc r31, r31 |
1b86: ee 0f add r30, r30 |
1b88: ff 1f adc r31, r31 |
1b8a: e0 5d subi r30, 0xD0 ; 208 |
1b8c: fe 4f sbci r31, 0xFE ; 254 |
1b8e: f0 93 9e 02 sts 0x029E, r31 |
1b92: e0 93 9d 02 sts 0x029D, r30 |
osd_ncmode = (int(*)(void)) pgm_read_word(&mode->dfun); |
1b96: 85 91 lpm r24, Z+ |
1b98: 94 91 lpm r25, Z+ |
1b9a: 90 93 06 01 sts 0x0106, r25 |
1b9e: 80 93 05 01 sts 0x0105, r24 |
1ba2: 20 e3 ldi r18, 0x30 ; 48 |
1ba4: 35 e7 ldi r19, 0x75 ; 117 |
1ba6: 40 e9 ldi r20, 0x90 ; 144 |
1ba8: 51 e0 ldi r21, 0x01 ; 1 |
1baa: ca 01 movw r24, r20 |
1bac: 01 97 sbiw r24, 0x01 ; 1 |
1bae: f1 f7 brne .-4 ; 0x1bac <init_cosd+0x1ca> |
{ |
// wait 1/10 ms |
_delay_loop_2(((F_CPU) / 4e3) / 10); |
__ticks --; |
1bb0: 21 50 subi r18, 0x01 ; 1 |
1bb2: 30 40 sbci r19, 0x00 ; 0 |
__ticks = 1; |
else if (__tmp > 65535) |
{ |
// __ticks = requested delay in 1/10 ms |
__ticks = (uint16_t) (__ms * 10.0); |
while(__ticks) |
1bb4: d1 f7 brne .-12 ; 0x1baa <init_cosd+0x1c8> |
// re-request OSD Data from NC every 100ms |
//usart1_request_mk_data(1, 'o', 100); |
#endif |
_delay_ms(3000); |
clear(); |
1bb6: 0e 94 75 08 call 0x10ea ; 0x10ea <clear> |
// update flags to paint display again because of clear |
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN; |
1bba: 80 91 1d 01 lds r24, 0x011D |
1bbe: 8d 7f andi r24, 0xFD ; 253 |
1bc0: 80 93 1d 01 sts 0x011D, r24 |
} |
1bc4: 2a 96 adiw r28, 0x0a ; 10 |
1bc6: 0f b6 in r0, 0x3f ; 63 |
1bc8: f8 94 cli |
1bca: de bf out 0x3e, r29 ; 62 |
1bcc: 0f be out 0x3f, r0 ; 63 |
1bce: cd bf out 0x3d, r28 ; 61 |
1bd0: cf 91 pop r28 |
1bd2: df 91 pop r29 |
1bd4: 1f 91 pop r17 |
1bd6: 0f 91 pop r16 |
1bd8: ff 90 pop r15 |
1bda: 08 95 ret |
//write_ascii_string_pgm(23, 2, vm[COSD_FLAGS & COSD_FLAG_NTSC]); |
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) { |
write_ascii_string_pgm(23, 2, VM_NTSC); |
} else { |
write_ascii_string_pgm(23, 2, VM_PAL); |
1bdc: 87 e1 ldi r24, 0x17 ; 23 |
1bde: 62 e0 ldi r22, 0x02 ; 2 |
1be0: 44 ee ldi r20, 0xE4 ; 228 |
1be2: 51 e0 ldi r21, 0x01 ; 1 |
1be4: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
1be8: 85 cf rjmp .-246 ; 0x1af4 <init_cosd+0x112> |
00001bea <SpiMasterInit>: |
#define INT0_LOW PORTD &= ~(1 << PD2); |
/** |
* init the SPI as master |
*/ |
void SpiMasterInit(void) { |
1bea: df 93 push r29 |
1bec: cf 93 push r28 |
1bee: 0f 92 push r0 |
1bf0: cd b7 in r28, 0x3d ; 61 |
1bf2: de b7 in r29, 0x3e ; 62 |
volatile char IOReg; |
// set PB4(/SS), PB5(MOSI), PB7(SCK) as output |
DDRB = (1 << PB4) | (1 << PB5) | (1 << PB7); |
1bf4: 80 eb ldi r24, 0xB0 ; 176 |
1bf6: 87 bb out 0x17, r24 ; 23 |
PORTB |= (1 << PB4); // pullup SS |
1bf8: c4 9a sbi 0x18, 4 ; 24 |
// enable SPI Interrupt and SPI in Master Mode with SCK = CK/128 |
SPCR = (1 << SPIE) | (1 << SPE) | (1 << MSTR) | (1 << SPR0) | (1 << SPR1); |
1bfa: 83 ed ldi r24, 0xD3 ; 211 |
1bfc: 8d b9 out 0x0d, r24 ; 13 |
IOReg = SPSR; // clear SPIF bit in SPSR |
1bfe: 8e b1 in r24, 0x0e ; 14 |
1c00: 89 83 std Y+1, r24 ; 0x01 |
IOReg = SPDR; |
1c02: 8f b1 in r24, 0x0f ; 15 |
1c04: 89 83 std Y+1, r24 ; 0x01 |
//sei(); // we do it later |
} |
1c06: 0f 90 pop r0 |
1c08: cf 91 pop r28 |
1c0a: df 91 pop r29 |
1c0c: 08 95 ret |
00001c0e <__vector_18>: |
/** |
* SPI interrupt handler |
*/ |
ISR(SPI_STC_vect) { |
1c0e: 1f 92 push r1 |
1c10: 0f 92 push r0 |
1c12: 0f b6 in r0, 0x3f ; 63 |
1c14: 0f 92 push r0 |
1c16: 11 24 eor r1, r1 |
1c18: 8f 93 push r24 |
1c1a: 9f 93 push r25 |
1c1c: ef 93 push r30 |
1c1e: ff 93 push r31 |
if (request_count == 0) { |
1c20: 80 91 36 01 lds r24, 0x0136 |
1c24: 88 23 and r24, r24 |
1c26: 11 f5 brne .+68 ; 0x1c6c <__vector_18+0x5e> |
SPI_buffer.buffer.chk = SPDR; // firs char received is check byte from last transfer |
1c28: 8f b1 in r24, 0x0f ; 15 |
1c2a: 80 93 95 01 sts 0x0195, r24 |
} else { |
SPI_buffer.buffer.c[request_count - 1] = SPDR; // safe received byte to buffer |
} |
request_count++; |
1c2e: 80 91 36 01 lds r24, 0x0136 |
1c32: 8f 5f subi r24, 0xFF ; 255 |
1c34: 80 93 36 01 sts 0x0136, r24 |
if (--icnt) { |
1c38: 80 91 34 01 lds r24, 0x0134 |
1c3c: 90 91 35 01 lds r25, 0x0135 |
1c40: 01 97 sbiw r24, 0x01 ; 1 |
1c42: 90 93 35 01 sts 0x0135, r25 |
1c46: 80 93 34 01 sts 0x0134, r24 |
1c4a: 80 91 34 01 lds r24, 0x0134 |
1c4e: 90 91 35 01 lds r25, 0x0135 |
1c52: 89 2b or r24, r25 |
1c54: 99 f4 brne .+38 ; 0x1c7c <__vector_18+0x6e> |
//SPDR = *iptr; // send next byte |
spi_ready = 1; // we _should_ send later because the slave needs more time |
} else { |
SPCR &= ~_BV(SPIE); // deactivate interrupt |
1c56: 6f 98 cbi 0x0d, 7 ; 13 |
INT0_HIGH // transfer is done, slave does not need to listen |
1c58: 92 9a sbi 0x12, 2 ; 18 |
} |
} |
1c5a: ff 91 pop r31 |
1c5c: ef 91 pop r30 |
1c5e: 9f 91 pop r25 |
1c60: 8f 91 pop r24 |
1c62: 0f 90 pop r0 |
1c64: 0f be out 0x3f, r0 ; 63 |
1c66: 0f 90 pop r0 |
1c68: 1f 90 pop r1 |
1c6a: 18 95 reti |
*/ |
ISR(SPI_STC_vect) { |
if (request_count == 0) { |
SPI_buffer.buffer.chk = SPDR; // firs char received is check byte from last transfer |
} else { |
SPI_buffer.buffer.c[request_count - 1] = SPDR; // safe received byte to buffer |
1c6c: e0 91 36 01 lds r30, 0x0136 |
1c70: f0 e0 ldi r31, 0x00 ; 0 |
1c72: 8f b1 in r24, 0x0f ; 15 |
1c74: e6 57 subi r30, 0x76 ; 118 |
1c76: fe 4f sbci r31, 0xFE ; 254 |
1c78: 80 83 st Z, r24 |
1c7a: d9 cf rjmp .-78 ; 0x1c2e <__vector_18+0x20> |
} |
request_count++; |
if (--icnt) { |
//SPDR = *iptr; // send next byte |
spi_ready = 1; // we _should_ send later because the slave needs more time |
1c7c: 81 e0 ldi r24, 0x01 ; 1 |
1c7e: 80 93 10 01 sts 0x0110, r24 |
1c82: eb cf rjmp .-42 ; 0x1c5a <__vector_18+0x4c> |
00001c84 <TransferIsBusy>: |
/** |
* check if SPI transfer is still busy |
*/ |
int TransferIsBusy(void) { |
return SPCR & _BV(SPIE); |
1c84: 2d b1 in r18, 0x0d ; 13 |
1c86: 30 e0 ldi r19, 0x00 ; 0 |
1c88: 20 78 andi r18, 0x80 ; 128 |
1c8a: 30 70 andi r19, 0x00 ; 0 |
} |
1c8c: c9 01 movw r24, r18 |
1c8e: 08 95 ret |
00001c90 <StartTransfer>: |
/** |
* start a new transfer with length <len> |
*/ |
void StartTransfer(uint16_t len) { |
INT0_LOW // /SS LOW ^= SS HIGH ^= slave should listen |
1c90: 92 98 cbi 0x12, 2 ; 18 |
// this is a new request |
request_count = 0; |
1c92: 10 92 36 01 sts 0x0136, r1 |
// set up pointer and length for interrupt handler |
icnt = len; |
1c96: 90 93 35 01 sts 0x0135, r25 |
1c9a: 80 93 34 01 sts 0x0134, r24 |
SPCR |= _BV(SPIE); // enable spi interrupt |
1c9e: 6f 9a sbi 0x0d, 7 ; 13 |
SPDR = 'A'; // start transfer by first command char |
1ca0: 81 e4 ldi r24, 0x41 ; 65 |
1ca2: 8f b9 out 0x0f, r24 ; 15 |
} |
1ca4: 08 95 ret |
00001ca6 <spi_send_next>: |
/** |
* send next command through spi |
*/ |
void spi_send_next() { |
SPDR = 'A' + request_count; |
1ca6: 80 91 36 01 lds r24, 0x0136 |
1caa: 8f 5b subi r24, 0xBF ; 191 |
1cac: 8f b9 out 0x0f, r24 ; 15 |
} |
1cae: 08 95 ret |
00001cb0 <s1_pressed>: |
/* ########################################################################## |
* debounce buttons |
* ##########################################################################*/ |
int s1_pressed() { |
if (S1_PRESSED) { |
1cb0: 9d 9b sbis 0x13, 5 ; 19 |
1cb2: 04 c0 rjmp .+8 ; 0x1cbc <s1_pressed+0xc> |
1cb4: 20 e0 ldi r18, 0x00 ; 0 |
1cb6: 30 e0 ldi r19, 0x00 ; 0 |
_delay_ms(25); |
if (S1_PRESSED) return 1; |
} |
return 0; |
} |
1cb8: c9 01 movw r24, r18 |
1cba: 08 95 ret |
/* ########################################################################## |
* debounce buttons |
* ##########################################################################*/ |
int s1_pressed() { |
if (S1_PRESSED) { |
1cbc: 2a ef ldi r18, 0xFA ; 250 |
1cbe: 30 e0 ldi r19, 0x00 ; 0 |
1cc0: 40 e9 ldi r20, 0x90 ; 144 |
1cc2: 51 e0 ldi r21, 0x01 ; 1 |
1cc4: ca 01 movw r24, r20 |
1cc6: 01 97 sbiw r24, 0x01 ; 1 |
1cc8: f1 f7 brne .-4 ; 0x1cc6 <s1_pressed+0x16> |
{ |
// wait 1/10 ms |
_delay_loop_2(((F_CPU) / 4e3) / 10); |
__ticks --; |
1cca: 21 50 subi r18, 0x01 ; 1 |
1ccc: 30 40 sbci r19, 0x00 ; 0 |
__ticks = 1; |
else if (__tmp > 65535) |
{ |
// __ticks = requested delay in 1/10 ms |
__ticks = (uint16_t) (__ms * 10.0); |
while(__ticks) |
1cce: d1 f7 brne .-12 ; 0x1cc4 <s1_pressed+0x14> |
_delay_ms(25); |
if (S1_PRESSED) return 1; |
1cd0: 83 b3 in r24, 0x13 ; 19 |
1cd2: 28 2f mov r18, r24 |
1cd4: 30 e0 ldi r19, 0x00 ; 0 |
1cd6: 36 95 lsr r19 |
1cd8: 27 95 ror r18 |
1cda: 32 95 swap r19 |
1cdc: 22 95 swap r18 |
1cde: 2f 70 andi r18, 0x0F ; 15 |
1ce0: 23 27 eor r18, r19 |
1ce2: 3f 70 andi r19, 0x0F ; 15 |
1ce4: 23 27 eor r18, r19 |
1ce6: 20 95 com r18 |
1ce8: 30 95 com r19 |
1cea: 21 70 andi r18, 0x01 ; 1 |
1cec: 30 70 andi r19, 0x00 ; 0 |
} |
return 0; |
} |
1cee: c9 01 movw r24, r18 |
1cf0: 08 95 ret |
00001cf2 <s2_pressed>: |
int s2_pressed() { |
if (S2_PRESSED) { |
1cf2: 9c 9b sbis 0x13, 4 ; 19 |
1cf4: 04 c0 rjmp .+8 ; 0x1cfe <s2_pressed+0xc> |
1cf6: 20 e0 ldi r18, 0x00 ; 0 |
1cf8: 30 e0 ldi r19, 0x00 ; 0 |
_delay_ms(25); |
if (S2_PRESSED) return 1; |
} |
return 0; |
} |
1cfa: c9 01 movw r24, r18 |
1cfc: 08 95 ret |
} |
return 0; |
} |
int s2_pressed() { |
if (S2_PRESSED) { |
1cfe: 2a ef ldi r18, 0xFA ; 250 |
1d00: 30 e0 ldi r19, 0x00 ; 0 |
1d02: 40 e9 ldi r20, 0x90 ; 144 |
1d04: 51 e0 ldi r21, 0x01 ; 1 |
1d06: ca 01 movw r24, r20 |
1d08: 01 97 sbiw r24, 0x01 ; 1 |
1d0a: f1 f7 brne .-4 ; 0x1d08 <s2_pressed+0x16> |
{ |
// wait 1/10 ms |
_delay_loop_2(((F_CPU) / 4e3) / 10); |
__ticks --; |
1d0c: 21 50 subi r18, 0x01 ; 1 |
1d0e: 30 40 sbci r19, 0x00 ; 0 |
__ticks = 1; |
else if (__tmp > 65535) |
{ |
// __ticks = requested delay in 1/10 ms |
__ticks = (uint16_t) (__ms * 10.0); |
while(__ticks) |
1d10: d1 f7 brne .-12 ; 0x1d06 <s2_pressed+0x14> |
_delay_ms(25); |
if (S2_PRESSED) return 1; |
1d12: 83 b3 in r24, 0x13 ; 19 |
1d14: 28 2f mov r18, r24 |
1d16: 30 e0 ldi r19, 0x00 ; 0 |
1d18: 32 95 swap r19 |
1d1a: 22 95 swap r18 |
1d1c: 2f 70 andi r18, 0x0F ; 15 |
1d1e: 23 27 eor r18, r19 |
1d20: 3f 70 andi r19, 0x0F ; 15 |
1d22: 23 27 eor r18, r19 |
1d24: 20 95 com r18 |
1d26: 30 95 com r19 |
1d28: 21 70 andi r18, 0x01 ; 1 |
1d2a: 30 70 andi r19, 0x00 ; 0 |
} |
return 0; |
} |
1d2c: c9 01 movw r24, r18 |
1d2e: 08 95 ret |
00001d30 <ppm_init>: |
/** |
* init ppm, including timer1 for measurement |
*/ |
void ppm_init() { |
PORTE |= (1 << PORTE0); // enable pullup on INT0 pin |
1d30: 38 9a sbi 0x07, 0 ; 7 |
GICR |= (1<<INT2); // External Interrupt Request 2 Enable |
1d32: 8b b7 in r24, 0x3b ; 59 |
1d34: 80 62 ori r24, 0x20 ; 32 |
1d36: 8b bf out 0x3b, r24 ; 59 |
EMCUCR |= (1<<ISC2); // a rising edge on INT2 activates the interrupt |
1d38: 86 b7 in r24, 0x36 ; 54 |
1d3a: 81 60 ori r24, 0x01 ; 1 |
1d3c: 86 bf out 0x36, r24 ; 54 |
TCCR1B |= (0<<CS12)|(1<<CS10)|(1<<CS11); // timer1 up with prescaler 64 |
1d3e: 8e b5 in r24, 0x2e ; 46 |
1d40: 83 60 ori r24, 0x03 ; 3 |
1d42: 8e bd out 0x2e, r24 ; 46 |
} |
1d44: 08 95 ret |
00001d46 <__vector_3>: |
/** |
* Handle INT2 interrupts that occur on changing edges of ppm signal |
*/ |
ISR(INT2_vect) { |
1d46: 1f 92 push r1 |
1d48: 0f 92 push r0 |
1d4a: 0f b6 in r0, 0x3f ; 63 |
1d4c: 0f 92 push r0 |
1d4e: 11 24 eor r1, r1 |
1d50: 2f 93 push r18 |
1d52: 3f 93 push r19 |
1d54: 4f 93 push r20 |
1d56: 5f 93 push r21 |
1d58: 6f 93 push r22 |
1d5a: 7f 93 push r23 |
1d5c: 8f 93 push r24 |
1d5e: 9f 93 push r25 |
1d60: af 93 push r26 |
1d62: bf 93 push r27 |
1d64: ef 93 push r30 |
1d66: ff 93 push r31 |
// since the pin might get bogus reads we wait for 123 signals |
static uint8_t valid_ppm_to_go = 123; |
if (EMCUCR & (1<<ISC2)) { // rising |
1d68: 06 b6 in r0, 0x36 ; 54 |
1d6a: 00 fc sbrc r0, 0 |
1d6c: 40 c0 rjmp .+128 ; 0x1dee <__vector_3+0xa8> |
old_timer1 = TCNT1; |
EMCUCR &= ~(1<<ISC2); // next one is falling |
} else { |
if (valid_ppm_to_go) { |
1d6e: 80 91 11 01 lds r24, 0x0111 |
1d72: 88 23 and r24, r24 |
1d74: b9 f0 breq .+46 ; 0x1da4 <__vector_3+0x5e> |
valid_ppm_to_go--; |
1d76: 81 50 subi r24, 0x01 ; 1 |
1d78: 80 93 11 01 sts 0x0111, r24 |
clear(); |
} |
COSD_FLAGS_CONFIG &= ~COSD_FLAG_HUD; |
} |
} |
EMCUCR |= (1<<ISC2); // next one is rising |
1d7c: 86 b7 in r24, 0x36 ; 54 |
1d7e: 81 60 ori r24, 0x01 ; 1 |
1d80: 86 bf out 0x36, r24 ; 54 |
} |
//write_ndigit_number_u(2, 2, ppm, 1000, 0); // debug |
//write_ndigit_number_u(2, 3, valid_ppm_to_go, 100, 0); // debug |
//write_ndigit_number_u(2, 4, COSD_FLAGS, 100, 0); // debug |
} |
1d82: ff 91 pop r31 |
1d84: ef 91 pop r30 |
1d86: bf 91 pop r27 |
1d88: af 91 pop r26 |
1d8a: 9f 91 pop r25 |
1d8c: 8f 91 pop r24 |
1d8e: 7f 91 pop r23 |
1d90: 6f 91 pop r22 |
1d92: 5f 91 pop r21 |
1d94: 4f 91 pop r20 |
1d96: 3f 91 pop r19 |
1d98: 2f 91 pop r18 |
1d9a: 0f 90 pop r0 |
1d9c: 0f be out 0x3f, r0 ; 63 |
1d9e: 0f 90 pop r0 |
1da0: 1f 90 pop r1 |
1da2: 18 95 reti |
EMCUCR &= ~(1<<ISC2); // next one is falling |
} else { |
if (valid_ppm_to_go) { |
valid_ppm_to_go--; |
} else { |
ppm = TCNT1 - old_timer1; |
1da4: 8c b5 in r24, 0x2c ; 44 |
1da6: 9d b5 in r25, 0x2d ; 45 |
1da8: 20 91 3f 01 lds r18, 0x013F |
1dac: 30 91 40 01 lds r19, 0x0140 |
1db0: 82 1b sub r24, r18 |
1db2: 93 0b sbc r25, r19 |
1db4: 90 93 42 01 sts 0x0142, r25 |
1db8: 80 93 41 01 sts 0x0141, r24 |
ppm -= 256; |
1dbc: 80 91 41 01 lds r24, 0x0141 |
1dc0: 90 91 42 01 lds r25, 0x0142 |
1dc4: 80 50 subi r24, 0x00 ; 0 |
1dc6: 91 40 sbci r25, 0x01 ; 1 |
1dc8: 90 93 42 01 sts 0x0142, r25 |
1dcc: 80 93 41 01 sts 0x0141, r24 |
if (ppm < 128) { // we want HUD |
1dd0: 80 91 41 01 lds r24, 0x0141 |
1dd4: 90 91 42 01 lds r25, 0x0142 |
1dd8: 80 38 cpi r24, 0x80 ; 128 |
1dda: 91 05 cpc r25, r1 |
1ddc: 90 f0 brcs .+36 ; 0x1e02 <__vector_3+0xbc> |
COSD_FLAGS_CONFIG |= COSD_FLAG_HUD; |
} else { // we do not want hud |
if (COSD_FLAGS_CONFIG & COSD_FLAG_HUD) { |
1dde: 80 91 1c 01 lds r24, 0x011C |
1de2: 80 fd sbrc r24, 0 |
1de4: 14 c0 rjmp .+40 ; 0x1e0e <__vector_3+0xc8> |
clear(); |
} |
COSD_FLAGS_CONFIG &= ~COSD_FLAG_HUD; |
1de6: 8e 7f andi r24, 0xFE ; 254 |
1de8: 80 93 1c 01 sts 0x011C, r24 |
1dec: c7 cf rjmp .-114 ; 0x1d7c <__vector_3+0x36> |
*/ |
ISR(INT2_vect) { |
// since the pin might get bogus reads we wait for 123 signals |
static uint8_t valid_ppm_to_go = 123; |
if (EMCUCR & (1<<ISC2)) { // rising |
old_timer1 = TCNT1; |
1dee: 8c b5 in r24, 0x2c ; 44 |
1df0: 9d b5 in r25, 0x2d ; 45 |
1df2: 90 93 40 01 sts 0x0140, r25 |
1df6: 80 93 3f 01 sts 0x013F, r24 |
EMCUCR &= ~(1<<ISC2); // next one is falling |
1dfa: 86 b7 in r24, 0x36 ; 54 |
1dfc: 8e 7f andi r24, 0xFE ; 254 |
1dfe: 86 bf out 0x36, r24 ; 54 |
1e00: c0 cf rjmp .-128 ; 0x1d82 <__vector_3+0x3c> |
valid_ppm_to_go--; |
} else { |
ppm = TCNT1 - old_timer1; |
ppm -= 256; |
if (ppm < 128) { // we want HUD |
COSD_FLAGS_CONFIG |= COSD_FLAG_HUD; |
1e02: 80 91 1c 01 lds r24, 0x011C |
1e06: 81 60 ori r24, 0x01 ; 1 |
1e08: 80 93 1c 01 sts 0x011C, r24 |
1e0c: b7 cf rjmp .-146 ; 0x1d7c <__vector_3+0x36> |
} else { // we do not want hud |
if (COSD_FLAGS_CONFIG & COSD_FLAG_HUD) { |
clear(); |
1e0e: 0e 94 75 08 call 0x10ea ; 0x10ea <clear> |
1e12: 80 91 1c 01 lds r24, 0x011C |
1e16: e7 cf rjmp .-50 ; 0x1de6 <__vector_3+0xa0> |
00001e18 <osd_ncmode_default>: |
#include "osd_helpers.h" |
#include "osd_ncmode_default.h" |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
int osd_ncmode_default() { |
1e18: ef 92 push r14 |
1e1a: ff 92 push r15 |
1e1c: 0f 93 push r16 |
1e1e: 1f 93 push r17 |
1e20: cf 93 push r28 |
1e22: df 93 push r29 |
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) { |
1e24: 80 91 1b 01 lds r24, 0x011B |
1e28: 80 ff sbrs r24, 0 |
1e2a: e5 c1 rjmp .+970 ; 0x21f6 <osd_ncmode_default+0x3de> |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
1e2c: 80 91 1d 01 lds r24, 0x011D |
1e30: 81 ff sbrs r24, 1 |
1e32: f4 c2 rjmp .+1512 ; 0x241c <osd_ncmode_default+0x604> |
write_char_xy(27, bottom_line, 0xC9); // sat2 |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
} |
// first line |
write_ndigit_number_u(2, top_line, (uint16_t) (((uint32_t) naviData.GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
1e34: 20 91 d4 01 lds r18, 0x01D4 |
1e38: 30 91 d5 01 lds r19, 0x01D5 |
1e3c: 40 e0 ldi r20, 0x00 ; 0 |
1e3e: 50 e0 ldi r21, 0x00 ; 0 |
1e40: ca 01 movw r24, r20 |
1e42: b9 01 movw r22, r18 |
1e44: 66 0f add r22, r22 |
1e46: 77 1f adc r23, r23 |
1e48: 88 1f adc r24, r24 |
1e4a: 99 1f adc r25, r25 |
1e4c: 66 0f add r22, r22 |
1e4e: 77 1f adc r23, r23 |
1e50: 88 1f adc r24, r24 |
1e52: 99 1f adc r25, r25 |
1e54: 66 0f add r22, r22 |
1e56: 77 1f adc r23, r23 |
1e58: 88 1f adc r24, r24 |
1e5a: 99 1f adc r25, r25 |
1e5c: 62 0f add r22, r18 |
1e5e: 73 1f adc r23, r19 |
1e60: 84 1f adc r24, r20 |
1e62: 95 1f adc r25, r21 |
1e64: 2a ef ldi r18, 0xFA ; 250 |
1e66: 30 e0 ldi r19, 0x00 ; 0 |
1e68: 40 e0 ldi r20, 0x00 ; 0 |
1e6a: 50 e0 ldi r21, 0x00 ; 0 |
1e6c: 0e 94 8f 1c call 0x391e ; 0x391e <__udivmodsi4> |
1e70: 82 e0 ldi r24, 0x02 ; 2 |
1e72: 60 91 02 01 lds r22, 0x0102 |
1e76: a9 01 movw r20, r18 |
1e78: 23 e0 ldi r18, 0x03 ; 3 |
1e7a: 30 e0 ldi r19, 0x00 ; 0 |
1e7c: 00 e0 ldi r16, 0x00 ; 0 |
1e7e: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_ndigit_number_u(7, top_line, naviData.RC_Quality, 3, 0); |
1e82: 40 91 dc 01 lds r20, 0x01DC |
1e86: 87 e0 ldi r24, 0x07 ; 7 |
1e88: 60 91 02 01 lds r22, 0x0102 |
1e8c: 50 e0 ldi r21, 0x00 ; 0 |
1e8e: 23 e0 ldi r18, 0x03 ; 3 |
1e90: 30 e0 ldi r19, 0x00 ; 0 |
1e92: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
if (naviData.RC_Quality <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
1e96: 80 91 dc 01 lds r24, 0x01DC |
1e9a: 85 36 cpi r24, 0x65 ; 101 |
1e9c: 08 f4 brcc .+2 ; 0x1ea0 <osd_ncmode_default+0x88> |
1e9e: 69 c2 rjmp .+1234 ; 0x2372 <osd_ncmode_default+0x55a> |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (naviData.RC_Quality > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
1ea0: 80 91 dc 01 lds r24, 0x01DC |
1ea4: 85 36 cpi r24, 0x65 ; 101 |
1ea6: 08 f0 brcs .+2 ; 0x1eaa <osd_ncmode_default+0x92> |
1ea8: a9 c2 rjmp .+1362 ; 0x23fc <osd_ncmode_default+0x5e4> |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, 0); |
} |
if (naviData.NCFlags & NC_FLAG_NOSERIALLINK) { |
1eaa: 80 91 de 01 lds r24, 0x01DE |
1eae: 84 ff sbrs r24, 4 |
1eb0: 73 c2 rjmp .+1254 ; 0x2398 <osd_ncmode_default+0x580> |
write_char_xy(11, top_line, 0); // clear |
1eb2: 8b e0 ldi r24, 0x0B ; 11 |
1eb4: 60 91 02 01 lds r22, 0x0102 |
1eb8: 40 e0 ldi r20, 0x00 ; 0 |
1eba: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
} else { |
write_char_xy(11, top_line, 0xC6); // PC icon |
} |
write_ndigit_number_u(13, top_line, naviData.CompassHeading, 3, 0); |
1ebe: 40 91 d8 01 lds r20, 0x01D8 |
1ec2: 50 91 d9 01 lds r21, 0x01D9 |
1ec6: 8d e0 ldi r24, 0x0D ; 13 |
1ec8: 60 91 02 01 lds r22, 0x0102 |
1ecc: 23 e0 ldi r18, 0x03 ; 3 |
1ece: 30 e0 ldi r19, 0x00 ; 0 |
1ed0: 00 e0 ldi r16, 0x00 ; 0 |
1ed2: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_ascii_string_pgm(17, top_line, (const char *) (pgm_read_word ( &(directions[heading_conv(naviData.CompassHeading)])))); |
1ed6: 10 91 02 01 lds r17, 0x0102 |
1eda: 80 91 d8 01 lds r24, 0x01D8 |
1ede: 90 91 d9 01 lds r25, 0x01D9 |
1ee2: 0e 94 9d 08 call 0x113a ; 0x113a <heading_conv> |
1ee6: e8 2f mov r30, r24 |
1ee8: f0 e0 ldi r31, 0x00 ; 0 |
1eea: ee 0f add r30, r30 |
1eec: ff 1f adc r31, r31 |
1eee: e8 5f subi r30, 0xF8 ; 248 |
1ef0: fe 4f sbci r31, 0xFE ; 254 |
1ef2: 45 91 lpm r20, Z+ |
1ef4: 54 91 lpm r21, Z+ |
1ef6: 81 e1 ldi r24, 0x11 ; 17 |
1ef8: 61 2f mov r22, r17 |
1efa: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
draw_variometer(21, top_line, naviData.Variometer); |
1efe: 40 91 cf 01 lds r20, 0x01CF |
1f02: 50 91 d0 01 lds r21, 0x01D0 |
1f06: 85 e1 ldi r24, 0x15 ; 21 |
1f08: 60 91 02 01 lds r22, 0x0102 |
1f0c: 0e 94 c1 09 call 0x1382 ; 0x1382 <draw_variometer> |
if (COSD_FLAGS_CONFIG & COSD_FLAG_GPSHEIGHT) { |
1f10: 80 91 1c 01 lds r24, 0x011C |
1f14: 81 ff sbrs r24, 1 |
1f16: 52 c0 rjmp .+164 ; 0x1fbc <osd_ncmode_default+0x1a4> |
if (naviData.CurrentPosition.Altitude / 1000 - altimeter_offset > 10 || naviData.CurrentPosition.Altitude / 1000 - altimeter_offset < -10) { |
1f18: 60 91 a3 01 lds r22, 0x01A3 |
1f1c: 70 91 a4 01 lds r23, 0x01A4 |
1f20: 80 91 a5 01 lds r24, 0x01A5 |
1f24: 90 91 a6 01 lds r25, 0x01A6 |
1f28: c0 91 98 01 lds r28, 0x0198 |
1f2c: d0 91 99 01 lds r29, 0x0199 |
1f30: 7e 01 movw r14, r28 |
1f32: 00 27 eor r16, r16 |
1f34: f7 fc sbrc r15, 7 |
1f36: 00 95 com r16 |
1f38: 10 2f mov r17, r16 |
1f3a: 28 ee ldi r18, 0xE8 ; 232 |
1f3c: 33 e0 ldi r19, 0x03 ; 3 |
1f3e: 40 e0 ldi r20, 0x00 ; 0 |
1f40: 50 e0 ldi r21, 0x00 ; 0 |
1f42: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
1f46: 2e 19 sub r18, r14 |
1f48: 3f 09 sbc r19, r15 |
1f4a: 40 0b sbc r20, r16 |
1f4c: 51 0b sbc r21, r17 |
1f4e: 2b 30 cpi r18, 0x0B ; 11 |
1f50: 31 05 cpc r19, r1 |
1f52: 41 05 cpc r20, r1 |
1f54: 51 05 cpc r21, r1 |
1f56: c4 f4 brge .+48 ; 0x1f88 <osd_ncmode_default+0x170> |
1f58: 60 91 a3 01 lds r22, 0x01A3 |
1f5c: 70 91 a4 01 lds r23, 0x01A4 |
1f60: 80 91 a5 01 lds r24, 0x01A5 |
1f64: 90 91 a6 01 lds r25, 0x01A6 |
1f68: 28 ee ldi r18, 0xE8 ; 232 |
1f6a: 33 e0 ldi r19, 0x03 ; 3 |
1f6c: 40 e0 ldi r20, 0x00 ; 0 |
1f6e: 50 e0 ldi r21, 0x00 ; 0 |
1f70: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
1f74: 2e 19 sub r18, r14 |
1f76: 3f 09 sbc r19, r15 |
1f78: 40 0b sbc r20, r16 |
1f7a: 51 0b sbc r21, r17 |
1f7c: 26 5f subi r18, 0xF6 ; 246 |
1f7e: 3f 4f sbci r19, 0xFF ; 255 |
1f80: 4f 4f sbci r20, 0xFF ; 255 |
1f82: 5f 4f sbci r21, 0xFF ; 255 |
1f84: 0c f0 brlt .+2 ; 0x1f88 <osd_ncmode_default+0x170> |
1f86: 83 c4 rjmp .+2310 ; 0x288e <osd_ncmode_default+0xa76> |
// above 10m only write full meters |
write_ndigit_number_s(23, top_line, (int16_t) (naviData.CurrentPosition.Altitude / 1000 - altimeter_offset), 4, 0); // GPS |
1f88: 60 91 a3 01 lds r22, 0x01A3 |
1f8c: 70 91 a4 01 lds r23, 0x01A4 |
1f90: 80 91 a5 01 lds r24, 0x01A5 |
1f94: 90 91 a6 01 lds r25, 0x01A6 |
1f98: 28 ee ldi r18, 0xE8 ; 232 |
1f9a: 33 e0 ldi r19, 0x03 ; 3 |
1f9c: 40 e0 ldi r20, 0x00 ; 0 |
1f9e: 50 e0 ldi r21, 0x00 ; 0 |
1fa0: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
1fa4: 2c 1b sub r18, r28 |
1fa6: 3d 0b sbc r19, r29 |
1fa8: 87 e1 ldi r24, 0x17 ; 23 |
1faa: 60 91 02 01 lds r22, 0x0102 |
1fae: a9 01 movw r20, r18 |
1fb0: 24 e0 ldi r18, 0x04 ; 4 |
1fb2: 30 e0 ldi r19, 0x00 ; 0 |
1fb4: 00 e0 ldi r16, 0x00 ; 0 |
1fb6: 0e 94 19 07 call 0xe32 ; 0xe32 <write_ndigit_number_s> |
1fba: 20 c0 rjmp .+64 ; 0x1ffc <osd_ncmode_default+0x1e4> |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(23, top_line, (int16_t) (naviData.CurrentPosition.Altitude / 100 - altimeter_offset * 10), 3, 0); // GPS |
} |
} else { |
//note:lephisto:according to several sources it's /30 |
if (naviData.Altimeter > 300 || naviData.Altimeter < -300) { |
1fbc: 80 91 cd 01 lds r24, 0x01CD |
1fc0: 90 91 ce 01 lds r25, 0x01CE |
1fc4: 8d 52 subi r24, 0x2D ; 45 |
1fc6: 91 40 sbci r25, 0x01 ; 1 |
1fc8: 44 f4 brge .+16 ; 0x1fda <osd_ncmode_default+0x1c2> |
1fca: 80 91 cd 01 lds r24, 0x01CD |
1fce: 90 91 ce 01 lds r25, 0x01CE |
1fd2: 84 5d subi r24, 0xD4 ; 212 |
1fd4: 9e 4f sbci r25, 0xFE ; 254 |
1fd6: 0c f0 brlt .+2 ; 0x1fda <osd_ncmode_default+0x1c2> |
1fd8: 82 c4 rjmp .+2308 ; 0x28de <osd_ncmode_default+0xac6> |
// above 10m only write full meters |
write_ndigit_number_s(23, top_line, naviData.Altimeter / 30, 4, 0); // BARO |
1fda: 80 91 cd 01 lds r24, 0x01CD |
1fde: 90 91 ce 01 lds r25, 0x01CE |
1fe2: 6e e1 ldi r22, 0x1E ; 30 |
1fe4: 70 e0 ldi r23, 0x00 ; 0 |
1fe6: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
1fea: ab 01 movw r20, r22 |
1fec: 87 e1 ldi r24, 0x17 ; 23 |
1fee: 60 91 02 01 lds r22, 0x0102 |
1ff2: 24 e0 ldi r18, 0x04 ; 4 |
1ff4: 30 e0 ldi r19, 0x00 ; 0 |
1ff6: 00 e0 ldi r16, 0x00 ; 0 |
1ff8: 0e 94 19 07 call 0xe32 ; 0xe32 <write_ndigit_number_s> |
} |
} |
// seccond line |
draw_compass(11, top_line + 1, naviData.CompassHeading); |
1ffc: 40 91 d8 01 lds r20, 0x01D8 |
2000: 50 91 d9 01 lds r21, 0x01D9 |
2004: 60 91 02 01 lds r22, 0x0102 |
2008: 6f 5f subi r22, 0xFF ; 255 |
200a: 8b e0 ldi r24, 0x0B ; 11 |
200c: 0e 94 55 0a call 0x14aa ; 0x14aa <draw_compass> |
// TODO: verify correctness |
uint16_t heading_home = (naviData.HomePositionDeviation.Bearing + 360 - naviData.CompassHeading) % 360; |
2010: 80 91 c8 01 lds r24, 0x01C8 |
2014: 90 91 c9 01 lds r25, 0x01C9 |
2018: 20 91 d8 01 lds r18, 0x01D8 |
201c: 30 91 d9 01 lds r19, 0x01D9 |
//write_char_xy(21, top_line + 1, arrowdir[heading_conv(heading_home)]); |
// finer resolution, 0xa0 is first character and we add the index 0 <= index < 16 |
write_char_xy(21, top_line + 1, 0xa0 + heading_fine_conv(heading_home)); |
2020: 10 91 02 01 lds r17, 0x0102 |
2024: 1f 5f subi r17, 0xFF ; 255 |
2026: 88 59 subi r24, 0x98 ; 152 |
2028: 9e 4f sbci r25, 0xFE ; 254 |
202a: 82 1b sub r24, r18 |
202c: 93 0b sbc r25, r19 |
202e: 68 e6 ldi r22, 0x68 ; 104 |
2030: 71 e0 ldi r23, 0x01 ; 1 |
2032: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
2036: 0e 94 cf 08 call 0x119e ; 0x119e <heading_fine_conv> |
203a: 48 2f mov r20, r24 |
203c: 40 56 subi r20, 0x60 ; 96 |
203e: 85 e1 ldi r24, 0x15 ; 21 |
2040: 61 2f mov r22, r17 |
2042: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_ndigit_number_u(24, top_line + 1, naviData.HomePositionDeviation.Distance / 10, 3, 0); |
2046: 80 91 c6 01 lds r24, 0x01C6 |
204a: 90 91 c7 01 lds r25, 0x01C7 |
204e: 20 91 02 01 lds r18, 0x0102 |
2052: 2f 5f subi r18, 0xFF ; 255 |
2054: 6a e0 ldi r22, 0x0A ; 10 |
2056: 70 e0 ldi r23, 0x00 ; 0 |
2058: 0e 94 68 1c call 0x38d0 ; 0x38d0 <__udivmodhi4> |
205c: ab 01 movw r20, r22 |
205e: 88 e1 ldi r24, 0x18 ; 24 |
2060: 62 2f mov r22, r18 |
2062: 23 e0 ldi r18, 0x03 ; 3 |
2064: 30 e0 ldi r19, 0x00 ; 0 |
2066: 00 e0 ldi r16, 0x00 ; 0 |
2068: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
// center |
if (naviData.FCFlags & FLAG_MOTOR_RUN) { // should be engines running |
206c: 80 91 dd 01 lds r24, 0x01DD |
2070: 80 ff sbrs r24, 0 |
2072: 84 c2 rjmp .+1288 ; 0x257c <osd_ncmode_default+0x764> |
if (!(old_MKFlags & FLAG_MOTOR_RUN)) { // motors just started, clear middle |
2074: 80 91 27 01 lds r24, 0x0127 |
2078: 80 ff sbrs r24, 0 |
207a: 91 c3 rjmp .+1826 ; 0x279e <osd_ncmode_default+0x986> |
207c: 10 91 1b 01 lds r17, 0x011B |
2080: 00 91 1d 01 lds r16, 0x011D |
wasted_ampere_offset = naviData.UsedCapacity; |
} |
// update flags to paint display again if needed |
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN; |
} |
if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { |
2084: 11 ff sbrs r17, 1 |
2086: 18 c0 rjmp .+48 ; 0x20b8 <osd_ncmode_default+0x2a0> |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
2088: 00 ff sbrs r16, 0 |
208a: f7 c3 rjmp .+2030 ; 0x287a <osd_ncmode_default+0xa62> |
draw_artificial_horizon(top_line + 2, bottom_line - 2, naviData.AngleNick, naviData.AngleRoll); |
208c: 40 91 da 01 lds r20, 0x01DA |
2090: 20 91 db 01 lds r18, 0x01DB |
2094: 80 91 02 01 lds r24, 0x0102 |
2098: 60 91 03 01 lds r22, 0x0103 |
209c: 62 50 subi r22, 0x02 ; 2 |
} else { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
209e: 55 27 eor r21, r21 |
20a0: 47 fd sbrc r20, 7 |
20a2: 50 95 com r21 |
20a4: 33 27 eor r19, r19 |
20a6: 27 fd sbrc r18, 7 |
20a8: 30 95 com r19 |
20aa: 8e 5f subi r24, 0xFE ; 254 |
20ac: 0e 94 e6 08 call 0x11cc ; 0x11cc <draw_artificial_horizon> |
20b0: 10 91 1b 01 lds r17, 0x011B |
20b4: 00 91 1d 01 lds r16, 0x011D |
} |
} |
// motors are on, assume we were/are flying |
COSD_FLAGS_RUNTIME |= COSD_WASFLYING; |
20b8: 04 60 ori r16, 0x04 ; 4 |
20ba: 00 93 1d 01 sts 0x011D, r16 |
} else { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
} |
} |
} |
if (COSD_FLAGS_MODES & COSD_FLAG_BIGVARIO) { |
20be: 12 fd sbrc r17, 2 |
20c0: 7f c2 rjmp .+1278 ; 0x25c0 <osd_ncmode_default+0x7a8> |
draw_big_variometer(27, 8, naviData.Variometer); |
} |
// pre-bottom line |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
20c2: 80 91 1d 01 lds r24, 0x011D |
20c6: 80 ff sbrs r24, 0 |
20c8: 56 c2 rjmp .+1196 ; 0x2576 <osd_ncmode_default+0x75e> |
20ca: 16 ff sbrs r17, 6 |
20cc: 9a c3 rjmp .+1844 ; 0x2802 <osd_ncmode_default+0x9ea> |
write_ndigit_number_s(10, bottom_line - 1, ampere_wasted / 10, 4, 0); |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
write_ndigit_number_u_10th(17, bottom_line - 1, s_volt, 3, 0); |
} |
} else if (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT) { |
write_ndigit_number_u_10th(3, bottom_line - 1, naviData.Current, 3, 0); |
20ce: 40 91 e8 01 lds r20, 0x01E8 |
20d2: 50 91 e9 01 lds r21, 0x01E9 |
20d6: 60 91 03 01 lds r22, 0x0103 |
20da: 61 50 subi r22, 0x01 ; 1 |
20dc: 83 e0 ldi r24, 0x03 ; 3 |
20de: 23 e0 ldi r18, 0x03 ; 3 |
20e0: 30 e0 ldi r19, 0x00 ; 0 |
20e2: 00 e0 ldi r16, 0x00 ; 0 |
20e4: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
write_ndigit_number_u(10, bottom_line - 1, naviData.UsedCapacity, 4, 0); |
20e8: 40 91 ea 01 lds r20, 0x01EA |
20ec: 50 91 eb 01 lds r21, 0x01EB |
20f0: 60 91 03 01 lds r22, 0x0103 |
20f4: 61 50 subi r22, 0x01 ; 1 |
20f6: 8a e0 ldi r24, 0x0A ; 10 |
20f8: 24 e0 ldi r18, 0x04 ; 4 |
20fa: 30 e0 ldi r19, 0x00 ; 0 |
20fc: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
} |
//DEBUGwrite_ndigit_number_u(1, 5, COSD_FLAGS_MODES, 3, 0); |
// bottom line |
draw_battery(2, bottom_line, min_voltage, naviData.UBat, max_voltage); |
2100: 20 91 d3 01 lds r18, 0x01D3 |
2104: 82 e0 ldi r24, 0x02 ; 2 |
2106: 60 91 03 01 lds r22, 0x0103 |
210a: 40 91 19 01 lds r20, 0x0119 |
210e: 00 91 1a 01 lds r16, 0x011A |
2112: 0e 94 17 0a call 0x142e ; 0x142e <draw_battery> |
write_ndigit_number_u_10th(3, bottom_line, naviData.UBat, 3, 0); |
2116: 40 91 d3 01 lds r20, 0x01D3 |
211a: 83 e0 ldi r24, 0x03 ; 3 |
211c: 60 91 03 01 lds r22, 0x0103 |
2120: 50 e0 ldi r21, 0x00 ; 0 |
2122: 23 e0 ldi r18, 0x03 ; 3 |
2124: 30 e0 ldi r19, 0x00 ; 0 |
2126: 00 e0 ldi r16, 0x00 ; 0 |
2128: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
if (naviData.UBat <= min_voltage && last_UBat > min_voltage) { |
212c: 80 91 d3 01 lds r24, 0x01D3 |
2130: 90 91 19 01 lds r25, 0x0119 |
2134: 98 17 cp r25, r24 |
2136: 08 f4 brcc .+2 ; 0x213a <osd_ncmode_default+0x322> |
2138: ef c1 rjmp .+990 ; 0x2518 <osd_ncmode_default+0x700> |
213a: 80 91 00 01 lds r24, 0x0100 |
213e: 98 17 cp r25, r24 |
2140: 08 f0 brcs .+2 ; 0x2144 <osd_ncmode_default+0x32c> |
2142: ea c1 rjmp .+980 ; 0x2518 <osd_ncmode_default+0x700> |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
2144: 82 e0 ldi r24, 0x02 ; 2 |
2146: 60 91 03 01 lds r22, 0x0103 |
214a: 4f e4 ldi r20, 0x4F ; 79 |
214c: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2150: 83 e0 ldi r24, 0x03 ; 3 |
2152: 60 91 03 01 lds r22, 0x0103 |
2156: 4f e4 ldi r20, 0x4F ; 79 |
2158: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
215c: 84 e0 ldi r24, 0x04 ; 4 |
215e: 60 91 03 01 lds r22, 0x0103 |
2162: 4f e4 ldi r20, 0x4F ; 79 |
2164: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2168: 85 e0 ldi r24, 0x05 ; 5 |
216a: 60 91 03 01 lds r22, 0x0103 |
216e: 4f e4 ldi r20, 0x4F ; 79 |
2170: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2174: 86 e0 ldi r24, 0x06 ; 6 |
2176: 60 91 03 01 lds r22, 0x0103 |
217a: 4f e4 ldi r20, 0x4F ; 79 |
217c: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2180: 87 e0 ldi r24, 0x07 ; 7 |
2182: 60 91 03 01 lds r22, 0x0103 |
2186: 4f e4 ldi r20, 0x4F ; 79 |
2188: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
} else if (naviData.UBat > min_voltage && last_UBat < min_voltage) { |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, 0); |
} |
write_time(8, bottom_line, uptime); |
218c: 40 91 12 01 lds r20, 0x0112 |
2190: 50 91 13 01 lds r21, 0x0113 |
2194: 88 e0 ldi r24, 0x08 ; 8 |
2196: 60 91 03 01 lds r22, 0x0103 |
219a: 0e 94 3a 08 call 0x1074 ; 0x1074 <write_time> |
write_time(15, bottom_line, naviData.FlyingTime); |
219e: 40 91 d1 01 lds r20, 0x01D1 |
21a2: 50 91 d2 01 lds r21, 0x01D2 |
21a6: 8f e0 ldi r24, 0x0F ; 15 |
21a8: 60 91 03 01 lds r22, 0x0103 |
21ac: 0e 94 3a 08 call 0x1074 ; 0x1074 <write_time> |
write_ndigit_number_u(24, bottom_line, naviData.SatsInUse, 2, 0); |
21b0: 40 91 cc 01 lds r20, 0x01CC |
21b4: 88 e1 ldi r24, 0x18 ; 24 |
21b6: 60 91 03 01 lds r22, 0x0103 |
21ba: 50 e0 ldi r21, 0x00 ; 0 |
21bc: 22 e0 ldi r18, 0x02 ; 2 |
21be: 30 e0 ldi r19, 0x00 ; 0 |
21c0: 00 e0 ldi r16, 0x00 ; 0 |
21c2: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
if (naviData.NCFlags & NC_FLAG_MANUAL_CONTROL) { |
21c6: 80 91 de 01 lds r24, 0x01DE |
21ca: 86 ff sbrs r24, 6 |
21cc: 04 c2 rjmp .+1032 ; 0x25d6 <osd_ncmode_default+0x7be> |
write_char_xy(23, bottom_line, 0xB3); // rc transmitter |
21ce: 87 e1 ldi r24, 0x17 ; 23 |
21d0: 60 91 03 01 lds r22, 0x0103 |
21d4: 43 eb ldi r20, 0xB3 ; 179 |
21d6: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
} else { |
write_char_xy(23, bottom_line, 0); // clear |
} |
if (naviData.NCFlags & NC_FLAG_CH) { |
21da: 80 91 de 01 lds r24, 0x01DE |
21de: 82 fd sbrc r24, 2 |
21e0: 04 c2 rjmp .+1032 ; 0x25ea <osd_ncmode_default+0x7d2> |
write_char_xy(27, bottom_line, 231); // gps ch |
} else if (naviData.NCFlags & NC_FLAG_PH) { |
21e2: 80 91 de 01 lds r24, 0x01DE |
21e6: 81 ff sbrs r24, 1 |
21e8: 07 c2 rjmp .+1038 ; 0x25f8 <osd_ncmode_default+0x7e0> |
write_char_xy(27, bottom_line, 230); // gps ph |
21ea: 8b e1 ldi r24, 0x1B ; 27 |
21ec: 60 91 03 01 lds r22, 0x0103 |
21f0: 46 ee ldi r20, 0xE6 ; 230 |
21f2: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
//write_number_s(8, 5, RxDataLen); |
//write_number_s(16, 5, setsReceived++); |
// remember statistics (only when engines running) |
if (naviData.FCFlags & FLAG_MOTOR_RUN) { |
21f6: 80 91 dd 01 lds r24, 0x01DD |
21fa: 80 ff sbrs r24, 0 |
21fc: 86 c0 rjmp .+268 ; 0x230a <osd_ncmode_default+0x4f2> |
if (COSD_FLAGS_CONFIG & COSD_FLAG_GPSHEIGHT) { |
21fe: 80 91 1c 01 lds r24, 0x011C |
2202: 81 ff sbrs r24, 1 |
2204: 99 c0 rjmp .+306 ; 0x2338 <osd_ncmode_default+0x520> |
if (naviData.CurrentPosition.Altitude / 1000 - altimeter_offset > max_Altimeter) max_Altimeter = naviData.CurrentPosition.Altitude / 1000; |
2206: 60 91 a3 01 lds r22, 0x01A3 |
220a: 70 91 a4 01 lds r23, 0x01A4 |
220e: 80 91 a5 01 lds r24, 0x01A5 |
2212: 90 91 a6 01 lds r25, 0x01A6 |
2216: 28 ee ldi r18, 0xE8 ; 232 |
2218: 33 e0 ldi r19, 0x03 ; 3 |
221a: 40 e0 ldi r20, 0x00 ; 0 |
221c: 50 e0 ldi r21, 0x00 ; 0 |
221e: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
2222: 80 91 98 01 lds r24, 0x0198 |
2226: 90 91 99 01 lds r25, 0x0199 |
222a: aa 27 eor r26, r26 |
222c: 97 fd sbrc r25, 7 |
222e: a0 95 com r26 |
2230: ba 2f mov r27, r26 |
2232: 28 1b sub r18, r24 |
2234: 39 0b sbc r19, r25 |
2236: 4a 0b sbc r20, r26 |
2238: 5b 0b sbc r21, r27 |
223a: 80 91 1f 01 lds r24, 0x011F |
223e: 90 91 20 01 lds r25, 0x0120 |
2242: aa 27 eor r26, r26 |
2244: 97 fd sbrc r25, 7 |
2246: a0 95 com r26 |
2248: ba 2f mov r27, r26 |
224a: 82 17 cp r24, r18 |
224c: 93 07 cpc r25, r19 |
224e: a4 07 cpc r26, r20 |
2250: b5 07 cpc r27, r21 |
2252: 0c f4 brge .+2 ; 0x2256 <osd_ncmode_default+0x43e> |
2254: 4e c1 rjmp .+668 ; 0x24f2 <osd_ncmode_default+0x6da> |
} else { |
if (naviData.Altimeter / 30 > max_Altimeter) max_Altimeter = naviData.Altimeter / 30; |
} |
if (naviData.GroundSpeed > max_GroundSpeed) max_GroundSpeed = naviData.GroundSpeed; |
2256: 20 91 d4 01 lds r18, 0x01D4 |
225a: 30 91 d5 01 lds r19, 0x01D5 |
225e: 80 91 21 01 lds r24, 0x0121 |
2262: 90 91 22 01 lds r25, 0x0122 |
2266: 82 17 cp r24, r18 |
2268: 93 07 cpc r25, r19 |
226a: 40 f4 brcc .+16 ; 0x227c <osd_ncmode_default+0x464> |
226c: 80 91 d4 01 lds r24, 0x01D4 |
2270: 90 91 d5 01 lds r25, 0x01D5 |
2274: 90 93 22 01 sts 0x0122, r25 |
2278: 80 93 21 01 sts 0x0121, r24 |
if (naviData.HomePositionDeviation.Distance > max_Distance) { |
227c: 20 91 c6 01 lds r18, 0x01C6 |
2280: 30 91 c7 01 lds r19, 0x01C7 |
2284: 80 91 23 01 lds r24, 0x0123 |
2288: 90 91 24 01 lds r25, 0x0124 |
228c: 82 17 cp r24, r18 |
228e: 93 07 cpc r25, r19 |
2290: 40 f4 brcc .+16 ; 0x22a2 <osd_ncmode_default+0x48a> |
max_Distance = naviData.HomePositionDeviation.Distance; |
2292: 80 91 c6 01 lds r24, 0x01C6 |
2296: 90 91 c7 01 lds r25, 0x01C7 |
229a: 90 93 24 01 sts 0x0124, r25 |
229e: 80 93 23 01 sts 0x0123, r24 |
} |
if (naviData.UBat < min_UBat) min_UBat = naviData.UBat; |
22a2: 90 91 d3 01 lds r25, 0x01D3 |
22a6: 80 91 04 01 lds r24, 0x0104 |
22aa: 98 17 cp r25, r24 |
22ac: 20 f4 brcc .+8 ; 0x22b6 <osd_ncmode_default+0x49e> |
22ae: 80 91 d3 01 lds r24, 0x01D3 |
22b2: 80 93 04 01 sts 0x0104, r24 |
if (naviData.FlyingTime > max_FlyingTime) max_FlyingTime = naviData.FlyingTime; |
22b6: 20 91 d1 01 lds r18, 0x01D1 |
22ba: 30 91 d2 01 lds r19, 0x01D2 |
22be: 80 91 25 01 lds r24, 0x0125 |
22c2: 90 91 26 01 lds r25, 0x0126 |
22c6: 82 17 cp r24, r18 |
22c8: 93 07 cpc r25, r19 |
22ca: 40 f4 brcc .+16 ; 0x22dc <osd_ncmode_default+0x4c4> |
22cc: 80 91 d1 01 lds r24, 0x01D1 |
22d0: 90 91 d2 01 lds r25, 0x01D2 |
22d4: 90 93 26 01 sts 0x0126, r25 |
22d8: 80 93 25 01 sts 0x0125, r24 |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
22dc: 80 91 1d 01 lds r24, 0x011D |
22e0: 80 ff sbrs r24, 0 |
22e2: 61 c0 rjmp .+194 ; 0x23a6 <osd_ncmode_default+0x58e> |
22e4: 80 91 1b 01 lds r24, 0x011B |
22e8: 86 fd sbrc r24, 6 |
22ea: 61 c0 rjmp .+194 ; 0x23ae <osd_ncmode_default+0x596> |
if (ampere > max_ampere) max_ampere = ampere; |
22ec: 20 91 37 01 lds r18, 0x0137 |
22f0: 30 91 38 01 lds r19, 0x0138 |
22f4: 80 91 39 01 lds r24, 0x0139 |
22f8: 90 91 3a 01 lds r25, 0x013A |
22fc: 82 17 cp r24, r18 |
22fe: 93 07 cpc r25, r19 |
2300: 24 f4 brge .+8 ; 0x230a <osd_ncmode_default+0x4f2> |
} else if (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT) { |
if (naviData.Current * 10 > max_ampere) max_ampere = naviData.Current * 10; |
2302: 30 93 3a 01 sts 0x013A, r19 |
2306: 20 93 39 01 sts 0x0139, r18 |
} |
} |
// remember last values |
last_RC_Quality = naviData.RC_Quality; |
230a: 80 91 dc 01 lds r24, 0x01DC |
230e: 80 93 01 01 sts 0x0101, r24 |
last_UBat = naviData.UBat; |
2312: 80 91 d3 01 lds r24, 0x01D3 |
2316: 80 93 00 01 sts 0x0100, r24 |
old_MKFlags = naviData.FCFlags; |
231a: 80 91 dd 01 lds r24, 0x01DD |
231e: 80 93 27 01 sts 0x0127, r24 |
seconds_since_last_data = 0; |
2322: 10 92 18 01 sts 0x0118, r1 |
return 0; |
} |
2326: 80 e0 ldi r24, 0x00 ; 0 |
2328: 90 e0 ldi r25, 0x00 ; 0 |
232a: df 91 pop r29 |
232c: cf 91 pop r28 |
232e: 1f 91 pop r17 |
2330: 0f 91 pop r16 |
2332: ff 90 pop r15 |
2334: ef 90 pop r14 |
2336: 08 95 ret |
// remember statistics (only when engines running) |
if (naviData.FCFlags & FLAG_MOTOR_RUN) { |
if (COSD_FLAGS_CONFIG & COSD_FLAG_GPSHEIGHT) { |
if (naviData.CurrentPosition.Altitude / 1000 - altimeter_offset > max_Altimeter) max_Altimeter = naviData.CurrentPosition.Altitude / 1000; |
} else { |
if (naviData.Altimeter / 30 > max_Altimeter) max_Altimeter = naviData.Altimeter / 30; |
2338: 80 91 cd 01 lds r24, 0x01CD |
233c: 90 91 ce 01 lds r25, 0x01CE |
2340: 6e e1 ldi r22, 0x1E ; 30 |
2342: 70 e0 ldi r23, 0x00 ; 0 |
2344: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
2348: 80 91 1f 01 lds r24, 0x011F |
234c: 90 91 20 01 lds r25, 0x0120 |
2350: 86 17 cp r24, r22 |
2352: 97 07 cpc r25, r23 |
2354: 0c f0 brlt .+2 ; 0x2358 <osd_ncmode_default+0x540> |
2356: 7f cf rjmp .-258 ; 0x2256 <osd_ncmode_default+0x43e> |
2358: 80 91 cd 01 lds r24, 0x01CD |
235c: 90 91 ce 01 lds r25, 0x01CE |
2360: 6e e1 ldi r22, 0x1E ; 30 |
2362: 70 e0 ldi r23, 0x00 ; 0 |
2364: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
2368: 70 93 20 01 sts 0x0120, r23 |
236c: 60 93 1f 01 sts 0x011F, r22 |
2370: 72 cf rjmp .-284 ; 0x2256 <osd_ncmode_default+0x43e> |
// first line |
write_ndigit_number_u(2, top_line, (uint16_t) (((uint32_t) naviData.GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
write_ndigit_number_u(7, top_line, naviData.RC_Quality, 3, 0); |
if (naviData.RC_Quality <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
2372: 80 91 01 01 lds r24, 0x0101 |
2376: 85 36 cpi r24, 0x65 ; 101 |
2378: 08 f4 brcc .+2 ; 0x237c <osd_ncmode_default+0x564> |
237a: 92 cd rjmp .-1244 ; 0x1ea0 <osd_ncmode_default+0x88> |
237c: 17 e0 ldi r17, 0x07 ; 7 |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
237e: 81 2f mov r24, r17 |
2380: 60 91 02 01 lds r22, 0x0102 |
2384: 4f e4 ldi r20, 0x4F ; 79 |
2386: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
238a: 1f 5f subi r17, 0xFF ; 255 |
// first line |
write_ndigit_number_u(2, top_line, (uint16_t) (((uint32_t) naviData.GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
write_ndigit_number_u(7, top_line, naviData.RC_Quality, 3, 0); |
if (naviData.RC_Quality <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
238c: 1b 30 cpi r17, 0x0B ; 11 |
238e: b9 f7 brne .-18 ; 0x237e <osd_ncmode_default+0x566> |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, 0); |
} |
if (naviData.NCFlags & NC_FLAG_NOSERIALLINK) { |
2390: 80 91 de 01 lds r24, 0x01DE |
2394: 84 fd sbrc r24, 4 |
2396: 8d cd rjmp .-1254 ; 0x1eb2 <osd_ncmode_default+0x9a> |
write_char_xy(11, top_line, 0); // clear |
} else { |
write_char_xy(11, top_line, 0xC6); // PC icon |
2398: 8b e0 ldi r24, 0x0B ; 11 |
239a: 60 91 02 01 lds r22, 0x0102 |
239e: 46 ec ldi r20, 0xC6 ; 198 |
23a0: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
23a4: 8c cd rjmp .-1256 ; 0x1ebe <osd_ncmode_default+0xa6> |
} |
if (naviData.UBat < min_UBat) min_UBat = naviData.UBat; |
if (naviData.FlyingTime > max_FlyingTime) max_FlyingTime = naviData.FlyingTime; |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
if (ampere > max_ampere) max_ampere = ampere; |
} else if (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT) { |
23a6: 80 91 1b 01 lds r24, 0x011B |
23aa: 86 ff sbrs r24, 6 |
23ac: ae cf rjmp .-164 ; 0x230a <osd_ncmode_default+0x4f2> |
if (naviData.Current * 10 > max_ampere) max_ampere = naviData.Current * 10; |
23ae: 80 91 e8 01 lds r24, 0x01E8 |
23b2: 90 91 e9 01 lds r25, 0x01E9 |
23b6: 9c 01 movw r18, r24 |
23b8: 22 0f add r18, r18 |
23ba: 33 1f adc r19, r19 |
23bc: 22 0f add r18, r18 |
23be: 33 1f adc r19, r19 |
23c0: 22 0f add r18, r18 |
23c2: 33 1f adc r19, r19 |
23c4: 88 0f add r24, r24 |
23c6: 99 1f adc r25, r25 |
23c8: 28 0f add r18, r24 |
23ca: 39 1f adc r19, r25 |
23cc: 80 91 39 01 lds r24, 0x0139 |
23d0: 90 91 3a 01 lds r25, 0x013A |
23d4: 82 17 cp r24, r18 |
23d6: 93 07 cpc r25, r19 |
23d8: 08 f0 brcs .+2 ; 0x23dc <osd_ncmode_default+0x5c4> |
23da: 97 cf rjmp .-210 ; 0x230a <osd_ncmode_default+0x4f2> |
23dc: 80 91 e8 01 lds r24, 0x01E8 |
23e0: 90 91 e9 01 lds r25, 0x01E9 |
23e4: 9c 01 movw r18, r24 |
23e6: 22 0f add r18, r18 |
23e8: 33 1f adc r19, r19 |
23ea: 22 0f add r18, r18 |
23ec: 33 1f adc r19, r19 |
23ee: 22 0f add r18, r18 |
23f0: 33 1f adc r19, r19 |
23f2: 88 0f add r24, r24 |
23f4: 99 1f adc r25, r25 |
23f6: 28 0f add r18, r24 |
23f8: 39 1f adc r19, r25 |
23fa: 83 cf rjmp .-250 ; 0x2302 <osd_ncmode_default+0x4ea> |
write_ndigit_number_u(7, top_line, naviData.RC_Quality, 3, 0); |
if (naviData.RC_Quality <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (naviData.RC_Quality > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
23fc: 80 91 01 01 lds r24, 0x0101 |
2400: 85 36 cpi r24, 0x65 ; 101 |
2402: 08 f0 brcs .+2 ; 0x2406 <osd_ncmode_default+0x5ee> |
2404: 52 cd rjmp .-1372 ; 0x1eaa <osd_ncmode_default+0x92> |
2406: 17 e0 ldi r17, 0x07 ; 7 |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, 0); |
2408: 81 2f mov r24, r17 |
240a: 60 91 02 01 lds r22, 0x0102 |
240e: 40 e0 ldi r20, 0x00 ; 0 |
2410: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2414: 1f 5f subi r17, 0xFF ; 255 |
write_ndigit_number_u(7, top_line, naviData.RC_Quality, 3, 0); |
if (naviData.RC_Quality <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (naviData.RC_Quality > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
2416: 1b 30 cpi r17, 0x0B ; 11 |
2418: b9 f7 brne .-18 ; 0x2408 <osd_ncmode_default+0x5f0> |
241a: 47 cd rjmp .-1394 ; 0x1eaa <osd_ncmode_default+0x92> |
int osd_ncmode_default() { |
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) { |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
write_char_xy(5, top_line, 0xCB); // km/h |
241c: 85 e0 ldi r24, 0x05 ; 5 |
241e: 60 91 02 01 lds r22, 0x0102 |
2422: 4b ec ldi r20, 0xCB ; 203 |
2424: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(10, top_line, 0xCA); // RC-transmitter |
2428: 8a e0 ldi r24, 0x0A ; 10 |
242a: 60 91 02 01 lds r22, 0x0102 |
242e: 4a ec ldi r20, 0xCA ; 202 |
2430: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(16, top_line, 0xD0); // degree symbol |
2434: 80 e1 ldi r24, 0x10 ; 16 |
2436: 60 91 02 01 lds r22, 0x0102 |
243a: 40 ed ldi r20, 0xD0 ; 208 |
243c: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(27, top_line, 0xCC); // small meters m height |
2440: 8b e1 ldi r24, 0x1B ; 27 |
2442: 60 91 02 01 lds r22, 0x0102 |
2446: 4c ec ldi r20, 0xCC ; 204 |
2448: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(20, top_line + 1, 0xB0); // left circle |
244c: 60 91 02 01 lds r22, 0x0102 |
2450: 6f 5f subi r22, 0xFF ; 255 |
2452: 84 e1 ldi r24, 0x14 ; 20 |
2454: 40 eb ldi r20, 0xB0 ; 176 |
2456: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(22, top_line + 1, 0xB2); // right circle |
245a: 60 91 02 01 lds r22, 0x0102 |
245e: 6f 5f subi r22, 0xFF ; 255 |
2460: 86 e1 ldi r24, 0x16 ; 22 |
2462: 42 eb ldi r20, 0xB2 ; 178 |
2464: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(27, top_line + 1, 0xCC); // small meters m home |
2468: 60 91 02 01 lds r22, 0x0102 |
246c: 6f 5f subi r22, 0xFF ; 255 |
246e: 8b e1 ldi r24, 0x1B ; 27 |
2470: 4c ec ldi r20, 0xCC ; 204 |
2472: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(7, bottom_line, 0x9E); // small V |
2476: 87 e0 ldi r24, 0x07 ; 7 |
2478: 60 91 03 01 lds r22, 0x0103 |
247c: 4e e9 ldi r20, 0x9E ; 158 |
247e: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) || (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
2482: 80 91 1d 01 lds r24, 0x011D |
2486: 80 fd sbrc r24, 0 |
2488: 04 c0 rjmp .+8 ; 0x2492 <osd_ncmode_default+0x67a> |
248a: 80 91 1b 01 lds r24, 0x011B |
248e: 86 ff sbrs r24, 6 |
2490: 12 c0 rjmp .+36 ; 0x24b6 <osd_ncmode_default+0x69e> |
write_char_xy(7, bottom_line - 1, 0x9F); // small A |
2492: 60 91 03 01 lds r22, 0x0103 |
2496: 61 50 subi r22, 0x01 ; 1 |
2498: 87 e0 ldi r24, 0x07 ; 7 |
249a: 4f e9 ldi r20, 0x9F ; 159 |
249c: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(14, bottom_line - 1, 0xB5); // mah |
24a0: 60 91 03 01 lds r22, 0x0103 |
24a4: 61 50 subi r22, 0x01 ; 1 |
24a6: 8e e0 ldi r24, 0x0E ; 14 |
24a8: 45 eb ldi r20, 0xB5 ; 181 |
24aa: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
24ae: 80 91 1b 01 lds r24, 0x011B |
24b2: 85 fd sbrc r24, 5 |
24b4: 33 c2 rjmp .+1126 ; 0x291c <osd_ncmode_default+0xb04> |
write_char_xy(21, bottom_line - 1, 0x9E); // small V |
} |
} |
write_char_xy(14, bottom_line, 0xD1); // on clock |
24b6: 8e e0 ldi r24, 0x0E ; 14 |
24b8: 60 91 03 01 lds r22, 0x0103 |
24bc: 41 ed ldi r20, 0xD1 ; 209 |
24be: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(21, bottom_line, 0xD2); // fly clock |
24c2: 85 e1 ldi r24, 0x15 ; 21 |
24c4: 60 91 03 01 lds r22, 0x0103 |
24c8: 42 ed ldi r20, 0xD2 ; 210 |
24ca: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(26, bottom_line, 0xC8); // sat1 |
24ce: 8a e1 ldi r24, 0x1A ; 26 |
24d0: 60 91 03 01 lds r22, 0x0103 |
24d4: 48 ec ldi r20, 0xC8 ; 200 |
24d6: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(27, bottom_line, 0xC9); // sat2 |
24da: 8b e1 ldi r24, 0x1B ; 27 |
24dc: 60 91 03 01 lds r22, 0x0103 |
24e0: 49 ec ldi r20, 0xC9 ; 201 |
24e2: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
24e6: 80 91 1d 01 lds r24, 0x011D |
24ea: 82 60 ori r24, 0x02 ; 2 |
24ec: 80 93 1d 01 sts 0x011D, r24 |
24f0: a1 cc rjmp .-1726 ; 0x1e34 <osd_ncmode_default+0x1c> |
//write_number_s(16, 5, setsReceived++); |
// remember statistics (only when engines running) |
if (naviData.FCFlags & FLAG_MOTOR_RUN) { |
if (COSD_FLAGS_CONFIG & COSD_FLAG_GPSHEIGHT) { |
if (naviData.CurrentPosition.Altitude / 1000 - altimeter_offset > max_Altimeter) max_Altimeter = naviData.CurrentPosition.Altitude / 1000; |
24f2: 60 91 a3 01 lds r22, 0x01A3 |
24f6: 70 91 a4 01 lds r23, 0x01A4 |
24fa: 80 91 a5 01 lds r24, 0x01A5 |
24fe: 90 91 a6 01 lds r25, 0x01A6 |
2502: 28 ee ldi r18, 0xE8 ; 232 |
2504: 33 e0 ldi r19, 0x03 ; 3 |
2506: 40 e0 ldi r20, 0x00 ; 0 |
2508: 50 e0 ldi r21, 0x00 ; 0 |
250a: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
250e: 30 93 20 01 sts 0x0120, r19 |
2512: 20 93 1f 01 sts 0x011F, r18 |
2516: 9f ce rjmp .-706 ; 0x2256 <osd_ncmode_default+0x43e> |
draw_battery(2, bottom_line, min_voltage, naviData.UBat, max_voltage); |
write_ndigit_number_u_10th(3, bottom_line, naviData.UBat, 3, 0); |
if (naviData.UBat <= min_voltage && last_UBat > min_voltage) { |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
} else if (naviData.UBat > min_voltage && last_UBat < min_voltage) { |
2518: 80 91 d3 01 lds r24, 0x01D3 |
251c: 98 17 cp r25, r24 |
251e: 08 f0 brcs .+2 ; 0x2522 <osd_ncmode_default+0x70a> |
2520: 35 ce rjmp .-918 ; 0x218c <osd_ncmode_default+0x374> |
2522: 80 91 00 01 lds r24, 0x0100 |
2526: 89 17 cp r24, r25 |
2528: 08 f0 brcs .+2 ; 0x252c <osd_ncmode_default+0x714> |
252a: 30 ce rjmp .-928 ; 0x218c <osd_ncmode_default+0x374> |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, 0); |
252c: 82 e0 ldi r24, 0x02 ; 2 |
252e: 60 91 03 01 lds r22, 0x0103 |
2532: 40 e0 ldi r20, 0x00 ; 0 |
2534: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2538: 83 e0 ldi r24, 0x03 ; 3 |
253a: 60 91 03 01 lds r22, 0x0103 |
253e: 40 e0 ldi r20, 0x00 ; 0 |
2540: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2544: 84 e0 ldi r24, 0x04 ; 4 |
2546: 60 91 03 01 lds r22, 0x0103 |
254a: 40 e0 ldi r20, 0x00 ; 0 |
254c: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2550: 85 e0 ldi r24, 0x05 ; 5 |
2552: 60 91 03 01 lds r22, 0x0103 |
2556: 40 e0 ldi r20, 0x00 ; 0 |
2558: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
255c: 86 e0 ldi r24, 0x06 ; 6 |
255e: 60 91 03 01 lds r22, 0x0103 |
2562: 40 e0 ldi r20, 0x00 ; 0 |
2564: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2568: 87 e0 ldi r24, 0x07 ; 7 |
256a: 60 91 03 01 lds r22, 0x0103 |
256e: 40 e0 ldi r20, 0x00 ; 0 |
2570: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2574: 0b ce rjmp .-1002 ; 0x218c <osd_ncmode_default+0x374> |
write_ndigit_number_u_10th(3, bottom_line - 1, ampere / 10, 3, 0); |
write_ndigit_number_s(10, bottom_line - 1, ampere_wasted / 10, 4, 0); |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
write_ndigit_number_u_10th(17, bottom_line - 1, s_volt, 3, 0); |
} |
} else if (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT) { |
2576: 16 ff sbrs r17, 6 |
2578: c3 cd rjmp .-1146 ; 0x2100 <osd_ncmode_default+0x2e8> |
257a: a9 cd rjmp .-1198 ; 0x20ce <osd_ncmode_default+0x2b6> |
} |
// motors are on, assume we were/are flying |
COSD_FLAGS_RUNTIME |= COSD_WASFLYING; |
} else { |
// stats |
if ((COSD_FLAGS_RUNTIME & COSD_WASFLYING) && (COSD_FLAGS_MODES & COSD_FLAG_STATS)) { |
257c: 80 91 1d 01 lds r24, 0x011D |
2580: 82 fd sbrc r24, 2 |
2582: 41 c0 rjmp .+130 ; 0x2606 <osd_ncmode_default+0x7ee> |
2584: 10 91 1b 01 lds r17, 0x011B |
write_char_xy(20, line, 210); // fly clock |
write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[5])))); // longitude |
write_gps_pos(14, line, naviData.CurrentPosition.Longitude); |
write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[6])))); // latitude |
write_gps_pos(14, line, naviData.CurrentPosition.Latitude); |
} else if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { // if no stats there is space horizon |
2588: 11 ff sbrs r17, 1 |
258a: 99 cd rjmp .-1230 ; 0x20be <osd_ncmode_default+0x2a6> |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) || (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
258c: 80 fd sbrc r24, 0 |
258e: 02 c0 rjmp .+4 ; 0x2594 <osd_ncmode_default+0x77c> |
2590: 16 ff sbrs r17, 6 |
2592: 0c c2 rjmp .+1048 ; 0x29ac <osd_ncmode_default+0xb94> |
draw_artificial_horizon(top_line + 2, bottom_line - 2, naviData.AngleNick, naviData.AngleRoll); |
2594: 40 91 da 01 lds r20, 0x01DA |
2598: 20 91 db 01 lds r18, 0x01DB |
259c: 80 91 02 01 lds r24, 0x0102 |
25a0: 60 91 03 01 lds r22, 0x0103 |
25a4: 62 50 subi r22, 0x02 ; 2 |
} else { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
25a6: 55 27 eor r21, r21 |
25a8: 47 fd sbrc r20, 7 |
25aa: 50 95 com r21 |
25ac: 33 27 eor r19, r19 |
25ae: 27 fd sbrc r18, 7 |
25b0: 30 95 com r19 |
25b2: 8e 5f subi r24, 0xFE ; 254 |
25b4: 0e 94 e6 08 call 0x11cc ; 0x11cc <draw_artificial_horizon> |
25b8: 10 91 1b 01 lds r17, 0x011B |
} |
} |
} |
if (COSD_FLAGS_MODES & COSD_FLAG_BIGVARIO) { |
25bc: 12 ff sbrs r17, 2 |
25be: 81 cd rjmp .-1278 ; 0x20c2 <osd_ncmode_default+0x2aa> |
draw_big_variometer(27, 8, naviData.Variometer); |
25c0: 40 91 cf 01 lds r20, 0x01CF |
25c4: 50 91 d0 01 lds r21, 0x01D0 |
25c8: 8b e1 ldi r24, 0x1B ; 27 |
25ca: 68 e0 ldi r22, 0x08 ; 8 |
25cc: 0e 94 84 0a call 0x1508 ; 0x1508 <draw_big_variometer> |
25d0: 10 91 1b 01 lds r17, 0x011B |
25d4: 76 cd rjmp .-1300 ; 0x20c2 <osd_ncmode_default+0x2aa> |
write_ndigit_number_u(24, bottom_line, naviData.SatsInUse, 2, 0); |
if (naviData.NCFlags & NC_FLAG_MANUAL_CONTROL) { |
write_char_xy(23, bottom_line, 0xB3); // rc transmitter |
} else { |
write_char_xy(23, bottom_line, 0); // clear |
25d6: 87 e1 ldi r24, 0x17 ; 23 |
25d8: 60 91 03 01 lds r22, 0x0103 |
25dc: 40 e0 ldi r20, 0x00 ; 0 |
25de: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
} |
if (naviData.NCFlags & NC_FLAG_CH) { |
25e2: 80 91 de 01 lds r24, 0x01DE |
25e6: 82 ff sbrs r24, 2 |
25e8: fc cd rjmp .-1032 ; 0x21e2 <osd_ncmode_default+0x3ca> |
write_char_xy(27, bottom_line, 231); // gps ch |
25ea: 8b e1 ldi r24, 0x1B ; 27 |
25ec: 60 91 03 01 lds r22, 0x0103 |
25f0: 47 ee ldi r20, 0xE7 ; 231 |
25f2: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
25f6: ff cd rjmp .-1026 ; 0x21f6 <osd_ncmode_default+0x3de> |
} else if (naviData.NCFlags & NC_FLAG_PH) { |
write_char_xy(27, bottom_line, 230); // gps ph |
} else { // (naviData.NCFlags & NC_FLAG_FREE) |
write_char_xy(27, bottom_line, 201); // sat2 (free) |
25f8: 8b e1 ldi r24, 0x1B ; 27 |
25fa: 60 91 03 01 lds r22, 0x0103 |
25fe: 49 ec ldi r20, 0xC9 ; 201 |
2600: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
2604: f8 cd rjmp .-1040 ; 0x21f6 <osd_ncmode_default+0x3de> |
} |
// motors are on, assume we were/are flying |
COSD_FLAGS_RUNTIME |= COSD_WASFLYING; |
} else { |
// stats |
if ((COSD_FLAGS_RUNTIME & COSD_WASFLYING) && (COSD_FLAGS_MODES & COSD_FLAG_STATS)) { |
2606: 10 91 1b 01 lds r17, 0x011B |
260a: 13 ff sbrs r17, 3 |
260c: bd cf rjmp .-134 ; 0x2588 <osd_ncmode_default+0x770> |
uint8_t line = 3; |
write_ascii_string_pgm(1, line, (const char *) (pgm_read_word(&(stats_item_pointers[0])))); // max Altitude |
260e: e0 ee ldi r30, 0xE0 ; 224 |
2610: f0 e0 ldi r31, 0x00 ; 0 |
2612: 45 91 lpm r20, Z+ |
2614: 54 91 lpm r21, Z+ |
2616: 81 e0 ldi r24, 0x01 ; 1 |
2618: 63 e0 ldi r22, 0x03 ; 3 |
261a: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_s(16, line, max_Altimeter, 4, 0); |
261e: 40 91 1f 01 lds r20, 0x011F |
2622: 50 91 20 01 lds r21, 0x0120 |
2626: 80 e1 ldi r24, 0x10 ; 16 |
2628: 63 e0 ldi r22, 0x03 ; 3 |
262a: 24 e0 ldi r18, 0x04 ; 4 |
262c: 30 e0 ldi r19, 0x00 ; 0 |
262e: 00 e0 ldi r16, 0x00 ; 0 |
2630: 0e 94 19 07 call 0xe32 ; 0xe32 <write_ndigit_number_s> |
write_char_xy(20, line, 204); // small meters m |
2634: 84 e1 ldi r24, 0x14 ; 20 |
2636: 63 e0 ldi r22, 0x03 ; 3 |
2638: 4c ec ldi r20, 0xCC ; 204 |
263a: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[1])))); // max Speed |
263e: e2 ee ldi r30, 0xE2 ; 226 |
2640: f0 e0 ldi r31, 0x00 ; 0 |
2642: 45 91 lpm r20, Z+ |
2644: 54 91 lpm r21, Z+ |
2646: 81 e0 ldi r24, 0x01 ; 1 |
2648: 64 e0 ldi r22, 0x04 ; 4 |
264a: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_u(17, line, (uint16_t) (((uint32_t) max_GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
264e: 20 91 21 01 lds r18, 0x0121 |
2652: 30 91 22 01 lds r19, 0x0122 |
2656: 40 e0 ldi r20, 0x00 ; 0 |
2658: 50 e0 ldi r21, 0x00 ; 0 |
265a: ca 01 movw r24, r20 |
265c: b9 01 movw r22, r18 |
265e: 66 0f add r22, r22 |
2660: 77 1f adc r23, r23 |
2662: 88 1f adc r24, r24 |
2664: 99 1f adc r25, r25 |
2666: 66 0f add r22, r22 |
2668: 77 1f adc r23, r23 |
266a: 88 1f adc r24, r24 |
266c: 99 1f adc r25, r25 |
266e: 66 0f add r22, r22 |
2670: 77 1f adc r23, r23 |
2672: 88 1f adc r24, r24 |
2674: 99 1f adc r25, r25 |
2676: 62 0f add r22, r18 |
2678: 73 1f adc r23, r19 |
267a: 84 1f adc r24, r20 |
267c: 95 1f adc r25, r21 |
267e: 2a ef ldi r18, 0xFA ; 250 |
2680: 30 e0 ldi r19, 0x00 ; 0 |
2682: 40 e0 ldi r20, 0x00 ; 0 |
2684: 50 e0 ldi r21, 0x00 ; 0 |
2686: 0e 94 8f 1c call 0x391e ; 0x391e <__udivmodsi4> |
268a: 81 e1 ldi r24, 0x11 ; 17 |
268c: 64 e0 ldi r22, 0x04 ; 4 |
268e: a9 01 movw r20, r18 |
2690: 23 e0 ldi r18, 0x03 ; 3 |
2692: 30 e0 ldi r19, 0x00 ; 0 |
2694: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_char_xy(20, line, 203); // km/h |
2698: 84 e1 ldi r24, 0x14 ; 20 |
269a: 64 e0 ldi r22, 0x04 ; 4 |
269c: 4b ec ldi r20, 0xCB ; 203 |
269e: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[2])))); // max Distance |
26a2: e4 ee ldi r30, 0xE4 ; 228 |
26a4: f0 e0 ldi r31, 0x00 ; 0 |
26a6: 45 91 lpm r20, Z+ |
26a8: 54 91 lpm r21, Z+ |
26aa: 81 e0 ldi r24, 0x01 ; 1 |
26ac: 65 e0 ldi r22, 0x05 ; 5 |
26ae: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_u(17, line, max_Distance / 10, 3, 0); |
26b2: 80 91 23 01 lds r24, 0x0123 |
26b6: 90 91 24 01 lds r25, 0x0124 |
26ba: 6a e0 ldi r22, 0x0A ; 10 |
26bc: 70 e0 ldi r23, 0x00 ; 0 |
26be: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
26c2: ab 01 movw r20, r22 |
26c4: 81 e1 ldi r24, 0x11 ; 17 |
26c6: 65 e0 ldi r22, 0x05 ; 5 |
26c8: 23 e0 ldi r18, 0x03 ; 3 |
26ca: 30 e0 ldi r19, 0x00 ; 0 |
26cc: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_char_xy(20, line, 204); // small meters m |
26d0: 84 e1 ldi r24, 0x14 ; 20 |
26d2: 65 e0 ldi r22, 0x05 ; 5 |
26d4: 4c ec ldi r20, 0xCC ; 204 |
26d6: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[3])))); // min voltage |
26da: e6 ee ldi r30, 0xE6 ; 230 |
26dc: f0 e0 ldi r31, 0x00 ; 0 |
26de: 45 91 lpm r20, Z+ |
26e0: 54 91 lpm r21, Z+ |
26e2: 81 e0 ldi r24, 0x01 ; 1 |
26e4: 66 e0 ldi r22, 0x06 ; 6 |
26e6: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_u_10th(16, line, min_UBat, 3, 0); |
26ea: 40 91 04 01 lds r20, 0x0104 |
26ee: 80 e1 ldi r24, 0x10 ; 16 |
26f0: 66 e0 ldi r22, 0x06 ; 6 |
26f2: 50 e0 ldi r21, 0x00 ; 0 |
26f4: 23 e0 ldi r18, 0x03 ; 3 |
26f6: 30 e0 ldi r19, 0x00 ; 0 |
26f8: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
write_char_xy(20, line, 0x9E); // small V |
26fc: 84 e1 ldi r24, 0x14 ; 20 |
26fe: 66 e0 ldi r22, 0x06 ; 6 |
2700: 4e e9 ldi r20, 0x9E ; 158 |
2702: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) || (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
2706: 80 91 1d 01 lds r24, 0x011D |
270a: 80 fd sbrc r24, 0 |
270c: 0f c1 rjmp .+542 ; 0x292c <osd_ncmode_default+0xb14> |
270e: 80 91 1b 01 lds r24, 0x011B |
2712: 86 fd sbrc r24, 6 |
2714: 0b c1 rjmp .+534 ; 0x292c <osd_ncmode_default+0xb14> |
2716: 17 e0 ldi r17, 0x07 ; 7 |
2718: 08 e0 ldi r16, 0x08 ; 8 |
271a: f9 e0 ldi r31, 0x09 ; 9 |
271c: ff 2e mov r15, r31 |
write_ndigit_number_u(21, line, naviData.UsedCapacity - wasted_ampere_offset, 5, 0); |
} |
write_char_xy(26, line, 0xB5); // mah |
} |
write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[4])))); // max time |
271e: e8 ee ldi r30, 0xE8 ; 232 |
2720: f0 e0 ldi r31, 0x00 ; 0 |
2722: 45 91 lpm r20, Z+ |
2724: 54 91 lpm r21, Z+ |
2726: 81 e0 ldi r24, 0x01 ; 1 |
2728: 61 2f mov r22, r17 |
272a: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_time(14, line, max_FlyingTime); |
272e: 40 91 25 01 lds r20, 0x0125 |
2732: 50 91 26 01 lds r21, 0x0126 |
2736: 8e e0 ldi r24, 0x0E ; 14 |
2738: 61 2f mov r22, r17 |
273a: 0e 94 3a 08 call 0x1074 ; 0x1074 <write_time> |
write_char_xy(20, line, 210); // fly clock |
273e: 84 e1 ldi r24, 0x14 ; 20 |
2740: 61 2f mov r22, r17 |
2742: 42 ed ldi r20, 0xD2 ; 210 |
2744: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[5])))); // longitude |
2748: ea ee ldi r30, 0xEA ; 234 |
274a: f0 e0 ldi r31, 0x00 ; 0 |
274c: 45 91 lpm r20, Z+ |
274e: 54 91 lpm r21, Z+ |
2750: 81 e0 ldi r24, 0x01 ; 1 |
2752: 60 2f mov r22, r16 |
2754: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_gps_pos(14, line, naviData.CurrentPosition.Longitude); |
2758: 20 91 9b 01 lds r18, 0x019B |
275c: 30 91 9c 01 lds r19, 0x019C |
2760: 40 91 9d 01 lds r20, 0x019D |
2764: 50 91 9e 01 lds r21, 0x019E |
2768: 8e e0 ldi r24, 0x0E ; 14 |
276a: 60 2f mov r22, r16 |
276c: 0e 94 bd 07 call 0xf7a ; 0xf7a <write_gps_pos> |
write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[6])))); // latitude |
2770: ec ee ldi r30, 0xEC ; 236 |
2772: f0 e0 ldi r31, 0x00 ; 0 |
2774: 45 91 lpm r20, Z+ |
2776: 54 91 lpm r21, Z+ |
2778: 81 e0 ldi r24, 0x01 ; 1 |
277a: 6f 2d mov r22, r15 |
277c: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_gps_pos(14, line, naviData.CurrentPosition.Latitude); |
2780: 20 91 9f 01 lds r18, 0x019F |
2784: 30 91 a0 01 lds r19, 0x01A0 |
2788: 40 91 a1 01 lds r20, 0x01A1 |
278c: 50 91 a2 01 lds r21, 0x01A2 |
2790: 8e e0 ldi r24, 0x0E ; 14 |
2792: 6f 2d mov r22, r15 |
2794: 0e 94 bd 07 call 0xf7a ; 0xf7a <write_gps_pos> |
2798: 10 91 1b 01 lds r17, 0x011B |
279c: 90 cc rjmp .-1760 ; 0x20be <osd_ncmode_default+0x2a6> |
write_ndigit_number_u(24, top_line + 1, naviData.HomePositionDeviation.Distance / 10, 3, 0); |
// center |
if (naviData.FCFlags & FLAG_MOTOR_RUN) { // should be engines running |
if (!(old_MKFlags & FLAG_MOTOR_RUN)) { // motors just started, clear middle |
clear(); |
279e: 0e 94 75 08 call 0x10ea ; 0x10ea <clear> |
// remember current heigth for gps offset |
altimeter_offset = naviData.CurrentPosition.Altitude / 1000; |
27a2: 60 91 a3 01 lds r22, 0x01A3 |
27a6: 70 91 a4 01 lds r23, 0x01A4 |
27aa: 80 91 a5 01 lds r24, 0x01A5 |
27ae: 90 91 a6 01 lds r25, 0x01A6 |
27b2: 28 ee ldi r18, 0xE8 ; 232 |
27b4: 33 e0 ldi r19, 0x03 ; 3 |
27b6: 40 e0 ldi r20, 0x00 ; 0 |
27b8: 50 e0 ldi r21, 0x00 ; 0 |
27ba: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
27be: 30 93 99 01 sts 0x0199, r19 |
27c2: 20 93 98 01 sts 0x0198, r18 |
// set wasted counter to current offset |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
27c6: 00 91 1d 01 lds r16, 0x011D |
27ca: 00 ff sbrs r16, 0 |
27cc: 9a c0 rjmp .+308 ; 0x2902 <osd_ncmode_default+0xaea> |
27ce: 10 91 1b 01 lds r17, 0x011B |
27d2: 16 fd sbrc r17, 6 |
27d4: 9a c0 rjmp .+308 ; 0x290a <osd_ncmode_default+0xaf2> |
wasted_ampere_offset = ampere_wasted / 10; |
27d6: 60 91 3b 01 lds r22, 0x013B |
27da: 70 91 3c 01 lds r23, 0x013C |
27de: 80 91 3d 01 lds r24, 0x013D |
27e2: 90 91 3e 01 lds r25, 0x013E |
27e6: 2a e0 ldi r18, 0x0A ; 10 |
27e8: 30 e0 ldi r19, 0x00 ; 0 |
27ea: 40 e0 ldi r20, 0x00 ; 0 |
27ec: 50 e0 ldi r21, 0x00 ; 0 |
27ee: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
27f2: 30 93 48 01 sts 0x0148, r19 |
27f6: 20 93 47 01 sts 0x0147, r18 |
} else if (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT) { |
wasted_ampere_offset = naviData.UsedCapacity; |
} |
// update flags to paint display again if needed |
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN; |
27fa: 0d 7f andi r16, 0xFD ; 253 |
27fc: 00 93 1d 01 sts 0x011D, r16 |
2800: 41 cc rjmp .-1918 ; 0x2084 <osd_ncmode_default+0x26c> |
} |
// pre-bottom line |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
//write_ndigit_number_s(3, bottom_line - 1, ampere, 4, 0); |
write_ndigit_number_u_10th(3, bottom_line - 1, ampere / 10, 3, 0); |
2802: 20 91 03 01 lds r18, 0x0103 |
2806: 21 50 subi r18, 0x01 ; 1 |
2808: 80 91 37 01 lds r24, 0x0137 |
280c: 90 91 38 01 lds r25, 0x0138 |
2810: 6a e0 ldi r22, 0x0A ; 10 |
2812: 70 e0 ldi r23, 0x00 ; 0 |
2814: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
2818: ab 01 movw r20, r22 |
281a: 83 e0 ldi r24, 0x03 ; 3 |
281c: 62 2f mov r22, r18 |
281e: 23 e0 ldi r18, 0x03 ; 3 |
2820: 30 e0 ldi r19, 0x00 ; 0 |
2822: 00 e0 ldi r16, 0x00 ; 0 |
2824: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
write_ndigit_number_s(10, bottom_line - 1, ampere_wasted / 10, 4, 0); |
2828: 10 91 03 01 lds r17, 0x0103 |
282c: 11 50 subi r17, 0x01 ; 1 |
282e: 60 91 3b 01 lds r22, 0x013B |
2832: 70 91 3c 01 lds r23, 0x013C |
2836: 80 91 3d 01 lds r24, 0x013D |
283a: 90 91 3e 01 lds r25, 0x013E |
283e: 2a e0 ldi r18, 0x0A ; 10 |
2840: 30 e0 ldi r19, 0x00 ; 0 |
2842: 40 e0 ldi r20, 0x00 ; 0 |
2844: 50 e0 ldi r21, 0x00 ; 0 |
2846: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
284a: 8a e0 ldi r24, 0x0A ; 10 |
284c: 61 2f mov r22, r17 |
284e: a9 01 movw r20, r18 |
2850: 24 e0 ldi r18, 0x04 ; 4 |
2852: 30 e0 ldi r19, 0x00 ; 0 |
2854: 0e 94 19 07 call 0xe32 ; 0xe32 <write_ndigit_number_s> |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
2858: 80 91 1b 01 lds r24, 0x011B |
285c: 85 ff sbrs r24, 5 |
285e: 50 cc rjmp .-1888 ; 0x2100 <osd_ncmode_default+0x2e8> |
write_ndigit_number_u_10th(17, bottom_line - 1, s_volt, 3, 0); |
2860: 60 91 03 01 lds r22, 0x0103 |
2864: 61 50 subi r22, 0x01 ; 1 |
2866: 40 91 9f 02 lds r20, 0x029F |
286a: 50 91 a0 02 lds r21, 0x02A0 |
286e: 81 e1 ldi r24, 0x11 ; 17 |
2870: 23 e0 ldi r18, 0x03 ; 3 |
2872: 30 e0 ldi r19, 0x00 ; 0 |
2874: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
2878: 43 cc rjmp .-1914 ; 0x2100 <osd_ncmode_default+0x2e8> |
} |
if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
draw_artificial_horizon(top_line + 2, bottom_line - 2, naviData.AngleNick, naviData.AngleRoll); |
} else { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
287a: 40 91 da 01 lds r20, 0x01DA |
287e: 20 91 db 01 lds r18, 0x01DB |
2882: 80 91 02 01 lds r24, 0x0102 |
2886: 60 91 03 01 lds r22, 0x0103 |
288a: 61 50 subi r22, 0x01 ; 1 |
288c: 08 cc rjmp .-2032 ; 0x209e <osd_ncmode_default+0x286> |
if (naviData.CurrentPosition.Altitude / 1000 - altimeter_offset > 10 || naviData.CurrentPosition.Altitude / 1000 - altimeter_offset < -10) { |
// above 10m only write full meters |
write_ndigit_number_s(23, top_line, (int16_t) (naviData.CurrentPosition.Altitude / 1000 - altimeter_offset), 4, 0); // GPS |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(23, top_line, (int16_t) (naviData.CurrentPosition.Altitude / 100 - altimeter_offset * 10), 3, 0); // GPS |
288e: 60 91 a3 01 lds r22, 0x01A3 |
2892: 70 91 a4 01 lds r23, 0x01A4 |
2896: 80 91 a5 01 lds r24, 0x01A5 |
289a: 90 91 a6 01 lds r25, 0x01A6 |
289e: 8e 01 movw r16, r28 |
28a0: 00 0f add r16, r16 |
28a2: 11 1f adc r17, r17 |
28a4: 00 0f add r16, r16 |
28a6: 11 1f adc r17, r17 |
28a8: 00 0f add r16, r16 |
28aa: 11 1f adc r17, r17 |
28ac: cc 0f add r28, r28 |
28ae: dd 1f adc r29, r29 |
28b0: 0c 0f add r16, r28 |
28b2: 1d 1f adc r17, r29 |
28b4: 10 95 com r17 |
28b6: 01 95 neg r16 |
28b8: 1f 4f sbci r17, 0xFF ; 255 |
28ba: 24 e6 ldi r18, 0x64 ; 100 |
28bc: 30 e0 ldi r19, 0x00 ; 0 |
28be: 40 e0 ldi r20, 0x00 ; 0 |
28c0: 50 e0 ldi r21, 0x00 ; 0 |
28c2: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
28c6: 02 0f add r16, r18 |
28c8: 13 1f adc r17, r19 |
28ca: 87 e1 ldi r24, 0x17 ; 23 |
28cc: 60 91 02 01 lds r22, 0x0102 |
28d0: a8 01 movw r20, r16 |
28d2: 23 e0 ldi r18, 0x03 ; 3 |
28d4: 30 e0 ldi r19, 0x00 ; 0 |
28d6: 00 e0 ldi r16, 0x00 ; 0 |
28d8: 0e 94 d3 05 call 0xba6 ; 0xba6 <write_ndigit_number_s_10th> |
28dc: 8f cb rjmp .-2274 ; 0x1ffc <osd_ncmode_default+0x1e4> |
if (naviData.Altimeter > 300 || naviData.Altimeter < -300) { |
// above 10m only write full meters |
write_ndigit_number_s(23, top_line, naviData.Altimeter / 30, 4, 0); // BARO |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(23, top_line, naviData.Altimeter / 3, 3, 0); // BARO |
28de: 80 91 cd 01 lds r24, 0x01CD |
28e2: 90 91 ce 01 lds r25, 0x01CE |
28e6: 63 e0 ldi r22, 0x03 ; 3 |
28e8: 70 e0 ldi r23, 0x00 ; 0 |
28ea: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
28ee: ab 01 movw r20, r22 |
28f0: 87 e1 ldi r24, 0x17 ; 23 |
28f2: 60 91 02 01 lds r22, 0x0102 |
28f6: 23 e0 ldi r18, 0x03 ; 3 |
28f8: 30 e0 ldi r19, 0x00 ; 0 |
28fa: 00 e0 ldi r16, 0x00 ; 0 |
28fc: 0e 94 d3 05 call 0xba6 ; 0xba6 <write_ndigit_number_s_10th> |
2900: 7d cb rjmp .-2310 ; 0x1ffc <osd_ncmode_default+0x1e4> |
// remember current heigth for gps offset |
altimeter_offset = naviData.CurrentPosition.Altitude / 1000; |
// set wasted counter to current offset |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
wasted_ampere_offset = ampere_wasted / 10; |
} else if (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT) { |
2902: 10 91 1b 01 lds r17, 0x011B |
2906: 16 ff sbrs r17, 6 |
2908: 78 cf rjmp .-272 ; 0x27fa <osd_ncmode_default+0x9e2> |
wasted_ampere_offset = naviData.UsedCapacity; |
290a: 80 91 ea 01 lds r24, 0x01EA |
290e: 90 91 eb 01 lds r25, 0x01EB |
2912: 90 93 48 01 sts 0x0148, r25 |
2916: 80 93 47 01 sts 0x0147, r24 |
291a: 6f cf rjmp .-290 ; 0x27fa <osd_ncmode_default+0x9e2> |
write_char_xy(7, bottom_line, 0x9E); // small V |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) || (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
write_char_xy(7, bottom_line - 1, 0x9F); // small A |
write_char_xy(14, bottom_line - 1, 0xB5); // mah |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
write_char_xy(21, bottom_line - 1, 0x9E); // small V |
291c: 60 91 03 01 lds r22, 0x0103 |
2920: 61 50 subi r22, 0x01 ; 1 |
2922: 85 e1 ldi r24, 0x15 ; 21 |
2924: 4e e9 ldi r20, 0x9E ; 158 |
2926: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
292a: c5 cd rjmp .-1142 ; 0x24b6 <osd_ncmode_default+0x69e> |
write_char_xy(20, line, 204); // small meters m |
write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[3])))); // min voltage |
write_ndigit_number_u_10th(16, line, min_UBat, 3, 0); |
write_char_xy(20, line, 0x9E); // small V |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) || (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
write_ascii_string_pgm(1, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[7])))); // ampere |
292c: ee ee ldi r30, 0xEE ; 238 |
292e: f0 e0 ldi r31, 0x00 ; 0 |
2930: 45 91 lpm r20, Z+ |
2932: 54 91 lpm r21, Z+ |
2934: 81 e0 ldi r24, 0x01 ; 1 |
2936: 67 e0 ldi r22, 0x07 ; 7 |
2938: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_u_10th(16, line, max_ampere / 10, 3, 0); |
293c: 80 91 39 01 lds r24, 0x0139 |
2940: 90 91 3a 01 lds r25, 0x013A |
2944: 6a e0 ldi r22, 0x0A ; 10 |
2946: 70 e0 ldi r23, 0x00 ; 0 |
2948: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
294c: ab 01 movw r20, r22 |
294e: 80 e1 ldi r24, 0x10 ; 16 |
2950: 67 e0 ldi r22, 0x07 ; 7 |
2952: 23 e0 ldi r18, 0x03 ; 3 |
2954: 30 e0 ldi r19, 0x00 ; 0 |
2956: 00 e0 ldi r16, 0x00 ; 0 |
2958: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
write_char_xy(20, line, 0x9F); // small A |
295c: 84 e1 ldi r24, 0x14 ; 20 |
295e: 67 e0 ldi r22, 0x07 ; 7 |
2960: 4f e9 ldi r20, 0x9F ; 159 |
2962: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
// wasted mampere in this flight (will count up after landing) |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
2966: 80 91 1d 01 lds r24, 0x011D |
296a: 80 ff sbrs r24, 0 |
296c: 29 c0 rjmp .+82 ; 0x29c0 <osd_ncmode_default+0xba8> |
296e: 80 91 1b 01 lds r24, 0x011B |
2972: 86 ff sbrs r24, 6 |
2974: 2a c0 rjmp .+84 ; 0x29ca <osd_ncmode_default+0xbb2> |
write_ndigit_number_u(21, line, (ampere_wasted / 10) - wasted_ampere_offset, 5, 0); |
} else if (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT) { |
write_ndigit_number_u(21, line, naviData.UsedCapacity - wasted_ampere_offset, 5, 0); |
2976: 40 91 ea 01 lds r20, 0x01EA |
297a: 50 91 eb 01 lds r21, 0x01EB |
297e: 80 91 47 01 lds r24, 0x0147 |
2982: 90 91 48 01 lds r25, 0x0148 |
2986: 48 1b sub r20, r24 |
2988: 59 0b sbc r21, r25 |
298a: 85 e1 ldi r24, 0x15 ; 21 |
298c: 67 e0 ldi r22, 0x07 ; 7 |
298e: 25 e0 ldi r18, 0x05 ; 5 |
2990: 30 e0 ldi r19, 0x00 ; 0 |
2992: 00 e0 ldi r16, 0x00 ; 0 |
2994: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
} |
write_char_xy(26, line, 0xB5); // mah |
2998: 8a e1 ldi r24, 0x1A ; 26 |
299a: 67 e0 ldi r22, 0x07 ; 7 |
299c: 45 eb ldi r20, 0xB5 ; 181 |
299e: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
29a2: 18 e0 ldi r17, 0x08 ; 8 |
29a4: 09 e0 ldi r16, 0x09 ; 9 |
29a6: ea e0 ldi r30, 0x0A ; 10 |
29a8: fe 2e mov r15, r30 |
29aa: b9 ce rjmp .-654 ; 0x271e <osd_ncmode_default+0x906> |
write_gps_pos(14, line, naviData.CurrentPosition.Latitude); |
} else if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { // if no stats there is space horizon |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) || (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
draw_artificial_horizon(top_line + 2, bottom_line - 2, naviData.AngleNick, naviData.AngleRoll); |
} else { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
29ac: 40 91 da 01 lds r20, 0x01DA |
29b0: 20 91 db 01 lds r18, 0x01DB |
29b4: 80 91 02 01 lds r24, 0x0102 |
29b8: 60 91 03 01 lds r22, 0x0103 |
29bc: 61 50 subi r22, 0x01 ; 1 |
29be: f3 cd rjmp .-1050 ; 0x25a6 <osd_ncmode_default+0x78e> |
write_char_xy(20, line, 0x9F); // small A |
// wasted mampere in this flight (will count up after landing) |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
write_ndigit_number_u(21, line, (ampere_wasted / 10) - wasted_ampere_offset, 5, 0); |
} else if (COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT) { |
29c0: 80 91 1b 01 lds r24, 0x011B |
29c4: 86 ff sbrs r24, 6 |
29c6: e8 cf rjmp .-48 ; 0x2998 <osd_ncmode_default+0xb80> |
29c8: d6 cf rjmp .-84 ; 0x2976 <osd_ncmode_default+0xb5e> |
write_ndigit_number_u_10th(16, line, max_ampere / 10, 3, 0); |
write_char_xy(20, line, 0x9F); // small A |
// wasted mampere in this flight (will count up after landing) |
if ((COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) && !(COSD_FLAGS_MODES & COSD_FLAG_FCCURRENT)) { |
write_ndigit_number_u(21, line, (ampere_wasted / 10) - wasted_ampere_offset, 5, 0); |
29ca: 00 91 47 01 lds r16, 0x0147 |
29ce: 10 91 48 01 lds r17, 0x0148 |
29d2: 60 91 3b 01 lds r22, 0x013B |
29d6: 70 91 3c 01 lds r23, 0x013C |
29da: 80 91 3d 01 lds r24, 0x013D |
29de: 90 91 3e 01 lds r25, 0x013E |
29e2: 2a e0 ldi r18, 0x0A ; 10 |
29e4: 30 e0 ldi r19, 0x00 ; 0 |
29e6: 40 e0 ldi r20, 0x00 ; 0 |
29e8: 50 e0 ldi r21, 0x00 ; 0 |
29ea: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
29ee: 20 1b sub r18, r16 |
29f0: 31 0b sbc r19, r17 |
29f2: 85 e1 ldi r24, 0x15 ; 21 |
29f4: 67 e0 ldi r22, 0x07 ; 7 |
29f6: a9 01 movw r20, r18 |
29f8: 25 e0 ldi r18, 0x05 ; 5 |
29fa: 30 e0 ldi r19, 0x00 ; 0 |
29fc: 00 e0 ldi r16, 0x00 ; 0 |
29fe: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
2a02: ca cf rjmp .-108 ; 0x2998 <osd_ncmode_default+0xb80> |
00002a04 <osd_ncmode_minimal>: |
#include "osd_helpers.h" |
#include "osd_ncmode_default.h" |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
int osd_ncmode_minimal() { |
2a04: ff 92 push r15 |
2a06: 0f 93 push r16 |
2a08: 1f 93 push r17 |
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) { |
2a0a: 80 91 1b 01 lds r24, 0x011B |
2a0e: 80 ff sbrs r24, 0 |
2a10: 15 c1 rjmp .+554 ; 0x2c3c <osd_ncmode_minimal+0x238> |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
2a12: 80 91 1d 01 lds r24, 0x011D |
2a16: 81 ff sbrs r24, 1 |
2a18: e8 c1 rjmp .+976 ; 0x2dea <osd_ncmode_minimal+0x3e6> |
write_char_xy(27, bottom_line, 0xC9); // sat2 |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
} |
// first line |
write_ndigit_number_u(1, top_line, (uint16_t) (((uint32_t) naviData.GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
2a1a: 20 91 d4 01 lds r18, 0x01D4 |
2a1e: 30 91 d5 01 lds r19, 0x01D5 |
2a22: 40 e0 ldi r20, 0x00 ; 0 |
2a24: 50 e0 ldi r21, 0x00 ; 0 |
2a26: ca 01 movw r24, r20 |
2a28: b9 01 movw r22, r18 |
2a2a: 66 0f add r22, r22 |
2a2c: 77 1f adc r23, r23 |
2a2e: 88 1f adc r24, r24 |
2a30: 99 1f adc r25, r25 |
2a32: 66 0f add r22, r22 |
2a34: 77 1f adc r23, r23 |
2a36: 88 1f adc r24, r24 |
2a38: 99 1f adc r25, r25 |
2a3a: 66 0f add r22, r22 |
2a3c: 77 1f adc r23, r23 |
2a3e: 88 1f adc r24, r24 |
2a40: 99 1f adc r25, r25 |
2a42: 62 0f add r22, r18 |
2a44: 73 1f adc r23, r19 |
2a46: 84 1f adc r24, r20 |
2a48: 95 1f adc r25, r21 |
2a4a: 2a ef ldi r18, 0xFA ; 250 |
2a4c: 30 e0 ldi r19, 0x00 ; 0 |
2a4e: 40 e0 ldi r20, 0x00 ; 0 |
2a50: 50 e0 ldi r21, 0x00 ; 0 |
2a52: 0e 94 8f 1c call 0x391e ; 0x391e <__udivmodsi4> |
2a56: 81 e0 ldi r24, 0x01 ; 1 |
2a58: 60 91 02 01 lds r22, 0x0102 |
2a5c: a9 01 movw r20, r18 |
2a5e: 23 e0 ldi r18, 0x03 ; 3 |
2a60: 30 e0 ldi r19, 0x00 ; 0 |
2a62: 00 e0 ldi r16, 0x00 ; 0 |
2a64: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_ndigit_number_u(12, top_line, naviData.HomePositionDeviation.Distance / 10, 3, 0); |
2a68: 80 91 c6 01 lds r24, 0x01C6 |
2a6c: 90 91 c7 01 lds r25, 0x01C7 |
2a70: 6a e0 ldi r22, 0x0A ; 10 |
2a72: 70 e0 ldi r23, 0x00 ; 0 |
2a74: 0e 94 68 1c call 0x38d0 ; 0x38d0 <__udivmodhi4> |
2a78: ab 01 movw r20, r22 |
2a7a: 8c e0 ldi r24, 0x0C ; 12 |
2a7c: 60 91 02 01 lds r22, 0x0102 |
2a80: 23 e0 ldi r18, 0x03 ; 3 |
2a82: 30 e0 ldi r19, 0x00 ; 0 |
2a84: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
uint16_t heading_home = (naviData.HomePositionDeviation.Bearing + 360 - naviData.CompassHeading) % 360; |
2a88: 80 91 c8 01 lds r24, 0x01C8 |
2a8c: 90 91 c9 01 lds r25, 0x01C9 |
2a90: 20 91 d8 01 lds r18, 0x01D8 |
2a94: 30 91 d9 01 lds r19, 0x01D9 |
write_char_xy(17, top_line, 0xa0 + heading_fine_conv(heading_home)); |
2a98: 10 91 02 01 lds r17, 0x0102 |
2a9c: 88 59 subi r24, 0x98 ; 152 |
2a9e: 9e 4f sbci r25, 0xFE ; 254 |
2aa0: 82 1b sub r24, r18 |
2aa2: 93 0b sbc r25, r19 |
2aa4: 68 e6 ldi r22, 0x68 ; 104 |
2aa6: 71 e0 ldi r23, 0x01 ; 1 |
2aa8: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
2aac: 0e 94 cf 08 call 0x119e ; 0x119e <heading_fine_conv> |
2ab0: 48 2f mov r20, r24 |
2ab2: 40 56 subi r20, 0x60 ; 96 |
2ab4: 81 e1 ldi r24, 0x11 ; 17 |
2ab6: 61 2f mov r22, r17 |
2ab8: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
if (naviData.Altimeter > 300 || naviData.Altimeter < -300) { |
2abc: 80 91 cd 01 lds r24, 0x01CD |
2ac0: 90 91 ce 01 lds r25, 0x01CE |
2ac4: 8d 52 subi r24, 0x2D ; 45 |
2ac6: 91 40 sbci r25, 0x01 ; 1 |
2ac8: 44 f4 brge .+16 ; 0x2ada <osd_ncmode_minimal+0xd6> |
2aca: 80 91 cd 01 lds r24, 0x01CD |
2ace: 90 91 ce 01 lds r25, 0x01CE |
2ad2: 84 5d subi r24, 0xD4 ; 212 |
2ad4: 9e 4f sbci r25, 0xFE ; 254 |
2ad6: 0c f0 brlt .+2 ; 0x2ada <osd_ncmode_minimal+0xd6> |
2ad8: 0c c2 rjmp .+1048 ; 0x2ef2 <osd_ncmode_minimal+0x4ee> |
// above 10m only write full meters |
write_ndigit_number_s(22, top_line, naviData.Altimeter / 30, 4, 0); |
2ada: 80 91 cd 01 lds r24, 0x01CD |
2ade: 90 91 ce 01 lds r25, 0x01CE |
2ae2: 6e e1 ldi r22, 0x1E ; 30 |
2ae4: 70 e0 ldi r23, 0x00 ; 0 |
2ae6: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
2aea: ab 01 movw r20, r22 |
2aec: 86 e1 ldi r24, 0x16 ; 22 |
2aee: 60 91 02 01 lds r22, 0x0102 |
2af2: 24 e0 ldi r18, 0x04 ; 4 |
2af4: 30 e0 ldi r19, 0x00 ; 0 |
2af6: 00 e0 ldi r16, 0x00 ; 0 |
2af8: 0e 94 19 07 call 0xe32 ; 0xe32 <write_ndigit_number_s> |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(22, top_line, naviData.Altimeter / 3, 3, 0); |
} |
draw_variometer(27, top_line, naviData.Variometer); |
2afc: 40 91 cf 01 lds r20, 0x01CF |
2b00: 50 91 d0 01 lds r21, 0x01D0 |
2b04: 8b e1 ldi r24, 0x1B ; 27 |
2b06: 60 91 02 01 lds r22, 0x0102 |
2b0a: 0e 94 c1 09 call 0x1382 ; 0x1382 <draw_variometer> |
// center |
if (naviData.FCFlags & FLAG_MOTOR_RUN) { // should be engines running |
2b0e: 80 91 dd 01 lds r24, 0x01DD |
2b12: 80 ff sbrs r24, 0 |
2b14: 10 c1 rjmp .+544 ; 0x2d36 <osd_ncmode_minimal+0x332> |
if (!(old_MKFlags & FLAG_MOTOR_RUN)) { // motors just started, clear middle |
2b16: 80 91 27 01 lds r24, 0x0127 |
2b1a: 80 ff sbrs r24, 0 |
2b1c: a5 c1 rjmp .+842 ; 0x2e68 <osd_ncmode_minimal+0x464> |
2b1e: 80 91 1d 01 lds r24, 0x011D |
clear(); |
// update flags to paint display again if needed |
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN; |
} |
if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { |
2b22: 90 91 1b 01 lds r25, 0x011B |
2b26: 91 ff sbrs r25, 1 |
2b28: 18 c0 rjmp .+48 ; 0x2b5a <osd_ncmode_minimal+0x156> |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
2b2a: 80 ff sbrs r24, 0 |
2b2c: f4 c1 rjmp .+1000 ; 0x2f16 <osd_ncmode_minimal+0x512> |
draw_artificial_horizon(top_line + 2, bottom_line - 2, naviData.AngleNick, naviData.AngleRoll); |
2b2e: 40 91 da 01 lds r20, 0x01DA |
2b32: 20 91 db 01 lds r18, 0x01DB |
2b36: 80 91 02 01 lds r24, 0x0102 |
2b3a: 60 91 03 01 lds r22, 0x0103 |
2b3e: 62 50 subi r22, 0x02 ; 2 |
} else { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
2b40: 55 27 eor r21, r21 |
2b42: 47 fd sbrc r20, 7 |
2b44: 50 95 com r21 |
2b46: 33 27 eor r19, r19 |
2b48: 27 fd sbrc r18, 7 |
2b4a: 30 95 com r19 |
2b4c: 8e 5f subi r24, 0xFE ; 254 |
2b4e: 0e 94 e6 08 call 0x11cc ; 0x11cc <draw_artificial_horizon> |
2b52: 90 91 1b 01 lds r25, 0x011B |
2b56: 80 91 1d 01 lds r24, 0x011D |
} |
} |
// motors are on, assume we were/are flying |
COSD_FLAGS_RUNTIME |= COSD_WASFLYING; |
2b5a: 84 60 ori r24, 0x04 ; 4 |
2b5c: 80 93 1d 01 sts 0x011D, r24 |
} else { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
} |
} |
} |
if (COSD_FLAGS_MODES & COSD_FLAG_BIGVARIO) { |
2b60: 92 fd sbrc r25, 2 |
2b62: 0b c1 rjmp .+534 ; 0x2d7a <osd_ncmode_minimal+0x376> |
draw_big_variometer(27, 8, naviData.Variometer); |
} |
// pre-bottom line |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
2b64: 80 91 1d 01 lds r24, 0x011D |
2b68: 80 fd sbrc r24, 0 |
2b6a: 13 c1 rjmp .+550 ; 0x2d92 <osd_ncmode_minimal+0x38e> |
write_ndigit_number_u_10th(3, bottom_line - 1, ampere / 10, 3, 0); |
write_ndigit_number_s(10, bottom_line - 1, ampere_wasted / 10, 4, 0); |
} |
// bottom line |
draw_battery(2, bottom_line, min_voltage, naviData.UBat, max_voltage); |
2b6c: 20 91 d3 01 lds r18, 0x01D3 |
2b70: 82 e0 ldi r24, 0x02 ; 2 |
2b72: 60 91 03 01 lds r22, 0x0103 |
2b76: 40 91 19 01 lds r20, 0x0119 |
2b7a: 00 91 1a 01 lds r16, 0x011A |
2b7e: 0e 94 17 0a call 0x142e ; 0x142e <draw_battery> |
write_ndigit_number_u_10th(3, bottom_line, naviData.UBat, 3, 0); |
2b82: 40 91 d3 01 lds r20, 0x01D3 |
2b86: 83 e0 ldi r24, 0x03 ; 3 |
2b88: 60 91 03 01 lds r22, 0x0103 |
2b8c: 50 e0 ldi r21, 0x00 ; 0 |
2b8e: 23 e0 ldi r18, 0x03 ; 3 |
2b90: 30 e0 ldi r19, 0x00 ; 0 |
2b92: 00 e0 ldi r16, 0x00 ; 0 |
2b94: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
if (naviData.UBat <= min_voltage && last_UBat > min_voltage) { |
2b98: 80 91 d3 01 lds r24, 0x01D3 |
2b9c: 90 91 19 01 lds r25, 0x0119 |
2ba0: 98 17 cp r25, r24 |
2ba2: 08 f4 brcc .+2 ; 0x2ba6 <osd_ncmode_minimal+0x1a2> |
2ba4: 69 c1 rjmp .+722 ; 0x2e78 <osd_ncmode_minimal+0x474> |
2ba6: 80 91 00 01 lds r24, 0x0100 |
2baa: 98 17 cp r25, r24 |
2bac: 08 f0 brcs .+2 ; 0x2bb0 <osd_ncmode_minimal+0x1ac> |
2bae: 64 c1 rjmp .+712 ; 0x2e78 <osd_ncmode_minimal+0x474> |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
2bb0: 82 e0 ldi r24, 0x02 ; 2 |
2bb2: 60 91 03 01 lds r22, 0x0103 |
2bb6: 4f e4 ldi r20, 0x4F ; 79 |
2bb8: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2bbc: 83 e0 ldi r24, 0x03 ; 3 |
2bbe: 60 91 03 01 lds r22, 0x0103 |
2bc2: 4f e4 ldi r20, 0x4F ; 79 |
2bc4: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2bc8: 84 e0 ldi r24, 0x04 ; 4 |
2bca: 60 91 03 01 lds r22, 0x0103 |
2bce: 4f e4 ldi r20, 0x4F ; 79 |
2bd0: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2bd4: 85 e0 ldi r24, 0x05 ; 5 |
2bd6: 60 91 03 01 lds r22, 0x0103 |
2bda: 4f e4 ldi r20, 0x4F ; 79 |
2bdc: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2be0: 86 e0 ldi r24, 0x06 ; 6 |
2be2: 60 91 03 01 lds r22, 0x0103 |
2be6: 4f e4 ldi r20, 0x4F ; 79 |
2be8: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2bec: 87 e0 ldi r24, 0x07 ; 7 |
2bee: 60 91 03 01 lds r22, 0x0103 |
2bf2: 4f e4 ldi r20, 0x4F ; 79 |
2bf4: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
} else if (naviData.UBat > min_voltage && last_UBat < min_voltage) { |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, 0); |
} |
write_time(11, bottom_line, naviData.FlyingTime); |
2bf8: 40 91 d1 01 lds r20, 0x01D1 |
2bfc: 50 91 d2 01 lds r21, 0x01D2 |
2c00: 8b e0 ldi r24, 0x0B ; 11 |
2c02: 60 91 03 01 lds r22, 0x0103 |
2c06: 0e 94 3a 08 call 0x1074 ; 0x1074 <write_time> |
write_ndigit_number_u(24, bottom_line, naviData.SatsInUse, 2, 0); |
2c0a: 40 91 cc 01 lds r20, 0x01CC |
2c0e: 88 e1 ldi r24, 0x18 ; 24 |
2c10: 60 91 03 01 lds r22, 0x0103 |
2c14: 50 e0 ldi r21, 0x00 ; 0 |
2c16: 22 e0 ldi r18, 0x02 ; 2 |
2c18: 30 e0 ldi r19, 0x00 ; 0 |
2c1a: 00 e0 ldi r16, 0x00 ; 0 |
2c1c: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
if (naviData.NCFlags & NC_FLAG_CH) { |
2c20: 80 91 de 01 lds r24, 0x01DE |
2c24: 82 fd sbrc r24, 2 |
2c26: 5e c1 rjmp .+700 ; 0x2ee4 <osd_ncmode_minimal+0x4e0> |
write_char_xy(27, bottom_line, 231); // gps ch |
} else if (naviData.NCFlags & NC_FLAG_PH) { |
2c28: 80 91 de 01 lds r24, 0x01DE |
2c2c: 81 ff sbrs r24, 1 |
2c2e: 53 c1 rjmp .+678 ; 0x2ed6 <osd_ncmode_minimal+0x4d2> |
write_char_xy(27, bottom_line, 230); // gps ph |
2c30: 8b e1 ldi r24, 0x1B ; 27 |
2c32: 60 91 03 01 lds r22, 0x0103 |
2c36: 46 ee ldi r20, 0xE6 ; 230 |
2c38: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(27, bottom_line, 201); // sat2 (free) |
} |
} |
// remember statistics (only when engines running) |
if (naviData.FCFlags & FLAG_MOTOR_RUN) { |
2c3c: 80 91 dd 01 lds r24, 0x01DD |
2c40: 80 ff sbrs r24, 0 |
2c42: 65 c0 rjmp .+202 ; 0x2d0e <osd_ncmode_minimal+0x30a> |
if (naviData.Altimeter > max_Altimeter) max_Altimeter = naviData.Altimeter; |
2c44: 20 91 cd 01 lds r18, 0x01CD |
2c48: 30 91 ce 01 lds r19, 0x01CE |
2c4c: 80 91 1f 01 lds r24, 0x011F |
2c50: 90 91 20 01 lds r25, 0x0120 |
2c54: 82 17 cp r24, r18 |
2c56: 93 07 cpc r25, r19 |
2c58: 44 f4 brge .+16 ; 0x2c6a <osd_ncmode_minimal+0x266> |
2c5a: 80 91 cd 01 lds r24, 0x01CD |
2c5e: 90 91 ce 01 lds r25, 0x01CE |
2c62: 90 93 20 01 sts 0x0120, r25 |
2c66: 80 93 1f 01 sts 0x011F, r24 |
if (naviData.GroundSpeed > max_GroundSpeed) max_GroundSpeed = naviData.GroundSpeed; |
2c6a: 20 91 d4 01 lds r18, 0x01D4 |
2c6e: 30 91 d5 01 lds r19, 0x01D5 |
2c72: 80 91 21 01 lds r24, 0x0121 |
2c76: 90 91 22 01 lds r25, 0x0122 |
2c7a: 82 17 cp r24, r18 |
2c7c: 93 07 cpc r25, r19 |
2c7e: 40 f4 brcc .+16 ; 0x2c90 <osd_ncmode_minimal+0x28c> |
2c80: 80 91 d4 01 lds r24, 0x01D4 |
2c84: 90 91 d5 01 lds r25, 0x01D5 |
2c88: 90 93 22 01 sts 0x0122, r25 |
2c8c: 80 93 21 01 sts 0x0121, r24 |
if (naviData.HomePositionDeviation.Distance > max_Distance) { |
2c90: 20 91 c6 01 lds r18, 0x01C6 |
2c94: 30 91 c7 01 lds r19, 0x01C7 |
2c98: 80 91 23 01 lds r24, 0x0123 |
2c9c: 90 91 24 01 lds r25, 0x0124 |
2ca0: 82 17 cp r24, r18 |
2ca2: 93 07 cpc r25, r19 |
2ca4: 40 f4 brcc .+16 ; 0x2cb6 <osd_ncmode_minimal+0x2b2> |
max_Distance = naviData.HomePositionDeviation.Distance; |
2ca6: 80 91 c6 01 lds r24, 0x01C6 |
2caa: 90 91 c7 01 lds r25, 0x01C7 |
2cae: 90 93 24 01 sts 0x0124, r25 |
2cb2: 80 93 23 01 sts 0x0123, r24 |
} |
if (naviData.UBat < min_UBat) min_UBat = naviData.UBat; |
2cb6: 90 91 d3 01 lds r25, 0x01D3 |
2cba: 80 91 04 01 lds r24, 0x0104 |
2cbe: 98 17 cp r25, r24 |
2cc0: 20 f4 brcc .+8 ; 0x2cca <osd_ncmode_minimal+0x2c6> |
2cc2: 80 91 d3 01 lds r24, 0x01D3 |
2cc6: 80 93 04 01 sts 0x0104, r24 |
if (naviData.FlyingTime > max_FlyingTime) max_FlyingTime = naviData.FlyingTime; |
2cca: 20 91 d1 01 lds r18, 0x01D1 |
2cce: 30 91 d2 01 lds r19, 0x01D2 |
2cd2: 80 91 25 01 lds r24, 0x0125 |
2cd6: 90 91 26 01 lds r25, 0x0126 |
2cda: 82 17 cp r24, r18 |
2cdc: 93 07 cpc r25, r19 |
2cde: 40 f4 brcc .+16 ; 0x2cf0 <osd_ncmode_minimal+0x2ec> |
2ce0: 80 91 d1 01 lds r24, 0x01D1 |
2ce4: 90 91 d2 01 lds r25, 0x01D2 |
2ce8: 90 93 26 01 sts 0x0126, r25 |
2cec: 80 93 25 01 sts 0x0125, r24 |
if (ampere > max_ampere) max_ampere = ampere; |
2cf0: 20 91 37 01 lds r18, 0x0137 |
2cf4: 30 91 38 01 lds r19, 0x0138 |
2cf8: 80 91 39 01 lds r24, 0x0139 |
2cfc: 90 91 3a 01 lds r25, 0x013A |
2d00: 82 17 cp r24, r18 |
2d02: 93 07 cpc r25, r19 |
2d04: 24 f4 brge .+8 ; 0x2d0e <osd_ncmode_minimal+0x30a> |
2d06: 30 93 3a 01 sts 0x013A, r19 |
2d0a: 20 93 39 01 sts 0x0139, r18 |
} |
// remember last values |
last_RC_Quality = naviData.RC_Quality; |
2d0e: 80 91 dc 01 lds r24, 0x01DC |
2d12: 80 93 01 01 sts 0x0101, r24 |
last_UBat = naviData.UBat; |
2d16: 80 91 d3 01 lds r24, 0x01D3 |
2d1a: 80 93 00 01 sts 0x0100, r24 |
old_MKFlags = naviData.FCFlags; |
2d1e: 80 91 dd 01 lds r24, 0x01DD |
2d22: 80 93 27 01 sts 0x0127, r24 |
seconds_since_last_data = 0; |
2d26: 10 92 18 01 sts 0x0118, r1 |
return 0; |
} |
2d2a: 80 e0 ldi r24, 0x00 ; 0 |
2d2c: 90 e0 ldi r25, 0x00 ; 0 |
2d2e: 1f 91 pop r17 |
2d30: 0f 91 pop r16 |
2d32: ff 90 pop r15 |
2d34: 08 95 ret |
} |
// motors are on, assume we were/are flying |
COSD_FLAGS_RUNTIME |= COSD_WASFLYING; |
} else { |
// stats |
if ((COSD_FLAGS_RUNTIME & COSD_WASFLYING) && (COSD_FLAGS_MODES & COSD_FLAG_STATS)) { |
2d36: 80 91 1d 01 lds r24, 0x011D |
2d3a: 82 ff sbrs r24, 2 |
2d3c: 92 c0 rjmp .+292 ; 0x2e62 <osd_ncmode_minimal+0x45e> |
2d3e: 90 91 1b 01 lds r25, 0x011B |
2d42: 93 fd sbrc r25, 3 |
2d44: fc c0 rjmp .+504 ; 0x2f3e <osd_ncmode_minimal+0x53a> |
write_char_xy(22, line, 210); // fly clock |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[5])))); // longitude |
write_gps_pos(15, line, naviData.CurrentPosition.Longitude); |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[6])))); // latitude |
write_gps_pos(15, line, naviData.CurrentPosition.Latitude); |
} else if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { // if no stats there is space horizon |
2d46: 91 ff sbrs r25, 1 |
2d48: 0b cf rjmp .-490 ; 0x2b60 <osd_ncmode_minimal+0x15c> |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
2d4a: 80 ff sbrs r24, 0 |
2d4c: ee c0 rjmp .+476 ; 0x2f2a <osd_ncmode_minimal+0x526> |
draw_artificial_horizon(top_line + 2, bottom_line - 2, naviData.AngleNick, naviData.AngleRoll); |
2d4e: 40 91 da 01 lds r20, 0x01DA |
2d52: 20 91 db 01 lds r18, 0x01DB |
2d56: 80 91 02 01 lds r24, 0x0102 |
2d5a: 60 91 03 01 lds r22, 0x0103 |
2d5e: 62 50 subi r22, 0x02 ; 2 |
} else { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
2d60: 55 27 eor r21, r21 |
2d62: 47 fd sbrc r20, 7 |
2d64: 50 95 com r21 |
2d66: 33 27 eor r19, r19 |
2d68: 27 fd sbrc r18, 7 |
2d6a: 30 95 com r19 |
2d6c: 8e 5f subi r24, 0xFE ; 254 |
2d6e: 0e 94 e6 08 call 0x11cc ; 0x11cc <draw_artificial_horizon> |
2d72: 90 91 1b 01 lds r25, 0x011B |
} |
} |
} |
if (COSD_FLAGS_MODES & COSD_FLAG_BIGVARIO) { |
2d76: 92 ff sbrs r25, 2 |
2d78: f5 ce rjmp .-534 ; 0x2b64 <osd_ncmode_minimal+0x160> |
draw_big_variometer(27, 8, naviData.Variometer); |
2d7a: 40 91 cf 01 lds r20, 0x01CF |
2d7e: 50 91 d0 01 lds r21, 0x01D0 |
2d82: 8b e1 ldi r24, 0x1B ; 27 |
2d84: 68 e0 ldi r22, 0x08 ; 8 |
2d86: 0e 94 84 0a call 0x1508 ; 0x1508 <draw_big_variometer> |
} |
// pre-bottom line |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
2d8a: 80 91 1d 01 lds r24, 0x011D |
2d8e: 80 ff sbrs r24, 0 |
2d90: ed ce rjmp .-550 ; 0x2b6c <osd_ncmode_minimal+0x168> |
//write_ndigit_number_s(3, bottom_line - 1, ampere, 4, 0); |
write_ndigit_number_u_10th(3, bottom_line - 1, ampere / 10, 3, 0); |
2d92: 20 91 03 01 lds r18, 0x0103 |
2d96: 21 50 subi r18, 0x01 ; 1 |
2d98: 80 91 37 01 lds r24, 0x0137 |
2d9c: 90 91 38 01 lds r25, 0x0138 |
2da0: 6a e0 ldi r22, 0x0A ; 10 |
2da2: 70 e0 ldi r23, 0x00 ; 0 |
2da4: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
2da8: ab 01 movw r20, r22 |
2daa: 83 e0 ldi r24, 0x03 ; 3 |
2dac: 62 2f mov r22, r18 |
2dae: 23 e0 ldi r18, 0x03 ; 3 |
2db0: 30 e0 ldi r19, 0x00 ; 0 |
2db2: 00 e0 ldi r16, 0x00 ; 0 |
2db4: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
write_ndigit_number_s(10, bottom_line - 1, ampere_wasted / 10, 4, 0); |
2db8: 10 91 03 01 lds r17, 0x0103 |
2dbc: 11 50 subi r17, 0x01 ; 1 |
2dbe: 60 91 3b 01 lds r22, 0x013B |
2dc2: 70 91 3c 01 lds r23, 0x013C |
2dc6: 80 91 3d 01 lds r24, 0x013D |
2dca: 90 91 3e 01 lds r25, 0x013E |
2dce: 2a e0 ldi r18, 0x0A ; 10 |
2dd0: 30 e0 ldi r19, 0x00 ; 0 |
2dd2: 40 e0 ldi r20, 0x00 ; 0 |
2dd4: 50 e0 ldi r21, 0x00 ; 0 |
2dd6: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
2dda: 8a e0 ldi r24, 0x0A ; 10 |
2ddc: 61 2f mov r22, r17 |
2dde: a9 01 movw r20, r18 |
2de0: 24 e0 ldi r18, 0x04 ; 4 |
2de2: 30 e0 ldi r19, 0x00 ; 0 |
2de4: 0e 94 19 07 call 0xe32 ; 0xe32 <write_ndigit_number_s> |
2de8: c1 ce rjmp .-638 ; 0x2b6c <osd_ncmode_minimal+0x168> |
int osd_ncmode_minimal() { |
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) { |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
write_char_xy(4, top_line, 0xCB); // km/h |
2dea: 84 e0 ldi r24, 0x04 ; 4 |
2dec: 60 91 02 01 lds r22, 0x0102 |
2df0: 4b ec ldi r20, 0xCB ; 203 |
2df2: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(15, top_line, 0xCC); // small meters m height |
2df6: 8f e0 ldi r24, 0x0F ; 15 |
2df8: 60 91 02 01 lds r22, 0x0102 |
2dfc: 4c ec ldi r20, 0xCC ; 204 |
2dfe: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(26, top_line, 0xCC); // small meters m height |
2e02: 8a e1 ldi r24, 0x1A ; 26 |
2e04: 60 91 02 01 lds r22, 0x0102 |
2e08: 4c ec ldi r20, 0xCC ; 204 |
2e0a: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(16, top_line, 0xB0); // left circle |
2e0e: 80 e1 ldi r24, 0x10 ; 16 |
2e10: 60 91 02 01 lds r22, 0x0102 |
2e14: 40 eb ldi r20, 0xB0 ; 176 |
2e16: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(18, top_line, 0xB2); // right circle |
2e1a: 82 e1 ldi r24, 0x12 ; 18 |
2e1c: 60 91 02 01 lds r22, 0x0102 |
2e20: 42 eb ldi r20, 0xB2 ; 178 |
2e22: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(7, bottom_line, 0x9E); // small V |
2e26: 87 e0 ldi r24, 0x07 ; 7 |
2e28: 60 91 03 01 lds r22, 0x0103 |
2e2c: 4e e9 ldi r20, 0x9E ; 158 |
2e2e: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(17, bottom_line, 0xD2); // fly clock |
2e32: 81 e1 ldi r24, 0x11 ; 17 |
2e34: 60 91 03 01 lds r22, 0x0103 |
2e38: 42 ed ldi r20, 0xD2 ; 210 |
2e3a: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(26, bottom_line, 0xC8); // sat1 |
2e3e: 8a e1 ldi r24, 0x1A ; 26 |
2e40: 60 91 03 01 lds r22, 0x0103 |
2e44: 48 ec ldi r20, 0xC8 ; 200 |
2e46: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(27, bottom_line, 0xC9); // sat2 |
2e4a: 8b e1 ldi r24, 0x1B ; 27 |
2e4c: 60 91 03 01 lds r22, 0x0103 |
2e50: 49 ec ldi r20, 0xC9 ; 201 |
2e52: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
2e56: 80 91 1d 01 lds r24, 0x011D |
2e5a: 82 60 ori r24, 0x02 ; 2 |
2e5c: 80 93 1d 01 sts 0x011D, r24 |
2e60: dc cd rjmp .-1096 ; 0x2a1a <osd_ncmode_minimal+0x16> |
2e62: 90 91 1b 01 lds r25, 0x011B |
2e66: 6f cf rjmp .-290 ; 0x2d46 <osd_ncmode_minimal+0x342> |
// center |
if (naviData.FCFlags & FLAG_MOTOR_RUN) { // should be engines running |
if (!(old_MKFlags & FLAG_MOTOR_RUN)) { // motors just started, clear middle |
clear(); |
2e68: 0e 94 75 08 call 0x10ea ; 0x10ea <clear> |
// update flags to paint display again if needed |
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN; |
2e6c: 80 91 1d 01 lds r24, 0x011D |
2e70: 8d 7f andi r24, 0xFD ; 253 |
2e72: 80 93 1d 01 sts 0x011D, r24 |
2e76: 55 ce rjmp .-854 ; 0x2b22 <osd_ncmode_minimal+0x11e> |
draw_battery(2, bottom_line, min_voltage, naviData.UBat, max_voltage); |
write_ndigit_number_u_10th(3, bottom_line, naviData.UBat, 3, 0); |
if (naviData.UBat <= min_voltage && last_UBat > min_voltage) { |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
} else if (naviData.UBat > min_voltage && last_UBat < min_voltage) { |
2e78: 80 91 d3 01 lds r24, 0x01D3 |
2e7c: 98 17 cp r25, r24 |
2e7e: 08 f0 brcs .+2 ; 0x2e82 <osd_ncmode_minimal+0x47e> |
2e80: bb ce rjmp .-650 ; 0x2bf8 <osd_ncmode_minimal+0x1f4> |
2e82: 80 91 00 01 lds r24, 0x0100 |
2e86: 89 17 cp r24, r25 |
2e88: 08 f0 brcs .+2 ; 0x2e8c <osd_ncmode_minimal+0x488> |
2e8a: b6 ce rjmp .-660 ; 0x2bf8 <osd_ncmode_minimal+0x1f4> |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, 0); |
2e8c: 82 e0 ldi r24, 0x02 ; 2 |
2e8e: 60 91 03 01 lds r22, 0x0103 |
2e92: 40 e0 ldi r20, 0x00 ; 0 |
2e94: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2e98: 83 e0 ldi r24, 0x03 ; 3 |
2e9a: 60 91 03 01 lds r22, 0x0103 |
2e9e: 40 e0 ldi r20, 0x00 ; 0 |
2ea0: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2ea4: 84 e0 ldi r24, 0x04 ; 4 |
2ea6: 60 91 03 01 lds r22, 0x0103 |
2eaa: 40 e0 ldi r20, 0x00 ; 0 |
2eac: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2eb0: 85 e0 ldi r24, 0x05 ; 5 |
2eb2: 60 91 03 01 lds r22, 0x0103 |
2eb6: 40 e0 ldi r20, 0x00 ; 0 |
2eb8: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2ebc: 86 e0 ldi r24, 0x06 ; 6 |
2ebe: 60 91 03 01 lds r22, 0x0103 |
2ec2: 40 e0 ldi r20, 0x00 ; 0 |
2ec4: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2ec8: 87 e0 ldi r24, 0x07 ; 7 |
2eca: 60 91 03 01 lds r22, 0x0103 |
2ece: 40 e0 ldi r20, 0x00 ; 0 |
2ed0: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
2ed4: 91 ce rjmp .-734 ; 0x2bf8 <osd_ncmode_minimal+0x1f4> |
if (naviData.NCFlags & NC_FLAG_CH) { |
write_char_xy(27, bottom_line, 231); // gps ch |
} else if (naviData.NCFlags & NC_FLAG_PH) { |
write_char_xy(27, bottom_line, 230); // gps ph |
} else { // (naviData.NCFlags & NC_FLAG_FREE) |
write_char_xy(27, bottom_line, 201); // sat2 (free) |
2ed6: 8b e1 ldi r24, 0x1B ; 27 |
2ed8: 60 91 03 01 lds r22, 0x0103 |
2edc: 49 ec ldi r20, 0xC9 ; 201 |
2ede: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
2ee2: ac ce rjmp .-680 ; 0x2c3c <osd_ncmode_minimal+0x238> |
write_time(11, bottom_line, naviData.FlyingTime); |
write_ndigit_number_u(24, bottom_line, naviData.SatsInUse, 2, 0); |
if (naviData.NCFlags & NC_FLAG_CH) { |
write_char_xy(27, bottom_line, 231); // gps ch |
2ee4: 8b e1 ldi r24, 0x1B ; 27 |
2ee6: 60 91 03 01 lds r22, 0x0103 |
2eea: 47 ee ldi r20, 0xE7 ; 231 |
2eec: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
2ef0: a5 ce rjmp .-694 ; 0x2c3c <osd_ncmode_minimal+0x238> |
if (naviData.Altimeter > 300 || naviData.Altimeter < -300) { |
// above 10m only write full meters |
write_ndigit_number_s(22, top_line, naviData.Altimeter / 30, 4, 0); |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(22, top_line, naviData.Altimeter / 3, 3, 0); |
2ef2: 80 91 cd 01 lds r24, 0x01CD |
2ef6: 90 91 ce 01 lds r25, 0x01CE |
2efa: 63 e0 ldi r22, 0x03 ; 3 |
2efc: 70 e0 ldi r23, 0x00 ; 0 |
2efe: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
2f02: ab 01 movw r20, r22 |
2f04: 86 e1 ldi r24, 0x16 ; 22 |
2f06: 60 91 02 01 lds r22, 0x0102 |
2f0a: 23 e0 ldi r18, 0x03 ; 3 |
2f0c: 30 e0 ldi r19, 0x00 ; 0 |
2f0e: 00 e0 ldi r16, 0x00 ; 0 |
2f10: 0e 94 d3 05 call 0xba6 ; 0xba6 <write_ndigit_number_s_10th> |
2f14: f3 cd rjmp .-1050 ; 0x2afc <osd_ncmode_minimal+0xf8> |
} |
if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
draw_artificial_horizon(top_line + 2, bottom_line - 2, naviData.AngleNick, naviData.AngleRoll); |
} else { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
2f16: 40 91 da 01 lds r20, 0x01DA |
2f1a: 20 91 db 01 lds r18, 0x01DB |
2f1e: 80 91 02 01 lds r24, 0x0102 |
2f22: 60 91 03 01 lds r22, 0x0103 |
2f26: 61 50 subi r22, 0x01 ; 1 |
2f28: 0b ce rjmp .-1002 ; 0x2b40 <osd_ncmode_minimal+0x13c> |
write_gps_pos(15, line, naviData.CurrentPosition.Latitude); |
} else if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { // if no stats there is space horizon |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
draw_artificial_horizon(top_line + 2, bottom_line - 2, naviData.AngleNick, naviData.AngleRoll); |
} else { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
2f2a: 40 91 da 01 lds r20, 0x01DA |
2f2e: 20 91 db 01 lds r18, 0x01DB |
2f32: 80 91 02 01 lds r24, 0x0102 |
2f36: 60 91 03 01 lds r22, 0x0103 |
2f3a: 61 50 subi r22, 0x01 ; 1 |
2f3c: 11 cf rjmp .-478 ; 0x2d60 <osd_ncmode_minimal+0x35c> |
COSD_FLAGS_RUNTIME |= COSD_WASFLYING; |
} else { |
// stats |
if ((COSD_FLAGS_RUNTIME & COSD_WASFLYING) && (COSD_FLAGS_MODES & COSD_FLAG_STATS)) { |
uint8_t line = 3; |
write_ascii_string_pgm(2, line, (const char *) (pgm_read_word(&(stats_item_pointers[0])))); // max Altitude |
2f3e: e0 ee ldi r30, 0xE0 ; 224 |
2f40: f0 e0 ldi r31, 0x00 ; 0 |
2f42: 45 91 lpm r20, Z+ |
2f44: 54 91 lpm r21, Z+ |
2f46: 82 e0 ldi r24, 0x02 ; 2 |
2f48: 63 e0 ldi r22, 0x03 ; 3 |
2f4a: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_s(18, line, max_Altimeter / 30, 4, 0); |
2f4e: 80 91 1f 01 lds r24, 0x011F |
2f52: 90 91 20 01 lds r25, 0x0120 |
2f56: 6e e1 ldi r22, 0x1E ; 30 |
2f58: 70 e0 ldi r23, 0x00 ; 0 |
2f5a: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
2f5e: ab 01 movw r20, r22 |
2f60: 82 e1 ldi r24, 0x12 ; 18 |
2f62: 63 e0 ldi r22, 0x03 ; 3 |
2f64: 24 e0 ldi r18, 0x04 ; 4 |
2f66: 30 e0 ldi r19, 0x00 ; 0 |
2f68: 00 e0 ldi r16, 0x00 ; 0 |
2f6a: 0e 94 19 07 call 0xe32 ; 0xe32 <write_ndigit_number_s> |
write_char_xy(22, line, 204); // small meters m |
2f6e: 86 e1 ldi r24, 0x16 ; 22 |
2f70: 63 e0 ldi r22, 0x03 ; 3 |
2f72: 4c ec ldi r20, 0xCC ; 204 |
2f74: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[1])))); // max Speed |
2f78: e2 ee ldi r30, 0xE2 ; 226 |
2f7a: f0 e0 ldi r31, 0x00 ; 0 |
2f7c: 45 91 lpm r20, Z+ |
2f7e: 54 91 lpm r21, Z+ |
2f80: 82 e0 ldi r24, 0x02 ; 2 |
2f82: 64 e0 ldi r22, 0x04 ; 4 |
2f84: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_u(19, line, (uint16_t) (((uint32_t) max_GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
2f88: 20 91 21 01 lds r18, 0x0121 |
2f8c: 30 91 22 01 lds r19, 0x0122 |
2f90: 40 e0 ldi r20, 0x00 ; 0 |
2f92: 50 e0 ldi r21, 0x00 ; 0 |
2f94: ca 01 movw r24, r20 |
2f96: b9 01 movw r22, r18 |
2f98: 66 0f add r22, r22 |
2f9a: 77 1f adc r23, r23 |
2f9c: 88 1f adc r24, r24 |
2f9e: 99 1f adc r25, r25 |
2fa0: 66 0f add r22, r22 |
2fa2: 77 1f adc r23, r23 |
2fa4: 88 1f adc r24, r24 |
2fa6: 99 1f adc r25, r25 |
2fa8: 66 0f add r22, r22 |
2faa: 77 1f adc r23, r23 |
2fac: 88 1f adc r24, r24 |
2fae: 99 1f adc r25, r25 |
2fb0: 62 0f add r22, r18 |
2fb2: 73 1f adc r23, r19 |
2fb4: 84 1f adc r24, r20 |
2fb6: 95 1f adc r25, r21 |
2fb8: 2a ef ldi r18, 0xFA ; 250 |
2fba: 30 e0 ldi r19, 0x00 ; 0 |
2fbc: 40 e0 ldi r20, 0x00 ; 0 |
2fbe: 50 e0 ldi r21, 0x00 ; 0 |
2fc0: 0e 94 8f 1c call 0x391e ; 0x391e <__udivmodsi4> |
2fc4: 83 e1 ldi r24, 0x13 ; 19 |
2fc6: 64 e0 ldi r22, 0x04 ; 4 |
2fc8: a9 01 movw r20, r18 |
2fca: 23 e0 ldi r18, 0x03 ; 3 |
2fcc: 30 e0 ldi r19, 0x00 ; 0 |
2fce: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_char_xy(22, line, 203); // km/h |
2fd2: 86 e1 ldi r24, 0x16 ; 22 |
2fd4: 64 e0 ldi r22, 0x04 ; 4 |
2fd6: 4b ec ldi r20, 0xCB ; 203 |
2fd8: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[2])))); // max Distance |
2fdc: e4 ee ldi r30, 0xE4 ; 228 |
2fde: f0 e0 ldi r31, 0x00 ; 0 |
2fe0: 45 91 lpm r20, Z+ |
2fe2: 54 91 lpm r21, Z+ |
2fe4: 82 e0 ldi r24, 0x02 ; 2 |
2fe6: 65 e0 ldi r22, 0x05 ; 5 |
2fe8: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_u(19, line, max_Distance / 10, 3, 0); |
2fec: 80 91 23 01 lds r24, 0x0123 |
2ff0: 90 91 24 01 lds r25, 0x0124 |
2ff4: 6a e0 ldi r22, 0x0A ; 10 |
2ff6: 70 e0 ldi r23, 0x00 ; 0 |
2ff8: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
2ffc: ab 01 movw r20, r22 |
2ffe: 83 e1 ldi r24, 0x13 ; 19 |
3000: 65 e0 ldi r22, 0x05 ; 5 |
3002: 23 e0 ldi r18, 0x03 ; 3 |
3004: 30 e0 ldi r19, 0x00 ; 0 |
3006: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_char_xy(22, line, 204); // small meters m |
300a: 86 e1 ldi r24, 0x16 ; 22 |
300c: 65 e0 ldi r22, 0x05 ; 5 |
300e: 4c ec ldi r20, 0xCC ; 204 |
3010: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[3])))); // min voltage |
3014: e6 ee ldi r30, 0xE6 ; 230 |
3016: f0 e0 ldi r31, 0x00 ; 0 |
3018: 45 91 lpm r20, Z+ |
301a: 54 91 lpm r21, Z+ |
301c: 82 e0 ldi r24, 0x02 ; 2 |
301e: 66 e0 ldi r22, 0x06 ; 6 |
3020: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_u_10th(18, line, min_UBat, 3, 0); |
3024: 40 91 04 01 lds r20, 0x0104 |
3028: 82 e1 ldi r24, 0x12 ; 18 |
302a: 66 e0 ldi r22, 0x06 ; 6 |
302c: 50 e0 ldi r21, 0x00 ; 0 |
302e: 23 e0 ldi r18, 0x03 ; 3 |
3030: 30 e0 ldi r19, 0x00 ; 0 |
3032: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
write_char_xy(22, line, 0x9E); // small V |
3036: 86 e1 ldi r24, 0x16 ; 22 |
3038: 66 e0 ldi r22, 0x06 ; 6 |
303a: 4e e9 ldi r20, 0x9E ; 158 |
303c: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
3040: 80 91 1d 01 lds r24, 0x011D |
3044: 80 fd sbrc r24, 0 |
3046: 44 c0 rjmp .+136 ; 0x30d0 <osd_ncmode_minimal+0x6cc> |
3048: 17 e0 ldi r17, 0x07 ; 7 |
304a: 08 e0 ldi r16, 0x08 ; 8 |
304c: 99 e0 ldi r25, 0x09 ; 9 |
304e: f9 2e mov r15, r25 |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[7])))); // ampere |
write_ndigit_number_u_10th(18, line, max_ampere / 10, 3, 0); |
write_char_xy(22, line, 0x9F); // small A |
} |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[4])))); // max time |
3050: e8 ee ldi r30, 0xE8 ; 232 |
3052: f0 e0 ldi r31, 0x00 ; 0 |
3054: 45 91 lpm r20, Z+ |
3056: 54 91 lpm r21, Z+ |
3058: 82 e0 ldi r24, 0x02 ; 2 |
305a: 61 2f mov r22, r17 |
305c: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_time(16, line, max_FlyingTime); |
3060: 40 91 25 01 lds r20, 0x0125 |
3064: 50 91 26 01 lds r21, 0x0126 |
3068: 80 e1 ldi r24, 0x10 ; 16 |
306a: 61 2f mov r22, r17 |
306c: 0e 94 3a 08 call 0x1074 ; 0x1074 <write_time> |
write_char_xy(22, line, 210); // fly clock |
3070: 86 e1 ldi r24, 0x16 ; 22 |
3072: 61 2f mov r22, r17 |
3074: 42 ed ldi r20, 0xD2 ; 210 |
3076: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[5])))); // longitude |
307a: ea ee ldi r30, 0xEA ; 234 |
307c: f0 e0 ldi r31, 0x00 ; 0 |
307e: 45 91 lpm r20, Z+ |
3080: 54 91 lpm r21, Z+ |
3082: 82 e0 ldi r24, 0x02 ; 2 |
3084: 60 2f mov r22, r16 |
3086: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_gps_pos(15, line, naviData.CurrentPosition.Longitude); |
308a: 20 91 9b 01 lds r18, 0x019B |
308e: 30 91 9c 01 lds r19, 0x019C |
3092: 40 91 9d 01 lds r20, 0x019D |
3096: 50 91 9e 01 lds r21, 0x019E |
309a: 8f e0 ldi r24, 0x0F ; 15 |
309c: 60 2f mov r22, r16 |
309e: 0e 94 bd 07 call 0xf7a ; 0xf7a <write_gps_pos> |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[6])))); // latitude |
30a2: ec ee ldi r30, 0xEC ; 236 |
30a4: f0 e0 ldi r31, 0x00 ; 0 |
30a6: 45 91 lpm r20, Z+ |
30a8: 54 91 lpm r21, Z+ |
30aa: 82 e0 ldi r24, 0x02 ; 2 |
30ac: 6f 2d mov r22, r15 |
30ae: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_gps_pos(15, line, naviData.CurrentPosition.Latitude); |
30b2: 20 91 9f 01 lds r18, 0x019F |
30b6: 30 91 a0 01 lds r19, 0x01A0 |
30ba: 40 91 a1 01 lds r20, 0x01A1 |
30be: 50 91 a2 01 lds r21, 0x01A2 |
30c2: 8f e0 ldi r24, 0x0F ; 15 |
30c4: 6f 2d mov r22, r15 |
30c6: 0e 94 bd 07 call 0xf7a ; 0xf7a <write_gps_pos> |
30ca: 90 91 1b 01 lds r25, 0x011B |
30ce: 48 cd rjmp .-1392 ; 0x2b60 <osd_ncmode_minimal+0x15c> |
write_char_xy(22, line, 204); // small meters m |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[3])))); // min voltage |
write_ndigit_number_u_10th(18, line, min_UBat, 3, 0); |
write_char_xy(22, line, 0x9E); // small V |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
write_ascii_string_pgm(2, ++line, (const char *) (pgm_read_word(&(stats_item_pointers[7])))); // ampere |
30d0: ee ee ldi r30, 0xEE ; 238 |
30d2: f0 e0 ldi r31, 0x00 ; 0 |
30d4: 45 91 lpm r20, Z+ |
30d6: 54 91 lpm r21, Z+ |
30d8: 82 e0 ldi r24, 0x02 ; 2 |
30da: 67 e0 ldi r22, 0x07 ; 7 |
30dc: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
write_ndigit_number_u_10th(18, line, max_ampere / 10, 3, 0); |
30e0: 80 91 39 01 lds r24, 0x0139 |
30e4: 90 91 3a 01 lds r25, 0x013A |
30e8: 6a e0 ldi r22, 0x0A ; 10 |
30ea: 70 e0 ldi r23, 0x00 ; 0 |
30ec: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
30f0: ab 01 movw r20, r22 |
30f2: 82 e1 ldi r24, 0x12 ; 18 |
30f4: 67 e0 ldi r22, 0x07 ; 7 |
30f6: 23 e0 ldi r18, 0x03 ; 3 |
30f8: 30 e0 ldi r19, 0x00 ; 0 |
30fa: 00 e0 ldi r16, 0x00 ; 0 |
30fc: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
write_char_xy(22, line, 0x9F); // small A |
3100: 86 e1 ldi r24, 0x16 ; 22 |
3102: 67 e0 ldi r22, 0x07 ; 7 |
3104: 4f e9 ldi r20, 0x9F ; 159 |
3106: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
310a: 18 e0 ldi r17, 0x08 ; 8 |
310c: 09 e0 ldi r16, 0x09 ; 9 |
310e: 8a e0 ldi r24, 0x0A ; 10 |
3110: f8 2e mov r15, r24 |
3112: 9e cf rjmp .-196 ; 0x3050 <osd_ncmode_minimal+0x64c> |
00003114 <osd_fcmode_default>: |
#include "osd_helpers.h" |
#include "osd_fcmode_default.h" |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
int osd_fcmode_default() { |
3114: 0f 93 push r16 |
3116: 1f 93 push r17 |
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) { |
3118: 80 91 1b 01 lds r24, 0x011B |
311c: 80 ff sbrs r24, 0 |
311e: b7 c0 rjmp .+366 ; 0x328e <osd_fcmode_default+0x17a> |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
3120: 80 91 1d 01 lds r24, 0x011D |
3124: 81 ff sbrs r24, 1 |
3126: d6 c0 rjmp .+428 ; 0x32d4 <osd_fcmode_default+0x1c0> |
} |
} |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
} |
write_ndigit_number_u(7, top_line, debugData.Analog[10], 3, 0); |
3128: 40 91 5f 01 lds r20, 0x015F |
312c: 50 91 60 01 lds r21, 0x0160 |
3130: 87 e0 ldi r24, 0x07 ; 7 |
3132: 60 91 02 01 lds r22, 0x0102 |
3136: 23 e0 ldi r18, 0x03 ; 3 |
3138: 30 e0 ldi r19, 0x00 ; 0 |
313a: 00 e0 ldi r16, 0x00 ; 0 |
313c: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
if (debugData.Analog[10] <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
3140: 80 91 5f 01 lds r24, 0x015F |
3144: 90 91 60 01 lds r25, 0x0160 |
3148: 85 36 cpi r24, 0x65 ; 101 |
314a: 91 05 cpc r25, r1 |
314c: 08 f4 brcc .+2 ; 0x3150 <osd_fcmode_default+0x3c> |
314e: b2 c0 rjmp .+356 ; 0x32b4 <osd_fcmode_default+0x1a0> |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (debugData.Analog[10] > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
3150: 80 91 5f 01 lds r24, 0x015F |
3154: 90 91 60 01 lds r25, 0x0160 |
3158: 85 36 cpi r24, 0x65 ; 101 |
315a: 91 05 cpc r25, r1 |
315c: 28 f0 brcs .+10 ; 0x3168 <osd_fcmode_default+0x54> |
315e: 80 91 01 01 lds r24, 0x0101 |
3162: 85 36 cpi r24, 0x65 ; 101 |
3164: 08 f4 brcc .+2 ; 0x3168 <osd_fcmode_default+0x54> |
3166: f5 c0 rjmp .+490 ; 0x3352 <osd_fcmode_default+0x23e> |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, 0); |
} |
if (debugData.Analog[5] > 300 || debugData.Analog[5] < -300) { |
3168: 80 91 55 01 lds r24, 0x0155 |
316c: 90 91 56 01 lds r25, 0x0156 |
3170: 8d 52 subi r24, 0x2D ; 45 |
3172: 91 40 sbci r25, 0x01 ; 1 |
3174: 40 f4 brcc .+16 ; 0x3186 <osd_fcmode_default+0x72> |
3176: 80 91 55 01 lds r24, 0x0155 |
317a: 90 91 56 01 lds r25, 0x0156 |
317e: 84 5d subi r24, 0xD4 ; 212 |
3180: 9e 4f sbci r25, 0xFE ; 254 |
3182: 08 f0 brcs .+2 ; 0x3186 <osd_fcmode_default+0x72> |
3184: 41 c1 rjmp .+642 ; 0x3408 <osd_fcmode_default+0x2f4> |
// above 10m only write full meters |
write_ndigit_number_s(23, top_line, debugData.Analog[5] / 30, 4, 0); |
3186: 80 91 55 01 lds r24, 0x0155 |
318a: 90 91 56 01 lds r25, 0x0156 |
318e: 6e e1 ldi r22, 0x1E ; 30 |
3190: 70 e0 ldi r23, 0x00 ; 0 |
3192: 0e 94 68 1c call 0x38d0 ; 0x38d0 <__udivmodhi4> |
3196: ab 01 movw r20, r22 |
3198: 87 e1 ldi r24, 0x17 ; 23 |
319a: 60 91 02 01 lds r22, 0x0102 |
319e: 24 e0 ldi r18, 0x04 ; 4 |
31a0: 30 e0 ldi r19, 0x00 ; 0 |
31a2: 00 e0 ldi r16, 0x00 ; 0 |
31a4: 0e 94 19 07 call 0xe32 ; 0xe32 <write_ndigit_number_s> |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(23, top_line, debugData.Analog[5] / 3, 3, 0); |
} |
if (debugData.Analog[5] > max_Altimeter) max_Altimeter = debugData.Analog[5]; |
31a8: 20 91 55 01 lds r18, 0x0155 |
31ac: 30 91 56 01 lds r19, 0x0156 |
31b0: 80 91 1f 01 lds r24, 0x011F |
31b4: 90 91 20 01 lds r25, 0x0120 |
31b8: 82 17 cp r24, r18 |
31ba: 93 07 cpc r25, r19 |
31bc: 40 f4 brcc .+16 ; 0x31ce <osd_fcmode_default+0xba> |
31be: 80 91 55 01 lds r24, 0x0155 |
31c2: 90 91 56 01 lds r25, 0x0156 |
31c6: 90 93 20 01 sts 0x0120, r25 |
31ca: 80 93 1f 01 sts 0x011F, r24 |
if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { |
31ce: 80 91 1b 01 lds r24, 0x011B |
31d2: 81 fd sbrc r24, 1 |
31d4: c9 c0 rjmp .+402 ; 0x3368 <osd_fcmode_default+0x254> |
draw_artificial_horizon(top_line + 2, bottom_line - 1, debugData.Analog[0], debugData.Analog[1]); |
} |
// pre-bottom line |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
31d6: 80 91 1d 01 lds r24, 0x011D |
31da: 80 fd sbrc r24, 0 |
31dc: d9 c0 rjmp .+434 ; 0x3390 <osd_fcmode_default+0x27c> |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
write_ndigit_number_u_10th(17, bottom_line - 1, s_volt, 3, 0); |
} |
} |
draw_battery(2, bottom_line, min_voltage, debugData.Analog[9], max_voltage); |
31de: 20 91 5d 01 lds r18, 0x015D |
31e2: 30 91 5e 01 lds r19, 0x015E |
31e6: 82 e0 ldi r24, 0x02 ; 2 |
31e8: 60 91 03 01 lds r22, 0x0103 |
31ec: 40 91 19 01 lds r20, 0x0119 |
31f0: 00 91 1a 01 lds r16, 0x011A |
31f4: 0e 94 17 0a call 0x142e ; 0x142e <draw_battery> |
write_ndigit_number_u_10th(3, bottom_line, debugData.Analog[9], 3, 0); |
31f8: 40 91 5d 01 lds r20, 0x015D |
31fc: 50 91 5e 01 lds r21, 0x015E |
3200: 83 e0 ldi r24, 0x03 ; 3 |
3202: 60 91 03 01 lds r22, 0x0103 |
3206: 23 e0 ldi r18, 0x03 ; 3 |
3208: 30 e0 ldi r19, 0x00 ; 0 |
320a: 00 e0 ldi r16, 0x00 ; 0 |
320c: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
if (debugData.Analog[9] <= min_voltage && last_UBat > min_voltage) { |
3210: 80 91 5d 01 lds r24, 0x015D |
3214: 90 91 5e 01 lds r25, 0x015E |
3218: 40 91 19 01 lds r20, 0x0119 |
321c: 24 2f mov r18, r20 |
321e: 30 e0 ldi r19, 0x00 ; 0 |
3220: 28 17 cp r18, r24 |
3222: 39 07 cpc r19, r25 |
3224: 28 f0 brcs .+10 ; 0x3230 <osd_fcmode_default+0x11c> |
3226: 80 91 00 01 lds r24, 0x0100 |
322a: 48 17 cp r20, r24 |
322c: 08 f4 brcc .+2 ; 0x3230 <osd_fcmode_default+0x11c> |
322e: 6c c0 rjmp .+216 ; 0x3308 <osd_fcmode_default+0x1f4> |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
} else if (debugData.Analog[9] > min_voltage && last_UBat < min_voltage) { |
3230: 80 91 5d 01 lds r24, 0x015D |
3234: 90 91 5e 01 lds r25, 0x015E |
3238: 28 17 cp r18, r24 |
323a: 39 07 cpc r19, r25 |
323c: 40 f5 brcc .+80 ; 0x328e <osd_fcmode_default+0x17a> |
323e: 80 91 00 01 lds r24, 0x0100 |
3242: 84 17 cp r24, r20 |
3244: 20 f5 brcc .+72 ; 0x328e <osd_fcmode_default+0x17a> |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, 0); |
3246: 82 e0 ldi r24, 0x02 ; 2 |
3248: 60 91 03 01 lds r22, 0x0103 |
324c: 40 e0 ldi r20, 0x00 ; 0 |
324e: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3252: 83 e0 ldi r24, 0x03 ; 3 |
3254: 60 91 03 01 lds r22, 0x0103 |
3258: 40 e0 ldi r20, 0x00 ; 0 |
325a: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
325e: 84 e0 ldi r24, 0x04 ; 4 |
3260: 60 91 03 01 lds r22, 0x0103 |
3264: 40 e0 ldi r20, 0x00 ; 0 |
3266: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
326a: 85 e0 ldi r24, 0x05 ; 5 |
326c: 60 91 03 01 lds r22, 0x0103 |
3270: 40 e0 ldi r20, 0x00 ; 0 |
3272: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3276: 86 e0 ldi r24, 0x06 ; 6 |
3278: 60 91 03 01 lds r22, 0x0103 |
327c: 40 e0 ldi r20, 0x00 ; 0 |
327e: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3282: 87 e0 ldi r24, 0x07 ; 7 |
3284: 60 91 03 01 lds r22, 0x0103 |
3288: 40 e0 ldi r20, 0x00 ; 0 |
328a: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
} |
} |
// remember last values |
last_UBat = debugData.Analog[9]; |
328e: 80 91 5d 01 lds r24, 0x015D |
3292: 90 91 5e 01 lds r25, 0x015E |
3296: 80 93 00 01 sts 0x0100, r24 |
last_RC_Quality = debugData.Analog[10]; |
329a: 80 91 5f 01 lds r24, 0x015F |
329e: 90 91 60 01 lds r25, 0x0160 |
32a2: 80 93 01 01 sts 0x0101, r24 |
debugData.Analog[5]); // Height |
debugData.Analog[9]); // Voltage |
debugData.Analog[10]);// RC Signal |
debugData.Analog[11]);// Gyro compass |
*/ |
seconds_since_last_data = 0; |
32a6: 10 92 18 01 sts 0x0118, r1 |
return 0; |
} |
32aa: 80 e0 ldi r24, 0x00 ; 0 |
32ac: 90 e0 ldi r25, 0x00 ; 0 |
32ae: 1f 91 pop r17 |
32b0: 0f 91 pop r16 |
32b2: 08 95 ret |
} |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
} |
write_ndigit_number_u(7, top_line, debugData.Analog[10], 3, 0); |
if (debugData.Analog[10] <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
32b4: 80 91 01 01 lds r24, 0x0101 |
32b8: 85 36 cpi r24, 0x65 ; 101 |
32ba: 08 f4 brcc .+2 ; 0x32be <osd_fcmode_default+0x1aa> |
32bc: 49 cf rjmp .-366 ; 0x3150 <osd_fcmode_default+0x3c> |
32be: 17 e0 ldi r17, 0x07 ; 7 |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
32c0: 81 2f mov r24, r17 |
32c2: 60 91 02 01 lds r22, 0x0102 |
32c6: 4f e4 ldi r20, 0x4F ; 79 |
32c8: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
32cc: 1f 5f subi r17, 0xFF ; 255 |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
} |
write_ndigit_number_u(7, top_line, debugData.Analog[10], 3, 0); |
if (debugData.Analog[10] <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
32ce: 1b 30 cpi r17, 0x0B ; 11 |
32d0: b9 f7 brne .-18 ; 0x32c0 <osd_fcmode_default+0x1ac> |
32d2: 4a cf rjmp .-364 ; 0x3168 <osd_fcmode_default+0x54> |
int osd_fcmode_default() { |
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) { |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
write_char_xy(10, top_line, 0xCA); // RC-transmitter |
32d4: 8a e0 ldi r24, 0x0A ; 10 |
32d6: 60 91 02 01 lds r22, 0x0102 |
32da: 4a ec ldi r20, 0xCA ; 202 |
32dc: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(27, top_line, 0xCC); // small meters m height |
32e0: 8b e1 ldi r24, 0x1B ; 27 |
32e2: 60 91 02 01 lds r22, 0x0102 |
32e6: 4c ec ldi r20, 0xCC ; 204 |
32e8: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(7, bottom_line, 0x9E); // small v |
32ec: 87 e0 ldi r24, 0x07 ; 7 |
32ee: 60 91 03 01 lds r22, 0x0103 |
32f2: 4e e9 ldi r20, 0x9E ; 158 |
32f4: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
32f8: 80 91 1d 01 lds r24, 0x011D |
32fc: 80 fd sbrc r24, 0 |
32fe: 96 c0 rjmp .+300 ; 0x342c <osd_fcmode_default+0x318> |
write_char_xy(14, bottom_line - 1, 0xB5); // mah |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
write_char_xy(21, bottom_line - 1, 0x9E); // small V |
} |
} |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
3300: 82 60 ori r24, 0x02 ; 2 |
3302: 80 93 1d 01 sts 0x011D, r24 |
3306: 10 cf rjmp .-480 ; 0x3128 <osd_fcmode_default+0x14> |
draw_battery(2, bottom_line, min_voltage, debugData.Analog[9], max_voltage); |
write_ndigit_number_u_10th(3, bottom_line, debugData.Analog[9], 3, 0); |
if (debugData.Analog[9] <= min_voltage && last_UBat > min_voltage) { |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
3308: 82 e0 ldi r24, 0x02 ; 2 |
330a: 60 91 03 01 lds r22, 0x0103 |
330e: 4f e4 ldi r20, 0x4F ; 79 |
3310: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3314: 83 e0 ldi r24, 0x03 ; 3 |
3316: 60 91 03 01 lds r22, 0x0103 |
331a: 4f e4 ldi r20, 0x4F ; 79 |
331c: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3320: 84 e0 ldi r24, 0x04 ; 4 |
3322: 60 91 03 01 lds r22, 0x0103 |
3326: 4f e4 ldi r20, 0x4F ; 79 |
3328: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
332c: 85 e0 ldi r24, 0x05 ; 5 |
332e: 60 91 03 01 lds r22, 0x0103 |
3332: 4f e4 ldi r20, 0x4F ; 79 |
3334: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3338: 86 e0 ldi r24, 0x06 ; 6 |
333a: 60 91 03 01 lds r22, 0x0103 |
333e: 4f e4 ldi r20, 0x4F ; 79 |
3340: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3344: 87 e0 ldi r24, 0x07 ; 7 |
3346: 60 91 03 01 lds r22, 0x0103 |
334a: 4f e4 ldi r20, 0x4F ; 79 |
334c: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3350: 9e cf rjmp .-196 ; 0x328e <osd_fcmode_default+0x17a> |
write_ndigit_number_u(7, top_line, debugData.Analog[10], 3, 0); |
if (debugData.Analog[10] <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (debugData.Analog[10] > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
3352: 17 e0 ldi r17, 0x07 ; 7 |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, 0); |
3354: 81 2f mov r24, r17 |
3356: 60 91 02 01 lds r22, 0x0102 |
335a: 40 e0 ldi r20, 0x00 ; 0 |
335c: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3360: 1f 5f subi r17, 0xFF ; 255 |
write_ndigit_number_u(7, top_line, debugData.Analog[10], 3, 0); |
if (debugData.Analog[10] <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (debugData.Analog[10] > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
3362: 1b 30 cpi r17, 0x0B ; 11 |
3364: b9 f7 brne .-18 ; 0x3354 <osd_fcmode_default+0x240> |
3366: 00 cf rjmp .-512 ; 0x3168 <osd_fcmode_default+0x54> |
write_ndigit_number_s_10th(23, top_line, debugData.Analog[5] / 3, 3, 0); |
} |
if (debugData.Analog[5] > max_Altimeter) max_Altimeter = debugData.Analog[5]; |
if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, debugData.Analog[0], debugData.Analog[1]); |
3368: 40 91 4b 01 lds r20, 0x014B |
336c: 50 91 4c 01 lds r21, 0x014C |
3370: 20 91 4d 01 lds r18, 0x014D |
3374: 30 91 4e 01 lds r19, 0x014E |
3378: 80 91 02 01 lds r24, 0x0102 |
337c: 60 91 03 01 lds r22, 0x0103 |
3380: 61 50 subi r22, 0x01 ; 1 |
3382: 8e 5f subi r24, 0xFE ; 254 |
3384: 0e 94 e6 08 call 0x11cc ; 0x11cc <draw_artificial_horizon> |
} |
// pre-bottom line |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
3388: 80 91 1d 01 lds r24, 0x011D |
338c: 80 ff sbrs r24, 0 |
338e: 27 cf rjmp .-434 ; 0x31de <osd_fcmode_default+0xca> |
//write_ndigit_number_s(3, bottom_line - 1, ampere, 4, 0); |
write_ndigit_number_u_10th(3, bottom_line - 1, ampere / 10, 3, 0); |
3390: 20 91 03 01 lds r18, 0x0103 |
3394: 21 50 subi r18, 0x01 ; 1 |
3396: 80 91 37 01 lds r24, 0x0137 |
339a: 90 91 38 01 lds r25, 0x0138 |
339e: 6a e0 ldi r22, 0x0A ; 10 |
33a0: 70 e0 ldi r23, 0x00 ; 0 |
33a2: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
33a6: ab 01 movw r20, r22 |
33a8: 83 e0 ldi r24, 0x03 ; 3 |
33aa: 62 2f mov r22, r18 |
33ac: 23 e0 ldi r18, 0x03 ; 3 |
33ae: 30 e0 ldi r19, 0x00 ; 0 |
33b0: 00 e0 ldi r16, 0x00 ; 0 |
33b2: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
write_ndigit_number_s(10, bottom_line - 1, ampere_wasted / 10, 4, 0); |
33b6: 10 91 03 01 lds r17, 0x0103 |
33ba: 11 50 subi r17, 0x01 ; 1 |
33bc: 60 91 3b 01 lds r22, 0x013B |
33c0: 70 91 3c 01 lds r23, 0x013C |
33c4: 80 91 3d 01 lds r24, 0x013D |
33c8: 90 91 3e 01 lds r25, 0x013E |
33cc: 2a e0 ldi r18, 0x0A ; 10 |
33ce: 30 e0 ldi r19, 0x00 ; 0 |
33d0: 40 e0 ldi r20, 0x00 ; 0 |
33d2: 50 e0 ldi r21, 0x00 ; 0 |
33d4: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
33d8: 8a e0 ldi r24, 0x0A ; 10 |
33da: 61 2f mov r22, r17 |
33dc: a9 01 movw r20, r18 |
33de: 24 e0 ldi r18, 0x04 ; 4 |
33e0: 30 e0 ldi r19, 0x00 ; 0 |
33e2: 0e 94 19 07 call 0xe32 ; 0xe32 <write_ndigit_number_s> |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
33e6: 80 91 1b 01 lds r24, 0x011B |
33ea: 85 ff sbrs r24, 5 |
33ec: f8 ce rjmp .-528 ; 0x31de <osd_fcmode_default+0xca> |
write_ndigit_number_u_10th(17, bottom_line - 1, s_volt, 3, 0); |
33ee: 60 91 03 01 lds r22, 0x0103 |
33f2: 61 50 subi r22, 0x01 ; 1 |
33f4: 40 91 9f 02 lds r20, 0x029F |
33f8: 50 91 a0 02 lds r21, 0x02A0 |
33fc: 81 e1 ldi r24, 0x11 ; 17 |
33fe: 23 e0 ldi r18, 0x03 ; 3 |
3400: 30 e0 ldi r19, 0x00 ; 0 |
3402: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
3406: eb ce rjmp .-554 ; 0x31de <osd_fcmode_default+0xca> |
if (debugData.Analog[5] > 300 || debugData.Analog[5] < -300) { |
// above 10m only write full meters |
write_ndigit_number_s(23, top_line, debugData.Analog[5] / 30, 4, 0); |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(23, top_line, debugData.Analog[5] / 3, 3, 0); |
3408: 80 91 55 01 lds r24, 0x0155 |
340c: 90 91 56 01 lds r25, 0x0156 |
3410: 63 e0 ldi r22, 0x03 ; 3 |
3412: 70 e0 ldi r23, 0x00 ; 0 |
3414: 0e 94 68 1c call 0x38d0 ; 0x38d0 <__udivmodhi4> |
3418: ab 01 movw r20, r22 |
341a: 87 e1 ldi r24, 0x17 ; 23 |
341c: 60 91 02 01 lds r22, 0x0102 |
3420: 23 e0 ldi r18, 0x03 ; 3 |
3422: 30 e0 ldi r19, 0x00 ; 0 |
3424: 00 e0 ldi r16, 0x00 ; 0 |
3426: 0e 94 d3 05 call 0xba6 ; 0xba6 <write_ndigit_number_s_10th> |
342a: be ce rjmp .-644 ; 0x31a8 <osd_fcmode_default+0x94> |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
write_char_xy(10, top_line, 0xCA); // RC-transmitter |
write_char_xy(27, top_line, 0xCC); // small meters m height |
write_char_xy(7, bottom_line, 0x9E); // small v |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
write_char_xy(7, bottom_line - 1, 0x9F); // small A |
342c: 60 91 03 01 lds r22, 0x0103 |
3430: 61 50 subi r22, 0x01 ; 1 |
3432: 87 e0 ldi r24, 0x07 ; 7 |
3434: 4f e9 ldi r20, 0x9F ; 159 |
3436: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(14, bottom_line - 1, 0xB5); // mah |
343a: 60 91 03 01 lds r22, 0x0103 |
343e: 61 50 subi r22, 0x01 ; 1 |
3440: 8e e0 ldi r24, 0x0E ; 14 |
3442: 45 eb ldi r20, 0xB5 ; 181 |
3444: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
3448: 80 91 1b 01 lds r24, 0x011B |
344c: 85 fd sbrc r24, 5 |
344e: 03 c0 rjmp .+6 ; 0x3456 <osd_fcmode_default+0x342> |
3450: 80 91 1d 01 lds r24, 0x011D |
3454: 55 cf rjmp .-342 ; 0x3300 <osd_fcmode_default+0x1ec> |
write_char_xy(21, bottom_line - 1, 0x9E); // small V |
3456: 60 91 03 01 lds r22, 0x0103 |
345a: 61 50 subi r22, 0x01 ; 1 |
345c: 85 e1 ldi r24, 0x15 ; 21 |
345e: 4e e9 ldi r20, 0x9E ; 158 |
3460: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
3464: f5 cf rjmp .-22 ; 0x3450 <osd_fcmode_default+0x33c> |
00003466 <osd_fcmode_jopl>: |
// jopl Vario |
static int16_t last_Altimeter = 0; |
static int16_t Vario = 0; |
int osd_fcmode_jopl() { |
3466: 0f 93 push r16 |
3468: 1f 93 push r17 |
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) { |
346a: 80 91 1b 01 lds r24, 0x011B |
346e: 80 ff sbrs r24, 0 |
3470: 10 c1 rjmp .+544 ; 0x3692 <osd_fcmode_jopl+0x22c> |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
3472: 80 91 1d 01 lds r24, 0x011D |
3476: 81 ff sbrs r24, 1 |
3478: 2f c1 rjmp .+606 ; 0x36d8 <osd_fcmode_jopl+0x272> |
// end jopl |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
} |
write_ndigit_number_u(7, top_line, debugData.Analog[10], 3, 0); |
347a: 40 91 5f 01 lds r20, 0x015F |
347e: 50 91 60 01 lds r21, 0x0160 |
3482: 87 e0 ldi r24, 0x07 ; 7 |
3484: 60 91 02 01 lds r22, 0x0102 |
3488: 23 e0 ldi r18, 0x03 ; 3 |
348a: 30 e0 ldi r19, 0x00 ; 0 |
348c: 00 e0 ldi r16, 0x00 ; 0 |
348e: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
if (debugData.Analog[10] <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
3492: 80 91 5f 01 lds r24, 0x015F |
3496: 90 91 60 01 lds r25, 0x0160 |
349a: 85 36 cpi r24, 0x65 ; 101 |
349c: 91 05 cpc r25, r1 |
349e: 08 f4 brcc .+2 ; 0x34a2 <osd_fcmode_jopl+0x3c> |
34a0: 0b c1 rjmp .+534 ; 0x36b8 <osd_fcmode_jopl+0x252> |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (debugData.Analog[10] > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
34a2: 80 91 5f 01 lds r24, 0x015F |
34a6: 90 91 60 01 lds r25, 0x0160 |
34aa: 85 36 cpi r24, 0x65 ; 101 |
34ac: 91 05 cpc r25, r1 |
34ae: 28 f0 brcs .+10 ; 0x34ba <osd_fcmode_jopl+0x54> |
34b0: 80 91 01 01 lds r24, 0x0101 |
34b4: 85 36 cpi r24, 0x65 ; 101 |
34b6: 08 f4 brcc .+2 ; 0x34ba <osd_fcmode_jopl+0x54> |
34b8: 62 c1 rjmp .+708 ; 0x377e <osd_fcmode_jopl+0x318> |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, 0); |
} |
// jopl ... compass |
write_ndigit_number_u(13, top_line, debugData.Analog[8], 3, 0); |
34ba: 40 91 5b 01 lds r20, 0x015B |
34be: 50 91 5c 01 lds r21, 0x015C |
34c2: 8d e0 ldi r24, 0x0D ; 13 |
34c4: 60 91 02 01 lds r22, 0x0102 |
34c8: 23 e0 ldi r18, 0x03 ; 3 |
34ca: 30 e0 ldi r19, 0x00 ; 0 |
34cc: 00 e0 ldi r16, 0x00 ; 0 |
34ce: 0e 94 6b 07 call 0xed6 ; 0xed6 <write_ndigit_number_u> |
write_ascii_string_pgm(17, top_line, (const char *) (pgm_read_word(&(directions[heading_conv(debugData.Analog[8])])))); |
34d2: 10 91 02 01 lds r17, 0x0102 |
34d6: 80 91 5b 01 lds r24, 0x015B |
34da: 90 91 5c 01 lds r25, 0x015C |
34de: 0e 94 9d 08 call 0x113a ; 0x113a <heading_conv> |
34e2: e8 2f mov r30, r24 |
34e4: f0 e0 ldi r31, 0x00 ; 0 |
34e6: ee 0f add r30, r30 |
34e8: ff 1f adc r31, r31 |
34ea: e8 5f subi r30, 0xF8 ; 248 |
34ec: fe 4f sbci r31, 0xFE ; 254 |
34ee: 45 91 lpm r20, Z+ |
34f0: 54 91 lpm r21, Z+ |
34f2: 81 e1 ldi r24, 0x11 ; 17 |
34f4: 61 2f mov r22, r17 |
34f6: 0e 94 7e 05 call 0xafc ; 0xafc <write_ascii_string_pgm> |
// end jopl |
// jopl Altimeter modification |
if ((debugData.Analog[5] > 100) || (debugData.Analog[5] < -100)) { |
34fa: 80 91 55 01 lds r24, 0x0155 |
34fe: 90 91 56 01 lds r25, 0x0156 |
3502: 85 36 cpi r24, 0x65 ; 101 |
3504: 91 05 cpc r25, r1 |
3506: 40 f4 brcc .+16 ; 0x3518 <osd_fcmode_jopl+0xb2> |
3508: 80 91 55 01 lds r24, 0x0155 |
350c: 90 91 56 01 lds r25, 0x0156 |
3510: 8c 59 subi r24, 0x9C ; 156 |
3512: 9f 4f sbci r25, 0xFF ; 255 |
3514: 08 f0 brcs .+2 ; 0x3518 <osd_fcmode_jopl+0xb2> |
3516: 96 c1 rjmp .+812 ; 0x3844 <osd_fcmode_jopl+0x3de> |
// above 10m only write full meters |
write_ndigit_number_s(22, top_line, debugData.Analog[5] / 10, 4, 0); |
3518: 80 91 55 01 lds r24, 0x0155 |
351c: 90 91 56 01 lds r25, 0x0156 |
3520: 6a e0 ldi r22, 0x0A ; 10 |
3522: 70 e0 ldi r23, 0x00 ; 0 |
3524: 0e 94 68 1c call 0x38d0 ; 0x38d0 <__udivmodhi4> |
3528: ab 01 movw r20, r22 |
352a: 86 e1 ldi r24, 0x16 ; 22 |
352c: 60 91 02 01 lds r22, 0x0102 |
3530: 24 e0 ldi r18, 0x04 ; 4 |
3532: 30 e0 ldi r19, 0x00 ; 0 |
3534: 00 e0 ldi r16, 0x00 ; 0 |
3536: 0e 94 19 07 call 0xe32 ; 0xe32 <write_ndigit_number_s> |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(22, top_line, debugData.Analog[5], 3, 0); |
} |
Vario = debugData.Analog[5] - last_Altimeter; |
353a: 40 91 55 01 lds r20, 0x0155 |
353e: 50 91 56 01 lds r21, 0x0156 |
3542: 80 91 43 01 lds r24, 0x0143 |
3546: 90 91 44 01 lds r25, 0x0144 |
354a: 48 1b sub r20, r24 |
354c: 59 0b sbc r21, r25 |
354e: 50 93 46 01 sts 0x0146, r21 |
3552: 40 93 45 01 sts 0x0145, r20 |
draw_variometer(27, top_line, Vario); |
3556: 8b e1 ldi r24, 0x1B ; 27 |
3558: 60 91 02 01 lds r22, 0x0102 |
355c: 0e 94 c1 09 call 0x1382 ; 0x1382 <draw_variometer> |
if (COSD_FLAGS_MODES & COSD_FLAG_BIGVARIO) { |
3560: 40 91 1b 01 lds r20, 0x011B |
3564: 42 fd sbrc r20, 2 |
3566: 63 c1 rjmp .+710 ; 0x382e <osd_fcmode_jopl+0x3c8> |
draw_big_variometer(27, 8, Vario); |
} |
last_Altimeter = debugData.Analog[5]; |
3568: 80 91 55 01 lds r24, 0x0155 |
356c: 90 91 56 01 lds r25, 0x0156 |
3570: 90 93 44 01 sts 0x0144, r25 |
3574: 80 93 43 01 sts 0x0143, r24 |
// end jopl |
if (debugData.Analog[5] > max_Altimeter) max_Altimeter = debugData.Analog[5]; |
3578: 20 91 55 01 lds r18, 0x0155 |
357c: 30 91 56 01 lds r19, 0x0156 |
3580: 80 91 1f 01 lds r24, 0x011F |
3584: 90 91 20 01 lds r25, 0x0120 |
3588: 82 17 cp r24, r18 |
358a: 93 07 cpc r25, r19 |
358c: 40 f4 brcc .+16 ; 0x359e <osd_fcmode_jopl+0x138> |
358e: 80 91 55 01 lds r24, 0x0155 |
3592: 90 91 56 01 lds r25, 0x0156 |
3596: 90 93 20 01 sts 0x0120, r25 |
359a: 80 93 1f 01 sts 0x011F, r24 |
if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { |
359e: 41 fd sbrc r20, 1 |
35a0: 35 c1 rjmp .+618 ; 0x380c <osd_fcmode_jopl+0x3a6> |
draw_artificial_horizon(top_line + 2, bottom_line - 1, debugData.Analog[0], debugData.Analog[1]); |
} |
// jopl ... compass heading |
// seccond line |
draw_compass(11, top_line + 1, debugData.Analog[8]); |
35a2: 40 91 5b 01 lds r20, 0x015B |
35a6: 50 91 5c 01 lds r21, 0x015C |
35aa: 60 91 02 01 lds r22, 0x0102 |
35ae: 6f 5f subi r22, 0xFF ; 255 |
35b0: 8b e0 ldi r24, 0x0B ; 11 |
35b2: 0e 94 55 0a call 0x14aa ; 0x14aa <draw_compass> |
// end jopl |
// pre-bottom line |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
35b6: 80 91 1d 01 lds r24, 0x011D |
35ba: 80 fd sbrc r24, 0 |
35bc: eb c0 rjmp .+470 ; 0x3794 <osd_fcmode_jopl+0x32e> |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
write_ndigit_number_u_10th(17, bottom_line - 1, s_volt, 3, 0); |
} |
} |
draw_battery(2, bottom_line, min_voltage, debugData.Analog[9], max_voltage); |
35be: 20 91 5d 01 lds r18, 0x015D |
35c2: 30 91 5e 01 lds r19, 0x015E |
35c6: 82 e0 ldi r24, 0x02 ; 2 |
35c8: 60 91 03 01 lds r22, 0x0103 |
35cc: 40 91 19 01 lds r20, 0x0119 |
35d0: 00 91 1a 01 lds r16, 0x011A |
35d4: 0e 94 17 0a call 0x142e ; 0x142e <draw_battery> |
write_ndigit_number_u_10th(3, bottom_line, debugData.Analog[9], 3, 0); |
35d8: 40 91 5d 01 lds r20, 0x015D |
35dc: 50 91 5e 01 lds r21, 0x015E |
35e0: 83 e0 ldi r24, 0x03 ; 3 |
35e2: 60 91 03 01 lds r22, 0x0103 |
35e6: 23 e0 ldi r18, 0x03 ; 3 |
35e8: 30 e0 ldi r19, 0x00 ; 0 |
35ea: 00 e0 ldi r16, 0x00 ; 0 |
35ec: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
if (debugData.Analog[9] <= min_voltage && last_UBat > min_voltage) { |
35f0: 80 91 5d 01 lds r24, 0x015D |
35f4: 90 91 5e 01 lds r25, 0x015E |
35f8: 40 91 19 01 lds r20, 0x0119 |
35fc: 24 2f mov r18, r20 |
35fe: 30 e0 ldi r19, 0x00 ; 0 |
3600: 28 17 cp r18, r24 |
3602: 39 07 cpc r19, r25 |
3604: 28 f0 brcs .+10 ; 0x3610 <osd_fcmode_jopl+0x1aa> |
3606: 80 91 00 01 lds r24, 0x0100 |
360a: 48 17 cp r20, r24 |
360c: 08 f4 brcc .+2 ; 0x3610 <osd_fcmode_jopl+0x1aa> |
360e: 92 c0 rjmp .+292 ; 0x3734 <osd_fcmode_jopl+0x2ce> |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
} else if (debugData.Analog[9] > min_voltage && last_UBat < min_voltage) { |
3610: 80 91 5d 01 lds r24, 0x015D |
3614: 90 91 5e 01 lds r25, 0x015E |
3618: 28 17 cp r18, r24 |
361a: 39 07 cpc r19, r25 |
361c: 40 f5 brcc .+80 ; 0x366e <osd_fcmode_jopl+0x208> |
361e: 80 91 00 01 lds r24, 0x0100 |
3622: 84 17 cp r24, r20 |
3624: 20 f5 brcc .+72 ; 0x366e <osd_fcmode_jopl+0x208> |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, 0); |
3626: 82 e0 ldi r24, 0x02 ; 2 |
3628: 60 91 03 01 lds r22, 0x0103 |
362c: 40 e0 ldi r20, 0x00 ; 0 |
362e: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3632: 83 e0 ldi r24, 0x03 ; 3 |
3634: 60 91 03 01 lds r22, 0x0103 |
3638: 40 e0 ldi r20, 0x00 ; 0 |
363a: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
363e: 84 e0 ldi r24, 0x04 ; 4 |
3640: 60 91 03 01 lds r22, 0x0103 |
3644: 40 e0 ldi r20, 0x00 ; 0 |
3646: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
364a: 85 e0 ldi r24, 0x05 ; 5 |
364c: 60 91 03 01 lds r22, 0x0103 |
3650: 40 e0 ldi r20, 0x00 ; 0 |
3652: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3656: 86 e0 ldi r24, 0x06 ; 6 |
3658: 60 91 03 01 lds r22, 0x0103 |
365c: 40 e0 ldi r20, 0x00 ; 0 |
365e: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3662: 87 e0 ldi r24, 0x07 ; 7 |
3664: 60 91 03 01 lds r22, 0x0103 |
3668: 40 e0 ldi r20, 0x00 ; 0 |
366a: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
} |
// jopl ... Times |
write_time(8, bottom_line, uptime); |
366e: 40 91 12 01 lds r20, 0x0112 |
3672: 50 91 13 01 lds r21, 0x0113 |
3676: 88 e0 ldi r24, 0x08 ; 8 |
3678: 60 91 03 01 lds r22, 0x0103 |
367c: 0e 94 3a 08 call 0x1074 ; 0x1074 <write_time> |
write_time(15, bottom_line, flytime_fc); |
3680: 40 91 16 01 lds r20, 0x0116 |
3684: 50 91 17 01 lds r21, 0x0117 |
3688: 8f e0 ldi r24, 0x0F ; 15 |
368a: 60 91 03 01 lds r22, 0x0103 |
368e: 0e 94 3a 08 call 0x1074 ; 0x1074 <write_time> |
// write_ndigit_number_s(22, bottom_line, debugData.Analog[5], 5, 0); |
// end jopl |
} |
// remember last values |
last_UBat = debugData.Analog[9]; |
3692: 80 91 5d 01 lds r24, 0x015D |
3696: 90 91 5e 01 lds r25, 0x015E |
369a: 80 93 00 01 sts 0x0100, r24 |
last_RC_Quality = debugData.Analog[10]; |
369e: 80 91 5f 01 lds r24, 0x015F |
36a2: 90 91 60 01 lds r25, 0x0160 |
36a6: 80 93 01 01 sts 0x0101, r24 |
debugData.Analog[28]);// |
debugData.Analog[29]);// |
debugData.Analog[30]);// GPS_Nick |
debugData.Analog[31]);// GPS_Roll |
*/ |
seconds_since_last_data = 0; |
36aa: 10 92 18 01 sts 0x0118, r1 |
return 0; |
} |
36ae: 80 e0 ldi r24, 0x00 ; 0 |
36b0: 90 e0 ldi r25, 0x00 ; 0 |
36b2: 1f 91 pop r17 |
36b4: 0f 91 pop r16 |
36b6: 08 95 ret |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
} |
write_ndigit_number_u(7, top_line, debugData.Analog[10], 3, 0); |
if (debugData.Analog[10] <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
36b8: 80 91 01 01 lds r24, 0x0101 |
36bc: 85 36 cpi r24, 0x65 ; 101 |
36be: 08 f4 brcc .+2 ; 0x36c2 <osd_fcmode_jopl+0x25c> |
36c0: f0 ce rjmp .-544 ; 0x34a2 <osd_fcmode_jopl+0x3c> |
36c2: 17 e0 ldi r17, 0x07 ; 7 |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
36c4: 81 2f mov r24, r17 |
36c6: 60 91 02 01 lds r22, 0x0102 |
36ca: 4f e4 ldi r20, 0x4F ; 79 |
36cc: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
36d0: 1f 5f subi r17, 0xFF ; 255 |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
} |
write_ndigit_number_u(7, top_line, debugData.Analog[10], 3, 0); |
if (debugData.Analog[10] <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
36d2: 1b 30 cpi r17, 0x0B ; 11 |
36d4: b9 f7 brne .-18 ; 0x36c4 <osd_fcmode_jopl+0x25e> |
36d6: f1 ce rjmp .-542 ; 0x34ba <osd_fcmode_jopl+0x54> |
int osd_fcmode_jopl() { |
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) { |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS_RUNTIME & COSD_ICONS_WRITTEN)) { |
write_char_xy(10, top_line, 0xCA); // RC-transmitter |
36d8: 8a e0 ldi r24, 0x0A ; 10 |
36da: 60 91 02 01 lds r22, 0x0102 |
36de: 4a ec ldi r20, 0xCA ; 202 |
36e0: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
// jopl ... compass |
write_char_xy(16, top_line, 0xD0); // degree symbol |
36e4: 80 e1 ldi r24, 0x10 ; 16 |
36e6: 60 91 02 01 lds r22, 0x0102 |
36ea: 40 ed ldi r20, 0xD0 ; 208 |
36ec: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
// end jopl |
write_char_xy(26, top_line, 0xCC); // small meters m height |
36f0: 8a e1 ldi r24, 0x1A ; 26 |
36f2: 60 91 02 01 lds r22, 0x0102 |
36f6: 4c ec ldi r20, 0xCC ; 204 |
36f8: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(7, bottom_line, 0x9E); // small v |
36fc: 87 e0 ldi r24, 0x07 ; 7 |
36fe: 60 91 03 01 lds r22, 0x0103 |
3702: 4e e9 ldi r20, 0x9E ; 158 |
3704: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
3708: 80 91 1d 01 lds r24, 0x011D |
370c: 80 fd sbrc r24, 0 |
370e: a7 c0 rjmp .+334 ; 0x385e <osd_fcmode_jopl+0x3f8> |
write_char_xy(21, bottom_line - 1, 0x9E); // small V |
} |
} |
// jopl ... Times |
write_char_xy(14, bottom_line, 0xD1); // on clock |
3710: 8e e0 ldi r24, 0x0E ; 14 |
3712: 60 91 03 01 lds r22, 0x0103 |
3716: 41 ed ldi r20, 0xD1 ; 209 |
3718: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(21, bottom_line, 0xD2); // fly clock |
371c: 85 e1 ldi r24, 0x15 ; 21 |
371e: 60 91 03 01 lds r22, 0x0103 |
3722: 42 ed ldi r20, 0xD2 ; 210 |
3724: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
// end jopl |
COSD_FLAGS_RUNTIME |= COSD_ICONS_WRITTEN; |
3728: 80 91 1d 01 lds r24, 0x011D |
372c: 82 60 ori r24, 0x02 ; 2 |
372e: 80 93 1d 01 sts 0x011D, r24 |
3732: a3 ce rjmp .-698 ; 0x347a <osd_fcmode_jopl+0x14> |
draw_battery(2, bottom_line, min_voltage, debugData.Analog[9], max_voltage); |
write_ndigit_number_u_10th(3, bottom_line, debugData.Analog[9], 3, 0); |
if (debugData.Analog[9] <= min_voltage && last_UBat > min_voltage) { |
for (uint8_t x = 2; x < 8; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
3734: 82 e0 ldi r24, 0x02 ; 2 |
3736: 60 91 03 01 lds r22, 0x0103 |
373a: 4f e4 ldi r20, 0x4F ; 79 |
373c: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3740: 83 e0 ldi r24, 0x03 ; 3 |
3742: 60 91 03 01 lds r22, 0x0103 |
3746: 4f e4 ldi r20, 0x4F ; 79 |
3748: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
374c: 84 e0 ldi r24, 0x04 ; 4 |
374e: 60 91 03 01 lds r22, 0x0103 |
3752: 4f e4 ldi r20, 0x4F ; 79 |
3754: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3758: 85 e0 ldi r24, 0x05 ; 5 |
375a: 60 91 03 01 lds r22, 0x0103 |
375e: 4f e4 ldi r20, 0x4F ; 79 |
3760: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3764: 86 e0 ldi r24, 0x06 ; 6 |
3766: 60 91 03 01 lds r22, 0x0103 |
376a: 4f e4 ldi r20, 0x4F ; 79 |
376c: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
3770: 87 e0 ldi r24, 0x07 ; 7 |
3772: 60 91 03 01 lds r22, 0x0103 |
3776: 4f e4 ldi r20, 0x4F ; 79 |
3778: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
377c: 78 cf rjmp .-272 ; 0x366e <osd_fcmode_jopl+0x208> |
write_ndigit_number_u(7, top_line, debugData.Analog[10], 3, 0); |
if (debugData.Analog[10] <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (debugData.Analog[10] > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
377e: 17 e0 ldi r17, 0x07 ; 7 |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, 0); |
3780: 81 2f mov r24, r17 |
3782: 60 91 02 01 lds r22, 0x0102 |
3786: 40 e0 ldi r20, 0x00 ; 0 |
3788: 0e 94 91 08 call 0x1122 ; 0x1122 <write_char_att_xy> |
378c: 1f 5f subi r17, 0xFF ; 255 |
write_ndigit_number_u(7, top_line, debugData.Analog[10], 3, 0); |
if (debugData.Analog[10] <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (debugData.Analog[10] > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
378e: 1b 30 cpi r17, 0x0B ; 11 |
3790: b9 f7 brne .-18 ; 0x3780 <osd_fcmode_jopl+0x31a> |
3792: 93 ce rjmp .-730 ; 0x34ba <osd_fcmode_jopl+0x54> |
// end jopl |
// pre-bottom line |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
//write_ndigit_number_s(3, bottom_line - 1, ampere, 4, 0); |
write_ndigit_number_u_10th(3, bottom_line - 1, ampere / 10, 3, 0); |
3794: 20 91 03 01 lds r18, 0x0103 |
3798: 21 50 subi r18, 0x01 ; 1 |
379a: 80 91 37 01 lds r24, 0x0137 |
379e: 90 91 38 01 lds r25, 0x0138 |
37a2: 6a e0 ldi r22, 0x0A ; 10 |
37a4: 70 e0 ldi r23, 0x00 ; 0 |
37a6: 0e 94 7c 1c call 0x38f8 ; 0x38f8 <__divmodhi4> |
37aa: ab 01 movw r20, r22 |
37ac: 83 e0 ldi r24, 0x03 ; 3 |
37ae: 62 2f mov r22, r18 |
37b0: 23 e0 ldi r18, 0x03 ; 3 |
37b2: 30 e0 ldi r19, 0x00 ; 0 |
37b4: 00 e0 ldi r16, 0x00 ; 0 |
37b6: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
write_ndigit_number_s(10, bottom_line - 1, ampere_wasted / 10, 4, 0); |
37ba: 10 91 03 01 lds r17, 0x0103 |
37be: 11 50 subi r17, 0x01 ; 1 |
37c0: 60 91 3b 01 lds r22, 0x013B |
37c4: 70 91 3c 01 lds r23, 0x013C |
37c8: 80 91 3d 01 lds r24, 0x013D |
37cc: 90 91 3e 01 lds r25, 0x013E |
37d0: 2a e0 ldi r18, 0x0A ; 10 |
37d2: 30 e0 ldi r19, 0x00 ; 0 |
37d4: 40 e0 ldi r20, 0x00 ; 0 |
37d6: 50 e0 ldi r21, 0x00 ; 0 |
37d8: 0e 94 b1 1c call 0x3962 ; 0x3962 <__divmodsi4> |
37dc: 8a e0 ldi r24, 0x0A ; 10 |
37de: 61 2f mov r22, r17 |
37e0: a9 01 movw r20, r18 |
37e2: 24 e0 ldi r18, 0x04 ; 4 |
37e4: 30 e0 ldi r19, 0x00 ; 0 |
37e6: 0e 94 19 07 call 0xe32 ; 0xe32 <write_ndigit_number_s> |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
37ea: 80 91 1b 01 lds r24, 0x011B |
37ee: 85 ff sbrs r24, 5 |
37f0: e6 ce rjmp .-564 ; 0x35be <osd_fcmode_jopl+0x158> |
write_ndigit_number_u_10th(17, bottom_line - 1, s_volt, 3, 0); |
37f2: 60 91 03 01 lds r22, 0x0103 |
37f6: 61 50 subi r22, 0x01 ; 1 |
37f8: 40 91 9f 02 lds r20, 0x029F |
37fc: 50 91 a0 02 lds r21, 0x02A0 |
3800: 81 e1 ldi r24, 0x11 ; 17 |
3802: 23 e0 ldi r18, 0x03 ; 3 |
3804: 30 e0 ldi r19, 0x00 ; 0 |
3806: 0e 94 76 06 call 0xcec ; 0xcec <write_ndigit_number_u_10th> |
380a: d9 ce rjmp .-590 ; 0x35be <osd_fcmode_jopl+0x158> |
// end jopl |
if (debugData.Analog[5] > max_Altimeter) max_Altimeter = debugData.Analog[5]; |
if (COSD_FLAGS_MODES & COSD_FLAG_ARTHORIZON) { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, debugData.Analog[0], debugData.Analog[1]); |
380c: 40 91 4b 01 lds r20, 0x014B |
3810: 50 91 4c 01 lds r21, 0x014C |
3814: 20 91 4d 01 lds r18, 0x014D |
3818: 30 91 4e 01 lds r19, 0x014E |
381c: 80 91 02 01 lds r24, 0x0102 |
3820: 60 91 03 01 lds r22, 0x0103 |
3824: 61 50 subi r22, 0x01 ; 1 |
3826: 8e 5f subi r24, 0xFE ; 254 |
3828: 0e 94 e6 08 call 0x11cc ; 0x11cc <draw_artificial_horizon> |
382c: ba ce rjmp .-652 ; 0x35a2 <osd_fcmode_jopl+0x13c> |
write_ndigit_number_s_10th(22, top_line, debugData.Analog[5], 3, 0); |
} |
Vario = debugData.Analog[5] - last_Altimeter; |
draw_variometer(27, top_line, Vario); |
if (COSD_FLAGS_MODES & COSD_FLAG_BIGVARIO) { |
draw_big_variometer(27, 8, Vario); |
382e: 40 91 45 01 lds r20, 0x0145 |
3832: 50 91 46 01 lds r21, 0x0146 |
3836: 8b e1 ldi r24, 0x1B ; 27 |
3838: 68 e0 ldi r22, 0x08 ; 8 |
383a: 0e 94 84 0a call 0x1508 ; 0x1508 <draw_big_variometer> |
383e: 40 91 1b 01 lds r20, 0x011B |
3842: 92 ce rjmp .-732 ; 0x3568 <osd_fcmode_jopl+0x102> |
if ((debugData.Analog[5] > 100) || (debugData.Analog[5] < -100)) { |
// above 10m only write full meters |
write_ndigit_number_s(22, top_line, debugData.Analog[5] / 10, 4, 0); |
} else { |
// up to 10m write meters.dm |
write_ndigit_number_s_10th(22, top_line, debugData.Analog[5], 3, 0); |
3844: 40 91 55 01 lds r20, 0x0155 |
3848: 50 91 56 01 lds r21, 0x0156 |
384c: 86 e1 ldi r24, 0x16 ; 22 |
384e: 60 91 02 01 lds r22, 0x0102 |
3852: 23 e0 ldi r18, 0x03 ; 3 |
3854: 30 e0 ldi r19, 0x00 ; 0 |
3856: 00 e0 ldi r16, 0x00 ; 0 |
3858: 0e 94 d3 05 call 0xba6 ; 0xba6 <write_ndigit_number_s_10th> |
385c: 6e ce rjmp .-804 ; 0x353a <osd_fcmode_jopl+0xd4> |
write_char_xy(26, top_line, 0xCC); // small meters m height |
write_char_xy(7, bottom_line, 0x9E); // small v |
if (COSD_FLAGS_RUNTIME & COSD_FLAG_STROMREC) { |
write_char_xy(7, bottom_line - 1, 0x9F); // small A |
385e: 60 91 03 01 lds r22, 0x0103 |
3862: 61 50 subi r22, 0x01 ; 1 |
3864: 87 e0 ldi r24, 0x07 ; 7 |
3866: 4f e9 ldi r20, 0x9F ; 159 |
3868: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
write_char_xy(14, bottom_line - 1, 0xB5); // mah |
386c: 60 91 03 01 lds r22, 0x0103 |
3870: 61 50 subi r22, 0x01 ; 1 |
3872: 8e e0 ldi r24, 0x0E ; 14 |
3874: 45 eb ldi r20, 0xB5 ; 181 |
3876: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
if (COSD_FLAGS_MODES & COSD_FLAG_STROMVOLT) { |
387a: 80 91 1b 01 lds r24, 0x011B |
387e: 85 ff sbrs r24, 5 |
3880: 47 cf rjmp .-370 ; 0x3710 <osd_fcmode_jopl+0x2aa> |
write_char_xy(21, bottom_line - 1, 0x9E); // small V |
3882: 60 91 03 01 lds r22, 0x0103 |
3886: 61 50 subi r22, 0x01 ; 1 |
3888: 85 e1 ldi r24, 0x15 ; 21 |
388a: 4e e9 ldi r20, 0x9E ; 158 |
388c: 0e 94 04 05 call 0xa08 ; 0xa08 <write_char_xy> |
3890: 3f cf rjmp .-386 ; 0x3710 <osd_fcmode_jopl+0x2aa> |
00003892 <__mulsi3>: |
3892: 62 9f mul r22, r18 |
3894: d0 01 movw r26, r0 |
3896: 73 9f mul r23, r19 |
3898: f0 01 movw r30, r0 |
389a: 82 9f mul r24, r18 |
389c: e0 0d add r30, r0 |
389e: f1 1d adc r31, r1 |
38a0: 64 9f mul r22, r20 |
38a2: e0 0d add r30, r0 |
38a4: f1 1d adc r31, r1 |
38a6: 92 9f mul r25, r18 |
38a8: f0 0d add r31, r0 |
38aa: 83 9f mul r24, r19 |
38ac: f0 0d add r31, r0 |
38ae: 74 9f mul r23, r20 |
38b0: f0 0d add r31, r0 |
38b2: 65 9f mul r22, r21 |
38b4: f0 0d add r31, r0 |
38b6: 99 27 eor r25, r25 |
38b8: 72 9f mul r23, r18 |
38ba: b0 0d add r27, r0 |
38bc: e1 1d adc r30, r1 |
38be: f9 1f adc r31, r25 |
38c0: 63 9f mul r22, r19 |
38c2: b0 0d add r27, r0 |
38c4: e1 1d adc r30, r1 |
38c6: f9 1f adc r31, r25 |
38c8: bd 01 movw r22, r26 |
38ca: cf 01 movw r24, r30 |
38cc: 11 24 eor r1, r1 |
38ce: 08 95 ret |
000038d0 <__udivmodhi4>: |
38d0: aa 1b sub r26, r26 |
38d2: bb 1b sub r27, r27 |
38d4: 51 e1 ldi r21, 0x11 ; 17 |
38d6: 07 c0 rjmp .+14 ; 0x38e6 <__udivmodhi4_ep> |
000038d8 <__udivmodhi4_loop>: |
38d8: aa 1f adc r26, r26 |
38da: bb 1f adc r27, r27 |
38dc: a6 17 cp r26, r22 |
38de: b7 07 cpc r27, r23 |
38e0: 10 f0 brcs .+4 ; 0x38e6 <__udivmodhi4_ep> |
38e2: a6 1b sub r26, r22 |
38e4: b7 0b sbc r27, r23 |
000038e6 <__udivmodhi4_ep>: |
38e6: 88 1f adc r24, r24 |
38e8: 99 1f adc r25, r25 |
38ea: 5a 95 dec r21 |
38ec: a9 f7 brne .-22 ; 0x38d8 <__udivmodhi4_loop> |
38ee: 80 95 com r24 |
38f0: 90 95 com r25 |
38f2: bc 01 movw r22, r24 |
38f4: cd 01 movw r24, r26 |
38f6: 08 95 ret |
000038f8 <__divmodhi4>: |
38f8: 97 fb bst r25, 7 |
38fa: 09 2e mov r0, r25 |
38fc: 07 26 eor r0, r23 |
38fe: 0a d0 rcall .+20 ; 0x3914 <__divmodhi4_neg1> |
3900: 77 fd sbrc r23, 7 |
3902: 04 d0 rcall .+8 ; 0x390c <__divmodhi4_neg2> |
3904: e5 df rcall .-54 ; 0x38d0 <__udivmodhi4> |
3906: 06 d0 rcall .+12 ; 0x3914 <__divmodhi4_neg1> |
3908: 00 20 and r0, r0 |
390a: 1a f4 brpl .+6 ; 0x3912 <__divmodhi4_exit> |
0000390c <__divmodhi4_neg2>: |
390c: 70 95 com r23 |
390e: 61 95 neg r22 |
3910: 7f 4f sbci r23, 0xFF ; 255 |
00003912 <__divmodhi4_exit>: |
3912: 08 95 ret |
00003914 <__divmodhi4_neg1>: |
3914: f6 f7 brtc .-4 ; 0x3912 <__divmodhi4_exit> |
3916: 90 95 com r25 |
3918: 81 95 neg r24 |
391a: 9f 4f sbci r25, 0xFF ; 255 |
391c: 08 95 ret |
0000391e <__udivmodsi4>: |
391e: a1 e2 ldi r26, 0x21 ; 33 |
3920: 1a 2e mov r1, r26 |
3922: aa 1b sub r26, r26 |
3924: bb 1b sub r27, r27 |
3926: fd 01 movw r30, r26 |
3928: 0d c0 rjmp .+26 ; 0x3944 <__udivmodsi4_ep> |
0000392a <__udivmodsi4_loop>: |
392a: aa 1f adc r26, r26 |
392c: bb 1f adc r27, r27 |
392e: ee 1f adc r30, r30 |
3930: ff 1f adc r31, r31 |
3932: a2 17 cp r26, r18 |
3934: b3 07 cpc r27, r19 |
3936: e4 07 cpc r30, r20 |
3938: f5 07 cpc r31, r21 |
393a: 20 f0 brcs .+8 ; 0x3944 <__udivmodsi4_ep> |
393c: a2 1b sub r26, r18 |
393e: b3 0b sbc r27, r19 |
3940: e4 0b sbc r30, r20 |
3942: f5 0b sbc r31, r21 |
00003944 <__udivmodsi4_ep>: |
3944: 66 1f adc r22, r22 |
3946: 77 1f adc r23, r23 |
3948: 88 1f adc r24, r24 |
394a: 99 1f adc r25, r25 |
394c: 1a 94 dec r1 |
394e: 69 f7 brne .-38 ; 0x392a <__udivmodsi4_loop> |
3950: 60 95 com r22 |
3952: 70 95 com r23 |
3954: 80 95 com r24 |
3956: 90 95 com r25 |
3958: 9b 01 movw r18, r22 |
395a: ac 01 movw r20, r24 |
395c: bd 01 movw r22, r26 |
395e: cf 01 movw r24, r30 |
3960: 08 95 ret |
00003962 <__divmodsi4>: |
3962: 97 fb bst r25, 7 |
3964: 09 2e mov r0, r25 |
3966: 05 26 eor r0, r21 |
3968: 0e d0 rcall .+28 ; 0x3986 <__divmodsi4_neg1> |
396a: 57 fd sbrc r21, 7 |
396c: 04 d0 rcall .+8 ; 0x3976 <__divmodsi4_neg2> |
396e: d7 df rcall .-82 ; 0x391e <__udivmodsi4> |
3970: 0a d0 rcall .+20 ; 0x3986 <__divmodsi4_neg1> |
3972: 00 1c adc r0, r0 |
3974: 38 f4 brcc .+14 ; 0x3984 <__divmodsi4_exit> |
00003976 <__divmodsi4_neg2>: |
3976: 50 95 com r21 |
3978: 40 95 com r20 |
397a: 30 95 com r19 |
397c: 21 95 neg r18 |
397e: 3f 4f sbci r19, 0xFF ; 255 |
3980: 4f 4f sbci r20, 0xFF ; 255 |
3982: 5f 4f sbci r21, 0xFF ; 255 |
00003984 <__divmodsi4_exit>: |
3984: 08 95 ret |
00003986 <__divmodsi4_neg1>: |
3986: f6 f7 brtc .-4 ; 0x3984 <__divmodsi4_exit> |
3988: 90 95 com r25 |
398a: 80 95 com r24 |
398c: 70 95 com r23 |
398e: 61 95 neg r22 |
3990: 7f 4f sbci r23, 0xFF ; 255 |
3992: 8f 4f sbci r24, 0xFF ; 255 |
3994: 9f 4f sbci r25, 0xFF ; 255 |
3996: 08 95 ret |
00003998 <itoa>: |
3998: fb 01 movw r30, r22 |
399a: 9f 01 movw r18, r30 |
399c: e8 94 clt |
399e: 42 30 cpi r20, 0x02 ; 2 |
39a0: c4 f0 brlt .+48 ; 0x39d2 <itoa+0x3a> |
39a2: 45 32 cpi r20, 0x25 ; 37 |
39a4: b4 f4 brge .+44 ; 0x39d2 <itoa+0x3a> |
39a6: 4a 30 cpi r20, 0x0A ; 10 |
39a8: 29 f4 brne .+10 ; 0x39b4 <itoa+0x1c> |
39aa: 97 fb bst r25, 7 |
39ac: 1e f4 brtc .+6 ; 0x39b4 <itoa+0x1c> |
39ae: 90 95 com r25 |
39b0: 81 95 neg r24 |
39b2: 9f 4f sbci r25, 0xFF ; 255 |
39b4: 64 2f mov r22, r20 |
39b6: 77 27 eor r23, r23 |
39b8: 0e 94 68 1c call 0x38d0 ; 0x38d0 <__udivmodhi4> |
39bc: 80 5d subi r24, 0xD0 ; 208 |
39be: 8a 33 cpi r24, 0x3A ; 58 |
39c0: 0c f0 brlt .+2 ; 0x39c4 <itoa+0x2c> |
39c2: 89 5d subi r24, 0xD9 ; 217 |
39c4: 81 93 st Z+, r24 |
39c6: cb 01 movw r24, r22 |
39c8: 00 97 sbiw r24, 0x00 ; 0 |
39ca: a1 f7 brne .-24 ; 0x39b4 <itoa+0x1c> |
39cc: 16 f4 brtc .+4 ; 0x39d2 <itoa+0x3a> |
39ce: 5d e2 ldi r21, 0x2D ; 45 |
39d0: 51 93 st Z+, r21 |
39d2: 10 82 st Z, r1 |
39d4: c9 01 movw r24, r18 |
39d6: 0c 94 02 1d jmp 0x3a04 ; 0x3a04 <strrev> |
000039da <__eerd_byte_m162>: |
39da: e1 99 sbic 0x1c, 1 ; 28 |
39dc: fe cf rjmp .-4 ; 0x39da <__eerd_byte_m162> |
39de: 9f bb out 0x1f, r25 ; 31 |
39e0: 8e bb out 0x1e, r24 ; 30 |
39e2: e0 9a sbi 0x1c, 0 ; 28 |
39e4: 99 27 eor r25, r25 |
39e6: 8d b3 in r24, 0x1d ; 29 |
39e8: 08 95 ret |
000039ea <__eewr_byte_m162>: |
39ea: 26 2f mov r18, r22 |
000039ec <__eewr_r18_m162>: |
39ec: e1 99 sbic 0x1c, 1 ; 28 |
39ee: fe cf rjmp .-4 ; 0x39ec <__eewr_r18_m162> |
39f0: 9f bb out 0x1f, r25 ; 31 |
39f2: 8e bb out 0x1e, r24 ; 30 |
39f4: 2d bb out 0x1d, r18 ; 29 |
39f6: 0f b6 in r0, 0x3f ; 63 |
39f8: f8 94 cli |
39fa: e2 9a sbi 0x1c, 2 ; 28 |
39fc: e1 9a sbi 0x1c, 1 ; 28 |
39fe: 0f be out 0x3f, r0 ; 63 |
3a00: 01 96 adiw r24, 0x01 ; 1 |
3a02: 08 95 ret |
00003a04 <strrev>: |
3a04: dc 01 movw r26, r24 |
3a06: fc 01 movw r30, r24 |
3a08: 67 2f mov r22, r23 |
3a0a: 71 91 ld r23, Z+ |
3a0c: 77 23 and r23, r23 |
3a0e: e1 f7 brne .-8 ; 0x3a08 <strrev+0x4> |
3a10: 32 97 sbiw r30, 0x02 ; 2 |
3a12: 04 c0 rjmp .+8 ; 0x3a1c <strrev+0x18> |
3a14: 7c 91 ld r23, X |
3a16: 6d 93 st X+, r22 |
3a18: 70 83 st Z, r23 |
3a1a: 62 91 ld r22, -Z |
3a1c: ae 17 cp r26, r30 |
3a1e: bf 07 cpc r27, r31 |
3a20: c8 f3 brcs .-14 ; 0x3a14 <strrev+0x10> |
3a22: 08 95 ret |
00003a24 <_exit>: |
3a24: f8 94 cli |
00003a26 <__stop_program>: |
3a26: ff cf rjmp .-2 ; 0x3a26 <__stop_program> |
/C-OSD/trunk/default/C-OSD.map |
---|
0,0 → 1,787 |
Archive member included because of file (symbol) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mulsi3.o) |
max7456_software_spi.o (__mulsi3) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodhi4.o) |
max7456_software_spi.o (__udivmodhi4) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodhi4.o) |
osd_helpers.o (__divmodhi4) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodsi4.o) |
osd_ncmode_default.o (__udivmodsi4) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodsi4.o) |
max7456_software_spi.o (__divmodsi4) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm162.o (exit) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_copy_data.o) |
main.o (__do_copy_data) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_clear_bss.o) |
main.o (__do_clear_bss) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(itoa.o) |
max7456_software_spi.o (itoa) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(eerd_byte_atmega162.o) |
config.o (__eerd_byte_m162) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(eewr_byte_atmega162.o) |
config.o (__eewr_byte_m162) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(strrev.o) |
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(itoa.o) (strrev) |
Allocating common symbols |
Common symbol size file |
rxd_buffer 0x96 usart1.o |
wasted_ampere_offset |
0x2 main.o |
debugData 0x42 main.o |
SPI_buffer 0xb main.o |
mode 0x2 config.o |
conv_array 0x7 max7456_software_spi.o |
s_volt 0x2 spi.o |
setsReceived 0x2 main.o |
txd_buffer 0x14 usart1.o |
altimeter_offset 0x2 main.o |
naviData 0x52 main.o |
Memory Configuration |
Name Origin Length Attributes |
text 0x00000000 0x00020000 xr |
data 0x00800060 0x0000ffa0 rw !x |
eeprom 0x00810000 0x00010000 rw !x |
fuse 0x00820000 0x00000400 rw !x |
lock 0x00830000 0x00000400 rw !x |
signature 0x00840000 0x00000400 rw !x |
*default* 0x00000000 0xffffffff |
Linker script and memory map |
Address of section .data set to 0x800100 |
LOAD c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm162.o |
LOAD main.o |
LOAD usart1.o |
LOAD max7456_software_spi.o |
LOAD osd_helpers.o |
LOAD config.o |
LOAD spi.o |
LOAD buttons.o |
LOAD ppm.o |
LOAD osd_ncmode_default.o |
LOAD osd_ncmode_minimal.o |
LOAD osd_fcmode_default.o |
LOAD osd_fcmode_jopl.o |
LOAD characters.o |
LOAD c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a |
LOAD c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a |
LOAD c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a |
.hash |
*(.hash) |
.dynsym |
*(.dynsym) |
.dynstr |
*(.dynstr) |
.gnu.version |
*(.gnu.version) |
.gnu.version_d |
*(.gnu.version_d) |
.gnu.version_r |
*(.gnu.version_r) |
.rel.init |
*(.rel.init) |
.rela.init |
*(.rela.init) |
.rel.text |
*(.rel.text) |
*(.rel.text.*) |
*(.rel.gnu.linkonce.t*) |
.rela.text |
*(.rela.text) |
*(.rela.text.*) |
*(.rela.gnu.linkonce.t*) |
.rel.fini |
*(.rel.fini) |
.rela.fini |
*(.rela.fini) |
.rel.rodata |
*(.rel.rodata) |
*(.rel.rodata.*) |
*(.rel.gnu.linkonce.r*) |
.rela.rodata |
*(.rela.rodata) |
*(.rela.rodata.*) |
*(.rela.gnu.linkonce.r*) |
.rel.data |
*(.rel.data) |
*(.rel.data.*) |
*(.rel.gnu.linkonce.d*) |
.rela.data |
*(.rela.data) |
*(.rela.data.*) |
*(.rela.gnu.linkonce.d*) |
.rel.ctors |
*(.rel.ctors) |
.rela.ctors |
*(.rela.ctors) |
.rel.dtors |
*(.rel.dtors) |
.rela.dtors |
*(.rela.dtors) |
.rel.got |
*(.rel.got) |
.rela.got |
*(.rela.got) |
.rel.bss |
*(.rel.bss) |
.rela.bss |
*(.rela.bss) |
.rel.plt |
*(.rel.plt) |
.rela.plt |
*(.rela.plt) |
.text 0x00000000 0x3a28 |
*(.vectors) |
.vectors 0x00000000 0x70 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm162.o |
0x00000000 __vectors |
*(.vectors) |
*(.progmem.gcc*) |
*(.progmem*) |
.progmem.data 0x00000070 0xdb main.o |
0x00000138 fcdisplaymodes |
0x000000c4 stats_item_6 |
0x000000e0 stats_item_pointers |
0x000000fc str_SW |
0x0000009a stats_item_3 |
0x00000128 str_3 |
0x000000a8 stats_item_4 |
0x00000130 ncdisplaymodes |
0x000000f9 str_S |
0x00000070 stats_item_0 |
0x000000d2 stats_item_7 |
0x00000118 str_1 |
0x00000102 str_NW |
0x000000f0 str_NE |
0x00000120 str_2 |
0x000000f6 str_SE |
0x00000105 str_N |
0x00000108 directions |
0x000000b6 stats_item_5 |
0x0000008c stats_item_2 |
0x0000007e stats_item_1 |
0x000000ff str_W |
0x000000f3 str_E |
.progmem.data 0x0000014b 0x99 osd_helpers.o |
0x00000169 vario_06 |
0x0000015a vario_03 |
0x00000164 vario_05 |
0x00000182 vario_11 |
0x00000173 vario_08 |
0x00000191 vario_14 |
0x0000016e vario_07 |
0x0000014b vario_00 |
0x00000187 vario_12 |
0x00000178 vario_09 |
0x00000155 vario_02 |
0x0000015f vario_04 |
0x00000150 vario_01 |
0x0000018c vario_13 |
0x0000017d vario_10 |
0x00000196 vario_pnt |
.progmem.data 0x000001e4 0x1a7 config.o |
0x000001e4 VM_PAL |
0x000001e9 VM_NTSC |
0x0000021f ee_msg |
0x000001ee ee_message0 |
0x00000207 ee_message1 |
0x0000038c . = ALIGN (0x2) |
*fill* 0x0000038b 0x1 00 |
0x0000038c __trampolines_start = . |
*(.trampolines) |
.trampolines 0x0000038c 0x0 linker stubs |
*(.trampolines*) |
0x0000038c __trampolines_end = . |
*(.jumptables) |
*(.jumptables*) |
*(.lowtext) |
*(.lowtext*) |
0x0000038c __ctors_start = . |
*(.ctors) |
0x0000038c __ctors_end = . |
0x0000038c __dtors_start = . |
*(.dtors) |
0x0000038c __dtors_end = . |
SORT(*)(.ctors) |
SORT(*)(.dtors) |
*(.init0) |
.init0 0x0000038c 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm162.o |
0x0000038c __init |
*(.init0) |
*(.init1) |
*(.init1) |
*(.init2) |
.init2 0x0000038c 0xc c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm162.o |
*(.init2) |
*(.init3) |
*(.init3) |
*(.init4) |
.init4 0x00000398 0x16 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_copy_data.o) |
0x00000398 __do_copy_data |
.init4 0x000003ae 0x10 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_clear_bss.o) |
0x000003ae __do_clear_bss |
*(.init4) |
*(.init5) |
*(.init5) |
*(.init6) |
*(.init6) |
*(.init7) |
*(.init7) |
*(.init8) |
*(.init8) |
*(.init9) |
.init9 0x000003be 0x8 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm162.o |
*(.init9) |
*(.text) |
.text 0x000003c6 0x4 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm162.o |
0x000003c6 __vector_1 |
0x000003c6 __vector_24 |
0x000003c6 __vector_12 |
0x000003c6 __bad_interrupt |
0x000003c6 __vector_6 |
0x000003c6 __vector_23 |
0x000003c6 __vector_25 |
0x000003c6 __vector_11 |
0x000003c6 __vector_13 |
0x000003c6 __vector_17 |
0x000003c6 __vector_19 |
0x000003c6 __vector_7 |
0x000003c6 __vector_27 |
0x000003c6 __vector_5 |
0x000003c6 __vector_4 |
0x000003c6 __vector_9 |
0x000003c6 __vector_2 |
0x000003c6 __vector_21 |
0x000003c6 __vector_15 |
0x000003c6 __vector_8 |
0x000003c6 __vector_26 |
0x000003c6 __vector_14 |
0x000003c6 __vector_10 |
.text 0x000003ca 0x298 main.o |
0x000003ca __vector_default |
0x000003e0 main |
0x000005b2 __vector_16 |
.text 0x00000662 0x2ba usart1.o |
0x000006b4 __vector_22 |
0x0000067c usart1_EnableTXD |
0x00000662 usart1_init |
0x0000068e usart1_puts_pgm |
0x00000672 usart1_DisableTXD |
0x00000860 Decode64 |
0x00000686 usart1_putc |
0x000006c8 __vector_20 |
.text 0x0000091c 0x81e max7456_software_spi.o |
0x00000b5a write_string_pgm_down |
0x0000091c spi_send |
0x00000ba6 write_ndigit_number_s_10th |
0x00000aa6 write_ascii_string |
0x00001122 write_char_att_xy |
0x000010fa write_char_att |
0x00000cec write_ndigit_number_u_10th |
0x00000afc write_ascii_string_pgm |
0x000010ea clear |
0x00001074 write_time |
0x00000a20 write_ascii_char |
0x00000a08 write_char_xy |
0x00000f7a write_gps_pos |
0x00000e32 write_ndigit_number_s |
0x00000ed6 write_ndigit_number_u |
0x000009e2 write_char |
0x0000095e spi_send_byte |
.text 0x0000113a 0x3fe osd_helpers.o |
0x0000119e heading_fine_conv |
0x0000113a heading_conv |
0x000011cc draw_artificial_horizon |
0x0000142e draw_battery |
0x000014aa draw_compass |
0x00001508 draw_big_variometer |
0x00001382 draw_variometer |
.text 0x00001538 0x6b2 config.o |
0x000019e2 init_cosd |
0x00001738 config_menu |
0x0000155a config_menu_drawings |
0x00001538 onoff |
0x0000197a get_eeprom |
0x000016ce config_menu_doclick |
0x000016fe save_eeprom |
.text 0x00001bea 0xc6 spi.o |
0x00001ca6 spi_send_next |
0x00001c90 StartTransfer |
0x00001bea SpiMasterInit |
0x00001c84 TransferIsBusy |
0x00001c0e __vector_18 |
.text 0x00001cb0 0x80 buttons.o |
0x00001cf2 s2_pressed |
0x00001cb0 s1_pressed |
.text 0x00001d30 0xe8 ppm.o |
0x00001d46 __vector_3 |
0x00001d30 ppm_init |
.text 0x00001e18 0xbec osd_ncmode_default.o |
0x00001e18 osd_ncmode_default |
.text 0x00002a04 0x710 osd_ncmode_minimal.o |
0x00002a04 osd_ncmode_minimal |
.text 0x00003114 0x352 osd_fcmode_default.o |
0x00003114 osd_fcmode_default |
.text 0x00003466 0x42c osd_fcmode_jopl.o |
0x00003466 osd_fcmode_jopl |
.text 0x00003892 0x0 characters.o |
.text 0x00003892 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mulsi3.o) |
.text 0x00003892 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodhi4.o) |
.text 0x00003892 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodhi4.o) |
.text 0x00003892 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodsi4.o) |
.text 0x00003892 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodsi4.o) |
.text 0x00003892 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o) |
.text 0x00003892 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_copy_data.o) |
.text 0x00003892 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_clear_bss.o) |
.text 0x00003892 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(itoa.o) |
.text 0x00003892 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(eerd_byte_atmega162.o) |
.text 0x00003892 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(eewr_byte_atmega162.o) |
.text 0x00003892 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(strrev.o) |
0x00003892 . = ALIGN (0x2) |
*(.text.*) |
.text.libgcc 0x00003892 0x3e c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mulsi3.o) |
0x00003892 __mulsi3 |
.text.libgcc 0x000038d0 0x28 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodhi4.o) |
0x000038d0 __udivmodhi4 |
.text.libgcc 0x000038f8 0x26 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodhi4.o) |
0x000038f8 __divmodhi4 |
0x000038f8 _div |
.text.libgcc 0x0000391e 0x44 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodsi4.o) |
0x0000391e __udivmodsi4 |
.text.libgcc 0x00003962 0x36 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodsi4.o) |
0x00003962 __divmodsi4 |
.text.libgcc 0x00003998 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o) |
.text.libgcc 0x00003998 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_copy_data.o) |
.text.libgcc 0x00003998 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_clear_bss.o) |
.text.avr-libc |
0x00003998 0x42 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(itoa.o) |
0x00003998 itoa |
.text.avr-libc |
0x000039da 0x10 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(eerd_byte_atmega162.o) |
0x000039da __eerd_byte_m162 |
.text.avr-libc |
0x000039ea 0x1a c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(eewr_byte_atmega162.o) |
0x000039ec __eewr_r18_m162 |
0x000039ea __eewr_byte_m162 |
.text.avr-libc |
0x00003a04 0x20 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(strrev.o) |
0x00003a04 strrev |
0x00003a24 . = ALIGN (0x2) |
*(.fini9) |
.fini9 0x00003a24 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o) |
0x00003a24 exit |
0x00003a24 _exit |
*(.fini9) |
*(.fini8) |
*(.fini8) |
*(.fini7) |
*(.fini7) |
*(.fini6) |
*(.fini6) |
*(.fini5) |
*(.fini5) |
*(.fini4) |
*(.fini4) |
*(.fini3) |
*(.fini3) |
*(.fini2) |
*(.fini2) |
*(.fini1) |
*(.fini1) |
*(.fini0) |
.fini0 0x00003a24 0x4 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o) |
*(.fini0) |
0x00003a28 _etext = . |
.data 0x00800100 0x12 load address 0x00003a28 |
0x00800100 PROVIDE (__data_start, .) |
*(.data) |
.data 0x00800100 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm162.o |
.data 0x00800100 0x9 main.o |
0x00800103 bottom_line |
0x00800104 min_UBat |
0x00800102 top_line |
0x00800100 last_UBat |
0x00800107 osd_fcmode |
0x00800101 last_RC_Quality |
0x00800105 osd_ncmode |
.data 0x00800109 0x0 usart1.o |
.data 0x00800109 0x0 max7456_software_spi.o |
.data 0x00800109 0x7 osd_helpers.o |
0x0080010a old_af_y |
0x00800109 old_af_x |
.data 0x00800110 0x0 config.o |
.data 0x00800110 0x1 spi.o |
0x00800110 spi_ready |
.data 0x00800111 0x0 buttons.o |
.data 0x00800111 0x1 ppm.o |
.data 0x00800112 0x0 osd_ncmode_default.o |
.data 0x00800112 0x0 osd_ncmode_minimal.o |
.data 0x00800112 0x0 osd_fcmode_default.o |
.data 0x00800112 0x0 osd_fcmode_jopl.o |
.data 0x00800112 0x0 characters.o |
.data 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mulsi3.o) |
.data 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodhi4.o) |
.data 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodhi4.o) |
.data 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodsi4.o) |
.data 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodsi4.o) |
.data 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o) |
.data 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_copy_data.o) |
.data 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_clear_bss.o) |
.data 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(itoa.o) |
.data 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(eerd_byte_atmega162.o) |
.data 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(eewr_byte_atmega162.o) |
.data 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(strrev.o) |
*(.data*) |
*(.rodata) |
*(.rodata*) |
*(.gnu.linkonce.d*) |
0x00800112 . = ALIGN (0x2) |
0x00800112 _edata = . |
0x00800112 PROVIDE (__data_end, .) |
.bss 0x00800112 0x18f |
0x00800112 PROVIDE (__bss_start, .) |
*(.bss) |
.bss 0x00800112 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm162.o |
.bss 0x00800112 0x17 main.o |
0x00800114 timer |
0x0080011c COSD_FLAGS_CONFIG |
0x0080011e COSD_DISPLAYMODE |
0x0080011b COSD_FLAGS_MODES |
0x00800121 max_GroundSpeed |
0x00800112 uptime |
0x0080011f max_Altimeter |
0x00800119 min_voltage |
0x00800118 seconds_since_last_data |
0x0080011a max_voltage |
0x00800127 old_MKFlags |
0x00800123 max_Distance |
0x00800125 max_FlyingTime |
0x0080011d COSD_FLAGS_RUNTIME |
0x00800116 flytime_fc |
.bss 0x00800129 0xb usart1.o |
0x0080012a ReceivedBytes |
0x00800129 rxd_buffer_locked |
0x0080012b pRxData |
0x0080012d RxDataLen |
.bss 0x00800134 0x0 max7456_software_spi.o |
.bss 0x00800134 0x0 osd_helpers.o |
.bss 0x00800134 0x0 config.o |
.bss 0x00800134 0xb spi.o |
0x00800139 max_ampere |
0x0080013b ampere_wasted |
0x00800136 request_count |
0x00800134 icnt |
0x00800137 ampere |
.bss 0x0080013f 0x0 buttons.o |
.bss 0x0080013f 0x4 ppm.o |
0x0080013f old_timer1 |
0x00800141 ppm |
.bss 0x00800143 0x0 osd_ncmode_default.o |
.bss 0x00800143 0x0 osd_ncmode_minimal.o |
.bss 0x00800143 0x0 osd_fcmode_default.o |
.bss 0x00800143 0x4 osd_fcmode_jopl.o |
.bss 0x00800147 0x0 characters.o |
.bss 0x00800147 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mulsi3.o) |
.bss 0x00800147 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodhi4.o) |
.bss 0x00800147 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodhi4.o) |
.bss 0x00800147 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodsi4.o) |
.bss 0x00800147 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodsi4.o) |
.bss 0x00800147 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o) |
.bss 0x00800147 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_copy_data.o) |
.bss 0x00800147 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_clear_bss.o) |
.bss 0x00800147 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(itoa.o) |
.bss 0x00800147 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(eerd_byte_atmega162.o) |
.bss 0x00800147 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(eewr_byte_atmega162.o) |
.bss 0x00800147 0x0 c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(strrev.o) |
*(.bss*) |
*(COMMON) |
COMMON 0x00800147 0xa5 main.o |
0x00800147 wasted_ampere_offset |
0x00800149 debugData |
0x0080018b SPI_buffer |
0x00800196 setsReceived |
0x00800198 altimeter_offset |
0x0080019a naviData |
COMMON 0x008001ec 0xaa usart1.o |
0x008001ec rxd_buffer |
0x00800282 txd_buffer |
COMMON 0x00800296 0x7 max7456_software_spi.o |
0x00800296 conv_array |
COMMON 0x0080029d 0x2 config.o |
0x0080029d mode |
COMMON 0x0080029f 0x2 spi.o |
0x0080029f s_volt |
0x008002a1 PROVIDE (__bss_end, .) |
0x00003a28 __data_load_start = LOADADDR (.data) |
0x00003a3a __data_load_end = (__data_load_start + SIZEOF (.data)) |
.noinit 0x008002a1 0x0 |
0x008002a1 PROVIDE (__noinit_start, .) |
*(.noinit*) |
0x008002a1 PROVIDE (__noinit_end, .) |
0x008002a1 _end = . |
0x008002a1 PROVIDE (__heap_start, .) |
.eeprom 0x00810000 0x5 |
*(.eeprom*) |
.eeprom 0x00810000 0x5 config.o |
0x00810001 ee_checkbyte2 |
0x00810002 ee_COSD_FLAGS_MODES |
0x00810003 ee_COSD_FLAGS_CONFIG |
0x00810000 ee_checkbyte1 |
0x00810004 ee_COSD_DISPLAYMODE |
0x00810005 __eeprom_end = . |
.fuse |
*(.fuse) |
*(.lfuse) |
*(.hfuse) |
*(.efuse) |
.lock |
*(.lock*) |
.signature |
*(.signature*) |
.stab |
*(.stab) |
.stabstr |
*(.stabstr) |
.stab.excl |
*(.stab.excl) |
.stab.exclstr |
*(.stab.exclstr) |
.stab.index |
*(.stab.index) |
.stab.indexstr |
*(.stab.indexstr) |
.comment |
*(.comment) |
.debug |
*(.debug) |
.line |
*(.line) |
.debug_srcinfo |
*(.debug_srcinfo) |
.debug_sfnames |
*(.debug_sfnames) |
.debug_aranges 0x00000000 0x180 |
*(.debug_aranges) |
.debug_aranges |
0x00000000 0x20 main.o |
.debug_aranges |
0x00000020 0x20 usart1.o |
.debug_aranges |
0x00000040 0x20 max7456_software_spi.o |
.debug_aranges |
0x00000060 0x20 osd_helpers.o |
.debug_aranges |
0x00000080 0x20 config.o |
.debug_aranges |
0x000000a0 0x20 spi.o |
.debug_aranges |
0x000000c0 0x20 buttons.o |
.debug_aranges |
0x000000e0 0x20 ppm.o |
.debug_aranges |
0x00000100 0x20 osd_ncmode_default.o |
.debug_aranges |
0x00000120 0x20 osd_ncmode_minimal.o |
.debug_aranges |
0x00000140 0x20 osd_fcmode_default.o |
.debug_aranges |
0x00000160 0x20 osd_fcmode_jopl.o |
.debug_pubnames |
0x00000000 0x245b |
*(.debug_pubnames) |
.debug_pubnames |
0x00000000 0x36b main.o |
.debug_pubnames |
0x0000036b 0x320 usart1.o |
.debug_pubnames |
0x0000068b 0x3aa max7456_software_spi.o |
.debug_pubnames |
0x00000a35 0x3b0 osd_helpers.o |
.debug_pubnames |
0x00000de5 0x364 config.o |
.debug_pubnames |
0x00001149 0x2fc spi.o |
.debug_pubnames |
0x00001445 0x252 buttons.o |
.debug_pubnames |
0x00001697 0x267 ppm.o |
.debug_pubnames |
0x000018fe 0x24b osd_ncmode_default.o |
.debug_pubnames |
0x00001b49 0x24b osd_ncmode_minimal.o |
.debug_pubnames |
0x00001d94 0x24b osd_fcmode_default.o |
.debug_pubnames |
0x00001fdf 0x248 osd_fcmode_jopl.o |
.debug_pubnames |
0x00002227 0x234 characters.o |
.debug_info 0x00000000 0x70a3 |
*(.debug_info) |
.debug_info 0x00000000 0xa24 main.o |
.debug_info 0x00000a24 0x8aa usart1.o |
.debug_info 0x000012ce 0xd07 max7456_software_spi.o |
.debug_info 0x00001fd5 0xa7c osd_helpers.o |
.debug_info 0x00002a51 0xe4b config.o |
.debug_info 0x0000389c 0x7a9 spi.o |
.debug_info 0x00004045 0x6f4 buttons.o |
.debug_info 0x00004739 0x640 ppm.o |
.debug_info 0x00004d79 0x836 osd_ncmode_default.o |
.debug_info 0x000055af 0x7d2 osd_ncmode_minimal.o |
.debug_info 0x00005d81 0x67b osd_fcmode_default.o |
.debug_info 0x000063fc 0x6c8 osd_fcmode_jopl.o |
.debug_info 0x00006ac4 0x5df characters.o |
*(.gnu.linkonce.wi.*) |
.debug_abbrev 0x00000000 0x113c |
*(.debug_abbrev) |
.debug_abbrev 0x00000000 0x1a9 main.o |
.debug_abbrev 0x000001a9 0x1b4 usart1.o |
.debug_abbrev 0x0000035d 0x218 max7456_software_spi.o |
.debug_abbrev 0x00000575 0x148 osd_helpers.o |
.debug_abbrev 0x000006bd 0x221 config.o |
.debug_abbrev 0x000008de 0x147 spi.o |
.debug_abbrev 0x00000a25 0x12d buttons.o |
.debug_abbrev 0x00000b52 0xf8 ppm.o |
.debug_abbrev 0x00000c4a 0x11c osd_ncmode_default.o |
.debug_abbrev 0x00000d66 0x11a osd_ncmode_minimal.o |
.debug_abbrev 0x00000e80 0xf9 osd_fcmode_default.o |
.debug_abbrev 0x00000f79 0x115 osd_fcmode_jopl.o |
.debug_abbrev 0x0000108e 0xae characters.o |
.debug_line 0x00000000 0x2b13 |
*(.debug_line) |
.debug_line 0x00000000 0x405 main.o |
.debug_line 0x00000405 0x391 usart1.o |
.debug_line 0x00000796 0x6fe max7456_software_spi.o |
.debug_line 0x00000e94 0x339 osd_helpers.o |
.debug_line 0x000011cd 0x68d config.o |
.debug_line 0x0000185a 0x19b spi.o |
.debug_line 0x000019f5 0x1a0 buttons.o |
.debug_line 0x00001b95 0x14e ppm.o |
.debug_line 0x00001ce3 0x56f osd_ncmode_default.o |
.debug_line 0x00002252 0x3a4 osd_ncmode_minimal.o |
.debug_line 0x000025f6 0x213 osd_fcmode_default.o |
.debug_line 0x00002809 0x271 osd_fcmode_jopl.o |
.debug_line 0x00002a7a 0x99 characters.o |
.debug_frame 0x00000000 0x430 |
*(.debug_frame) |
.debug_frame 0x00000000 0x40 main.o |
.debug_frame 0x00000040 0x90 usart1.o |
.debug_frame 0x000000d0 0x120 max7456_software_spi.o |
.debug_frame 0x000001f0 0x80 osd_helpers.o |
.debug_frame 0x00000270 0x80 config.o |
.debug_frame 0x000002f0 0x60 spi.o |
.debug_frame 0x00000350 0x30 buttons.o |
.debug_frame 0x00000380 0x30 ppm.o |
.debug_frame 0x000003b0 0x20 osd_ncmode_default.o |
.debug_frame 0x000003d0 0x20 osd_ncmode_minimal.o |
.debug_frame 0x000003f0 0x20 osd_fcmode_default.o |
.debug_frame 0x00000410 0x20 osd_fcmode_jopl.o |
.debug_str 0x00000000 0xc43 |
*(.debug_str) |
.debug_str 0x00000000 0x535 main.o |
0x61f (size before relaxing) |
.debug_str 0x00000535 0xe9 usart1.o |
0x57a (size before relaxing) |
.debug_str 0x0000061e 0x19b max7456_software_spi.o |
0x662 (size before relaxing) |
.debug_str 0x000007b9 0x196 osd_helpers.o |
0x620 (size before relaxing) |
.debug_str 0x0000094f 0x154 config.o |
0x635 (size before relaxing) |
.debug_str 0x00000aa3 0x6d spi.o |
0x549 (size before relaxing) |
.debug_str 0x00000b10 0x23 buttons.o |
0x4c2 (size before relaxing) |
.debug_str 0x00000b33 0x38 ppm.o |
0x49d (size before relaxing) |
.debug_str 0x00000b6b 0x38 osd_ncmode_default.o |
0x4db (size before relaxing) |
.debug_str 0x00000ba3 0x2b osd_ncmode_minimal.o |
0x4d4 (size before relaxing) |
.debug_str 0x00000bce 0x2b osd_fcmode_default.o |
0x4ac (size before relaxing) |
.debug_str 0x00000bf9 0x3a osd_fcmode_jopl.o |
0x4cd (size before relaxing) |
.debug_str 0x00000c33 0x10 characters.o |
0x475 (size before relaxing) |
.debug_loc 0x00000000 0x1c20 |
*(.debug_loc) |
.debug_loc 0x00000000 0x30 main.o |
.debug_loc 0x00000030 0x146 usart1.o |
.debug_loc 0x00000176 0xcb1 max7456_software_spi.o |
.debug_loc 0x00000e27 0x632 osd_helpers.o |
.debug_loc 0x00001459 0x3ef config.o |
.debug_loc 0x00001848 0x18 spi.o |
.debug_loc 0x00001860 0x60 buttons.o |
.debug_loc 0x000018c0 0x1b0 osd_ncmode_default.o |
.debug_loc 0x00001a70 0x180 osd_ncmode_minimal.o |
.debug_loc 0x00001bf0 0x30 osd_fcmode_jopl.o |
.debug_macinfo |
*(.debug_macinfo) |
OUTPUT(C-OSD.elf elf32-avr) |
LOAD linker stubs |
.debug_ranges 0x00000000 0x138 |
.debug_ranges 0x00000000 0x18 usart1.o |
.debug_ranges 0x00000018 0x78 max7456_software_spi.o |
.debug_ranges 0x00000090 0x48 config.o |
.debug_ranges 0x000000d8 0x48 osd_ncmode_default.o |
.debug_ranges 0x00000120 0x18 osd_ncmode_minimal.o |
/C-OSD/trunk/default/dep/buttons.o.d |
---|
0,0 → 1,48 |
buttons.o: ../buttons.c \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h \ |
../main.h c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h \ |
../mk-data-structs.h |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h: |
../main.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
../mk-data-structs.h: |
/C-OSD/trunk/default/dep/characters.o.d |
---|
0,0 → 1,50 |
characters.o: ../characters.c \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h \ |
../main.h ../mk-data-structs.h ../max7456_software_spi.h |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h: |
../main.h: |
../mk-data-structs.h: |
../max7456_software_spi.h: |
/C-OSD/trunk/default/dep/config.o.d |
---|
0,0 → 1,63 |
config.o: ../config.c \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/eeprom.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/interrupt.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h \ |
../max7456_software_spi.h ../config.h ../main.h ../mk-data-structs.h \ |
../buttons.h ../usart1.h |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/eeprom.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/interrupt.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h: |
../max7456_software_spi.h: |
../config.h: |
../main.h: |
../mk-data-structs.h: |
../buttons.h: |
../usart1.h: |
/C-OSD/trunk/default/dep/main.o.d |
---|
0,0 → 1,75 |
main.o: ../main.c c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/interrupt.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h ../main.h \ |
../mk-data-structs.h ../max7456_software_spi.h ../usart1.h \ |
../osd_helpers.h ../config.h ../spi.h ../buttons.h ../ppm.h \ |
../osd_ncmode_default.h ../osd_ncmode_minimal.h ../osd_fcmode_default.h \ |
../osd_fcmode_jopl.h |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/interrupt.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
../main.h: |
../mk-data-structs.h: |
../max7456_software_spi.h: |
../usart1.h: |
../osd_helpers.h: |
../config.h: |
../spi.h: |
../buttons.h: |
../ppm.h: |
../osd_ncmode_default.h: |
../osd_ncmode_minimal.h: |
../osd_fcmode_default.h: |
../osd_fcmode_jopl.h: |
/C-OSD/trunk/default/dep/max7456_software_spi.o.d |
---|
0,0 → 1,56 |
max7456_software_spi.o: ../max7456_software_spi.c \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/string.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdlib.h ../main.h \ |
../mk-data-structs.h ../max7456_software_spi.h |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/string.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdlib.h: |
../main.h: |
../mk-data-structs.h: |
../max7456_software_spi.h: |
/C-OSD/trunk/default/dep/osd_fcmode_default.o.d |
---|
0,0 → 1,49 |
osd_fcmode_default.o: ../osd_fcmode_default.c ../main.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h \ |
../mk-data-structs.h ../max7456_software_spi.h ../osd_helpers.h \ |
../osd_fcmode_default.h |
../main.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
../mk-data-structs.h: |
../max7456_software_spi.h: |
../osd_helpers.h: |
../osd_fcmode_default.h: |
/C-OSD/trunk/default/dep/osd_fcmode_jopl.o.d |
---|
0,0 → 1,49 |
osd_fcmode_jopl.o: ../osd_fcmode_jopl.c ../main.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h \ |
../mk-data-structs.h ../max7456_software_spi.h ../osd_helpers.h \ |
../osd_fcmode_default.h |
../main.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
../mk-data-structs.h: |
../max7456_software_spi.h: |
../osd_helpers.h: |
../osd_fcmode_default.h: |
/C-OSD/trunk/default/dep/osd_helpers.o.d |
---|
0,0 → 1,46 |
osd_helpers.o: ../osd_helpers.c \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h ../main.h \ |
../mk-data-structs.h ../osd_helpers.h ../max7456_software_spi.h |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
../main.h: |
../mk-data-structs.h: |
../osd_helpers.h: |
../max7456_software_spi.h: |
/C-OSD/trunk/default/dep/osd_ncmode_default.o.d |
---|
0,0 → 1,49 |
osd_ncmode_default.o: ../osd_ncmode_default.c ../main.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h \ |
../mk-data-structs.h ../max7456_software_spi.h ../osd_helpers.h \ |
../osd_ncmode_default.h |
../main.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
../mk-data-structs.h: |
../max7456_software_spi.h: |
../osd_helpers.h: |
../osd_ncmode_default.h: |
/C-OSD/trunk/default/dep/osd_ncmode_minimal.o.d |
---|
0,0 → 1,49 |
osd_ncmode_minimal.o: ../osd_ncmode_minimal.c ../main.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h \ |
../mk-data-structs.h ../max7456_software_spi.h ../osd_helpers.h \ |
../osd_ncmode_default.h |
../main.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
../mk-data-structs.h: |
../max7456_software_spi.h: |
../osd_helpers.h: |
../osd_ncmode_default.h: |
/C-OSD/trunk/default/dep/ppm.o.d |
---|
0,0 → 1,48 |
ppm.o: ../ppm.c c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/interrupt.h ../ppm.h \ |
../main.h c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h \ |
../mk-data-structs.h ../max7456_software_spi.h |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/interrupt.h: |
../ppm.h: |
../main.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
../mk-data-structs.h: |
../max7456_software_spi.h: |
/C-OSD/trunk/default/dep/spi.o.d |
---|
0,0 → 1,46 |
spi.o: ../spi.c c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/interrupt.h ../spi.h \ |
../main.h c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h \ |
../mk-data-structs.h |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/interrupt.h: |
../spi.h: |
../main.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
../mk-data-structs.h: |
/C-OSD/trunk/default/dep/usart1.o.d |
---|
0,0 → 1,53 |
usart1.o: ../usart1.c \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/interrupt.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h \ |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h \ |
../main.h c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h \ |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h \ |
../mk-data-structs.h ../usart1.h |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/inttypes.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/stdint.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/iom162.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/common.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/version.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/fuse.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/lock.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/interrupt.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h: |
../main.h: |
c:/winavr-20100110/lib/gcc/../../avr/include/avr/pgmspace.h: |
c:\winavr-20100110\bin\../lib/gcc/avr/4.3.3/include/stddef.h: |
../mk-data-structs.h: |
../usart1.h: |