From 8a500c7f3634212263ab1291c139d9c6a8967b8b Mon Sep 17 00:00:00 2001 From: Leo C Date: Wed, 29 May 2019 22:26:45 +0200 Subject: [PATCH] Add makefiles (replace Tup) --- .gitignore | 8 +++ avr/Makefile | 111 ++++++++++++++++++++++++++++++++++++++++ mk/avr.rules.mk | 106 ++++++++++++++++++++++++++++++++++++++ mk/cpm.rules.mk | 90 ++++++++++++++++++++++++++++++++ z180/Makefile | 133 ++++-------------------------------------------- 5 files changed, 326 insertions(+), 122 deletions(-) create mode 100644 avr/Makefile create mode 100644 mk/avr.rules.mk create mode 100644 mk/cpm.rules.mk diff --git a/.gitignore b/.gitignore index c267536..11165af 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,11 @@ /.tup /build-* /scratch +*.elf +*.hex +*.lss +*.map +*.rel +*.lst +z180/*.c +z180/*.h diff --git a/avr/Makefile b/avr/Makefile new file mode 100644 index 0000000..eab1d1f --- /dev/null +++ b/avr/Makefile @@ -0,0 +1,111 @@ + + +MCU := atmega1281 +F_CPU := 18432000 +DEBUG := 1 + +TARGET = stamp-monitor + +FATFSDIR := ../fatfs/source +FATFS := $(FATFSDIR)/ff.c $(FATFSDIR)/ffunicode.c + +SRC_Z := ../z180/hdrom.c ../z180/cfboot.c ../z180/cpuinfo.c + +SRC := main.c +SRC += cli.c cli_readline.c command.c command_tbl.c +SRC += cmd_run.c cmd_boot.c cmd_misc.c cmd_cpu.c +SRC += cmd_date.c cmd_mem.c cmd_gpio.c cmd_attach.c +SRC += cmd_loadihex.c cmd_loadcpm3.c cmd_sd.c cmd_fat.c +SRC += env.c con-utils.c print-utils.c getopt-min.c eval_arg.c +SRC += timer.c serial.c i2c.c bcd.c pcf8583.c mmc.c strerror.c +SRC += background.c z180-serv.c z80-if.c gpio.c +SRC += $(FATFS) +SRC += $(SRC_Z) + +#$(FATFS:%.c=%.o): CFLAGS += -fno-strict-aliasing +$(SRC_Z:%.c=%.o): CFLAGS += -D'const=const __flash' + + +# Place -D or -U options here +CDEFS := -DF_CPU=$(F_CPU)UL + +ifeq ($(MCU),atmega1281) + CDEFS += -DMCU_STRING=\"ATmega1281\" +else + CDEFS += -DMCU_STRING=\"ATmega2561\" +endif + +ifdef DEBUG +SRC += debug.c +CDEFS += -DDEBUG=2 +endif + +# Place -I options here +CINCS := -I../include + +OPT = s +CSTANDARD = -std=gnu11 +CDEBUG = +CWARN = -Wall -Wextra -Wstrict-prototypes -Wredundant-decls +CTUNING = -funsigned-char -fshort-enums -funsigned-bitfields -fpack-struct +CTUNING += -mrelax -fno-common +CTUNING += -fno-move-loop-invariants +CTUNING += -fno-tree-loop-optimize +#CTUNING += -fno-split-wide-types +CEXTRA = -ffunction-sections -fdata-sections +#CEXTRA += -flto +CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) $(CTUNING) + + + +# Linker Options - Create mapfile with cross reference +LDFLAGS := -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--gc-sections + +# Programming support using avrdude. + +AVRDUDE_PROGRAMMER := dragon_isp +AVRDUDE_PORT := usb + + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#HFUSE = 0xDE +#LFUSE = 0xFF +#EFUSE = 0xFD + +# Fuse high byte: +# 0xda = 1 1 0 1 1 1 1 0 <-- BOOTRST (Boot Reset vector Enabled 0x3c00) +# ^ ^ ^ ^ ^ ^ ^------ BOOTSZ0 +# | | | | | +-------- BOOTSZ1 (Boot Flash section size 256 words) +# | | | | + --------- EESAVE (don't preserve EEPROM over chip erase) +# | | | +-------------- WDTON (WDT not always on) +# | | +---------------- SPIEN (allow serial programming) +# | +------------------ DWEN (debugWIRE is not enabled) +# +-------------------- RSTDISBL (reset pin is enabled) +# Fuse low byte: +# 0x9f = 1 1 1 1 1 1 1 1 +# ^ ^ \ / \--+--/ +# | | | +------- CKSEL 3..0 (Low Power Crystal) +# | | +--------------- SUT 1..0 (Crystal Osc, slowly rising power) +# | +------------------ CKOUT (Clock output disabled) +# +-------------------- CKDIV8 (don't divide clock by 8) +# Fuse Extended byte: +# 0x9f = 1 1 1 1 1 1 0 1 +# \-+-/ +# +------ Bodlevel (VCC = 2.7V) + +.PHONY: all build +# Default target. +all: build + +build: elf hex lss + +include ../mk/avr.rules.mk diff --git a/mk/avr.rules.mk b/mk/avr.rules.mk new file mode 100644 index 0000000..155397c --- /dev/null +++ b/mk/avr.rules.mk @@ -0,0 +1,106 @@ + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +RM = rm -f +COPY = cp + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F:%.o=%.d) + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) $(CFLAGS) $(GENDEPFLAGS) + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) + +# Be silent per default, but 'make V=1' will show all compiler calls. +ifneq ($(V),1) +Q := @ +NULL := 2>/dev/null +else +QP := \# +endif + +.PHONY: elf hex lss sym size +elf: $(TARGET).elf +hex: $(TARGET).hex +lss: $(TARGET).lss +sym: $(TARGET).sym + +size: $(TARGET).elf + @$(QP)printf " SIZE $(TARGET).elf\n" + $(Q)$(SIZE) $(TARGET).elf + +# Program the device. +.PHONY: flash fuses +flash: $(TARGET).hex + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) + +fuses: + $(AVRDUDE) $(AVRDUDE_FLAGS) -u -U hfuse:w:$(HFUSE):m -U lfuse:w:$(LFUSE):m + + +.SUFFIXES: .elf .hex .eep .lss .sym + +%.hex: %.elf + @$(QP)printf " OBJCOPY $(*).hex\n" + $(Q)$(OBJCOPY) -Oihex -R .eeprom $< $@ + + +# Create extended listing file from ELF output file. +%.lss: %.elf + @$(QP)printf " OBJDUMP $@\n" + $(Q)$(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @$(QP)printf " NM $@\n" + $(Q)$(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf %.map: $(OBJ) + @$(QP)printf " LD $@\n" + $(Q)$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +%.o: %.c + @$(QP)printf " CC $<\n" + $(Q)$(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Target: clean project. +.PHONY: clean distclean +clean: + @$(QP)printf " CLEAN\n" + $(Q)$(RM) $(TARGET).elf $(TARGET).lss $(TARGET).map $(TARGET).sym \ + $(OBJ) $(SRC:.c=.s) .dep/* + +distclean: clean + @$(QP)printf " DISTCLEAN\n" + $(Q)$(RM) $(TARGET).hex $(TARGET).tar.gz + +.PHONY: dist +dist: build + tar cvfz $(TARGET).tar.gz \ + $(SRC) \ + $(TARGET).hex $(TARGET).eep + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) diff --git a/mk/cpm.rules.mk b/mk/cpm.rules.mk new file mode 100644 index 0000000..a8ba51c --- /dev/null +++ b/mk/cpm.rules.mk @@ -0,0 +1,90 @@ + + +# Define a helper macro for debugging make errors online +# you can type "make print-VARIABLE" and it will show you +# how that ended up being resolved by all of the included +# makefiles. +print-%: + @echo $*=$($*) + + + +#CP/M emulator +CPMEMU = zxcc + +#Location of CP/M binaries +CPMBIN = /usr/local/lib/cpm/bin80 + +#AS = $(CPMEMU) $(CPMBIN)/m80.com +AS = $(CPMEMU) slr180.com +LN = $(CPMEMU) slrnk+.com +#LN = $(CPMEMU) ccpline.com + +RM = rm -f + + +ASM_OPT := HFS + + +comma:= , +empty:= +space:= $(empty) $(empty) + +ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2))) + +define cpm-asm = +COMMAND="$(AS) -$*/$(ASM_OPT)"; \ +OUTPUT=$$(mktemp); echo $${COMMAND}; \ +$${COMMAND} < $< > $${OUTPUT}; \ +grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \ +if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \ +exit $${ERROR} +endef + +define cpm-link = + COMMAND="$(call ccpline, slrnk+, $*/H/M /V \ + /P:$(PROG_SEG) /D:$(DATA_SEG) $(basename $^) /E /Q)";\ + OUTPUT=$$(mktemp); echo $${COMMAND};\ + $${COMMAND} > $${OUTPUT};\ + ERROR=0;\ + cat $${OUTPUT};\ + grep -q ' Duplicate Symbol ' $${OUTPUT} && ERROR=2; \ + grep -q '\- Previously Defined' $${OUTPUT} && ERROR=2; \ + [ "$${ERROR}" = "0" ] && grep -q '^ ** ' $${OUTPUT} && ERROR=1 ; \ + [ "$${ERROR}" != "0" ] && rm -f $@; \ + exit $${ERROR} +endef + +#Use: MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX] +#egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*init\.rel' hdrom.map +define cpm-mksym = +COMMAND="$(CPMEMU) makesym -$^ -/P0 -/D0"; \ +OUTPUT=$$(mktemp); echo $${COMMAND}; \ +$${COMMAND} > $${OUTPUT}; \ +grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \ +if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \ +exit $${ERROR} +endef + +.SUFFIXES: + + +%.hex %.lst: %.180 + @$(cpm-asm) + +%.hex %.map: $(OBJ) + @#$(cpm-link) + ld80 -o $@ -ms $(@:.hex=.map) -P $(PROG_SEG) -D $(DATA_SEG) $^ + +%.rel %.lst: %.180 + @$(cpm-asm) + +%.c: %.hex + srec_cat -o $@ -c_array $* -C_COMpressed -include $< -Intel + +%.sym: %.lst + @$(cpm-mksym) + +.PHONY: clean +clean: + $(RM) *.hex *.rel *.lst *.sym *.map *.c *.h diff --git a/z180/Makefile b/z180/Makefile index 159371f..02ef580 100644 --- a/z180/Makefile +++ b/z180/Makefile @@ -1,127 +1,16 @@ +HDROM_SRC := init.180 ddtz.180 msgbuf-a.180 +HDROM_SRC += conbuf-a.180 console.180 asci-p.180 +#HDROM_SRC += bioscio.180 chario.180 +HDROM_SRC += romend.180 -SRC := init.180 ddtz.180 -SRC += console.180 -SRC += msgbuf-a.180 conbuf-a.180 -SRC += asci1-p.180 -SRC += romend.180 +.PHONY: all +all: hdrom.c cfboot.c cpuinfo.c -INC := config.inc z180reg.inc z180.lib +hdrom.hex: ASM_OPT = MFS +hdrom.hex: PROG_SEG = 0 +hdrom.hex: DATA_SEG = C000 +hdrom.hex: $(HDROM_SRC:.180=.rel) -OBJ := $(SRC:.180=.rel) -#CP/M emulator -CPMEMU = zxcc - -#Location of CP/M binaries -CPMBIN = /usr/local/lib/cpm/bin80 - -#AS = $(CPMEMU) $(CPMBIN)/m80.com -AS = $(CPMEMU) slr180.com -LN = $(CPMEMU) slrnk+.com -#LN = $(CPMEMU) ccpline.com - -AS_OPT := MFS - -AS_QUIET = 1 -LN_QUIET = 1 - -#LNKCMD = -LN_VERB = /V -LN_PROG = 0 -LN_DATA = C000 - - -.suffixes: -#.suffixes: .180 .rel - -.phony: all -all: hdrom.c hdrom.h - -$(OBJ): $(INC) - -hdrom.h: hdrom.c - -comma:= , -empty:= -space:= $(empty) $(empty) - -ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2))) - -define cpm-asm = -COMMAND="$(AS) -$(basename $<)/$(AS_OPT)"; \ -OUTPUT=$$(mktemp); echo $${COMMAND}; \ -$${COMMAND} > $${OUTPUT}; \ -grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \ -if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \ -exit $${ERROR} -endef - -define cpm-link = - COMMAND="$(call ccpline, slrnk+, $(basename $@)/H/M /V \ - /P:$(LN_PROG) /D:$(LN_DATA) $(basename $^) /E /Q)";\ - OUTPUT=$$(mktemp); echo $${COMMAND};\ - $${COMMAND} > $${OUTPUT};\ - ERROR=0;\ - cat $${OUTPUT};\ - grep -q ' Duplicate Symbol ' $${OUTPUT} && ERROR=2; \ - grep -q '\- Previously Defined' $${OUTPUT} && ERROR=2; \ - [ "$${ERROR}" = "0" ] && grep -q '^ ** ' $${OUTPUT} && ERROR=1 ; \ - [ "$${ERROR}" != "0" ] && rm -f $@; \ - exit $${ERROR} -endef - -#Use: MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX] -#egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*init\.rel' hdrom.map -define cpm-mksym = -COMMAND="$(CPMEMU) makesym -$^ -/P -D"; \ -OUTPUT=$$(mktemp); echo $${COMMAND}; \ -$${COMMAND} > $${OUTPUT}; \ -grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \ -if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \ -exit $${ERROR} -endef - -hdrom.c: hdrom.hex - srec_cat -o $@ -c_array $(basename $<) -C_COMpressed -include $< -Intel - -hdrom.hex : $(OBJ) - @#$(cpm-link) - ld80 -o $@ -ms $(@:.hex=.map) -P $(LN_PROG) -D $(LN_DATA) $^ - -%.rel %.lst: %.180 - @$(cpm-asm) - -hdrom.map: hdrom.hex - -%.sym: hdrom.map %.lst - @$(cpm-mksym) - -.phony: clean realclean -clean: - rm -f $(OBJ) $(OBJ:.rel=.lst) $(OBJ:.rel=.sym) hdrom.hex - -realclean: clean - rm -f *.prn *~ hdrom.map - - -#================================================================== - -%.REL: %.MAC - @COMMAND="$(AS) =$<"; \ - OUTPUT=$$(mktemp); echo $${COMMAND}; \ - $${COMMAND} > $${OUTPUT}; \ - grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \ - if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm $@; fi ; \ - rm $${OUTPUT}; \ - exit $${ERROR} - - -%.PRN: %.MAC - @COMMAND="$(AS) ,$@=$<"; \ - OUTPUT=$$(mktemp); echo $${COMMAND}; \ - $${COMMAND} > $${OUTPUT}; \ - grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \ - if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; fi ; \ - rm $${OUTPUT}; \ - exit $${ERROR} +include ../mk/cpm.rules.mk -- 2.39.2