CC		= gcc
CPPFLAGS	= $(OTHER)
CFLAGS		= -c -O2 -m68020-40 -fno-strength-reduce -fomit-frame-pointer -Wall -DGNU_C
#CFLAGS		= -c -g -m68020-40 -Wall -DGNU_C
LD		= gcc
LDFLAGS		=
#LDFLAGS		= -g
LDLIBS		= -lgem

default :
	@echo To build the Atari 800 Emulator, type:
	@echo make version
	@echo .
	@echo where version is one of
	@echo "  basic          just plain screen"
	@echo "  ncurses        ncurses fullscreen emulation"
	@echo "  gem            direct screen output"
	@echo "  asm            gem + CPU in assembler"
	@echo "  snd            gem + SOUND"
	@echo "  super          gem + SOUND + CPU in assembler"
	@echo . 
	@echo To reconfigure options, type: make config
	@echo To clean directory, type: make clean

basic :
	@make atari800 CPPFLAGS="-DBACK_SLASH -DBASIC" LDLIBS="-lm" OBJ="cpu.o atari_basic.o"
	@echo Finished.

ncurses :
	@make atari800 CPPFLAGS="-DBACK_SLASH -DCURSES -DANSI_NCURSES" LDLIBS="-lncurses -lm" OBJ="cpu.o atari_curses.o"
	@echo Finished.

gem :
	@make atari800 CPPFLAGS="-DBACK_SLASH -DUSE_CLOCK -DSET_LED -DBUFFERED_LOG -DSCREENSAVER" OBJ="cpu.o atari_falcon.o c2p_uni.o videl.o ikbd.o"
	@echo Finished.

snd :
	@make atari800 CPPFLAGS="-DBACK_SLASH -DUSE_CLOCK -DSET_LED -DBUFFERED_LOG -DDMASOUND -DSCREENSAVER" OBJ="cpu.o atari_falcon.o c2p_uni.o videl.o ikbd.o sound_dma.o"
	@echo Finished.

asm :
	@make atari800 CPPFLAGS="-DBACK_SLASH -DCPUASS -DUSE_CLOCK -DSET_LED -DBUFFERED_LOG -DSCREENSAVER" OBJ="cpu_asm.o atari_falcon.o c2p_uni.o videl.o ikbd.o cpu_m68k.o"
	@echo Finished.

super :
	@make atari800 CPPFLAGS="-DBACK_SLASH -DCPUASS -DUSE_CLOCK -DSET_LED -DBUFFERED_LOG -DDMASOUND -DSCREENSAVER" OBJ="cpu_asm.o atari_falcon.o c2p_uni.o videl.o ikbd.o cpu_m68k.o sound_dma.o"
	@echo Finished.

#
# ======================================================
# You should not need to modify anything below this here
# ======================================================
#

INCLUDES        =       config.h \
			rt-config.h \
			atari.h \
			colours.h \
			antic.h \
			gtia.h \
			pokey.h \
			pia.h \
			devices.h \
			monitor.h \
			sio.h \
			supercart.h \
			platform.h

config config.h	:	configure
	./configure

configure	:	configure.o prompts.o
	$(LD) $(LDFLAGS) configure.o prompts.o $(LDLIBS) -o configure

configure.o	:	configure.c
	$(CC) $(CPPFLAGS) $(CFLAGS) configure.c

OBJECTS =       atari.o \
		monitor.o \
		sio.o \
		devices.o \
		antic.o \
		gtia.o \
		pokey.o \
		pia.o \
		supercar.o \
		prompts.o \
		rtconfig.o \
		ui.o \
		list.o \
		pokeysnd.o \
		sound_falcon.o \
		ataripcx.o \
		log.o \
		compfile.o \
		memory.o \
		pbi.o \
		statesav.o

atari800        :       $(OBJECTS) $(OBJ)
	$(LD) $(LDFLAGS) $(OBJECTS) $(OBJ) $(LDLIBS) -o atari800
	# strip atari800

atari.o         :       atari.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) atari.c

cpu.o           :       cpu.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) cpu.c -o cpu.o

cpu_asm.o           :       cpu_asm.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) cpu_asm.c

monitor.o       :       monitor.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) monitor.c

sio.o           :       sio.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) sio.c

devices.o       :       devices.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) devices.c

antic.o         :       antic.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) antic.c

gtia.o          :       gtia.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) gtia.c

pokey.o         :       pokey.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) pokey.c

pia.o           :       pia.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) pia.c

supercar.o     :       supercart.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) supercart.c -o supercar.o

ui.o            :       ui.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) ui.c

list.o          :       list.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) list.c

rtconfig.o     :       rt-config.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) rt-config.c -o rtconfig.o

prompts.o       :       prompts.c prompts.h
	$(CC) $(CPPFLAGS) $(CFLAGS) prompts.c

sound_falcon.o		:       sound_falcon.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) sound_falcon.c

c2p_uni.o	:	c2p_uni.s c2pmac.s
	xgen -L1 c2p_uni.o c2p_uni.s
	gst2gcc gcc c2p_uni.o

videl.o	:	videl.s
	xgen -L1 videl.o videl.s
	gst2gcc gcc videl.o

sound_dma.o	:	sound_dma.s
	xgen -L1 sound_dma.o sound_dma.s
	gst2gcc gcc sound_dma.o

ikbd.o	:	ikbd.s
	xgen -L1 ikbd.o ikbd.s
	gst2gcc gcc ikbd.o

cpu_m68k.o	:	cpu_m68k.s
	xgen -L1 cpu_m68k.o cpu_m68k.s
	gst2gcc gcc cpu_m68k.o

pokeysnd.o	:       pokeysnd.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) -DSIGNED_SAMPLES -DPOKEYSND_BIG_ENDIAN pokeysnd.c

atari_x11.o     :       atari_x11.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) atari_x11.c

atari_falcon.o :       atari_falcon.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) atari_falcon.c

atari_curses.o  :       atari_curses.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) atari_curses.c

atari_amiga.o   :       atari_amiga.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) atari_amiga.c

nas.o           :       nas.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) nas.c

ataripcx.o	:	ataripcx.c
	$(CC) $(CPPFLAGS) $(CFLAGS) ataripcx.c
		
log.o	:	log.c log.h
	$(CC) $(CPPFLAGS) $(CFLAGS) log.c
		
compfile.o	:	compfile.c
	$(CC) $(CPPFLAGS) $(CFLAGS) compfile.c
		
clean   :
	rm -f configure
	rm -f config.h
	rm -f core
	rm -f *.o
