source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/makefile@ 621

Last change on this file since 621 was 621, checked in by Krister Nordvall, 3 years ago

Changes:

  • Fixed three different bugs all causing the boot menu to show drives using IRQs even though the BIOS had been built without MODULE_IRQ.
  • Fixed two bugs in XTIDECFG where loading a BIOS from file and then loading the old settings from EEPROM would
    • overwrite ROMVARS.wFlags in the loaded BIOS file (in RAM). The possibly resulting mismatch of module flags could make it impossible to change settings for modules included in the BIOS or allow changing settings for modules not included in the BIOS.
    • not copy the color theme over to the loaded BIOS.
  • Also fixed two very minor bugs in XTIDECFG in BiosFile_LoadFileFromDSSItoRamBuffer and BiosFile_SaveRamBufferToFileInDSSI where the error handling in these routines would close whatever file handle that happened to match the error code returned by DOS in AX.
  • Made significant changes to the new flash ROM programming routines to reduce the size. Also fixed a minor bug that would cause the second verification to be skipped and return success when programming a 64 KB block of data.
  • Changed the custom BIOS build file names to the 8.3 format.
  • Changed some help strings in XTIDECFG to clarify things.
  • Other minor optimizations and fixes.
File size: 15.1 KB
RevLine 
[445]1####################################################################################################
2# Makefile to build XTIDE Universal BIOS. #
3# #
4# Valid makefile targets are: #
[618]5# all Removes existing files and builds binary files in \Build (without checksums) #
6# small Builds only binaries smaller than or equal to 8 kiB (without checksums) #
7# large Builds only binaries larger than 8 kiB (without checksums) #
8# custom Builds custom binary without checksum (change DEFINES_CUSTOM / BIOS_SIZE_CUSTOM first) #
[445]9# clean Removes all files from \Build #
[618]10# checksum* Same as 'all' but also applies checksums to the binaries #
[445]11# strings* Compress src\Strings.asm to src\StringsCompressed.asm #
[511]12# unused* Checks if there are any unused functions that can be removed to save space #
[445]13# #
14# * at the end of target name means that Perl is required for the job. #
15# Build directory must be created manually if it does not exist. #
16# #
17# #
18# Following modules can be included or excluded: #
19# MODULE_8BIT_IDE Support for 8-BIT IDE cards like XTIDE #
[505]20# MODULE_8BIT_IDE_ADVANCED Support for memory mapped and DMA based cards like JRIDE and XTCF #
[589]21# MODULE_ADVANCED_ATA Native support for some VLB IDE controllers (requires USE_386) #
[550]22# MODULE_COMPATIBLE_TABLES Support for ill behaving software that tries to access DPT directly #
[445]23# MODULE_BOOT_MENU Boot Menu for selection of drive to boot from #
24# MODULE_EBIOS Enhanced functions for accessing drives over 8.4 GB #
25# MODULE_HOTKEYS Hotkey Bar to boot from any drive #
26# MODULE_IRQ IDE IRQ support #
27# MODULE_SERIAL Virtual hard disks using serial port #
28# MODULE_SERIAL_FLOPPY Virtual floppy drives using serial port (requires MODULE_SERIAL) #
29# MODULE_STRINGS_COMPRESSED Use compressed strings to save space #
[567]30# MODULE_VERY_LATE_INIT Initialize on INT 13h if our INT 19h handler is not called #
31# MODULE_POWER_MANAGEMENT Power Management support #
[605]32# MODULE_WIN9X_CMOS_HACK Hack for Windows 9x compatibility #
[594]33# MODULE_MFM_COMPATIBILITY Restores BDA drive count for MFM controllers that expect to be the #
34# only hard drive controller on the system #
[445]35# #
36# Not modules but these affect the assembly: #
37# ELIMINATE_CGA_SNOW Prevents CGA snowing at the cost of a few bytes #
[522]38# RELOCATE_INT13H_STACK ** Relocates INT 13h stack to beginning of stolen conventional memory #
[580]39# NO_ATAID_VALIDATION *** Excludes code that tries to ensure proper communication with drives #
[618]40# NO_ATAID_CORRECTION Excludes code that corrects illegal CHS values from some CF cards #
[445]41# USE_186 Use instructions supported by 80188/80186 and V20/V30 and later #
[511]42# USE_286 Use instructions supported by 286 and later (defines USE_UNDOC_INTEL)#
43# USE_386 Use instructions supported by 386 and later (defines USE_286) #
[445]44# USE_AT Use features supported on AT and later systems (not available on XT) #
[491]45# USE_UNDOC_INTEL Optimizations for Intel CPU:s - do NOT use on NEC V20/V30/Sony CPU:s #
[593]46# USE_NEC_V Optimizations for use with NEC V20/V30 processors only #
[592]47# CLD_NEEDED Only needed for compatibility with buggy software/BIOSes #
[445]48# #
[522]49# ** AT Builds only (when USE_AT is defined) #
[580]50# *** Use this only when certain known good drives are not being detected (eg WD Caviars) #
[445]51####################################################################################################
[3]52
53###########################################
54# Source files and destination executable #
55###########################################
56
57# Assembly source code file (*.asm):
58SRC_ASM = Src/Main.asm
59
60# Program executable file name without extension:
61PROG = ide
62
63
64#######################################
65# Destination and include directories #
66#######################################
67
68# Directory where binary file will be compiled to
69BUILD_DIR = Build
70
71# Subdirectories where included files are:
72HEADERS = Inc/
[363]73HEADERS += Inc/Controllers/
[3]74HEADERS += Src/
75HEADERS += Src/Handlers/
76HEADERS += Src/Handlers/Int13h/
[165]77HEADERS += Src/Handlers/Int13h/EBIOS/
78HEADERS += Src/Handlers/Int13h/Tools/
[392]79HEADERS += Src/Handlers/Int19h/
[150]80HEADERS += Src/Device/
81HEADERS += Src/Device/IDE/
[238]82HEADERS += Src/Device/MemoryMappedIDE/
[150]83HEADERS += Src/Device/Serial/
[3]84HEADERS += Src/Initialization/
[392]85HEADERS += Src/Initialization/AdvancedAta/
86HEADERS += Src/Menus/
87HEADERS += Src/Menus/BootMenu/
[3]88HEADERS += Src/Libraries/
89HEADERS += Src/VariablesAndDPTs/
90
[88]91# Subdirectories where library files are:
92LIBS = ../Assembly_Library/Inc/
93LIBS += ../Assembly_Library/Src/
94LIBS += ../Assembly_Library/Src/Display/
95LIBS += ../Assembly_Library/Src/File/
96LIBS += ../Assembly_Library/Src/Keyboard/
97LIBS += ../Assembly_Library/Src/Menu/
98LIBS += ../Assembly_Library/Src/Menu/Dialog/
99LIBS += ../Assembly_Library/Src/String/
100LIBS += ../Assembly_Library/Src/Time/
101LIBS += ../Assembly_Library/Src/Util/
[277]102LIBS += ../Assembly_Library/Src/Serial/
[88]103LIBS += ../XTIDE_Universal_BIOS/Inc/
104HEADERS += $(LIBS)
[3]105
[88]106
[618]107##################################
108# Assembler preprocessor defines #
109##################################
[606]110DEFINES_COMMON = MODULE_STRINGS_COMPRESSED MODULE_HOTKEYS MODULE_8BIT_IDE MODULE_EBIOS MODULE_SERIAL MODULE_SERIAL_FLOPPY MODULE_POWER_MANAGEMENT NO_ATAID_VALIDATION CLD_NEEDED
[550]111DEFINES_COMMON_LARGE = MODULE_BOOT_MENU MODULE_8BIT_IDE_ADVANCED MODULE_COMPATIBLE_TABLES
[389]112
[567]113DEFINES_XT = $(DEFINES_COMMON) ELIMINATE_CGA_SNOW MODULE_8BIT_IDE_ADVANCED
[580]114DEFINES_XTPLUS = $(DEFINES_XT) USE_186
[589]115DEFINES_AT = $(DEFINES_COMMON) USE_AT USE_286 MODULE_IRQ MODULE_COMPATIBLE_TABLES
[618]116DEFINES_386 = $(DEFINES_AT) USE_386 MODULE_ADVANCED_ATA MODULE_WIN9X_CMOS_HACK
[389]117
[397]118DEFINES_XT_LARGE = $(DEFINES_XT) $(DEFINES_COMMON_LARGE)
119DEFINES_XTPLUS_LARGE = $(DEFINES_XTPLUS) $(DEFINES_COMMON_LARGE)
[482]120DEFINES_AT_LARGE = $(DEFINES_AT) $(DEFINES_COMMON_LARGE)
[598]121DEFINES_386_LARGE = $(DEFINES_386) $(DEFINES_COMMON_LARGE)
[3]122
[618]123DEFINES_XT_TINY = MODULE_STRINGS_COMPRESSED MODULE_8BIT_IDE NO_ATAID_VALIDATION NO_ATAID_CORRECTION CLD_NEEDED
[3]124
[618]125DEFINES_CUSTOM = ?
126
127
[3]128###################
129# Other variables #
130###################
131
[603]132# 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').
[592]133# Note! The size must be a multiple of 2 KB for compatibility reasons.
134BIOS_SIZE_TINY = 4096
135BIOS_SIZE_SMALL = 8192
136BIOS_SIZE_LARGE = 10240
[618]137BIOS_SIZE_CUSTOM = ?
[239]138
[3]139# Add -D in front of every preprocessor define declaration
[592]140DEFS_XT = $(DEFINES_XT:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
141DEFS_XTPLUS = $(DEFINES_XTPLUS:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
142DEFS_AT = $(DEFINES_AT:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
[506]143DEFS_XT_LARGE = $(DEFINES_XT_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
144DEFS_XTPLUS_LARGE = $(DEFINES_XTPLUS_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
145DEFS_AT_LARGE = $(DEFINES_AT_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
[592]146DEFS_XT_TINY = $(DEFINES_XT_TINY:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_TINY)
[593]147DEFS_386 = $(DEFINES_386:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
148DEFS_386_LARGE = $(DEFINES_386_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
[618]149DEFS_CUSTOM = $(DEFINES_CUSTOM:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_CUSTOM)
[3]150
151# Add -I in front of all header directories
152IHEADERS = $(HEADERS:%=-I%)
153
[145]154# Path + target file to be built
[3]155TARGET = $(BUILD_DIR)/$(PROG)
156
[618]157
[3]158#########################
159# Compilers and linkers #
160#########################
161
162# Make
163MAKE = mingw32-make.exe
164
165# Assembler
[188]166AS = nasm.exe
[3]167
168# use this command to erase files.
169RM = -del /Q
170
171
172#############################
173# Compiler and linker flags #
174#############################
175
176# Assembly compiler flags
177ASFLAGS = -f bin # Produce binary object files
178ASFLAGS += $(IHEADERS) # Set header file directory paths
179ASFLAGS += -Worphan-labels # Warn about labels without colon
[379]180ASFLAGS += -Ox # Optimize operands to their shortest forms
[3]181
182
183############################################
184# Build process. Actual work is done here. #
185############################################
186
[272]187all: clean small large
[145]188 @echo All done!
[3]189
[593]190small: xt_tiny xt xtplus at 386
[506]191 @echo All small binaries built!
[272]192
[593]193large: xt_large xtplus_large at_large 386_large
[506]194 @echo All large binaries built!
[272]195
[3]196at:
[80]197 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -l"$(TARGET)_at.lst" -o"$(TARGET)_at.bin"
[506]198 @echo * Small AT version "$(TARGET)_at.bin" built.
[3]199
[238]200at_large:
201 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -l"$(TARGET)_atl.lst" -o"$(TARGET)_atl.bin"
[558]202 @echo * Large AT version "$(TARGET)_atl.bin" built.
[238]203
[3]204xtplus:
[80]205 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS) -l"$(TARGET)_xtp.lst" -o"$(TARGET)_xtp.bin"
[506]206 @echo * Small XT Plus version "$(TARGET)_xtp.bin" built.
[3]207
[238]208xtplus_large:
209 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS_LARGE) -l"$(TARGET)_xtpl.lst" -o"$(TARGET)_xtpl.bin"
[558]210 @echo * Large XT Plus version "$(TARGET)_xtpl.bin" built.
[238]211
[3]212xt:
[80]213 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -l"$(TARGET)_xt.lst" -o"$(TARGET)_xt.bin"
[506]214 @echo * Small XT version "$(TARGET)_xt.bin" built.
[3]215
[238]216xt_large:
217 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -l"$(TARGET)_xtl.lst" -o"$(TARGET)_xtl.bin"
[558]218 @echo * Large XT version "$(TARGET)_xtl.bin" built.
[277]219
[397]220xt_tiny:
221 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_TINY) -l"$(TARGET)_tiny.lst" -o"$(TARGET)_tiny.bin"
222 @echo * Tiny XT version "$(TARGET)_tiny.bin" built.
[238]223
[593]224386:
225 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386) -l"$(TARGET)_386.lst" -o"$(TARGET)_386.bin"
[506]226 @echo * Small 386 version "$(TARGET)_386.bin" built.
[366]227
[593]228386_large:
229 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386_LARGE) -l"$(TARGET)_386l.lst" -o"$(TARGET)_386l.bin"
230 @echo * Large 386 version "$(TARGET)_386l.bin" built.
231
[618]232custom:
[621]233 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_CUSTOM) -l"$(TARGET)_cstm.lst" -o"$(TARGET)_cstm.bin"
234 @echo * Custom version "$(TARGET)_cstm.bin" built.
[618]235
[322]236strings: src\Strings.asm
[415]237 @$(AS) src\Strings.asm $(ASFLAGS) $(DEFS_AT_LARGE) -DCHECK_FOR_UNUSED_ENTRYPOINTS -DMODULE_STRINGS_COMPRESSED_PRECOMPRESS -o build\Strings.bin -l build\StringsPrecompress.lst
[592]238 @perl ..\Tools\StringsCompress.pl < build\StringsPrecompress.lst > src\StringsCompressed.asm
[322]239 @echo StringsCompressed.asm updated!
[252]240
[3]241clean:
242 @$(RM) $(BUILD_DIR)\*.*
243 @echo Deleted "(*.*)" from "$(BUILD_DIR)/"
[186]244
[294]245checksum: all
[592]246 @perl ..\Tools\checksum.pl $(TARGET)_tiny.bin $(BIOS_SIZE_TINY)
247 @perl ..\Tools\checksum.pl $(TARGET)_xt.bin $(BIOS_SIZE_SMALL)
248 @perl ..\Tools\checksum.pl $(TARGET)_xtp.bin $(BIOS_SIZE_SMALL)
249 @perl ..\Tools\checksum.pl $(TARGET)_at.bin $(BIOS_SIZE_SMALL)
250 @perl ..\Tools\checksum.pl $(TARGET)_xtl.bin $(BIOS_SIZE_LARGE)
251 @perl ..\Tools\checksum.pl $(TARGET)_xtpl.bin $(BIOS_SIZE_LARGE)
252 @perl ..\Tools\checksum.pl $(TARGET)_atl.bin $(BIOS_SIZE_LARGE)
253 @perl ..\Tools\checksum.pl $(TARGET)_386.bin $(BIOS_SIZE_SMALL)
[593]254 @perl ..\Tools\checksum.pl $(TARGET)_386l.bin $(BIOS_SIZE_LARGE)
[203]255
[491]256unused:
[596]257 @echo "XT Tiny"
258 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_TINY) -o"$(TARGET)_unused_tiny.asm" -l"$(TARGET)_unused_tiny.lst"
259 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_TINY) -o"$(TARGET)_unused_tiny.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
260 @perl ..\Tools\unused.pl $(TARGET)_unused_tiny.lst $(TARGET)_unused_tiny.asm
[489]261 @echo "XT Small"
262 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -o"$(TARGET)_unused_xt.asm" -l"$(TARGET)_unused_xt.lst"
263 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -o"$(TARGET)_unused_xt.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
[592]264 @perl ..\Tools\unused.pl $(TARGET)_unused_xt.lst $(TARGET)_unused_xt.asm
[489]265 @echo "XT Large"
266 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -o"$(TARGET)_unused_xtl.asm" -l"$(TARGET)_unused_xtl.lst"
267 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -o"$(TARGET)_unused_xtl.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
[592]268 @perl ..\Tools\unused.pl $(TARGET)_unused_xtl.lst $(TARGET)_unused_xtl.asm
[596]269 @echo "XT Plus Small"
270 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS) -o"$(TARGET)_unused_xtp.asm" -l"$(TARGET)_unused_xtp.lst"
271 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS) -o"$(TARGET)_unused_xtp.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
272 @perl ..\Tools\unused.pl $(TARGET)_unused_xtp.lst $(TARGET)_unused_xtp.asm
273 @echo "XT Plus Large"
274 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS_LARGE) -o"$(TARGET)_unused_xtpl.asm" -l"$(TARGET)_unused_xtpl.lst"
275 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS_LARGE) -o"$(TARGET)_unused_xtpl.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
276 @perl ..\Tools\unused.pl $(TARGET)_unused_xtpl.lst $(TARGET)_unused_xtpl.asm
[489]277 @echo "AT Small"
278 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -o"$(TARGET)_unused_at.asm" -l"$(TARGET)_unused_at.lst"
279 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -o"$(TARGET)_unused_at.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
[592]280 @perl ..\Tools\unused.pl $(TARGET)_unused_at.lst $(TARGET)_unused_at.asm
[489]281 @echo "AT Large"
282 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -o"$(TARGET)_unused_atl.asm" -l"$(TARGET)_unused_atl.lst"
283 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -o"$(TARGET)_unused_atl.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
[592]284 @perl ..\Tools\unused.pl $(TARGET)_unused_atl.lst $(TARGET)_unused_atl.asm
[596]285 @echo "386 Small"
286 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386) -o"$(TARGET)_unused_386.asm" -l"$(TARGET)_unused_386.lst"
287 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386) -o"$(TARGET)_unused_386.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
288 @perl ..\Tools\unused.pl $(TARGET)_unused_386.lst $(TARGET)_unused_386.asm
289 @echo "386 Large"
290 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386_LARGE) -o"$(TARGET)_unused_386l.asm" -l"$(TARGET)_unused_386l.lst"
291 @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386_LARGE) -o"$(TARGET)_unused_386l.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
292 @perl ..\Tools\unused.pl $(TARGET)_unused_386l.lst $(TARGET)_unused_386l.asm
[194]293
Note: See TracBrowser for help on using the repository browser.