Tiny AVR/PIC Bootloader+

Tested PIC Compilers:


In green: compilers working without modifications to the application source code.
In blue
compilers working with modifications to the application source code (your code, or the linker script,nor remap reset/interrupts vectors to new locations, etc...)
In red: compilers not working.


Compiler's name Tips - Remarks
PIC 10/12/16/18 MCUs
8 bits
CCS C Compiler Works out of the box - Don't modify your code
Great Cow Basic (link) Works out of the box - Don't modify your code
Microchip C18 Compiler Works out of the box - Don't modify your code
Microchip XC8 It can happen you get "hex file too large" when trying to bootload an hex file created with XC8 compiler. It's because XC8 tries to fill the program memory by its end, and not from its beginning.
To avoid this, you must force XC8 to use a program memory address range not overlapping with the bootloader firmware zone.

To do so, the correct address range must be put in the MPLAX X IDE:
    > Project Properties > XC8 global options > XC8 linker > Option categories: Memory model > ROM ranges

The correct address is: "Reset vector" to "Max OnChip Program memory - bootloader firmware length"
* "Reset vector" and "Max OnChip Program memory" can be found in the "Memory organisation" from the device's datasheet.
* "bootloader firmware length" can be found in the "piccodes.ini" file in the the same folder than "TinyMultiBootloader+.exe"

As an example, for a PIC18F1330 you must put in "ROM ranges": 0-1F37 (i.e: 0 = "Reset vector" / 1F3F = "Max OnChip Program memory" (0x1FFF) - "PIC18F1330 bootloader firmware length" (200 = 0xC8)
JALv2 (link)
PIC16F: (From Sunish:) just add these two lines at the beginning of your code:
pragma bootloader bloader
pragma fuses no

PIC18F: (From Dan and Sunish:) just add these two lines at the beginning of your code:
pragma bootloader LOADER18
pragma fuses no

PIC18FxxKxx: (From Dan:) just add these two lines at the beginning of your code:
pragma bootloader LOADER18 2
pragma fuses no
PIC18 assembler (From Dan:)
1.With or without interrupt, you must use the instruction 'goto' in the first four words.
2.You can not use the relative jump instruction in the frist four words (rcall, bra).
3.Maximum program size = max_flash_size - bootloader_size

source Examples:
[good]
0000:call AAA
0002:goto INIT
[good]
0000:goto INIT
[Not Good]
0000:rcall AAA
0001:rcall BBB
0002:goto INIT
[Not Good]
0000:call AAA
0002:bra INIT
[Not Good]
0000:bra INIT
Mikro C Waiting feedback from MAIP
SourceBoost - BoostC (link)
Works out of the box - Don't modify your code (thanks to TFCROFT4)
HI-TECH C compiler To test...
SDCC (link) To test...


PIC 24 MCUs / dsPIC DSCs
16 bits






PIC 32 MCUs
32 bits
Microchip C32 Compiler Works out of the box - Don't modify your code
mikroC PRO for PIC32 Works since v0.6.1 - Don't modify your code