source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/makefile @ 493

Last change on this file since 493 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
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 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                               #
18# MODULE_8BIT_IDE_ADVANCED    Support for memory mapped and DMA based cards like JRIDE and XTCF    #
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) #
37# USE_UNDOC_INTEL             Optimizations for Intel CPU:s - do NOT use on NEC V20/V30/Sony CPU:s #
38#                                                                                                  #
39####################################################################################################
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/
61HEADERS += Inc/Controllers/
62HEADERS += Src/
63HEADERS += Src/Handlers/
64HEADERS += Src/Handlers/Int13h/
65HEADERS += Src/Handlers/Int13h/EBIOS/
66HEADERS += Src/Handlers/Int13h/Tools/
67HEADERS += Src/Handlers/Int19h/
68HEADERS += Src/Device/
69HEADERS += Src/Device/IDE/
70HEADERS += Src/Device/MemoryMappedIDE/
71HEADERS += Src/Device/Serial/
72HEADERS += Src/Initialization/
73HEADERS += Src/Initialization/AdvancedAta/
74HEADERS += Src/Menus/
75HEADERS += Src/Menus/BootMenu/
76HEADERS += Src/Libraries/
77HEADERS += Src/VariablesAndDPTs/
78
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/
90LIBS += ../Assembly_Library/Src/Serial/
91LIBS += ../XTIDE_Universal_BIOS/Inc/
92HEADERS += $(LIBS)
93
94
95#################################################################
96# Assembler preprocessor defines.                               #
97#################################################################
98DEFINES_COMMON = MODULE_STRINGS_COMPRESSED MODULE_HOTKEYS MODULE_EBIOS MODULE_FEATURE_SETS RESERVE_DIAGNOSTIC_CYLINDER
99DEFINES_COMMON_LARGE = MODULE_BOOT_MENU MODULE_8BIT_IDE MODULE_8BIT_IDE_ADVANCED
100
101DEFINES_XT = $(DEFINES_COMMON) ELIMINATE_CGA_SNOW MODULE_8BIT_IDE MODULE_SERIAL MODULE_SERIAL_FLOPPY
102DEFINES_XTPLUS = $(DEFINES_COMMON) $(DEFINES_XT) USE_186
103DEFINES_AT = $(DEFINES_COMMON) USE_AT USE_286 USE_UNDOC_INTEL RELOCATE_INT13H_STACK MODULE_IRQ MODULE_SERIAL MODULE_SERIAL_FLOPPY MODULE_ADVANCED_ATA
104
105DEFINES_XT_LARGE = $(DEFINES_XT) $(DEFINES_COMMON_LARGE)
106DEFINES_XTPLUS_LARGE = $(DEFINES_XTPLUS) $(DEFINES_COMMON_LARGE)
107DEFINES_AT_LARGE = $(DEFINES_AT) $(DEFINES_COMMON_LARGE)
108
109DEFINES_XT_TINY = MODULE_STRINGS_COMPRESSED MODULE_8BIT_IDE
110DEFINES_386_8K = $(DEFINES_AT) USE_386
111
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
113
114
115###################
116# Other variables #
117###################
118
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
123# Add -D in front of every preprocessor define declaration
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)
130DEFS_XT_TINY = $(DEFINES_XT_TINY:%=-D%) -DROMSIZE=$(ROMSIZE)
131DEFS_386_8K = $(DEFINES_386_8K:%=-D%) -DROMSIZE=$(ROMSIZE)
132DEFS_ALL_FEATURES = $(DEFINES_ALL_FEATURES:%=-D%)
133
134# Add -I in front of all header directories
135IHEADERS = $(HEADERS:%=-I%)
136
137# Path + target file to be built
138TARGET = $(BUILD_DIR)/$(PROG)
139
140#########################
141# Compilers and linkers #
142#########################
143
144# Make
145MAKE = mingw32-make.exe
146
147# Assembler
148AS = nasm.exe
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
162ASFLAGS += -Ox                  # Optimize operands to their shortest forms
163
164
165############################################
166# Build process. Actual work is done here. #
167############################################
168
169all: clean small large
170    @echo All done!
171
172small: xt_tiny xt xtplus at 386_8k
173    @echo All 8 kiB binaries built!
174
175large: xt_large xtplus_large at_large
176    @echo All 15 kiB binaries built!
177
178at:
179    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT) -l"$(TARGET)_at.lst" -o"$(TARGET)_at.bin"
180    @echo * 8k AT version "$(TARGET)_at.bin" built.
181
182at_large:
183    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_AT_LARGE) -l"$(TARGET)_atl.lst" -o"$(TARGET)_atl.bin"
184    @echo *15k AT version "$(TARGET)_atl.bin" built.
185
186xtplus:
187    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS) -l"$(TARGET)_xtp.lst" -o"$(TARGET)_xtp.bin"
188    @echo * 8k XT Plus version "$(TARGET)_xtp.bin" built.
189
190xtplus_large:
191    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XTPLUS_LARGE) -l"$(TARGET)_xtpl.lst" -o"$(TARGET)_xtpl.bin"
192    @echo *15k XT Plus version "$(TARGET)_xtpl.bin" built.
193
194xt:
195    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT) -l"$(TARGET)_xt.lst" -o"$(TARGET)_xt.bin"
196    @echo * 8k XT version "$(TARGET)_xt.bin" built.
197
198xt_large:
199    @$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_LARGE) -l"$(TARGET)_xtl.lst" -o"$(TARGET)_xtl.bin"
200    @echo *15k XT version "$(TARGET)_xtl.bin" built.
201
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.
205
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
210strings: src\Strings.asm
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
212    @perl ..\tools\StringsCompress.pl < build\StringsPrecompress.lst > src\StringsCompressed.asm
213    @echo StringsCompressed.asm updated!
214
215clean:
216    @$(RM) $(BUILD_DIR)\*.*
217    @echo Deleted "(*.*)" from "$(BUILD_DIR)/"
218
219checksum: all
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)
226    @perl ..\tools\checksum.pl $(TARGET)_atl.bin $(ROMSIZE_LARGE)
227    @perl ..\tools\checksum.pl $(TARGET)_386.bin $(ROMSIZE)
228
229unused:
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
250
251
Note: See TracBrowser for help on using the repository browser.