.SUFFIXES : .asm .x .com

# DEFINES
# MAKEDEP	=makefile
INCDIR	=inc
CC	=gcc -g -O2 -Wall -W -fno-builtin -I$(INCDIR)
# must use a.out for mixed 16- and 32-bit code
NASM	=nasm -f aout -dUNDERBARS=1 -i$(INCDIR)/
LSCRIPT	=krnl.ld
LD	=ld -nostdlib -T $(LSCRIPT)
OBJS	=start.o krnl.o pnp.o vm86.o video.o vga.o debug.o
# vm86.o
LIBS	=lib/libk.a

# TARGETS
all : vm86.com

clean :
	deltree /y *.com *.x *.o *.lst

realclean : clean
	make -C lib clean

# IMPLICIT RULES
.c.o :
	$(CC) -c -o$@ $<

.asm.o :
	$(NASM) -o$@ $<

# DEPENDENCIES
start.o : start.asm $(MAKEDEP)

krnl.o : krnl.c defs.h $(MAKEDEP)

pnp.o : pnp.c defs.h $(MAKEDEP)

vm86.o : vm86.c defs.h $(MAKEDEP)

video.o : video.c defs.h $(MAKEDEP)

vga.o : vga.c $(MAKEDEP)

debug.o : debug.c defs.h $(MAKEDEP)

# EXPLICIT RULES
lib/libk.a :
	make -C lib

vm86.com : vm86.x $(MAKEDEP)
	objcopy -O binary vm86.x $@
#	echo 16-bit code starts here: >2.lst
#	ndisasm -o 0x100 -k 0x240,65535 $@ >>2.lst
#	echo 32-bit code starts here: >>2.lst
#	ndisasm -o 0x300 -e 0x200 -u $@ >>2.lst

vm86.x : $(OBJS) $(LIBS) $(LSCRIPT) $(MAKEDEP)
	$(LD) -o$@ $(OBJS) $(LIBS)
#	echo Warning: disassembly is not accurate until label 'pmode'>1.lst
#	objdump --source $@ >>1.lst

