######## ost.apollo.mess0149/Makefile - 2013-07-15 - ost ########

APOLLO_DIFFS = mess0149-130714.diffs

TARGET = mess
# use SUBTARGET = $(TARGET) to build full mess instead of "tiny mess"
SUBTARGET = tiny
#-SUBTARGET = $(TARGET)

MESS0149 = mess0149

ifeq ($(TARGET),$(SUBTARGET))
EMULATOR = $(MESS0149)/$(TARGET)
else
EMULATOR = $(MESS0149)/$(TARGET)$(SUBTARGET)
endif

# add networking code
MFLAGS += USE_NETWORK=1

# force pcap networking on Linux (currently for test only)
#-MFLAGS += SDL_NETWORK=pcap

# uncomment next line to include the symbols
#-MFLAGS += SYMBOLS=1

# uncomment this to verify assertions
#-MFLAGS += DEBUG=1

# uncomment to disable the Qt debugger and fall back to a system default
MFLAGS += NO_USE_QTDEBUG=1

# dn3000/dn3500 will use the 15" color or monochrome screen (1024x800)
# dn3000_19i/dn3500_19i will use the 19" monochrome screen (1280x1024)

DN3000 = dn3000S
DN3500 = dn3500
#-DN3500 = dn3500_19i
DN5500 = dn5500
DSP3500 = dsp3500

# TODO: replace these with your own disk, tape and floppy image files

TEST_DISK0 = /tmp/new_disk.awd
TEST_DISK1 = /tmp/boogie-sr10.4-101209-1.awd
TEST_DISK2 = /tmp/dn3500-sr10.2-920611.awd
TEST_DISK3 = /tmp/dn3500-sr10.3-120404-1.awd
TEST_DISK4 = /tmp/dn3500-sr10.4-111229-1a.awd
TEST_DISK5 = /tmp/zorro-sr10.2-971229-3a.awd
TEST_DISK6 = /tmp/zorro-sr10.4-110301-1a.awd
TEST_DISK7 = /tmp/dn5500-sr10.4-110808.awd
TEST_DISK8 = /tmp/iworks-1993-930430.awd

TEST_DISK = $(TEST_DISK0)

TEST_CTAPE0 = /tmp/new_tape.act
TEST_CTAPE1 = /tmp/019593-001.CRTG_STD_SFW_BOOT_1-REV.A.act
TEST_CTAPE2 = /tmp/019594-001.CRTG_STD_SFW_1.act
TEST_CTAPE3 = /tmp/sau7+8-110621.act

TEST_CTAPE = $(TEST_CTAPE1)

TEST_FLOPPY0 = /tmp/new_floppy.afd
TEST_FLOPPY1 = /tmp/boogie01-100409.afd
TEST_FLOPPY2 = /tmp/boogie02-100409.afd
TEST_FLOPPY3 = /tmp/pluto01-090920.afd
TEST_FLOPPY4 = /tmp/float2+3-120324.afd

TEST_FLOPPY = $(TEST_FLOPPY0)

DSP_OPTIONS = -log
#-DSP_OPTIONS += -oslog
#-DSP_OPTIONS += -verbose
DSP_OPTIONS += -disk1 $(TEST_DISK)
#-DSP_OPTIONS += -disk2 $(TEST_DISK8)
DSP_OPTIONS += -ct $(TEST_CTAPE)
DSP_OPTIONS += -flop $(TEST_FLOPPY)
DN_OPTIONS = $(DSP_OPTIONS) -nosound

# uncomment this to use a second CPU core for video processing
DN_OPTIONS += -mt

# add non-default view
#-DN_OPTIONS += -nowindow -view wxga
DN_OPTIONS += -view sxga

# uncomment this line for proper mouse usage (i.e. to grab the mouse)
#-DN_OPTIONS += -mouse

DEBUG_OPTIONS = -debug -debugscript mess.script

ROM_PATH = apollo/roms/dn3500
CTAPE_PATH = apollo/ctape

# ------------------------------------

#-default: test

all:	mess roms ctapes $(TEST_DISK) $(TEST_CTAPE) $(TEST_FLOPPY)

mess:	$(EMULATOR) 
	rm -f $@ && ln -s $(EMULATOR) $@

net:
	$(PP) sudo $(MAKE) $(MFLAGS) USER=$${USER} TAP=tap-mess-$${UID}-0 setcap tap

setcap: $(EMULATOR)
	/sbin/setcap cap_net_raw,cap_net_admin=eip $?
	/sbin/getcap $?

tap:
	# see man tunctl
	/sbin/tunctl -d $(TAP)          
	/sbin/tunctl -u $(USER) -t $(TAP)          
	/sbin/ifconfig $(TAP) 192.168.2.99 up
	/sbin/route del -net 192.168.2.0 netmask 255.255.255.0 dev $(TAP)
	/bin/sh -c "echo 1 > /proc/sys/net/ipv4/conf/$(TAP)/proxy_arp"
	# dn3500
	/sbin/route add -host 192.168.2.30 dev $(TAP)
	/sbin/arp -Ds 192.168.2.30 $(TAP) pub
	# zorro
	/sbin/route add -host 192.168.2.1 dev $(TAP)
	/sbin/arp -Ds 192.168.2.1 $(TAP) pub
	# boogie
	/sbin/route add -host 192.168.2.12 dev $(TAP)
	/sbin/arp -Ds 192.168.2.12 $(TAP) pub

test:   all net
	$(EMULATOR) $(DN3500) $(DN_OPTIONS) #- -verbose

debug:	all
	$(EMULATOR) $(DN3500) $(DN_OPTIONS) $(DEBUG_OPTIONS)

test1:	all
	$(EMULATOR) $(DN3500) $(DN_OPTIONS)

test2:	all
	$(EMULATOR) $(DSP3500) $(DSP_OPTIONS) # -video none

test3:	all
	$(EMULATOR) $(DN3000) $(DN_OPTIONS)

test4:	all
	$(EMULATOR) dsp3000 $(DSP_OPTIONS)

test5:	all
	$(EMULATOR) $(DN5500) $(DN_OPTIONS)

test6:	all
	$(EMULATOR) dsp5500 $(DSP_OPTIONS)

x68000: $(EMULATOR) apollo/floppy/TelenetMusicBoxReno.xdf.gz
	gunzip < apollo/floppy/TelenetMusicBoxReno.xdf.gz >/tmp/x68000.xdf
	$(EMULATOR) x68000 -flop1 /tmp/x68000.xdf

dectalk: $(EMULATOR)
	$(EMULATOR) dectalk

# ------------------------------------

/tmp/%.afd: apollo/floppy/%.afd.gz
	gunzip <$? >$@

/tmp/%.awd: apollo/disk/%.awd.gz
	gunzip <$? >$@

/tmp/%.act: apollo/ctape/%.act.gz
	gunzip <$? >$@

apollo/disk/%.awd.gz: /opt1/apollo/zorro/sr10.2-971229/%.img.gz
#apollo/disk/%.awd.gz: /opt1/apollo/zorro/sr10.4-110301/%.img.gz
#apollo/disk/%.awd.gz: /opt1/apollo/boogie/%.img.gz
	gunzip < $<  >/tmp/xxx.img
	java -jar apollo/disk/fixHeader.jar /tmp/xxx.img /tmp/xxx.awd
	gzip </tmp/xxx.awd >$@
	rm -f /tmp/xxx.img /tmp/xxx.awd 
	chmod 444 $@

$(TEST_FLOPPY0):
	# use this to create a new floppy
	dd if=/dev/zero of=$@ ibs=16384 count=77

$(TEST_DISK0):
#-	rm -f $@ # use this to create a 348MB disk
#-	rm -f $@ ; touch $@ # use this to create a 155MB disk

# ------------------------------------

ctapes:	$(CTAPE_PATH) \
	$(CTAPE_PATH)/019593-001.CRTG_STD_SFW_BOOT_1-REV.A.ct.gz \

$(CTAPE_PATH):
	mkdir -p -m755 $@

#-/tmp/%.ct: $(CTAPE_PATH)/%.ct.gz
#-	gunzip <$? >$@

$(TEST_CTAPE0): # nothing to do

$(TEST_CTAPE1): $(CTAPE_PATH)/019593-001.CRTG_STD_SFW_BOOT_1-REV.A.ct.gz 
	gunzip <$? >$@

$(TEST_CTAPE2): $(CTAPE_PATH)/019594-001.CRTG_STD_SFW_1.ct.gz 
	gunzip <$? >$@

$(CTAPE_PATH)/019593-001.CRTG_STD_SFW_BOOT_1-REV.A.ct.gz:
	wget --user-agent="" -O $@ http://bitsavers.org/bits/Apollo/SR10.4/019593-001.CRTG_STD_SFW_BOOT_1-REV.A.ct.gz
	chmod 444 $@
 
$(CTAPE_PATH)/019594-001.CRTG_STD_SFW_1.ct.gz:
	wget --user-agent="" -O $@ http://bitsavers.org/bits/Apollo/SR10.4/019594-001.CRTG_STD_SFW_1.ct.gz
	chmod 444 $@

# ------------------------------------

roms:	$(ROM_PATH) \
	$(ROM_PATH)/5500_boot_a1631-80046_1-30-92.bin \
	$(ROM_PATH)/3500_boot_12191_7.bin \
	$(ROM_PATH)/3000_boot_8475_7.bin \
	$(ROM_PATH)/3000_3c505_010728-00.bin \
	$(ROM_PATH).zip

$(ROM_PATH).zip: $(ROM_PATH)
	cd $(ROM_PATH) && zip -r ../dn3500.zip *

$(ROM_PATH):
	mkdir -p -m755 $@

$(ROM_PATH)/5500_boot_a1631-80046_1-30-92.bin:
	wget --user-agent="" -O $@ "http://bitsavers.org/bits/Apollo/firmware/5500_BOOT_A1631-80046_1-30-92.bin"
	chmod 444 $@

$(ROM_PATH)/3500_boot_12191_7.bin:
	wget --user-agent="" -O $@ "http://bitsavers.org/bits/Apollo/firmware/3500_BOOT_12191_7.bin"
	chmod 444 $@

$(ROM_PATH)/3000_boot_8475_7.bin:
	wget --user-agent="" -O $@ "http://bitsavers.org/bits/Apollo/firmware/3000_BOOT_8475_7.bin"
	chmod 444 $@

$(ROM_PATH)/3000_3c505_010728-00.bin:
	wget --user-agent="" -O $@ "http://bitsavers.org/bits/Apollo/firmware/3000_3C505_010728-00.bin"
	chmod 444 $@

# ------------------------------------

$(EMULATOR): $(MESS0149)
	cd $(MESS0149) && $(MAKE) TARGET=$(TARGET) SUBTARGET=$(SUBTARGET) $(MFLAGS)

$(MESS0149):
	$(MAKE) $(MFLAGS) mame0149s.zip ;#- 0149u1_diff.zip
	mkdir $@
	cd $@ && unzip -q -o ../mame0149s.zip
	cd $@ && unzip -q -aa -o mame.zip
	cd $@ && unzip -q -o mame.zip src/emu/uismall.png
	cd $@ && rm -f mame.zip
#-	cd $@ && rm -rf hash
#-	cd $@ && unzip -q -aa -c ../0149u1_diff.zip | patch -E -s -p0 
	cd $@ && patch -p0 -bz .Orig <../$(APOLLO_DIFFS)

mame0149s.zip:
	wget --user-agent="" -O $@ http://mamedev.org/downloader.php?file=releases/$@
	chmod 444 $@

0149u1_diff.zip:
	wget --user-agent="" -O $@ http://mamedev.org/updates/$@
	chmod 444 $@

trunk:
	svn checkout svn://dspnet.fr/mame/trunk 
	test -x $(MESS0149) || ln -s $@ $(MESS0149)

# ------------------------------------

diffs:
	(cd $(MESS0149) && for i in `find src -name \*.Orig -print|sed -e s/.Orig//g|sort`; \
	  do diff -Naur $$i.Orig $$i;done) >$(MESS0149)-`date +%y%m%d`.diffs; :

dist:
	cd .. && tar -czf /tmp/ost.apollo.$(MESS0149)-`date +%y%m%d`.tar.gz -X ost.apollo.$(MESS0149)/.excludes ost.apollo.$(MESS0149)
	cd .. && tar -czf /tmp/ost.apollo.$(MESS0149)-apollo-`date +%y%m%d`.tar.gz -X ost.apollo.$(MESS0149)/.excludes-apollo ost.apollo.$(MESS0149)/apollo

#-------------------------------------------------

clean:
	rm -f error.log sound.log $(EMULATOR) mess
	find . -name \*.bak -delete

clean1:	clean
	find . -name apollo\*.o -delete
	find . -name omti8621.o -delete
	find . -name sc499.o -delete
	find . -name 3c505.o -delete

clean2: clean1
	rm -rf $(MESS0149)/obj*/sdl/emu/cpu/m68000
	rm -rf $(MESS0149)/obj*/sdl/lib/softfloat

clobber: clean
	rm -rf $(MESS0149)
	rm -rf trunk
