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