NASM   = d:/nasm/nasm
AFLAGS = -f coff
CFLAGS = -c -m486 -fno-rtti -fno-exceptions -Werror
SFLAGS = -c -Wa,-L
DFLAGS = -g -DDEBUG
PGCC   = gcc -O6
OGCC   = oldgcc -O3
GCC    = oldgcc
OBJ    = e:/sneese/obj
OBJS   = CPUmain.o SPCmain.o memblank.o memlo.o memhi.o DMA.o PPU.o APUskip.o mode7.o screenL.o tilesL.o spriteL.o scrmode.o font.o main.o guicore.o emugui.o romload.o helper.o sound.o
SRC    = .
EXE    = e:/sneese/hdma.exe
ALLEG  = -lalleg

$(EXE) : $(addprefix $(OBJ)/, $(OBJS))
	gxx -o $(EXE) $(addprefix $(OBJ)/, $(OBJS)) $(ALLEG)

$(OBJ)/main.o: $(addprefix $(SRC)/, main.cc wrapaleg.h types.h romload.h scrmode.h CPU.h SPC.h sound.h helper.h mem.h guicore.h emugui.h apuskip.h misc.h)
	$(GCC) $(CFLAGS) $(DFLAGS) -o $(OBJ)/main.o main.cc

$(OBJ)/guicore.o: $(addprefix $(SRC)/, guicore.cc guicore.h wrapaleg.h romload.h types.h font.h helper.h)
	$(GCC) $(CFLAGS) $(DFLAGS) -o $(OBJ)/guicore.o guicore.cc

$(OBJ)/emugui.o: $(addprefix $(SRC)/, emugui.cc guicore.h wrapaleg.h types.h font.h helper.h CPU.h SPC.h sound.h romload.h)
	$(GCC) $(CFLAGS) $(DFLAGS) -o $(OBJ)/emugui.o emugui.cc

$(OBJ)/font.o: $(addprefix $(SRC)/, font.asm)
	$(NASM) $(AFLAGS) -o $(OBJ)/font.o font.asm

$(OBJ)/romload.o: $(addprefix $(SRC)/, romload.cc wrapaleg.h romload.h helper.h CPU.h SPC.h mem.h sound.h)
	$(GCC) $(CFLAGS) $(DFLAGS) -o $(OBJ)/romload.o romload.cc

$(OBJ)/scrmode.o: $(addprefix $(SRC)/, scrmode.S misc.i)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/scrmode.o scrmode.S

$(OBJ)/CPUmain.o: $(addprefix $(SRC)/, CPUmain.S misc.i mem.i CPU.i CPUaddr.S CPUmacro.S CPU0.S CPU1.S CPU2.S CPU3.S CPU4.S CPU5.S CPU6.S CPU7.S CPU8.S CPU9.S CPUA.S CPUB.S CPUC.S CPUD.S CPUE.S CPUF.S)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/CPUmain.o CPUmain.S

$(OBJ)/SPCmain.o: $(addprefix $(SRC)/, SPCmain.S misc.i SPC.i SPCaddr.S SPCmacro.S SPC0.S SPC1.S SPC2.S SPC3.S SPC4.S SPC5.S SPC6.S SPC7.S SPC8.S SPC9.S SPCA.S SPCB.S SPCC.S SPCD.S SPCE.S SPCF.S)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/SPCmain.o SPCmain.S

$(OBJ)/memlo.o: $(addprefix $(SRC)/, memlo.S misc.i memmap.i)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/memlo.o memlo.S

$(OBJ)/memhi.o: $(addprefix $(SRC)/, memhi.S misc.i memmap.i)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/memhi.o memhi.S

$(OBJ)/memblank.o: $(addprefix $(SRC)/, memblank.S misc.i memmap.i)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/memblank.o memblank.S

$(OBJ)/PPU.o: $(addprefix $(SRC)/, PPU.S misc.i PPU.i CPU.i key.i DMA.i spriteL.i)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/PPU.o PPU.S

$(OBJ)/APUskip.o: $(addprefix $(SRC)/, APUskip.S misc.i)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/APUskip.o APUskip.S

$(OBJ)/DMA.o: $(addprefix $(SRC)/, DMA.S misc.i DMA.i)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/DMA.o DMA.S

$(OBJ)/screenL.o: $(addprefix $(SRC)/, screenL.S spriteL.i PPU.i screen.i misc.i irq.S scankeys.h key.i CPU.i DMA.i SPC.i)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/screenL.o screenL.S

$(OBJ)/mode7.o: $(addprefix $(SRC)/, mode7.S misc.i spriteL.i screen.i)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/mode7.o mode7.S

$(OBJ)/tilesL.o: $(addprefix $(SRC)/, tilesL.S misc.i)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/tilesL.o tilesL.S

$(OBJ)/spriteL.o: $(addprefix $(SRC)/, spriteL.S misc.i)
	$(GCC) $(SFLAGS) $(DFLAGS) -o $(OBJ)/spriteL.o spriteL.S

$(OBJ)/helper.o: $(addprefix $(SRC)/, helper.c wrapaleg.h CPU.h SPC.h misc.h)
	$(OGCC) $(CFLAGS) $(DFLAGS) -o $(OBJ)/helper.o helper.c

$(OBJ)/sound.o: $(addprefix $(SRC)/, sound.c wrapaleg.h helper.h misc.h)
	$(OGCC) $(CFLAGS) $(DFLAGS) -o $(OBJ)/sound.o sound.c
