# Genesis Plus - Sega Mega Drive emulator
# (c) 1999, 2000, 2001, 2002, 2003  Charles MacDonald
# Sega Dreamcast port (c) 2004 Stuart Dalton
# Experimental (hardware accelerated) version

TARGET = genplus-x.elf
BIN = genplus-x.bin
FIRSTREAD = 1st_read.bin

OBJS = genesis.o xvdp.o xrender.o system.o unzip.o fileio.o loadrom.o io.o mem68k.o memz80.o membnk.o memvdp.o
OBJS += sound.o fm.o sn76496.o
OBJS += error.o font.o main.o menu.o snd_stream.o
PROBJS = z80.o
PROBJS += m68kcpu.o m68kops.o m68kopac.o m68kopdm.o m68kopnz.o
PROBJS += c68k.o c68kexec.o cpu68k.o
GSRC = ../m68k/m68kops.c ../m68k/m68kopac.c ../m68k/m68kopdm.c ../m68k/m68kopnz.c

CDRECORD_ID = ATAPI:0,0,0
CDRECORD_DEV = /dev/hdc

all: rm-elf $(TARGET)

include $(KOS_BASE)/Makefile.rules

KOS_LOCAL_CFLAGS = -Os -I. -I.. -I../cpu -I../sound -I../c68k -I ../m68k -DLSB_FIRST -DALIGN_LONG -DXVDP -DHIGH_RES

clean:
	rm -f $(OBJS) $(TARGET) $(BIN) $(FIRSTREAD)

rclean:
	rm -f $(OBJS) $(PROBJS) $(TARGET) $(BIN) $(FIRSTREAD) $(GSRC) ../m68k/m68kmake

rm-elf:
	-rm -f $(TARGET) $(BIN) $(FIRSTREAD)

$(TARGET): $(OBJS) $(PROBJS)
	$(KOS_CC) $(KOS_CFLAGS) $(KOS_LDFLAGS) -o $(TARGET) $(KOS_START) \
		$(OBJS) $(PROBJS) -L$(KOS_BASE)/lib -lm -lz  $(KOS_LIBS)

%.o: %.c
	$(KOS_CC) $(KOS_CFLAGS) $(KOS_LOCAL_CFLAGS) -D_arch_$(KOS_ARCH) $(KOS_ALL_INCS) -c $< -o $@

%.o: ../%.c
	$(KOS_CC) $(KOS_CFLAGS) $(KOS_LOCAL_CFLAGS) -D_arch_$(KOS_ARCH) $(KOS_ALL_INCS) -c $< -o $@

%.o: ../c68k/%.c
	$(KOS_CC) $(KOS_CFLAGS) $(KOS_LOCAL_CFLAGS) -D_arch_$(KOS_ARCH) $(KOS_ALL_INCS) -c $< -o $@

%.o: ../cpu/%.c
	$(KOS_CC) $(KOS_CFLAGS) $(KOS_LOCAL_CFLAGS) -D_arch_$(KOS_ARCH) $(KOS_ALL_INCS) -c $< -o $@

%.o: ../sound/%.c
	$(KOS_CC) $(KOS_CFLAGS) $(KOS_LOCAL_CFLAGS) -D_arch_$(KOS_ARCH) $(KOS_ALL_INCS) -c $< -o $@

%.o: ../m68k/%.c
	$(KOS_CC) $(KOS_CFLAGS) $(KOS_LOCAL_CFLAGS) -D_arch_$(KOS_ARCH) $(KOS_ALL_INCS) -DGENESIS_HACKS="1" -c $< -o $@

$(GSRC): ../m68k/m68kmake
	cd ../m68k && ./m68kmake

../m68k/m68kmake: ../m68k/m68kmake.c
	gcc ../m68k/m68kmake.c -o ../m68k/m68kmake

$(BIN): $(TARGET)
	$(KOS_STRIP) $(TARGET)
	$(KOS_CC_BASE)/bin/sh-elf-objcopy -O binary $(TARGET) $(BIN)

$(FIRSTREAD): $(BIN)
	$(KOS_CC_BASE)/bin/sh-elf-scramble $(BIN) $(FIRSTREAD)

dist: $(TARGET) $(BIN) $(FIRSTREAD)

newcd: $(BIN)
	mv $(BIN) disc/data/1st_read.bin
	mkisofs -l -J -R -o disc/session1.iso disc/data
	rm disc/data/1st_read.bin
	cdrecord dev=$(CDRECORD_ID) gracetime=2 -multi -eject -xa disc/session1.iso
	rm disc/session?.iso

mscd: $(BIN)
	mv $(BIN) disc/data/1st_read.bin
	mkisofs -C `cdrecord dev=$(CDRECORD_ID) -msinfo` -M $(CDRECORD_DEV) -l -J -R -o disc/session2.iso disc/data
	rm disc/data/1st_read.bin
	cdrecord dev=$(CDRECORD_ID) gracetime=2 -multi -eject -xa disc/session2.iso
	rm disc/session?.iso

selfboot: $(FIRSTREAD)
	mkisofs -G disc/IP.BIN -l -J -R -o disc/session1.iso disc/data $(FIRSTREAD)
	dd if=disc/session1.iso bs=2048 count=17 of=disc/session2.iso
	dd if=/dev/zero bs=2048 count=283 >> disc/session2.iso
	cdrecord dev=$(CDRECORD_ID) -multi -xa disc/session1.iso
	cdrecord dev=$(CDRECORD_ID) -eject -xa disc/session2.iso
	rm disc/session?.iso
