A bootloader does not allow for ICD akd In Circuit Debugging. The $50 or so for a Junebug or PICkit2 is well worth the money go get it.
BoostC is a good compiler choice.
The difference between boostC and C18 are small from the syntax level. Given the basic layout of a simple bootC program it is easy to see how C18 programs can be modified to run with bootC.
This is a file I wrote that allows me to compile the same code using BoostC or C18. If you know C it should make the differences clear. Mostly it is setting up the chip, register and register bit field names. In this file the bootC #pragma DATA and C18 #prarma config settings are for a 18F1320 the junebutg target chip. They should be modified as needed.
Code:
/*
* Junebug Demo
* Purpose: Demonstrate cooporative multitasking
*
* File: multiCompiler.h
* Software: BoostC or Microchip C18 compilers
* Hardware: Junebug (or other debugger + breadboarded circuit)
*
* These defiles allow the use of more then one compiler.
* Register names ending with a single _ are byte referances.
* Register names ending with a dual __ are bit referances.
*
* by Daniel Johnson
* July 2008
*/
#ifdef _BOOSTC
#define FOUND_COMPILER
#define lata_ lata
#define trisa_ trisa
#define porta_ porta
#define latb_ latb
#define trisb_ trisb
#define portb_ portb
#define intcon_ intcon
#define intcon2_ intcon2
#define osccon_ osccon
#define t0con_ t0con
#define t0con__ t0con
#define adcon1_ adcon1
#include <system.h>
#pragma CLOCK_FREQ 8000000
#pragma DATA _CONFIG1H, _INTIO2_OSC_1H
#pragma DATA _CONFIG2H, _WDT_OFF_2H
#pragma DATA _CONFIG3H, _MCLRE_ON_3H
#pragma DATA _CONFIG4L, _LVP_OFF_4L
#endif
// MCC18
#ifdef __18CXX
#define FOUND_COMPILER
#define lata_ LATA
#define trisa_ TRISA
#define porta_ PORTA
#define latb_ LATB
#define trisb_ TRISB
#define portb_ PORTB
#define intcon_ INTCONbits
#define intcon2_ INTCON2bits
#define osccon_ OSCCONbits
#define t0con__ T0CONbits
#define t0con_ T0CON
#define adcon1_ ADCON1
#pragma config OSC = INTIO2, WDT = OFF, LVP = OFF
#include <p18f1320.h>
// code to make C18 interrupt look like BoostC's
void interrupt(void);
#pragma code low_vector=0x18
void low_interrupt (void)
{
_asm GOTO interrupt _endasm
}
#pragma code
#pragma interruptlow interrupt
#endif
#ifndef FOUND_COMPILER
error: unknown compiler
#endif