summaryrefslogtreecommitdiff
path: root/z180/Makefile
blob: 159371f5261304964a26b0ca885b5063f041aaca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
SRC :=  init.180 ddtz.180
SRC += console.180
SRC += msgbuf-a.180 conbuf-a.180
SRC += asci1-p.180
SRC += romend.180

INC := config.inc z180reg.inc z180.lib

OBJ := $(SRC:.180=.rel)

#CP/M emulator
CPMEMU = zxcc

#Location of CP/M binaries
CPMBIN = /usr/local/lib/cpm/bin80

#AS = $(CPMEMU) $(CPMBIN)/m80.com
AS = $(CPMEMU) slr180.com
LN = $(CPMEMU) slrnk+.com
#LN = $(CPMEMU) ccpline.com

AS_OPT := MFS

AS_QUIET = 1
LN_QUIET = 1

#LNKCMD =
LN_VERB = /V
LN_PROG = 0
LN_DATA = C000


.suffixes:
#.suffixes: .180 .rel

.phony: all
all: hdrom.c hdrom.h

$(OBJ):  $(INC)

hdrom.h: hdrom.c

comma:= ,
empty:=
space:= $(empty) $(empty)

ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2)))

define cpm-asm =
COMMAND="$(AS) -$(basename $<)/$(AS_OPT)"; \
OUTPUT=$$(mktemp); echo $${COMMAND}; \
$${COMMAND} > $${OUTPUT}; \
grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
exit $${ERROR}
endef

define cpm-link =
  COMMAND="$(call ccpline, slrnk+, $(basename $@)/H/M /V \
           /P:$(LN_PROG) /D:$(LN_DATA) $(basename $^) /E /Q)";\
  OUTPUT=$$(mktemp); echo $${COMMAND};\
  $${COMMAND} > $${OUTPUT};\
  ERROR=0;\
  cat $${OUTPUT};\
  grep -q ' Duplicate Symbol ' $${OUTPUT} && ERROR=2; \
  grep -q '\- Previously Defined' $${OUTPUT} && ERROR=2; \
  [ "$${ERROR}" = "0" ] && grep -q '^ ** ' $${OUTPUT} && ERROR=1 ; \
  [ "$${ERROR}" != "0" ] && rm -f $@; \
  exit $${ERROR}
endef

#Use:   MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX]
#egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*init\.rel' hdrom.map
define cpm-mksym =
COMMAND="$(CPMEMU) makesym -$^ -/P -D"; \
OUTPUT=$$(mktemp); echo $${COMMAND}; \
$${COMMAND} > $${OUTPUT}; \
grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
exit $${ERROR}
endef

hdrom.c: hdrom.hex
	srec_cat -o $@ -c_array $(basename $<) -C_COMpressed -include $< -Intel

hdrom.hex : $(OBJ)
	@#$(cpm-link)
	ld80 -o $@ -ms $(@:.hex=.map) -P $(LN_PROG) -D $(LN_DATA) $^

%.rel %.lst: %.180
	@$(cpm-asm)

hdrom.map: hdrom.hex

%.sym: hdrom.map %.lst
	@$(cpm-mksym)

.phony: clean realclean
clean:
	rm -f $(OBJ) $(OBJ:.rel=.lst) $(OBJ:.rel=.sym) hdrom.hex

realclean: clean
	rm -f *.prn *~ hdrom.map


#==================================================================

%.REL: %.MAC
	@COMMAND="$(AS) =$<"; \
	OUTPUT=$$(mktemp); echo $${COMMAND}; \
	$${COMMAND} > $${OUTPUT}; \
	grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
	if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm $@; fi ; \
	rm $${OUTPUT}; \
	exit $${ERROR}


%.PRN: %.MAC
	@COMMAND="$(AS) ,$@=$<"; \
	OUTPUT=$$(mktemp); echo $${COMMAND}; \
	$${COMMAND} > $${OUTPUT}; \
	grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
	if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; fi ; \
	rm $${OUTPUT}; \
	exit $${ERROR}