]> cloudbase.mooo.com Git - z180-stamp.git/commitdiff
Add makefiles (replace Tup)
authorLeo C <erbl259-lmu@yahoo.de>
Wed, 29 May 2019 20:26:45 +0000 (22:26 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Wed, 29 May 2019 21:03:12 +0000 (23:03 +0200)
.gitignore
avr/Makefile [new file with mode: 0644]
mk/avr.rules.mk [new file with mode: 0644]
mk/cpm.rules.mk [new file with mode: 0644]
z180/Makefile

index c2675365965858acce0072cdfb0c163904439233..11165af208ae4f581407c1c382db21795490180f 100644 (file)
@@ -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 (file)
index 0000000..eab1d1f
--- /dev/null
@@ -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 <http://savannah.nongnu.org/projects/avrdude>
+# 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 (file)
index 0000000..155397c
--- /dev/null
@@ -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 (file)
index 0000000..a8ba51c
--- /dev/null
@@ -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
index 159371f5261304964a26b0ca885b5063f041aaca..02ef58019a1e13618516f9066e32a62d432a0ca0 100644 (file)
 
+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