# Makefile for the N8VEM SBC-188 relocatable BIOS
#  Use Open Watcom WMAKE to make
#  Use Open Watcom C 1.9
#  Use NASM version 0.98.39 (real mode DOS)
#   or NASM version 2.08 (cwsdpmi needed, or WINNT)
#       NASM ver. 2.09 is reported to have problems
#
# Minimum (BIOS-ROM) CHIP size is 64K as of Jan 2013, release 2.0
#  CHIP sizes of 128K and 256K are also generated.
#
# Makefile for the N8VEM 4MEM // SBC-188  expanded memory driver
#
ROM = 32
CHIP = 64
#TRC = -DTRACE=1
#RED = -DSOFT_DEBUG=1
# use the following to allow for LED lights on debug board on Parallel Port
#RED = -DSOFT_DEBUG=2
#TESTS = -DTESTS
FAST = -DHAS_FASTCALL=1

CC = wcl -c
#COPT = /Gs2 /Zp1 /Ois /DSBC188=1 /Fl
# Open Watcom C Compiler options:
# -mc   compact memory morm -f
# -zdp  DS == DGROUP
# -zu   SS != DGROUP
# -s    remove stack overflow checks
# -zp1  set struct packing alignment to 1
# -oi   inline intrinsic functions
# -os   optimize for space
# -1    generate code for 186 or higher
# -fpi87 use 8087 instructions
# -q	quiet compile
COPT = -q -mc -zdp -zu -s -zp1 -oi -os -1 -fpi87 -DSBC188=1
SIZE = -DROM=$(ROM) -DCHIP=$(CHIP)
#
# The newer version of NASM provides the __DATA__ & __TIME__ 
NASM = nasm
#NASM = nasm208
#
NOPT = $(RED) $(FAST) -O9 $(TRC) $(ANSI) $(TESTS)
LINK = wcl
# Open Watcom liner options:
# -lr   create a DOS real-mode program
#LOPT = -mc -lr
LOPT = -lr -q

!ifdef __UNIX__
RM=rm -f
EXE2ROM=tools/exe2rom
HEX2BIN=tools/hex2bin.exe
BIN2HEX=tools/bin2hex.exe
CP=cp
CAT=cat
PLUS=
!else
RM=del
EXE2ROM=tools\exe2rom.exe
HEX2BIN=tools\hex2bin.exe
BIN2HEX=tools\bin2hex.exe
CP=copy
CAT=copy/b
PLUS=+
!endif

INCLUDES = config.asm cpuregs.asm equates.asm date.asm ascii.asm bda.inc disk.inc

OBJECT1 = floppy.obj int10ser.obj int16ser.obj misc15.obj ide.obj
OBJECT2 = timers.obj inttrace.obj tests.obj font.obj ppide.obj dide.obj
OBJECT3 = idelib.obj redbug.obj fpem/em187.obj unasm/unasm.obj # sdcard.obj
OBJECTC1 = cprintf.obj sio.obj nvram.obj libc.obj debug.obj
OBJECTC2 = m8563lib.obj kbd.obj

OBJECTA = $(OBJECT1) $(OBJECT2) $(OBJECT3)
OBJECTC = $(OBJECTC1) $(OBJECTC2)

OBJECTS = rbios.obj $(OBJECTA) $(OBJECTC)


ROMS = bios064.bin bios128.bin bios256.bin
MISC = config.asm emm4mem.sys abios.lib cbios.lib

.EXTENSIONS:
.EXTENSIONS: .bin .obj .exe .asm .c .h

.asm.bin:
	$(NASM) $(NOPT) $(SIZE) -f bin -o $@ -l $*.lst  $*.asm
.asm.obj:
	$(NASM) $(NOPT) $(SIZE) -f obj -o $@ -l $*.lst  $*.asm
.c.obj:
	$(CC) $(COPT) $(SIZE) -fo=$@ $*.c

all:	config.asm emm4mem.sys $(ROMS) .SYMBOLIC

help:	.SYMBOLIC
	echo Copy one of the *.CFG files to CONFIG.ASM to start

distro: spotless .SYMBOLIC
	$(CP) wcvdu.cfg config.asm
	wmake wcvdu.zip
	$(CP) cvdu.cfg config.asm
	wmake clean
	wmake cvdu.zip
	$(CP) wyse.cfg config.asm
	wmake clean
	wmake wyse.zip
	$(CP) ansi.cfg config.asm
	wmake clean
	wmake ansi.zip	
	pkzip emm4mem emm4mem.sys

wcvdu.zip:	$(MISC) $(ROMS)
	pkzip $@ $<

cvdu.zip:	$(MISC) $(ROMS)
	pkzip $@ $<

wyse.zip:	$(MISC) $(ROMS)
	pkzip $@ $<

ansi.zip:	$(MISC) $(ROMS)
	pkzip $@ $<




# copy of 1985 PC/AT bios data area 
dseg:	dseg.asm	.SYMBOLIC
	masm /X dseg.asm,nul,dseg.lst;
sizer:	sizer.exe sizer2.exe

roms:   startup.bin rbios.exe makefile .SYMBOLIC
	$(EXE2ROM) rbios.exe bios256.bin -r $(ROM) -e 256 -s startup.bin
	$(EXE2ROM) rbios.exe bios128.bin -r $(ROM) -e 128 -s startup.bin
	$(EXE2ROM) rbios.exe bios_64.bin -r $(ROM) -e 64  -s startup.bin
	$(EXE2ROM) rbios.exe bios_32.bin -r $(ROM) -e 32  -s startup.bin

check:  startup.bin rbios.exe makefile .SYMBOLIC
	$(EXE2ROM) rbios.exe check.bin -s startup.bin -v -e $(CHIP) -r $(ROM) >foo
	@echo .
	@echo Output listing is in FOO

# Strictly for testing
fdc:	wd37c65.obj fdc8272.obj	.SYMBOLIC

bios064.bin:	rbios.hex tbasic.hex font.hex em187.hex
	hex2bin -o bios064.bin -R64K rbios.hex tbasic.hex -d26K font.hex -d18k em187.hex
bios128.bin:	space64.bin bios064.bin
	$(CAT) space64.bin $(PLUS) bios064.bin  bios128.bin
bios256.bin:	space64.bin bios128.bin
	$(CAT) space64.bin $(PLUS) space64.bin $(PLUS) bios128.bin  bios256.bin

rbios.hex:	rbios.bin
	$(BIN2HEX) -o rbios.hex rbios.bin
	
rbios.bin:      rbios.exe startup.bin makefile
	$(EXE2ROM) rbios.exe rbios.bin -s startup.bin -r $(ROM) -e $(CHIP)

rbios.exe:     rbios.obj abios.lib cbios.lib
	$(LINK) $(LOPT) -k1024 -fe=$@ -fm=$*.map $<


tbasic.hex:	tbasic.bin
	$(BIN2HEX) -o tbasic.hex tbasic.bin
font.hex:	font.bin
	$(BIN2HEX) -o font.hex font.bin

tbasic.bin:	tbasic.asm $(INCLUDES)
font.bin:	font.asm font_vga.asm font8x8.asm $(INCLUDES)

config.asm:     ansi.cfg wyse.cfg cvdu.cfg wcvdu.cfg
	echo GUESSING THAT YOU WANT THE 'ANSI.CFG' COPIED TO 'CONFIG.ASM'
	echo ANY ONE OF THE '*.CFG' FILES MAY BE USED FOR THE CONFIGURATION
        $(CP)   ansi.cfg config.asm
	error

config.obj:     config.asm
	$(NASM) $(NOPT) -f obj -DMAKE_OBJECT_FILE config.asm

em187.exe:	fpem\em187.obj
	$(LINK) $(LOPT) -k1024 -fe=$@ -fm=$*.map $<
em187.bin:	em187.exe
	$(EXE2ROM) em187.exe em187.bin -s NUL -r 32K -e 32K
em187.hex:	em187.bin
	$(BIN2HEX) -o em187.hex em187.bin

fpem/em187.obj:	 fpem/makefile
	cd      fpem
	wmake   em187.obj
	cd      ..

ppide_sa.obj:      ppide.asm $(INCLUDES)
	$(NASM) $(NOPT) -DSTANDALONE -f obj -o $@ -l ppide_sa.lst ppide.asm

wbios.lib:      $(OBJECTS)
        wlib -q -n wbios.lib +int10ser.obj +int16ser.obj +timers.obj +ppide.obj
	wlib -q wbios.lib +sio.obj +nvram.obj +floppy.obj +misc15.obj
        wlib -q wbios.lib +cprintf.obj +libc.obj +fpem/em187.obj +redbug.obj
	wlib -q wbios.lib +debug.obj +unasm/unasm.obj +inttrace.obj +tests.obj
	wlib -q wbios.lib +m8563lib.obj +kbd.obj +font.obj

abios.lib:	$(OBJECTA)
	wlib -q -n abios.lib +floppy.obj +int10ser.obj +int16ser.obj +misc15.obj +ide.obj
	wlib -q    abios.lib +timers.obj +inttrace.obj +tests.obj +font.obj +ppide.obj +dide.obj
	wlib -q    abios.lib +idelib.obj +redbug.obj +fpem/em187.obj +unasm/unasm.obj # +sdcard.obj

cbios.lib:	$(OBJECTC)
	wlib -q -n cbios.lib +cprintf.obj +sio.obj +nvram.obj +libc.obj +debug.obj
	wlib -q    cbios.lib +m8563lib.obj +kbd.obj

sizer.obj:      sizer.c equates.h
sizer.exe:      sizer.obj
	$(LINK) $(LOPT)  $<

sizer2.obj:      sizer2.c equates.h1 bda.inc
sizer2.exe:      sizer2.obj
	$(LINK) $(LOPT)  $<

emm4mem.sys:    emm4mem.asm cpuregs.asm makefile
        $(NASM) $(NOPT) -f bin -l $*.lst -o $@  $*.asm

space64.bin:
	$(HEX2BIN) -R 64K -o $@

# Maintenance

tidy:	.SYMBOLIC
        echo foo >foo.err
        echo foo >foo.lst
	echo foo >fpem\foo.lst
        echo foo >foo.map
	$(RM) *.lst
	$(RM) *.map
	$(RM) *.err
	$(RM) fpem\*.lst

clean:	tidy .SYMBOLIC
        echo foo >foo.bin
        echo foo >foo.obj
	echo foo >fpem\foo.obj
        echo foo >foo.exe
        echo foo >foo.sys
	echo foo >foo.hex
	echo foo >xbios.lib
	$(RM) *.bin
	$(RM) *.obj
	$(RM) fpem\*.obj
	$(RM) *.exe
        $(RM) *.sys
	$(RM) ?bios.lib
	$(RM) *.hex

spotless: clean .SYMBOLIC
        echo foo >foo.lib
        echo foo >foo.bak
        echo foo >foo.bk0
        echo foo >foo.foo
        echo foo >goo.foo
	echo foo >config.asm
	$(RM) *.lib
	$(RM) *.bak
	$(RM) *.bk?
	$(RM) foo*.*
	$(RM) goo*.*
        $(RM) config.asm

# Dependencies
sbc188.h:       mytypes.h

rbios.obj:      rbios.asm $(INCLUDES) memory.asm ds1302.asm makefile
startup.bin:    startup.asm config.asm cpuregs.asm date.asm makefile
timers.obj:     timers.asm $(INCLUDES)
floppy.obj:     floppy.asm $(INCLUDES)
int16ser.obj:     int16ser.asm $(INCLUDES)
int10ser.obj:     int10ser.asm $(INCLUDES)
inttrace.obj:	inttrace.asm $(INCLUDES)
redbug.obj:     redbug.asm $(INCLUDES)
misc15.obj:     misc15.asm $(INCLUDES) cassette.asm
ide.obj:	ide.asm $(INCLUDES)
ppide.obj:      ppide.asm $(INCLUDES)
dide.obj:	dide.asm $(INCLUDES)
idelib.obj:	idelib.asm $(INCLUDES)
sdcard.obj:	sdcard.asm sdcard.inc crc16tab.inc $(INCLUDES)

cprintf.obj:    cprintf.c sbc188.h
sio.obj:	sio.c sbc188.h sio.h
nvram.obj:      nvram.c sbc188.h ds1302.h sio.h equates.h ide.h bda.inc
libc.obj:	libc.c
debug.obj:      debug.c mytypes.h equates.h sio.h debug.h bda.inc
kbd.obj:	kbd.c mytypes.h sbc188.h equates.h kbd_pc.h kbd_stat.h
m8563lib.obj:	m8563lib.c mytypes.h sbc188.h equates.h m8563inc.h ega9a.h
fdc8272.obj:	fdc8272.c mytypes.h sbc188.h io.h fdc8272.h wd37c65.h
wd37c65.obj:	wd37c65.c mytypes.h sbc188.h io.h wd37c65.h
