aboutsummaryrefslogtreecommitdiff
path: root/bootloaders/atmega8
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/atmega8
parent2663be17272e19f00c55f3f2d8f1ebfac47158d6 (diff)
parent91e267bcc42442d4e9da09aab30065ad5d44025a (diff)
Merge pull request #1 from dmadison/forking
Forking
Diffstat (limited to 'bootloaders/atmega8')
-rw-r--r--bootloaders/atmega8/ATmegaBOOT-prod-firmware-2009-11-07.hex66
-rw-r--r--bootloaders/atmega8/ATmegaBOOT.c507
-rw-r--r--bootloaders/atmega8/ATmegaBOOT.hex62
-rw-r--r--bootloaders/atmega8/ATmegaBOOT.txt4
-rw-r--r--bootloaders/atmega8/Makefile88
5 files changed, 0 insertions, 727 deletions
diff --git a/bootloaders/atmega8/ATmegaBOOT-prod-firmware-2009-11-07.hex b/bootloaders/atmega8/ATmegaBOOT-prod-firmware-2009-11-07.hex
deleted file mode 100644
index 6190d48..0000000
--- a/bootloaders/atmega8/ATmegaBOOT-prod-firmware-2009-11-07.hex
+++ /dev/null
@@ -1,66 +0,0 @@
-:101C000012C02BC02AC029C028C027C026C025C0AA
-:101C100024C023C022C021C020C01FC01EC01DC0C0
-:101C20001CC01BC01AC011241FBECFE5D4E0DEBF0C
-:101C3000CDBF10E0A0E6B0E0E8EEFFE102C0059005
-:101C40000D92A236B107D9F711E0A2E6B0E001C0CB
-:101C50001D92AA36B107E1F74FC0D2CFEF92FF92A3
-:101C60000F931F93EE24FF24870113C00894E11CF7
-:101C7000F11C011D111D81E0E81682E1F8068AE7DA
-:101C8000080780E0180728F0E0916200F0916300F7
-:101C900009955F9BEBCF8CB1992787FD90951F919C
-:101CA0000F91FF90EF9008955D9BFECF8CB9089542
-:101CB000D5DF803221F484E1F7DF80E1F5DF08959C
-:101CC0001F93182FCBDF803231F484E1EDDF812FB9
-:101CD000EBDF80E1E9DF1F9108951F93CF93DF933E
-:101CE000182FC0E0D0E002C0B9DF2196C117E0F3A1
-:101CF000DF91CF911F910895CFE5D4E0DEBFCDBF36
-:101D0000000010BC83E389B988E18AB986E880BD08
-:101D1000BD9A1092680130E2E0E0F0E02FE088B375
-:101D2000832788BBCF010197F1F7215027FFF7CF19
-:101D300020E12093680192DF803381F1813399F4AF
-:101D40008DDF8032C1F784E1AFDF81E4ADDF86E56E
-:101D5000ABDF82E5A9DF80E2A7DF89E4A5DF83E5C9
-:101D6000A3DF80E5C7C0803429F478DF8638B0F07F
-:101D700075DF14C0813471F471DF803811F482E0B2
-:101D80001DC1813811F481E019C1823809F015C1F3
-:101D900082E114C1823421F484E19FDF89DFCBCF5B
-:101DA000853411F485E0F9CF8035C1F38135B1F385
-:101DB0008235A1F3853539F451DF809364004EDF1D
-:101DC00080936500EBCF863519F484E086DFF5C09B
-:101DD000843609F093C042DF809367013FDF809330
-:101DE0006601809169018E7F8093690137DF8534B8
-:101DF00029F480916901816080936901C0E0D0E09D
-:101E000006E610E005C02ADFF80181938F012196D4
-:101E10008091660190916701C817D907A0F31EDF72
-:101E2000803209F088CF8091690180FF1FC020E0D7
-:101E300030E0E6E6F0E012C0A0916400B0916500E9
-:101E40008191082EC5D08091640090916500019623
-:101E500090936500809364002F5F3F4F80916601EF
-:101E6000909167012817390738F343C0F894E19936
-:101E7000FECF1127E0916400F0916500EE0FFF1F87
-:101E8000C6E6D0E0809166019091670180FF01C0B5
-:101E90000196103051F422D003E000935700E895EA
-:101EA0001DD001E100935700E8950990199016D0D4
-:101EB00001E000935700E8951395103258F0112770
-:101EC0000DD005E000935700E89508D001E100939C
-:101ED0005700E8953296029739F0DBCF0091570012
-:101EE00001700130D9F30895103011F00296E7CF58
-:101EF000112484E1D9DE80E1D7DE1DCF843709F0DB
-:101F00004BC0ACDE80936701A9DE80936601A6DE3C
-:101F100090916901853421F49160909369010DC01D
-:101F20009E7F909369018091640090916500880F75
-:101F3000991F909365008093640090DE803209F0D1
-:101F4000FACE84E1B1DEC0E0D0E01EC0809169012C
-:101F500080FF07C0A0916400B091650031D0802D52
-:101F600008C081FD07C0E0916400F0916500E49134
-:101F70008E2F9ADE80916400909165000196909377
-:101F800065008093640021968091660190916701BD
-:101F9000C817D907D8F2AFCF853761F45FDE80323A
-:101FA00009F0C9CE84E180DE8EE17EDE83E97CDE4D
-:101FB00087E0A0CF863709F0BECE80E081DEBBCEC1
-:101FC000E199FECFBFBBAEBBE09A11960DB208956A
-:101FD000E199FECFBFBBAEBB0DBA11960FB6F89418
-:081FE000E29AE19A0FBE089598
-:021FE800800077
-:0400000300001C00DD
-:00000001FF
diff --git a/bootloaders/atmega8/ATmegaBOOT.c b/bootloaders/atmega8/ATmegaBOOT.c
deleted file mode 100644
index 8c8d22a..0000000
--- a/bootloaders/atmega8/ATmegaBOOT.c
+++ /dev/null
@@ -1,507 +0,0 @@
-/**********************************************************/
-/* Serial Bootloader for Atmel mega8 AVR Controller */
-/* */
-/* ATmegaBOOT.c */
-/* */
-/* Copyright (c) 2003, Jason P. Kyle */
-/* */
-/* Hacked by DojoCorp - ZGZ - MMX - IVR */
-/* Hacked by David A. Mellis */
-/* */
-/* This program is free software; you can redistribute it */
-/* and/or modify it under the terms of the GNU General */
-/* Public License as published by the Free Software */
-/* Foundation; either version 2 of the License, or */
-/* (at your option) any later version. */
-/* */
-/* This program is distributed in the hope that it will */
-/* be useful, but WITHOUT ANY WARRANTY; without even the */
-/* implied warranty of MERCHANTABILITY or FITNESS FOR A */
-/* PARTICULAR PURPOSE. See the GNU General Public */
-/* License for more details. */
-/* */
-/* You should have received a copy of the GNU General */
-/* Public License along with this program; if not, write */
-/* to the Free Software Foundation, Inc., */
-/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* */
-/* Licence can be viewed at */
-/* http://www.fsf.org/licenses/gpl.txt */
-/* */
-/* Target = Atmel AVR m8 */
-/**********************************************************/
-
-#include <inttypes.h>
-#include <avr/io.h>
-#include <avr/pgmspace.h>
-#include <avr/eeprom.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-
-//#define F_CPU 16000000
-
-/* We, Malmoitians, like slow interaction
- * therefore the slow baud rate ;-)
- */
-//#define BAUD_RATE 9600
-
-/* 6.000.000 is more or less 8 seconds at the
- * speed configured here
- */
-//#define MAX_TIME_COUNT 6000000
-#define MAX_TIME_COUNT (F_CPU>>1)
-///#define MAX_TIME_COUNT_MORATORY 1600000
-
-/* SW_MAJOR and MINOR needs to be updated from time to time to avoid warning message from AVR Studio */
-#define HW_VER 0x02
-#define SW_MAJOR 0x01
-#define SW_MINOR 0x12
-
-// AVR-GCC compiler compatibility
-// avr-gcc compiler v3.1.x and older doesn't support outb() and inb()
-// if necessary, convert outb and inb to outp and inp
-#ifndef outb
- #define outb(sfr,val) (_SFR_BYTE(sfr) = (val))
-#endif
-#ifndef inb
- #define inb(sfr) _SFR_BYTE(sfr)
-#endif
-
-/* defines for future compatibility */
-#ifndef cbi
- #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
-#endif
-#ifndef sbi
- #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
-#endif
-
-/* Adjust to suit whatever pin your hardware uses to enter the bootloader */
-#define eeprom_rb(addr) eeprom_read_byte ((uint8_t *)(addr))
-#define eeprom_rw(addr) eeprom_read_word ((uint16_t *)(addr))
-#define eeprom_wb(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))
-
-/* Onboard LED is connected to pin PB5 */
-#define LED_DDR DDRB
-#define LED_PORT PORTB
-#define LED_PIN PINB
-#define LED PINB5
-
-
-#define SIG1 0x1E // Yep, Atmel is the only manufacturer of AVR micros. Single source :(
-#define SIG2 0x93
-#define SIG3 0x07
-#define PAGE_SIZE 0x20U //32 words
-
-
-void putch(char);
-char getch(void);
-void getNch(uint8_t);
-void byte_response(uint8_t);
-void nothing_response(void);
-
-union address_union {
- uint16_t word;
- uint8_t byte[2];
-} address;
-
-union length_union {
- uint16_t word;
- uint8_t byte[2];
-} length;
-
-struct flags_struct {
- unsigned eeprom : 1;
- unsigned rampz : 1;
-} flags;
-
-uint8_t buff[256];
-//uint8_t address_high;
-
-uint8_t pagesz=0x80;
-
-uint8_t i;
-//uint8_t bootuart0=0,bootuart1=0;
-
-
-void (*app_start)(void) = 0x0000;
-
-int main(void)
-{
- uint8_t ch,ch2;
- uint16_t w;
-
- //cbi(BL_DDR,BL);
- //sbi(BL_PORT,BL);
-
- asm volatile("nop\n\t");
-
- /* check if flash is programmed already, if not start bootloader anyway */
- //if(pgm_read_byte_near(0x0000) != 0xFF) {
-
- /* check if bootloader pin is set low */
- //if(bit_is_set(BL_PIN,BL)) app_start();
- //}
-
- /* initialize UART(s) depending on CPU defined */
- /* m8 */
- UBRRH = (((F_CPU/BAUD_RATE)/16)-1)>>8; // set baud rate
- UBRRL = (((F_CPU/BAUD_RATE)/16)-1);
- UCSRB = (1<<RXEN)|(1<<TXEN); // enable Rx & Tx
- UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // config USART; 8N1
-
- //UBRRL = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
- //UBRRH = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
- //UCSRA = 0x00;
- //UCSRC = 0x86;
- //UCSRB = _BV(TXEN)|_BV(RXEN);
-
-
- /* this was giving uisp problems, so I removed it; without it, the boot
- works on with uisp and avrdude on the mac (at least). */
- //putch('\0');
-
- //uint32_t l;
- //uint32_t time_count;
- //time_count=0;
-
- /* set LED pin as output */
- sbi(LED_DDR,LED);
- for (i = 0; i < 16; i++) {
- outb(LED_PORT, inb(LED_PORT) ^ _BV(LED));
- _delay_loop_2(0);
- }
-
- //for (l=0; l<40000000; l++)
- //outb(LED_PORT, inb(LED_PORT) ^= _BV(LED));
-
- /* flash onboard LED three times to signal entering of bootloader */
- //for(i=0; i<3; ++i) {
- //for(l=0; l<40000000; ++l);
- //sbi(LED_PORT,LED);
- //for(l=0; l<40000000; ++l);
- //cbi(LED_PORT,LED);
- //}
-
- /* see comment at previous call to putch() */
- //putch('\0'); // this line is needed for the synchronization of the programmer
-
- /* forever */
- for (;;) {
- //if((inb(UCSRA) & _BV(RXC))){
- /* get character from UART */
- ch = getch();
-
- /* A bunch of if...else if... gives smaller code than switch...case ! */
-
- /* Hello is anyone home ? */
- if(ch=='0') {
- nothing_response();
- }
-
- /* Request programmer ID */
- /* Not using PROGMEM string due to boot block in m128 being beyond 64kB boundry */
- /* Would need to selectively manipulate RAMPZ, and it's only 9 characters anyway so who cares. */
- else if(ch=='1') {
- if (getch() == ' ') {
- putch(0x14);
- putch('A');
- putch('V');
- putch('R');
- putch(' ');
- putch('I');
- putch('S');
- putch('P');
- putch(0x10);
- }
- }
-
- /* AVR ISP/STK500 board commands DON'T CARE so default nothing_response */
- else if(ch=='@') {
- ch2 = getch();
- if (ch2>0x85) getch();
- nothing_response();
- }
-
- /* AVR ISP/STK500 board requests */
- else if(ch=='A') {
- ch2 = getch();
- if(ch2==0x80) byte_response(HW_VER); // Hardware version
- else if(ch2==0x81) byte_response(SW_MAJOR); // Software major version
- else if(ch2==0x82) byte_response(SW_MINOR); // Software minor version
- //else if(ch2==0x98) byte_response(0x03); // Unknown but seems to be required by avr studio 3.56
- else byte_response(0x00); // Covers various unnecessary responses we don't care about
- }
-
- /* Device Parameters DON'T CARE, DEVICE IS FIXED */
- else if(ch=='B') {
- getNch(20);
- nothing_response();
- }
-
- /* Parallel programming stuff DON'T CARE */
- else if(ch=='E') {
- getNch(5);
- nothing_response();
- }
-
- /* Enter programming mode */
- else if(ch=='P') {
- nothing_response();
- // FIXME: modified only here by DojoCorp, Mumbai, India, 20050626
- //time_count=0; // exted the delay once entered prog.mode
- }
-
- /* Leave programming mode */
- else if(ch=='Q') {
- nothing_response();
- //time_count=MAX_TIME_COUNT_MORATORY; // once the programming is done,
- // we should start the application
- // but uisp has problems with this,
- // therefore we just change the times
- // and give the programmer 1 sec to react
- }
-
- /* Erase device, don't care as we will erase one page at a time anyway. */
- else if(ch=='R') {
- nothing_response();
- }
-
- /* Set address, little endian. EEPROM in bytes, FLASH in words */
- /* Perhaps extra address bytes may be added in future to support > 128kB FLASH. */
- /* This might explain why little endian was used here, big endian used everywhere else. */
- else if(ch=='U') {
- address.byte[0] = getch();
- address.byte[1] = getch();
- nothing_response();
- }
-
- /* Universal SPI programming command, disabled. Would be used for fuses and lock bits. */
- else if(ch=='V') {
- getNch(4);
- byte_response(0x00);
- }
-
- /* Write memory, length is big endian and is in bytes */
- else if(ch=='d') {
- length.byte[1] = getch();
- length.byte[0] = getch();
- flags.eeprom = 0;
- if (getch() == 'E') flags.eeprom = 1;
- for (w=0;w<length.word;w++) {
- buff[w] = getch(); // Store data in buffer, can't keep up with serial data stream whilst programming pages
- }
- if (getch() == ' ') {
- if (flags.eeprom) { //Write to EEPROM one byte at a time
- for(w=0;w<length.word;w++) {
- eeprom_wb(address.word,buff[w]);
- address.word++;
- }
- } else { //Write to FLASH one page at a time
- //if (address.byte[1]>127) address_high = 0x01; //Only possible with m128, m256 will need 3rd address byte. FIXME
- //else address_high = 0x00;
-
- //address.word = address.word << 1; //address * 2 -> byte location
- //if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes
- cli(); //Disable interrupts, just to be sure
- while(bit_is_set(EECR,EEWE)); //Wait for previous EEPROM writes to complete
- asm volatile(
- "clr r17 \n\t" //page_word_count
- "lds r30,address \n\t" //Address of FLASH location (in words)
- "lds r31,address+1 \n\t"
- "lsl r30 \n\t" //address * 2 -> byte location
- "rol r31 \n\t"
- "ldi r28,lo8(buff) \n\t" //Start of buffer array in RAM
- "ldi r29,hi8(buff) \n\t"
- "lds r24,length \n\t" //Length of data to be written (in bytes)
- "lds r25,length+1 \n\t"
- "sbrs r24,0 \n\t" //Even up an odd number of bytes
- "rjmp length_loop \n\t"
- "adiw r24,1 \n\t"
- "length_loop: \n\t" //Main loop, repeat for number of words in block
- "cpi r17,0x00 \n\t" //If page_word_count=0 then erase page
- "brne no_page_erase \n\t"
- "rcall wait_spm \n\t"
-// "wait_spm1: \n\t"
-// "lds r16,%0 \n\t" //Wait for previous spm to complete
-// "andi r16,1 \n\t"
-// "cpi r16,1 \n\t"
-// "breq wait_spm1 \n\t"
- "ldi r16,0x03 \n\t" //Erase page pointed to by Z
- "sts %0,r16 \n\t"
- "spm \n\t"
- "rcall wait_spm \n\t"
-// "wait_spm2: \n\t"
-// "lds r16,%0 \n\t" //Wait for previous spm to complete
-// "andi r16,1 \n\t"
-// "cpi r16,1 \n\t"
-// "breq wait_spm2 \n\t"
- "ldi r16,0x11 \n\t" //Re-enable RWW section
- "sts %0,r16 \n\t"
- "spm \n\t"
- "no_page_erase: \n\t"
- "ld r0,Y+ \n\t" //Write 2 bytes into page buffer
- "ld r1,Y+ \n\t"
-
- "rcall wait_spm \n\t"
-// "wait_spm3: \n\t"
-// "lds r16,%0 \n\t" //Wait for previous spm to complete
-// "andi r16,1 \n\t"
-// "cpi r16,1 \n\t"
-// "breq wait_spm3 \n\t"
- "ldi r16,0x01 \n\t" //Load r0,r1 into FLASH page buffer
- "sts %0,r16 \n\t"
- "spm \n\t"
-
- "inc r17 \n\t" //page_word_count++
- "cpi r17,%1 \n\t"
- "brlo same_page \n\t" //Still same page in FLASH
- "write_page: \n\t"
- "clr r17 \n\t" //New page, write current one first
- "rcall wait_spm \n\t"
-// "wait_spm4: \n\t"
-// "lds r16,%0 \n\t" //Wait for previous spm to complete
-// "andi r16,1 \n\t"
-// "cpi r16,1 \n\t"
-// "breq wait_spm4 \n\t"
- "ldi r16,0x05 \n\t" //Write page pointed to by Z
- "sts %0,r16 \n\t"
- "spm \n\t"
- "rcall wait_spm \n\t"
-// "wait_spm5: \n\t"
-// "lds r16,%0 \n\t" //Wait for previous spm to complete
-// "andi r16,1 \n\t"
-// "cpi r16,1 \n\t"
-// "breq wait_spm5 \n\t"
- "ldi r16,0x11 \n\t" //Re-enable RWW section
- "sts %0,r16 \n\t"
- "spm \n\t"
- "same_page: \n\t"
- "adiw r30,2 \n\t" //Next word in FLASH
- "sbiw r24,2 \n\t" //length-2
- "breq final_write \n\t" //Finished
- "rjmp length_loop \n\t"
-
- "wait_spm: \n\t"
- "lds r16,%0 \n\t" //Wait for previous spm to complete
- "andi r16,1 \n\t"
- "cpi r16,1 \n\t"
- "breq wait_spm \n\t"
- "ret \n\t"
-
- "final_write: \n\t"
- "cpi r17,0 \n\t"
- "breq block_done \n\t"
- "adiw r24,2 \n\t" //length+2, fool above check on length after short page write
- "rjmp write_page \n\t"
- "block_done: \n\t"
- "clr __zero_reg__ \n\t" //restore zero register
- : "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31");
-
- /* Should really add a wait for RWW section to be enabled, don't actually need it since we never */
- /* exit the bootloader without a power cycle anyhow */
- }
- putch(0x14);
- putch(0x10);
- }
- }
-
- /* Read memory block mode, length is big endian. */
- else if(ch=='t') {
- length.byte[1] = getch();
- length.byte[0] = getch();
- if (getch() == 'E') flags.eeprom = 1;
- else {
- flags.eeprom = 0;
- address.word = address.word << 1; // address * 2 -> byte location
- }
- if (getch() == ' ') { // Command terminator
- putch(0x14);
- for (w=0;w < length.word;w++) { // Can handle odd and even lengths okay
- if (flags.eeprom) { // Byte access EEPROM read
- putch(eeprom_rb(address.word));
- address.word++;
- } else {
- if (!flags.rampz) putch(pgm_read_byte_near(address.word));
- address.word++;
- }
- }
- putch(0x10);
- }
- }
-
- /* Get device signature bytes */
- else if(ch=='u') {
- if (getch() == ' ') {
- putch(0x14);
- putch(SIG1);
- putch(SIG2);
- putch(SIG3);
- putch(0x10);
- }
- }
-
- /* Read oscillator calibration byte */
- else if(ch=='v') {
- byte_response(0x00);
- }
-// } else {
-// time_count++;
-// if (time_count>=MAX_TIME_COUNT) {
-// app_start();
-// }
-// }
- } /* end of forever loop */
-}
-
-void putch(char ch)
-{
- /* m8 */
- while (!(inb(UCSRA) & _BV(UDRE)));
- outb(UDR,ch);
-}
-
-char getch(void)
-{
- /* m8 */
- uint32_t count = 0;
- while(!(inb(UCSRA) & _BV(RXC))) {
- /* HACKME:: here is a good place to count times*/
- count++;
- if (count > MAX_TIME_COUNT)
- app_start();
- }
- return (inb(UDR));
-}
-
-void getNch(uint8_t count)
-{
- uint8_t i;
- for(i=0;i<count;i++) {
- /* m8 */
- //while(!(inb(UCSRA) & _BV(RXC)));
- //inb(UDR);
- getch(); // need to handle time out
- }
-}
-
-void byte_response(uint8_t val)
-{
- if (getch() == ' ') {
- putch(0x14);
- putch(val);
- putch(0x10);
- }
-}
-
-void nothing_response(void)
-{
- if (getch() == ' ') {
- putch(0x14);
- putch(0x10);
- }
-}
-
-/* end of file ATmegaBOOT.c */
-
-
-
diff --git a/bootloaders/atmega8/ATmegaBOOT.hex b/bootloaders/atmega8/ATmegaBOOT.hex
deleted file mode 100644
index 9182267..0000000
--- a/bootloaders/atmega8/ATmegaBOOT.hex
+++ /dev/null
@@ -1,62 +0,0 @@
-:101C000012C02CC02BC02AC029C028C027C026C0A3
-:101C100025C024C023C022C021C020C01FC01EC0B8
-:101C20001DC01CC01BC011241FBECFE5D4E0DEBF09
-:101C3000CDBF10E0A0E6B0E0E6EAFFE102C005900B
-:101C40000D92A236B107D9F711E0A2E6B0E001C0CB
-:101C50001D92AA36B107E1F72BD0A3C1D1CF5D9B6E
-:101C6000FECF8CB908955F9BFECF8CB108950F9382
-:101C70001F93082F10E002C0F6DF1F5F1017E0F37C
-:101C80001F910F9108951F93182FEDDF803231F4CB
-:101C900084E1E5DF812FE3DF80E1E1DF1F9108953B
-:101CA000E2DF803221F484E1DADF80E1D8DF0895D9
-:101CB0000F931F93CF93DF93000010BC83E389B988
-:101CC00088E18AB986E880BDBD9A1092680120E05B
-:101CD00030E240E050E007C088B3832788BBCA01E8
-:101CE0000197F1F72F5F2031B8F320936801BBDF34
-:101CF000803381F1813399F4B6DF8032C1F784E11A
-:101D0000AEDF81E4ACDF86E5AADF82E5A8DF80E212
-:101D1000A6DF89E4A4DF83E5A2DF80E523C1803468
-:101D200029F4A1DF8638B0F09EDF14C0813471F44D
-:101D30009ADF803811F482E01DC1813811F481E00E
-:101D400019C1823809F015C182E114C1823421F42D
-:101D500084E18DDFA5DFCBCF853411F485E0F9CFA9
-:101D60008035C1F38135B1F38235A1F3853539F47E
-:101D70007ADF8093640077DF80936500EBCF863550
-:101D800019F484E074DFF5C0843609F090C06BDF8D
-:101D90008093670168DF80936601809169018E7F7F
-:101DA0008093690160DF853429F480916901816045
-:101DB0008093690100E010E007C055DFF801EA599F
-:101DC000FF4F80830F5F1F4F8091660190916701E5
-:101DD0000817190790F347DF803209F088CF809108
-:101DE000690180FF1FC000E010E014C0F801EA594B
-:101DF000FF4F80916400909165006081C5D0809113
-:101E00006400909165000196909365008093640052
-:101E10000F5F1F4F809166019091670108171907A6
-:101E200028F343C0F894E199FECF1127E0916400B4
-:101E3000F0916500EE0FFF1FC6E6D0E080916601CD
-:101E40009091670180FF01C00196103051F422D0BB
-:101E500003E000935700E8951DD001E1009357007F
-:101E6000E8950990199016D001E000935700E89585
-:101E70001395103258F011270DD005E0009357004C
-:101E8000E89508D001E100935700E8953296029753
-:101E900039F0DBCF0091570001700130D9F308957C
-:101EA000103011F00296E7CF112484E15BC0843733
-:101EB00009F04BC0D8DE80936701D5DE80936601C0
-:101EC000D2DE90916901853421F49160909369018B
-:101ED0000DC09E7F90936901809164009091650090
-:101EE000880F991F9093650080936400BCDE803258
-:101EF00009F0FDCE84E1B3DE00E010E01EC0809169
-:101F0000690180FF06C0809164009091650034D023
-:101F100008C081FD07C0E0916400F0916500E49184
-:101F20008E2F9DDE809164009091650001969093C4
-:101F30006500809364000F5F1F4F80916601909150
-:101F4000670108171907D8F20EC0853779F48BDEC0
-:101F5000803209F0CCCE84E182DE8EE180DE83E93E
-:101F60007EDE87E07CDE80E17ADEC1CE863709F056
-:101F7000BECE80E088DEBBCEE199FECF9FBB8EBB9C
-:101F8000E09A99278DB30895262FE199FECF9FBB44
-:101F90008EBB2DBB0FB6F894E29AE19A0FBE019664
-:061FA0000895F894FFCF44
-:021FA6008000B9
-:0400000300001C00DD
-:00000001FF
diff --git a/bootloaders/atmega8/ATmegaBOOT.txt b/bootloaders/atmega8/ATmegaBOOT.txt
deleted file mode 100644
index b0e19b3..0000000
--- a/bootloaders/atmega8/ATmegaBOOT.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Configured with: ../src/configure -v --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-checking --disable-libssp --build=i686-linux-gnu --host=i686-linux-gnu --target=avr
-Thread model: single
-gcc version 4.3.5 (GCC)
-
diff --git a/bootloaders/atmega8/Makefile b/bootloaders/atmega8/Makefile
deleted file mode 100644
index 9202b52..0000000
--- a/bootloaders/atmega8/Makefile
+++ /dev/null
@@ -1,88 +0,0 @@
-# Makefile for ATmegaBOOT
-# E.Lins, 2004-10-14
-
-# program name should not be changed...
-PROGRAM = ATmegaBOOT
-
-PRODUCT=atmega8
-
-# enter the parameters for the UISP isp tool
-ISPPARAMS = -dprog=stk500 -dserial=$(SERIAL) -dspeed=115200
-
-
-#DIRAVR = /usr/local/avr
-DIRAVRBIN = $(DIRAVR)/bin
-DIRAVRUTILS = $(DIRAVR)/utils/bin
-DIRINC = $(DIRAVR)/include
-DIRLIB = $(DIRAVR)/avr/lib
-
-
-MCU_TARGET = atmega8
-LDSECTION = --section-start=.text=0x1c00
-FUSE_L = 0xdf
-FUSE_H = 0xca
-ISPFUSES = $(DIRAVRBIN)/uisp -dpart=ATmega8 $(ISPPARAMS) --wr_fuse_l=$(FUSE_L) --wr_fuse_h=$(FUSE_H)
-ISPFLASH = $(DIRAVRBIN)/uisp -dpart=ATmega8 $(ISPPARAMS) --erase --upload if=$(PROGRAM).hex -v
-
-
-OBJ = $(PROGRAM).o
-OPTIMIZE = -Os -funsigned-char -funsigned-bitfields -fno-inline-small-functions
-
-DEFS = -DF_CPU=16000000 -DBAUD_RATE=19200
-LIBS =
-
-CC = $(DIRAVRBIN)/avr-gcc
-
-
-# Override is only needed by avr-lib build system.
-
-override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) -D$(PRODUCT) $(DEFS) -I$(DIRINC)
-override LDFLAGS = -Wl,-Map,$(PROGRAM).map,$(LDSECTION)
-
-OBJCOPY = $(DIRAVRBIN)/avr-objcopy
-OBJDUMP = $(DIRAVRBIN)/avr-objdump
-SIZE = $(DIRAVRBIN)/avr-size
-
-all: $(PROGRAM).elf lst text asm size
-
-isp: $(PROGRAM).hex
- $(ISPFUSES)
- $(ISPFLASH)
-
-$(PROGRAM).elf: $(OBJ)
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
-
-clean:
- rm -rf *.s
- rm -rf *.o *.elf
- rm -rf *.lst *.map
-
-asm: $(PROGRAM).s
-
-%.s: %.c
- $(CC) -S $(CFLAGS) -g1 $^
-
-lst: $(PROGRAM).lst
-
-%.lst: %.elf
- $(OBJDUMP) -h -S $< > $@
-
-size: $(PROGRAM).hex
- $(SIZE) $^
-
-# Rules for building the .text rom images
-
-text: hex bin srec
-
-hex: $(PROGRAM).hex
-bin: $(PROGRAM).bin
-srec: $(PROGRAM).srec
-
-%.hex: %.elf
- $(OBJCOPY) -j .text -j .data -O ihex $< $@
-
-%.srec: %.elf
- $(OBJCOPY) -j .text -j .data -O srec $< $@
-
-%.bin: %.elf
- $(OBJCOPY) -j .text -j .data -O binary $< $@