summaryrefslogtreecommitdiff
path: root/mk/cpm.rules.mk
blob: a8ba51cdaa5cc5e9596310a86aa41f6d35ff8b15 (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
# Define a helper macro for debugging make errors online
# you can type "make print-VARIABLE" and it will show you
# how that ended up being resolved by all of the included
# makefiles.
print-%:
	@echo $*=$($*)



#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

RM = rm -f


ASM_OPT := HFS


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

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

define cpm-asm =
COMMAND="$(AS) -$*/$(ASM_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+, $*/H/M /V \
           /P:$(PROG_SEG) /D:$(DATA_SEG) $(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 -$^ -/P0 -/D0"; \
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

.SUFFIXES:


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

%.hex %.map: $(OBJ)
	@#$(cpm-link)
	ld80 -o $@ -ms $(@:.hex=.map) -P $(PROG_SEG) -D $(DATA_SEG) $^

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

%.c: %.hex
	srec_cat -o $@ -c_array $* -C_COMpressed -include $< -Intel

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

.PHONY: clean
clean:
	$(RM) *.hex *.rel *.lst *.sym *.map *.c *.h