aboutsummaryrefslogtreecommitdiff
path: root/src/Makefile
blob: eec64ea828d09d8a2b270639d56759cb8151ed6e (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
TARGET=kitcurs

LOADER_ADDR=512
TMP_ADDR=3072

# see splib.h: BUF_ADDR + (TW * TH / 2) * (sprite th * 2 + 2) * max sprites
# 0x0100 + (8 * 8 / 2) * (3 * 2 + 2) * 10
APP_ADDR=2816
PAK_SLOP=32

LOADER_ADDR_HEX=$(shell printf "%x" $(LOADER_ADDR))
TMP_ADDR_HEX=$(shell printf "%x" $(TMP_ADDR))

CC=sdcc
AS=sdasz80
AR=sdcclib
CFLAGS=-mz80 --Werror -I../lib -I../generated --fsigned-char --std-sdcc99 --opt-code-speed
LDFLAGS=-L../lib -L. --data-loc 0 --no-std-crt0 --fomit-frame-pointer

OUTPUT = ../build
OBJS = $(patsubst %.c,$(OUTPUT)/%.rel,$(wildcard *.c)) $(OUTPUT)/int.rel $(OUTPUT)/sound.rel
LIBS = ../lib/cpcrslib/*.lib ../lib/plw.lib ../lib/aplib.lib

all: CFLAGS := $(CFLAGS) #-DDEBUG -DFENCE_DEBUG -DET_DEBUG
all: $(OUTPUT)/$(TARGET).dsk $(OUTPUT)/$(TARGET).cdt
	chksize $(APP_ADDR) $(OUTPUT)/main.map

release: CFLAGS := $(CFLAGS) --max-allocs-per-node 2000000
release: $(OUTPUT)/$(TARGET).dsk $(OUTPUT)/$(TARGET).cdt
	test -d release || mkdir release
	cp $(OUTPUT)/$(TARGET).dsk $(OUTPUT)/$(TARGET).cdt release
	chksize $(APP_ADDR) $(OUTPUT)/main.map

cpce: all
	cpce $(OUTPUT)/$(TARGET).dsk

cpcec: all
	cpcec $(OUTPUT)/$(TARGET).dsk

winape: all
	winape $(OUTPUT)/$(TARGET).dsk

clk: all
	clk $(OUTPUT)/$(TARGET).dsk

rvm: all
	rvm -b=cpc6128 -w -p -ns -i $(shell realpath $(OUTPUT)/$(TARGET).dsk) -c='run"$(TARGET)\n'

$(OUTPUT)/%.rel: %.c
	$(CC) $(CFLAGS) $(LDFLAGS) -c $< -o $@

$(OUTPUT)/%.rel: %.z80
	$(AS) -g -o $@ $<

$(OUTPUT)/sound.rel: sound.z80 effects.z80 songs.z80

$(OUTPUT)/main.ap: crt0.s $(wildcard *.h) $(LIBS) $(OBJS) ../lib/plw_player.rel
	rm -f $(OUTPUT)/main.map
	$(AS) -g -o $(OUTPUT)/crt0.rel crt0.s
	$(CC) $(CFLAGS) $(LDFLAGS) -laplib -lcpcrslib -lplw --code-loc $(APP_ADDR) $(OUTPUT)/crt0.rel ../lib/plw_player.rel $(OBJS) -o $(OUTPUT)/main.ihx
	hex2bin -p 00 $(OUTPUT)/main.ihx
	apultra -w 8192 -v $(OUTPUT)/main.bin $@

$(OUTPUT)/loader.bin: loader.s turboload.s $(OUTPUT)/loading.bin $(OUTPUT)/main.ap
	echo "DISK = 1" > $(OUTPUT)/loader.opt
	echo "APP_EP = 0x$(shell awk ' /_main_init/ { print $$1 } ' $(OUTPUT)/main.map)" >> $(OUTPUT)/loader.opt
	echo "TMP_ADDR = $(TMP_ADDR)" >> $(OUTPUT)/loader.opt
	echo "SCRX_SIZE = $(shell stat -c '%s' $(OUTPUT)/loading.bin)" >> $(OUTPUT)/loader.opt
	echo "APP_ADDR = $(APP_ADDR)" >> $(OUTPUT)/loader.opt
	echo "APP_SIZE = $(shell stat -c '%s' $(OUTPUT)/main.bin)" >> $(OUTPUT)/loader.opt
	echo "APP_SIZE_PAK = $(shell stat -c '%s' $(OUTPUT)/main.ap)" >> $(OUTPUT)/loader.opt
	echo "LOADER_ADDR = $(LOADER_ADDR)" >> $(OUTPUT)/loader.opt
	echo "PAK_SLOP = $(PAK_SLOP)" >> $(OUTPUT)/loader.opt
	$(AS) -g -o $(OUTPUT)/loader.rel $<
	$(CC) $(CFLAGS) $(LDFLAGS) --code-loc $(LOADER_ADDR) -laplib -o $(OUTPUT)/loader.ihx $(OUTPUT)/loader.rel
	hex2bin -p 00 $(OUTPUT)/loader.ihx
	echo "DISK = 0" >> $(OUTPUT)/loader.opt
	$(AS) -g -o $(OUTPUT)/loader.rel $<
	$(CC) $(CFLAGS) $(LDFLAGS) --code-loc $(LOADER_ADDR) -laplib -o $(OUTPUT)/loader_disk.ihx $(OUTPUT)/loader.rel
	hex2bin -p 00 $(OUTPUT)/loader_disk.ihx

$(OUTPUT)/$(TARGET).dsk: $(OUTPUT)/loader.bin
	cp $(OUTPUT)/loader_disk.bin $(OUTPUT)/$(TARGET)
	idsk $@ -n -t 1 -i $(OUTPUT)/$(TARGET) -e $(LOADER_ADDR_HEX) -c $(LOADER_ADDR_HEX) > /dev/null
	rm -f $(OUTPUT)/$(TARGET)
	cp $(OUTPUT)/loading.bin $(OUTPUT)/main.bi0
	idsk $@ -t 1 -i $(OUTPUT)/main.bi0 -c $(TMP_ADDR_HEX) -s > /dev/null
	rm -f $(OUTPUT)/main.bi0
	cp $(OUTPUT)/main.ap $(OUTPUT)/main.bi1
	idsk $@ -t 1 -i $(OUTPUT)/main.bi1 -c $(shell printf "%x" $(shell expr $(LOADER_ADDR) + 1024)) -s > /dev/null
	rm -f $(OUTPUT)/main.bi1

$(OUTPUT)/$(TARGET).cdt: $(OUTPUT)/loader.bin
	2cdt -s 0 -n -X $(LOADER_ADDR) -L $(LOADER_ADDR) -r $(TARGET) $< $@ > /dev/null
	2cdt -m 2 $(OUTPUT)/loading.bin $@ > /dev/null
	2cdt -m 2 $(OUTPUT)/main.ap $@ > /dev/null

.PHONY: clean all cleanall release
clean:
	rm -f $(OUTPUT)/*

cleanall:
	make clean
	make -C ../tools clean
	make -C ../lib clean

include Makefile.deps