aboutsummaryrefslogtreecommitdiff
path: root/bootloaders/stk500v2
diff options
context:
space:
mode:
authorDavid Madison <dmadison@users.noreply.github.com>2019-02-15 13:00:46 -0500
committerGitHub <noreply@github.com>2019-02-15 13:00:46 -0500
commit7d65dd08142eda767eb822bf2d92c3a1bd9f8b8f (patch)
tree5609dee433e7d089e6c4f974fa1d870b4068d613 /bootloaders/stk500v2
parent2663be17272e19f00c55f3f2d8f1ebfac47158d6 (diff)
parent91e267bcc42442d4e9da09aab30065ad5d44025a (diff)
Merge pull request #1 from dmadison/forking
Forking
Diffstat (limited to 'bootloaders/stk500v2')
-rw-r--r--bootloaders/stk500v2/License.txt280
-rw-r--r--bootloaders/stk500v2/Makefile587
-rw-r--r--bootloaders/stk500v2/Mega2560-prod-firmware-2011-06-29.hex513
-rw-r--r--bootloaders/stk500v2/STK500V2.pnproj1
-rw-r--r--bootloaders/stk500v2/STK500V2.pnps1
-rw-r--r--bootloaders/stk500v2/avr_cpunames.h189
-rw-r--r--bootloaders/stk500v2/avrinterruptnames.h1040
-rw-r--r--bootloaders/stk500v2/command.h114
-rw-r--r--bootloaders/stk500v2/stk500boot.c2122
-rw-r--r--bootloaders/stk500v2/stk500boot.ppg1
-rw-r--r--bootloaders/stk500v2/stk500boot_v2_mega2560.hex469
11 files changed, 0 insertions, 5317 deletions
diff --git a/bootloaders/stk500v2/License.txt b/bootloaders/stk500v2/License.txt
deleted file mode 100644
index e7dcdd8..0000000
--- a/bootloaders/stk500v2/License.txt
+++ /dev/null
@@ -1,280 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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
diff --git a/bootloaders/stk500v2/Makefile b/bootloaders/stk500v2/Makefile
deleted file mode 100644
index eeb9add..0000000
--- a/bootloaders/stk500v2/Makefile
+++ /dev/null
@@ -1,587 +0,0 @@
-# ----------------------------------------------------------------------------
-# Makefile to compile and link stk500boot bootloader
-# Author: Peter Fleury
-# based on WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
-#
-# Adjust F_CPU below to the clock frequency in Mhz of your AVR target
-# Adjust BOOTLOADER_ADDRESS to your AVR target
-#
-#----------------------------------------------------------------------------
-# On command line:
-#
-# make all = Make software.
-#
-# make clean = Clean out built project files.
-#
-# make coff = Convert ELF to AVR COFF.
-#
-# make extcoff = Convert ELF to AVR Extended COFF.
-#
-# make program = Download the hex file to the device, using avrdude.
-# Please customize the avrdude settings below first!
-#
-# make debug = Start either simulavr or avarice as specified for debugging,
-# with avr-gdb or avr-insight as the front end for debugging.
-#
-# make filename.s = Just compile filename.c into the assembler code only.
-#
-# make filename.i = Create a preprocessed source file for use in submitting
-# bug reports to the GCC project.
-#
-# To rebuild project do "make clean" then "make all".
-#----------------------------------------------------------------------------
-# <MLS> = Mark Sproul msproul-at-skychariot.com
-
-
-# MCU name
-#MCU = atmega128
-
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#F_CPU = 16000000
-
-
-# Bootloader
-# Please adjust if using a different AVR
-# 0x0e00*2=0x1C00 for ATmega8 512 words Boot Size
-# 0xFC00*2=0x1F800 for ATmega128 1024 words Boot Size
-# 0xF800*2=0x1F000 for ATmega1280
-# 0xF000*2=0x1E000 for ATmega1280
-#BOOTLOADER_ADDRESS = 1E000
-
-
-# Output format. (can be srec, ihex, binary)
-FORMAT = ihex
-
-
-# Target file name (without extension).
-TARGET = stk500boot
-
-
-# List C source files here. (C dependencies are automatically generated.)
-SRC = stk500boot.c
-
-
-# List Assembler source files here.
-# Make them always end in a capital .S. Files ending in a lowercase .s
-# will not be considered source files but generated files (assembler
-# output from the compiler), and will be deleted upon "make clean"!
-# Even though the DOS/Win* filesystem matches both .s and .S the same,
-# it will preserve the spelling of the filenames, and gcc itself does
-# care about how the name is spelled on its command-line.
-ASRC =
-
-
-# Optimization level, can be [0, 1, 2, 3, s].
-# 0 = turn off optimization. s = optimize for size.
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
-OPT = s
-
-
-# Debugging format.
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
-# AVR Studio 4.10 requires dwarf-2.
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
-DEBUG = dwarf-2
-
-
-# List any extra directories to look for include files here.
-# Each directory must be seperated by a space.
-# Use forward slashes for directory separators.
-# For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS =
-
-
-# Compiler flag to set the C Standard level.
-# c89 = "ANSI" C
-# gnu89 = c89 plus GCC extensions
-# c99 = ISO C99 standard (not yet fully implemented)
-# gnu99 = c99 plus GCC extensions
-CSTANDARD = -std=gnu99
-
-
-# Place -D or -U options here
-CDEFS = -DF_CPU=$(F_CPU)UL
-
-
-# Place -I options here
-CINCS =
-
-
-
-#---------------- Compiler Options ----------------
-# -g*: generate debugging information
-# -O*: optimization level
-# -f...: tuning, see GCC manual and avr-libc documentation
-# -Wall...: warning level
-# -Wa,...: tell GCC to pass this to the assembler.
-# -adhlns...: create assembler listing
-CFLAGS = -g$(DEBUG)
-CFLAGS += $(CDEFS) $(CINCS)
-CFLAGS += -O$(OPT)
-CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-jump-tables
-CFLAGS += -Wall -Wstrict-prototypes
-CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
-CFLAGS += $(CSTANDARD)
-
-
-#---------------- Assembler Options ----------------
-# -Wa,...: tell GCC to pass this to the assembler.
-# -ahlms: create listing
-# -gstabs: have the assembler create line number information; note that
-# for use in COFF files, additional information about filenames
-# and function names needs to be present in the assembler source
-# files -- see avr-libc docs [FIXME: not yet described there]
-ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
-
-
-#---------------- Library Options ----------------
-# Minimalistic printf version
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
-
-# Floating point printf version (requires MATH_LIB = -lm below)
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
-
-# If this is left blank, then it will use the Standard printf version.
-PRINTF_LIB =
-#PRINTF_LIB = $(PRINTF_LIB_MIN)
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
-
-
-# Minimalistic scanf version
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
-
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
-
-# If this is left blank, then it will use the Standard scanf version.
-SCANF_LIB =
-#SCANF_LIB = $(SCANF_LIB_MIN)
-#SCANF_LIB = $(SCANF_LIB_FLOAT)
-
-
-MATH_LIB = -lm
-
-
-
-#---------------- External Memory Options ----------------
-
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),
-# used for variables (.data/.bss) and heap (malloc()).
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
-
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),
-# only used for heap (malloc()).
-#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
-
-EXTMEMOPTS =
-
-
-
-
-#---------------- Linker Options ----------------
-# -Wl,...: tell GCC to pass this to linker.
-# -Map: create map file
-# --cref: add cross reference to map file
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
-LDFLAGS += $(EXTMEMOPTS)
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
-
-
-#--------------- bootloader linker Options -------
-# BOOTLOADER_ADDRESS (=Start of Boot Loader section
-# in bytes - not words) is defined above.
-#LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS) -nostartfiles -nodefaultlibs
-#LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS) -nostartfiles
-LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS)
-
-#---------------- Programming Options (avrdude) ----------------
-
-# Programming hardware: alf avr910 avrisp bascom bsd
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
-#
-# Type: avrdude -c ?
-# to get a full listing.
-#
-AVRDUDE_PROGRAMMER = stk500v2
-
-# com1 = serial port. Use lpt1 to connect to parallel port.
-AVRDUDE_PORT = com1 # programmer connected to serial device
-
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
-
-
-# Uncomment the following if you want avrdude's erase cycle counter.
-# Note that this counter needs to be initialized first using -Yn,
-# see avrdude manual.
-#AVRDUDE_ERASE_COUNTER = -y
-
-# Uncomment the following if you do /not/ wish a verification to be
-# performed after programming the device.
-#AVRDUDE_NO_VERIFY = -V
-
-# Increase verbosity level. Please use this when submitting bug
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
-# to submit bug reports.
-#AVRDUDE_VERBOSE = -v -v
-
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
-
-
-
-#---------------- Debugging Options ----------------
-
-# For simulavr only - target MCU frequency.
-DEBUG_MFREQ = $(F_CPU)
-
-# Set the DEBUG_UI to either gdb or insight.
-# DEBUG_UI = gdb
-DEBUG_UI = insight
-
-# Set the debugging back-end to either avarice, simulavr.
-DEBUG_BACKEND = avarice
-#DEBUG_BACKEND = simulavr
-
-# GDB Init Filename.
-GDBINIT_FILE = __avr_gdbinit
-
-# When using avarice settings for the JTAG
-JTAG_DEV = /dev/com1
-
-# Debugging port used to communicate between GDB / avarice / simulavr.
-DEBUG_PORT = 4242
-
-# Debugging host used to communicate between GDB / avarice / simulavr, normally
-# just set to localhost unless doing some sort of crazy debugging when
-# avarice is running on a different computer.
-DEBUG_HOST = localhost
-
-
-
-#============================================================================
-
-
-# Define programs and commands.
-SHELL = sh
-CC = avr-gcc
-OBJCOPY = avr-objcopy
-OBJDUMP = avr-objdump
-SIZE = avr-size
-NM = avr-nm
-AVRDUDE = avrdude
-REMOVE = rm -f
-COPY = cp
-WINSHELL = cmd
-
-
-# Define Messages
-# English
-MSG_ERRORS_NONE = Errors: none
-MSG_BEGIN = -------- begin --------
-MSG_END = -------- end --------
-MSG_SIZE_BEFORE = Size before:
-MSG_SIZE_AFTER = Size after:
-MSG_COFF = Converting to AVR COFF:
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
-MSG_FLASH = Creating load file for Flash:
-MSG_EEPROM = Creating load file for EEPROM:
-MSG_EXTENDED_LISTING = Creating Extended Listing:
-MSG_SYMBOL_TABLE = Creating Symbol Table:
-MSG_LINKING = Linking:
-MSG_COMPILING = Compiling:
-MSG_ASSEMBLING = Assembling:
-MSG_CLEANING = Cleaning project:
-
-
-
-
-# Define all object files.
-OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
-
-# Define all listing files.
-LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
-
-
-# Compiler flags to generate dependency files.
-GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
-
-
-# Combine all necessary flags and optional flags.
-# Add target processor to flags.
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
-
-
-
-############################################################
-# May 25, 2010 <MLS> Adding 1280 support
-mega1280: MCU = atmega1280
-mega1280: F_CPU = 16000000
-mega1280: BOOTLOADER_ADDRESS = 1E000
-mega1280: CFLAGS += -D_MEGA_BOARD_
-mega1280: begin gccversion sizebefore build sizeafter end
- mv $(TARGET).hex stk500boot_v2_mega1280.hex
-
-
-############################################################
-# Jul 6, 2010 <MLS> Adding 2560 support
-mega2560: MCU = atmega2560
-mega2560: F_CPU = 16000000
-mega2560: BOOTLOADER_ADDRESS = 3E000
-mega2560: CFLAGS += -D_MEGA_BOARD_
-mega2560: begin gccversion sizebefore build sizeafter end
- mv $(TARGET).hex stk500boot_v2_mega2560.hex
-
-
-############################################################
-#Initial config on Amber128 board
-# avrdude: Device signature = 0x1e9702
-# avrdude: safemode: lfuse reads as 8F
-# avrdude: safemode: hfuse reads as CB
-# avrdude: safemode: efuse reads as FF
-# Jul 17, 2010 <MLS> Adding 128 support
-############################################################
-amber128: MCU = atmega128
-#amber128: F_CPU = 16000000
-amber128: F_CPU = 14745600
-amber128: BOOTLOADER_ADDRESS = 1E000
-amber128: CFLAGS += -D_BOARD_AMBER128_
-amber128: begin gccversion sizebefore build sizeafter end
- mv $(TARGET).hex stk500boot_v2_amber128.hex
-
-############################################################
-# Aug 23, 2010 <MLS> Adding atmega2561 support
-m2561: MCU = atmega2561
-m2561: F_CPU = 8000000
-m2561: BOOTLOADER_ADDRESS = 3E000
-m2561: CFLAGS += -D_ANDROID_2561_ -DBAUDRATE=57600
-m2561: begin gccversion sizebefore build sizeafter end
- mv $(TARGET).hex stk500boot_v2_android2561.hex
-
-
-############################################################
-# avrdude: Device signature = 0x1e9801
-# avrdude: safemode: lfuse reads as EC
-# avrdude: safemode: hfuse reads as 18
-# avrdude: safemode: efuse reads as FD
-# Aug 23, 2010 <MLS> Adding cerebot 2560 @ 8mhz
-#avrdude -P usb -c usbtiny -p m2560 -v -U flash:w:/Arduino/WiringBootV2_upd1/stk500boot_v2_cerebotplus.hex
-############################################################
-cerebot: MCU = atmega2560
-cerebot: F_CPU = 8000000
-cerebot: BOOTLOADER_ADDRESS = 3E000
-cerebot: CFLAGS += -D_CEREBOTPLUS_BOARD_ -DBAUDRATE=38400 -DUART_BAUDRATE_DOUBLE_SPEED=1
-cerebot: begin gccversion sizebefore build sizeafter end
- mv $(TARGET).hex stk500boot_v2_cerebotplus.hex
-
-
-############################################################
-# Aug 23, 2010 <MLS> Adding atmega2561 support
-penguino: MCU = atmega32
-penguino: F_CPU = 16000000
-penguino: BOOTLOADER_ADDRESS = 7800
-penguino: CFLAGS += -D_PENGUINO_ -DBAUDRATE=57600
-penguino: begin gccversion sizebefore build sizeafter end
- mv $(TARGET).hex stk500boot_v2_penguino.hex
-
-
-# Default target.
-all: begin gccversion sizebefore build sizeafter end
-
-build: elf hex eep lss sym
-#build: hex eep lss sym
-
-elf: $(TARGET).elf
-hex: $(TARGET).hex
-eep: $(TARGET).eep
-lss: $(TARGET).lss
-sym: $(TARGET).sym
-
-
-
-# Eye candy.
-# AVR Studio 3.x does not check make's exit code but relies on
-# the following magic strings to be generated by the compile job.
-begin:
- @echo
- @echo $(MSG_BEGIN)
-
-end:
- @echo $(MSG_END)
- @echo
-
-
-# Display size of file.
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
-ELFSIZE = $(SIZE) --format=avr --mcu=$(MCU) $(TARGET).elf
-
-sizebefore:
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
- 2>/dev/null; echo; fi
-
-sizeafter:
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
- 2>/dev/null; echo; fi
-
-
-
-# Display compiler version information.
-gccversion :
- @$(CC) --version
-
-
-
-# Program the device.
-program: $(TARGET).hex $(TARGET).eep
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
-
-
-# Generate avr-gdb config/init file which does the following:
-# define the reset signal, load the target file, connect to target, and set
-# a breakpoint at main().
-gdb-config:
- @$(REMOVE) $(GDBINIT_FILE)
- @echo define reset >> $(GDBINIT_FILE)
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
- @echo end >> $(GDBINIT_FILE)
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)
-ifeq ($(DEBUG_BACKEND),simulavr)
- @echo load >> $(GDBINIT_FILE)
-endif
- @echo break main >> $(GDBINIT_FILE)
-
-debug: gdb-config $(TARGET).elf
-ifeq ($(DEBUG_BACKEND), avarice)
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
- @$(WINSHELL) /c pause
-
-else
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)
-endif
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
-
-
-
-
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
-COFFCONVERT=$(OBJCOPY) --debugging \
---change-section-address .data-0x800000 \
---change-section-address .bss-0x800000 \
---change-section-address .noinit-0x800000 \
---change-section-address .eeprom-0x810000
-
-
-
-coff: $(TARGET).elf
- @echo
- @echo $(MSG_COFF) $(TARGET).cof
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof
-
-
-extcoff: $(TARGET).elf
- @echo
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
-
-
-# Create final output files (.hex, .eep) from ELF output file.
-%.hex: %.elf
- @echo
- @echo $(MSG_FLASH) $@
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
-
-%.eep: %.elf
- @echo
- @echo $(MSG_EEPROM) $@
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
- --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
-
-# Create extended listing file from ELF output file.
-%.lss: %.elf
- @echo
- @echo $(MSG_EXTENDED_LISTING) $@
- $(OBJDUMP) -h -S $< > $@
-
-# Create a symbol table from ELF output file.
-%.sym: %.elf
- @echo
- @echo $(MSG_SYMBOL_TABLE) $@
- $(NM) -n $< > $@
-
-
-
-# Link: create ELF output file from object files.
-.SECONDARY : $(TARGET).elf
-.PRECIOUS : $(OBJ)
-%.elf: $(OBJ)
- @echo
- @echo $(MSG_LINKING) $@
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
-
-
-# Compile: create object files from C source files.
-%.o : %.c
- @echo
- @echo $(MSG_COMPILING) $<
- $(CC) -c $(ALL_CFLAGS) $< -o $@
-
-
-# Compile: create assembler files from C source files.
-%.s : %.c
- $(CC) -S $(ALL_CFLAGS) $< -o $@
-
-
-# Assemble: create object files from assembler source files.
-%.o : %.S
- @echo
- @echo $(MSG_ASSEMBLING) $<
- $(CC) -c $(ALL_ASFLAGS) $< -o $@
-
-# Create preprocessed source for use in sending a bug report.
-%.i : %.c
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
-
-
-# Target: clean project.
-clean: begin clean_list end
-
-clean_list :
- @echo
- @echo $(MSG_CLEANING)
- $(REMOVE) *.hex
- $(REMOVE) *.eep
- $(REMOVE) *.cof
- $(REMOVE) *.elf
- $(REMOVE) *.map
- $(REMOVE) *.sym
- $(REMOVE) *.lss
- $(REMOVE) $(OBJ)
- $(REMOVE) $(LST)
- $(REMOVE) $(SRC:.c=.s)
- $(REMOVE) $(SRC:.c=.d)
- $(REMOVE) .dep/*
-
-
-
-# Include the dependency files.
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
-
-
-# Listing of phony targets.
-.PHONY : all begin finish end sizebefore sizeafter gccversion \
-build elf hex eep lss sym coff extcoff \
-clean clean_list program debug gdb-config
-
diff --git a/bootloaders/stk500v2/Mega2560-prod-firmware-2011-06-29.hex b/bootloaders/stk500v2/Mega2560-prod-firmware-2011-06-29.hex
deleted file mode 100644
index 4f36699..0000000
--- a/bootloaders/stk500v2/Mega2560-prod-firmware-2011-06-29.hex
+++ /dev/null
@@ -1,513 +0,0 @@
-:020000023000CC
-:10E000000D94F6F20D941FF30D941FF30D941FF36E
-:10E010000D941FF30D941FF30D941FF30D941FF334
-:10E020000D941FF30D941FF30D941FF30D941FF324
-:10E030000D941FF30D941FF30D941FF30D941FF314
-:10E040000D941FF30D941FF30D941FF30D941FF304
-:10E050000D941FF30D941FF30D941FF30D941FF3F4
-:10E060000D941FF30D941FF30D941FF30D941FF3E4
-:10E070000D941FF30D941FF30D941FF30D941FF3D4
-:10E080000D941FF30D941FF30D941FF30D941FF3C4
-:10E090000D941FF30D941FF30D941FF30D941FF3B4
-:10E0A0000D941FF30D941FF30D941FF30D941FF3A4
-:10E0B0000D941FF30D941FF30D941FF30D941FF394
-:10E0C0000D941FF30D941FF30D941FF30D941FF384
-:10E0D0000D941FF30D941FF30D941FF30D941FF374
-:10E0E0000D941FF341546D65676132353630004140
-:10E0F000726475696E6F206578706C6F72657220DE
-:10E1000073746B3530305632206279204D4C530099
-:10E11000426F6F746C6F616465723E004875683F52
-:10E1200000436F6D70696C6564206F6E20203D2028
-:10E1300000435055205479706520202020203D2038
-:10E14000005F5F4156525F415243485F5F203D2070
-:10E1500000415652204C69624320566572203D2092
-:10E16000004743432056657273696F6E20203D203F
-:10E1700000435055207369676E61747572653D2068
-:10E18000004C6F77206675736520202020203D208D
-:10E1900000486967682066757365202020203D204F
-:10E1A00000457874206675736520202020203D206E
-:10E1B000004C6F636B2066757365202020203D2026
-:10E1C00000536570202039203230313000312E3636
-:10E1D0002E3700342E332E33005623202020414486
-:10E1E00044522020206F7020636F6465202020201F
-:10E1F00020696E737472756374696F6E20616464F4
-:10E2000072202020496E74657272757074006E6F92
-:10E2100020766563746F7200726A6D702020006AE8
-:10E220006D7020005768617420706F72743A0050EE
-:10E230006F7274206E6F7420737570706F72746576
-:10E2400064004D7573742062652061206C65747480
-:10E2500065720020005772697474696E67204545C5
-:10E260000052656164696E6720454500656570729E
-:10E270006F6D206572726F7220636F756E743D00F2
-:10E28000504F525400303D5A65726F206164647281
-:10E290006573732063747273003F3D435055207360
-:10E2A0007461747300403D454550524F4D20746574
-:10E2B000737400423D426C696E6B204C45440045CE
-:10E2C0003D44756D7020454550524F4D00463D44CC
-:10E2D000756D7020464C41534800483D48656C7050
-:10E2E000004C3D4C69737420492F4F20506F72745D
-:10E2F0007300513D517569742026206A756D702038
-:10E30000746F20757365722070676D00523D44759F
-:10E310006D702052414D00563D73686F7720696ED5
-:10E320007465727275707420566563746F727300D1
-:10E33000593D506F727420626C696E6B002A0052F6
-:10E340004553455400494E543000494E543100491C
-:10E350004E543200494E543300494E543400494E15
-:10E36000543500494E543600494E54370050434905
-:10E370004E5430005043494E5431005043494E549E
-:10E3800032005744540054494D45523020434F4DBC
-:10E3900050410054494D45523020434F4D504200AA
-:10E3A00054494D455230204F56460054494D455230
-:10E3B0003120434150540054494D45523120434F80
-:10E3C0004D50410054494D45523120434F4D50422C
-:10E3D0000054494D45523120434F4D50430054495C
-:10E3E0004D455231204F56460054494D455232203A
-:10E3F000434F4D50410054494D45523220434F4DFB
-:10E4000050420054494D455232204F56460054491F
-:10E410004D45523320434150540054494D455233E9
-:10E4200020434F4D50410054494D45523320434FF6
-:10E430004D50420054494D45523320434F4D5043B7
-:10E440000054494D455233204F56460054494D45DE
-:10E45000523420434150540054494D4552342043D6
-:10E460004F4D50410054494D45523420434F4D507B
-:10E47000420054494D45523420434F4D50430054BF
-:10E48000494D455234204F56460054494D4552356A
-:10E4900020434150540054494D45523520434F4D7F
-:10E4A00050410054494D45523520434F4D50420094
-:10E4B00054494D45523520434F4D50430054494D2A
-:10E4C000455235204F564600555341525430205244
-:10E4D000580055534152543020554452450055532D
-:10E4E0004152543020545800555341525431205217
-:10E4F000580055534152543120554452450055530C
-:10E5000041525431205458005553415254322052F4
-:10E5100058005553415254322055445245005553EA
-:10E5200041525432205458005553415254332052D2
-:10E5300058005553415254332055445245005553C9
-:10E5400041525433205458005350492053544300EF
-:10E5500041444300414E414C4F4720434F4D5000F2
-:10E560004545205245414459005457490053504DA8
-:10E57000205245414459002A003FE345E34AE34F16
-:10E58000E354E359E35EE363E368E36DE374E37B41
-:10E59000E382E3E9E3F6E303E4ABE3B7E3C4E3D107
-:10E5A000E3DEE386E393E3A0E348E5C8E4D2E4DEF8
-:10E5B000E454E550E560E50EE41AE427E434E44170
-:10E5C000E4E8E4F2E4FEE469E56DE54CE458E46572
-:10E5D000E472E47FE48AE496E4A3E4B0E4BDE408F2
-:10E5E000E512E51EE528E532E53EE50011241FBEF3
-:10E5F000CFEFD1E2DEBFCDBF01E00CBF12E0A0E063
-:10E60000B2E0EAEDFFEF03E00BBF02C007900D920E
-:10E61000A030B107D9F712E0A0E0B2E001C01D922E
-:10E62000AC30B107E1F70F94FBF40D94EBFF01E27E
-:10E630000EBF0FEF0DBF11241FBE0D94FBF40D9400
-:10E6400000F020E030E040ED57E005C0FA013197DE
-:10E65000F1F72F5F3F4F28173907C0F308959C014A
-:10E66000442737FD4095542FDA01C901860F911DCB
-:10E67000A11DB11DABBFFC018791882369F0809378
-:10E68000C6008091C00086FFFCCF8091C0008064EE
-:10E690008093C0006F5FE8CF08958DE08093C6003F
-:10E6A0008091C00086FFFCCF8091C0008064809381
-:10E6B000C0008AE08093C6008091C00086FFFCCF36
-:10E6C0008091C00080648093C00008950F942FF360
-:10E6D0000F944DF30895FC019081992359F0909384
-:10E6E000C6008091C00086FFFCCF8091C00080648E
-:10E6F0008093C0003196992379F70895282F982F99
-:10E7000092959F70892F805D8A3308F0895F80938E
-:10E71000C6008091C00086FFFCCF8091C00080645D
-:10E720008093C000822F8F70982F905D9A3308F0ED
-:10E73000995F9093C6008091C00086FFFCCF8091C6
-:10E74000C00080648093C00008959C01FB01853661
-:10E7500091051CF46330710594F0C90164E670E022
-:10E760000F948CFF605D7F4F6093C6008091C00066
-:10E7700086FFFCCF8091C00080648093C0002B3066
-:10E78000310514F43297B4F0C90164E670E00F94D7
-:10E790008CFF6AE070E00F948CFF605D7F4F6093A8
-:10E7A000C6008091C00086FFFCCF8091C0008064CD
-:10E7B0008093C000C9016AE070E00F948CFFC0969E
-:10E7C0008093C6008091C00086FFFCCF8091C0007E
-:10E7D00080648093C0000895282F277020642093C0
-:10E7E0007C0020917B0086958695869590E08170CF
-:10E7F000907033E0880F991F3A95E1F7277F282B17
-:10E8000020937B0080917A00806480937A008091CD
-:10E810007A0086FDFCCF2091780040917900942FFA
-:10E8200080E030E0282B392BC90108951F93182F61
-:10E8300080E892EE60E00F942FF31093C600809171
-:10E84000C00086FFFCCF8091C00080648093C00030
-:10E850000F944DF31F9108952F923F924F925F9224
-:10E860006F927F928F929F92AF92BF92CF92DF92E0
-:10E87000EF92FF920F931F93DF93CF93CDB7DEB745
-:10E8800062970FB6F894DEBF0FBECDBF382E622E52
-:10E89000CA01DB015C016D01772460E2262E2E01A6
-:10E8A0000894411C511C8BC081E0A81680E0B8067A
-:10E8B00081E0C80680E0D80628F0C601AA27BB2759
-:10E8C0000F947EF3BB27AD2D9C2D8B2D0F947EF3E3
-:10E8D0008A2D0F947EF32092C6008091C00086FF9F
-:10E8E000FCCF8091C00080648093C0009DE2909333
-:10E8F000C6008091C00086FFFCCF8091C00080647C
-:10E900008093C0002092C6008091C00086FFFCCF9B
-:10E910008091C00080648093C000198286017501D7
-:10E9200088249924A1E03A1651F03A1620F0B2E07A
-:10E930003B1661F409C00BBFF701779007C0C70110
-:10E940000F94D5FF782E02C0F7017080872D0F94A9
-:10E950007EF32092C6008091C00086FFFCCF80919C
-:10E96000C00080648093C000872D8052F401EF7056
-:10E97000F0708F3520F4E40DF51D708204C0E40DB5
-:10E98000F51D8EE280830894E11CF11C011D111D10
-:10E990000894811C911C90E18916910409F0C2CF62
-:10E9A00080E190E0A0E0B0E0A80EB91ECA1EDB1E18
-:10E9B000198AC2010F946BF30F944DF36A94662089
-:10E9C00009F072CF62960FB6F894DEBF0FBECDBFCE
-:10E9D000CF91DF911F910F91FF90EF90DF90CF903B
-:10E9E000BF90AF909F908F907F906F905F904F906F
-:10E9F0003F902F9008952F923F924F925F926F9287
-:10EA00007F928F929F92AF92BF92CF92DF92EF92BE
-:10EA1000FF920F931F93DF93CF93CDB7DEB7CD5304
-:10EA2000D1400FB6F894DEBF0FBECDBF279A2F9A04
-:10EA30008091C00082608093C00080E18093C40018
-:10EA400088E18093C1000000EE24FF248701B4E038
-:10EA5000AB2EB12CCC24DD2424C0C5010197F1F7E5
-:10EA60000894E11CF11C011D111D21E2E2162EE4A7
-:10EA7000F20620E0020720E0120718F0A1E0CA2EFB
-:10EA8000D12CC801B70128E53BE140E050E00F94EC
-:10EA90009FFF611571058105910519F485B18058B5
-:10EAA00085B98091C00087FD03C0C114D104A9F2CB
-:10EAB000A6014F5F5F4FC25EDE4F59834883CE5140
-:10EAC000D140C25EDE4F68817981CE51D140613044
-:10EAD000710511F00D946EFFC05DDE4F1982188232
-:10EAE000C053D14060E0C15DDE4F1882CF52D140AB
-:10EAF000AA24BB24C05EDE4F188219821A821B82B0
-:10EB0000C052D140CE5CDE4F188219821A821B821D
-:10EB1000C253D14080E090E0A0E0B0E0ABBFFC0188
-:10EB2000A791B691C45CDE4FB983A883CC53D14082
-:10EB30000D9469FFC25EDE4FE881F981CE51D1406C
-:10EB4000319709F52091C600C25EDE4F1982188206
-:10EB5000CE51D14022C02F5F3F4F4F4F5F4F2130EA
-:10EB6000F2E13F07FAE74F07F0E05F0780F0C45C8F
-:10EB7000DE4F08811981CC53D1400F5F1F4F19F030
-:10EB8000EE27FF27099420E030E040E050E080913C
-:10EB9000C00087FFE0CF2091C600213209F094C663
-:10EBA0000894A11CB11C33E0A316B10409F08EC671
-:10EBB00000E010E018C041E24093C6008091C00020
-:10EBC00086FFFCCF8091C00080648093C0002F5FDF
-:10EBD0003F4F2931310579F70F944DF30F5F1F4FE8
-:10EBE0000530110519F020E030E0E5CF1092080261
-:10EBF0001092090210920A0210920B021092040263
-:10EC00001092050210920602109207021092000262
-:10EC10001092010210920202109203028FEE90EE07
-:10EC200060E00F9466F380E191EE60E00F942FF3C3
-:10EC30008091C00087FFFCCF9091C600903608F00D
-:10EC40009F759032B8F09093C6008091C00086FF07
-:10EC5000FCCF8091C00080648093C00080E28093EC
-:10EC6000C6008091C00086FFFCCF8091C000806408
-:10EC70008093C000983409F4DBC19934B8F492341D
-:10EC800009F45DC1933458F4903319F1903308F4CA
-:10EC900018C69F33A1F1903409F013C6BDC0953456
-:10ECA00009F474C1963409F00CC69CC1923509F47C
-:10ECB0002FC2933538F49C3409F4F9C1913509F029
-:10ECC00000C61CC2963509F449C2993509F0F9C548
-:10ECD0009CC485E892EE62E00F9466F31092040201
-:10ECE000109205021092060210920702109208027A
-:10ECF0001092090210920A0210920B0217C189E9C0
-:10ED000092EE62E00F9466F38FEE90EE60E00F9467
-:10ED100066F381E291EE60E00F942FF381EC91EEC7
-:10ED200060E00F9466F381E391EE60E00F942FF3BF
-:10ED300084EE90EE60E00F9466F381E491EE60E083
-:10ED40000F942FF386E090E061E070E00F94A5F35C
-:10ED50000F944DF381E691EE60E00F942FF383ED75
-:10ED600091EE60E00F9466F381E591EE60E00F9420
-:10ED70002FF38DEC91EE60E00F9466F381E791EE56
-:10ED800060E00F942FF38EE10F947EF388E90F94E7
-:10ED90007EF381E00F947EF30F944DF381E891EEC2
-:10EDA00060E00F942FF319E0E0E0F0E010935700DB
-:10EDB000E4918E2F0F947EF30F944DF381E991EE41
-:10EDC00060E00F942FF3E3E0F0E010935700E4913C
-:10EDD0008E2F0F947EF30F944DF381EA91EE60E055
-:10EDE0000F942FF3E2E0F0E010935700E4918E2FA0
-:10EDF0000F947EF30F944DF381EB91EE60E00F944E
-:10EE00002FF3E1E0F0E0109357001491812F0F945D
-:10EE10007EF30F944DF307CF85EA92EE62E00F94F4
-:10EE200066F385E592EE60E00F9466F30F944DF380
-:10EE300000E010E019C0C8016F2D0F94DDFFFF2026
-:10EE400031F483E592EE60E00F942FF30BC0F09263
-:10EE5000C6008091C00086FFFCCF8091C000806416
-:10EE60008093C0000F5F1F4FC80181519F41AA27A7
-:10EE700097FDA095BA2FABBFFC01F7905AE2F516AB
-:10EE800021F062E000301607B1F60F944DF30F94B5
-:10EE90004DF381E692EE60E00F9466F30F944DF32C
-:10EEA000CC24DD2400E010E01EC0C8010F94D5FF83
-:10EEB000F82E882331F483E592EE60E00F942FF36F
-:10EEC0000BC08093C6008091C00086FFFCCF80916C
-:10EED000C00080648093C000FE1419F00894C11C27
-:10EEE000D11C0F5F1F4FC80181519F41AA2797FD79
-:10EEF000A095BA2FABBFFC01E7907AE2E71621F0AC
-:10EF000082E00030180789F60F944DF30F944DF30B
-:10EF10008CE692EE60E00F942FF3C60161E070E0A2
-:10EF20000F94A5F30F944DF30F944DF3109200023C
-:10EF300010920102109202021092030274CE83EB2F
-:10EF400092EE62E00F9466F3279A2F9A16C02F98DC
-:10EF500080E090E0E0EDF7E03197F1F7019684363C
-:10EF60009105C1F72F9A80E090E0E0EDF7E031974E
-:10EF7000F1F7019684369105C1F78091C00087FFB3
-:10EF8000E6CF8091C00087FFFCCF95C48FEB92EE57
-:10EF900062E00F9466F3409100025091010260918B
-:10EFA00002027091030281E020E10F942CF4809121
-:10EFB000000290910102A0910202B09103028050E0
-:10EFC0009F4FAF4FBF4F8093000290930102A093D9
-:10EFD0000202B093030280509041A040B04008F478
-:10EFE00022CEA4CF8DEC92EE62E00F9466F34091B6
-:10EFF000040250910502609106027091070280E0C0
-:10F0000020E10F942CF48091040290910502A091CC
-:10F010000602B091070280509F4FAF4FBF4F8093C1
-:10F02000040290930502A0930602B0930702FBCD61
-:10F030008AED92EE62E00F9466F385E892EE60E06E
-:10F040000F9466F389E992EE60E00F9466F385EA27
-:10F0500092EE60E00F9466F383EB92EE60E00F9423
-:10F0600066F38FEB92EE60E00F9466F38DEC92EE18
-:10F0700060E00F9466F38AED92EE60E00F9466F321
-:10F0800081EE92EE60E00F9466F382EF92EE60E024
-:10F090000F9466F38CE093EE60E00F9466F387E1E3
-:10F0A00093EE60E00F9466F380E393EEB9CD81EECA
-:10F0B00092EE62E00F9466F381E40F9416F482E41A
-:10F0C0000F9416F483E40F9416F484E40F9416F46A
-:10F0D00085E40F9416F486E40F9416F487E40F94F5
-:10F0E00016F488E40F9416F48AE40F9416F48BE473
-:10F0F0000F9416F48CE40F9416F495CD82EF92EEF3
-:10F1000062E00F9466F399249394AA24BB2445C427
-:10F110008CE093EE62E00F9466F340910802509108
-:10F12000090260910A0270910B0282E020E10F94C3
-:10F130002CF48091080290910902A0910A02B091EA
-:10F140000B0280509F4FAF4FBF4F809308029093A8
-:10F150000902A0930A02B0930B0265CD87E193EEFA
-:10F1600062E00F9466F384EE90EE60E00F9466F335
-:10F1700089ED91EE60E00F9466F309E715EECC5D42
-:10F18000DE4F19830883C452D1406624772443019B
-:10F19000CA5DDE4F19821882C652D140A401930184
-:10F1A0005695479537952795C85DDE4F2883398357
-:10F1B0004A835B83C852D140CA5DDE4F4881598182
-:10F1C000C652D1404F5F5F4FCA5DDE4F59834883BF
-:10F1D000C652D140CA0162E070E00F94A5F350E23C
-:10F1E0005093C6008091C00086FFFCCF8091C00084
-:10F1F00080648093C0006DE26093C6008091C0007F
-:10F2000086FFFCCF8091C00080648093C00070E2D4
-:10F210007093C6008091C00086FFFCCF8091C00033
-:10F2200080648093C000C85DDE4FE880F9800A8169
-:10F230001B81C852D140BB27A12F902F8F2D0F9437
-:10F240007EF3C85DDE4F8881C852D1400F947EF3B3
-:10F2500070E2F72EF092C6008091C00086FFFCCFCE
-:10F260008091C00080648093C0000DE30093C600CD
-:10F270008091C00086FFFCCF8091C00080648093A5
-:10F28000C00010E21093C6008091C00086FFFCCF42
-:10F290008091C00080648093C0008BBEF3012791F1
-:10F2A000C45DDE4F2883CC52D140A22EBB24CC2497
-:10F2B000DD240894611C711C811C911C8BBEF30120
-:10F2C0008791282E332444245524142D032DF22C09
-:10F2D000EE24EA0CFB1C0C1D1D1D0894611C711C06
-:10F2E000811C911C8BBEF3013791C35DDE4F3883C7
-:10F2F000CD52D1400894611C711C811C911C8BBEA5
-:10F30000F3014791C25DDE4F4883CE52D1402DEFCD
-:10F310003FEF4FEF5FEF620E731E841E951E0F943A
-:10F320007EF330E23093C6008091C00086FFFCCFB0
-:10F330008091C00080648093C000C45DDE4F8881EE
-:10F34000CC52D1400F947EF340E24093C6008091AE
-:10F35000C00086FFFCCF8091C00080648093C00015
-:10F36000C25DDE4F8881CE52D1400F947EF350E2D1
-:10F370005093C6008091C00086FFFCCF8091C000F2
-:10F3800080648093C000C35DDE4F8881CD52D14040
-:10F390000F947EF360E26093C6008091C00086FF08
-:10F3A000FCCF8091C00080648093C0007FEFE7169F
-:10F3B0007FEFF70670E0070770E0170731F48EE083
-:10F3C00092EE60E00F942FF3DFC0D801C701807088
-:10F3D000907CA070B0708050904CA040B040D1F5AF
-:10F3E0002FEF3FE340E050E0E222F3220423152315
-:10F3F000C85DDE4FA880B980CA80DB80C852D1408A
-:10F40000AE0CBF1CC01ED11EAA0CBB1CCC1CDD1C2C
-:10F4100088E192EE60E00F942FF3BB27A12F902F8D
-:10F420008F2D0F947EF38E2D0F947EF330E2309368
-:10F43000C6008091C00086FFFCCF8091C000806430
-:10F440008093C0004EE34093C6008091C00086FFC9
-:10F45000FCCF87C06EE07EEF80E090E0E622F722EE
-:10F46000082319237CE0E71674E9F70670E0070724
-:10F4700070E0170709F088C0C25DDE4F8881CE5268
-:10F48000D140E82EFF2400E010E0102F0F2DFE2CBD
-:10F49000EE24C35DDE4F9881CD52D140E90EF11CC0
-:10F4A000011D111DD601C50181709070A070B07052
-:10F4B000DC0199278827E80EF91E0A1F1B1F20EF81
-:10F4C00030E040E050E0A222B322C422D522F1E194
-:10F4D000AA0CBB1CCC1CDD1CFA95D1F7EA0CFB1C5A
-:10F4E0000C1D1D1D41E050E060E070E0242235223B
-:10F4F00046225722E5E1220C331C441C551CEA9598
-:10F50000D1F7E20CF31C041D151D57016801AA0C6C
-:10F51000BB1CCC1CDD1C8FE192EE60E00F942FF33E
-:10F52000C801AA27BB270F947EF3BB27A12F902FDA
-:10F530008F2D0F947EF38E2D0F947EF350E2509317
-:10F54000C6008091C00086FFFCCF8091C00080641F
-:10F550008093C0006EE36093C6008091C00086FF78
-:10F56000FCCF8091C00080648093C000C601AA27B0
-:10F57000BB270F947EF3BB27AD2D9C2D8B2D0F94B5
-:10F580007EF38A2D0F947EF370E27093C600809113
-:10F59000C00086FFFCCF8091C00080648093C000D3
-:10F5A000CC5DDE4FE881F981C452D140CF01AA275A
-:10F5B00097FDA095BA2FABBFFC018791969160E0B3
-:10F5C0000F942FF30F944DF3CC5DDE4F088119811A
-:10F5D000C452D1400E5F1F4FCC5DDE4F19830883AC
-:10F5E000C452D140CA5DDE4F28813981C652D14014
-:10F5F0002933310509F417CB44E050E060E070E0B6
-:10F60000640E751E861E971EC9CD80E393EE62E0E0
-:10F610000F9466F384E292EE60E00F942FF38091F2
-:10F62000C00087FFFCCF1091C6001F751093C60065
-:10F630008091C00086FFFCCF8091C00080648093E1
-:10F64000C0000F944DF3812F81548A3108F036C1E8
-:10F65000163409F495C0173490F4133409F44EC0ED
-:10F66000143430F41134F1F0123409F01DC130C0FB
-:10F67000143409F459C0153409F016C16BC01A349A
-:10F6800009F4C4C01B3438F4173409F48FC018349B
-:10F6900009F00AC1A1C01B3409F4D2C01C3409F01E
-:10F6A00003C1E8C08FEF81B90DC082B1809582B9E6
-:10F6B00080E090E0E0EDF7E03197F1F70196883CCB
-:10F6C0009105C1F78091C00087FFEFCF12B8EFC05E
-:10F6D0008FEF84B90DC085B1809585B980E090E049
-:10F6E000E0EDF7E03197F1F70196883C9105C1F71D
-:10F6F0008091C00087FFEFCF15B8D9C08FEF87B9D1
-:10F700000DC088B1809588B980E090E0E0EDF7E029
-:10F710003197F1F70196883C9105C1F78091C000BF
-:10F7200087FFEFCF18B8C3C08FEF8AB90DC08BB178
-:10F7300080958BB980E090E0E0EDF7E03197F1F74C
-:10F740000196883C9105C1F78091C00087FFEFCFFB
-:10F750001BB8ADC08FEF8DB90DC08EB180958EB93D
-:10F7600080E090E0E0EDF7E03197F1F70196883C1A
-:10F770009105C1F78091C00087FFEFCF1EB897C0F9
-:10F780008FEF80BB0DC081B3809581BB80E090E09E
-:10F79000E0EDF7E03197F1F70196883C9105C1F76C
-:10F7A0008091C00087FFEFCF11BA81C08FEF83BB7C
-:10F7B0000DC084B3809584BB80E090E0E0EDF7E07D
-:10F7C0003197F1F70196883C9105C1F78091C0000F
-:10F7D00087FFEFCF14BA6BC08FEF809301010FC08A
-:10F7E0008091020180958093020180E090E0E0ED3D
-:10F7F000F7E03197F1F70196883C9105C1F78091C8
-:10F80000C00087FFEDCF1092020151C08FEF8093AF
-:10F8100004010FC08091050180958093050180E06F
-:10F8200090E0E0EDF7E03197F1F70196883C910523
-:10F83000C1F78091C00087FFEDCF1092050137C05E
-:10F840008FEF809307010FC080910801809580930E
-:10F85000080180E090E0E0EDF7E03197F1F70196E4
-:10F86000883C9105C1F78091C00087FFEDCF1092D1
-:10F8700008011DC08FEF80930A010FC080910B011A
-:10F88000809580930B0180E090E0E0EDF7E0319708
-:10F89000F1F70196883C9105C1F78091C00087FF80
-:10F8A000EDCF10920B0103C08FE292EEB9C98091A7
-:10F8B000C00087FFFCCF8091C600B5C982E492EEFC
-:10F8C000AFC98CE191EEACC9AA24BB24933061F19D
-:10F8D000943028F4913089F0923008F508C09530C2
-:10F8E000B1F1953040F1963009F053C04EC02B3144
-:10F8F00009F020C991E06BE11DC9213041F0C15DE3
-:10F90000DE4F5881CF52D140251709F002C362273C
-:10F91000C15DDE4F2883CF52D14092E00BC9B22F98
-:10F92000A0E0622793E006C9822F90E0A82BB92BB4
-:10F93000622794E0FFC82E3009F0EBC2622795E001
-:10F94000C05DDE4F19821882C053D140F3C8E1E098
-:10F95000F0E0EC0FFD1FC05DDE4FE880F980C05382
-:10F96000D140EE0DFF1D208387010F5F1F4FC05D4B
-:10F97000DE4F19830883C053D14062270A171B0743
-:10F9800009F0D8C8D80196E0D5C8261709F0C1C239
-:10F9900003C0973009F0CEC899248981833109F4D6
-:10F9A000FCC08431C8F4863009F4C2C0873050F4FA
-:10F9B000823009F4F0C0833009F458C0813009F076
-:10F9C0000AC23EC0813109F462C0823108F0A6C08B
-:10F9D000803109F000C2DFC0883109F472C089317A
-:10F9E00050F4853109F4D9C0853108F477C18631E6
-:10F9F00009F0F1C173C18A3109F457C08A3108F4A2
-:10FA00007CC08B3109F446C08D3109F0E4C18D8191
-:10FA1000803311F090E00AC08F81882311F49EE1B9
-:10FA200005C0813011F091E001C098E91A821B8273
-:10FA30008D818C831D829E831F8227E030E0CFC1A1
-:10FA40001A8288E08B8381E48C8386E58D8382E54E
-:10FA50008E8389E48F8383E5888780E589878FE5B6
-:10FA60008A8782E38B872BE030E0B9C18A818139B4
-:10FA700041F0823941F0803911F48FE005C080E017
-:10FA800003C082E001C08AE01A828B8344C09924BB
-:10FA9000939481C08D81882311F48EE12CC0813034
-:10FAA00011F081E028C088E926C01A82E1E0F0E088
-:10FAB00089E08093570084918B831C8224E030E09E
-:10FAC0008EC18B81803589F48C81883039F4E2E0F5
-:10FAD000F0E089E08093570084910DC0E0E0F0E011
-:10FAE00089E080935700849106C0E3E0F0E089E06C
-:10FAF0008093570084911A82DFCF8D81836C99E0C7
-:10FB0000E1E0F0E0082E90935700E89507B600FC7E
-:10FB1000FDCF1A821B8223E030E061C11A82CE5CE5
-:10FB2000DE4F188219821A821B82C253D14055C1FE
-:10FB30008A8190E0A0E0B0E0582F442733272227A5
-:10FB40008B8190E0A0E0B0E0DC0199278827282B8A
-:10FB5000392B4A2B5B2B8D8190E0A0E0B0E0282B65
-:10FB6000392B4A2B5B2B8C8190E0A0E0B0E0BA2FC0
-:10FB7000A92F982F8827282B392B4A2B5B2B220F54
-:10FB8000331F441F551FC05EDE4F288339834A83CD
-:10FB90005B83C052D1401A8220C19A812B8183316C
-:10FBA00049F0C05EDE4F488159816A817B81C05235
-:10FBB000D1408AC0CE5CDE4F488159816A817B8109
-:10FBC000C253D140403080EC580783E0680780E0A2
-:10FBD0007807F0F483E0FA0160935B0080935700AC
-:10FBE000E89507B600FCFDCFCE5CDE4F4881598119
-:10FBF0006A817B81C253D14040505F4F6F4F7F4F2E
-:10FC0000CE5CDE4F488359836A837B83C253D140E5
-:10FC1000C95CDE4F9883C753D140CA5CDE4F18825F
-:10FC2000C653D140022F10E0CA5CDE4F6881798153
-:10FC3000C653D140062B172BC05EDE4F4881598139
-:10FC40006A817B81C052D140DE011B9631E08C91EC
-:10FC500011962C9111971296C75CDE4F2883C953D9
-:10FC6000D140C85CDE4F1882C853D14090E0C85CD8
-:10FC7000DE4FE881F981C853D1408E2B9F2B0C01B8
-:10FC8000FA0160935B0030935700E89511244E5FB2
-:10FC90005F4F6F4F7F4F02501040C9F685E0C05E46
-:10FCA000DE4FE880F9800A811B81C052D140F70104
-:10FCB00000935B0080935700E89507B600FCFDCFEA
-:10FCC00081E180935700E8951A82C05EDE4F488339
-:10FCD00059836A837B83C052D1407FC0FA80C55C60
-:10FCE000DE4FF882CB53D140C65CDE4F1882CA5338
-:10FCF000D1408B81C82EDD24C65CDE4F088119817E
-:10FD0000CA53D140C02AD12A1A828981BE016D5FAF
-:10FD10007F4F843121F59601C05EDE4FE880F98087
-:10FD20000A811B81C052D1400BBFF7018791969188
-:10FD3000DB018C9311969C936E5F7F4FD801C701B6
-:10FD40000296A11DB11DC05EDE4F88839983AA83F0
-:10FD5000BB83C052D14022503040F1F636C0C05E65
-:10FD6000DE4F288139814A815B81C052D14008949D
-:10FD7000C108D108760100E010E00894C11CD11C34
-:10FD80000894E11CF11C011D111DE20EF31E041F5D
-:10FD9000151F21BDBB27A52F942F832F82BD2F5F59
-:10FDA0003F4F4F4F5F4FF89A80B5DB018D93BD01F8
-:10FDB0002E153F054007510761F7C05EDE4F2883CF
-:10FDC00039834A835B83C052D14096012D5F3F4FF8
-:10FDD000FB01108204C080EC8A8322E030E08BE1DA
-:10FDE0008093C6008091C00086FFFCCF8091C00048
-:10FDF00080648093C000C15DDE4FF881CF52D14056
-:10FE0000F093C6008091C00086FFFCCF8091C000B7
-:10FE100080648093C000432F3093C6008091C0005F
-:10FE200086FFFCCF8091C00080648093C000922F39
-:10FE30002093C6008091C00086FFFCCF8091C00057
-:10FE400080648093C0008EE08093C6008091C000E3
-:10FE500086FFFCCF8091C00080648093C00065E184
-:10FE6000C15DDE4FE880CF52D1406E2569276427FF
-:10FE7000FE01319610C090819093C6008091C00021
-:10FE800086FFFCCF31968091C00080648093C000D3
-:10FE90006927215030402115310569F76093C6006C
-:10FEA0008091C00086FFFCCF8091C0008064809369
-:10FEB000C00085B1805885B9992081F4C15DDE4FBD
-:10FEC0000881CF52D1400F5FC15DDE4F0883CF5212
-:10FED000D14090E0A0E0B0E00D949AF527982F98DB
-:10FEE00080E090E020ED37E0F9013197F1F70196DD
-:10FEF00084369105C9F700008091C0008D7F809302
-:10FF0000C00081E180935700E895EE27FF27099410
-:10FF1000FFCF90E00D949AF597FB092E07260AD0A3
-:10FF200077FD04D02ED006D000201AF4709561958C
-:10FF30007F4F0895F6F7909581959F4F0895A1E220
-:10FF40001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F53
-:10FF5000FF1FA217B307E407F50720F0A21BB30B9E
-:10FF6000E40BF50B661F771F881F991F1A9469F71A
-:10FF700060957095809590959B01AC01BD01CF0176
-:10FF80000895AA1BBB1B51E107C0AA1FBB1FA617E0
-:10FF9000B70710F0A61BB70B881F991F5A95A9F732
-:10FFA00080959095BC01CD010895F999FECF92BD41
-:10FFB00081BDF89A992780B50895262FF999FECF2B
-:10FFC0001FBA92BD81BD20BD0FB6F894FA9AF99A76
-:0AFFD0000FBE01960895F894FFCFCC
-:040000033000E000E9
-:00000001FF
diff --git a/bootloaders/stk500v2/STK500V2.pnproj b/bootloaders/stk500v2/STK500V2.pnproj
deleted file mode 100644
index d935019..0000000
--- a/bootloaders/stk500v2/STK500V2.pnproj
+++ /dev/null
@@ -1 +0,0 @@
-<Project name="STK500V2"><File path="License.txt"></File><File path="Makefile"></File><File path="stk500boot.c"></File><File path="command.h"></File><File path="Readme.txt"></File></Project> \ No newline at end of file
diff --git a/bootloaders/stk500v2/STK500V2.pnps b/bootloaders/stk500v2/STK500V2.pnps
deleted file mode 100644
index f85cde5..0000000
--- a/bootloaders/stk500v2/STK500V2.pnps
+++ /dev/null
@@ -1 +0,0 @@
-<pd><ViewState><e p="STK500V2" x="true"></e></ViewState></pd> \ No newline at end of file
diff --git a/bootloaders/stk500v2/avr_cpunames.h b/bootloaders/stk500v2/avr_cpunames.h
deleted file mode 100644
index ad0ed9c..0000000
--- a/bootloaders/stk500v2/avr_cpunames.h
+++ /dev/null
@@ -1,189 +0,0 @@
-//**************************************************************************************************
-//*
-//* Atmel AVR CPU name strings
-//*
-//**************************************************************************************************
-//* Sep 19, 2010 <MLS> Started on avr_cpunames.h
-//**************************************************************************************************
-
-//#include "avr_cpunames.h"
-
-//**************************************************************************************************
-
-
-#if defined (__AVR_AT94K__)
- #define _AVR_CPU_NAME_ "AT94k"
-#elif defined (__AVR_AT43USB320__)
-#elif defined (__AVR_AT43USB355__)
-#elif defined (__AVR_AT76C711__)
-#elif defined (__AVR_AT86RF401__)
-#elif defined (__AVR_AT90PWM1__)
-#elif defined (__AVR_AT90PWM2__)
-#elif defined (__AVR_AT90PWM2B__)
-#elif defined (__AVR_AT90PWM3__)
-#elif defined (__AVR_AT90PWM3B__)
-#elif defined (__AVR_AT90PWM216__)
-#elif defined (__AVR_AT90PWM316__)
-#elif defined (__AVR_ATmega32C1__)
-#elif defined (__AVR_ATmega32M1__)
-#elif defined (__AVR_ATmega32U4__)
- #define _AVR_CPU_NAME_ "ATmega32U4"
-#elif defined (__AVR_ATmega32U6__)
- #define _AVR_CPU_NAME_ "ATmega32U6"
-#elif defined (__AVR_ATmega128__)
- #define _AVR_CPU_NAME_ "Atmega128"
-#elif defined (__AVR_ATmega1280__)
- #define _AVR_CPU_NAME_ "ATmega1280"
-#elif defined (__AVR_ATmega1281__)
- #define _AVR_CPU_NAME_ "ATmega1281"
-#elif defined (__AVR_ATmega1284P__)
- #define _AVR_CPU_NAME_ "ATmega1284"
-#elif defined (__AVR_ATmega128RFA1__)
- #define _AVR_CPU_NAME_ "ATmega128RFA1"
-#elif defined (__AVR_ATmega2560__)
- #define _AVR_CPU_NAME_ "ATmega2560"
-#elif defined (__AVR_ATmega2561__)
- #define _AVR_CPU_NAME_ "ATmega2561"
-#elif defined (__AVR_AT90CAN32__)
- #define _AVR_CPU_NAME_ "AT90CAN32"
-#elif defined (__AVR_AT90CAN64__)
- #define _AVR_CPU_NAME_ "AT90CAN64"
-#elif defined (__AVR_AT90CAN128__)
- #define _AVR_CPU_NAME_ "AT90CAN128"
-#elif defined (__AVR_AT90USB82__)
- #define _AVR_CPU_NAME_ "AT90USB82"
-#elif defined (__AVR_AT90USB162__)
- #define _AVR_CPU_NAME_ "AT90USB162"
-#elif defined (__AVR_AT90USB646__)
- #define _AVR_CPU_NAME_ "AT90USB646"
-#elif defined (__AVR_AT90USB647__)
- #define _AVR_CPU_NAME_ "AT90USB647"
-#elif defined (__AVR_AT90USB1286__)
- #define _AVR_CPU_NAME_ "AT90USB1286"
-#elif defined (__AVR_AT90USB1287__)
- #define _AVR_CPU_NAME_ "AT90USB1287"
-#elif defined (__AVR_ATmega64__)
- #define _AVR_CPU_NAME_ "ATmega64"
-#elif defined (__AVR_ATmega640__)
- #define _AVR_CPU_NAME_ "ATmega640"
-#elif defined (__AVR_ATmega644__)
- #define _AVR_CPU_NAME_ "ATmega644"
-#elif defined (__AVR_ATmega644P__)
- #define _AVR_CPU_NAME_ "ATmega644P"
-#elif defined (__AVR_ATmega645__)
- #define _AVR_CPU_NAME_ "ATmega645"
-#elif defined (__AVR_ATmega6450__)
- #define _AVR_CPU_NAME_ "ATmega6450"
-#elif defined (__AVR_ATmega649__)
- #define _AVR_CPU_NAME_ "ATmega649"
-#elif defined (__AVR_ATmega6490__)
- #define _AVR_CPU_NAME_ "ATmega6490"
-#elif defined (__AVR_ATmega103__)
- #define _AVR_CPU_NAME_ "ATmega103"
-#elif defined (__AVR_ATmega32__)
- #define _AVR_CPU_NAME_ "Atmega32"
-#elif defined (__AVR_ATmega323__)
- #define _AVR_CPU_NAME_ "ATmega323"
-#elif defined (__AVR_ATmega324P__)
- #define _AVR_CPU_NAME_ "ATmega324P"
-#elif defined (__AVR_ATmega325__)
- #define _AVR_CPU_NAME_ "ATmega325"
-#elif defined (__AVR_ATmega325P__)
- #define _AVR_CPU_NAME_ "ATmega325P"
-#elif defined (__AVR_ATmega3250__)
- #define _AVR_CPU_NAME_ "ATmega3250"
-#elif defined (__AVR_ATmega3250P__)
- #define _AVR_CPU_NAME_ "ATmega3250P"
-#elif defined (__AVR_ATmega328P__)
- #define _AVR_CPU_NAME_ "ATmega328P"
-#elif defined (__AVR_ATmega329__)
- #define _AVR_CPU_NAME_ "ATmega329"
-#elif defined (__AVR_ATmega329P__)
- #define _AVR_CPU_NAME_ "ATmega329P"
-#elif defined (__AVR_ATmega3290__)
- #define _AVR_CPU_NAME_ "ATmega3290"
-#elif defined (__AVR_ATmega3290P__)
- #define _AVR_CPU_NAME_ "ATmega3290P"
-#elif defined (__AVR_ATmega32HVB__)
- #define _AVR_CPU_NAME_ "ATmega32HVB"
-#elif defined (__AVR_ATmega406__)
- #define _AVR_CPU_NAME_ "ATmega406"
-#elif defined (__AVR_ATmega16__)
- #define _AVR_CPU_NAME_ "Atmega16"
-#elif defined (__AVR_ATmega161__)
- #define _AVR_CPU_NAME_ "ATmega161"
-#elif defined (__AVR_ATmega162__)
- #define _AVR_CPU_NAME_ "ATmega162"
-#elif defined (__AVR_ATmega163__)
- #define _AVR_CPU_NAME_ "ATmega163"
-#elif defined (__AVR_ATmega164P__)
- #define _AVR_CPU_NAME_ "ATmega164P"
-#elif defined (__AVR_ATmega165__)
- #define _AVR_CPU_NAME_ "ATmega165"
-#elif defined (__AVR_ATmega165P__)
- #define _AVR_CPU_NAME_ "ATmega165P"
-#elif defined (__AVR_ATmega168__)
- #define _AVR_CPU_NAME_ "ATmega168"
-#elif defined (__AVR_ATmega168P__)
- #define _AVR_CPU_NAME_ "ATmega168P"
-#elif defined (__AVR_ATmega169__)
- #define _AVR_CPU_NAME_ "Atmega169"
-#elif defined (__AVR_ATmega169P__)
- #define _AVR_CPU_NAME_ "ATmega169P"
-#elif defined (__AVR_ATmega8HVA__)
- #define _AVR_CPU_NAME_ "ATmega8HVA"
-#elif defined (__AVR_ATmega16HVA__)
- #define _AVR_CPU_NAME_ "ATmega16HVA"
-#elif defined (__AVR_ATmega8__)
- #define _AVR_CPU_NAME_ "ATmega8"
-#elif defined (__AVR_ATmega48__)
- #define _AVR_CPU_NAME_ "ATmega48"
-#elif defined (__AVR_ATmega48P__)
- #define _AVR_CPU_NAME_ "ATmega48P"
-#elif defined (__AVR_ATmega88__)
- #define _AVR_CPU_NAME_ "ATmega88"
-#elif defined (__AVR_ATmega88P__)
- #define _AVR_CPU_NAME_ "ATmega88P"
-#elif defined (__AVR_ATmega8515__)
- #define _AVR_CPU_NAME_ "ATmega8515"
-#elif defined (__AVR_ATmega8535__)
- #define _AVR_CPU_NAME_ "ATmega8535"
-#elif defined (__AVR_AT90S8535__)
-#elif defined (__AVR_AT90C8534__)
-#elif defined (__AVR_AT90S8515__)
-#elif defined (__AVR_AT90S4434__)
-#elif defined (__AVR_AT90S4433__)
-#elif defined (__AVR_AT90S4414__)
-#elif defined (__AVR_ATtiny22__)
-#elif defined (__AVR_ATtiny26__)
-#elif defined (__AVR_AT90S2343__)
-#elif defined (__AVR_AT90S2333__)
-#elif defined (__AVR_AT90S2323__)
-#elif defined (__AVR_AT90S2313__)
-#elif defined (__AVR_ATtiny2313__)
- #define _AVR_CPU_NAME_ "ATtiny2313"
-#elif defined (__AVR_ATtiny13__)
-#elif defined (__AVR_ATtiny13A__)
-#elif defined (__AVR_ATtiny25__)
-#elif defined (__AVR_ATtiny45__)
-#elif defined (__AVR_ATtiny85__)
-#elif defined (__AVR_ATtiny24__)
-#elif defined (__AVR_ATtiny44__)
-#elif defined (__AVR_ATtiny84__)
-#elif defined (__AVR_ATtiny261__)
-#elif defined (__AVR_ATtiny461__)
-#elif defined (__AVR_ATtiny861__)
-#elif defined (__AVR_ATtiny43U__)
-#elif defined (__AVR_ATtiny48__)
-#elif defined (__AVR_ATtiny88__)
-#elif defined (__AVR_ATtiny167__)
-#elif defined (__AVR_ATmega8U2__)
- #define _AVR_CPU_NAME_ "ATmega8U2"
-#else
- #error cpu not defined
-#endif
-
-
-#if !defined (_AVR_CPU_NAME_)
-// #define _AVR_CPU_NAME_ "UNKNOWN"
-#endif
diff --git a/bootloaders/stk500v2/avrinterruptnames.h b/bootloaders/stk500v2/avrinterruptnames.h
deleted file mode 100644
index e7e3ed9..0000000
--- a/bootloaders/stk500v2/avrinterruptnames.h
+++ /dev/null
@@ -1,1040 +0,0 @@
-//**************************************************************************************************
-//*
-//* interrupt vector names
-//*
-//* It is important to note that the vector numbers listed here
-//* are the ATMEL documentation numbers. The Arduino numbers are 1 less
-//* This is because the Atmel docs start numbering the interrupts at 1
-//* when it is actually vector #0 in the table.
-//**************************************************************************************************
-//* Jun 1, 2010 <MLS> Added support for ATmega1281
-//* Jun 30, 2010 <MLS> Putting in more ifdefs to conserve space
-//* Jul 3, 2010 <MLS> More #ifdefs to conserve space and testing on most of my boards
-//* Jul 4, 2010 <MLS> Started using vector defs for #ifdefs as defined in <avr/io.h>
-//* Jul 13, 2010 <MLS> Added support for __AVR_ATmega128__
-//* Aug 26, 2010 <MLS> Added support for __AVR_ATmega2561__
-//* Sep 13, 2010 <MLS> Added support for __AVR_AT90CAN32__ __AVR_AT90CAN64__ __AVR_AT90CAN128__
-//**************************************************************************************************
-
-//#include "avrinterruptnames.h"
-
-//**************************************************************************************************
-//* this defines the interrupt vectors and allows us to compile ONLY those strings that are actually
-//* in the target CPU. This way we do not have to keep making changes based on cpu, it will be
-//* automatic even if we add a new CPU
-#ifndef _AVR_IO_H_
- #include <avr/io.h>
-#endif
-//**************************************************************************************************
-
-#ifdef __MWERKS__
- #define prog_char char
- #define PGM_P char *
-#endif
-
- prog_char gAvrInt_RESET[] PROGMEM = "RESET";
-#ifdef INT0_vect
- prog_char gAvrInt_INT0[] PROGMEM = "INT0";
-#endif
-#ifdef INT1_vect
- prog_char gAvrInt_INT1[] PROGMEM = "INT1";
-#endif
-#ifdef INT2_vect
- prog_char gAvrInt_INT2[] PROGMEM = "INT2";
-#endif
-#ifdef INT3_vect
- prog_char gAvrInt_INT3[] PROGMEM = "INT3";
-#endif
-#ifdef INT4_vect
- prog_char gAvrInt_INT4[] PROGMEM = "INT4";
-#endif
-#ifdef INT5_vect
- prog_char gAvrInt_INT5[] PROGMEM = "INT5";
-#endif
-#ifdef INT6_vect
- prog_char gAvrInt_INT6[] PROGMEM = "INT6";
-#endif
-#ifdef INT7_vect
- prog_char gAvrInt_INT7[] PROGMEM = "INT7";
-#endif
-#ifdef PCINT0_vect
- prog_char gAvrInt_PCINT0[] PROGMEM = "PCINT0";
-#endif
-#ifdef PCINT1_vect
- prog_char gAvrInt_PCINT1[] PROGMEM = "PCINT1";
-#endif
-#ifdef PCINT2_vect
- prog_char gAvrInt_PCINT2[] PROGMEM = "PCINT2";
-#endif
-#ifdef PCINT3_vect
- prog_char gAvrInt_PCINT3[] PROGMEM = "PCINT3";
-#endif
-#ifdef WDT_vect
- prog_char gAvrInt_WDT[] PROGMEM = "WDT";
-#endif
-#ifdef TIMER0_COMP_vect
- prog_char gAvrInt_TIMER0_COMP[] PROGMEM = "TIMER0 COMP";
-#endif
-#ifdef TIMER0_COMPA_vect
- prog_char gAvrInt_TIMER0_COMPA[] PROGMEM = "TIMER0 COMPA";
-#endif
-#ifdef TIMER0_COMPB_vect
- prog_char gAvrInt_TIMER0_COMPB[] PROGMEM = "TIMER0 COMPB";
-#endif
-#ifdef TIMER0_OVF_vect
- prog_char gAvrInt_TIMER0_OVF[] PROGMEM = "TIMER0 OVF";
-#endif
-#ifdef TIMER1_CAPT_vect
- prog_char gAvrInt_TIMER1_CAPT[] PROGMEM = "TIMER1 CAPT";
-#endif
-#ifdef TIMER1_COMPA_vect
- prog_char gAvrInt_TIMER1_COMPA[] PROGMEM = "TIMER1 COMPA";
-#endif
-#ifdef TIMER1_COMPB_vect
- prog_char gAvrInt_TIMER1_COMPB[] PROGMEM = "TIMER1 COMPB";
-#endif
-#ifdef TIMER1_COMPC_vect
- prog_char gAvrInt_TIMER1_COMPC[] PROGMEM = "TIMER1 COMPC";
-#endif
-#ifdef TIMER1_OVF_vect
- prog_char gAvrInt_TIMER1_OVF[] PROGMEM = "TIMER1 OVF";
-#endif
-#ifdef TIMER2_COMP_vect
- prog_char gAvrInt_TIMER2_COMP[] PROGMEM = "TIMER2 COMP";
-#endif
-#ifdef TIMER2_COMPA_vect
- prog_char gAvrInt_TIMER2_COMPA[] PROGMEM = "TIMER2 COMPA";
-#endif
-#ifdef TIMER2_COMPB_vect
- prog_char gAvrInt_TIMER2_COMPB[] PROGMEM = "TIMER2 COMPB";
-#endif
-#ifdef TIMER2_OVF_vect
- prog_char gAvrInt_TIMER2_OVF[] PROGMEM = "TIMER2 OVF";
-#endif
-#ifdef TIMER3_CAPT_vect
- prog_char gAvrInt_TIMER3_CAPT[] PROGMEM = "TIMER3 CAPT";
-#endif
-#ifdef TIMER3_COMPA_vect
- prog_char gAvrInt_TIMER3_COMPA[] PROGMEM = "TIMER3 COMPA";
-#endif
-#ifdef TIMER3_COMPB_vect
- prog_char gAvrInt_TIMER3_COMPB[] PROGMEM = "TIMER3 COMPB";
-#endif
-#ifdef TIMER3_COMPC_vect
- prog_char gAvrInt_TIMER3_COMPC[] PROGMEM = "TIMER3 COMPC";
-#endif
-#ifdef TIMER3_OVF_vect
- prog_char gAvrInt_TIMER3_OVF[] PROGMEM = "TIMER3 OVF";
-#endif
-#ifdef TIMER4_CAPT_vect
- prog_char gAvrInt_TIMER4_CAPT[] PROGMEM = "TIMER4 CAPT";
-#endif
-#ifdef TIMER4_COMPA_vect
- prog_char gAvrInt_TIMER4_COMPA[] PROGMEM = "TIMER4 COMPA";
-#endif
-#ifdef TIMER4_COMPB_vect
- prog_char gAvrInt_TIMER4_COMPB[] PROGMEM = "TIMER4 COMPB";
-#endif
-#ifdef TIMER4_COMPC_vect
- prog_char gAvrInt_TIMER4_COMPC[] PROGMEM = "TIMER4 COMPC";
-#endif
-#ifdef TIMER4_COMPD_vect
- prog_char gAvrInt_TIMER4_COMPD[] PROGMEM = "TIMER4 COMPD";
-#endif
-#ifdef TIMER4_OVF_vect
- prog_char gAvrInt_TIMER4_OVF[] PROGMEM = "TIMER4 OVF";
-#endif
-#ifdef TIMER4_FPF_vect
- prog_char gAvrInt_TIMER4_FPF[] PROGMEM = "TIMER4 Fault Protection";
-#endif
-#ifdef TIMER5_CAPT_vect
- prog_char gAvrInt_TIMER5_CAPT[] PROGMEM = "TIMER5 CAPT";
-#endif
-#ifdef TIMER5_COMPA_vect
- prog_char gAvrInt_TIMER5_COMPA[] PROGMEM = "TIMER5 COMPA";
-#endif
-#ifdef TIMER5_COMPB_vect
- prog_char gAvrInt_TIMER5_COMPB[] PROGMEM = "TIMER5 COMPB";
-#endif
-#ifdef TIMER5_COMPC_vect
- prog_char gAvrInt_TIMER5_COMPC[] PROGMEM = "TIMER5 COMPC";
-#endif
-#ifdef TIMER5_OVF_vect
- prog_char gAvrInt_TIMER5_OVF[] PROGMEM = "TIMER5 OVF";
-#endif
-
-//* when there is only 1 usart
-#if defined(USART_RX_vect) || defined(USART_RXC_vect)
- prog_char gAvrInt_USART_RX[] PROGMEM = "USART RX";
-#endif
-#if defined(USART_UDRE_vect)
- prog_char gAvrInt_USART_UDRE[] PROGMEM = "USART UDRE";
-#endif
-#if defined(USART_TX_vect) || defined(USART_TXC_vect)
- prog_char gAvrInt_USART_TX[] PROGMEM = "USART TX";
-#endif
-
-
-//* usart 0
-#if defined(USART0_RX_vect)
- prog_char gAvrInt_USART0_RX[] PROGMEM = "USART0 RX";
-#endif
-#if defined(USART0_UDRE_vect)
- prog_char gAvrInt_USART0_UDRE[] PROGMEM = "USART0 UDRE";
-#endif
-#if defined(USART0_TX_vect)
- prog_char gAvrInt_USART0_TX[] PROGMEM = "USART0 TX";
-#endif
-
-
-//* usart 1
-#ifdef USART1_RX_vect
- prog_char gAvrInt_USART1_RX[] PROGMEM = "USART1 RX";
-#endif
-#ifdef USART1_UDRE_vect
- prog_char gAvrInt_USART1_UDRE[] PROGMEM = "USART1 UDRE";
-#endif
-#ifdef USART1_TX_vect
- prog_char gAvrInt_USART1_TX[] PROGMEM = "USART1 TX";
-#endif
-
-//* usart 2
-#ifdef USART2_RX_vect
- prog_char gAvrInt_USART2_RX[] PROGMEM = "USART2 RX";
-#endif
-#ifdef USART2_UDRE_vect
- prog_char gAvrInt_USART2_UDRE[] PROGMEM = "USART2 UDRE";
-#endif
-#ifdef USART2_TX_vect
- prog_char gAvrInt_USART2_TX[] PROGMEM = "USART2 TX";
-#endif
-
-//* usart 3
-#ifdef USART3_RX_vect
- prog_char gAvrInt_USART3_RX[] PROGMEM = "USART3 RX";
-#endif
-#ifdef USART3_UDRE_vect
- prog_char gAvrInt_USART3_UDRE[] PROGMEM = "USART3 UDRE";
-#endif
-#ifdef USART3_TX_vect
- prog_char gAvrInt_USART3_TX[] PROGMEM = "USART3 TX";
-#endif
-#ifdef SPI_STC_vect
- prog_char gAvrInt_SPI_STC[] PROGMEM = "SPI STC";
-#endif
-#ifdef ADC_vect
- prog_char gAvrInt_ADC[] PROGMEM = "ADC";
-#endif
-#if defined(ANALOG_COMP_vect) || defined(ANA_COMP_vect)
- prog_char gAvrInt_ANALOG_COMP[] PROGMEM = "ANALOG COMP";
-#endif
-#if defined(EE_READY_vect) || defined(EE_RDY_vect)
- prog_char gAvrInt_EE_READY[] PROGMEM = "EE READY";
-#endif
-#ifdef TWI_vect
- prog_char gAvrInt_TWI[] PROGMEM = "TWI";
-#endif
-#if defined(SPM_READY_vect) || defined(SPM_RDY_vect)
- prog_char gAvrInt_SPM_READY[] PROGMEM = "SPM READY";
-#endif
-#ifdef USI_START_vect
- prog_char gAvrInt_USI_START[] PROGMEM = "USI START";
-#endif
-#ifdef USI_OVERFLOW_vect
- prog_char gAvrInt_USI_OVERFLOW[] PROGMEM = "USI OVERFLOW";
-#endif
-#ifdef USB_GEN_vect
- prog_char gAvrInt_USB_General[] PROGMEM = "USB General";
-#endif
-#ifdef USB_COM_vect
- prog_char gAvrInt_USB_Endpoint[] PROGMEM = "USB Endpoint";
-#endif
-
-#ifdef LCD_vect
- prog_char gAvrInt_LCD_StartFrame[] PROGMEM = "LCD Start of Frame";
-#endif
-
-//* these are for the chips with CAN bus support
-#ifdef CANIT_vect
- prog_char gAvrInt_CAN_TrafnsferCE[] PROGMEM = "CAN Transfer Complete or Error";
-#endif
-#ifdef OVRIT_vect
- prog_char gAvrInt_CAN_TimerOverRun[] PROGMEM = "CAN Timer Overrun";
-#endif
-
-//* these are for __AVR_ATmega128RFA1__
-#ifdef TRX24_PLL_LOCK_vect
- prog_char gAvrInt_TRN_PLL_LOCK[] PROGMEM = "TRX24_PLL_LOCK";
-#endif
-#ifdef TRX24_PLL_UNLOCK_vect
- prog_char gAvrInt_TRN_PLL_UNLOCK[] PROGMEM = "TRX24_PLL_UNLOCK";
-#endif
-#ifdef TRX24_RX_START_vect
- prog_char gAvrInt_TRN_RX_START[] PROGMEM = "TRX24_RX_START";
-#endif
-#ifdef TRX24_RX_END_vect
- prog_char gAvrInt_TRN_RX_END[] PROGMEM = "TRX24_RX_END";
-#endif
-#ifdef TRX24_CCA_ED_DONE_vect
- prog_char gAvrInt_TRN_CAAED_DONE[] PROGMEM = "TRX24_CCA_ED_DONE";
-#endif
-#ifdef TRX24_XAH_AMI_vect
- prog_char gAvrInt_TRN_FRAME_MATCH[] PROGMEM = "TRX24_FRAME_ADDRESS_MATCH";
-#endif
-#ifdef TRX24_TX_END_vect
- prog_char gAvrInt_TRN_TX_END[] PROGMEM = "TRX24_TX_END";
-#endif
-#ifdef TRX24_AWAKE_vect
- prog_char gAvrInt_TRN_AWAKE[] PROGMEM = "TRX24_AWAKE";
-#endif
-#ifdef SCNT_CMP1_vect
- prog_char gAvrInt_SCNT_CMP1[] PROGMEM = "SCNT_CMP1";
-#endif
-#ifdef SCNT_CMP2_vect
- prog_char gAvrInt_SCNT_CMP2[] PROGMEM = "SCNT_CMP2";
-#endif
-#ifdef SCNT_CMP3_vect
- prog_char gAvrInt_SCNT_CMP3[] PROGMEM = "SCNT_CMP3";
-#endif
-#ifdef SCNT_OVFL_vect
- prog_char gAvrInt_SCNT_OVFL[] PROGMEM = "SCNT_OVFL";
-#endif
-#ifdef SCNT_BACKOFF_vect
- prog_char gAvrInt_SCNT_BACKOFF[] PROGMEM = "SCNT_BACKOFF";
-#endif
-#ifdef AES_READY_vect
- prog_char gAvrInt_AES_READY[] PROGMEM = "AES_READY";
-#endif
-#ifdef BAT_LOW_vect
- prog_char gAvrInt_BAT_LOW[] PROGMEM = "BAT_LOW";
-#endif
-
-
-
-//**************************************************************************************************
-//* these do not have vector defs and have to be done by CPU type
-#if defined(__AVR_ATmega645__ ) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__)
- prog_char gAvrInt_NOT_USED[] PROGMEM = "NOT_USED";
-#endif
-#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega128RFA1__)
- prog_char gAvrInt_RESERVED[] PROGMEM = "Reserved";
-#endif
-
- prog_char gAvrInt_END[] PROGMEM = "*";
-
-
-
-
-
-//**************************************************************************************************
-#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
-#pragma mark __AVR_ATmega168__ / __AVR_ATmega328P__ / __AVR_ATmega328__
-
-#define _INTERRUPT_NAMES_DEFINED_
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
-
- gAvrInt_RESET, // 1
- gAvrInt_INT0, // 2
- gAvrInt_INT1, // 3
- gAvrInt_PCINT0, // 4
- gAvrInt_PCINT1, // 5
- gAvrInt_PCINT2, // 6
- gAvrInt_WDT, // 7
- gAvrInt_TIMER2_COMPA, // 8
- gAvrInt_TIMER2_COMPB, // 9
- gAvrInt_TIMER2_OVF, // 10
- gAvrInt_TIMER1_CAPT, // 11
- gAvrInt_TIMER1_COMPA, // 12
- gAvrInt_TIMER1_COMPB, // 13
- gAvrInt_TIMER1_OVF, // 14
- gAvrInt_TIMER0_COMPA, // 15
- gAvrInt_TIMER0_COMPB, // 16
- gAvrInt_TIMER0_OVF, // 17
- gAvrInt_SPI_STC, // 18
- gAvrInt_USART_RX, // 19
- gAvrInt_USART_UDRE, // 20
- gAvrInt_USART_TX, // 21
- gAvrInt_ADC, // 22
- gAvrInt_EE_READY, // 23
- gAvrInt_ANALOG_COMP, // 24
- gAvrInt_TWI, // 25
- gAvrInt_SPM_READY, // 26
-};
-
-#endif
-
-//**************************************************************************************************
-#if defined(__AVR_ATmega169__)
-#pragma mark __AVR_ATmega169__
-
-#define _INTERRUPT_NAMES_DEFINED_
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
-
- gAvrInt_RESET, // 1
- gAvrInt_INT0, // 2
- gAvrInt_PCINT0, // 3
- gAvrInt_PCINT1, // 4
- gAvrInt_TIMER2_COMP, // 5
- gAvrInt_TIMER2_OVF, // 6
- gAvrInt_TIMER1_CAPT, // 7
- gAvrInt_TIMER1_COMPA, // 8
- gAvrInt_TIMER1_COMPB, // 9
- gAvrInt_TIMER1_OVF, // 10
- gAvrInt_TIMER0_COMP, // 11
- gAvrInt_TIMER0_OVF, // 12
- gAvrInt_SPI_STC, // 13
- gAvrInt_USART0_RX, // 14
- gAvrInt_USART0_UDRE, // 15
- gAvrInt_USART0_TX, // 16
- gAvrInt_USI_START, // 17
- gAvrInt_USI_OVERFLOW, // 18
- gAvrInt_ANALOG_COMP, // 19
- gAvrInt_ADC, // 20
- gAvrInt_EE_READY, // 21
- gAvrInt_SPM_READY, // 22
- gAvrInt_LCD_StartFrame, // 23
-
-};
-
-#endif
-
-
-//**************************************************************************************************
-#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)
-#pragma mark __AVR_ATmega640__ __AVR_ATmega1280__ __AVR_ATmega1281__ __AVR_ATmega2560__ __AVR_ATmega2561__
-
-#define _INTERRUPT_NAMES_DEFINED_
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
-
- gAvrInt_RESET, // 1
- gAvrInt_INT0, // 2
- gAvrInt_INT1, // 3
- gAvrInt_INT2, // 4
- gAvrInt_INT3, // 5
- gAvrInt_INT4, // 6
- gAvrInt_INT5, // 7
- gAvrInt_INT6, // 8
- gAvrInt_INT7, // 9
- gAvrInt_PCINT0, // 10
- gAvrInt_PCINT1, // 11
-#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- gAvrInt_PCINT2, // 12
-#else
- gAvrInt_NOT_USED, // 12
-#endif
- gAvrInt_WDT, // 13
- gAvrInt_TIMER2_COMPA, // 14
- gAvrInt_TIMER2_COMPB, // 15
- gAvrInt_TIMER2_OVF, // 16
- gAvrInt_TIMER1_CAPT, // 17
- gAvrInt_TIMER1_COMPA, // 18
- gAvrInt_TIMER1_COMPB, // 19
- gAvrInt_TIMER1_COMPC, // 20
- gAvrInt_TIMER1_OVF, // 21
- gAvrInt_TIMER0_COMPA, // 22
- gAvrInt_TIMER0_COMPB, // 23
- gAvrInt_TIMER0_OVF, // 24
- gAvrInt_SPI_STC, // 25
-
- gAvrInt_USART0_RX, // 26
- gAvrInt_USART0_UDRE, // 27
- gAvrInt_USART0_TX, // 28
- gAvrInt_ANALOG_COMP, // 29
- gAvrInt_ADC, // 30
- gAvrInt_EE_READY, // 31
-
- gAvrInt_TIMER3_CAPT, // 32
- gAvrInt_TIMER3_COMPA, // 33
- gAvrInt_TIMER3_COMPB, // 34
- gAvrInt_TIMER3_COMPC, // 35
- gAvrInt_TIMER3_OVF, // 36
-
- gAvrInt_USART1_RX, // 37
- gAvrInt_USART1_UDRE, // 38
- gAvrInt_USART1_TX, // 39
- gAvrInt_TWI, // 40
- gAvrInt_SPM_READY, // 41
-#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- gAvrInt_TIMER4_CAPT, // 42
-#else
- gAvrInt_NOT_USED, // 42
-#endif
- gAvrInt_TIMER4_COMPA, // 43
- gAvrInt_TIMER4_COMPB, // 44
- gAvrInt_TIMER4_COMPC, // 45
- gAvrInt_TIMER4_OVF, // 46
-#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- gAvrInt_TIMER5_CAPT, // 47
-#else
- gAvrInt_NOT_USED, // 47
-#endif
- gAvrInt_TIMER5_COMPA, // 48
- gAvrInt_TIMER5_COMPB, // 49
- gAvrInt_TIMER5_COMPC, // 50
- gAvrInt_TIMER5_OVF, // 51
-
-#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- gAvrInt_USART2_RX, // 52
- gAvrInt_USART2_UDRE, // 53
- gAvrInt_USART2_TX, // 54
-
- gAvrInt_USART3_RX, // 55
- gAvrInt_USART3_UDRE, // 56
- gAvrInt_USART3_TX, // 57
-#endif
-
-};
-
-#endif
-
-
-
-//**************************************************************************************************
-#if defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega644__ ) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__)
-#pragma mark __AVR_ATmega324P__ __AVR_ATmega644__ __AVR_ATmega644P__ __AVR_ATmega1284P__
-
-#define _INTERRUPT_NAMES_DEFINED_
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
-
- gAvrInt_RESET, // 1
- gAvrInt_INT0, // 2
- gAvrInt_INT1, // 3
- gAvrInt_INT2, // 4
- gAvrInt_PCINT0, // 5
- gAvrInt_PCINT1, // 6
- gAvrInt_PCINT2, // 7
- gAvrInt_PCINT3, // 8
- gAvrInt_WDT, // 9
- gAvrInt_TIMER2_COMPA, // 10
- gAvrInt_TIMER2_COMPB, // 11
- gAvrInt_TIMER2_OVF, // 12
- gAvrInt_TIMER1_CAPT, // 13
- gAvrInt_TIMER1_COMPA, // 14
- gAvrInt_TIMER1_COMPB, // 15
- gAvrInt_TIMER1_OVF, // 16
- gAvrInt_TIMER0_COMPA, // 17
- gAvrInt_TIMER0_COMPB, // 18
- gAvrInt_TIMER0_OVF, // 19
- gAvrInt_SPI_STC, // 20
- gAvrInt_USART0_RX, // 21
- gAvrInt_USART0_UDRE, // 22
- gAvrInt_USART0_TX, // 23
- gAvrInt_ANALOG_COMP, // 24
- gAvrInt_ADC, // 25
- gAvrInt_EE_READY, // 26
- gAvrInt_TWI, // 27
- gAvrInt_SPM_READY, // 28
-
-#if defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega644P__)
- gAvrInt_USART1_RX, // 29
- gAvrInt_USART1_UDRE, // 30
- gAvrInt_USART1_TX, // 31
-#endif
-
-};
-
-
-#endif
-
-//**************************************************************************************************
-#if defined(__AVR_ATmega1284P__ )
-#pragma mark __AVR_ATmega1284P__
-
-#define _INTERRUPT_NAMES_DEFINED_
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
-
- gAvrInt_RESET, // 1
- gAvrInt_INT0, // 2
- gAvrInt_INT1, // 3
- gAvrInt_INT2, // 4
- gAvrInt_PCINT0, // 5
- gAvrInt_PCINT1, // 6
- gAvrInt_PCINT2, // 7
- gAvrInt_PCINT3, // 8
- gAvrInt_WDT, // 9
- gAvrInt_TIMER2_COMPA, // 10
- gAvrInt_TIMER2_COMPB, // 11
- gAvrInt_TIMER2_OVF, // 12
- gAvrInt_TIMER1_CAPT, // 13
- gAvrInt_TIMER1_COMPA, // 14
- gAvrInt_TIMER1_COMPB, // 15
- gAvrInt_TIMER1_OVF, // 16
- gAvrInt_TIMER0_COMPA, // 17
- gAvrInt_TIMER0_COMPB, // 18
- gAvrInt_TIMER0_OVF, // 19
- gAvrInt_SPI_STC, // 20
- gAvrInt_USART0_RX, // 21
- gAvrInt_USART0_UDRE, // 22
- gAvrInt_USART0_TX, // 23
- gAvrInt_ANALOG_COMP, // 24
- gAvrInt_ADC, // 25
- gAvrInt_EE_READY, // 26
- gAvrInt_TWI, // 27
- gAvrInt_SPM_READY, // 28
-
- gAvrInt_USART1_RX, // 29
- gAvrInt_USART1_UDRE, // 30
- gAvrInt_USART1_TX, // 31
- //* these are NOT documented in doc8272.pdf
- //* they are in iom1284p.h
- gAvrInt_TIMER3_CAPT, // 32
- gAvrInt_TIMER3_COMPA, // 33
- gAvrInt_TIMER3_COMPB, // 34
- gAvrInt_TIMER3_OVF, // 35
-
-
-};
-
-
-#endif
-
-
-//**************************************************************************************************
-#if defined(__AVR_ATmega645__ )
-#pragma mark __AVR_ATmega645__
-
-#define _INTERRUPT_NAMES_DEFINED_
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
-
- gAvrInt_RESET, // 1
- gAvrInt_INT0, // 2
- gAvrInt_PCINT0, // 3
- gAvrInt_PCINT1, // 4
- gAvrInt_TIMER2_COMP, // 5
- gAvrInt_TIMER2_OVF, // 6
- gAvrInt_TIMER1_CAPT, // 7
- gAvrInt_TIMER1_COMPA, // 8
- gAvrInt_TIMER1_COMPB, // 9
- gAvrInt_TIMER1_OVF, // 10
- gAvrInt_TIMER0_COMP, // 11
- gAvrInt_TIMER0_OVF, // 12
- gAvrInt_SPI_STC, // 13
- gAvrInt_USART0_RX, // 14
- gAvrInt_USART0_UDRE, // 15
- gAvrInt_USART0_TX, // 16
- gAvrInt_USI_START, // 17
- gAvrInt_USI_OVERFLOW, // 18
- gAvrInt_ANALOG_COMP, // 19
- gAvrInt_ADC, // 20
- gAvrInt_EE_READY, // 21
- gAvrInt_SPM_READY, // 22
- gAvrInt_NOT_USED, // 23
-
-#if defined(__AVR_ATmega3250__) || defined(__AVR_ATmega6450__)
- gAvrInt_PCINT2, // 24
- gAvrInt_PCINT3, // 25
-#endif
-};
-
-
-#endif
-
-//**************************************************************************************************
-#if defined(__AVR_ATmega16__ )
-#pragma mark __AVR_ATmega16__
-
-#define _INTERRUPT_NAMES_DEFINED_
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
-
- gAvrInt_RESET, // 1
- gAvrInt_INT0, // 2
- gAvrInt_INT1, // 3
- gAvrInt_TIMER2_COMP, // 4
- gAvrInt_TIMER2_OVF, // 5
- gAvrInt_TIMER1_CAPT, // 6
- gAvrInt_TIMER1_COMPA, // 7
- gAvrInt_TIMER1_COMPB, // 8
- gAvrInt_TIMER1_OVF, // 9
- gAvrInt_TIMER0_OVF, // 10
- gAvrInt_SPI_STC, // 11
- gAvrInt_USART_RX, // 12
- gAvrInt_USART_UDRE, // 13
- gAvrInt_USART_TX, // 14
- gAvrInt_ADC, // 15
- gAvrInt_EE_READY, // 16
- gAvrInt_ANALOG_COMP, // 17
- gAvrInt_TWI, // 18
- gAvrInt_INT2, // 19
- gAvrInt_TIMER0_COMP, // 20
- gAvrInt_SPM_READY, // 21
-
-};
-
-
-#endif
-
-//**************************************************************************************************
-#if defined(__AVR_ATmega32__ )
-#pragma mark __AVR_ATmega32__
-
-#define _INTERRUPT_NAMES_DEFINED_
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
-
- gAvrInt_RESET, // 1
- gAvrInt_INT0, // 2
- gAvrInt_INT1, // 3
- gAvrInt_INT2, // 4
- gAvrInt_TIMER2_COMP, // 5
- gAvrInt_TIMER2_OVF, // 6
- gAvrInt_TIMER1_CAPT, // 7
- gAvrInt_TIMER1_COMPA, // 8
- gAvrInt_TIMER1_COMPB, // 9
- gAvrInt_TIMER1_OVF, // 10
- gAvrInt_TIMER0_COMP, // 11
- gAvrInt_TIMER0_OVF, // 12
- gAvrInt_SPI_STC, // 13
- gAvrInt_USART_RX, // 14
- gAvrInt_USART_UDRE, // 15
- gAvrInt_USART_TX, // 16
- gAvrInt_ADC, // 17
- gAvrInt_EE_READY, // 18
- gAvrInt_ANALOG_COMP, // 19
- gAvrInt_TWI, // 20
- gAvrInt_SPM_READY, // 21
-
-};
-
-
-#endif
-
-//**************************************************************************************************
-#if defined(__AVR_ATmega32U4__)
-#pragma mark __AVR_ATmega32U4__
-//* teensy 2.0
-//* http://www.pjrc.com/teensy/pinout.html
-#define _INTERRUPT_NAMES_DEFINED_
-
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
-
- gAvrInt_RESET, // 1
- gAvrInt_INT0, // 2
- gAvrInt_INT1, // 3
- gAvrInt_INT2, // 4
- gAvrInt_INT3, // 5
- gAvrInt_RESERVED, // 6
- gAvrInt_RESERVED, // 7
- gAvrInt_INT6, // 8
- gAvrInt_RESERVED, // 9
- gAvrInt_PCINT0, // 10
- gAvrInt_USB_General, // 11
- gAvrInt_USB_Endpoint, // 12
- gAvrInt_WDT, // 13
- gAvrInt_RESERVED, // 14
- gAvrInt_RESERVED, // 15
- gAvrInt_RESERVED, // 16
- gAvrInt_TIMER1_CAPT, // 17
- gAvrInt_TIMER1_COMPA, // 18
- gAvrInt_TIMER1_COMPB, // 19
- gAvrInt_TIMER1_COMPC, // 20
- gAvrInt_TIMER1_OVF, // 21
- gAvrInt_TIMER0_COMPA, // 22
- gAvrInt_TIMER0_COMPB, // 23
- gAvrInt_TIMER0_OVF, // 24
- gAvrInt_SPI_STC, // 25
-
- gAvrInt_USART1_RX, // 26
- gAvrInt_USART1_UDRE, // 27
- gAvrInt_USART1_TX, // 28
- gAvrInt_ANALOG_COMP, // 29
-
- gAvrInt_ADC, // 30
- gAvrInt_EE_READY, // 31
-
- gAvrInt_TIMER3_CAPT, // 32
- gAvrInt_TIMER3_COMPA, // 33
- gAvrInt_TIMER3_COMPB, // 34
- gAvrInt_TIMER3_COMPC, // 35
- gAvrInt_TIMER3_OVF, // 36
- gAvrInt_TWI, // 37
- gAvrInt_SPM_READY, // 38
-
- gAvrInt_TIMER4_COMPA, // 39
- gAvrInt_TIMER4_COMPB, // 40
- gAvrInt_TIMER4_COMPD, // 41
- gAvrInt_TIMER4_OVF, // 42
- gAvrInt_TIMER4_FPF, // 43
-};
-
-#endif
-
-//**************************************************************************************************
-#if defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
-#pragma mark __AVR_AT90USB1286__
-//* teensy++ 2.0
-//* http://www.pjrc.com/teensy/pinout.html
-#define _INTERRUPT_NAMES_DEFINED_
-
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
-
- gAvrInt_RESET, // 1
- gAvrInt_INT0, // 2
- gAvrInt_INT1, // 3
- gAvrInt_INT2, // 4
- gAvrInt_INT3, // 5
- gAvrInt_INT4, // 6
- gAvrInt_INT5, // 7
- gAvrInt_INT6, // 8
- gAvrInt_INT7, // 9
- gAvrInt_PCINT0, // 10
- gAvrInt_USB_General, // 11
- gAvrInt_USB_Endpoint, // 12
- gAvrInt_WDT, // 13
- gAvrInt_TIMER2_COMPA, // 14
- gAvrInt_TIMER2_COMPB, // 15
- gAvrInt_TIMER2_OVF, // 16
- gAvrInt_TIMER1_CAPT, // 17
- gAvrInt_TIMER1_COMPA, // 18
- gAvrInt_TIMER1_COMPB, // 19
- gAvrInt_TIMER1_COMPC, // 20
- gAvrInt_TIMER1_OVF, // 21
- gAvrInt_TIMER0_COMPA, // 22
- gAvrInt_TIMER0_COMPB, // 23
- gAvrInt_TIMER0_OVF, // 24
- gAvrInt_SPI_STC, // 25
-
- gAvrInt_USART1_RX, // 26
- gAvrInt_USART1_UDRE, // 27
- gAvrInt_USART1_TX, // 28
- gAvrInt_ANALOG_COMP, // 29
-
- gAvrInt_ADC, // 30
- gAvrInt_EE_READY, // 31
-
- gAvrInt_TIMER3_CAPT, // 32
- gAvrInt_TIMER3_COMPA, // 33
- gAvrInt_TIMER3_COMPB, // 34
- gAvrInt_TIMER3_COMPC, // 35
- gAvrInt_TIMER3_OVF, // 36
- gAvrInt_TWI, // 37
- gAvrInt_SPM_READY, // 38
-
-};
-
-#endif
-
-
-
-
-//**************************************************************************************************
-#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega64__)
-#pragma mark __AVR_ATmega64__ __AVR_ATmega128__
-#define _INTERRUPT_NAMES_DEFINED_
-
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
-
- gAvrInt_RESET, // 1
- gAvrInt_INT0, // 2
- gAvrInt_INT1, // 3
- gAvrInt_INT2, // 4
- gAvrInt_INT3, // 5
- gAvrInt_INT4, // 6
- gAvrInt_INT5, // 7
- gAvrInt_INT6, // 8
- gAvrInt_INT7, // 9
- gAvrInt_TIMER2_COMP, // 10
- gAvrInt_TIMER2_OVF, // 11
- gAvrInt_TIMER1_CAPT, // 12
- gAvrInt_TIMER1_COMPA, // 13
- gAvrInt_TIMER1_COMPB, // 14
- gAvrInt_TIMER1_OVF, // 15
- gAvrInt_TIMER0_COMP, // 16
- gAvrInt_TIMER0_OVF, // 17
- gAvrInt_SPI_STC, // 18
- gAvrInt_USART0_RX, // 19
- gAvrInt_USART0_UDRE, // 20
- gAvrInt_USART0_TX, // 21
- gAvrInt_ADC, // 22
- gAvrInt_EE_READY, // 23
- gAvrInt_ANALOG_COMP, // 24
- gAvrInt_TIMER1_COMPC, // 25
- gAvrInt_TIMER3_CAPT, // 26
- gAvrInt_TIMER3_COMPA, // 27
- gAvrInt_TIMER3_COMPB, // 28
- gAvrInt_TIMER3_COMPC, // 29
- gAvrInt_TIMER3_OVF, // 30
- gAvrInt_USART1_RX, // 31
- gAvrInt_USART1_UDRE, // 32
- gAvrInt_USART1_TX, // 33
- gAvrInt_TWI, // 34
- gAvrInt_SPM_READY, // 35
-
-};
-
-#endif
-
-//**************************************************************************************************
-#if defined(__AVR_AT90CAN32__) || defined(__AVR_AT90CAN64__) || defined(__AVR_AT90CAN128__)
-#pragma mark __AVR_AT90CAN32__ __AVR_AT90CAN64__ __AVR_AT90CAN128__
-
-#define _INTERRUPT_NAMES_DEFINED_
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
-
- gAvrInt_RESET, // 1
- gAvrInt_INT0, // 2
- gAvrInt_INT1, // 3
- gAvrInt_INT2, // 4
- gAvrInt_INT3, // 5
- gAvrInt_INT4, // 6
- gAvrInt_INT5, // 7
- gAvrInt_INT6, // 8
- gAvrInt_INT7, // 9
- gAvrInt_TIMER2_COMP, // 10
- gAvrInt_TIMER2_OVF, // 11
- gAvrInt_TIMER1_CAPT, // 12
- gAvrInt_TIMER1_COMPA, // 13
- gAvrInt_TIMER1_COMPB, // 14
- gAvrInt_TIMER1_COMPC, // 15
- gAvrInt_TIMER1_OVF, // 16
- gAvrInt_TIMER0_COMP, // 17
- gAvrInt_TIMER0_OVF, // 18
- gAvrInt_CAN_TrafnsferCE, // 19
- gAvrInt_CAN_TimerOverRun, // 20
- gAvrInt_SPI_STC, // 21
- gAvrInt_USART0_RX, // 22
- gAvrInt_USART0_UDRE, // 23
- gAvrInt_USART0_TX, // 24
- gAvrInt_ANALOG_COMP, // 25
- gAvrInt_ADC, // 26
- gAvrInt_EE_READY, // 27
- gAvrInt_TIMER3_CAPT, // 28
- gAvrInt_TIMER3_COMPA, // 29
- gAvrInt_TIMER3_COMPB, // 30
- gAvrInt_TIMER3_COMPC, // 31
- gAvrInt_TIMER3_OVF, // 32
- gAvrInt_USART1_RX, // 33
- gAvrInt_USART1_UDRE, // 34
- gAvrInt_USART1_TX, // 35
- gAvrInt_TWI, // 36
- gAvrInt_SPM_READY, // 37
-};
-
-#endif
-
-//**************************************************************************************************
-#if defined (__AVR_ATmega128RFA1__)
-#pragma mark __AVR_ATmega128RFA1__
-#define _INTERRUPT_NAMES_DEFINED_
-
-PGM_P gInterruptNameTable[] PROGMEM =
-{
- //* Atmel changed the number scheme for interrupt vectors
- gAvrInt_RESET, // 0
- gAvrInt_INT0, // 1
- gAvrInt_INT1, // 2
- gAvrInt_INT2, // 3
- gAvrInt_INT3, // 4
- gAvrInt_INT4, // 5
- gAvrInt_INT5, // 6
- gAvrInt_INT6, // 7
- gAvrInt_INT7, // 8
- gAvrInt_PCINT0, // 9
- gAvrInt_PCINT1, // 10
- gAvrInt_PCINT2, // 11
- gAvrInt_WDT, // 12
- gAvrInt_TIMER2_COMPA, // 13
- gAvrInt_TIMER2_COMPB, // 14
- gAvrInt_TIMER2_OVF, // 15
- gAvrInt_TIMER1_CAPT, // 16
- gAvrInt_TIMER1_COMPA, // 17
- gAvrInt_TIMER1_COMPB, // 18
- gAvrInt_TIMER1_COMPC, // 19
- gAvrInt_TIMER1_OVF, // 20
- gAvrInt_TIMER0_COMPA, // 21
- gAvrInt_TIMER0_COMPB, // 22
- gAvrInt_TIMER0_OVF, // 23
- gAvrInt_SPI_STC, // 24
- gAvrInt_USART0_RX, // 25
- gAvrInt_USART0_UDRE, // 26
- gAvrInt_USART0_TX, // 27
- gAvrInt_ANALOG_COMP, // 28
- gAvrInt_ADC, // 29
- gAvrInt_EE_READY, // 30
- gAvrInt_TIMER3_CAPT, // 31
- gAvrInt_TIMER3_COMPA, // 32
- gAvrInt_TIMER3_COMPB, // 33
- gAvrInt_TIMER3_COMPC, // 34
- gAvrInt_TIMER3_OVF, // 35
- gAvrInt_USART1_RX, // 36
- gAvrInt_USART1_UDRE, // 37
- gAvrInt_USART1_TX, // 38
- gAvrInt_TWI, // 39
- gAvrInt_SPM_READY, // 40
- gAvrInt_TIMER4_CAPT, // 41
- gAvrInt_TIMER4_COMPA, // 42
- gAvrInt_TIMER4_COMPB, // 43
- gAvrInt_TIMER4_COMPC, // 44
- gAvrInt_TIMER4_OVF, // 45
- gAvrInt_TIMER5_CAPT, // 46
- gAvrInt_TIMER5_COMPA, // 47
- gAvrInt_TIMER5_COMPB, // 48
- gAvrInt_TIMER5_COMPC, // 49
- gAvrInt_TIMER5_OVF, // 50
-#if 1
- gAvrInt_RESERVED, // 51
- gAvrInt_RESERVED, // 52
- gAvrInt_RESERVED, // 53
-
- gAvrInt_RESERVED, // 54
- gAvrInt_RESERVED, // 55
- gAvrInt_RESERVED, // 56
-
-#else
- gAvrInt_USART2_RX, // 51
- gAvrInt_USART2_UDRE, // 52
- gAvrInt_USART2_TX, // 53
-
- gAvrInt_USART3_RX, // 54
- gAvrInt_USART3_UDRE, // 55
- gAvrInt_USART3_TX, // 56
-#endif
- gAvrInt_TRN_PLL_LOCK, // 57
- gAvrInt_TRN_PLL_UNLOCK, // 58
- gAvrInt_TRN_RX_START, // 59
- gAvrInt_TRN_RX_END, // 60
- gAvrInt_TRN_CAAED_DONE, // 61
- gAvrInt_TRN_FRAME_MATCH,// 62
- gAvrInt_TRN_TX_END, // 63
- gAvrInt_TRN_AWAKE, // 64
-
- gAvrInt_SCNT_CMP1, // 65
- gAvrInt_SCNT_CMP2, // 66
- gAvrInt_SCNT_CMP3, // 67
- gAvrInt_SCNT_OVFL, // 68
- gAvrInt_SCNT_BACKOFF, // 69
- gAvrInt_AES_READY, // 70
- gAvrInt_BAT_LOW, // 71
-
-
-};
-
-#endif
-
-
-#if !defined(_INTERRUPT_NAMES_DEFINED_)
- #warning No interrupt string defs for this cpu
-#endif
-
diff --git a/bootloaders/stk500v2/command.h b/bootloaders/stk500v2/command.h
deleted file mode 100644
index 03b1b38..0000000
--- a/bootloaders/stk500v2/command.h
+++ /dev/null
@@ -1,114 +0,0 @@
-//**** ATMEL AVR - A P P L I C A T I O N N O T E ************************
-//*
-//* Title: AVR068 - STK500 Communication Protocol
-//* Filename: command.h
-//* Version: 1.0
-//* Last updated: 31.01.2005
-//*
-//* Support E-mail: avr@atmel.com
-//*
-//**************************************************************************
-
-// *****************[ STK message constants ]***************************
-
-#define MESSAGE_START 0x1B //= ESC = 27 decimal
-#define TOKEN 0x0E
-
-// *****************[ STK general command constants ]**************************
-
-#define CMD_SIGN_ON 0x01
-#define CMD_SET_PARAMETER 0x02
-#define CMD_GET_PARAMETER 0x03
-#define CMD_SET_DEVICE_PARAMETERS 0x04
-#define CMD_OSCCAL 0x05
-#define CMD_LOAD_ADDRESS 0x06
-#define CMD_FIRMWARE_UPGRADE 0x07
-
-
-// *****************[ STK ISP command constants ]******************************
-
-#define CMD_ENTER_PROGMODE_ISP 0x10
-#define CMD_LEAVE_PROGMODE_ISP 0x11
-#define CMD_CHIP_ERASE_ISP 0x12
-#define CMD_PROGRAM_FLASH_ISP 0x13
-#define CMD_READ_FLASH_ISP 0x14
-#define CMD_PROGRAM_EEPROM_ISP 0x15
-#define CMD_READ_EEPROM_ISP 0x16
-#define CMD_PROGRAM_FUSE_ISP 0x17
-#define CMD_READ_FUSE_ISP 0x18
-#define CMD_PROGRAM_LOCK_ISP 0x19
-#define CMD_READ_LOCK_ISP 0x1A
-#define CMD_READ_SIGNATURE_ISP 0x1B
-#define CMD_READ_OSCCAL_ISP 0x1C
-#define CMD_SPI_MULTI 0x1D
-
-// *****************[ STK PP command constants ]*******************************
-
-#define CMD_ENTER_PROGMODE_PP 0x20
-#define CMD_LEAVE_PROGMODE_PP 0x21
-#define CMD_CHIP_ERASE_PP 0x22
-#define CMD_PROGRAM_FLASH_PP 0x23
-#define CMD_READ_FLASH_PP 0x24
-#define CMD_PROGRAM_EEPROM_PP 0x25
-#define CMD_READ_EEPROM_PP 0x26
-#define CMD_PROGRAM_FUSE_PP 0x27
-#define CMD_READ_FUSE_PP 0x28
-#define CMD_PROGRAM_LOCK_PP 0x29
-#define CMD_READ_LOCK_PP 0x2A
-#define CMD_READ_SIGNATURE_PP 0x2B
-#define CMD_READ_OSCCAL_PP 0x2C
-
-#define CMD_SET_CONTROL_STACK 0x2D
-
-// *****************[ STK HVSP command constants ]*****************************
-
-#define CMD_ENTER_PROGMODE_HVSP 0x30
-#define CMD_LEAVE_PROGMODE_HVSP 0x31
-#define CMD_CHIP_ERASE_HVSP 0x32
-#define CMD_PROGRAM_FLASH_HVSP ` 0x33
-#define CMD_READ_FLASH_HVSP 0x34
-#define CMD_PROGRAM_EEPROM_HVSP 0x35
-#define CMD_READ_EEPROM_HVSP 0x36
-#define CMD_PROGRAM_FUSE_HVSP 0x37
-#define CMD_READ_FUSE_HVSP 0x38
-#define CMD_PROGRAM_LOCK_HVSP 0x39
-#define CMD_READ_LOCK_HVSP 0x3A
-#define CMD_READ_SIGNATURE_HVSP 0x3B
-#define CMD_READ_OSCCAL_HVSP 0x3C
-
-// *****************[ STK status constants ]***************************
-
-// Success
-#define STATUS_CMD_OK 0x00
-
-// Warnings
-#define STATUS_CMD_TOUT 0x80
-#define STATUS_RDY_BSY_TOUT 0x81
-#define STATUS_SET_PARAM_MISSING 0x82
-
-// Errors
-#define STATUS_CMD_FAILED 0xC0
-#define STATUS_CKSUM_ERROR 0xC1
-#define STATUS_CMD_UNKNOWN 0xC9
-
-// *****************[ STK parameter constants ]***************************
-#define PARAM_BUILD_NUMBER_LOW 0x80
-#define PARAM_BUILD_NUMBER_HIGH 0x81
-#define PARAM_HW_VER 0x90
-#define PARAM_SW_MAJOR 0x91
-#define PARAM_SW_MINOR 0x92
-#define PARAM_VTARGET 0x94
-#define PARAM_VADJUST 0x95
-#define PARAM_OSC_PSCALE 0x96
-#define PARAM_OSC_CMATCH 0x97
-#define PARAM_SCK_DURATION 0x98
-#define PARAM_TOPCARD_DETECT 0x9A
-#define PARAM_STATUS 0x9C
-#define PARAM_DATA 0x9D
-#define PARAM_RESET_POLARITY 0x9E
-#define PARAM_CONTROLLER_INIT 0x9F
-
-// *****************[ STK answer constants ]***************************
-
-#define ANSWER_CKSUM_ERROR 0xB0
-
diff --git a/bootloaders/stk500v2/stk500boot.c b/bootloaders/stk500v2/stk500boot.c
deleted file mode 100644
index 0b49dff..0000000
--- a/bootloaders/stk500v2/stk500boot.c
+++ /dev/null
@@ -1,2122 +0,0 @@
-/*****************************************************************************
-Title: STK500v2 compatible bootloader
- Modified for Wiring board ATMega128-16MHz
-Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
-Compiler: avr-gcc 3.4.5 or 4.1 / avr-libc 1.4.3
-Hardware: All AVRs with bootloader support, tested with ATmega8
-License: GNU General Public License
-
-Modified: Worapoht Kornkaewwattanakul <dev@avride.com> http://www.avride.com
-Date: 17 October 2007
-Update: 1st, 29 Dec 2007 : Enable CMD_SPI_MULTI but ignore unused command by return 0x00 byte response..
-Compiler: WINAVR20060421
-Description: add timeout feature like previous Wiring bootloader
-
-DESCRIPTION:
- This program allows an AVR with bootloader capabilities to
- read/write its own Flash/EEprom. To enter Programming mode
- an input pin is checked. If this pin is pulled low, programming mode
- is entered. If not, normal execution is done from $0000
- "reset" vector in Application area.
- Size fits into a 1024 word bootloader section
- when compiled with avr-gcc 4.1
- (direct replace on Wiring Board without fuse setting changed)
-
-USAGE:
- - Set AVR MCU type and clock-frequency (F_CPU) in the Makefile.
- - Set baud rate below (AVRISP only works with 115200 bps)
- - compile/link the bootloader with the supplied Makefile
- - program the "Boot Flash section size" (BOOTSZ fuses),
- for boot-size 1024 words: program BOOTSZ01
- - enable the BOOT Reset Vector (program BOOTRST)
- - Upload the hex file to the AVR using any ISP programmer
- - Program Boot Lock Mode 3 (program BootLock 11 and BootLock 12 lock bits) // (leave them)
- - Reset your AVR while keeping PROG_PIN pulled low // (for enter bootloader by switch)
- - Start AVRISP Programmer (AVRStudio/Tools/Program AVR)
- - AVRISP will detect the bootloader
- - Program your application FLASH file and optional EEPROM file using AVRISP
-
-Note:
- Erasing the device without flashing, through AVRISP GUI button "Erase Device"
- is not implemented, due to AVRStudio limitations.
- Flash is always erased before programming.
-
- AVRdude:
- Please uncomment #define REMOVE_CMD_SPI_MULTI when using AVRdude.
- Comment #define REMOVE_PROGRAM_LOCK_BIT_SUPPORT to reduce code size
- Read Fuse Bits and Read/Write Lock Bits is not supported
-
-NOTES:
- Based on Atmel Application Note AVR109 - Self-programming
- Based on Atmel Application Note AVR068 - STK500v2 Protocol
-
-LICENSE:
- Copyright (C) 2006 Peter Fleury
-
- 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
- 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.
-
-*****************************************************************************/
-
-//************************************************************************
-//* Edit History
-//************************************************************************
-//* Jul 7, 2010 <MLS> = Mark Sproul msproul@skycharoit.com
-//* Jul 7, 2010 <MLS> Working on mega2560. No Auto-restart
-//* Jul 7, 2010 <MLS> Switched to 8K bytes (4K words) so that we have room for the monitor
-//* Jul 8, 2010 <MLS> Found older version of source that had auto restart, put that code back in
-//* Jul 8, 2010 <MLS> Adding monitor code
-//* Jul 11, 2010 <MLS> Added blinking LED while waiting for download to start
-//* Jul 11, 2010 <MLS> Added EEPROM test
-//* Jul 29, 2010 <MLS> Added recchar_timeout for timing out on bootloading
-//* Aug 23, 2010 <MLS> Added support for atmega2561
-//* Aug 26, 2010 <MLS> Removed support for BOOT_BY_SWITCH
-//* Sep 8, 2010 <MLS> Added support for atmega16
-//* Nov 9, 2010 <MLS> Issue 392:Fixed bug that 3 !!! in code would cause it to jump to monitor
-//* Jun 24, 2011 <MLS> Removed analogRead (was not used)
-//* Dec 29, 2011 <MLS> Issue 181: added watch dog timmer support
-//* Dec 29, 2011 <MLS> Issue 505: bootloader is comparing the seqNum to 1 or the current sequence
-//* Jan 1, 2012 <MLS> Issue 543: CMD_CHIP_ERASE_ISP now returns STATUS_CMD_FAILED instead of STATUS_CMD_OK
-//* Jan 1, 2012 <MLS> Issue 543: Write EEPROM now does something (NOT TESTED)
-//* Jan 1, 2012 <MLS> Issue 544: stk500v2 bootloader doesn't support reading fuses
-//************************************************************************
-
-//************************************************************************
-//* these are used to test issues
-//* http://code.google.com/p/arduino/issues/detail?id=505
-//* Reported by mark.stubbs, Mar 14, 2011
-//* The STK500V2 bootloader is comparing the seqNum to 1 or the current sequence
-//* (IE: Requiring the sequence to be 1 or match seqNum before continuing).
-//* The correct behavior is for the STK500V2 to accept the PC's sequence number, and echo it back for the reply message.
-#define _FIX_ISSUE_505_
-//************************************************************************
-//* Issue 181: added watch dog timmer support
-#define _FIX_ISSUE_181_
-
-#include <inttypes.h>
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <avr/boot.h>
-#include <avr/pgmspace.h>
-#include <util/delay.h>
-#include <avr/eeprom.h>
-#include <avr/common.h>
-#include <stdlib.h>
-#include "command.h"
-
-
-#if defined(_MEGA_BOARD_) || defined(_BOARD_AMBER128_) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) \
- || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega1284P__) || defined(ENABLE_MONITOR)
- #undef ENABLE_MONITOR
- #define ENABLE_MONITOR
- static void RunMonitor(void);
-#endif
-
-#ifndef EEWE
- #define EEWE 1
-#endif
-#ifndef EEMWE
- #define EEMWE 2
-#endif
-
-//#define _DEBUG_SERIAL_
-//#define _DEBUG_WITH_LEDS_
-
-
-/*
- * Uncomment the following lines to save code space
- */
-//#define REMOVE_PROGRAM_LOCK_BIT_SUPPORT // disable program lock bits
-//#define REMOVE_BOOTLOADER_LED // no LED to show active bootloader
-//#define REMOVE_CMD_SPI_MULTI // disable processing of SPI_MULTI commands, Remark this line for AVRDUDE <Worapoht>
-//
-
-
-
-//************************************************************************
-//* LED on pin "PROGLED_PIN" on port "PROGLED_PORT"
-//* indicates that bootloader is active
-//* PG2 -> LED on Wiring board
-//************************************************************************
-#define BLINK_LED_WHILE_WAITING
-
-#ifdef _MEGA_BOARD_
- #define PROGLED_PORT PORTB
- #define PROGLED_DDR DDRB
- #define PROGLED_PIN PINB7
-#elif defined( _BOARD_AMBER128_ )
- //* this is for the amber 128 http://www.soc-robotics.com/
- //* onbarod led is PORTE4
- #define PROGLED_PORT PORTD
- #define PROGLED_DDR DDRD
- #define PROGLED_PIN PINE7
-#elif defined( _CEREBOTPLUS_BOARD_ ) || defined(_CEREBOT_II_BOARD_)
- //* this is for the Cerebot 2560 board and the Cerebot-ii
- //* onbarod leds are on PORTE4-7
- #define PROGLED_PORT PORTE
- #define PROGLED_DDR DDRE
- #define PROGLED_PIN PINE7
-#elif defined( _PENGUINO_ )
- //* this is for the Penguino
- //* onbarod led is PORTE4
- #define PROGLED_PORT PORTC
- #define PROGLED_DDR DDRC
- #define PROGLED_PIN PINC6
-#elif defined( _ANDROID_2561_ ) || defined( __AVR_ATmega2561__ )
- //* this is for the Boston Android 2561
- //* onbarod led is PORTE4
- #define PROGLED_PORT PORTA
- #define PROGLED_DDR DDRA
- #define PROGLED_PIN PINA3
-#elif defined( _BOARD_MEGA16 )
- //* onbarod led is PORTA7
- #define PROGLED_PORT PORTA
- #define PROGLED_DDR DDRA
- #define PROGLED_PIN PINA7
- #define UART_BAUDRATE_DOUBLE_SPEED 0
-
-#elif defined( _BOARD_BAHBOT_ )
- //* dosent have an onboard LED but this is what will probably be added to this port
- #define PROGLED_PORT PORTB
- #define PROGLED_DDR DDRB
- #define PROGLED_PIN PINB0
-
-#elif defined( _BOARD_ROBOTX_ )
- #define PROGLED_PORT PORTB
- #define PROGLED_DDR DDRB
- #define PROGLED_PIN PINB6
-#elif defined( _BOARD_CUSTOM1284_BLINK_B0_ )
- #define PROGLED_PORT PORTB
- #define PROGLED_DDR DDRB
- #define PROGLED_PIN PINB0
-#elif defined( _BOARD_CUSTOM1284_ )
- #define PROGLED_PORT PORTD
- #define PROGLED_DDR DDRD
- #define PROGLED_PIN PIND5
-#elif defined( _AVRLIP_ )
- #define PROGLED_PORT PORTB
- #define PROGLED_DDR DDRB
- #define PROGLED_PIN PINB5
-#elif defined( _BOARD_STK500_ )
- #define PROGLED_PORT PORTA
- #define PROGLED_DDR DDRA
- #define PROGLED_PIN PINA7
-#elif defined( _BOARD_STK502_ )
- #define PROGLED_PORT PORTB
- #define PROGLED_DDR DDRB
- #define PROGLED_PIN PINB5
-#elif defined( _BOARD_STK525_ )
- #define PROGLED_PORT PORTB
- #define PROGLED_DDR DDRB
- #define PROGLED_PIN PINB7
-#else
- #define PROGLED_PORT PORTG
- #define PROGLED_DDR DDRG
- #define PROGLED_PIN PING2
-#endif
-
-
-
-/*
- * define CPU frequency in Mhz here if not defined in Makefile
- */
-#ifndef F_CPU
- #define F_CPU 16000000UL
-#endif
-
-#define _BLINK_LOOP_COUNT_ (F_CPU / 2250)
-/*
- * UART Baudrate, AVRStudio AVRISP only accepts 115200 bps
- */
-
-#ifndef BAUDRATE
- #define BAUDRATE 115200
-#endif
-
-/*
- * Enable (1) or disable (0) USART double speed operation
- */
-#ifndef UART_BAUDRATE_DOUBLE_SPEED
- #if defined (__AVR_ATmega32__)
- #define UART_BAUDRATE_DOUBLE_SPEED 0
- #else
- #define UART_BAUDRATE_DOUBLE_SPEED 1
- #endif
-#endif
-
-/*
- * HW and SW version, reported to AVRISP, must match version of AVRStudio
- */
-#define CONFIG_PARAM_BUILD_NUMBER_LOW 0
-#define CONFIG_PARAM_BUILD_NUMBER_HIGH 0
-#define CONFIG_PARAM_HW_VER 0x0F
-#define CONFIG_PARAM_SW_MAJOR 2
-#define CONFIG_PARAM_SW_MINOR 0x0A
-
-/*
- * Calculate the address where the bootloader starts from FLASHEND and BOOTSIZE
- * (adjust BOOTSIZE below and BOOTLOADER_ADDRESS in Makefile if you want to change the size of the bootloader)
- */
-//#define BOOTSIZE 1024
-#if FLASHEND > 0x0F000
- #define BOOTSIZE 8192
-#else
- #define BOOTSIZE 2048
-#endif
-
-#define APP_END (FLASHEND -(2*BOOTSIZE) + 1)
-
-/*
- * Signature bytes are not available in avr-gcc io_xxx.h
- */
-#if defined (__AVR_ATmega8__)
- #define SIGNATURE_BYTES 0x1E9307
-#elif defined (__AVR_ATmega16__)
- #define SIGNATURE_BYTES 0x1E9403
-#elif defined (__AVR_ATmega32__)
- #define SIGNATURE_BYTES 0x1E9502
-#elif defined (__AVR_ATmega8515__)
- #define SIGNATURE_BYTES 0x1E9306
-#elif defined (__AVR_ATmega8535__)
- #define SIGNATURE_BYTES 0x1E9308
-#elif defined (__AVR_ATmega162__)
- #define SIGNATURE_BYTES 0x1E9404
-#elif defined (__AVR_ATmega128__)
- #define SIGNATURE_BYTES 0x1E9702
-#elif defined (__AVR_ATmega1280__)
- #define SIGNATURE_BYTES 0x1E9703
-#elif defined (__AVR_ATmega2560__)
- #define SIGNATURE_BYTES 0x1E9801
-#elif defined (__AVR_ATmega2561__)
- #define SIGNATURE_BYTES 0x1e9802
-#elif defined (__AVR_ATmega1284P__)
- #define SIGNATURE_BYTES 0x1e9705
-#elif defined (__AVR_ATmega640__)
- #define SIGNATURE_BYTES 0x1e9608
-#elif defined (__AVR_ATmega64__)
- #define SIGNATURE_BYTES 0x1E9602
-#elif defined (__AVR_ATmega169__)
- #define SIGNATURE_BYTES 0x1e9405
-#elif defined (__AVR_AT90USB1287__)
- #define SIGNATURE_BYTES 0x1e9782
-#else
- #error "no signature definition for MCU available"
-#endif
-
-
-#if defined(_BOARD_ROBOTX_) || defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB1286__)
- #define UART_BAUD_RATE_LOW UBRR1L
- #define UART_STATUS_REG UCSR1A
- #define UART_CONTROL_REG UCSR1B
- #define UART_ENABLE_TRANSMITTER TXEN1
- #define UART_ENABLE_RECEIVER RXEN1
- #define UART_TRANSMIT_COMPLETE TXC1
- #define UART_RECEIVE_COMPLETE RXC1
- #define UART_DATA_REG UDR1
- #define UART_DOUBLE_SPEED U2X1
-
-#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) \
- || defined(__AVR_ATmega8515__) || defined(__AVR_ATmega8535__)
- /* ATMega8 with one USART */
- #define UART_BAUD_RATE_LOW UBRRL
- #define UART_STATUS_REG UCSRA
- #define UART_CONTROL_REG UCSRB
- #define UART_ENABLE_TRANSMITTER TXEN
- #define UART_ENABLE_RECEIVER RXEN
- #define UART_TRANSMIT_COMPLETE TXC
- #define UART_RECEIVE_COMPLETE RXC
- #define UART_DATA_REG UDR
- #define UART_DOUBLE_SPEED U2X
-
-#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) || defined(__AVR_ATmega162__) \
- || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)
- /* ATMega with two USART, use UART0 */
- #define UART_BAUD_RATE_LOW UBRR0L
- #define UART_STATUS_REG UCSR0A
- #define UART_CONTROL_REG UCSR0B
- #define UART_ENABLE_TRANSMITTER TXEN0
- #define UART_ENABLE_RECEIVER RXEN0
- #define UART_TRANSMIT_COMPLETE TXC0
- #define UART_RECEIVE_COMPLETE RXC0
- #define UART_DATA_REG UDR0
- #define UART_DOUBLE_SPEED U2X0
-#elif defined(UBRR0L) && defined(UCSR0A) && defined(TXEN0)
- /* ATMega with two USART, use UART0 */
- #define UART_BAUD_RATE_LOW UBRR0L
- #define UART_STATUS_REG UCSR0A
- #define UART_CONTROL_REG UCSR0B
- #define UART_ENABLE_TRANSMITTER TXEN0
- #define UART_ENABLE_RECEIVER RXEN0
- #define UART_TRANSMIT_COMPLETE TXC0
- #define UART_RECEIVE_COMPLETE RXC0
- #define UART_DATA_REG UDR0
- #define UART_DOUBLE_SPEED U2X0
-#elif defined(UBRRL) && defined(UCSRA) && defined(UCSRB) && defined(TXEN) && defined(RXEN)
- //* catch all
- #define UART_BAUD_RATE_LOW UBRRL
- #define UART_STATUS_REG UCSRA
- #define UART_CONTROL_REG UCSRB
- #define UART_ENABLE_TRANSMITTER TXEN
- #define UART_ENABLE_RECEIVER RXEN
- #define UART_TRANSMIT_COMPLETE TXC
- #define UART_RECEIVE_COMPLETE RXC
- #define UART_DATA_REG UDR
- #define UART_DOUBLE_SPEED U2X
-#else
- #error "no UART definition for MCU available"
-#endif
-
-
-
-/*
- * Macro to calculate UBBR from XTAL and baudrate
- */
-#if defined(__AVR_ATmega32__) && UART_BAUDRATE_DOUBLE_SPEED
- #define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu / 4 / baudRate - 1) / 2)
-#elif defined(__AVR_ATmega32__)
- #define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu / 8 / baudRate - 1) / 2)
-#elif UART_BAUDRATE_DOUBLE_SPEED
- #define UART_BAUD_SELECT(baudRate,xtalCpu) (((float)(xtalCpu))/(((float)(baudRate))*8.0)-1.0+0.5)
-#else
- #define UART_BAUD_SELECT(baudRate,xtalCpu) (((float)(xtalCpu))/(((float)(baudRate))*16.0)-1.0+0.5)
-#endif
-
-
-/*
- * States used in the receive state machine
- */
-#define ST_START 0
-#define ST_GET_SEQ_NUM 1
-#define ST_MSG_SIZE_1 2
-#define ST_MSG_SIZE_2 3
-#define ST_GET_TOKEN 4
-#define ST_GET_DATA 5
-#define ST_GET_CHECK 6
-#define ST_PROCESS 7
-
-/*
- * use 16bit address variable for ATmegas with <= 64K flash
- */
-#if defined(RAMPZ)
- typedef uint32_t address_t;
-#else
- typedef uint16_t address_t;
-#endif
-
-/*
- * function prototypes
- */
-static void sendchar(char c);
-static unsigned char recchar(void);
-
-/*
- * since this bootloader is not linked against the avr-gcc crt1 functions,
- * to reduce the code size, we need to provide our own initialization
- */
-void __jumpMain (void) __attribute__ ((naked)) __attribute__ ((section (".init9")));
-#include <avr/sfr_defs.h>
-
-//#define SPH_REG 0x3E
-//#define SPL_REG 0x3D
-
-//*****************************************************************************
-void __jumpMain(void)
-{
-//* July 17, 2010 <MLS> Added stack pointer initialzation
-//* the first line did not do the job on the ATmega128
-
- asm volatile ( ".set __stack, %0" :: "i" (RAMEND) );
-
-//* set stack pointer to top of RAM
-
- asm volatile ( "ldi 16, %0" :: "i" (RAMEND >> 8) );
- asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_HI_ADDR) );
-
- asm volatile ( "ldi 16, %0" :: "i" (RAMEND & 0x0ff) );
- asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_LO_ADDR) );
-
- asm volatile ( "clr __zero_reg__" ); // GCC depends on register r1 set to 0
- asm volatile ( "out %0, __zero_reg__" :: "I" (_SFR_IO_ADDR(SREG)) ); // set SREG to 0
- asm volatile ( "jmp main"); // jump to main()
-}
-
-
-//*****************************************************************************
-void delay_ms(unsigned int timedelay)
-{
- unsigned int i;
- for (i=0;i<timedelay;i++)
- {
- _delay_ms(0.5);
- }
-}
-
-
-//*****************************************************************************
-/*
- * send single byte to USART, wait until transmission is completed
- */
-static void sendchar(char c)
-{
- UART_DATA_REG = c; // prepare transmission
- while (!(UART_STATUS_REG & (1 << UART_TRANSMIT_COMPLETE))); // wait until byte sent
- UART_STATUS_REG |= (1 << UART_TRANSMIT_COMPLETE); // delete TXCflag
-}
-
-
-//************************************************************************
-static int Serial_Available(void)
-{
- return(UART_STATUS_REG & (1 << UART_RECEIVE_COMPLETE)); // wait for data
-}
-
-
-//*****************************************************************************
-/*
- * Read single byte from USART, block if no data available
- */
-static unsigned char recchar(void)
-{
- while (!(UART_STATUS_REG & (1 << UART_RECEIVE_COMPLETE)))
- {
- // wait for data
- }
- return UART_DATA_REG;
-}
-
-#define MAX_TIME_COUNT (F_CPU >> 1)
-//*****************************************************************************
-static unsigned char recchar_timeout(void)
-{
-uint32_t count = 0;
-
- while (!(UART_STATUS_REG & (1 << UART_RECEIVE_COMPLETE)))
- {
- // wait for data
- count++;
- if (count > MAX_TIME_COUNT)
- {
- unsigned int data;
- #if (FLASHEND > 0x10000)
- data = pgm_read_word_far(0); //* get the first word of the user program
- #else
- data = pgm_read_word_near(0); //* get the first word of the user program
- #endif
- if (data != 0xffff) //* make sure its valid before jumping to it.
- {
- asm volatile(
- "clr r30 \n\t"
- "clr r31 \n\t"
- "ijmp \n\t"
- );
- }
- count = 0;
- }
- }
- return UART_DATA_REG;
-}
-
-//* for watch dog timer startup
-void (*app_start)(void) = 0x0000;
-
-
-//*****************************************************************************
-int main(void)
-{
- address_t address = 0;
- address_t eraseAddress = 0;
- unsigned char msgParseState;
- unsigned int ii = 0;
- unsigned char checksum = 0;
- unsigned char seqNum = 0;
- unsigned int msgLength = 0;
- unsigned char msgBuffer[285];
- unsigned char c, *p;
- unsigned char isLeave = 0;
-
- unsigned long boot_timeout;
- unsigned long boot_timer;
- unsigned int boot_state;
-#ifdef ENABLE_MONITOR
- unsigned int exPointCntr = 0;
- unsigned int rcvdCharCntr = 0;
-#endif
-
- //* some chips dont set the stack properly
- asm volatile ( ".set __stack, %0" :: "i" (RAMEND) );
- asm volatile ( "ldi 16, %0" :: "i" (RAMEND >> 8) );
- asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_HI_ADDR) );
- asm volatile ( "ldi 16, %0" :: "i" (RAMEND & 0x0ff) );
- asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_LO_ADDR) );
-
-#ifdef _FIX_ISSUE_181_
- //************************************************************************
- //* Dec 29, 2011 <MLS> Issue #181, added watch dog timmer support
- //* handle the watch dog timer
- uint8_t mcuStatusReg;
- mcuStatusReg = MCUSR;
-
- __asm__ __volatile__ ("cli");
- __asm__ __volatile__ ("wdr");
- MCUSR = 0;
- WDTCSR |= _BV(WDCE) | _BV(WDE);
- WDTCSR = 0;
- __asm__ __volatile__ ("sei");
- // check if WDT generated the reset, if so, go straight to app
- if (mcuStatusReg & _BV(WDRF))
- {
- app_start();
- }
- //************************************************************************
-#endif
-
-
- boot_timer = 0;
- boot_state = 0;
-
-#ifdef BLINK_LED_WHILE_WAITING
-// boot_timeout = 90000; //* should be about 4 seconds
-// boot_timeout = 170000;
- boot_timeout = 20000; //* should be about 1 second
-#else
- boot_timeout = 3500000; // 7 seconds , approx 2us per step when optimize "s"
-#endif
- /*
- * Branch to bootloader or application code ?
- */
-
-#ifndef REMOVE_BOOTLOADER_LED
- /* PROG_PIN pulled low, indicate with LED that bootloader is active */
- PROGLED_DDR |= (1<<PROGLED_PIN);
-// PROGLED_PORT &= ~(1<<PROGLED_PIN); // active low LED ON
- PROGLED_PORT |= (1<<PROGLED_PIN); // active high LED ON
-
-#ifdef _DEBUG_WITH_LEDS_
- for (ii=0; ii<3; ii++)
- {
- PROGLED_PORT &= ~(1<<PROGLED_PIN); // turn LED off
- delay_ms(100);
- PROGLED_PORT |= (1<<PROGLED_PIN); // turn LED on
- delay_ms(100);
- }
-#endif
-
-#endif
- /*
- * Init UART
- * set baudrate and enable USART receiver and transmiter without interrupts
- */
-#if UART_BAUDRATE_DOUBLE_SPEED
- UART_STATUS_REG |= (1 <<UART_DOUBLE_SPEED);
-#endif
- UART_BAUD_RATE_LOW = UART_BAUD_SELECT(BAUDRATE,F_CPU);
- UART_CONTROL_REG = (1 << UART_ENABLE_RECEIVER) | (1 << UART_ENABLE_TRANSMITTER);
-
- asm volatile ("nop"); // wait until port has changed
-
-#ifdef _DEBUG_SERIAL_
-// delay_ms(500);
-
- sendchar('s');
- sendchar('t');
- sendchar('k');
-// sendchar('5');
-// sendchar('0');
-// sendchar('0');
- sendchar('v');
- sendchar('2');
- sendchar(0x0d);
- sendchar(0x0a);
-
- delay_ms(100);
-#endif
-
- while (boot_state==0)
- {
- while ((!(Serial_Available())) && (boot_state == 0)) // wait for data
- {
- _delay_ms(0.001);
- boot_timer++;
- if (boot_timer > boot_timeout)
- {
- boot_state = 1; // (after ++ -> boot_state=2 bootloader timeout, jump to main 0x00000 )
- }
- #ifdef BLINK_LED_WHILE_WAITING
- if ((boot_timer % _BLINK_LOOP_COUNT_) == 0)
- {
- //* toggle the LED
- PROGLED_PORT ^= (1<<PROGLED_PIN); // turn LED ON
- }
- #endif
- }
- boot_state++; // ( if boot_state=1 bootloader received byte from UART, enter bootloader mode)
- }
-
-
- if (boot_state==1)
- {
- //* main loop
- while (!isLeave)
- {
- /*
- * Collect received bytes to a complete message
- */
- msgParseState = ST_START;
- while ( msgParseState != ST_PROCESS )
- {
- if (boot_state==1)
- {
- boot_state = 0;
- c = UART_DATA_REG;
- }
- else
- {
- // c = recchar();
- c = recchar_timeout();
-
- }
-
- #ifdef ENABLE_MONITOR
- rcvdCharCntr++;
-
- if ((c == '!') && (rcvdCharCntr < 10))
- {
- exPointCntr++;
- if (exPointCntr == 3)
- {
- RunMonitor();
- exPointCntr = 0; // reset back to zero so we dont get in an endless loop
- isLeave = 1;
- msgParseState = 99; //* we dont want it do anything
- break;
- }
- }
- else
- {
- exPointCntr = 0;
- }
- #endif
-
- switch (msgParseState)
- {
- case ST_START:
- if ( c == MESSAGE_START )
- {
- msgParseState = ST_GET_SEQ_NUM;
- checksum = MESSAGE_START^0;
- }
- break;
-
- case ST_GET_SEQ_NUM:
- #ifdef _FIX_ISSUE_505_
- seqNum = c;
- msgParseState = ST_MSG_SIZE_1;
- checksum ^= c;
- #else
- if ( (c == 1) || (c == seqNum) )
- {
- seqNum = c;
- msgParseState = ST_MSG_SIZE_1;
- checksum ^= c;
- }
- else
- {
- msgParseState = ST_START;
- }
- #endif
- break;
-
- case ST_MSG_SIZE_1:
- msgLength = c<<8;
- msgParseState = ST_MSG_SIZE_2;
- checksum ^= c;
- break;
-
- case ST_MSG_SIZE_2:
- msgLength |= c;
- msgParseState = ST_GET_TOKEN;
- checksum ^= c;
- break;
-
- case ST_GET_TOKEN:
- if ( c == TOKEN )
- {
- msgParseState = ST_GET_DATA;
- checksum ^= c;
- ii = 0;
- }
- else
- {
- msgParseState = ST_START;
- }
- break;
-
- case ST_GET_DATA:
- msgBuffer[ii++] = c;
- checksum ^= c;
- if (ii == msgLength )
- {
- msgParseState = ST_GET_CHECK;
- }
- break;
-
- case ST_GET_CHECK:
- if ( c == checksum )
- {
- msgParseState = ST_PROCESS;
- }
- else
- {
- msgParseState = ST_START;
- }
- break;
- } // switch
- } // while(msgParseState)
-
- /*
- * Now process the STK500 commands, see Atmel Appnote AVR068
- */
-
- switch (msgBuffer[0])
- {
- #ifndef REMOVE_CMD_SPI_MULTI
- case CMD_SPI_MULTI:
- {
- unsigned char answerByte;
- unsigned char flag=0;
-
- if ( msgBuffer[4]== 0x30 )
- {
- unsigned char signatureIndex = msgBuffer[6];
-
- if ( signatureIndex == 0 )
- {
- answerByte = (SIGNATURE_BYTES >> 16) & 0x000000FF;
- }
- else if ( signatureIndex == 1 )
- {
- answerByte = (SIGNATURE_BYTES >> 8) & 0x000000FF;
- }
- else
- {
- answerByte = SIGNATURE_BYTES & 0x000000FF;
- }
- }
- else if ( msgBuffer[4] & 0x50 )
- {
- //* Issue 544: stk500v2 bootloader doesn't support reading fuses
- //* I cant find the docs that say what these are supposed to be but this was figured out by trial and error
- // answerByte = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS);
- // answerByte = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS);
- // answerByte = boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS);
- if (msgBuffer[4] == 0x50)
- {
- answerByte = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS);
- }
- else if (msgBuffer[4] == 0x58)
- {
- answerByte = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS);
- }
- else
- {
- answerByte = 0;
- }
- }
- else
- {
- answerByte = 0; // for all others command are not implemented, return dummy value for AVRDUDE happy <Worapoht>
- }
- if ( !flag )
- {
- msgLength = 7;
- msgBuffer[1] = STATUS_CMD_OK;
- msgBuffer[2] = 0;
- msgBuffer[3] = msgBuffer[4];
- msgBuffer[4] = 0;
- msgBuffer[5] = answerByte;
- msgBuffer[6] = STATUS_CMD_OK;
- }
- }
- break;
- #endif
- case CMD_SIGN_ON:
- msgLength = 11;
- msgBuffer[1] = STATUS_CMD_OK;
- msgBuffer[2] = 8;
- msgBuffer[3] = 'A';
- msgBuffer[4] = 'V';
- msgBuffer[5] = 'R';
- msgBuffer[6] = 'I';
- msgBuffer[7] = 'S';
- msgBuffer[8] = 'P';
- msgBuffer[9] = '_';
- msgBuffer[10] = '2';
- break;
-
- case CMD_GET_PARAMETER:
- {
- unsigned char value;
-
- switch(msgBuffer[1])
- {
- case PARAM_BUILD_NUMBER_LOW:
- value = CONFIG_PARAM_BUILD_NUMBER_LOW;
- break;
- case PARAM_BUILD_NUMBER_HIGH:
- value = CONFIG_PARAM_BUILD_NUMBER_HIGH;
- break;
- case PARAM_HW_VER:
- value = CONFIG_PARAM_HW_VER;
- break;
- case PARAM_SW_MAJOR:
- value = CONFIG_PARAM_SW_MAJOR;
- break;
- case PARAM_SW_MINOR:
- value = CONFIG_PARAM_SW_MINOR;
- break;
- default:
- value = 0;
- break;
- }
- msgLength = 3;
- msgBuffer[1] = STATUS_CMD_OK;
- msgBuffer[2] = value;
- }
- break;
-
- case CMD_LEAVE_PROGMODE_ISP:
- isLeave = 1;
- //* fall thru
-
- case CMD_SET_PARAMETER:
- case CMD_ENTER_PROGMODE_ISP:
- msgLength = 2;
- msgBuffer[1] = STATUS_CMD_OK;
- break;
-
- case CMD_READ_SIGNATURE_ISP:
- {
- unsigned char signatureIndex = msgBuffer[4];
- unsigned char signature;
-
- if ( signatureIndex == 0 )
- signature = (SIGNATURE_BYTES >>16) & 0x000000FF;
- else if ( signatureIndex == 1 )
- signature = (SIGNATURE_BYTES >> 8) & 0x000000FF;
- else
- signature = SIGNATURE_BYTES & 0x000000FF;
-
- msgLength = 4;
- msgBuffer[1] = STATUS_CMD_OK;
- msgBuffer[2] = signature;
- msgBuffer[3] = STATUS_CMD_OK;
- }
- break;
-
- case CMD_READ_LOCK_ISP:
- msgLength = 4;
- msgBuffer[1] = STATUS_CMD_OK;
- msgBuffer[2] = boot_lock_fuse_bits_get( GET_LOCK_BITS );
- msgBuffer[3] = STATUS_CMD_OK;
- break;
-
- case CMD_READ_FUSE_ISP:
- {
- unsigned char fuseBits;
-
- if ( msgBuffer[2] == 0x50 )
- {
- if ( msgBuffer[3] == 0x08 )
- fuseBits = boot_lock_fuse_bits_get( GET_EXTENDED_FUSE_BITS );
- else
- fuseBits = boot_lock_fuse_bits_get( GET_LOW_FUSE_BITS );
- }
- else
- {
- fuseBits = boot_lock_fuse_bits_get( GET_HIGH_FUSE_BITS );
- }
- msgLength = 4;
- msgBuffer[1] = STATUS_CMD_OK;
- msgBuffer[2] = fuseBits;
- msgBuffer[3] = STATUS_CMD_OK;
- }
- break;
-
- #ifndef REMOVE_PROGRAM_LOCK_BIT_SUPPORT
- case CMD_PROGRAM_LOCK_ISP:
- {
- unsigned char lockBits = msgBuffer[4];
-
- lockBits = (~lockBits) & 0x3C; // mask BLBxx bits
- boot_lock_bits_set(lockBits); // and program it
- boot_spm_busy_wait();
-
- msgLength = 3;
- msgBuffer[1] = STATUS_CMD_OK;
- msgBuffer[2] = STATUS_CMD_OK;
- }
- break;
- #endif
- case CMD_CHIP_ERASE_ISP:
- eraseAddress = 0;
- msgLength = 2;
- // msgBuffer[1] = STATUS_CMD_OK;
- msgBuffer[1] = STATUS_CMD_FAILED; //* isue 543, return FAILED instead of OK
- break;
-
- case CMD_LOAD_ADDRESS:
- #if defined(RAMPZ)
- address = ( ((address_t)(msgBuffer[1])<<24)|((address_t)(msgBuffer[2])<<16)|((address_t)(msgBuffer[3])<<8)|(msgBuffer[4]) )<<1;
- #else
- address = ( ((msgBuffer[3])<<8)|(msgBuffer[4]) )<<1; //convert word to byte address
- #endif
- msgLength = 2;
- msgBuffer[1] = STATUS_CMD_OK;
- break;
-
- case CMD_PROGRAM_FLASH_ISP:
- case CMD_PROGRAM_EEPROM_ISP:
- {
- unsigned int size = ((msgBuffer[1])<<8) | msgBuffer[2];
- unsigned char *p = msgBuffer+10;
- unsigned int data;
- unsigned char highByte, lowByte;
- address_t tempaddress = address;
-
-
- if ( msgBuffer[0] == CMD_PROGRAM_FLASH_ISP )
- {
- // erase only main section (bootloader protection)
- if (eraseAddress < APP_END )
- {
- boot_page_erase(eraseAddress); // Perform page erase
- boot_spm_busy_wait(); // Wait until the memory is erased.
- eraseAddress += SPM_PAGESIZE; // point to next page to be erase
- }
-
- /* Write FLASH */
- do {
- lowByte = *p++;
- highByte = *p++;
-
- data = (highByte << 8) | lowByte;
- boot_page_fill(address,data);
-
- address = address + 2; // Select next word in memory
- size -= 2; // Reduce number of bytes to write by two
- } while (size); // Loop until all bytes written
-
- boot_page_write(tempaddress);
- boot_spm_busy_wait();
- boot_rww_enable(); // Re-enable the RWW section
- }
- else
- {
- //* issue 543, this should work, It has not been tested.
- uint16_t ii = address >> 1;
- /* write EEPROM */
- while (size) {
- eeprom_write_byte((uint8_t*)ii, *p++);
- address+=2; // Select next EEPROM byte
- ii++;
- size--;
- }
- }
- msgLength = 2;
- msgBuffer[1] = STATUS_CMD_OK;
- }
- break;
-
- case CMD_READ_FLASH_ISP:
- case CMD_READ_EEPROM_ISP:
- {
- unsigned int size = ((msgBuffer[1])<<8) | msgBuffer[2];
- unsigned char *p = msgBuffer+1;
- msgLength = size+3;
-
- *p++ = STATUS_CMD_OK;
- if (msgBuffer[0] == CMD_READ_FLASH_ISP )
- {
- unsigned int data;
-
- // Read FLASH
- do {
- //#if defined(RAMPZ)
- #if (FLASHEND > 0x10000)
- data = pgm_read_word_far(address);
- #else
- data = pgm_read_word_near(address);
- #endif
- *p++ = (unsigned char)data; //LSB
- *p++ = (unsigned char)(data >> 8); //MSB
- address += 2; // Select next word in memory
- size -= 2;
- }while (size);
- }
- else
- {
- /* Read EEPROM */
- do {
- EEARL = address; // Setup EEPROM address
- EEARH = ((address >> 8));
- address++; // Select next EEPROM byte
- EECR |= (1<<EERE); // Read EEPROM
- *p++ = EEDR; // Send EEPROM data
- size--;
- } while (size);
- }
- *p++ = STATUS_CMD_OK;
- }
- break;
-
- default:
- msgLength = 2;
- msgBuffer[1] = STATUS_CMD_FAILED;
- break;
- }
-
- /*
- * Now send answer message back
- */
- sendchar(MESSAGE_START);
- checksum = MESSAGE_START^0;
-
- sendchar(seqNum);
- checksum ^= seqNum;
-
- c = ((msgLength>>8)&0xFF);
- sendchar(c);
- checksum ^= c;
-
- c = msgLength&0x00FF;
- sendchar(c);
- checksum ^= c;
-
- sendchar(TOKEN);
- checksum ^= TOKEN;
-
- p = msgBuffer;
- while ( msgLength )
- {
- c = *p++;
- sendchar(c);
- checksum ^=c;
- msgLength--;
- }
- sendchar(checksum);
- seqNum++;
-
- #ifndef REMOVE_BOOTLOADER_LED
- //* <MLS> toggle the LED
- PROGLED_PORT ^= (1<<PROGLED_PIN); // active high LED ON
- #endif
-
- }
- }
-
-#ifdef _DEBUG_WITH_LEDS_
- //* this is for debugging it can be removed
- for (ii=0; ii<10; ii++)
- {
- PROGLED_PORT &= ~(1<<PROGLED_PIN); // turn LED off
- delay_ms(200);
- PROGLED_PORT |= (1<<PROGLED_PIN); // turn LED on
- delay_ms(200);
- }
- PROGLED_PORT &= ~(1<<PROGLED_PIN); // turn LED off
-#endif
-
-#ifdef _DEBUG_SERIAL_
- sendchar('j');
-// sendchar('u');
-// sendchar('m');
-// sendchar('p');
-// sendchar(' ');
-// sendchar('u');
-// sendchar('s');
-// sendchar('r');
- sendchar(0x0d);
- sendchar(0x0a);
-
- delay_ms(100);
-#endif
-
-
-#ifndef REMOVE_BOOTLOADER_LED
- PROGLED_DDR &= ~(1<<PROGLED_PIN); // set to default
- PROGLED_PORT &= ~(1<<PROGLED_PIN); // active low LED OFF
-// PROGLED_PORT |= (1<<PROGLED_PIN); // active high LED OFf
- delay_ms(100); // delay after exit
-#endif
-
-
- asm volatile ("nop"); // wait until port has changed
-
- /*
- * Now leave bootloader
- */
-
- UART_STATUS_REG &= 0xfd;
- boot_rww_enable(); // enable application section
-
-
- asm volatile(
- "clr r30 \n\t"
- "clr r31 \n\t"
- "ijmp \n\t"
- );
-// asm volatile ( "push r1" "\n\t" // Jump to Reset vector in Application Section
-// "push r1" "\n\t"
-// "ret" "\n\t"
-// ::);
-
- /*
- * Never return to stop GCC to generate exit return code
- * Actually we will never reach this point, but the compiler doesn't
- * understand this
- */
- for(;;);
-}
-
-/*
-base address = f800
-
-avrdude: Device signature = 0x1e9703
-avrdude: safemode: lfuse reads as FF
-avrdude: safemode: hfuse reads as DA
-avrdude: safemode: efuse reads as F5
-avrdude>
-
-
-base address = f000
-avrdude: Device signature = 0x1e9703
-avrdude: safemode: lfuse reads as FF
-avrdude: safemode: hfuse reads as D8
-avrdude: safemode: efuse reads as F5
-avrdude>
-*/
-
-//************************************************************************
-#ifdef ENABLE_MONITOR
-#include <math.h>
-
-unsigned long gRamIndex;
-unsigned long gFlashIndex;
-unsigned long gEepromIndex;
-
-
-#define true 1
-#define false 0
-
-#include "avr_cpunames.h"
-
-#ifndef _AVR_CPU_NAME_
- #error cpu name not defined
-#endif
-
-#ifdef _VECTORS_SIZE
- #define kInterruptVectorCount (_VECTORS_SIZE / 4)
-#else
- #define kInterruptVectorCount 23
-#endif
-
-
-void PrintDecInt(int theNumber, int digitCnt);
-
-#ifdef _AVR_CPU_NAME_
- const char gTextMsg_CPU_Name[] PROGMEM = _AVR_CPU_NAME_;
-#else
- const char gTextMsg_CPU_Name[] PROGMEM = "UNKNOWN";
-#endif
-
- const char gTextMsg_Explorer[] PROGMEM = "Arduino explorer stk500V2 by MLS";
- const char gTextMsg_Prompt[] PROGMEM = "Bootloader>";
- const char gTextMsg_HUH[] PROGMEM = "Huh?";
- const char gTextMsg_COMPILED_ON[] PROGMEM = "Compiled on = ";
- const char gTextMsg_CPU_Type[] PROGMEM = "CPU Type = ";
- const char gTextMsg_AVR_ARCH[] PROGMEM = "__AVR_ARCH__= ";
- const char gTextMsg_AVR_LIBC[] PROGMEM = "AVR LibC Ver= ";
- const char gTextMsg_GCC_VERSION[] PROGMEM = "GCC Version = ";
- const char gTextMsg_CPU_SIGNATURE[] PROGMEM = "CPU ID = ";
- const char gTextMsg_FUSE_BYTE_LOW[] PROGMEM = "Low fuse = ";
- const char gTextMsg_FUSE_BYTE_HIGH[] PROGMEM = "High fuse = ";
- const char gTextMsg_FUSE_BYTE_EXT[] PROGMEM = "Ext fuse = ";
- const char gTextMsg_FUSE_BYTE_LOCK[] PROGMEM = "Lock fuse = ";
- const char gTextMsg_GCC_DATE_STR[] PROGMEM = __DATE__;
- const char gTextMsg_AVR_LIBC_VER_STR[] PROGMEM = __AVR_LIBC_VERSION_STRING__;
- const char gTextMsg_GCC_VERSION_STR[] PROGMEM = __VERSION__;
- const char gTextMsg_VECTOR_HEADER[] PROGMEM = "V# ADDR op code instruction addr Interrupt";
- const char gTextMsg_noVector[] PROGMEM = "no vector";
- const char gTextMsg_rjmp[] PROGMEM = "rjmp ";
- const char gTextMsg_jmp[] PROGMEM = "jmp ";
- const char gTextMsg_WHAT_PORT[] PROGMEM = "What port:";
- const char gTextMsg_PortNotSupported[] PROGMEM = "Port not supported";
- const char gTextMsg_MustBeLetter[] PROGMEM = "Must be a letter";
- const char gTextMsg_SPACE[] PROGMEM = " ";
- const char gTextMsg_WriteToEEprom[] PROGMEM = "Writting EE";
- const char gTextMsg_ReadingEEprom[] PROGMEM = "Reading EE";
- const char gTextMsg_EEPROMerrorCnt[] PROGMEM = "EE err cnt=";
- const char gTextMsg_PORT[] PROGMEM = "PORT";
-
-
-//************************************************************************
-//* Help messages
- const char gTextMsg_HELP_MSG_0[] PROGMEM = "0=Zero addr";
- const char gTextMsg_HELP_MSG_QM[] PROGMEM = "?=CPU stats";
- const char gTextMsg_HELP_MSG_AT[] PROGMEM = "@=EEPROM test";
- const char gTextMsg_HELP_MSG_B[] PROGMEM = "B=Blink LED";
- const char gTextMsg_HELP_MSG_E[] PROGMEM = "E=Dump EEPROM";
- const char gTextMsg_HELP_MSG_F[] PROGMEM = "F=Dump FLASH";
- const char gTextMsg_HELP_MSG_H[] PROGMEM = "H=Help";
- const char gTextMsg_HELP_MSG_L[] PROGMEM = "L=List I/O Ports";
-// const char gTextMsg_HELP_MSG_Q[] PROGMEM = "Q=Quit & jump to user pgm";
- const char gTextMsg_HELP_MSG_Q[] PROGMEM = "Q=Quit";
- const char gTextMsg_HELP_MSG_R[] PROGMEM = "R=Dump RAM";
- const char gTextMsg_HELP_MSG_V[] PROGMEM = "V=show interrupt Vectors";
- const char gTextMsg_HELP_MSG_Y[] PROGMEM = "Y=Port blink";
-
- const char gTextMsg_END[] PROGMEM = "*";
-
-
-//************************************************************************
-void PrintFromPROGMEM(const void *dataPtr, unsigned char offset)
-{
-char theChar;
-
- dataPtr += offset;
-
- do {
- #if (FLASHEND > 0x10000)
- theChar = pgm_read_byte_far((uint16_t)dataPtr++);
- #else
- theChar = pgm_read_byte_near((uint16_t)dataPtr++);
- #endif
- if (theChar != 0)
- {
- sendchar(theChar);
- }
- } while (theChar != 0);
-}
-
-//************************************************************************
-void PrintNewLine(void)
-{
- sendchar(0x0d);
- sendchar(0x0a);
-}
-
-
-//************************************************************************
-void PrintFromPROGMEMln(const void *dataPtr, unsigned char offset)
-{
- PrintFromPROGMEM(dataPtr, offset);
-
- PrintNewLine();
-}
-
-
-//************************************************************************
-void PrintString(char *textString)
-{
-char theChar;
-int ii;
-
- theChar = 1;
- ii = 0;
- while (theChar != 0)
- {
- theChar = textString[ii];
- if (theChar != 0)
- {
- sendchar(theChar);
- }
- ii++;
- }
-}
-
-//************************************************************************
-void PrintHexByte(unsigned char theByte)
-{
-char theChar;
-
- theChar = 0x30 + ((theByte >> 4) & 0x0f);
- if (theChar > 0x39)
- {
- theChar += 7;
- }
- sendchar(theChar );
-
- theChar = 0x30 + (theByte & 0x0f);
- if (theChar > 0x39)
- {
- theChar += 7;
- }
- sendchar(theChar );
-}
-
-//************************************************************************
-void PrintDecInt(int theNumber, int digitCnt)
-{
-int theChar;
-int myNumber;
-
- myNumber = theNumber;
-
- if ((myNumber > 100) || (digitCnt >= 3))
- {
- theChar = 0x30 + myNumber / 100;
- sendchar(theChar );
- }
-
- if ((myNumber > 10) || (digitCnt >= 2))
- {
- theChar = 0x30 + ((myNumber % 100) / 10 );
- sendchar(theChar );
- }
- theChar = 0x30 + (myNumber % 10);
- sendchar(theChar );
-}
-
-
-
-
-//************************************************************************
-static void PrintCPUstats(void)
-{
-unsigned char fuseByte;
-
- PrintFromPROGMEMln(gTextMsg_Explorer, 0);
-
- PrintFromPROGMEM(gTextMsg_COMPILED_ON, 0);
- PrintFromPROGMEMln(gTextMsg_GCC_DATE_STR, 0);
-
- PrintFromPROGMEM(gTextMsg_CPU_Type, 0);
- PrintFromPROGMEMln(gTextMsg_CPU_Name, 0);
-
- PrintFromPROGMEM(gTextMsg_AVR_ARCH, 0);
- PrintDecInt(__AVR_ARCH__, 1);
- PrintNewLine();
-
- PrintFromPROGMEM(gTextMsg_GCC_VERSION, 0);
- PrintFromPROGMEMln(gTextMsg_GCC_VERSION_STR, 0);
-
- //* these can be found in avr/version.h
- PrintFromPROGMEM(gTextMsg_AVR_LIBC, 0);
- PrintFromPROGMEMln(gTextMsg_AVR_LIBC_VER_STR, 0);
-
-#if defined(SIGNATURE_0)
- PrintFromPROGMEM(gTextMsg_CPU_SIGNATURE, 0);
- //* these can be found in avr/iomxxx.h
- PrintHexByte(SIGNATURE_0);
- PrintHexByte(SIGNATURE_1);
- PrintHexByte(SIGNATURE_2);
- PrintNewLine();
-#endif
-
-
-#if defined(GET_LOW_FUSE_BITS)
- //* fuse settings
- PrintFromPROGMEM(gTextMsg_FUSE_BYTE_LOW, 0);
- fuseByte = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS);
- PrintHexByte(fuseByte);
- PrintNewLine();
-
- PrintFromPROGMEM(gTextMsg_FUSE_BYTE_HIGH, 0);
- fuseByte = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS);
- PrintHexByte(fuseByte);
- PrintNewLine();
-
- PrintFromPROGMEM(gTextMsg_FUSE_BYTE_EXT, 0);
- fuseByte = boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS);
- PrintHexByte(fuseByte);
- PrintNewLine();
-
- PrintFromPROGMEM(gTextMsg_FUSE_BYTE_LOCK, 0);
- fuseByte = boot_lock_fuse_bits_get(GET_LOCK_BITS);
- PrintHexByte(fuseByte);
- PrintNewLine();
-
-#endif
-
-}
-
-
-//************************************************************************
-static void BlinkLED(void)
-{
- PROGLED_DDR |= (1<<PROGLED_PIN);
- PROGLED_PORT |= (1<<PROGLED_PIN); // active high LED ON
-
- while (!Serial_Available())
- {
- PROGLED_PORT &= ~(1<<PROGLED_PIN); // turn LED off
- delay_ms(100);
- PROGLED_PORT |= (1<<PROGLED_PIN); // turn LED on
- delay_ms(100);
- }
- recchar(); // get the char out of the buffer
-}
-
-enum
-{
- kDUMP_FLASH = 0,
- kDUMP_EEPROM,
- kDUMP_RAM
-};
-
-//************************************************************************
-static void DumpHex(unsigned char dumpWhat, unsigned long startAddress, unsigned char numRows)
-{
-unsigned long myAddressPointer;
-uint8_t ii;
-unsigned char theValue;
-char asciiDump[18];
-unsigned char *ramPtr;
-
-
- ramPtr = 0;
- theValue = 0;
- myAddressPointer = startAddress;
- while (numRows > 0)
- {
- if (myAddressPointer > 0x10000)
- {
- PrintHexByte((myAddressPointer >> 16) & 0x00ff);
- }
- PrintHexByte((myAddressPointer >> 8) & 0x00ff);
- PrintHexByte(myAddressPointer & 0x00ff);
- sendchar(0x20);
- sendchar('-');
- sendchar(0x20);
-
- asciiDump[0] = 0;
- for (ii=0; ii<16; ii++)
- {
- switch(dumpWhat)
- {
- case kDUMP_FLASH:
- #if (FLASHEND > 0x10000)
- theValue = pgm_read_byte_far(myAddressPointer);
- #else
- theValue = pgm_read_byte_near(myAddressPointer);
- #endif
- break;
-
- case kDUMP_EEPROM:
- theValue = eeprom_read_byte((uint8_t *)(uint16_t)myAddressPointer);
- break;
-
- case kDUMP_RAM:
- theValue = ramPtr[myAddressPointer];
- break;
-
- }
- PrintHexByte(theValue);
- sendchar(0x20);
- if ((theValue >= 0x20) && (theValue < 0x7f))
- {
- asciiDump[ii % 16] = theValue;
- }
- else
- {
- asciiDump[ii % 16] = '.';
- }
-
- myAddressPointer++;
- }
- asciiDump[16] = 0;
- PrintString(asciiDump);
- PrintNewLine();
-
- numRows--;
- }
-}
-
-
-
-//************************************************************************
-//* returns amount of extended memory
-static void EEPROMtest(void)
-{
-int ii;
-char theChar;
-char theEEPROMchar;
-int errorCount;
-
- PrintFromPROGMEMln(gTextMsg_WriteToEEprom, 0);
- PrintNewLine();
- ii = 0;
-#if (FLASHEND > 0x10000)
- while (((theChar = pgm_read_byte_far(((uint16_t)gTextMsg_Explorer) + ii)) != '*') && (ii < 512))
-#else
- while (((theChar = pgm_read_byte_near(((uint16_t)gTextMsg_Explorer) + ii)) != '*') && (ii < 512))
-#endif
- {
- eeprom_write_byte((uint8_t *)ii, theChar);
- if (theChar == 0)
- {
- PrintFromPROGMEM(gTextMsg_SPACE, 0);
- }
- else
- {
- sendchar(theChar);
- }
- ii++;
- }
-
- //* no go back through and test
- PrintNewLine();
- PrintNewLine();
- PrintFromPROGMEMln(gTextMsg_ReadingEEprom, 0);
- PrintNewLine();
- errorCount = 0;
- ii = 0;
-#if (FLASHEND > 0x10000)
- while (((theChar = pgm_read_byte_far((uint16_t)gTextMsg_Explorer + ii)) != '*') && (ii < 512))
-#else
- while (((theChar = pgm_read_byte_near((uint16_t)gTextMsg_Explorer + ii)) != '*') && (ii < 512))
-#endif
- {
- theEEPROMchar = eeprom_read_byte((uint8_t *)ii);
- if (theEEPROMchar == 0)
- {
- PrintFromPROGMEM(gTextMsg_SPACE, 0);
- }
- else
- {
- sendchar(theEEPROMchar);
- }
- if (theEEPROMchar != theChar)
- {
- errorCount++;
- }
- ii++;
- }
- PrintNewLine();
- PrintNewLine();
- PrintFromPROGMEM(gTextMsg_EEPROMerrorCnt, 0);
- PrintDecInt(errorCount, 1);
- PrintNewLine();
- PrintNewLine();
-
- gEepromIndex = 0; //* set index back to zero for next eeprom dump
-
-}
-
-
-
-#if (FLASHEND > 0x08000)
-//* this includes the interrupt names for the monitor portion. There is no longer enough
-//* memory to include this
-// #include "avrinterruptnames.h"
-// #ifndef _INTERRUPT_NAMES_DEFINED_
-// #warning Interrupt vectors not defined
-// #endif
-#endif
-
-//************************************************************************
-static void VectorDisplay(void)
-{
-unsigned long byte1;
-unsigned long byte2;
-unsigned long byte3;
-unsigned long byte4;
-unsigned long word1;
-unsigned long word2;
-int vectorIndex;
-unsigned long myMemoryPtr;
-unsigned long wordMemoryAddress;
-unsigned long realitiveAddr;
-unsigned long myFullAddress;
-unsigned long absoluteAddr;
-#if defined(_INTERRUPT_NAMES_DEFINED_)
- long stringPointer;
-#endif
-
- myMemoryPtr = 0;
- vectorIndex = 0;
- PrintFromPROGMEMln(gTextMsg_CPU_Name, 0);
- PrintFromPROGMEMln(gTextMsg_VECTOR_HEADER, 0);
- // V# ADDR op code
- // 1 - 0000 = C3 BB 00 00 rjmp 03BB >000776 RESET
- while (vectorIndex < kInterruptVectorCount)
- {
- wordMemoryAddress = myMemoryPtr / 2;
- // 01 - 0000 = 12 34
- PrintDecInt(vectorIndex + 1, 2);
- sendchar(0x20);
- sendchar('-');
- sendchar(0x20);
- PrintHexByte((wordMemoryAddress >> 8) & 0x00ff);
- PrintHexByte((wordMemoryAddress) & 0x00ff);
- sendchar(0x20);
- sendchar('=');
- sendchar(0x20);
-
-
- //* the AVR is LITTLE ENDIAN, swap the byte order
- #if (FLASHEND > 0x10000)
- byte1 = pgm_read_byte_far(myMemoryPtr++);
- byte2 = pgm_read_byte_far(myMemoryPtr++);
- byte3 = pgm_read_byte_far(myMemoryPtr++);
- byte4 = pgm_read_byte_far(myMemoryPtr++);
- #else
- byte1 = pgm_read_byte_near(myMemoryPtr++);
- byte2 = pgm_read_byte_near(myMemoryPtr++);
- byte3 = pgm_read_byte_near(myMemoryPtr++);
- byte4 = pgm_read_byte_near(myMemoryPtr++);
- #endif
- word1 = (byte2 << 8) + byte1;
- word2 = (byte4 << 8) + byte3;
-
-
- PrintHexByte(byte2);
- sendchar(0x20);
- PrintHexByte(byte1);
- sendchar(0x20);
- PrintHexByte(byte4);
- sendchar(0x20);
- PrintHexByte(byte3);
- sendchar(0x20);
-
- if (word1 == 0xffff)
- {
- PrintFromPROGMEM(gTextMsg_noVector, 0);
- }
- else if ((word1 & 0xc000) == 0xc000)
- {
- //* rjmp instruction
- realitiveAddr = word1 & 0x3FFF;
- absoluteAddr = wordMemoryAddress + realitiveAddr; //* add the offset to the current address
- absoluteAddr = absoluteAddr << 1; //* multiply by 2 for byte address
-
- PrintFromPROGMEM(gTextMsg_rjmp, 0);
- PrintHexByte((realitiveAddr >> 8) & 0x00ff);
- PrintHexByte((realitiveAddr) & 0x00ff);
- sendchar(0x20);
- sendchar('>');
- PrintHexByte((absoluteAddr >> 16) & 0x00ff);
- PrintHexByte((absoluteAddr >> 8) & 0x00ff);
- PrintHexByte((absoluteAddr) & 0x00ff);
-
- }
- else if ((word1 & 0xfE0E) == 0x940c)
- {
- //* jmp instruction, this is REALLY complicated, refer to the instruction manual (JMP)
- myFullAddress = ((byte1 & 0x01) << 16) +
- ((byte1 & 0xf0) << 17) +
- ((byte2 & 0x01) << 21) +
- word2;
-
- absoluteAddr = myFullAddress << 1;
-
- PrintFromPROGMEM(gTextMsg_jmp, 0);
- PrintHexByte((myFullAddress >> 16) & 0x00ff);
- PrintHexByte((myFullAddress >> 8) & 0x00ff);
- PrintHexByte((myFullAddress) & 0x00ff);
- sendchar(0x20);
- sendchar('>');
- PrintHexByte((absoluteAddr >> 16) & 0x00ff);
- PrintHexByte((absoluteAddr >> 8) & 0x00ff);
- PrintHexByte((absoluteAddr) & 0x00ff);
- }
-
- #if defined(_INTERRUPT_NAMES_DEFINED_)
- sendchar(0x20);
- #if (FLASHEND > 0x10000)
- stringPointer = pgm_read_word_far(&(gInterruptNameTable[vectorIndex]));
- #else
- stringPointer = pgm_read_word_near(&(gInterruptNameTable[vectorIndex]));
- #endif
- PrintFromPROGMEM((char *)stringPointer, 0);
- #endif
- PrintNewLine();
-
- vectorIndex++;
- }
-}
-
-//************************************************************************
-static void PrintAvailablePort(char thePortLetter)
-{
- PrintFromPROGMEM(gTextMsg_PORT, 0);
- sendchar(thePortLetter);
- PrintNewLine();
-}
-
-//************************************************************************
-static void ListAvailablePorts(void)
-{
-
-#ifdef DDRA
- PrintAvailablePort('A');
-#endif
-
-#ifdef DDRB
- PrintAvailablePort('B');
-#endif
-
-#ifdef DDRC
- PrintAvailablePort('C');
-#endif
-
-#ifdef DDRD
- PrintAvailablePort('D');
-#endif
-
-#ifdef DDRE
- PrintAvailablePort('E');
-#endif
-
-#ifdef DDRF
- PrintAvailablePort('F');
-#endif
-
-#ifdef DDRG
- PrintAvailablePort('G');
-#endif
-
-#ifdef DDRH
- PrintAvailablePort('H');
-#endif
-
-#ifdef DDRI
- PrintAvailablePort('I');
-#endif
-
-#ifdef DDRJ
- PrintAvailablePort('J');
-#endif
-
-#ifdef DDRK
- PrintAvailablePort('K');
-#endif
-
-#ifdef DDRL
- PrintAvailablePort('L');
-#endif
-
-}
-
-//************************************************************************
-static void AVR_PortOutput(void)
-{
-char portLetter;
-char getCharFlag;
-
- PrintFromPROGMEM(gTextMsg_WHAT_PORT, 0);
-
- portLetter = recchar();
- portLetter = portLetter & 0x5f;
- sendchar(portLetter);
- PrintNewLine();
-
- if ((portLetter >= 'A') && (portLetter <= 'Z'))
- {
- getCharFlag = true;
- switch(portLetter)
- {
- #ifdef DDRA
- case 'A':
- DDRA = 0xff;
- while (!Serial_Available())
- {
- PORTA ^= 0xff;
- delay_ms(200);
- }
- PORTA = 0;
- break;
- #endif
-
- #ifdef DDRB
- case 'B':
- DDRB = 0xff;
- while (!Serial_Available())
- {
- PORTB ^= 0xff;
- delay_ms(200);
- }
- PORTB = 0;
- break;
- #endif
-
- #ifdef DDRC
- case 'C':
- DDRC = 0xff;
- while (!Serial_Available())
- {
- PORTC ^= 0xff;
- delay_ms(200);
- }
- PORTC = 0;
- break;
- #endif
-
- #ifdef DDRD
- case 'D':
- DDRD = 0xff;
- while (!Serial_Available())
- {
- PORTD ^= 0xff;
- delay_ms(200);
- }
- PORTD = 0;
- break;
- #endif
-
- #ifdef DDRE
- case 'E':
- DDRE = 0xff;
- while (!Serial_Available())
- {
- PORTE ^= 0xff;
- delay_ms(200);
- }
- PORTE = 0;
- break;
- #endif
-
- #ifdef DDRF
- case 'F':
- DDRF = 0xff;
- while (!Serial_Available())
- {
- PORTF ^= 0xff;
- delay_ms(200);
- }
- PORTF = 0;
- break;
- #endif
-
- #ifdef DDRG
- case 'G':
- DDRG = 0xff;
- while (!Serial_Available())
- {
- PORTG ^= 0xff;
- delay_ms(200);
- }
- PORTG = 0;
- break;
- #endif
-
- #ifdef DDRH
- case 'H':
- DDRH = 0xff;
- while (!Serial_Available())
- {
- PORTH ^= 0xff;
- delay_ms(200);
- }
- PORTH = 0;
- break;
- #endif
-
- #ifdef DDRI
- case 'I':
- DDRI = 0xff;
- while (!Serial_Available())
- {
- PORTI ^= 0xff;
- delay_ms(200);
- }
- PORTI = 0;
- break;
- #endif
-
- #ifdef DDRJ
- case 'J':
- DDRJ = 0xff;
- while (!Serial_Available())
- {
- PORTJ ^= 0xff;
- delay_ms(200);
- }
- PORTJ = 0;
- break;
- #endif
-
- #ifdef DDRK
- case 'K':
- DDRK = 0xff;
- while (!Serial_Available())
- {
- PORTK ^= 0xff;
- delay_ms(200);
- }
- PORTK = 0;
- break;
- #endif
-
- #ifdef DDRL
- case 'L':
- DDRL = 0xff;
- while (!Serial_Available())
- {
- PORTL ^= 0xff;
- delay_ms(200);
- }
- PORTL = 0;
- break;
- #endif
-
- default:
- PrintFromPROGMEMln(gTextMsg_PortNotSupported, 0);
- getCharFlag = false;
- break;
- }
- if (getCharFlag)
- {
- recchar();
- }
- }
- else
- {
- PrintFromPROGMEMln(gTextMsg_MustBeLetter, 0);
- }
-}
-
-
-//*******************************************************************
-static void PrintHelp(void)
-{
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_0, 0);
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_QM, 0);
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_AT, 0);
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_B, 0);
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_E, 0);
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_F, 0);
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_H, 0);
-
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_L, 0);
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_Q, 0);
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_R, 0);
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_V, 0);
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_Y, 0);
-}
-
-//************************************************************************
-static void RunMonitor(void)
-{
-char keepGoing;
-unsigned char theChar;
-int ii, jj;
-
- for (ii=0; ii<5; ii++)
- {
- for (jj=0; jj<25; jj++)
- {
- sendchar('!');
- }
- PrintNewLine();
- }
-
- gRamIndex = 0;
- gFlashIndex = 0;
- gEepromIndex = 0;
-
- PrintFromPROGMEMln(gTextMsg_Explorer, 0);
-
- keepGoing = 1;
- while (keepGoing)
- {
- PrintFromPROGMEM(gTextMsg_Prompt, 0);
- theChar = recchar();
- if (theChar >= 0x60)
- {
- theChar = theChar & 0x5F;
- }
-
- if (theChar >= 0x20)
- {
- sendchar(theChar);
- sendchar(0x20);
- }
-
- switch(theChar)
- {
- case '0':
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_0, 2);
- gFlashIndex = 0;
- gRamIndex = 0;
- gEepromIndex = 0;
- break;
-
- case '?':
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_QM, 2);
- PrintCPUstats();
- break;
-
- case '@':
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_AT, 2);
- EEPROMtest();
- break;
-
- case 'B':
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_B, 2);
- BlinkLED();
- break;
-
- case 'E':
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_E, 2);
- DumpHex(kDUMP_EEPROM, gEepromIndex, 16);
- gEepromIndex += 256;
- if (gEepromIndex > E2END)
- {
- gEepromIndex = 0;
- }
- break;
-
- case 'F':
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_F, 2);
- DumpHex(kDUMP_FLASH, gFlashIndex, 16);
- gFlashIndex += 256;
- break;
-
- case 'H':
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_H, 2);
- PrintHelp();
- break;
-
- case 'L':
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_L, 2);
- ListAvailablePorts();
- break;
-
- case 'Q':
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_Q, 2);
- keepGoing = false;
- break;
-
- case 'R':
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_R, 2);
- DumpHex(kDUMP_RAM, gRamIndex, 16);
- gRamIndex += 256;
- break;
-
- case 'V':
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_V, 2);
- VectorDisplay();
- break;
-
- case 'Y':
- PrintFromPROGMEMln(gTextMsg_HELP_MSG_Y, 2);
- AVR_PortOutput();
- break;
-
- default:
- PrintFromPROGMEMln(gTextMsg_HUH, 0);
- break;
- }
- }
-}
-
-#endif
-
diff --git a/bootloaders/stk500v2/stk500boot.ppg b/bootloaders/stk500v2/stk500boot.ppg
deleted file mode 100644
index a8929d7..0000000
--- a/bootloaders/stk500v2/stk500boot.ppg
+++ /dev/null
@@ -1 +0,0 @@
-<Workspace name="Bootloader"><Project path="STK500V2.pnproj"></Project></Workspace> \ No newline at end of file
diff --git a/bootloaders/stk500v2/stk500boot_v2_mega2560.hex b/bootloaders/stk500v2/stk500boot_v2_mega2560.hex
deleted file mode 100644
index 68d2e18..0000000
--- a/bootloaders/stk500v2/stk500boot_v2_mega2560.hex
+++ /dev/null
@@ -1,469 +0,0 @@
-:020000023000CC
-:10E000000D9489F10D94B2F10D94B2F10D94B2F129
-:10E010000D94B2F10D94B2F10D94B2F10D94B2F1F0
-:10E020000D94B2F10D94B2F10D94B2F10D94B2F1E0
-:10E030000D94B2F10D94B2F10D94B2F10D94B2F1D0
-:10E040000D94B2F10D94B2F10D94B2F10D94B2F1C0
-:10E050000D94B2F10D94B2F10D94B2F10D94B2F1B0
-:10E060000D94B2F10D94B2F10D94B2F10D94B2F1A0
-:10E070000D94B2F10D94B2F10D94B2F10D94B2F190
-:10E080000D94B2F10D94B2F10D94B2F10D94B2F180
-:10E090000D94B2F10D94B2F10D94B2F10D94B2F170
-:10E0A0000D94B2F10D94B2F10D94B2F10D94B2F160
-:10E0B0000D94B2F10D94B2F10D94B2F10D94B2F150
-:10E0C0000D94B2F10D94B2F10D94B2F10D94B2F140
-:10E0D0000D94B2F10D94B2F10D94B2F10D94B2F130
-:10E0E0000D94B2F141546D656761323536300041AF
-:10E0F000726475696E6F206578706C6F72657220DE
-:10E1000073746B3530305632206279204D4C530099
-:10E11000426F6F746C6F616465723E004875683F52
-:10E1200000436F6D70696C6564206F6E203D200048
-:10E130004350552054797065202020203D20005FF9
-:10E140005F4156525F415243485F5F3D2000415658
-:10E1500052204C696243205665723D20004743437C
-:10E160002056657273696F6E203D20004350552024
-:10E1700049442020202020203D20004C6F7720663D
-:10E18000757365202020203D20004869676820665F
-:10E190007573652020203D200045787420667573D6
-:10E1A00065202020203D20004C6F636B2066757336
-:10E1B000652020203D20004D617220203720323024
-:10E1C000313300312E362E3800342E332E350056A2
-:10E1D00023202020414444522020206F7020636F70
-:10E1E00064652020202020696E73747275637469E1
-:10E1F0006F6E2061646472202020496E74657272B3
-:10E20000757074006E6F20766563746F7200726A49
-:10E210006D702020006A6D70200057686174207056
-:10E220006F72743A00506F7274206E6F7420737541
-:10E2300070706F72746564004D7573742062652030
-:10E2400061206C6574746572002000577269747483
-:10E25000696E672045450052656164696E672045B7
-:10E26000450045452065727220636E743D00504F35
-:10E27000525400303D5A65726F2061646472003FF1
-:10E280003D43505520737461747300403D454550C3
-:10E29000524F4D207465737400423D426C696E6B41
-:10E2A000204C454400453D44756D70204545505215
-:10E2B0004F4D00463D44756D7020464C415348001B
-:10E2C000483D48656C70004C3D4C69737420492F83
-:10E2D0004F20506F72747300513D51756974005234
-:10E2E0003D44756D702052414D00563D73686F7707
-:10E2F00020696E7465727275707420566563746FF0
-:10E30000727300593D506F727420626C696E6B00BD
-:10E310002A0011241FBECFEFD1E2DEBFCDBF01E046
-:10E320000CBF12E0A0E0B2E0EEE1FDEF03E00BBFB6
-:10E3300002C007900D92A030B107D9F712E0A0E01B
-:10E34000B2E001C01D92AE30B107E1F70F9460F367
-:10E350000D948DFE01E20EBF0FEF0DBF11241FBE05
-:10E360000D9460F30D9400F020E030E040ED57E0B4
-:10E3700005C0FA013197F1F72F5F3F4F2817390792
-:10E38000C0F308959C01260F311DC901A0E0B0E043
-:10E390002F5F3F4FABBFFC018791882361F08093D3
-:10E3A000C6008091C00086FFFCCF8091C0008064D1
-:10E3B0008093C000EACF08958DE08093C6008091DD
-:10E3C000C00086FFFCCF8091C00080648093C000B5
-:10E3D0008AE08093C6008091C00086FFFCCF8091C8
-:10E3E000C00080648093C00008950F94C2F10F9420
-:10E3F000DCF10895FC019081992359F09093C600B7
-:10E400008091C00086FFFCCF8091C0008064809323
-:10E41000C0003196992379F70895282F982F929567
-:10E420009F70892F805D8A3308F0895F8093C600D2
-:10E430008091C00086FFFCCF8091C00080648093F3
-:10E44000C000822F8F70982F905D9A3308F0995FEB
-:10E450009093C6008091C00086FFFCCF8091C000E1
-:10E4600080648093C00008959C01FB01853691056E
-:10E470001CF46330710594F0C90164E670E00F94F8
-:10E480002EFE605D7F4F6093C6008091C00086FFC6
-:10E49000FCCF8091C00080648093C0002B30310598
-:10E4A00014F43297B4F0C90164E670E00F942EFEC4
-:10E4B0006AE070E00F942EFE605D7F4F6093C600AF
-:10E4C0008091C00086FFFCCF8091C0008064809363
-:10E4D000C000C9016AE070E00F942EFEC0968093E0
-:10E4E000C6008091C00086FFFCCF8091C000806490
-:10E4F0008093C00008951F93182F8EE692EE60E07F
-:10E500000F94C2F11093C6008091C00086FFFCCF2B
-:10E510008091C00080648093C0000F94DCF11F9153
-:10E5200008952F923F924F925F926F927F928F92B7
-:10E530009F92AF92BF92CF92DF92EF92FF920F9392
-:10E540001F93DF93CF93CDB7DEB762970FB6F894E2
-:10E55000DEBF0FBECDBF382E622ECA01DB015C01CB
-:10E560006D01772420E2222E2E010894411C511CBB
-:10E570008BC081E0A81680E0B80681E0C80680E084
-:10E58000D80628F0C601AA27BB270F940DF2BB2797
-:10E59000AD2D9C2D8B2D0F940DF28A2D0F940DF225
-:10E5A0002092C6008091C00086FFFCCF8091C00001
-:10E5B00080648093C0009DE29093C6008091C0006B
-:10E5C00086FFFCCF8091C00080648093C0002092C1
-:10E5D000C6008091C00086FFFCCF8091C00080649F
-:10E5E0008093C00019828601750188249924A1E0D6
-:10E5F0003A1651F03A1620F0B2E03B1661F409C029
-:10E600000BBFF701779007C0C7010F9477FE782EF4
-:10E6100002C0F7017080872D0F940DF22092C60082
-:10E620008091C00086FFFCCF8091C0008064809301
-:10E63000C000872D8052F401EF70F0708F3520F408
-:10E64000E40DF51D708204C0E40DF51D8EE280839B
-:10E650000894E11CF11C011D111D0894811C911CE2
-:10E6600090E18916910409F0C2CF80E190E0A0E02A
-:10E67000B0E0A80EB91ECA1EDB1E198AC2010F9493
-:10E68000FAF10F94DCF16A94662009F072CF629679
-:10E690000FB6F894DEBF0FBECDBFCF91DF911F91B3
-:10E6A0000F91FF90EF90DF90CF90BF90AF909F9031
-:10E6B0008F907F906F905F904F903F902F90089534
-:10E6C0002F923F924F925F926F927F928F929F9282
-:10E6D000AF92BF92CF92DF92EF92FF920F931F9370
-:10E6E000DF93CF93CDB7DEB7CD53D1400FB6F894BB
-:10E6F000DEBF0FBECDBF01E20EBF0FEF0DBF94B75F
-:10E70000F894A89514BE80916000886180936000A1
-:10E7100010926000789493FF05C0E0910002F091A0
-:10E7200001021995279A2F9A8091C00082608093E8
-:10E73000C00080E18093C40088E18093C1000000A4
-:10E74000EE24FF24870144E0A42EB12CCC24DD2448
-:10E7500024C0C5010197F1F70894E11CF11C011DCB
-:10E76000111D21E2E2162EE4F20620E0020720E06D
-:10E77000120718F031E0C32ED12CC801B70127ECE5
-:10E780003BE140E050E00F9441FE611571058105C9
-:10E79000910519F485B1805885B98091C00087FD35
-:10E7A00003C0C114D104A9F2A6014F5F5F4FC25E3E
-:10E7B000DE4F59834883CE51D140C25EDE4F8881FF
-:10E7C0009981CE51D140019711F00D9410FEC05D9A
-:10E7D000DE4F19821882C053D14060E0C15DDE4F28
-:10E7E0001882CF52D14088249924C35DDE4F19820C
-:10E7F0001882CD52D140C05EDE4F188219821A8233
-:10E800001B82C052D140CE5CDE4F188219821A8220
-:10E810001B82C253D140EE24FF2487010BBFF701B6
-:10E8200007911691C45CDE4F19830883CC53D14005
-:10E830000D940BFEC25EDE4F28813981CE51D1404E
-:10E840002130310509F52091C600C25EDE4F1982E4
-:10E850001882CE51D14022C02F5F3F4F4F4F5F4FA4
-:10E86000213082E138078AE7480780E0580780F0C6
-:10E87000C45CDE4FE881F981CC53D140EF5FFF4F9C
-:10E8800019F0EE27FF27099420E030E040E050E047
-:10E890008091C00087FFE0CF2091C600C35DDE4FAE
-:10E8A00048815981CD52D1404F5F5F4FC35DDE4FEC
-:10E8B00059834883CD52D140213209F063C64A3092
-:10E8C000510508F05FC60894811C911C53E0851621
-:10E8D000910409F059C600E010E018C081E280936D
-:10E8E000C6008091C00086FFFCCF8091C00080648C
-:10E8F0008093C0002F5F3F4F2931310579F70F9486
-:10E90000DCF10F5F1F4F0530110519F020E030E0FA
-:10E91000E5CF10920A0210920B0210920C02109294
-:10E920000D02109206021092070210920802109235
-:10E930000902109202021092030210920402109235
-:10E9400005028FEE90EE60E00F94F5F180E191EE1C
-:10E9500060E00F94C2F18091C00087FFFCCF9091DE
-:10E96000C600903608F09F759032B8F09093C600BC
-:10E970008091C00086FFFCCF8091C00080648093AE
-:10E98000C000A0E2A093C6008091C00086FFFCCF2B
-:10E990008091C00080648093C000983409F4D7C18E
-:10E9A0009934B8F4923409F459C1933458F490333B
-:10E9B00019F1903308F4E3C59F33A1F1903409F0C5
-:10E9C000DEC5BDC0953409F470C1963409F0D7C5D1
-:10E9D00098C1923509F42BC2933538F49C3409F46C
-:10E9E000F5C1913509F0CBC518C2963509F445C279
-:10E9F000993509F0C4C567C483E792EE62E00F94CD
-:10EA0000F5F110920602109207021092080210927D
-:10EA1000090210920A0210920B0210920C0210923C
-:10EA20000D0213C18FE792EE62E00F94F5F18FEEC5
-:10EA300090EE60E00F94F5F181E291EE60E00F94CA
-:10EA4000C2F187EB91EE60E00F94F5F180E391EE77
-:10EA500060E00F94C2F184EE90EE60E00F94F5F167
-:10EA60008FE391EE60E00F94C2F186E090E061E008
-:10EA700070E00F9434F20F94DCF18DE591EE60E0DC
-:10EA80000F94C2F189EC91EE60E00F94F5F18EE401
-:10EA900091EE60E00F94C2F183EC91EE60E00F9490
-:10EAA000F5F18CE691EE60E00F94C2F18EE10F94E7
-:10EAB0000DF288E90F940DF281E00F940DF20F949E
-:10EAC000DCF18BE791EE60E00F94C2F119E0E0E039
-:10EAD000F0E010935700E4918E2F0F940DF20F94F5
-:10EAE000DCF18AE891EE60E00F94C2F1E3E0F0E03F
-:10EAF00010935700E4918E2F0F940DF20F94DCF1D8
-:10EB000089E991EE60E00F94C2F1E2E0F0E0109349
-:10EB10005700E4918E2F0F940DF20F94DCF188EAE8
-:10EB200091EE60E00F94C2F1E1E0F0E01093570045
-:10EB30001491812F0F940DF20F94DCF107CF8BE825
-:10EB400092EE62E00F94F5F18BE492EE60E00F94A8
-:10EB5000F5F10F94DCF100E010E019C0C8016F2D51
-:10EB60000F947FFEFF2031F489E492EE60E00F9471
-:10EB7000C2F10BC0F092C6008091C00086FFFCCFAE
-:10EB80008091C00080648093C0000F5F1F4FC80158
-:10EB900081519F41A0E0B0E0ABBFFC01F790BAE229
-:10EBA000FB1621F0E2E000301E07C1F60F94DCF105
-:10EBB0000F94DCF187E592EE60E00F94F5F10F948D
-:10EBC000DCF1CC24DD2400E010E01EC0C8010F946D
-:10EBD00077FEF82E882331F489E492EE60E00F94FA
-:10EBE000C2F10BC08093C6008091C00086FFFCCFAD
-:10EBF0008091C00080648093C000FE1419F00894D6
-:10EC0000C11CD11C0F5F1F4FC80181519F41A0E063
-:10EC1000B0E0ABBFFC01E790FAE2EF1621F022E092
-:10EC20000030120799F60F94DCF10F94DCF182E6C4
-:10EC300092EE60E00F94C2F1C60161E070E00F94C3
-:10EC400034F20F94DCF10F94DCF110920202109276
-:10EC50000302109204021092050278CE89E992EE26
-:10EC600062E00F94F5F1279A2F9A16C02F9880E052
-:10EC700090E0E0EDF7E03197F1F7019684369105E9
-:10EC8000C1F72F9A80E090E0E0EDF7E03197F1F7DF
-:10EC9000019684369105C1F78091C00087FFE6CFC9
-:10ECA0008091C00087FFFCCF64C485EA92EE62E0E9
-:10ECB0000F94F5F140910202509103026091040219
-:10ECC0007091050281E020E10F9491F2809102029F
-:10ECD00090910302A0910402B091050280509F4FD1
-:10ECE000AF4FBF4F8093020290930302A0930402A0
-:10ECF000B093050280509041A040B04008F426CE69
-:10ED0000A4CF83EB92EE62E00F94F5F140910602FE
-:10ED100050910702609108027091090280E020E1A1
-:10ED20000F9491F28091060290910702A09108023F
-:10ED3000B091090280509F4FAF4FBF4F80930602A2
-:10ED400090930702A0930802B0930902FFCD80ECD4
-:10ED500092EE62E00F94F5F183E792EE60E00F949B
-:10ED6000F5F18FE792EE60E00F94F5F18BE892EE0B
-:10ED700060E00F94F5F189E992EE60E00F94F5F10F
-:10ED800085EA92EE60E00F94F5F183EB92EE60E09D
-:10ED90000F94F5F180EC92EE60E00F94F5F187ECC2
-:10EDA00092EE60E00F94F5F188ED92EE60E00F9442
-:10EDB000F5F18FED92EE60E00F94F5F18AEE92EEB0
-:10EDC00060E00F94F5F183E093EEBDCD87EC92EE19
-:10EDD00062E00F94F5F181E40F947BF282E40F94EA
-:10EDE0007BF283E40F947BF284E40F947BF285E45E
-:10EDF0000F947BF286E40F947BF287E40F947BF20E
-:10EE000088E40F947BF28AE40F947BF28BE40F94F6
-:10EE10007BF28CE40F947BF299CD88ED92EE62E068
-:10EE20000F94F5F1772473948824992409C48FED05
-:10EE300092EE62E00F94F5F140910A0250910B02BC
-:10EE400060910C0270910D0282E020E10F9491F22A
-:10EE500080910A0290910B02A0910C02B0910D02D8
-:10EE600080509F4FAF4FBF4F80930A0290930B0289
-:10EE7000A0930C02B0930D0269CD8AEE92EE62E08F
-:10EE80000F94F5F184EE90EE60E00F94F5F18FECC5
-:10EE900091EE60E00F94F5F1662477244301CC5D98
-:10EEA000DE4F19821882C452D140D401C301B695F5
-:10EEB000A79597958795CA5DDE4F88839983AA8326
-:10EEC000BB83C652D140CC5DDE4FA881B981C4520C
-:10EED000D1401196CC5DDE4FB983A883C452D14096
-:10EEE000CD0162E070E00F9434F2B0E2B093C6005E
-:10EEF0008091C00086FFFCCF8091C0008064809329
-:10EF0000C000EDE2E093C6008091C00086FFFCCF18
-:10EF10008091C00080648093C000F0E2F093C6004E
-:10EF20008091C00086FFFCCF8091C00080648093F8
-:10EF3000C000CA5DDE4FE880F9800A811B81C6529D
-:10EF4000D140BB27A12F902F8F2D0F940DF2CA5DBA
-:10EF5000DE4F8881C652D1400F940DF2B0E2FB2EF5
-:10EF6000F092C6008091C00086FFFCCF8091C00067
-:10EF700080648093C0000DE30093C6008091C000C0
-:10EF800086FFFCCF8091C00080648093C00010E2B7
-:10EF90001093C6008091C00086FFFCCF8091C00016
-:10EFA00080648093C0008BBEF3012791C65DDE4F65
-:10EFB0002883CA52D140A22EBB24CC24DD2408943D
-:10EFC000611C711C811C911C8BBEF3018791282E42
-:10EFD0003324442455240894611C711C811C911C09
-:10EFE0008BBEF3013791C55DDE4F3883CB52D140E4
-:10EFF0000894611C711C811C911C8BBEF30147910C
-:10F00000C45DDE4F4883CC52D140ADEFEA2EAFEF66
-:10F01000FA2EAFEF0A2FAFEF1A2F6E0C7F1C801E57
-:10F02000911E142D032DF22CEE24EA0CFB1C0C1D5A
-:10F030001D1D0F940DF220E22093C6008091C000A8
-:10F0400086FFFCCF8091C00080648093C000C65DC5
-:10F05000DE4F8881CA52D1400F940DF230E23093D6
-:10F06000C6008091C00086FFFCCF8091C000806404
-:10F070008093C000C45DDE4F8881CC52D1400F9494
-:10F080000DF240E24093C6008091C00086FFFCCFA5
-:10F090008091C00080648093C000C55DDE4F888190
-:10F0A000CB52D1400F940DF250E25093C6008091A4
-:10F0B000C00086FFFCCF8091C00080648093C000B8
-:10F0C0008FEFE8168FEFF80680E0080780E018075A
-:10F0D00031F484E092EE60E00F94C2F1DFC0D80119
-:10F0E000C7018070907CA070B0708050904CA040A0
-:10F0F000B040D1F52FEF3FE340E050E0E222F322B1
-:10F1000004231523CA5DDE4FA880B980CA80DB8046
-:10F11000C652D140AE0CBF1CC01ED11EAA0CBB1CD7
-:10F12000CC1CDD1C8EE092EE60E00F94C2F1BB2798
-:10F13000A12F902F8F2D0F940DF28E2D0F940DF285
-:10F1400030E23093C6008091C00086FFFCCF8091F2
-:10F15000C00080648093C0004EE34093C60080915D
-:10F16000C00086FFFCCF87C08EE09EEFA0E0B0E03D
-:10F17000E822F9220A231B239CE0E91694E9F90608
-:10F1800090E0090790E0190709F088C0C45DDE4FE0
-:10F19000A881CC52D140EA2EFF2400E010E0102FCD
-:10F1A0000F2DFE2CEE24C55DDE4FB881CB52D14031
-:10F1B000EB0EF11C011D111DD601C501817090706F
-:10F1C000A070B070DC0199278827E80EF91E0A1F8D
-:10F1D0001B1F20EF30E040E050E0A222B322C42207
-:10F1E000D52241E1AA0CBB1CCC1CDD1C4A95D1F7F1
-:10F1F000EA0CFB1C0C1D1D1D81E090E0A0E0B0E0BE
-:10F20000282239224A225B2235E1220C331C441C7D
-:10F21000551C3A95D1F7E20CF31C041D151D57013E
-:10F220006801AA0CBB1CCC1CDD1C85E192EE60E0E1
-:10F230000F94C2F1C801AA27BB270F940DF2BB2778
-:10F24000A12F902F8F2D0F940DF28E2D0F940DF274
-:10F2500090E29093C6008091C00086FFFCCF809121
-:10F26000C00080648093C000AEE3A093C60080918C
-:10F27000C00086FFFCCF8091C00080648093C000F6
-:10F28000C601AA27BB270F940DF2BB27AD2D9C2DDD
-:10F290008B2D0F940DF28A2D0F940DF20F94DCF14B
-:10F2A000CC5DDE4FE881F981C452D140F99709F471
-:10F2B0004DCBF4E0EF2EF12C012D112D6E0C7F1CA7
-:10F2C000801E911EF2CD83E093EE62E00F94F5F183
-:10F2D0008AE192EE60E00F94C2F18091C00087FF56
-:10F2E000FCCF1091C6001F751093C6008091C0001E
-:10F2F00086FFFCCF8091C00080648093C0000F9493
-:10F30000DCF1812F81548A3108F036C1163409F4BA
-:10F3100095C0173490F4133409F44EC0143430F40B
-:10F320001134F1F0123409F01DC130C0143409F465
-:10F3300059C0153409F016C16BC01A3409F4C4C0A1
-:10F340001B3438F4173409F48FC0183409F00AC19B
-:10F35000A1C01B3409F4D2C01C3409F003C1E8C0B9
-:10F360008FEF81B90DC082B1809582B980E090E0C5
-:10F37000E0EDF7E03197F1F70196883C9105C1F790
-:10F380008091C00087FFEFCF12B8EFC08FEF84B934
-:10F390000DC085B1809585B980E090E0E0EDF7E0A3
-:10F3A0003197F1F70196883C9105C1F78091C00033
-:10F3B00087FFEFCF15B8D9C08FEF87B90DC088B1DF
-:10F3C000809588B980E090E0E0EDF7E03197F1F7C3
-:10F3D0000196883C9105C1F78091C00087FFEFCF6F
-:10F3E00018B8C3C08FEF8AB90DC08BB180958BB9A7
-:10F3F00080E090E0E0EDF7E03197F1F70196883C8E
-:10F400009105C1F78091C00087FFEFCF1BB8ADC059
-:10F410008FEF8DB90DC08EB180958EB980E090E0F0
-:10F42000E0EDF7E03197F1F70196883C9105C1F7DF
-:10F430008091C00087FFEFCF1EB897C08FEF80BBD1
-:10F440000DC081B3809581BB80E090E0E0EDF7E0F6
-:10F450003197F1F70196883C9105C1F78091C00082
-:10F4600087FFEFCF11BA81C08FEF83BB0DC084B38C
-:10F47000809584BB80E090E0E0EDF7E03197F1F714
-:10F480000196883C9105C1F78091C00087FFEFCFBE
-:10F4900014BA6BC08FEF809301010FC080910201FD
-:10F4A00080958093020180E090E0E0EDF7E03197F5
-:10F4B000F1F70196883C9105C1F78091C00087FF64
-:10F4C000EDCF1092020151C08FEF809304010FC065
-:10F4D0008091050180958093050180E090E0E0ED4A
-:10F4E000F7E03197F1F70196883C9105C1F78091DB
-:10F4F000C00087FFEDCF1092050137C08FEF8093DA
-:10F5000007010FC08091080180958093080180E079
-:10F5100090E0E0EDF7E03197F1F70196883C910536
-:10F52000C1F78091C00087FFEDCF109208011DC088
-:10F530008FEF80930A010FC080910B01809580931B
-:10F540000B0180E090E0E0EDF7E03197F1F70196F4
-:10F55000883C9105C1F78091C00087FFEDCF1092E4
-:10F560000B0103C085E292EEEEC98091C00087FFD7
-:10F57000FCCF8091C600EAC988E392EEE4C98CE131
-:10F5800091EEE1C988249924933011F1943028F444
-:10F59000913089F09230B8F408C0953061F195301F
-:10F5A000F0F0963009F048C043C02B3109F042C951
-:10F5B00091E06BE13FC96227C15DDE4F2883CF52E6
-:10F5C000D14092E037C9B22FA0E0622793E032C960
-:10F5D000822F90E0A82BB92B622794E02BC92E3004
-:10F5E00009F039C3622795E0C05DDE4F19821882A9
-:10F5F000C053D1401FC9E1E0F0E0EC0FFD1FC05D3A
-:10F60000DE4F08811981C053D140E00FF11F2083E4
-:10F610000F5F1F4FC05DDE4F19830883C053D14079
-:10F6200062270A171B0709F005C9D80196E002C92D
-:10F63000261709F010C303C0973009F0FBC87724E0
-:10F640009981933109F412C19431C8F4963009F4C8
-:10F65000D8C0973050F4923009F406C1933009F4C1
-:10F660006DC0913009F059C253C0913109F477C08F
-:10F67000923108F0BBC0903109F04FC2F5C098310B
-:10F6800009F487C0993150F4953109F4EFC09531F0
-:10F6900008F4C6C1963109F040C2C2C19A3109F4DA
-:10F6A0006CC09A3108F491C09B3109F45BC09D3164
-:10F6B00009F033C29D81903359F48F81882311F46E
-:10F6C0009EE11CC0813011F091E018C098E916C08D
-:10F6D000892F807591F0903539F4E0E0F0E089E011
-:10F6E0008093570094910AC0983539F4E3E0F0E034
-:10F6F00089E080935700949101C090E01A821B82A8
-:10F700008D818C831D829E831F8227E030E009C299
-:10F710001A8288E08B8381E48C8386E58D8382E581
-:10F720008E8389E48F8383E5888780E589878FE5E9
-:10F730008A8782E38B872BE030E0F3C18A818139AD
-:10F7400041F0823941F0803911F48FE005C080E04A
-:10F7500003C082E001C08AE01A828B8344C0772410
-:10F76000739482C08D81882311F48EE12CC0813086
-:10F7700011F081E028C088E926C01A82E1E0F0E0BB
-:10F7800089E08093570084918B831C8224E030E0D1
-:10F79000C8C18B81803589F48C81883039F4E2E0EE
-:10F7A000F0E089E08093570084910DC0E0E0F0E044
-:10F7B00089E080935700849106C0E3E0F0E089E09F
-:10F7C0008093570084911A82DFCF8D81836C99E0FA
-:10F7D000E1E0F0E0082E90935700E89507B600FCB2
-:10F7E000FDCF1A821B8223E030E09BC180EC8A832C
-:10F7F000CE5CDE4F188219821A821B82C253D1401E
-:10F800008EC18A8190E0A0E0B0E0582F44273327D2
-:10F8100022278B8190E0A0E0B0E0DC0199278827C7
-:10F82000282B392B4A2B5B2B8D8190E0A0E0B0E098
-:10F83000282B392B4A2B5B2B8C8190E0A0E0B0E089
-:10F84000BA2FA92F982F8827282B392B4A2B5B2BCF
-:10F85000220F331F441F551FC05EDE4F288339839C
-:10F860004A835B83C052D1401A8259C13A81C95C34
-:10F87000DE4F3883C753D140CA5CDE4F1882C6536F
-:10F88000D1408B81C82EDD24CA5CDE4F488159816E
-:10F89000C653D140C42AD52A933109F082C0CE5C28
-:10F8A000DE4F88819981AA81BB81C253D1408050AB
-:10F8B000904CA340B04030F583E0CE5CDE4FE88052
-:10F8C000F9800A811B81C253D140F70100935B008C
-:10F8D00080935700E89507B600FCFDCFCE5CDE4F65
-:10F8E000088119812A813B81C253D14000501F4FAA
-:10F8F0002F4F3F4FCE5CDE4F088319832A833B8313
-:10F90000C253D140C05EDE4F488159816A817B81FC
-:10F91000C052D140DE011B9631E08C9111962C91A2
-:10F9200011971296C75CDE4F2883C953D140C85C3B
-:10F93000DE4F1882C853D14090E0C85CDE4FE881AA
-:10F94000F981C853D1408E2B9F2B0C01FA01609393
-:10F950005B0030935700E89511244E5F5F4F6F4F67
-:10F960007F4F0EEFE02E0FEFF02ECE0CDF1CC114F8
-:10F97000D10499F685E0C05EDE4F088119812A81A5
-:10F980003B81C052D140F80120935B008093570027
-:10F99000E89507B600FCFDCF81E180935700E8951C
-:10F9A00035C0C05EDE4F88819981AA81BB81C0527B
-:10F9B000D140B695A795979587957C018601ABE0D8
-:10F9C000AA2EB12CAC0EBD1E0BC0D5016D915D01F0
-:10F9D000C7010F947FFE0894E11CF11C01501040F8
-:10F9E0000115110591F7A60160E070E0440F551F65
-:10F9F000661F771FC05EDE4FE880F9800A811B8199
-:10FA0000C052D1404E0D5F1D601F711F1A82C05E33
-:10FA1000DE4F488359836A837B83C052D1407FC0C5
-:10FA2000FA80C55CDE4FF882CB53D140C65CDE4F16
-:10FA30001882CA53D1408B81C82EDD24C65CDE4FAC
-:10FA400008811981CA53D140C02AD12A1A828981DA
-:10FA5000BE016D5F7F4F843121F59601C05EDE4FA0
-:10FA6000E880F9800A811B81C052D1400BBFF701A9
-:10FA700087919691DB018C9311969C936E5F7F4FDB
-:10FA8000D801C7010296A11DB11DC05EDE4F88835B
-:10FA90009983AA83BB83C052D14022503040F1F6F3
-:10FAA00036C0C05EDE4F288139814A815B81C052F9
-:10FAB000D1400894C108D108760100E010E0089414
-:10FAC000C11CD11C0894E11CF11C011D111DE20E8A
-:10FAD000F31E041F151F21BDBB27A52F942F832FB5
-:10FAE00082BD2F5F3F4F4F4F5F4FF89A80B5DB01CC
-:10FAF0008D93BD012E153F054007510761F7C05E8C
-:10FB0000DE4F288339834A835B83C052D1409601FC
-:10FB10002D5F3F4FFB01108204C080EC8A8322E0FE
-:10FB200030E08BE18093C6008091C00086FFFCCF5F
-:10FB30008091C00080648093C000C15DDE4FF88179
-:10FB4000CF52D140F093C6008091C00086FFFCCF19
-:10FB50008091C00080648093C000432F3093C60022
-:10FB60008091C00086FFFCCF8091C00080648093AC
-:10FB7000C000922F2093C6008091C00086FFFCCF6A
-:10FB80008091C00080648093C0008EE08093C600A6
-:10FB90008091C00086FFFCCF8091C000806480937C
-:10FBA000C00065E1C15DDE4FE880CF52D1406E25D7
-:10FBB00069276427FE01319610C090819093C6009A
-:10FBC0008091C00086FFFCCF31968091C000806498
-:10FBD0008093C0006927215030402115310569F715
-:10FBE0006093C6008091C00086FFFCCF8091C0006A
-:10FBF00080648093C00085B1805885B9772081F4F6
-:10FC0000C15DDE4F0881CF52D1400F5FC15DDE4F35
-:10FC10000883CF52D14090E0A0E0B0E00D941AF4F8
-:10FC200027982F9880E090E020ED37E0F901319798
-:10FC3000F1F7019684369105C9F700008091C00064
-:10FC40008D7F8093C00081E180935700E895EE2777
-:10FC5000FF270994FFCF90E00D941AF497FB092E2B
-:10FC600007260AD077FD04D02ED006D000201AF443
-:10FC7000709561957F4F0895F6F7909581959F4F08
-:10FC80000895A1E21A2EAA1BBB1BFD010DC0AA1FDD
-:10FC9000BB1FEE1FFF1FA217B307E407F50720F0F5
-:10FCA000A21BB30BE40BF50B661F771F881F991F70
-:10FCB0001A9469F760957095809590959B01AC01B9
-:10FCC000BD01CF010895AA1BBB1B51E107C0AA1FAC
-:10FCD000BB1FA617B70710F0A61BB70B881F991FED
-:10FCE0005A95A9F780959095BC01CD010895F99991
-:10FCF000FECF92BD81BDF89A992780B50895262F31
-:10FD0000F999FECF1FBA92BD81BD20BD0FB6F89400
-:0EFD1000FA9AF99A0FBE01960895F894FFCF63
-:040000033000E000E9
-:00000001FF