PRG=receiver
OBJ=usbdrv/usbdrv.o usbdrv/oddebug.o receiver.o rf12.o usbdrv/usbdrvasm.o
SRC=usbdrv/usbdrv.c usbdrv/oddebug.c receiver.c rf12.c usbdrv/usbdrvasm.S
PRG2=spectrum
OBJ2=usbdrv/usbdrv.o usbdrv/oddebug.o spectrum.o rf12.o usbdrv/usbdrvasm.o
SRC2=usbdrv/usbdrv.c usbdrv/oddebug.c spectrum.c rf12.c usbdrv/usbdrvasm.S


MCU=atmega8
LPT=/dev/parport0

BURNCMD=uisp -dprog=stk200 -dlpt=$(LPT) --segment=flash --upload
#BURNCMD=avrusbboot
ERASECMD=uisp -dprog=stk200 -dlpt=$(LPT) --segment=flash --erase

DEFS=-Iusbdrv -I. -DF_CPU=12000000UL
OPTIMIZE=-Os -g -Wall -ffreestanding -fshort-enums -fpack-struct -std=gnu99

#	-mcall-prologues
#OPTIMIZE=-Os -Wall -g

CC=avr-gcc
LD=avr-gcc
OBJCOPY=avr-objcopy
OBJDUMP=avr-objdump
LIBS=-lm

CFLAGS=-mmcu=$(MCU) $(OPTIMIZE) $(DEFS)
LDFLAGS=-Wl,-Map,$(PRG).map

all: $(PRG).elf $(PRG2).elf lst text eeprom
#	@ls -l *.bin

clean:
	-rm -rf $(OBJ) $(PRG).elf $(PRG2).elf *.lst *.map *.srec *.hex *.bin

test.elf: test.o usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
	avr-size $@

$(PRG).elf: $(OBJ)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)

$(PRG2).elf: $(OBJ2)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)

lst: $(PRG).lst

%.lst: %.elf
	$(OBJDUMP) -h -S $< > $@

text: srec #hex bin srec

hex: $(PRG).hex
bin: $(PRG).bin
srec: $(PRG).srec $(PRG2).srec

%.hex: %.elf
	$(OBJCOPY) -j .text -j .data -O ihex $< $@

%.bin: %.elf
	$(OBJCOPY) -j .text -j .data -O binary $< $@

%.srec: %.elf
	$(OBJCOPY) -j .text -j .data -O srec $< $@

%.s: %.c
	$(CC) $(CFLAGS) -o $@ -S $^

%.o: %.S
	$(CC) $(DEFS) -mmcu=$(MCU) -x assembler-with-cpp -c $< -o $@

eeprom: ehex ebin esrec

ehex: $(PRG)_eeprom.hex
ebin: $(PRG)_eeprom.bin
esrec: $(PRG)_eeprom.srec

depend:	.depend

.depend: $(SRC)
	$(CC) $(CFLAGS) -M $^ > $@

include .depend

%_eeprom.hex: %.elf
	$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@

%_eeprom.bin: %.elf
	$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@

%_eeprom.srec: %.elf
	$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@


burn: all
	$(ERASECMD)
	$(BURNCMD) if=$(PRG).srec

burn-$(PRG2): $(PRG2).srec
	$(ERASECMD)
	$(BURNCMD) if=$(PRG2).srec


## fuses, original settings:
## Fuse Low Byte      = 0xe1 1110 0001
## Fuse High Byte     = 0xd9 1101 1001

# low:
# BODLEVEL 1
# BODEN    1
# SUT1     1
# SUT0     0
# CKSEL3   0
# CKSEL2   0
# CKSEL1   0
# CKSEL0   1

# high:
# RSTDISBL 1
# WDTON    1
# SPIEN    0
# CKOPT    0
# EESAVE   1
# BOOTSZ1  0
# BOOTSZ0  0
# BOOTRST  1 -> 0

# RC 8MHz fuse low 0xe4
# XTAL 12MHz low 0x9f high 0xc9 ->0xc8 (bootloader)
