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