#----------------------------------------------
#-- Lista de fuentes para simulación y síntesis
#   en simulación también está tb.v
#   en síntesis también está main.v
#----------------------------------------------
DEPSIM = systemCPC.v videoCPC.v tv80s.v tv80_core.v tv80_alu.v tv80_reg.v tv80_mcode.v keyb.v ay.v Tapeplayer.v
DEPSINT= pll.v systemCPC.v videoCPC.v tv80s.v tv80_core.v tv80_alu.v tv80_reg.v tv80_mcode.v keyb.v ay.v Tapeplayer.v
#-------------------------------------------------------
#-- Opciones

OPTIONS=NES 	#define NES for NES controller instead of joystic
#OPTIONS=NONE


#-------------------------------------------------------
#-- Objetivo por defecto: hacer simulacion y sintesis
#-------------------------------------------------------
all: sim
	
#----------------------------------------------
#-- make sim
#----------------------------------------------
#-- Objetivo para hacer la simulacion del
#-- banco de pruebas
#----------------------------------------------
sim: tb.vcd 
	#-- Ver visualmente la simulacion con gtkwave
	gtkwave tb.vcd tb.gtkw &
	
#-----------------------------------------------
#-  make sint
#-----------------------------------------------
#-  Objetivo para realizar la sintetis completa
#- y dejar el diseno listo para su grabacion en
#- la FPGA
#-----------------------------------------------

sint: main.bin
	../../lpc11loader/iceload -C $<

burn: main.bin
	../../lpc11loader/iceload -p $<

term:
	../../lpc11loader/iceload -t

burnrom:	../cpc/cpcromTAP.bin roms/OS_464.ROM roms/BASIC_1.0.ROM
	cat ../cpc/cpcromTAP.bin roms/OS_464.ROM roms/BASIC_1.0.ROM >_tmp_.bin
	../../lpc11loader/iceload -a 8128k -p _tmp_.bin
	rm _tmp_.bin

romTAP.hex:	romTAP.bin
	./tovhex $< $@

romTAP.bin:	romTAP.asm	Makefile
	sjasmplus --nologo --msg=war --syntax=F --lst=romTAP.lst $<


romBOOT.hex:	romBOOT.bin
	./tovhex $< $@

romBOOT.bin:	romBOOT.asm	Makefile
	sjasmplus --nologo --msg=war --syntax=F --lst=romBOOT.lst $<



#-------------------------------
#-- Compilacion y simulacion
#-------------------------------
tb.vcd: tbCPC.v $(DEPSIM) romTAP.hex romBOOT.hex
	
	#-- Compilar
	iverilog tbCPC.v $(DEPSIM) -o tb.out -DSIMULATION -DSIM -D$(OPTIONS)
	
	#-- Simular
	./tb.out
	

#------------------------------
#-- Sintesis completa
#------------------------------
rand.hex:
	icebram -g 8 8192 > rand.hex

main.bin: main.asc romTAP.hex rand.hex Makefile
	icebram rand.hex romTAP.hex < main.asc > final.asc
	icepack final.asc main.bin

main.asc:	pines.pcf mainCPC.v $(DEPSINT) rand.hex romBOOT.hex Makefile	
	#-- Sintesis 
	yosys -p "synth_ice40 -relut" -o main.json  -D$(OPTIONS) mainCPC.v $(DEPSINT) >sint.log
	#-- Place & route
	nextpnr-ice40 --hx4k --pcf pines.pcf --json main.json --asc $@ --package tq144 2>pnr.log

#-- Limpiar todo
clean:
	rm -f *.bin *.hex *.asc *.blif *.out *.vcd *.json *.log *~ *.ihx *.rel *.lst

#empaquetar 
pack:
	tar czvf - --directory=.. cpc/pll.v cpc/tv80_core.v cpc/tv80_reg.v cpc/tv80_mcode.v \
	cpc/tv80s.v cpc/tv80_alu.v cpc/systemCPC.v cpc/videoCPC.v cpc/mainCPC.v cpc/ay.v \
	cpc/keyb.v cpc/tbCPC.v cpc/Tapeplayer.v cpc/Makefile \
	cpc/pines.pcf cpc/romTAP.asm cpc/romTAP.hex cpc/romBOOT.asm cpc/romBOOT.hex \
	cpc/main.bin cpc/tovhex.c  >cpcplus.tgz
	
.PHONY: all clean

