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