]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blame - cbios/Makefile
use ?xmove (DMA) to copy ccp to/from extra bank
[z180-stamp-cpm3.git] / cbios / Makefile
CommitLineData
ea5293bb
L
1
2
3SRC := bioskrnl.180 boot.180 chario.180 drvtbl.180
50f3b8f0 4SRC += move.180 time.180 mm.180 misc.180 utils.180
ea5293bb
L
5SRC += msgbuf.180 conbuf.180 ascip.180 sdio.180
6SRC += scb.180
7
8INC := config.inc z180reg.inc z180.lib
9
10OBJ := $(SRC:.180=.rel)
11
12#CP/M emulator
13CPMEMU = zxcc
14
15#Location of CP/M binaries
16CPMBIN = /usr/local/lib/cpm/bin80
17
18#AS = $(CPMEMU) $(CPMBIN)/m80.com
19AS = $(CPMEMU) slr180.com
20#LN = $(CPMEMU) slrnk+.com
21#LN = $(CPMEMU) ccpline.com
22
23AS_OPT := MFS
24
25AS_QUIET = 1
26LN_QUIET = 1
27
28#LNKCMD =
29LN_VERB = /V
30LN_PROG = 0
04d6fc24 31LN_DATA = F000
ea5293bb
L
32
33
34.suffixes:
35#.suffixes: .180 .rel
36
37.phony: all
38all: sys
39
5f701f3a 40map: bnkbios3.map
ea5293bb 41sys: cpm3.sys
5f701f3a 42bios: bnkbios3.spr
ea5293bb
L
43
44$(OBJ): $(INC)
45
46comma:= ,
47empty:=
48space:= $(empty) $(empty)
49
50ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2)))
51
52define cpm-asm =
53COMMAND="$(AS) -$(basename $<)/$(AS_OPT)"; \
54OUTPUT=$$(mktemp); echo $${COMMAND}; \
55$${COMMAND} > $${OUTPUT}; \
56grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
57if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
58exit $${ERROR}
59endef
60
61define 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}
73endef
74
75#link80 bnkbios3[b,q]=bioskrnl,boot,chario,drvtbl,...
76define 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;\
f80331a6 82 grep -Ev '^[@?$$._ 0-9A-Z]{7} [0-9A-F]{4}' $${OUTPUT};\
b43b4662 83 grep -Eq ':|UNRECOGNIZED' $${OUTPUT} && ERROR=2; \
ea5293bb
L
84 [ "$${ERROR}" != "0" ] && rm -f $@; \
85 exit $${ERROR}
86endef
87
88
89
90#Use: MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX]
91#egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*init\.rel' hdrom.map
92define cpm-mksym =
93COMMAND="$(CPMEMU) makesym -$^ -/P -D"; \
94OUTPUT=$$(mktemp); echo $${COMMAND}; \
95$${COMMAND} > $${OUTPUT}; \
96grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
97if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
98exit $${ERROR}
99endef
100
5f701f3a
L
101PSEG = $(call SEGMENT-ADDR, 1)
102DSEG = $(call SEGMENT-ADDR, 2)
103
104#(call SEGMENT-ADDR,SEGNUM)
105SEGMENT-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
108bnkbios3.map: cpm3.sys
109 ld80 -o /dev/null -ms bnkbios3.map -P $(PSEG) -D $(DSEG) $(OBJ)
110
111
573b9c25 112cpm3.sys: bnkbios3.spr gencpm.dat
f80331a6 113 zxcc gencpm -AUTO
ea5293bb
L
114 @echo
115
116
117bnkbios3.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
126clean:
127 rm -f $(OBJ) $(OBJ:.rel=.lst) $(OBJ:.rel=.sym)
128
129realclean: 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}