source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/makefile @ 503

Last change on this file since 503 was 493, checked in by gregli@…, 11 years ago

Separated MODULE_8BIT_IDE into the basic part used by XTIDE rev 1 and rev 2 which is PIO based, and MODULE_8BIT_IDE_ADVANCED for JRIDE and XTCF support which requires memory mapping and/or DMA. This allows for creating an 8KB image with boot menu support (but no hotkeys) for the XTIDE rev 1. Cleaned up how we reset the drive translation information, ensuring it is properly set between boot attempt on a primary and secondary drive - as a result we clean it when needed, rather than trying to always keep it clean. Also fixed translation bugs in int13h.asm where I had previously missed converting some MODULE_HOTKEYS into MODULE_DRIVEXLATE.

File size: 12.4 KB
RevLine 
[445]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 15 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#                                                                                                  #
12# * at the end of target name means that Perl is required for the job.                             #
13# Build directory must be created manually if it does not exist.                                   #
14#                                                                                                  #
15#                                                                                                  #
16# Following modules can be included or excluded:                                                   #
17# MODULE_8BIT_IDE             Support for 8-BIT IDE cards like XTIDE                               #
[493]18# MODULE_8BIT_IDE_ADVANCED    Support for memory mapped and DMA based cards like JRIDE and XTCF    #
[445]19# MODULE_ADVANCED_ATA         Native support for some VLB IDE controllers                          #
20# MODULE_BOOT_MENU            Boot Menu for selection of drive to boot from                        #
21# MODULE_EBIOS                Enhanced functions for accessing drives over 8.4 GB                  #
22# MODULE_HOTKEYS              Hotkey Bar to boot from any drive                                    #
23# MODULE_IRQ                  IDE IRQ support                                                      #
24# MODULE_SERIAL               Virtual hard disks using serial port                                 #
25# MODULE_SERIAL_FLOPPY        Virtual floppy drives using serial port (requires MODULE_SERIAL)     #
26# MODULE_STRINGS_COMPRESSED   Use compressed strings to save space                                 #
27# MODULE_FEATURE_SETS         Power Management support                                             #
28#                                                                                                  #
29# Not modules but these affect the assembly:                                                       #
30# ELIMINATE_CGA_SNOW          Prevents CGA snowing at the cost of a few bytes                      #
31# RELOCATE_INT13H_STACK       Relocates INT 13h stack to top of stolen conventional memory         #
32# RESERVE_DIAGNOSTIC_CYLINDER Reserve one L-CHS cylinder for compatibility with old BIOSes         #
33# USE_186                     Use instructions supported by 80188/80186 and V20/V30 and later      #
34# USE_286                     Use instructions supported by 286 and later                          #
35# USE_386                     Use instructions supported by 386 and later                          #
36# USE_AT                      Use features supported on AT and later systems (not available on XT) #
[491]37# USE_UNDOC_INTEL             Optimizations for Intel CPU:s - do NOT use on NEC V20/V30/Sony CPU:s #
[445]38#                                                                                                  #
39####################################################################################################
[3]40
41###########################################
42# Source files and destination executable #
43###########################################
44
45# Assembly source code file (*.asm):
46SRC_ASM = Src/Main.asm
47
48# Program executable file name without extension:
49PROG = ide
50
51
52#######################################
53# Destination and include directories #
54#######################################
55
56# Directory where binary file will be compiled to
57BUILD_DIR = Build
58
59# Subdirectories where included files are:
60HEADERS = Inc/
[363]61HEADERS += Inc/Controllers/
[3]62HEADERS += Src/
63HEADERS += Src/Handlers/
64HEADERS += Src/Handlers/Int13h/
[165]65HEADERS += Src/Handlers/Int13h/EBIOS/
66HEADERS += Src/Handlers/Int13h/Tools/
[392]67HEADERS += Src/Handlers/Int19h/
[150]68HEADERS += Src/Device/
69HEADERS += Src/Device/IDE/
[238]70HEADERS += Src/Device/MemoryMappedIDE/
[150]71HEADERS += Src/Device/Serial/
[3]72HEADERS += Src/Initialization/
[392]73HEADERS += Src/Initialization/AdvancedAta/
74HEADERS += Src/Menus/
75HEADERS += Src/Menus/BootMenu/
[3]76HEADERS += Src/Libraries/
77HEADERS += Src/VariablesAndDPTs/
78
[88]79# Subdirectories where library files are:
80LIBS = ../Assembly_Library/Inc/
81LIBS += ../Assembly_Library/Src/
82LIBS += ../Assembly_Library/Src/Display/
83LIBS += ../Assembly_Library/Src/File/
84LIBS += ../Assembly_Library/Src/Keyboard/
85LIBS += ../Assembly_Library/Src/Menu/
86LIBS += ../Assembly_Library/Src/Menu/Dialog/
87LIBS += ../Assembly_Library/Src/String/
88LIBS += ../Assembly_Library/Src/Time/
89LIBS += ../Assembly_Library/Src/Util/
[277]90LIBS += ../Assembly_Library/Src/Serial/
[88]91LIBS += ../XTIDE_Universal_BIOS/Inc/
92HEADERS += $(LIBS)
[3]93
[88]94
[3]95#################################################################
96# Assembler preprocessor defines.                               #
97#################################################################
[421]98DEFINES_COMMON = MODULE_STRINGS_COMPRESSED MODULE_HOTKEYS MODULE_EBIOS MODULE_FEATURE_SETS RESERVE_DIAGNOSTIC_CYLINDER
[493]99DEFINES_COMMON_LARGE = MODULE_BOOT_MENU MODULE_8BIT_IDE MODULE_8BIT_IDE_ADVANCED
[389]100
[473]101DEFINES_XT = $(DEFINES_COMMON) ELIMINATE_CGA_SNOW MODULE_8BIT_IDE MODULE_SERIAL MODULE_SERIAL_FLOPPY
[397]102DEFINES_XTPLUS = $(DEFINES_COMMON) $(DEFINES_XT) USE_186
[493]103DEFINES_AT = $(DEFINES_COMMON) USE_AT USE_286 USE_UNDOC_INTEL RELOCATE_INT13H_STACK MODULE_IRQ MODULE_SERIAL MODULE_SERIAL_FLOPPY MODULE_ADVANCED_ATA
[389]104
[397]105DEFINES_XT_LARGE = $(DEFINES_XT) $(DEFINES_COMMON_LARGE)
106DEFINES_XTPLUS_LARGE = $(DEFINES_XTPLUS) $(DEFINES_COMMON_LARGE)
[482]107DEFINES_AT_LARGE = $(DEFINES_AT) $(DEFINES_COMMON_LARGE)
[389]108
[400]109DEFINES_XT_TINY = MODULE_STRINGS_COMPRESSED MODULE_8BIT_IDE
[397]110DEFINES_386_8K = $(DEFINES_AT) USE_386
[3]111
[493]112DEFINES_ALL_FEATURES = MODULE_8BIT_IDE MODULE_ADVANCED_ATA MODULE_BOOT_MENU MODULE_EBIOS MODULE_HOTKEYS MODULE_IRQ MODULE_SERIAL MODULE_SERIAL_FLOPPY MODULE_STRINGS_COMPRESSED MODULE_FEATURE_SETS MODULE_8BIT_IDE_ADVANCED
[3]113
[489]114
[3]115###################
116# Other variables #
117###################
118
[239]119# Target size of the ROM, used in main.asm for number of 512B blocks and by checksum Perl script below
120ROMSIZE = 8192
121ROMSIZE_LARGE = 15360
122
[3]123# Add -D in front of every preprocessor define declaration
[239]124DEFS_XT = $(DEFINES_XT:%=-D%) -DROMSIZE=$(ROMSIZE)
125DEFS_XTPLUS = $(DEFINES_XTPLUS:%=-D%) -DROMSIZE=$(ROMSIZE)
126DEFS_AT = $(DEFINES_AT:%=-D%) -DROMSIZE=$(ROMSIZE)
127DEFS_XT_LARGE = $(DEFINES_XT_LARGE:%=-D%) -DROMSIZE=$(ROMSIZE_LARGE)
128DEFS_XTPLUS_LARGE = $(DEFINES_XTPLUS_LARGE:%=-D%) -DROMSIZE=$(ROMSIZE_LARGE)
129DEFS_AT_LARGE = $(DEFINES_AT_LARGE:%=-D%) -DROMSIZE=$(ROMSIZE_LARGE)
[397]130DEFS_XT_TINY = $(DEFINES_XT_TINY:%=-D%) -DROMSIZE=$(ROMSIZE)
[366]131DEFS_386_8K = $(DEFINES_386_8K:%=-D%) -DROMSIZE=$(ROMSIZE)
[489]132DEFS_ALL_FEATURES = $(DEFINES_ALL_FEATURES:%=-D%)
[3]133
134# Add -I in front of all header directories
135IHEADERS = $(HEADERS:%=-I%)
136
[145]137# Path + target file to be built
[3]138TARGET = $(BUILD_DIR)/$(PROG)
139
140#########################
141# Compilers and linkers #
142#########################
143
144# Make
145MAKE = mingw32-make.exe
146
147# Assembler
[188]148AS = nasm.exe
[3]149
150# use this command to erase files.
151RM = -del /Q
152
153
154#############################
155# Compiler and linker flags #
156#############################
157
158# Assembly compiler flags
159ASFLAGS = -f bin                # Produce binary object files
160ASFLAGS += $(IHEADERS)          # Set header file directory paths
161ASFLAGS += -Worphan-labels      # Warn about labels without colon
[379]162ASFLAGS += -Ox                  # Optimize operands to their shortest forms
[3]163
164
165############################################
166# Build process. Actual work is done here. #
167############################################
168
[272]169all: clean small large
[145]170    @echo All done!
[3]171
[397]172small: xt_tiny xt xtplus at 386_8k
[294]173    @echo All 8 kiB binaries built!
[272]174
[397]175large: xt_large xtplus_large at_large
[294]176    @echo All 15 kiB binaries built!
[272]177
[3]178at:
[80]179    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -l"$(TARGET)_at.lst" -o"$(TARGET)_at.bin"
[272]180    @echo * 8k AT version "$(TARGET)_at.bin" built.
[3]181
[238]182at_large:
183    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -l"$(TARGET)_atl.lst" -o"$(TARGET)_atl.bin"
[272]184    @echo *15k AT version "$(TARGET)_atl.bin" built.
[238]185
[3]186xtplus:
[80]187    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS) -l"$(TARGET)_xtp.lst" -o"$(TARGET)_xtp.bin"
[294]188    @echo * 8k XT Plus version "$(TARGET)_xtp.bin" built.
[3]189
[238]190xtplus_large:
191    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS_LARGE) -l"$(TARGET)_xtpl.lst" -o"$(TARGET)_xtpl.bin"
[294]192    @echo *15k XT Plus version "$(TARGET)_xtpl.bin" built.
[238]193
[3]194xt:
[80]195    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -l"$(TARGET)_xt.lst" -o"$(TARGET)_xt.bin"
[272]196    @echo * 8k XT version "$(TARGET)_xt.bin" built.
[3]197
[238]198xt_large:
199    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -l"$(TARGET)_xtl.lst" -o"$(TARGET)_xtl.bin"
[272]200    @echo *15k XT version "$(TARGET)_xtl.bin" built.
[277]201
[397]202xt_tiny:
203    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_TINY) -l"$(TARGET)_tiny.lst" -o"$(TARGET)_tiny.bin"
204    @echo * Tiny XT version "$(TARGET)_tiny.bin" built.
[238]205
[366]206386_8k:
207    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386_8K) -l"$(TARGET)_386.lst" -o"$(TARGET)_386.bin"
208    @echo * 8k 386 version "$(TARGET)_386.bin" built.
209
[322]210strings: src\Strings.asm
[415]211    @$(AS) src\Strings.asm $(ASFLAGS) $(DEFS_AT_LARGE) -DCHECK_FOR_UNUSED_ENTRYPOINTS -DMODULE_STRINGS_COMPRESSED_PRECOMPRESS -o build\Strings.bin -l build\StringsPrecompress.lst
[322]212    @perl ..\tools\StringsCompress.pl < build\StringsPrecompress.lst > src\StringsCompressed.asm
213    @echo StringsCompressed.asm updated!
[252]214
[3]215clean:
216    @$(RM) $(BUILD_DIR)\*.*
217    @echo Deleted "(*.*)" from "$(BUILD_DIR)/"
[186]218
[294]219checksum: all
[397]220    @perl ..\tools\checksum.pl $(TARGET)_tiny.bin $(ROMSIZE)
221    @perl ..\tools\checksum.pl $(TARGET)_xt.bin $(ROMSIZE)
222    @perl ..\tools\checksum.pl $(TARGET)_xtp.bin $(ROMSIZE)
223    @perl ..\tools\checksum.pl $(TARGET)_at.bin $(ROMSIZE)
224    @perl ..\tools\checksum.pl $(TARGET)_xtl.bin $(ROMSIZE_LARGE)
225    @perl ..\tools\checksum.pl $(TARGET)_xtpl.bin $(ROMSIZE_LARGE)
[240]226    @perl ..\tools\checksum.pl $(TARGET)_atl.bin $(ROMSIZE_LARGE)
[369]227    @perl ..\tools\checksum.pl $(TARGET)_386.bin $(ROMSIZE)
[203]228
[491]229unused:
[489]230    @echo "All Features"
231    @$(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"
232    @$(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
233    @perl ..\tools\unused.pl $(TARGET)_unused.lst $(TARGET)_unused.asm
234    @echo "XT Small"
235    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -o"$(TARGET)_unused_xt.asm" -l"$(TARGET)_unused_xt.lst"
236    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -o"$(TARGET)_unused_xt.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
237    @perl ..\tools\unused.pl $(TARGET)_unused_xt.lst $(TARGET)_unused_xt.asm
238    @echo "XT Large"
239    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -o"$(TARGET)_unused_xtl.asm" -l"$(TARGET)_unused_xtl.lst"
240    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -o"$(TARGET)_unused_xtl.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
241    @perl ..\tools\unused.pl $(TARGET)_unused_xtl.lst $(TARGET)_unused_xtl.asm
242    @echo "AT Small"
243    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -o"$(TARGET)_unused_at.asm" -l"$(TARGET)_unused_at.lst"
244    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -o"$(TARGET)_unused_at.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
245    @perl ..\tools\unused.pl $(TARGET)_unused_at.lst $(TARGET)_unused_at.asm
246    @echo "AT Large"
247    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -o"$(TARGET)_unused_atl.asm" -l"$(TARGET)_unused_atl.lst"
248    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -o"$(TARGET)_unused_atl.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
249    @perl ..\tools\unused.pl $(TARGET)_unused_atl.lst $(TARGET)_unused_atl.asm
[194]250
[489]251
Note: See TracBrowser for help on using the repository browser.