source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/makefile @ 605

Last change on this file since 605 was 605, checked in by krille_n_, 3 years ago

Changes:

  • The "Remove other hard drives" option in the Boot settings menu in XTIDECFG is now exposed in all BIOS builds. This is needed because the system BIOS in at least two Zenith computer models (Z-161 and Z-171) does not clear the BDA HD count which causes it to increment on warm boot. Running "Auto Configure" in XTIDECFG now also tries to identify these machines by doing a CRC check on the system BIOS and sets the option to YES if a match is found.
  • WORD_ALIGN is now 2 for XT builds. This should benefit XT class machines with 8086 and NEC V30 CPU:s and the cost is negligible (1 byte for the XT BIOS builds and 12 bytes for XTIDECFG.COM).
  • Other minor optimizations.
File size: 14.9 KB
Line 
1####################################################################################################
2# Makefile to build XTIDE Universal BIOS.                                                          #
3#                                                                                                  #
4# Valid makefile targets are:                                                                      #
5# all       Removes existing files and builds binary files in \Build                               #
6# small     Builds 8 kiB binaries only (without checksum)                                          #
7# large     Builds 12 kiB binaries only (without checksum)                                         #
8# clean     Removes all files from \Build                                                          #
9# checksum* Builds all and then generates checksum byte to all binary files                        #
10# strings*  Compress src\Strings.asm to src\StringsCompressed.asm                                  #
11# unused*   Checks if there are any unused functions that can be removed to save space             #
12#                                                                                                  #
13# * at the end of target name means that Perl is required for the job.                             #
14# Build directory must be created manually if it does not exist.                                   #
15#                                                                                                  #
16#                                                                                                  #
17# Following modules can be included or excluded:                                                   #
18# MODULE_8BIT_IDE             Support for 8-BIT IDE cards like XTIDE                               #
19# MODULE_8BIT_IDE_ADVANCED    Support for memory mapped and DMA based cards like JRIDE and XTCF    #
20# MODULE_ADVANCED_ATA         Native support for some VLB IDE controllers (requires USE_386)       #
21# MODULE_COMPATIBLE_TABLES    Support for ill behaving software that tries to access DPT directly  #
22# MODULE_BOOT_MENU            Boot Menu for selection of drive to boot from                        #
23# MODULE_EBIOS                Enhanced functions for accessing drives over 8.4 GB                  #
24# MODULE_HOTKEYS              Hotkey Bar to boot from any drive                                    #
25# MODULE_IRQ                  IDE IRQ support                                                      #
26# MODULE_SERIAL               Virtual hard disks using serial port                                 #
27# MODULE_SERIAL_FLOPPY        Virtual floppy drives using serial port (requires MODULE_SERIAL)     #
28# MODULE_STRINGS_COMPRESSED   Use compressed strings to save space                                 #
29# MODULE_VERY_LATE_INIT       Initialize on INT 13h if our INT 19h handler is not called           #
30# MODULE_POWER_MANAGEMENT     Power Management support                                             #
31# MODULE_WIN9X_CMOS_HACK      Hack for Windows 9x compatibility                                    #
32# MODULE_MFM_COMPATIBILITY    Restores BDA drive count for MFM controllers that expect to be the   #
33#                             only hard drive controller on the system                             #
34#                                                                                                  #
35# Not modules but these affect the assembly:                                                       #
36# ELIMINATE_CGA_SNOW          Prevents CGA snowing at the cost of a few bytes                      #
37# RELOCATE_INT13H_STACK **    Relocates INT 13h stack to beginning of stolen conventional memory   #
38# RESERVE_DIAGNOSTIC_CYLINDER Reserve one L-CHS cylinder for compatibility with old BIOSes         #
39# NO_ATAID_VALIDATION ***     Excludes code that tries to ensure proper communication with drives  #
40# USE_186                     Use instructions supported by 80188/80186 and V20/V30 and later      #
41# USE_286                     Use instructions supported by 286 and later (defines USE_UNDOC_INTEL)#
42# USE_386                     Use instructions supported by 386 and later (defines USE_286)        #
43# USE_AT                      Use features supported on AT and later systems (not available on XT) #
44# USE_UNDOC_INTEL             Optimizations for Intel CPU:s - do NOT use on NEC V20/V30/Sony CPU:s #
45# USE_NEC_V                   Optimizations for use with NEC V20/V30 processors only               #
46# CLD_NEEDED                  Only needed for compatibility with buggy software/BIOSes             #
47#                                                                                                  #
48# ** AT Builds only (when USE_AT is defined)                                                       #
49# *** Use this only when certain known good drives are not being detected (eg WD Caviars)          #
50####################################################################################################
51
52###########################################
53# Source files and destination executable #
54###########################################
55
56# Assembly source code file (*.asm):
57SRC_ASM = Src/Main.asm
58
59# Program executable file name without extension:
60PROG = ide
61
62
63#######################################
64# Destination and include directories #
65#######################################
66
67# Directory where binary file will be compiled to
68BUILD_DIR = Build
69
70# Subdirectories where included files are:
71HEADERS = Inc/
72HEADERS += Inc/Controllers/
73HEADERS += Src/
74HEADERS += Src/Handlers/
75HEADERS += Src/Handlers/Int13h/
76HEADERS += Src/Handlers/Int13h/EBIOS/
77HEADERS += Src/Handlers/Int13h/Tools/
78HEADERS += Src/Handlers/Int19h/
79HEADERS += Src/Device/
80HEADERS += Src/Device/IDE/
81HEADERS += Src/Device/MemoryMappedIDE/
82HEADERS += Src/Device/Serial/
83HEADERS += Src/Initialization/
84HEADERS += Src/Initialization/AdvancedAta/
85HEADERS += Src/Menus/
86HEADERS += Src/Menus/BootMenu/
87HEADERS += Src/Libraries/
88HEADERS += Src/VariablesAndDPTs/
89
90# Subdirectories where library files are:
91LIBS = ../Assembly_Library/Inc/
92LIBS += ../Assembly_Library/Src/
93LIBS += ../Assembly_Library/Src/Display/
94LIBS += ../Assembly_Library/Src/File/
95LIBS += ../Assembly_Library/Src/Keyboard/
96LIBS += ../Assembly_Library/Src/Menu/
97LIBS += ../Assembly_Library/Src/Menu/Dialog/
98LIBS += ../Assembly_Library/Src/String/
99LIBS += ../Assembly_Library/Src/Time/
100LIBS += ../Assembly_Library/Src/Util/
101LIBS += ../Assembly_Library/Src/Serial/
102LIBS += ../XTIDE_Universal_BIOS/Inc/
103HEADERS += $(LIBS)
104
105
106#################################################################
107# Assembler preprocessor defines.                               #
108#################################################################
109DEFINES_COMMON = MODULE_STRINGS_COMPRESSED MODULE_HOTKEYS MODULE_8BIT_IDE MODULE_EBIOS MODULE_SERIAL MODULE_SERIAL_FLOPPY MODULE_POWER_MANAGEMENT RESERVE_DIAGNOSTIC_CYLINDER NO_ATAID_VALIDATION CLD_NEEDED
110DEFINES_COMMON_LARGE = MODULE_BOOT_MENU MODULE_8BIT_IDE_ADVANCED MODULE_COMPATIBLE_TABLES
111
112DEFINES_XT = $(DEFINES_COMMON) ELIMINATE_CGA_SNOW MODULE_8BIT_IDE_ADVANCED
113DEFINES_XTPLUS = $(DEFINES_XT) USE_186
114DEFINES_AT = $(DEFINES_COMMON) USE_AT USE_286 MODULE_IRQ MODULE_COMPATIBLE_TABLES
115
116DEFINES_XT_LARGE = $(DEFINES_XT) $(DEFINES_COMMON_LARGE)
117DEFINES_XTPLUS_LARGE = $(DEFINES_XTPLUS) $(DEFINES_COMMON_LARGE)
118DEFINES_AT_LARGE = $(DEFINES_AT) $(DEFINES_COMMON_LARGE)
119
120DEFINES_XT_TINY = MODULE_STRINGS_COMPRESSED MODULE_8BIT_IDE NO_ATAID_VALIDATION CLD_NEEDED
121DEFINES_386 = $(DEFINES_AT) USE_386 MODULE_ADVANCED_ATA MODULE_WIN9X_CMOS_HACK
122DEFINES_386_LARGE = $(DEFINES_386) $(DEFINES_COMMON_LARGE)
123
124
125###################
126# Other variables #
127###################
128
129# Target size of the BIOS, used in Main.asm for number of 512B blocks (CNT_ROM_BLOCKS) and by checksum Perl script below ('make checksum').
130# Note! The size must be a multiple of 2 KB for compatibility reasons.
131BIOS_SIZE_TINY = 4096
132BIOS_SIZE_SMALL = 8192
133BIOS_SIZE_LARGE = 10240
134
135# Add -D in front of every preprocessor define declaration
136DEFS_XT = $(DEFINES_XT:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
137DEFS_XTPLUS = $(DEFINES_XTPLUS:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
138DEFS_AT = $(DEFINES_AT:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
139DEFS_XT_LARGE = $(DEFINES_XT_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
140DEFS_XTPLUS_LARGE = $(DEFINES_XTPLUS_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
141DEFS_AT_LARGE = $(DEFINES_AT_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
142DEFS_XT_TINY = $(DEFINES_XT_TINY:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_TINY)
143DEFS_386 = $(DEFINES_386:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
144DEFS_386_LARGE = $(DEFINES_386_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
145
146# Add -I in front of all header directories
147IHEADERS = $(HEADERS:%=-I%)
148
149# Path + target file to be built
150TARGET = $(BUILD_DIR)/$(PROG)
151
152#########################
153# Compilers and linkers #
154#########################
155
156# Make
157MAKE = mingw32-make.exe
158
159# Assembler
160AS = nasm.exe
161
162# use this command to erase files.
163RM = -del /Q
164
165
166#############################
167# Compiler and linker flags #
168#############################
169
170# Assembly compiler flags
171ASFLAGS = -f bin                # Produce binary object files
172ASFLAGS += $(IHEADERS)          # Set header file directory paths
173ASFLAGS += -Worphan-labels      # Warn about labels without colon
174ASFLAGS += -Ox                  # Optimize operands to their shortest forms
175
176
177############################################
178# Build process. Actual work is done here. #
179############################################
180
181all: clean small large
182    @echo All done!
183
184small: xt_tiny xt xtplus at 386
185    @echo All small binaries built!
186
187large: xt_large xtplus_large at_large 386_large
188    @echo All large binaries built!
189
190at:
191    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -l"$(TARGET)_at.lst" -o"$(TARGET)_at.bin"
192    @echo * Small AT version "$(TARGET)_at.bin" built.
193
194at_large:
195    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -l"$(TARGET)_atl.lst" -o"$(TARGET)_atl.bin"
196    @echo * Large AT version "$(TARGET)_atl.bin" built.
197
198xtplus:
199    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS) -l"$(TARGET)_xtp.lst" -o"$(TARGET)_xtp.bin"
200    @echo * Small XT Plus version "$(TARGET)_xtp.bin" built.
201
202xtplus_large:
203    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS_LARGE) -l"$(TARGET)_xtpl.lst" -o"$(TARGET)_xtpl.bin"
204    @echo * Large XT Plus version "$(TARGET)_xtpl.bin" built.
205
206xt:
207    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -l"$(TARGET)_xt.lst" -o"$(TARGET)_xt.bin"
208    @echo * Small XT version "$(TARGET)_xt.bin" built.
209
210xt_large:
211    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -l"$(TARGET)_xtl.lst" -o"$(TARGET)_xtl.bin"
212    @echo * Large XT version "$(TARGET)_xtl.bin" built.
213
214xt_tiny:
215    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_TINY) -l"$(TARGET)_tiny.lst" -o"$(TARGET)_tiny.bin"
216    @echo * Tiny XT version "$(TARGET)_tiny.bin" built.
217
218386:
219    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386) -l"$(TARGET)_386.lst" -o"$(TARGET)_386.bin"
220    @echo * Small 386 version "$(TARGET)_386.bin" built.
221
222386_large:
223    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386_LARGE) -l"$(TARGET)_386l.lst" -o"$(TARGET)_386l.bin"
224    @echo * Large 386 version "$(TARGET)_386l.bin" built.
225
226strings: src\Strings.asm
227    @$(AS) src\Strings.asm $(ASFLAGS) $(DEFS_AT_LARGE) -DCHECK_FOR_UNUSED_ENTRYPOINTS -DMODULE_STRINGS_COMPRESSED_PRECOMPRESS -o build\Strings.bin -l build\StringsPrecompress.lst
228    @perl ..\Tools\StringsCompress.pl < build\StringsPrecompress.lst > src\StringsCompressed.asm
229    @echo StringsCompressed.asm updated!
230
231clean:
232    @$(RM) $(BUILD_DIR)\*.*
233    @echo Deleted "(*.*)" from "$(BUILD_DIR)/"
234
235checksum: all
236    @perl ..\Tools\checksum.pl $(TARGET)_tiny.bin $(BIOS_SIZE_TINY)
237    @perl ..\Tools\checksum.pl $(TARGET)_xt.bin $(BIOS_SIZE_SMALL)
238    @perl ..\Tools\checksum.pl $(TARGET)_xtp.bin $(BIOS_SIZE_SMALL)
239    @perl ..\Tools\checksum.pl $(TARGET)_at.bin $(BIOS_SIZE_SMALL)
240    @perl ..\Tools\checksum.pl $(TARGET)_xtl.bin $(BIOS_SIZE_LARGE)
241    @perl ..\Tools\checksum.pl $(TARGET)_xtpl.bin $(BIOS_SIZE_LARGE)
242    @perl ..\Tools\checksum.pl $(TARGET)_atl.bin $(BIOS_SIZE_LARGE)
243    @perl ..\Tools\checksum.pl $(TARGET)_386.bin $(BIOS_SIZE_SMALL)
244    @perl ..\Tools\checksum.pl $(TARGET)_386l.bin $(BIOS_SIZE_LARGE)
245
246unused:
247    @echo "XT Tiny"
248    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_TINY) -o"$(TARGET)_unused_tiny.asm" -l"$(TARGET)_unused_tiny.lst"
249    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_TINY) -o"$(TARGET)_unused_tiny.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
250    @perl ..\Tools\unused.pl $(TARGET)_unused_tiny.lst $(TARGET)_unused_tiny.asm
251    @echo "XT Small"
252    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -o"$(TARGET)_unused_xt.asm" -l"$(TARGET)_unused_xt.lst"
253    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -o"$(TARGET)_unused_xt.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
254    @perl ..\Tools\unused.pl $(TARGET)_unused_xt.lst $(TARGET)_unused_xt.asm
255    @echo "XT Large"
256    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -o"$(TARGET)_unused_xtl.asm" -l"$(TARGET)_unused_xtl.lst"
257    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -o"$(TARGET)_unused_xtl.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
258    @perl ..\Tools\unused.pl $(TARGET)_unused_xtl.lst $(TARGET)_unused_xtl.asm
259    @echo "XT Plus Small"
260    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS) -o"$(TARGET)_unused_xtp.asm" -l"$(TARGET)_unused_xtp.lst"
261    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS) -o"$(TARGET)_unused_xtp.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
262    @perl ..\Tools\unused.pl $(TARGET)_unused_xtp.lst $(TARGET)_unused_xtp.asm
263    @echo "XT Plus Large"
264    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS_LARGE) -o"$(TARGET)_unused_xtpl.asm" -l"$(TARGET)_unused_xtpl.lst"
265    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS_LARGE) -o"$(TARGET)_unused_xtpl.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
266    @perl ..\Tools\unused.pl $(TARGET)_unused_xtpl.lst $(TARGET)_unused_xtpl.asm
267    @echo "AT Small"
268    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -o"$(TARGET)_unused_at.asm" -l"$(TARGET)_unused_at.lst"
269    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -o"$(TARGET)_unused_at.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
270    @perl ..\Tools\unused.pl $(TARGET)_unused_at.lst $(TARGET)_unused_at.asm
271    @echo "AT Large"
272    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -o"$(TARGET)_unused_atl.asm" -l"$(TARGET)_unused_atl.lst"
273    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -o"$(TARGET)_unused_atl.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
274    @perl ..\Tools\unused.pl $(TARGET)_unused_atl.lst $(TARGET)_unused_atl.asm
275    @echo "386 Small"
276    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386) -o"$(TARGET)_unused_386.asm" -l"$(TARGET)_unused_386.lst"
277    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386) -o"$(TARGET)_unused_386.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
278    @perl ..\Tools\unused.pl $(TARGET)_unused_386.lst $(TARGET)_unused_386.asm
279    @echo "386 Large"
280    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386_LARGE) -o"$(TARGET)_unused_386l.asm" -l"$(TARGET)_unused_386l.lst"
281    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386_LARGE) -o"$(TARGET)_unused_386l.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
282    @perl ..\Tools\unused.pl $(TARGET)_unused_386l.lst $(TARGET)_unused_386l.asm
283
Note: See TracBrowser for help on using the repository browser.