]>
Commit | Line | Data |
---|---|---|
a16ba2b0 L |
1 | |
2 | ||
29605004 | 3 | SRC := init.180 ddtz.180 |
a16ba2b0 L |
4 | SRC += fifoio.180 msgbuf.180 ser1-i.180 console.180 |
5 | SRC += romend.180 | |
6 | ||
7 | INC := config.inc z180reg.inc z180.lib | |
8 | ||
9 | OBJ := $(SRC:.180=.rel) | |
10 | ||
11 | #CP/M emulator | |
12 | CPMEMU = zxcc | |
13 | ||
14 | #Location of CP/M binaries | |
15 | CPMBIN = /usr/local/lib/cpm/bin80 | |
16 | ||
17 | #AS = $(CPMEMU) $(CPMBIN)/m80.com | |
18 | AS = $(CPMEMU) slr180.com | |
19 | LN = $(CPMEMU) slrnk+.com | |
20 | #LN = $(CPMEMU) ccpline.com | |
21 | ||
22 | AS_OPT := MFS | |
23 | ||
24 | AS_QUIET = 1 | |
25 | LN_QUIET = 1 | |
26 | ||
27 | #LNKCMD = | |
28 | LN_VERB = /V | |
29 | LN_PROG = 0 | |
30 | LN_DATA = C000 | |
31 | ||
32 | ||
33 | .suffixes: | |
34 | #.suffixes: .180 .rel | |
35 | ||
36 | .phony: all | |
78a3a76d | 37 | all: hdrom.c hdrom.h |
a16ba2b0 L |
38 | |
39 | $(OBJ): $(INC) | |
40 | ||
78a3a76d | 41 | hdrom.h: hdrom.c |
a16ba2b0 L |
42 | |
43 | comma:= , | |
44 | empty:= | |
45 | space:= $(empty) $(empty) | |
46 | ||
47 | ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2))) | |
48 | ||
49 | define cpm-asm = | |
50 | COMMAND="$(AS) -$(basename $<)/$(AS_OPT)"; \ | |
51 | OUTPUT=$$(mktemp); echo $${COMMAND}; \ | |
52 | $${COMMAND} > $${OUTPUT}; \ | |
53 | grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \ | |
54 | if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \ | |
55 | exit $${ERROR} | |
56 | endef | |
57 | ||
58 | define cpm-link = | |
59 | COMMAND="$(call ccpline, slrnk+, $(basename $@)/H/M /V \ | |
60 | /P:$(LN_PROG) /D:$(LN_DATA) $(basename $^) /E /Q)";\ | |
61 | OUTPUT=$$(mktemp); echo $${COMMAND};\ | |
62 | $${COMMAND} > $${OUTPUT};\ | |
63 | ERROR=0;\ | |
64 | cat $${OUTPUT};\ | |
65 | grep -q ' Duplicate Symbol ' $${OUTPUT} && ERROR=2; \ | |
66 | grep -q '\- Previously Defined' $${OUTPUT} && ERROR=2; \ | |
67 | [ "$${ERROR}" = "0" ] && grep -q '^ ** ' $${OUTPUT} && ERROR=1 ; \ | |
68 | [ "$${ERROR}" != "0" ] && rm -f $@; \ | |
69 | exit $${ERROR} | |
70 | endef | |
71 | ||
72 | #Use: MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX] | |
29605004 | 73 | #egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*init\.rel' hdrom.map |
a16ba2b0 L |
74 | define cpm-mksym = |
75 | COMMAND="$(CPMEMU) makesym -$^ -/P -D"; \ | |
76 | OUTPUT=$$(mktemp); echo $${COMMAND}; \ | |
77 | $${COMMAND} > $${OUTPUT}; \ | |
78 | grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \ | |
79 | if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \ | |
80 | exit $${ERROR} | |
81 | endef | |
82 | ||
78a3a76d | 83 | hdrom.c: hdrom.hex |
a16ba2b0 L |
84 | srec_cat -o $@ -c_array $(basename $<) -C_COMpressed -include $< -Intel |
85 | ||
86 | hdrom.hex : $(OBJ) | |
87 | @#$(cpm-link) | |
88 | ld80 -o $@ -ms $(@:.hex=.map) -P $(LN_PROG) -D $(LN_DATA) $^ | |
89 | ||
90 | %.rel %lst: %.180 | |
91 | @$(cpm-asm) | |
92 | ||
93 | hdrom.map: hdrom.hex | |
94 | ||
95 | %.sym: hdrom.map %.lst | |
96 | @$(cpm-mksym) | |
97 | ||
98 | .phony: clean realclean | |
99 | clean: | |
100 | rm -f $(OBJ) $(OBJ:.rel=.lst) $(OBJ:.rel=.sym) hdrom.hex | |
101 | ||
102 | realclean: clean | |
103 | rm -f *.prn *~ hdrom.map | |
104 | ||
105 | ||
106 | #================================================================== | |
107 | ||
108 | %.REL: %.MAC | |
109 | @COMMAND="$(AS) =$<"; \ | |
110 | OUTPUT=$$(mktemp); echo $${COMMAND}; \ | |
111 | $${COMMAND} > $${OUTPUT}; \ | |
112 | grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \ | |
113 | if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm $@; fi ; \ | |
114 | rm $${OUTPUT}; \ | |
115 | exit $${ERROR} | |
116 | ||
117 | ||
118 | %.PRN: %.MAC | |
119 | @COMMAND="$(AS) ,$@=$<"; \ | |
120 | OUTPUT=$$(mktemp); echo $${COMMAND}; \ | |
121 | $${COMMAND} > $${OUTPUT}; \ | |
122 | grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \ | |
123 | if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; fi ; \ | |
124 | rm $${OUTPUT}; \ | |
125 | exit $${ERROR} | |
126 |