source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/makefile @ 618

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

Changes:

  • Updated the BIOS makefile. Added the NO_ATAID_CORRECTION define back to the Tiny build as I've realized that the correction code should not be needed for builds without MODULE_EBIOS. Also added a new makefile target 'custom' to make it easier for people to make custom builds.
  • Fixed a bug where calling INT 13h/AH=15h for drives not handled by XUB (floppy drives for example) would return an error due to the fact that any non-zero return value in AH from the other BIOS would cause the CF to be set in Int13h_SetErrorCodeToIntpackInSSBPfromAH. The return path is now via Int13h_ReturnFromHandlerWithoutStoringErrorCode which means that no status/error code will be returned in the BDA but that should not be a problem as the other BIOS should do that anyway. This change also fixed another potential problem where return values in DL from the other BIOS were assumed to be drive numbers when MODULE_SERIAL_FLOPPY is included in the build.
  • Minor optimizations and fixes.
File size: 15.2 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:
233    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_CUSTOM) -l"$(TARGET)_custom.lst" -o"$(TARGET)_custom.bin"
234    @echo * Custom version "$(TARGET)_custom.bin" built.
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.