source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/makefile@ 592

Last change on this file since 592 was 592, checked in by Krister Nordvall, 6 years ago

Changes:

  • The problem with NASM in the previous revision (r591) has been fixed.
  • The colors used by the boot menu and hotkey bar can now be customized by selecting one of a number of pre-defined color themes. Suggestions for additional themes are more than welcome!
  • Large builds are now 10 KB. Small builds are still 8 KB with the exception of the Tiny build which is now 4 KB. In other words, builds are now as small as possible to make it easier to combine them with other BIOSes.
  • Added code to the library to improve drive error handling. XTIDECFG can now handle "Drive Not Ready" errors.
  • Fixed a couple of potential bugs in AtaID.asm (AtaID_GetMaxPioModeToAXandMinCycleTimeToCX); 1) ATA1.bPioMode was treated as a WORD variable. 2) ATA2.bPIOSupp was assumed to be non-zero which would result in PIO mode 3 being returned if the assumption was wrong.
  • Made the same changes in the equivalent function used by BIOSDRVS (DisplayPioModeInformationUsingAtaInfoFromDSBX in AtaInfo.asm).
  • Fixed a bug from r587 in PDC20x30.asm in PDC20x30_GetMaxPioModeToALandMinPioCycleTimeToBX.
  • Fixed a bug from r523 in XTIDECFG where Auto Configure would only set the IRQ on one IDE interface on AT-builds.
  • XTIDECFG will now restore the default settings for the "Serial port virtual device" when reselecting it in the list of device types. This makes it behave consistently for all device types.
  • The eAAM macro is now used regardless if USE_UNDOC_INTEL is defined or not because it is apparently supported on all processors including the NEC V20/V30 CPUs.
  • Renamed the EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS define to EXCLUDE_FROM_XUB.
  • Added a define to exclude unused library code from BIOSDRVS (EXCLUDE_FROM_BIOSDRVS). This makes it a lot smaller than in previous revisions.
  • All unnecessary CLD-instructions are now under a new define 'CLD_NEEDED' which is only enabled for the BIOS. It is disabled for XTIDECFG and BIOSDRVS but can be enabled if needed by adding this define to the respective makefile. This change was made because these unnecessary instructions are wasteful and should never be needed. In fact, they only serve to hide bugs (in other peoples code) which I strongly believe should be avoided. I recommend people making their own BIOSes from source to not use this define as it's extremely unlikely to be needed.
  • Updated the copyright info in SerDrive and changed an URL to point to the new site.
  • Updated the copyright info and version number in BIOSDRVS.
  • Updated the copyright info in XTIDECFG.
  • Optimizations in general.
File size: 13.6 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# #
32# Not modules but these affect the assembly: #
33# ELIMINATE_CGA_SNOW Prevents CGA snowing at the cost of a few bytes #
34# RELOCATE_INT13H_STACK ** Relocates INT 13h stack to beginning of stolen conventional memory #
35# RESERVE_DIAGNOSTIC_CYLINDER Reserve one L-CHS cylinder for compatibility with old BIOSes #
36# DANGEROUS_DETECTION Scans Advanced Controllers from dangerous ports like mirrored PIC #
37# NO_ATAID_VALIDATION *** Excludes code that tries to ensure proper communication with drives #
38# USE_186 Use instructions supported by 80188/80186 and V20/V30 and later #
39# USE_286 Use instructions supported by 286 and later (defines USE_UNDOC_INTEL)#
40# USE_386 Use instructions supported by 386 and later (defines USE_286) #
41# USE_AT Use features supported on AT and later systems (not available on XT) #
42# USE_UNDOC_INTEL Optimizations for Intel CPU:s - do NOT use on NEC V20/V30/Sony CPU:s #
43# CLD_NEEDED Only needed for compatibility with buggy software/BIOSes #
44# #
45# ** AT Builds only (when USE_AT is defined) #
46# *** Use this only when certain known good drives are not being detected (eg WD Caviars) #
47####################################################################################################
48
49###########################################
50# Source files and destination executable #
51###########################################
52
53# Assembly source code file (*.asm):
54SRC_ASM = Src/Main.asm
55
56# Program executable file name without extension:
57PROG = ide
58
59
60#######################################
61# Destination and include directories #
62#######################################
63
64# Directory where binary file will be compiled to
65BUILD_DIR = Build
66
67# Subdirectories where included files are:
68HEADERS = Inc/
69HEADERS += Inc/Controllers/
70HEADERS += Src/
71HEADERS += Src/Handlers/
72HEADERS += Src/Handlers/Int13h/
73HEADERS += Src/Handlers/Int13h/EBIOS/
74HEADERS += Src/Handlers/Int13h/Tools/
75HEADERS += Src/Handlers/Int19h/
76HEADERS += Src/Device/
77HEADERS += Src/Device/IDE/
78HEADERS += Src/Device/MemoryMappedIDE/
79HEADERS += Src/Device/Serial/
80HEADERS += Src/Initialization/
81HEADERS += Src/Initialization/AdvancedAta/
82HEADERS += Src/Menus/
83HEADERS += Src/Menus/BootMenu/
84HEADERS += Src/Libraries/
85HEADERS += Src/VariablesAndDPTs/
86
87# Subdirectories where library files are:
88LIBS = ../Assembly_Library/Inc/
89LIBS += ../Assembly_Library/Src/
90LIBS += ../Assembly_Library/Src/Display/
91LIBS += ../Assembly_Library/Src/File/
92LIBS += ../Assembly_Library/Src/Keyboard/
93LIBS += ../Assembly_Library/Src/Menu/
94LIBS += ../Assembly_Library/Src/Menu/Dialog/
95LIBS += ../Assembly_Library/Src/String/
96LIBS += ../Assembly_Library/Src/Time/
97LIBS += ../Assembly_Library/Src/Util/
98LIBS += ../Assembly_Library/Src/Serial/
99LIBS += ../XTIDE_Universal_BIOS/Inc/
100HEADERS += $(LIBS)
101
102
103#################################################################
104# Assembler preprocessor defines. #
105#################################################################
106DEFINES_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
107DEFINES_COMMON_LARGE = MODULE_BOOT_MENU MODULE_8BIT_IDE_ADVANCED MODULE_COMPATIBLE_TABLES
108
109DEFINES_XT = $(DEFINES_COMMON) ELIMINATE_CGA_SNOW MODULE_8BIT_IDE_ADVANCED
110DEFINES_XTPLUS = $(DEFINES_XT) USE_186
111DEFINES_AT = $(DEFINES_COMMON) USE_AT USE_286 MODULE_IRQ MODULE_COMPATIBLE_TABLES
112
113DEFINES_XT_LARGE = $(DEFINES_XT) $(DEFINES_COMMON_LARGE)
114DEFINES_XTPLUS_LARGE = $(DEFINES_XTPLUS) $(DEFINES_COMMON_LARGE)
115DEFINES_AT_LARGE = $(DEFINES_AT) $(DEFINES_COMMON_LARGE)
116
117DEFINES_XT_TINY = MODULE_STRINGS_COMPRESSED MODULE_8BIT_IDE NO_ATAID_VALIDATION CLD_NEEDED
118DEFINES_386_8K = $(DEFINES_AT) USE_386 MODULE_ADVANCED_ATA
119
120DEFINES_ALL_FEATURES = MODULE_8BIT_IDE MODULE_8BIT_IDE_ADVANCED MODULE_ADVANCED_ATA MODULE_EBIOS MODULE_BOOT_MENU MODULE_HOTKEYS MODULE_IRQ MODULE_SERIAL MODULE_SERIAL_FLOPPY MODULE_STRINGS_COMPRESSED MODULE_POWER_MANAGEMENT MODULE_COMPATIBLE_TABLES
121DEFINES_ALL_FEATURES += ELIMINATE_CGA_SNOW RELOCATE_INT13H_STACK RESERVE_DIAGNOSTIC_CYLINDER
122
123
124###################
125# Other variables #
126###################
127
128# 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').
129# Note! The size must be a multiple of 2 KB for compatibility reasons.
130BIOS_SIZE_TINY = 4096
131BIOS_SIZE_SMALL = 8192
132BIOS_SIZE_LARGE = 10240
133
134# Add -D in front of every preprocessor define declaration
135DEFS_XT = $(DEFINES_XT:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
136DEFS_XTPLUS = $(DEFINES_XTPLUS:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
137DEFS_AT = $(DEFINES_AT:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
138DEFS_XT_LARGE = $(DEFINES_XT_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
139DEFS_XTPLUS_LARGE = $(DEFINES_XTPLUS_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
140DEFS_AT_LARGE = $(DEFINES_AT_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
141DEFS_XT_TINY = $(DEFINES_XT_TINY:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_TINY)
142DEFS_386_8K = $(DEFINES_386_8K:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
143DEFS_ALL_FEATURES = $(DEFINES_ALL_FEATURES:%=-D%)
144
145# Add -I in front of all header directories
146IHEADERS = $(HEADERS:%=-I%)
147
148# Path + target file to be built
149TARGET = $(BUILD_DIR)/$(PROG)
150
151#########################
152# Compilers and linkers #
153#########################
154
155# Make
156MAKE = mingw32-make.exe
157
158# Assembler
159AS = nasm.exe
160
161# use this command to erase files.
162RM = -del /Q
163
164
165#############################
166# Compiler and linker flags #
167#############################
168
169# Assembly compiler flags
170ASFLAGS = -f bin # Produce binary object files
171ASFLAGS += $(IHEADERS) # Set header file directory paths
172ASFLAGS += -Worphan-labels # Warn about labels without colon
173ASFLAGS += -Ox # Optimize operands to their shortest forms
174
175
176############################################
177# Build process. Actual work is done here. #
178############################################
179
180all: clean small large
181 @echo All done!
182
183small: xt_tiny xt xtplus at 386_8k
184 @echo All small binaries built!
185
186large: xt_large xtplus_large at_large
187 @echo All large binaries built!
188
189at:
190 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -l"$(TARGET)_at.lst" -o"$(TARGET)_at.bin"
191 @echo * Small AT version "$(TARGET)_at.bin" built.
192
193at_large:
194 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -l"$(TARGET)_atl.lst" -o"$(TARGET)_atl.bin"
195 @echo * Large AT version "$(TARGET)_atl.bin" built.
196
197xtplus:
198 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS) -l"$(TARGET)_xtp.lst" -o"$(TARGET)_xtp.bin"
199 @echo * Small XT Plus version "$(TARGET)_xtp.bin" built.
200
201xtplus_large:
202 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS_LARGE) -l"$(TARGET)_xtpl.lst" -o"$(TARGET)_xtpl.bin"
203 @echo * Large XT Plus version "$(TARGET)_xtpl.bin" built.
204
205xt:
206 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -l"$(TARGET)_xt.lst" -o"$(TARGET)_xt.bin"
207 @echo * Small XT version "$(TARGET)_xt.bin" built.
208
209xt_large:
210 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -l"$(TARGET)_xtl.lst" -o"$(TARGET)_xtl.bin"
211 @echo * Large XT version "$(TARGET)_xtl.bin" built.
212
213xt_tiny:
214 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_TINY) -l"$(TARGET)_tiny.lst" -o"$(TARGET)_tiny.bin"
215 @echo * Tiny XT version "$(TARGET)_tiny.bin" built.
216
217386_8k:
218 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386_8K) -l"$(TARGET)_386.lst" -o"$(TARGET)_386.bin"
219 @echo * Small 386 version "$(TARGET)_386.bin" built.
220
221strings: src\Strings.asm
222 @$(AS) src\Strings.asm $(ASFLAGS) $(DEFS_AT_LARGE) -DCHECK_FOR_UNUSED_ENTRYPOINTS -DMODULE_STRINGS_COMPRESSED_PRECOMPRESS -o build\Strings.bin -l build\StringsPrecompress.lst
223 @perl ..\Tools\StringsCompress.pl < build\StringsPrecompress.lst > src\StringsCompressed.asm
224 @echo StringsCompressed.asm updated!
225
226clean:
227 @$(RM) $(BUILD_DIR)\*.*
228 @echo Deleted "(*.*)" from "$(BUILD_DIR)/"
229
230checksum: all
231 @perl ..\Tools\checksum.pl $(TARGET)_tiny.bin $(BIOS_SIZE_TINY)
232 @perl ..\Tools\checksum.pl $(TARGET)_xt.bin $(BIOS_SIZE_SMALL)
233 @perl ..\Tools\checksum.pl $(TARGET)_xtp.bin $(BIOS_SIZE_SMALL)
234 @perl ..\Tools\checksum.pl $(TARGET)_at.bin $(BIOS_SIZE_SMALL)
235 @perl ..\Tools\checksum.pl $(TARGET)_xtl.bin $(BIOS_SIZE_LARGE)
236 @perl ..\Tools\checksum.pl $(TARGET)_xtpl.bin $(BIOS_SIZE_LARGE)
237 @perl ..\Tools\checksum.pl $(TARGET)_atl.bin $(BIOS_SIZE_LARGE)
238 @perl ..\Tools\checksum.pl $(TARGET)_386.bin $(BIOS_SIZE_SMALL)
239
240unused:
241 @echo "All Features"
242 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_ALL_FEATURES) $(DEFS_XT) $(DEFS_XT_PLUS) $(DEFS_AT) $(DEFS_XT_LARGE) $(DEFS_XTPLUS_LARGE) $(DEFS_AT_LARGE) $(DEFS_XT_TINY) $(DEFS_386_8K) -o"$(TARGET)_unused.asm" -l"$(TARGET)_unused.lst"
243 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_ALL_FEATURES) $(DEFS_XT) $(DEFS_XT_PLUS) $(DEFS_AT) $(DEFS_XT_LARGE) $(DEFS_XTPLUS_LARGE) $(DEFS_AT_LARGE) $(DEFS_XT_TINY) $(DEFS_386_8K) -o"$(TARGET)_unused.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
244 @perl ..\Tools\unused.pl $(TARGET)_unused.lst $(TARGET)_unused.asm
245 @echo "XT Small"
246 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -o"$(TARGET)_unused_xt.asm" -l"$(TARGET)_unused_xt.lst"
247 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -o"$(TARGET)_unused_xt.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
248 @perl ..\Tools\unused.pl $(TARGET)_unused_xt.lst $(TARGET)_unused_xt.asm
249 @echo "XT Large"
250 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -o"$(TARGET)_unused_xtl.asm" -l"$(TARGET)_unused_xtl.lst"
251 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -o"$(TARGET)_unused_xtl.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
252 @perl ..\Tools\unused.pl $(TARGET)_unused_xtl.lst $(TARGET)_unused_xtl.asm
253 @echo "AT Small"
254 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -o"$(TARGET)_unused_at.asm" -l"$(TARGET)_unused_at.lst"
255 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -o"$(TARGET)_unused_at.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
256 @perl ..\Tools\unused.pl $(TARGET)_unused_at.lst $(TARGET)_unused_at.asm
257 @echo "AT Large"
258 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -o"$(TARGET)_unused_atl.asm" -l"$(TARGET)_unused_atl.lst"
259 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -o"$(TARGET)_unused_atl.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
260 @perl ..\Tools\unused.pl $(TARGET)_unused_atl.lst $(TARGET)_unused_atl.asm
261
262
Note: See TracBrowser for help on using the repository browser.