]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blame - cbios/Makefile
No changes
[z180-stamp-cpm3.git] / cbios / Makefile
CommitLineData
ea5293bb 1
023a0215 2SRC := bioskrnl.180 boot.180 chario.180
947c5868 3SRC += msgbuf.180 conbuf.180 ascii.180
023a0215
L
4SRC += drvtbl.180 sdio.180 cfio.180 stampf.180
5SRC += move.180 time.180 fifo.180 utils.180 misc.180 mm.180
ea5293bb 6SRC += scb.180
88c783bb 7ALLSRC := $(SRC) ldrbios.180
ea5293bb 8
1c7e3963 9INC := config.inc z180reg.inc z180.lib ioctl.inc
ea5293bb 10
92ec6fd5 11EXTRA_DIST := autorevision.cache version.inc
411cf4de 12
ea5293bb 13OBJ := $(SRC:.180=.rel)
88c783bb
L
14ALLOBJ := $(ALLSRC:.180=.rel)
15ALLLST := $(ALLSRC:.180=.lst)
ea5293bb 16
411cf4de 17
fcf62661
L
18$(foreach X,$(subst =,:=,$(subst ",,$(filter VCS_%,\
19 $(shell autorevision -t sh -o $(CURDIR)/autorevision.cache)))),$(eval $X))
411cf4de
L
20
21VERS := $(shell echo "$(VCS_TAG)" | sed -e 's/hexrel-/0./g' -e 's/^v//g')
22
fcf62661 23ifneq ($(VCS_TICK),0)
62f5d7fd 24 VERS := $(VERS)-$(VCS_TICK)
411cf4de 25endif
fcf62661
L
26ifneq ($(VCS_BRANCH),master)
27 VERS := $(VERS)-$(VCS_BRANCH)
411cf4de 28endif
fcf62661 29ifeq ($(VCS_WC_MODIFIED),1)
411cf4de
L
30 VERS := $(VERS)-dirty
31endif
32
33
34SYSFILE = cpm3_$(VERS).sys
35MAPFILE = bnkbios3_$(VERS).map
7367e4e9 36ASYMFILE = bnkbios3_$(VERS).sym
fcf62661
L
37DIST_NAME = z180-stamp-cpm3_$(VERS).zip
38DIST_NAME_BIN = z180-stamp-cpm3-bin_$(VERS).zip
39PREFIX = z180-stamp-cpm3_$(VERS)
40
05f80522 41SHELL = /bin/sh
fcf62661
L
42CP = cp
43RM = rm -f
44GIT = git
45ZIP = zip
411cf4de 46
ea5293bb
L
47#CP/M emulator
48CPMEMU = zxcc
49
50#Location of CP/M binaries
51CPMBIN = /usr/local/lib/cpm/bin80
52
53#AS = $(CPMEMU) $(CPMBIN)/m80.com
54AS = $(CPMEMU) slr180.com
55#LN = $(CPMEMU) slrnk+.com
56#LN = $(CPMEMU) ccpline.com
57
58AS_OPT := MFS
59
60AS_QUIET = 1
61LN_QUIET = 1
62
63#LNKCMD =
64LN_VERB = /V
65LN_PROG = 0
04d6fc24 66LN_DATA = F000
ea5293bb
L
67
68
69.suffixes:
70#.suffixes: .180 .rel
71
72.phony: all
05f80522 73all: sys
ea5293bb 74
7367e4e9 75.phony: sys bios map asym ldr
411cf4de 76sys: $(SYSFILE)
5f701f3a 77bios: bnkbios3.spr
411cf4de 78map: $(MAPFILE)
7367e4e9 79asym: $(ASYMFILE)
05f80522 80ldr: cpmldr.com
ea5293bb 81
88c783bb
L
82cpmldr.com: cpmldr.rel ldrbios.rel
83 ld80 -P 100 -o $@ $^
84
85$(ALLOBJ): $(INC)
411cf4de
L
86boot.rel: version.inc
87
88version.inc: autorevision.cache
89 @echo update $@
05f80522 90 @printf "defvers macro\r\n\
411cf4de 91 db '$(VERS)'\r\n\
05f80522 92 endm\r\n\032" > $@
411cf4de 93
ea5293bb
L
94
95comma:= ,
96empty:=
97space:= $(empty) $(empty)
98
99ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2)))
100
101define cpm-asm =
102COMMAND="$(AS) -$(basename $<)/$(AS_OPT)"; \
103OUTPUT=$$(mktemp); echo $${COMMAND}; \
104$${COMMAND} > $${OUTPUT}; \
105grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
106if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
107exit $${ERROR}
108endef
109
110define cpm-link =
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;\
115 ERROR=0;\
116 cat $${OUTPUT};\
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 $@; \
121 exit $${ERROR}
122endef
123
124#link80 bnkbios3[b,q]=bioskrnl,boot,chario,drvtbl,...
125define cpm-bioslink =
126 COMMAND="$(call ccpline, link80, \
127 $(basename $@)=$(basename $^))[b,q]";\
128 OUTPUT=$$(mktemp); echo $${COMMAND};\
129 $${COMMAND} > $${OUTPUT} || exit 1;\
130 ERROR=0;\
f80331a6 131 grep -Ev '^[@?$$._ 0-9A-Z]{7} [0-9A-F]{4}' $${OUTPUT};\
b43b4662 132 grep -Eq ':|UNRECOGNIZED' $${OUTPUT} && ERROR=2; \
ea5293bb
L
133 [ "$${ERROR}" != "0" ] && rm -f $@; \
134 exit $${ERROR}
135endef
136
137
138
139#Use: MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX]
140#egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*init\.rel' hdrom.map
141define cpm-mksym =
142COMMAND="$(CPMEMU) makesym -$^ -/P -D"; \
143OUTPUT=$$(mktemp); echo $${COMMAND}; \
144$${COMMAND} > $${OUTPUT}; \
145grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
146if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
147exit $${ERROR}
148endef
149
5f701f3a
L
150PSEG = $(call SEGMENT-ADDR, 1)
151DSEG = $(call SEGMENT-ADDR, 2)
152
153#(call SEGMENT-ADDR,SEGNUM)
411cf4de 154SEGMENT-ADDR = $(shell dd if=$(SYSFILE) bs=128 count=1 skip=1 2>/dev/null |\
5f701f3a
L
155 awk -vn=$(strip $1) '/BNKBIOS3/ {if (++seg == n) print $$3}')
156
411cf4de
L
157$(MAPFILE): $(SYSFILE)
158 ld80 -o /dev/null -ms $@ -P $(PSEG) -D $(DSEG) $(OBJ)
5f701f3a 159
7367e4e9
L
160$(ASYMFILE): $(SYSFILE)
161 cvtsym -o $@ -b $< bnkbios3.sym
162
5f701f3a 163
411cf4de 164$(SYSFILE): bnkbios3.spr gencpm.dat
f80331a6 165 zxcc gencpm -AUTO
411cf4de 166 @mv cpm3.sys $@
ea5293bb
L
167 @echo
168
169
170bnkbios3.spr : $(OBJ)
171 @$(cpm-bioslink)
172 @#ld80 -o $@ -ms $(@:.hex=.map) -P $(LN_PROG) -D $(LN_DATA) $^
173
174%.rel %lst: %.180
175 @$(cpm-asm)
176
177
fcf62661 178.phony: bin-dist
05f80522 179bin-dist: $(SYSFILE) $(MAPFILE) cpmldr.com
7367e4e9 180 $(ZIP) -9 $(DIST_NAME_BIN) $(SYSFILE) $(MAPFILE) $(ASYMFILE) cpmldr.com
fcf62661
L
181
182.phony: dist
7367e4e9 183dist: $(SYSFILE) $(MAPFILE) $(ASYMFILE) cpmldr.com
fcf62661
L
184 $(GIT) archive --format=zip --prefix=$(PREFIX)/ -9 -o $(DIST_NAME) HEAD^{tree}
185 @mkdir -p $(PREFIX)
92ec6fd5 186 @$(CP) -p $(EXTRA_DIST) $(PREFIX)
7367e4e9 187 $(ZIP) -r -9 $(DIST_NAME) $(PREFIX) $(SYSFILE) $(MAPFILE) $(ASYMFILE) cpmldr.com
fcf62661 188 @$(RM) -r $(PREFIX)
411cf4de
L
189
190
ea5293bb
L
191.phony: clean realclean
192clean:
05f80522 193 $(RM) $(ALLOBJ) $(ALLLST) *.sym
ea5293bb
L
194
195realclean: clean
fcf62661 196 $(RM) *.map *.prn *~
ea5293bb
L
197
198
199#==================================================================
200
201%.REL: %.MAC
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 ; \
207 rm $${OUTPUT}; \
208 exit $${ERROR}
209
210
211%.PRN: %.MAC
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 ; \
217 rm $${OUTPUT}; \
218 exit $${ERROR}