Skip to content

Commit

Permalink
Bumb to Version 8.0: add DO_SPM code
Browse files Browse the repository at this point in the history
This is not quite the same as MCUdude's code, but it has the same
calling conventions.  This version doesn't use do_spm from the bootloading
code itself, since that recently went to some effort to use more of
the standardized boot.h calls.  That means that this code is a bit
bigger than it really needs to be.  (Still small enough to fit within
the 512byte limit, given recent compilers.)
Sadly, the compiler options that barely fit SUPPORT_EEPROM in 512bytes
are incompatible with DO_SPM, so you have to choose.  Since do_spm was
supported by the MCUDude platforms, and not 512byte version of optiboot
has ever supported EEPROM, the do_spm code wins, for backward compatibility!

Also standardize the "makeall" shell script names, and update the release script.
  • Loading branch information
WestfW committed Sep 20, 2018
1 parent b10ce15 commit e9af37f
Show file tree
Hide file tree
Showing 19 changed files with 1,744 additions and 3,028 deletions.
12 changes: 10 additions & 2 deletions optiboot/bootloaders/optiboot/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -236,9 +236,17 @@ SS_CMD = -DSINGLESPEED=1
endif
endif

HELPTEXT += "Option NO_APP_SPM=1 - disallow application call of do_spm\n"
ifdef NO_APP_SPM
ifneq ($(NO_APP_SPM),0)
APPSPM_CMD = -DAPP_NOSPM=1
endif
endif


COMMON_OPTIONS = $(BAUD_RATE_CMD) $(LED_START_FLASHES_CMD) $(BIGBOOT_CMD)
COMMON_OPTIONS += $(SOFT_UART_CMD) $(LED_DATA_FLASH_CMD) $(LED_CMD) $(SS_CMD)
COMMON_OPTIONS += $(SUPPORT_EEPROM_CMD) $(LED_START_ON_CMD)
COMMON_OPTIONS += $(SUPPORT_EEPROM_CMD) $(LED_START_ON_CMD) $(APPSPM_CMD)
COMMON_OPTIONS += $(VERSION_CMD)

#UART is handled separately and only passed for devices with more than one.
Expand Down Expand Up @@ -380,7 +388,7 @@ atmega168_isp: HFUSE ?= DD
atmega168_isp: LFUSE ?= F7
ifndef BIGBOOT
# 512 byte boot
atmega168_isp: EFUSE ?= 04
atmega168_isp: EFUSE ?= FC
else
# 1024byte boot
atmega168_isp: EFUSE ?= FA
Expand Down
32 changes: 0 additions & 32 deletions optiboot/bootloaders/optiboot/makeall

This file was deleted.

32 changes: 32 additions & 0 deletions optiboot/bootloaders/optiboot/makeall.arduino.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/bin/bash
make clean
#
# buildable platforms of somewhat questionable support level
make lilypad $*
make pro8 $*
make pro16 $*
make pro20 $*
make atmega328_pro8 $*
make sanguino $*
make mega1280 $*
make luminet $*
make diecimila $*
make bobuino $*
make wildfirev2 $*
make atmega1284 $*
make atmega32 $*
make atmega88 $*
make atmega168p $*

#
# Atmel development board targets
make xplained168pb $*
make xplained328p $*
make xplained328pb $*

#
# The "big three" standard bootloaders.
# These need to be built AFTER the platforms, or they'll get renamed
make atmega8 $*
make atmega168 $*
make atmega328 $*
2 changes: 1 addition & 1 deletion optiboot/bootloaders/optiboot/makeall.mcudude.sh
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ do
# Print out current build info
echo -e " ${mcu_and_params[$i]} AVR_FREQ=${clock_and_baud[$j]} BAUD_RATE=${clock_and_baud[$j+1]} ${mcu_and_params[$i+1]} \x1B[0m"
# Build
make ${mcu_and_params[$i]} AVR_FREQ=${clock_and_baud[$j]} BAUD_RATE=${clock_and_baud[$j+1]} ${mcu_and_params[$i+1]}
make ${mcu_and_params[$i]} AVR_FREQ=${clock_and_baud[$j]} BAUD_RATE=${clock_and_baud[$j+1]} ${mcu_and_params[$i+1]} $*
done
done

Expand Down
44 changes: 44 additions & 0 deletions optiboot/bootloaders/optiboot/makeall.tiny.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
make attiny1634at12 $*
make attiny1634at16 $*
make attiny1634at8 $*
make attiny1634at8_5v $*
make attiny1634at737 $*
make attiny1634at921 $*
make attiny1634at110 $*
make attiny1634at147 $*

make attiny1634at12ser1 $*
make attiny1634at16ser1 $*
make attiny1634at8ser1 $*
make attiny1634at8_5vser1 $*
make attiny1634at737ser1 $*
make attiny1634at921ser1 $*
make attiny1634at110ser1 $*
make attiny1634at147ser1 $*


make attiny841 $*
make attiny841at184 $*
make attiny841at147 $*
make attiny841at110 $*
make attiny841at921 $*
make attiny841at737 $*
make attiny841at20 $*
make attiny841at16 $*
make attiny841at12 $*
make attiny841at8 $*
make attiny841at8_5v $*

make attiny841at184ser1 $*
make attiny841at147ser1 $*
make attiny841at110ser1 $*
make attiny841at921ser1 $*
make attiny841at737ser1 $*
make attiny841at20ser1 $*
make attiny841at16ser1 $*
make attiny841at12ser1 $*
make attiny841at8ser1 $*

make attiny841at20noLED $*
make attiny841at16noLED $*
make attiny841at8noLED $*
78 changes: 77 additions & 1 deletion optiboot/bootloaders/optiboot/optiboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@
/* handling, did MORE Makefile mods. EEPROM support now */
/* fits in 512 bytes, if you turn off LED Blinking. */
/* Various bigboot and virboot targets were fixed. */
/* Version 8.0 adds the do_spm code callable from Apps. */
/* */
/* It would be good if versions implemented outside the */
/* official repository used an out-of-seqeunce version */
Expand All @@ -164,6 +165,10 @@
/**********************************************************/
/* Edit History: */
/* */
/* Sep 2018 */
/* 8.0 WestfW (and MCUDude) */
/* Include do_spm routine callable from the app */
/* at BOOTSTART+2, controllable with compile option */
/* July 2018 */
/* 7.0 WestfW (with much input from Others) */
/* Fix MCUSR treatement as per much discussion, */
Expand Down Expand Up @@ -246,7 +251,7 @@
/* 4.1 WestfW: put version number in binary. */
/**********************************************************/

#define OPTIBOOT_MAJVER 7
#define OPTIBOOT_MAJVER 8
#define OPTIBOOT_MINVER 0

/*
Expand Down Expand Up @@ -396,6 +401,7 @@ typedef uint8_t pagelen_t;
* supress some compile-time options we want.)
*/

void pre_main(void) __attribute__ ((naked)) __attribute__ ((section (".init8")));
int main(void) __attribute__ ((OS_main)) __attribute__ ((section (".init9"))) __attribute__((used));

void __attribute__((noinline)) __attribute__((leaf)) putch(char);
Expand Down Expand Up @@ -487,6 +493,23 @@ static addr16_t buff = {(uint8_t *)(RAMSTART)};
#endif // VIRTUAL_BOOT_PARTITION


/* everything that needs to run VERY early */
void pre_main(void) {
// Allow convenient way of calling do_spm function - jump table,
// so entry to this function will always be here, indepedent of compilation,
// features etc
asm volatile (
" rjmp 1f\n"
#ifndef APP_NOSPM
" rjmp do_spm\n"
#else
" ret\n" // if do_spm isn't include, return without doing anything
#endif
"1:\n"
);
}


/* main program starts here */
int main(void) {
uint8_t ch;
Expand Down Expand Up @@ -1158,6 +1181,59 @@ static inline void read_mem(uint8_t memtype, addr16_t address, pagelen_t length)
}


#ifndef APP_NOSPM

/*
* Separate function for doing spm stuff
* It's needed for application to do SPM, as SPM instruction works only
* from bootloader.
*
* How it works:
* - do SPM
* - wait for SPM to complete
* - if chip have RWW/NRWW sections it does additionaly:
* - if command is WRITE or ERASE, AND data=0 then reenable RWW section
*
* In short:
* If you play erase-fill-write, just set data to 0 in ERASE and WRITE
* If you are brave, you have your code just below bootloader in NRWW section
* you could do fill-erase-write sequence with data!=0 in ERASE and
* data=0 in WRITE
*/
static void do_spm(uint16_t address, uint8_t command, uint16_t data) __attribute__ ((used));
static void do_spm(uint16_t address, uint8_t command, uint16_t data) {
// Do spm stuff
asm volatile (
" movw r0, %3\n"
" __wr_spmcsr %0, %1\n"
" spm\n"
" clr r1\n"
:
: "i" (_SFR_MEM_ADDR(__SPM_REG)),
"r" ((uint8_t)command),
"z" ((uint16_t)address),
"r" ((uint16_t)data)
: "r0"
);

// wait for spm to complete
// it doesn't have much sense for __BOOT_PAGE_FILL,
// but it doesn't hurt and saves some bytes on 'if'
boot_spm_busy_wait();
#if defined(RWWSRE)
// this 'if' condition should be: (command == __BOOT_PAGE_WRITE || command == __BOOT_PAGE_ERASE)...
// but it's tweaked a little assuming that in every command we are interested in here, there
// must be also SELFPRGEN set. If we skip checking this bit, we save here 4B
if ((command & (_BV(PGWRT)|_BV(PGERS))) && (data == 0) ) {
// Reenable read access to flash
__boot_rww_enable_short();
}
#endif
}
#endif



#ifdef BIGBOOT
/*
* Optiboot is designed to fit in 512 bytes, with a minimum feature set.
Expand Down
95 changes: 54 additions & 41 deletions optiboot/bootloaders/optiboot/optiboot_atmega1280.hex
Original file line number Diff line number Diff line change
@@ -1,44 +1,57 @@
:020000021000EC
:10FC0000112484B7882349F0982F9A70923029F0F4
:10FC100081FF02C097EF94BF10D185E080938100EF
:10FC200082E08093C00088E18093C10086E08093E9
:10FC3000C20080E18093C4008EE0EAD0279A86E07B
:10FC400020E33CEF91E0309385002093840096BB45
:10FC5000B09BFECF1F9AA8954091C00047FD02C0FF
:10FC6000815089F7FF24F39455E0E52E61E1D62E0B
:10FC7000C3D08134C1F4C0D0C82FD0D0C23809F469
:10FC80003AC0C13869F487E00CC0843709F482C0F7
:10FC9000853709F0A2C0C2D08EE1A7D087E9A5D0F0
:10FCA00083E0A3D09FC0823411F484E103C0853483
:10FCB00019F485E0BBD096C0853579F49DD0082F26
:10FCC0009BD0182F87FF03C08BB7816002C08BB712
:10FCD0008E7F8BBF000F111F84C0863581F48CD0BE
:10FCE0008D3459F489D0CBB787D0C170880FC82B19
:10FCF000CBBF81E09BD080E0D4CF83E0FBCF8436C4
:10FD000009F0C3CF79D0C82FD0E0DC2FCC2774D036
:10FD1000C82B72D0C82E5E01812C32E0932E6CD09D
:10FD2000F40181934F01F1E0AF1AB108C1F776D029
:10FD300085E4C81212C0DE5F4801A12C92E0B92E02
:10FD4000AC16BD0609F44EC0F50161915F01C40116
:10FD500082D0FFEF8F1A9F0AF3CF83E0F80187BFAD
:10FD6000E89507B600FCFDCFA0E0B2E0F8018D9168
:10FD70009D910C01F7BEE8951124229732962097A9
:10FD8000B1F7F801E7BEE89507B600FCFDCFD7BE96
:10FD9000E89528C031D0C82FD0E0DC2FCC272CD05C
:10FDA0005E01A82A29D0982E39D0E801F5E49F12E7
:10FDB0000BC0CE0148D019D081E0A81AB108219615
:10FDC000A114B104B1F70EC0FE018791EF010DD06F
:10FDD000E1E0AE1AB108C1F705C0813511F488E041
:10FDE00017D01CD080E101D043CF9091C00095FF87
:10FDF000FCCF8093C60008958091C00087FFFCCFA0
:10FE00008091C00084FD01C0A8958091C60008952E
:10FE1000E0E6F0E098E1908380830895EDDF8032A2
:10FE200019F088E0F5DFFFCF84E1DFCFCF93C82F53
:10FE3000E3DFC150E9F7CF91F1CF282E80E0E8DF72
:10FE4000E0E0FF270994F999FECF92BD81BDF89AB1
:10FE5000992780B50895262FF999FECF1FBA92BD34
:10FE600081BD20BD0FB6F894FA9AF99A0FBE01969B
:02FE70000895F3
:02FFFE000007FA
:10FC000012E0A0E0B2E0ECEAFEEF01E00BBF02C0C0
:10FC100007900D92AC39B107D9F701C021C1112469
:10FC200084B7882369F0982F9A70923049F081FF49
:10FC300002C097EF94BF282E80E0FDD00C94000006
:10FC400085E08093810082E08093C00088E180930A
:10FC5000C10086E08093C20080E18093C4008EE002
:10FC6000EAD0279A86E020E33CEF91E030938500CC
:10FC70002093840096BBB09BFECF1F9AA89540911D
:10FC8000C00047FD02C0815089F7FF24F39455E07E
:10FC9000E52E61E1D62EC3D08134C1F4C0D0C82F87
:10FCA000D0D0C23809F43AC0C13869F488E00CC039
:10FCB000843709F482C0853709F0A2C0C2D08EE132
:10FCC000A7D087E9A5D083E0A3D09FC0823411F4E8
:10FCD00084E103C0853419F485E0BBD096C0853536
:10FCE00079F49DD0082F9BD0182F87FF03C08BB7C6
:10FCF000816002C08BB78E7F8BBF000F111F84C045
:10FD0000863581F48CD08D3459F489D0CBB787D027
:10FD1000C170880FC82BCBBF81E09BD080E0D4CFCF
:10FD200083E0FBCF843609F0C3CF79D0C82FD0E071
:10FD3000DC2FCC2774D0C82B72D0C82E5E01812C4A
:10FD400032E0932E6CD0F40181934F01F1E0AF1AB1
:10FD5000B108C1F776D085E4C81212C0DE5F480151
:10FD6000A12C92E0B92EAC16BD0609F44EC0F501E7
:10FD700061915F01C4018CD0FFEF8F1A9F0AF3CF0E
:10FD800083E0F80187BFE89507B600FCFDCFA0E04F
:10FD9000B2E0F8018D919D910C01F7BEE895112418
:10FDA000229732962097B1F7F801E7BEE89507B69B
:10FDB00000FCFDCFD7BEE89528C031D0C82FD0E0D9
:10FDC000DC2FCC272CD05E01A82A29D0982E39D040
:10FDD000E801F5E49F120BC0CE0152D019D081E0AA
:10FDE000A81AB1082196A114B104B1F70EC0FE0102
:10FDF0008791EF010DD0E1E0AE1AB108C1F705C05F
:10FE0000813511F488E017D01CD080E101D043CFB8
:10FE10009091C00095FFFCCF8093C600089580911B
:10FE2000C00087FFFCCF8091C00084FD01C0A89571
:10FE30008091C6000895E0E6F0E098E19083808329
:10FE40000895EDDF803219F088E0F5DFFFCF84E11F
:10FE5000DFCFCF93C82FE3DFC150E9F7CF91F1CFC8
:10FE6000FC010A0167BFE895112407B600FCFDCF2D
:10FE7000667029F0452B19F481E187BFE895089554
:10FE8000F999FECF92BD81BDF89A992780B5089562
:10FE9000262FF999FECF1FBA92BD81BD20BD0FB6A6
:0CFEA000F894FA9AF99A0FBE01960895A2
:10FEAC0056657273696F6E3D382E30004F50544951
:10FEBC00424F4F545F435553544F4D5645523D306E
:10FECC00004465766963653D61746D6567613132C7
:10FEDC00383000465F4350553D313630303030308D
:10FEEC00304C00424947424F4F543D3100427569F6
:10FEFC006C743A53657020323020323031383A30DD
:10FF0C00313A31383A343300554152543D30004285
:10FF1C004155445F524154453D313135323030000A
:10FF2C004C45443D4237004C45445F535441525478
:0CFF3C005F464C41534845533D330000E4
:02FFFE000008F9
:040000031000FC00ED
:00000001FF
Loading

1 comment on commit e9af37f

@majekw
Copy link
Contributor

@majekw majekw commented on e9af37f Sep 20, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Size changes after this commit

target \ compiler 1.0.6 1.6.9 1.6.13 1.8.5 microchip
atmega128 708/(+42):arrow_up_small: 692/(+42):arrow_up_small: 704/(+42):arrow_up_small: 704/(+42):arrow_up_small: 680/(+42):arrow_up_small:
atmega1280 710/(+36):arrow_up_small: 698/(+36):arrow_up_small: 712/(+36):arrow_up_small: 712/(+36):arrow_up_small: 686/(+36):arrow_up_small:
atmega1281 714/(+36):arrow_up_small: 698/(+36):arrow_up_small: 710/(+36):arrow_up_small: 710/(+36):arrow_up_small: 684/(+36):arrow_up_small:
atmega1284 712/(+36):arrow_up_small: 694/(+36):arrow_up_small: 706/(+36):arrow_up_small: 706/(+36):arrow_up_small: 678/(+36):arrow_up_small:
atmega1284p 712/(+36):arrow_up_small: 694/(+36):arrow_up_small: 706/(+36):arrow_up_small: 706/(+36):arrow_up_small: 678/(+36):arrow_up_small:
atmega16 502/(+36):arrow_up_small: 466/(+36):arrow_up_small: 464/(+36):arrow_up_small: 464/(+36):arrow_up_small: 462/(+36):arrow_up_small:
atmega162 506/(+36):arrow_up_small: 464/(+36):arrow_up_small: 462/(+36):arrow_up_small: 462/(+36):arrow_up_small: 456/(+36):arrow_up_small:
atmega164a x/x:exclamation: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega164p x/x:exclamation: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega168 x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega168p x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega168pb LED=B5 x/x:exclamation: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega169 x/492:boom: 484/(+36):arrow_up_small: 482/(+36):arrow_up_small: 482/(+36):arrow_up_small: 476/(+36):arrow_up_small:
atmega169p x/492:boom: 484/(+36):arrow_up_small: 482/(+36):arrow_up_small: 482/(+36):arrow_up_small: 476/(+36):arrow_up_small:
atmega2560 714/(+36):arrow_up_small: 698/(+36):arrow_up_small: 710/(+36):arrow_up_small: 710/(+36):arrow_up_small: 684/(+36):arrow_up_small:
atmega2561 714/(+36):arrow_up_small: 698/(+36):arrow_up_small: 710/(+36):arrow_up_small: 710/(+36):arrow_up_small: 684/(+36):arrow_up_small:
atmega32 506/(+36):arrow_up_small: 468/(+36):arrow_up_small: 464/(+36):arrow_up_small: 464/(+36):arrow_up_small: 462/(+36):arrow_up_small:
atmega324a x/x:exclamation: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega324p x/x:exclamation: 484/(+34):arrow_up_small: 482/(+34):arrow_up_small: 482/(+34):arrow_up_small: 476/(+34):arrow_up_small:
atmega324pa x/x:exclamation: 484/(+36):arrow_up_small: 482/(+36):arrow_up_small: 482/(+36):arrow_up_small: 476/(+36):arrow_up_small:
atmega324pb x/x:exclamation: x/x:exclamation: x/x:exclamation: x/x:exclamation: x/x:exclamation:
atmega328 x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega328 BIGBOOT=1 618/(+36):arrow_up_small: 606/(+36):arrow_up_small: 608/(+36):arrow_up_small: 608/(+36):arrow_up_small: 600/(+36):arrow_up_small:
atmega328 LED_START_FLASHES=0 484/(+36):arrow_up_small: 440/(+36):arrow_up_small: 440/(+36):arrow_up_small: 440/(+36):arrow_up_small: 434/(+36):arrow_up_small:
atmega328 LED_START_FLASHES=0 LED_START_ON=1 SUPPORT_EEPROM=1 x/x:exclamation: x/506:boom: x/510:boom: x/510:boom: x/502:boom:
atmega328 LED_START_FLASHES=0 SUPPORT_EEPROM=1 x/x:exclamation: x/502:boom: x/506:boom: x/506:boom: x/498:boom:
atmega328pb LED=B5 x/x:exclamation: x/x:exclamation: x/x:exclamation: x/x:exclamation: x/x:exclamation:
atmega328_pro8 x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega328 SOFT_UART=1 x/494:boom: 488/(+36):arrow_up_small: 488/(+36):arrow_up_small: 488/(+36):arrow_up_small: 482/(+36):arrow_up_small:
atmega329 x/490:boom: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega3290 x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega3290p x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega329p x/490:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega64 666/(+42):arrow_up_small: 646/(+42):arrow_up_small: 654/(+42):arrow_up_small: 654/(+42):arrow_up_small: 634/(+42):arrow_up_small:
atmega640 x/x:exclamation: 692/(+34):arrow_up_small: 704/(+34):arrow_up_small: 704/(+34):arrow_up_small: 678/(+34):arrow_up_small:
atmega644p 672/(+36):arrow_up_small: 650/(+36):arrow_up_small: 658/(+36):arrow_up_small: 658/(+36):arrow_up_small: 638/(+36):arrow_up_small:
atmega649 666/(+36):arrow_up_small: 644/(+36):arrow_up_small: 654/(+36):arrow_up_small: 654/(+36):arrow_up_small: 634/(+36):arrow_up_small:
atmega6490 670/(+36):arrow_up_small: 648/(+36):arrow_up_small: 656/(+36):arrow_up_small: 656/(+36):arrow_up_small: 636/(+36):arrow_up_small:
atmega6490p x/x:exclamation: 648/(+36):arrow_up_small: 656/(+36):arrow_up_small: 656/(+36):arrow_up_small: 636/(+36):arrow_up_small:
atmega649p x/x:exclamation: 648/(+36):arrow_up_small: 656/(+36):arrow_up_small: 656/(+36):arrow_up_small: 636/(+36):arrow_up_small:
atmega8 504/(+38):arrow_up_small: 468/(+38):arrow_up_small: 464/(+38):arrow_up_small: 464/(+38):arrow_up_small: 462/(+38):arrow_up_small:
atmega8515 x/x:exclamation: 468/(+36):arrow_up_small: 464/(+36):arrow_up_small: 464/(+36):arrow_up_small: 462/(+36):arrow_up_small:
atmega8535 x/x:exclamation: 466/(+34):arrow_up_small: 462/(+34):arrow_up_small: 462/(+34):arrow_up_small: 460/(+34):arrow_up_small:
atmega88 x/492:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega88pb LED=B5 x/x:exclamation: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
atmega88p LED=B5 x/492:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
attiny1634 x/x:exclamation: 566/(+22):arrow_up_small: 566/(+22):arrow_up_small: 566/(+22):arrow_up_small: 556/(+22):arrow_up_small:
attiny167 x/x:exclamation: 586/(+22):arrow_up_small: 586/(+22):arrow_up_small: 586/(+22):arrow_up_small: 576/(+22):arrow_up_small:
attiny828 x/x:exclamation: x/x:exclamation: x/x:exclamation: x/x:exclamation: x/x:exclamation:
attiny84 678/(+22):arrow_up_small: 566/(+22):arrow_up_small: 566/(+22):arrow_up_small: 566/(+22):arrow_up_small: 568/(+22):arrow_up_small:
attiny841 x/x:exclamation: 600/(+22):arrow_up_small: 598/(+22):arrow_up_small: 598/(+22):arrow_up_small: 596/(+22):arrow_up_small:
attiny87 x/x:exclamation: 606/(+22):arrow_up_small: 604/(+22):arrow_up_small: 604/(+22):arrow_up_small: 602/(+22):arrow_up_small:
bobuino 712/(+36):arrow_up_small: 694/(+36):arrow_up_small: 706/(+36):arrow_up_small: 706/(+36):arrow_up_small: 678/(+36):arrow_up_small:
diecimila x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
lilypad x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
lilypad_resonator x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
luminet 678/(+22):arrow_up_small: 566/(+22):arrow_up_small: 566/(+22):arrow_up_small: 566/(+22):arrow_up_small: 568/(+22):arrow_up_small:
mega1280 710/(+36):arrow_up_small: 698/(+36):arrow_up_small: 712/(+36):arrow_up_small: 712/(+36):arrow_up_small: 686/(+36):arrow_up_small:
mega2560 714/(+36):arrow_up_small: 698/(+36):arrow_up_small: 710/(+36):arrow_up_small: 710/(+36):arrow_up_small: 684/(+36):arrow_up_small:
mighty1284 712/(+36):arrow_up_small: 694/(+36):arrow_up_small: 706/(+36):arrow_up_small: 706/(+36):arrow_up_small: 678/(+36):arrow_up_small:
pro16 x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
pro20 x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
pro8 x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
sanguino 672/(+36):arrow_up_small: 650/(+36):arrow_up_small: 658/(+36):arrow_up_small: 658/(+36):arrow_up_small: 638/(+36):arrow_up_small:
virboot328 x/x:exclamation: 604/(+36):arrow_up_small: 604/(+36):arrow_up_small: 604/(+36):arrow_up_small: 594/(+36):arrow_up_small:
virboot8 x/x:exclamation: 608/(+38):arrow_up_small: 604/(+38):arrow_up_small: 604/(+38):arrow_up_small: 606/(+38):arrow_up_small:
wildfire 712/(+36):arrow_up_small: 694/(+36):arrow_up_small: 706/(+36):arrow_up_small: 706/(+36):arrow_up_small: 678/(+36):arrow_up_small:
wildfirev2 712/(+36):arrow_up_small: 694/(+36):arrow_up_small: 706/(+36):arrow_up_small: 706/(+36):arrow_up_small: 678/(+36):arrow_up_small:
wildfirev3 712/(+36):arrow_up_small: 694/(+36):arrow_up_small: 706/(+36):arrow_up_small: 706/(+36):arrow_up_small: 678/(+36):arrow_up_small:
xplained168pb x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
xplained328p x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:
xplained328pb x/494:boom: 486/(+36):arrow_up_small: 484/(+36):arrow_up_small: 484/(+36):arrow_up_small: 478/(+36):arrow_up_small:

x - build failed
nd - no data
A/B - A is current size, B is old size
(B) - difference in size between current data and reference
Icons:
❔ - no data for both versions
❓ - no data for new version
✔️ - new data
❗- both versions failed
💥 - new version failed
✔️ - old version failed but new is ok
✅ - both versions are ok, but no size difference
🔼 - new version is larger
⬇️ - new version is smaller

Please sign in to comment.