SOURCES=processor.v testbench.v memory.v registers.v alu.v
INCLUDES=proc_state_def.v
VVP=processor.vvp

.PHONY: run
run: ${VVP}
	vvp ${VVP}

.PHONY: build
build: ${VVP}

.PHONY: wave
wave: ${VVP}
	vvp ${VVP} -lxt2
	gtkwave test.lx2 gtkwave_savefile.gtkw

${VVP} : ${SOURCES} ${INCLUDES} boot_code.txt
	iverilog -g2012 ${SOURCES} -o $@

.PHONY: clean
clean:
	rm -f ${VVP} test.lx2 boot_code.txt boot_code.bin

boot_code.txt:boot_code.bin
	dd if=/dev/zero bs=1 count=256 of=boot_code.stage status=none
	dd if=boot_code.bin of=boot_code.stage conv=notrunc,nocreat status=none
	xxd -ps -c 2 boot_code.stage > boot_code.txt
	rm boot_code.stage

boot_code.bin:boot_code.asm
	as86 -0 $< -b $@

.PHONY: dumpas
dumpas: boot_code.bin
	objdump -D -b binary -m i8086 boot_code.bin