##################################################################################
## THOR Basic++                                                     		##
## A free Basic for the Atari 8 Bit series               			##
## (c) 2015 THOR Software, Thomas Richter                           		##
## This is based on Atari Basic, as developed by				##
## Paul Laughton and Kathleen O'Brien, Shepardson Microsystems			##
## as found in: The Atari BASIC SOURCE BOOK	by Bill Wilkinson		##
## Compute! Publications (1983)							##
## THOR Os									##
## A free operating system for the Atari 8 bit series				##
## (c) 2003 THOR Software, Thomas Richter					##
## $Id: makefile,v 1.13 2015/09/12 16:26:25 thor Exp $				##
##										##
## Makefile for this project							##
##################################################################################

.PHONY:		all clean

MAKEILE		=	makefile
ASM		=	ca65
AFLAGS		=	-W1 -g --cpu 6502 -I../osrom -t atari
RM		=	rm
LN		=	ld65
BASCONFIG	=	basic.conf
BASLOCONFIG	=	basic.lo.conf
BASHICONFIG	=	basic.hi.conf
LNFLAGS		=	--dbgfile basic.debug
ECHO		=	echo
CC		=	cc
DIR		=	basic++/


SOURCES		=	basicmain basicparser basicexecution basicexpression basicoperators basicstatements \
			basicmath basicio basicstack basicmemory basicerror \
			syntax statementvector operatorvector constants
HEADER		=	basicmain basicparser basicexecution basicexpression basicoperators basicstatements \
			basicmath basicio basicstack basicmemory basicerror \
			syntax statementvector operatorvector vectors constants basicmacros

BASOBJECTS	=	$(foreach file,$(SOURCES),$(file).o) vectors.o
INCLUDES	=	$(foreach file,$(HEADER),$(file).i)
BASASM		=	$(foreach file,$(SOURCES),$(file).asm) vectors.asm
BASMAINOBJECTS	=	$(foreach file,$(SOURCES),$(file).o)

all	:	basdist basic.exe

%.o	: 	%.asm %.i
	@ $(ECHO) "Assembling" $*.asm
	@ $(ASM) $(AFLAGS) $*.asm -o $*.o

basdist	:	$(BASOBJECTS) $(INCLUDES) $(BASCONFIG)
	@ $(ECHO) "Linking..."
	@ $(LN) $(LNFLAGS) -C $(BASCONFIG) $(BASOBJECTS) -o basdist

clean	:
	@ $(RM) -f *.o *.dump *.bin *.reloc *.exe basdist basic++.tgz

distrib:	basic++.tgz

basic++.zip:	basic++.tgz basic.exe basdist
	@ zip basic++.zip basic++.tgz basic.exe basdist

basic++.tgz:
	@ make clean
	cd .. && tar -czf $(DIR)basic++.tgz $(DIR)*.asm $(DIR)*.i $(DIR)makefile $(DIR)README $(DIR)*.conf

prebasiclo.bin:	$(BASMAINOBJECTS) $(INCLUDES) $(BASLOCONFIG)
	@ $(ECHO) "Linking..."
	@ $(LN) $(LNFLAGS) -C $(BASLOCONFIG) $(BASMAINOBJECTS) -o prebasiclo.bin

prebasichi.bin:	$(BASMAINOBJECTS) $(INCLUDES) $(BASHICONFIG)
	@ $(ECHO) "Linking..."
	@ $(LN) $(LNFLAGS) -C $(BASHICONFIG) $(BASMAINOBJECTS) -o prebasichi.bin

basicinit.bin:	basicinit.o basicinit.asm basicinit.i basicinit.conf
	@ $(ECHO) "Linking..."
	@ $(LN) $(LNFLAGS) -C basicinit.conf basicinit.o -o basicinit.bin

reloc:		reloc.c
	@ $(ECHO) "Compling the relocation program"
	$(CC) reloc.c -o reloc

bintohex:	bintohex.c
	@ $(ECHO) "Compling the bintohex program"
	$(CC) bintohex.c -o bintohex

createbinfile:	createbinfile.c
	@ $(ECHO) "Compiling the createbinfile program"
	$(CC) createbinfile.c -o createbinfile

basic.exe:	prebasiclo.bin prebasichi.bin basicinit.bin createbinfile reloc
	@ ./reloc -o prebasiclo.bin prebasichi.bin basic.reloc
	@ dd if=/dev/zero of=zero.reloc bs=1 count=1
	@ cat basicinit.bin basic.reloc zero.reloc >basic.bin
	@ ./createbinfile basic.bin basicinit.obj 0x6800 0x6800
	@ ./createbinfile -n prebasiclo.bin basic.obj 0x7000
	@ cat basicinit.obj basic.obj >basic.exe
