all: player1003but.bin player1003nwbut.bin \
	player1003-32but.bin player1003nw-32but.bin \
	player1003-3but.bin player1003nw-3but.bin

rom1003.o: rom1003.txt
	mkabs -o $@ -f $<

VCC = vcc
INCDIR = -Ilibc16 -I.
LIBDIR = -Llibc16 -L.
#NO_MIDI must be set in Makefile so that .mid is also excluded as a suffix
#-D NO_MIDI   -- no .mid, but plays midi
#-D NO_WMA    -- no .wma .wmv .asf, refuse to play file if HDAT1 'WM'
#-D ENABLE_WATCHDOG
#-D LOUDNESS_ON -- loudness on by default
COMMONFLAGS = -D ENABLE_WATCHDOG -D LOUDNESS_ON
VCCFLAGS = -P130 -g -O -fsmall-code $(COMMONFLAGS)
ASMDEFS  = -D VOL_VAL=0x2020 -D BASS_VAL=0x33d9 $(COMMONFLAGS)

.c.o:
	$(VCC) $(VCCFLAGS) $(INCDIR) -o $@ $<

.s.o:
	vsa $(ASMDEFS) -o $@ $<

####
# This is the SPI EEPROM programmer. prom.bin reads boot.img
####
EOBJS = proms.o prom.o rom1003.o
prom.bin: $(EOBJS)
	vslink -m mem_desc.lnk -k $(EOBJS) -o $@ -L./ -Llibc16/ -lc
	vsomd -o prom.omd prom.bin

####
# Here are the actual player versions.
####
main1003but.o: standalone.c standalone.h fat.h Makefile
	$(VCC) $(VCCFLAGS) $(INCDIR) -D LINEIN_BUTTONS=16 -D ENABLE_UI -o $@ standalone.c

main1003nwbut.o: standalone.c standalone.h fat.h Makefile
	$(VCC) $(VCCFLAGS) $(INCDIR) -D LINEIN_BUTTONS=16 -D ENABLE_UI -D NO_WMA -o $@ standalone.c

main1003-32but.o: standalone.c standalone.h fat.h Makefile
	$(VCC) $(VCCFLAGS) $(INCDIR) -D LINEIN_BUTTONS=32 -D ENABLE_UI -o $@ standalone.c

main1003nw-32but.o: standalone.c standalone.h fat.h Makefile
	$(VCC) $(VCCFLAGS) $(INCDIR) -D LINEIN_BUTTONS=32 -D ENABLE_UI -D NO_WMA -o $@ standalone.c

main1003-3but.o: standalone.c standalone.h fat.h Makefile
	$(VCC) $(VCCFLAGS) $(INCDIR) -D LINEIN_BUTTONS=3 -D ENABLE_UI -o $@ standalone.c

main1003nw-3but.o: standalone.c standalone.h fat.h Makefile
	$(VCC) $(VCCFLAGS) $(INCDIR) -D LINEIN_BUTTONS=3 -D ENABLE_UI -D NO_WMA -o $@ standalone.c

####
# Startup codes for vs1003.
#
# Change CLOCKF_VAL to match your system.
#
# VOL_VAL sets the default volume after bootup and watchdog reset.
# If VOL_VAL is not defined, the default will be -6.0dB (0x0c0c).
#
# BASS_VAL sets the SCI_BASS register value.
# If BASS_VAL is not defined, 0x0000 is used.
#
####

c1003.o: c.s Makefile
	#3.5x 12.288MHz (3.5x WMA)
	vsa -D CLOCKF_VAL=0xa000 -D PLL3_5 $(ASMDEFS) -o $@ c.s


LIBOBJS = buts.o asm-mmc.o asm-readdisk.o asm-fraglist.o asm-initfsys.o asm-openfile.o asm-writesec.o asm-nextsect.o asm-chk.o asm-chknw.o asm-swap.o asm-clk.o asm-myrand.o asm-saveword.o asm-shuffle.o

asm-chknw.o: asm-chk.s Makefile
	vsa -D NO_WMA $(ASMDEFS) -o $@ asm-chk.s
asm-chk.o: asm-chk.s Makefile
asm-mmc.o: asm-mmc.s Makefile
asm-fraglist.o: asm-fraglist.s fat.h
asm-initfsys.o: asm-initfsys.s fat.h
asm-openfile.o: asm-openfile.s fat.h
asm-myrand.o: asm-myrand.s

libstandalone.a: $(LIBOBJS)
	vsar ruv libstandalone.a $(LIBOBJS)


asm-mmc2.o: asm-mmc.s
	vsa -o asm-mmc2.o asm-mmc.s

c2.o: c2.s Makefile
	vsa -o $@ c2.s

c3.o: c2.s Makefile
	vsa $(ASMDEFS) -o $@ c2.s

player1003but.bin: c1003.o main1003but.o rom1003.o libstandalone.a
	vslink -m mem_desc.vs1003 -k -o $@ c1003.o main1003but.o rom1003.o $(LIBDIR) -lstandalone -lc
	vssym -Q $@

player1003nwbut.bin: c1003.o main1003nwbut.o rom1003.o libstandalone.a
	vslink -m mem_desc.vs1003 -k -o $@ c1003.o main1003nwbut.o rom1003.o $(LIBDIR) -lstandalone -lc
	vssym -Q $@

player1003-32but.bin: c1003.o main1003-32but.o rom1003.o libstandalone.a
	vslink -m mem_desc.vs1003 -k -o $@ c1003.o main1003-32but.o rom1003.o $(LIBDIR) -lstandalone -lc
	vssym -Q $@

player1003nw-32but.bin: c1003.o main1003nw-32but.o rom1003.o libstandalone.a
	vslink -m mem_desc.vs1003 -k -o $@ c1003.o main1003nw-32but.o rom1003.o $(LIBDIR) -lstandalone -lc
	vssym -Q $@

player1003-3but.bin: c1003.o main1003-3but.o rom1003.o libstandalone.a
	vslink -m mem_desc.vs1003 -k -o $@ c1003.o main1003-3but.o rom1003.o $(LIBDIR) -lstandalone -lc
	vssym -Q $@

player1003nw-3but.bin: c1003.o main1003nw-3but.o rom1003.o libstandalone.a
	vslink -m mem_desc.vs1003 -k -o $@ c1003.o main1003nw-3but.o rom1003.o $(LIBDIR) -lstandalone -lc
	vssym -Q $@


coff2boot: coff2boot.c
	gcc -Wall -O -o coff2boot coff2boot.c

boot.img: player1003-32but.bin coff2boot
	./coff2boot -x 0x30 player1003-32but.bin boot.img
	echo >>boot.img

boot1003nw.img: player1003nwbut.bin coff2boot
	./coff2boot -x 0x30 player1003nwbut.bin boot1003nw.img
	echo >>boot1003nw.img


dist:	player1003but.bin player1003nwbut.bin \
	player1003-32but.bin player1003nw-32but.bin \
	player1003-3but.bin player1003nw-3but.bin
	(cd docs; gmake pdf)
	rm -f code/*
	# Generate boot images for 25LC640
	./coff2boot -x 0x30 player1003but.bin code/player1003but.bin
	./coff2boot -x 0x30 player1003nwbut.bin code/player1003nwbut.bin
	./coff2boot -x 0x30 player1003-32but.bin code/player1003-32but.bin
	./coff2boot -x 0x30 player1003nw-32but.bin code/player1003nw-32but.bin
	./coff2boot -x 0x30 player1003-3but.bin code/player1003-3but.bin
	./coff2boot -x 0x30 player1003nw-3but.bin code/player1003nw-3but.bin
	# Insert an extra byte for word-programming software..
	echo >>code/player1003but.bin
	echo >>code/player1003nwbut.bin
	echo >>code/player1003-32but.bin
	echo >>code/player1003nw-3but.bin
	echo >>code/player1003-3but.bin
	echo >>code/player1003nw-3but.bin
	# Generate command files
	perl coff2cmd.pl player1003but.bin >code/player1003but.cmd
	perl coff2cmd.pl player1003nwbut.bin >code/player1003nwbut.cmd
	perl coff2cmd.pl player1003-32but.bin >code/player1003-32but.cmd
	perl coff2cmd.pl player1003nw-32but.bin >code/player1003nw-32but.cmd
	perl coff2cmd.pl player1003-3but.bin >code/player1003-3but.cmd
	perl coff2cmd.pl player1003nw-3but.bin >code/player1003nw-3but.cmd
	# Generate C loading tables
	perl cmdtotab.pl code/player1003but.cmd >code/player1003but.c
	perl cmdtotab.pl code/player1003nwbut.cmd >code/player1003nwbut.c
	perl cmdtotab.pl code/player1003-32but.cmd >code/player1003-32but.c
	perl cmdtotab.pl code/player1003nw-32but.cmd >code/player1003nw-32but.c
	perl cmdtotab.pl code/player1003-3but.cmd >code/player1003-3but.c
	perl cmdtotab.pl code/player1003nw-3but.cmd >code/player1003nw-3but.c
	rm -f 16button.zip
	cp docs/standalone.pdf 16button.pdf
	zip code/sources.zip Makefile *desc* *.[chs] libc16/* *.pl rom1003.txt
	zip -r 16button.zip code/* 16button.pdf
