2 SRC
:= bioskrnl
.180 boot
.180 chario
.180
3 SRC
+= msgbuf
.180 conbuf
.180 ascii
.180
4 SRC
+= drvtbl
.180 sdio
.180 cfio
.180 stampf
.180
5 SRC
+= move
.180 time
.180 fifo
.180 utils
.180 misc
.180 mm
.180
7 ALLSRC
:= $(SRC
) ldrbios
.180
9 INC
:= config.inc z180reg.inc z180.lib ioctl.inc
11 EXTRA_DIST
:= autorevision.cache version.inc
13 OBJ
:= $(SRC
:.180=.rel
)
14 ALLOBJ
:= $(ALLSRC
:.180=.rel
)
15 ALLLST
:= $(ALLSRC
:.180=.lst
)
18 $(foreach X
,$(subst =,:=,$(subst ",,$(filter VCS_%,\
19 $(shell autorevision -t sh -o $(CURDIR)/autorevision.cache)))),$(eval $X))
21 VERS := $(shell echo "$(VCS_TAG
)" | sed -e 's/hexrel-/0./g' -e 's/^v//g')
24 VERS := $(VERS)-$(VCS_TICK)
26 ifneq ($(VCS_BRANCH),master)
27 VERS := $(VERS)-$(VCS_BRANCH)
29 ifeq ($(VCS_WC_MODIFIED),1)
34 SYSFILE = cpm3_$(VERS).sys
35 MAPFILE = bnkbios3_$(VERS).map
36 ASYMFILE = bnkbios3_$(VERS).sym
37 DIST_NAME = z180-stamp-cpm3_$(VERS).zip
38 DIST_NAME_BIN = z180-stamp-cpm3-bin_$(VERS).zip
39 PREFIX = z180-stamp-cpm3_$(VERS)
50 #Location of CP/M binaries
51 CPMBIN = /usr/local/lib/cpm/bin80
53 #AS = $(CPMEMU) $(CPMBIN)/m80.com
54 AS = $(CPMEMU) slr180.com
55 #LN = $(CPMEMU) slrnk+.com
56 #LN = $(CPMEMU) ccpline.com
75 .PHONY: sys bios map asym ldr
82 cpmldr.com: cpmldr.rel ldrbios.rel
88 version.inc: autorevision.cache
90 @printf "defvers macro
\r\n\
97 space:= $(empty) $(empty)
99 ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2)))
102 COMMAND="$(AS
) -$(basename $<)/$(AS_OPT
)"; \
103 OUTPUT=$$(mktemp); echo $${COMMAND}; \
104 $${COMMAND} > $${OUTPUT} < $<; \
105 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
106 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
111 COMMAND="$(call ccpline
, slrnk
+, $(basename $@
)/H
/M
/V \
112 /P
:$(LN_PROG
) /D
:$(LN_DATA
) $(basename $^
) /E
/Q
)";\
113 OUTPUT=$$(mktemp); echo $${COMMAND};\
114 $${COMMAND} > $${OUTPUT} || exit 1;\
117 grep -q ' Duplicate Symbol ' $${OUTPUT} && ERROR=2; \
118 grep -q '\- Previously Defined' $${OUTPUT} && ERROR=2; \
119 [ "$${ERROR}" = "0" ] && grep -q '^ ** ' $${OUTPUT} && ERROR=1 ; \
120 [ "$${ERROR}" != "0" ] && rm -f $@; \
124 #link80 bnkbios3[b,q]=bioskrnl,boot,chario,drvtbl,...
125 define cpm-bioslink =
126 COMMAND="$(call ccpline
, link80
, \
127 $(basename $@
)=$(basename $^
))[b
,q
]";\
128 OUTPUT=$$(mktemp); echo $${COMMAND};\
129 $${COMMAND} > $${OUTPUT} || exit 1;\
131 grep -Ev '^[@?$$._ 0-9A-Z]{7} [0-9A-F]{4}' $${OUTPUT};\
132 grep -Eq ':|UNRECOGNIZED' $${OUTPUT} && ERROR=2; \
133 [ "$${ERROR}" != "0" ] && rm -f $@; \
139 #Use: MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX]
140 #egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*init\.rel' hdrom.map
142 COMMAND="$(CPMEMU
) makesym
-$^
-/P
-D
"; \
143 OUTPUT=$$(mktemp); echo $${COMMAND}; \
144 $${COMMAND} > $${OUTPUT}; \
145 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
146 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
150 PSEG = $(call SEGMENT-ADDR, 1)
151 DSEG = $(call SEGMENT-ADDR, 2)
153 #(call SEGMENT-ADDR,SEGNUM)
154 SEGMENT-ADDR = $(shell dd if=$(SYSFILE) bs=128 count=1 skip=1 2>/dev/null |\
155 awk -vn=$(strip $1) '/BNKBIOS3/ {if (++seg == n) print $$3}')
157 $(MAPFILE): $(SYSFILE)
158 ld80 -o /dev/null -ms $@ -P $(PSEG) -D $(DSEG) $(OBJ)
160 $(ASYMFILE): $(SYSFILE)
161 cvtsym -o $@ -b $< bnkbios3.sym
164 $(SYSFILE): bnkbios3.spr gencpm.dat
170 bnkbios3.spr : $(OBJ)
172 @#ld80 -o $@ -ms $(@:.hex=.map) -P $(LN_PROG) -D $(LN_DATA) $^
179 bin-dist: $(SYSFILE) $(MAPFILE) cpmldr.com
180 $(ZIP) -9 $(DIST_NAME_BIN) $(SYSFILE) $(MAPFILE) $(ASYMFILE) cpmldr.com
183 dist: $(SYSFILE) $(MAPFILE) $(ASYMFILE) cpmldr.com
184 $(GIT) archive --format=zip --prefix=$(PREFIX)/ -9 -o $(DIST_NAME) HEAD^{tree}
186 @$(CP) -p $(EXTRA_DIST) $(PREFIX)
187 $(ZIP) -r -9 $(DIST_NAME) $(PREFIX) $(SYSFILE) $(MAPFILE) $(ASYMFILE) cpmldr.com
191 .PHONY: clean realclean
193 $(RM) $(ALLOBJ) $(ALLLST) *.sym
199 #==================================================================
202 @COMMAND="$(AS
) =$<"; \
203 OUTPUT=$$(mktemp); echo $${COMMAND}; \
204 $${COMMAND} > $${OUTPUT}; \
205 grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
206 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm $@; fi ; \
212 @COMMAND="$(AS
) ,$@
=$<"; \
213 OUTPUT=$$(mktemp); echo $${COMMAND}; \
214 $${COMMAND} > $${OUTPUT}; \
215 grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
216 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; fi ; \