CC		= gcc
CPPFLAGS	= $(OTHER)
CFLAGS		= -c -O3 -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		=

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 "  videl          VIDEL resolution"
	@echo "  falcon         VIDEL + SOUND"
	@echo "  asm            VIDEL + CPU in assembler"
	@echo "  super          VIDEL + 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.

videl :
	@make atari800 CPPFLAGS="-DBACK_SLASH -DBACKUP_MSG -DUSE_CLOCK" OBJ="cpu.o atari_falcon.o c2p.o c2p_320.o c2p_352.o videl.o ikbd.o"
	@echo Finished.

falcon :
	@make atari800 CPPFLAGS="-DBACK_SLASH -DBACKUP_MSG -DUSE_CLOCK -DDMASOUND" OBJ="cpu.o atari_falcon.o c2p.o c2p_320.o c2p_352.o videl.o ikbd.o pokey23.o sound_dma.o"
	@echo Finished.

asm :
	@make atari800 CPPFLAGS="-DBACK_SLASH -DCPUASS -DUSE_CLOCK" OBJ="cpu_asm.o atari_falcon.o c2p.o c2p_320.o c2p_352.o videl.o ikbd.o cpu_m68k.o"
	@echo Finished.

super :
	@make atari800 CPPFLAGS="-DBACK_SLASH -DCPUASS -DUSE_CLOCK -DDMASOUND" OBJ="cpu_asm.o atari_falcon.o c2p.o c2p_320.o c2p_352.o videl.o ikbd.o cpu_m68k.o pokey23.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 \
		sound_falcon.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.o	:	c2p.s c2pmac.s
	xgen -L1 c2p.o c2p.s
	gst2gcc gcc c2p.o

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

c2p_352.o	:	c2p_352.s c2pmac.s
	xgen -L1 c2p_352.o c2p_352.s
	gst2gcc gcc c2p_352.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

pokey23.o	:       pokey23.c $(INCLUDES)
	$(CC) $(CPPFLAGS) $(CFLAGS) -DSIGNED_SAMPLES -DBIG_ENDIAN pokey23.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

clean   :
	rm -f configure
	rm -f config.h
	rm -f core
	rm -f *.o
