SRC := bioskrnl.180 boot.180 stampf.180 chario.180 drvtbl.180 SRC += move.180 time.180 mm.180 misc.180 utils.180 fifo.180 SRC += msgbuf.180 conbuf.180 ascii.180 SRC += sdio.180 cfio.180 SRC += scb.180 ALLSRC := $(SRC) ldrbios.180 INC := config.inc z180reg.inc z180.lib ioctl.inc OBJ := $(SRC:.180=.rel) ALLOBJ := $(ALLSRC:.180=.rel) ALLLST := $(ALLSRC:.180=.lst) $(foreach X,$(subst =,:=,$(subst ",,$(filter VCS_%,\ $(shell autorevision -t sh -o $(CURDIR)/autorevision.cache)))),$(eval $X)) VERS := $(shell echo "$(VCS_TAG)" | sed -e 's/hexrel-/0./g' -e 's/^v//g') ifneq ($(VCS_TICK),0) VERS := $(VERS).$(VCS_TICK) endif ifneq ($(VCS_BRANCH),master) VERS := $(VERS)-$(VCS_BRANCH) endif ifeq ($(VCS_WC_MODIFIED),1) VERS := $(VERS)-dirty endif SYSFILE = cpm3_$(VERS).sys MAPFILE = bnkbios3_$(VERS).map DIST_NAME = z180-stamp-cpm3_$(VERS).zip DIST_NAME_BIN = z180-stamp-cpm3-bin_$(VERS).zip PREFIX = z180-stamp-cpm3_$(VERS) SHELL = /bin/sh CP = cp RM = rm -f GIT = git ZIP = zip #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 = F000 .suffixes: #.suffixes: .180 .rel .phony: all all: sys .phony: sys bios map ldr sys: $(SYSFILE) bios: bnkbios3.spr map: $(MAPFILE) ldr: cpmldr.com cpmldr.com: cpmldr.rel ldrbios.rel ld80 -P 100 -o $@ $^ $(ALLOBJ): $(INC) boot.rel: version.inc version.inc: autorevision.cache @echo update $@ @printf "defvers macro\r\n\ db '$(VERS)'\r\n\ endm\r\n\032" > $@ 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} || exit 1;\ 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 #link80 bnkbios3[b,q]=bioskrnl,boot,chario,drvtbl,... define cpm-bioslink = COMMAND="$(call ccpline, link80, \ $(basename $@)=$(basename $^))[b,q]";\ OUTPUT=$$(mktemp); echo $${COMMAND};\ $${COMMAND} > $${OUTPUT} || exit 1;\ ERROR=0;\ grep -Ev '^[@?$$._ 0-9A-Z]{7} [0-9A-F]{4}' $${OUTPUT};\ grep -Eq ':|UNRECOGNIZED' $${OUTPUT} && ERROR=2; \ [ "$${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 PSEG = $(call SEGMENT-ADDR, 1) DSEG = $(call SEGMENT-ADDR, 2) #(call SEGMENT-ADDR,SEGNUM) SEGMENT-ADDR = $(shell dd if=$(SYSFILE) bs=128 count=1 skip=1 2>/dev/null |\ awk -vn=$(strip $1) '/BNKBIOS3/ {if (++seg == n) print $$3}') $(MAPFILE): $(SYSFILE) ld80 -o /dev/null -ms $@ -P $(PSEG) -D $(DSEG) $(OBJ) $(SYSFILE): bnkbios3.spr gencpm.dat zxcc gencpm -AUTO @mv cpm3.sys $@ @echo bnkbios3.spr : $(OBJ) @$(cpm-bioslink) @#ld80 -o $@ -ms $(@:.hex=.map) -P $(LN_PROG) -D $(LN_DATA) $^ %.rel %lst: %.180 @$(cpm-asm) .phony: bin-dist bin-dist: $(SYSFILE) $(MAPFILE) cpmldr.com $(ZIP) -9 $(DIST_NAME_BIN) $(SYSFILE) $(MAPFILE) cpmldr.com .phony: dist dist: $(SYSFILE) $(MAPFILE) cpmldr.com $(GIT) archive --format=zip --prefix=$(PREFIX)/ -9 -o $(DIST_NAME) HEAD^{tree} @mkdir -p $(PREFIX) @$(CP) autorevision.cache version.inc $(PREFIX) $(ZIP) -r -9 $(DIST_NAME) $(PREFIX) $(SYSFILE) $(MAPFILE) cpmldr.com @$(RM) -r $(PREFIX) .phony: clean realclean clean: $(RM) $(ALLOBJ) $(ALLLST) *.sym realclean: clean $(RM) *.map *.prn *~ #================================================================== %.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}