]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blob - cbios/Makefile
use ?xmove (DMA) to copy ccp to/from extra bank
[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 OBJ := $(SRC:.180=.rel)
11
12 #CP/M emulator
13 CPMEMU = zxcc
14
15 #Location of CP/M binaries
16 CPMBIN = /usr/local/lib/cpm/bin80
17
18 #AS = $(CPMEMU) $(CPMBIN)/m80.com
19 AS = $(CPMEMU) slr180.com
20 #LN = $(CPMEMU) slrnk+.com
21 #LN = $(CPMEMU) ccpline.com
22
23 AS_OPT := MFS
24
25 AS_QUIET = 1
26 LN_QUIET = 1
27
28 #LNKCMD =
29 LN_VERB = /V
30 LN_PROG = 0
31 LN_DATA = F000
32
33
34 .suffixes:
35 #.suffixes: .180 .rel
36
37 .phony: all
38 all: sys
39
40 map: bnkbios3.map
41 sys: cpm3.sys
42 bios: bnkbios3.spr
43
44 $(OBJ): $(INC)
45
46 comma:= ,
47 empty:=
48 space:= $(empty) $(empty)
49
50 ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2)))
51
52 define cpm-asm =
53 COMMAND="$(AS) -$(basename $<)/$(AS_OPT)"; \
54 OUTPUT=$$(mktemp); echo $${COMMAND}; \
55 $${COMMAND} > $${OUTPUT}; \
56 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
57 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
58 exit $${ERROR}
59 endef
60
61 define cpm-link =
62 COMMAND="$(call ccpline, slrnk+, $(basename $@)/H/M /V \
63 /P:$(LN_PROG) /D:$(LN_DATA) $(basename $^) /E /Q)";\
64 OUTPUT=$$(mktemp); echo $${COMMAND};\
65 $${COMMAND} > $${OUTPUT} || exit 1;\
66 ERROR=0;\
67 cat $${OUTPUT};\
68 grep -q ' Duplicate Symbol ' $${OUTPUT} && ERROR=2; \
69 grep -q '\- Previously Defined' $${OUTPUT} && ERROR=2; \
70 [ "$${ERROR}" = "0" ] && grep -q '^ ** ' $${OUTPUT} && ERROR=1 ; \
71 [ "$${ERROR}" != "0" ] && rm -f $@; \
72 exit $${ERROR}
73 endef
74
75 #link80 bnkbios3[b,q]=bioskrnl,boot,chario,drvtbl,...
76 define cpm-bioslink =
77 COMMAND="$(call ccpline, link80, \
78 $(basename $@)=$(basename $^))[b,q]";\
79 OUTPUT=$$(mktemp); echo $${COMMAND};\
80 $${COMMAND} > $${OUTPUT} || exit 1;\
81 ERROR=0;\
82 grep -Ev '^[@?$$._ 0-9A-Z]{7} [0-9A-F]{4}' $${OUTPUT};\
83 grep -Eq ':|UNRECOGNIZED' $${OUTPUT} && ERROR=2; \
84 [ "$${ERROR}" != "0" ] && rm -f $@; \
85 exit $${ERROR}
86 endef
87
88
89
90 #Use: MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX]
91 #egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*init\.rel' hdrom.map
92 define cpm-mksym =
93 COMMAND="$(CPMEMU) makesym -$^ -/P -D"; \
94 OUTPUT=$$(mktemp); echo $${COMMAND}; \
95 $${COMMAND} > $${OUTPUT}; \
96 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
97 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
98 exit $${ERROR}
99 endef
100
101 PSEG = $(call SEGMENT-ADDR, 1)
102 DSEG = $(call SEGMENT-ADDR, 2)
103
104 #(call SEGMENT-ADDR,SEGNUM)
105 SEGMENT-ADDR = $(shell dd if=cpm3.sys bs=128 count=1 skip=1 2>/dev/null |\
106 awk -vn=$(strip $1) '/BNKBIOS3/ {if (++seg == n) print $$3}')
107
108 bnkbios3.map: cpm3.sys
109 ld80 -o /dev/null -ms bnkbios3.map -P $(PSEG) -D $(DSEG) $(OBJ)
110
111
112 cpm3.sys: bnkbios3.spr gencpm.dat
113 zxcc gencpm -AUTO
114 @echo
115
116
117 bnkbios3.spr : $(OBJ)
118 @$(cpm-bioslink)
119 @#ld80 -o $@ -ms $(@:.hex=.map) -P $(LN_PROG) -D $(LN_DATA) $^
120
121 %.rel %lst: %.180
122 @$(cpm-asm)
123
124
125 .phony: clean realclean
126 clean:
127 rm -f $(OBJ) $(OBJ:.rel=.lst) $(OBJ:.rel=.sym)
128
129 realclean: clean
130 rm -f *.prn *~
131
132
133 #==================================================================
134
135 %.REL: %.MAC
136 @COMMAND="$(AS) =$<"; \
137 OUTPUT=$$(mktemp); echo $${COMMAND}; \
138 $${COMMAND} > $${OUTPUT}; \
139 grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
140 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm $@; fi ; \
141 rm $${OUTPUT}; \
142 exit $${ERROR}
143
144
145 %.PRN: %.MAC
146 @COMMAND="$(AS) ,$@=$<"; \
147 OUTPUT=$$(mktemp); echo $${COMMAND}; \
148 $${COMMAND} > $${OUTPUT}; \
149 grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
150 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; fi ; \
151 rm $${OUTPUT}; \
152 exit $${ERROR}