
# nmake makefile that creates JLOAD.EXE
# tools used:
#               default      alternate
#----------------------------------------------
# Assembler:    jwasm        MS masm (+Bin2Inc)
# OMF linker:   jwlink       MS link16
# COFF linker:  jwlink       -

# the 32-bit part of jwlink must be linked with base 0xF8400000;
# this isn't possible with (all?) MS link versions!

# bin2inc translates binary files to assembly include files.
# It's source is supplied with JWasm.

!ifndef DEBUG
DEBUG = 0
!endif

!if $(DEBUG)
OUTDIR = DEBUG
AOPTD=-D_DEBUG -D?PEDBG=1
!else
OUTDIR = RELEASE
AOPTD=
!endif

NAME  = JLOAD
NAME32= JLOAD32
VXD1  = VMM
VXD4  = VDMAD
LIBS  = 

!ifndef MASM
MASM=0
!endif

!if $(MASM)
ASM   = ml.exe -c -nologo -Fo$* -Fl$* -Sg $(AOPTD) -I..\..\Include -I..\..\src -DOUTD=$(OUTDIR)
ASM32 = ml.exe -c -nologo -coff -Fl$* -Sg $(AOPTD) -I..\..\Include -I..\..\src -DOUTD=$(OUTDIR)
!else
ASM   = jwasm.exe -c -nologo -Fl$* -Fo$* -Sg $(AOPTD) -I..\..\Include -I..\..\src -DOUTD=$(OUTDIR)
ASM32 = jwasm.exe -c -nologo -Fl$* -coff -Sg $(AOPTD) -I..\..\Include -I..\..\src -DOUTD=$(OUTDIR)
!endif

LINK32=
INC32=jload.inc jload32.inc debug.inc ..\..\src\Jemm32.inc                    ..\..\Include\jlm.inc
INC16=jload.inc             debug.inc ..\..\src\Jemm32.inc ..\..\src\Jemm.inc ..\..\Include\jlm.inc

ALL: $(OUTDIR) $(OUTDIR)\$(NAME).EXE

$(OUTDIR):
	@mkdir $(OUTDIR)

$(OUTDIR)\$(NAME).EXE: $(OUTDIR)\$(NAME).obj MAKEFILE
#	@link16.exe /MAP:FULL/NOE/NON/ONERROR:NOEXE $*.OBJ, $*.EXE, $*.MAP, $(LIBS);
	@jwlink.exe format dos file $*.OBJ name $*.EXE op q,m=$*.MAP

!if $(MASM)

$(OUTDIR)\$(NAME).OBJ: $(NAME).asm $(OUTDIR)\$(NAME32).inc $(INC16)
	@$(ASM) $(NAME).asm

$(OUTDIR)\$(NAME32).INC: $(OUTDIR)\$(NAME32).obj $(OUTDIR)\$(VXD1).obj $(OUTDIR)\$(VXD4).obj
	@jwlink.exe format raw bin f { $*.obj $(OUTDIR)\$(VXD1).obj $(OUTDIR)\$(VXD4).obj } name $*.bin op q,map=$*,offset=0xF8400000,start='_start@0'
	@bin2inc.exe -q $*.bin $*.inc

!else

$(OUTDIR)\$(NAME).OBJ: $(NAME).asm $(OUTDIR)\$(NAME32).bin $(INC16)
	@$(ASM) $(NAME).asm

$(OUTDIR)\$(NAME32).bin: $(OUTDIR)\$(NAME32).obj $(OUTDIR)\$(VXD1).obj $(OUTDIR)\$(VXD4).obj
	@jwlink.exe format raw bin f { $*.obj $(OUTDIR)\$(VXD1).obj $(OUTDIR)\$(VXD4).obj } name $*.bin op q,map=$*,offset=0xF8400000,start='_start@0'

!endif

$(OUTDIR)\$(NAME32).obj: $(NAME32).asm $(INC32) MAKEFILE
	@$(ASM32) -Fl$(OUTDIR)\$(NAME32).LST -Fo$(OUTDIR)\$(NAME32).OBJ $(NAME32).asm

$(OUTDIR)\$(VXD1).obj: $(VXD1).asm $(INC32) MAKEFILE
	@$(ASM32) -Fl$(OUTDIR)\$(VXD1).LST -Fo$(OUTDIR)\$(VXD1).OBJ $(VXD1).asm

$(OUTDIR)\$(VXD4).obj: $(VXD4).asm $(INC32) MAKEFILE
	@$(ASM32) -Fl$(OUTDIR)\$(VXD4).LST -Fo$(OUTDIR)\$(VXD4).OBJ $(VXD4).asm

clean:
	@del $(OUTDIR)\*.exe
	@if exist $(OUTDIR)\*.inc del $(OUTDIR)\*.inc
	@del $(OUTDIR)\*.bin
	@del $(OUTDIR)\*.obj
	@del $(OUTDIR)\*.lst
	@del $(OUTDIR)\*.map
