]>
Commit | Line | Data |
---|---|---|
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 = C000 | |
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 | |
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} |