# is public domain), believed to be neutral to any flavor of "make"
# (GNU make, BSD make, SysV make)
-#MCU = atmega8
-MCU = atmega328P
-F_CPU = 20000000
-#BAUD = 19200
-BAUD = 57600
+#For a description of of the following built options see 'config.inc'
+#Defining options here will override the defaults from the config file.
+
+#MCU = atmega88
+MCU = atmega328p
+#F_CPU = 20000000
+#DRAM_8BIT = 0
+#BAUD = 57600
#BAUD = 115200
+#I2C_SUPPORT = 0
+#EM_Z80 = 0
+#FAT16_SUPPORT = 0
+#CPMDSK_SUPPORT = 0
+#MMCBOOTLOADER = 0
-DRAM_8BIT = 1
-#I2C = 1
TARGET = avrcpm
-ASRC0 = avrcpm.asm
+ASRC0 = avrcpm.asm
-ASRC0 += config.inc macros.inc init.asm dram-refresh.asm timer.asm utils.asm
+ASRC0 += config.inc macros.inc init.asm dram-refresh.asm timer.asm utils.asm
ASRC0 += mmc.asm mmc-old.asm virt_ports.asm
-ASRC0 += dsk_cpm.asm dsk_fat16.asm dsk_fsys.asm dsk_mgr.asm dsk_ram.asm
+ASRC0 += dsk_cpm.asm dsk_fat16.asm dsk_fsys.asm dsk_mgr.asm dsk_ram.asm
ASRC0 += 8080int-orig.asm 8080int.asm 8080int-jmp.asm 8080int-t3.asm 8080int-t3-jmp.asm Z80int-jmp.asm
+EXTRA_DIST := autorevision.cache
+
+PREFIX = $(PROG)_$(VERSION)
+DIST_NAME = $(PREFIX).zip
+
+$(foreach X,$(subst =,:=,$(subst ",,$(filter VCS_%,\
+ $(shell autorevision -q -t sh -o ./autorevision.cache)))),$(eval $X))
+
+VERSION := $(shell echo "$(VCS_TAG)" | sed -e 's/^v//g')
+VMAJOR := $(shell echo "$(VCS_TAG)" | sed -E 's/([^0-9]*)([0-9]+)([.])([0-9]+)([^0-9]*)/\2/')
+VMINOR := $(shell echo "$(VCS_TAG)" | sed -E 's/([^0-9]*)([0-9]+)([.])([0-9]+)([^0-9]*)/\4/')
+
+
+ifneq ($(VCS_TICK),0)
+ VERSION := $(VERSION)-$(VCS_TICK)
+endif
+ifneq ($(VCS_BRANCH),master)
+ VERSION := $(VERSION)-$(VCS_BRANCH)
+endif
+ifeq ($(VCS_WC_MODIFIED),1)
+ VERSION := $(VERSION)-dirty
+endif
+
ifneq ($(DRAM_8BIT),0)
ASRC0 += dram-8bit.inc dram-8bit.asm sw-uart.asm i2c.asm
else
- ASRC0 += dram-4bit.inc dram-4bit.asm hw-uart.asm
+ ASRC0 += dram-4bit.inc dram-4bit.asm hw-uart.asm
endif
-#ASRC := $(ASRC0) svnrev.inc
-ASRC := $(ASRC0) svnrev.inc
+ASRC = $(ASRC0)
# Place -D or -U options here
-CDEFS = -DF_CPU=$(F_CPU) -DBAUD=$(BAUD) -D$(MCU) -DDRAM_8BIT=$(DRAM_8BIT)
-ifdef I2C
- CDEFS += -DI2C=$(I2C)
+CDEFS = -D$(MCU) -DVERSION=\"$(VERSION)\" -DVMAJOR=$(VMAJOR) -DVMINOR=$(VMINOR)
+ifdef F_CPU
+ CDEFS += -DF_CPU=$(F_CPU)
+endif
+ifdef DRAM_8BIT
+ CDEFS += -DDRAM_8BIT=$(DRAM_8BIT)
+endif
+ifdef BAUD
+ CDEFS += -DBAUD=$(BAUD)
+endif
+ifdef I2C_SUPPORT
+ CDEFS += -DI2C_SUPPORT=$(I2C_SUPPORT)
+endif
+ifdef EM_Z80
+ CDEFS += -DEM_Z80=$(EM_Z80)
+endif
+ifdef FAT16_SUPPORT
+ CDEFS += -DFAT16_SUPPORT=$(FAT16_SUPPORT)
+endif
+ifdef CPMDSK_SUPPORT
+ CDEFS += -DCPMDSK_SUPPORT=$(CPMDSK_SUPPORT)
+endif
+ifdef MMCBOOTLOADER
+ CDEFS += -DMMCBOOTLOADER=$(MMCBOOTLOADER)
+endif
+ifdef TESTVERSION
+ CDEFS += -DTESTVERSION=$(TESTVERSION)
endif
-ASPATH = C:/Programme/Atmel/AVR\ Tools/AvrAssembler2
-DEFS = $(ASPATH)/Appnotes
+ASPATH := C:/Programme/Atmel/AVR\ Tools/AvrAssembler2
+DEFS := $(ASPATH)/Appnotes
ifeq "$(OS)" "Windows_NT"
PLATFORM=win32
AS = $(WINE) $(ASPATH)/avrasm2.exe
ASFLAGS = -I $(DEFS) $(CDEFS)
+OBJCOPY = avr-objcopy
+CRCGEN = crcgen
+
+HEXTOBIN = $(OBJCOPY) -I ihex -O binary --gap-fill 0xff
+
# Programming support using avrdude. Settings and variables.
AVRDUDE_PROGRAMMER = dragon_isp
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
-
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_NO_VERIFY = -V
# Increase verbosity level. Please use this when submitting bug
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_VERBOSE = -v -v
REMOVE = rm -f
MV = mv -f
-
-# Define all listing files.
-#LST = $(ASRC:.asm=.lst)
-
-# Combine all necessary flags and optional flags.
-# Add target processor to flags.
-ALL_ASFLAGS = $(ASFLAGS)
-
-.PHONY: all hex eep lst map program flash eeprom tags clean
+.PHONY: all bin hex eep lst map program flash eeprom tags clean
# Default target.
all: hex lst
-hex: $(TARGET).hex $(ASRC)
-eep: $(TARGET).eep $(ASRC)
-lst: $(TARGET).lst $(ASRC)
-map: $(TARGET).map $(ASRC)
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lst: $(TARGET).lst
+map: $(TARGET).map
+bin: $(TARGET)-$(VMAJOR).$(VMINOR).bin
-# Program the device.
+# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
$(TARGET).lst: $(ASRC)
$(TARGET).map: $(ASRC)
-#.SUFFIXES: .hex .eep .lst
+
.SUFFIXES:
+%-$(VMAJOR).$(VMINOR).bin: %.hex
+ $(HEXTOBIN) $< $@
+ $(CRCGEN) $@
+
%.hex: %.asm
- $(AS) $(ALL_ASFLAGS) -fI -o $@ $<
+ $(AS) $(ASFLAGS) -fI -o $@ $<
%.lst: %.asm
- @$(AS) $(ALL_ASFLAGS) -v0 -f- -l $@ $<
+ @$(AS) $(ASFLAGS) -v0 -f- -l $@ $<
%.map: %.asm
- $(AS) $(ALL_ASFLAGS) -v0 -f- -m $@ $<
+ $(AS) $(ASFLAGS) -v0 -f- -m $@ $<
tags: $(SRC) $(ASRC)
ctags $(SRC) $(ASRC)
-svnrev.inc: $(ASRC0)
- @svnrev -osvnrev.inc $^
-
# Target: clean project.
clean:
- $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).obj $(TARGET).map $(TARGET).lst
-
+ $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).obj $(TARGET).map $(TARGET).lst \
+ $(TARGET)-$(VMAJOR).$(VMINOR).bin