source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Main.asm@ 213

Last change on this file since 213 was 199, checked in by gregli@…, 13 years ago

Adding proper serial port support to the Configurator, which required some minor changes elsewhere. Also added an option, off by default, to automatically scan for serial drives at the end of normal drive detection (no ALT key required, although that is still available if the option is off).

File size: 10.6 KB
Line 
1; Project name : XTIDE Universal BIOS
2; Authors : Tomi Tilli
3; : aitotat@gmail.com
4; :
5; : Greg Lindhorst
6; : gregli@hotmail.com
7; ;
8; : Krister Nordvall
9; : krille_n_@hotmail.com
10; :
11; Description : Main file for BIOS. This is the only file that needs
12; to be compiled since other files are included to this
13; file (so no linker needed, Nasm does it all).
14
15ORG 000h ; Code start offset 0000h
16
17%define MENUEVENT_INLINE_OFFSETS ; Only one menu required, save space and inline offsets
18
19 ; Included .inc files
20 %include "AssemblyLibrary.inc" ; Assembly Library. Must be included first!
21 %include "IntController.inc" ; For Interrupt Controller equates
22 %include "ATA_ID.inc" ; For ATA Drive Information structs
23 %include "IdeRegisters.inc" ; For ATA Registers, flags and commands
24 %include "Int13h.inc" ; Equates for INT 13h functions
25%ifdef MODULE_EBIOS
26 %include "EBIOS.inc" ; Equates for EBIOS functions
27%endif
28 %include "CustomDPT.inc" ; For Disk Parameter Table
29 %include "RomVars.inc" ; For ROMVARS and IDEVARS structs
30 %include "RamVars.inc" ; For RAMVARS struct
31 %include "BootVars.inc" ; For BOOTVARS and BOOTNFO structs
32 %include "BootMenu.inc" ; For Boot Menu
33 %include "IDE_8bit.inc" ; For IDE 8-bit data port macros
34 %include "DeviceIDE.inc" ; For IDE device equates
35
36
37; Section containing code
38SECTION .text
39
40; ROM variables (must start at offset 0)
41CNT_ROM_BLOCKS EQU 16 ; 16 * 512B = 8kB BIOS
42istruc ROMVARS
43 at ROMVARS.wRomSign, dw 0AA55h ; PC ROM signature
44 at ROMVARS.bRomSize, db CNT_ROM_BLOCKS ; ROM size in 512B blocks
45 at ROMVARS.rgbJump, jmp Initialize_FromMainBiosRomSearch
46 at ROMVARS.rgbSign, db "XTIDE120" ; Signature for flash program
47 at ROMVARS.szTitle
48 db "-=XTIDE Universal BIOS"
49%ifdef USE_AT
50 db " (AT)=-",NULL
51%elifdef USE_186
52 db " (XT+)=-",NULL
53%else
54 db " (XT)=-",NULL
55%endif
56 at ROMVARS.szVersion, db "v1.2.0_wip (",__DATE__,")",NULL
57
58;;; For OR'ing into wFlags below
59;;;
60%ifdef MODULE_SERIAL
61 MAIN_FLG_MODULE_SERIAL equ FLG_ROMVARS_MODULE_SERIAL
62%else
63 MAIN_FLG_MODULE_SERIAL equ 0
64%endif
65
66%ifdef MODULE_EBIOS
67 MAIN_FLG_MODULE_EBIOS equ FLG_ROMVARS_MODULE_EBIOS
68%else
69 MAIN_FLG_MODULE_EBIOS equ 0
70%endif
71
72;---------------------------;
73; AT Build default settings ;
74;---------------------------;
75%ifdef USE_AT
76 at ROMVARS.wFlags, dw FLG_ROMVARS_FULLMODE | FLG_ROMVARS_DRVXLAT | MAIN_FLG_MODULE_SERIAL | MAIN_FLG_MODULE_EBIOS
77 at ROMVARS.wDisplayMode, dw DEFAULT_TEXT_MODE
78 at ROMVARS.wBootTimeout, dw 30 * TICKS_PER_SECOND ; Boot Menu selection timeout
79 at ROMVARS.bIdeCnt, db 4 ; Number of supported controllers
80 at ROMVARS.bBootDrv, db 80h ; Boot Menu default drive
81 at ROMVARS.bMinFddCnt, db 0 ; Do not force minimum number of floppy drives
82 at ROMVARS.bStealSize, db 1 ; Steal 1kB from base memory
83
84 at ROMVARS.ideVars0+IDEVARS.wPort, dw DEVICE_ATA_DEFAULT_PORT ; Controller Command Block base port
85 at ROMVARS.ideVars0+IDEVARS.wPortCtrl, dw DEVICE_ATA_DEFAULT_PORTCTRL ; Controller Control Block base port
86 at ROMVARS.ideVars0+IDEVARS.bDevice, db DEVICE_16BIT_ATA
87 at ROMVARS.ideVars0+IDEVARS.bIRQ, db 0
88 at ROMVARS.ideVars0+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
89 at ROMVARS.ideVars0+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
90
91 at ROMVARS.ideVars1+IDEVARS.wPort, dw 170h ; Controller Command Block base port
92 at ROMVARS.ideVars1+IDEVARS.wPortCtrl, dw 370h ; Controller Control Block base port
93 at ROMVARS.ideVars1+IDEVARS.bDevice, db DEVICE_16BIT_ATA
94 at ROMVARS.ideVars1+IDEVARS.bIRQ, db 0
95 at ROMVARS.ideVars1+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
96 at ROMVARS.ideVars1+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
97
98 at ROMVARS.ideVars2+IDEVARS.wPort, dw DEVICE_XTIDE_DEFAULT_PORT ; Controller Command Block base port
99 at ROMVARS.ideVars2+IDEVARS.wPortCtrl, dw DEVICE_XTIDE_DEFAULT_PORTCTRL ; Controller Control Block base port
100 at ROMVARS.ideVars2+IDEVARS.bDevice, db DEVICE_8BIT_DUAL_PORT_XTIDE
101 at ROMVARS.ideVars2+IDEVARS.bIRQ, db 0
102 at ROMVARS.ideVars2+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
103 at ROMVARS.ideVars2+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
104
105 at ROMVARS.ideVars3+IDEVARS.wPort, dw 168h ; Controller Command Block base port
106 at ROMVARS.ideVars3+IDEVARS.wPortCtrl, dw 368h ; Controller Control Block base port
107 at ROMVARS.ideVars3+IDEVARS.bDevice, db DEVICE_16BIT_ATA
108 at ROMVARS.ideVars3+IDEVARS.bIRQ, db 0
109 at ROMVARS.ideVars3+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
110 at ROMVARS.ideVars3+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
111
112%ifdef MODULE_SERIAL
113 at ROMVARS.ideVarsSerialAuto+IDEVARS.bDevice, db DEVICE_SERIAL_PORT
114 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
115 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
116%endif
117%else
118;-----------------------------------;
119; XT and XT+ Build default settings ;
120;-----------------------------------;
121 at ROMVARS.wFlags, dw FLG_ROMVARS_DRVXLAT | MAIN_FLG_MODULE_SERIAL | MAIN_FLG_MODULE_EBIOS
122 at ROMVARS.wDisplayMode, dw DEFAULT_TEXT_MODE
123 at ROMVARS.wBootTimeout, dw 30 * TICKS_PER_SECOND ; Boot Menu selection timeout
124 at ROMVARS.bIdeCnt, db 1 ; Number of supported controllers
125 at ROMVARS.bBootDrv, db 80h ; Boot Menu default drive
126 at ROMVARS.bMinFddCnt, db 1 ; Assume at least 1 floppy drive present if autodetect fails
127 at ROMVARS.bStealSize, db 1 ; Steal 1kB from base memory in full mode
128
129 at ROMVARS.ideVars0+IDEVARS.wPort, dw DEVICE_XTIDE_DEFAULT_PORT ; Controller Command Block base port
130 at ROMVARS.ideVars0+IDEVARS.wPortCtrl, dw DEVICE_XTIDE_DEFAULT_PORTCTRL ; Controller Control Block base port
131 at ROMVARS.ideVars0+IDEVARS.bDevice, db DEVICE_8BIT_DUAL_PORT_XTIDE
132 at ROMVARS.ideVars0+IDEVARS.bIRQ, db 0 ; IRQ
133 at ROMVARS.ideVars0+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
134 at ROMVARS.ideVars0+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
135
136 at ROMVARS.ideVars1+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
137 at ROMVARS.ideVars1+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
138
139 at ROMVARS.ideVars2+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
140 at ROMVARS.ideVars2+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
141
142 at ROMVARS.ideVars3+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
143 at ROMVARS.ideVars3+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
144
145%ifdef MODULE_SERIAL
146 at ROMVARS.ideVarsSerialAuto+IDEVARS.bDevice, db DEVICE_SERIAL_PORT
147 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
148 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE
149%endif
150%endif
151iend
152
153 ; Libraries and data
154 %include "AssemblyLibrary.asm"
155%ifdef MODULE_STRINGS_COMPRESSED
156 %include "StringsCompressed.asm"
157%else
158 %include "Strings.asm" ; For BIOS message strings
159%endif
160
161 ; Initialization and drive detection
162 %include "Initialize.asm" ; For BIOS initialization
163 %include "Interrupts.asm" ; For Interrupt initialization
164 %include "RamVars.asm" ; For RAMVARS initialization and access
165 %include "CreateDPT.asm" ; For creating DPTs
166 %include "FindDPT.asm" ; For finding DPTs
167 %include "AccessDPT.asm" ; For accessing DPTs
168 %include "BootInfo.asm" ; For creating BOOTNFO structs
169 %include "AtaID.asm" ; For ATA Identify Device information
170 %include "DetectDrives.asm" ; For detecting IDE drives
171 %include "DetectPrint.asm" ; For printing drive detection strings
172
173 ; Boot menu
174 %include "BootMenu.asm" ; For Boot Menu operations
175 %include "BootMenuEvent.asm" ; For menu library event handling
176 ; NOTE: BootMenuPrint needs to come immediately after BootMenuEvent
177 %include "BootMenuPrint.asm" ; For printing Boot Menu strings
178 %include "BootPrint.asm" ; For printing boot information
179 %include "BootMenuPrintCfg.asm" ; For printing hard disk configuration
180 %include "FloppyDrive.asm" ; Floppy Drive related functions
181 %include "BootSector.asm" ; For loading boot sector
182
183 ; Boot loader
184%ifndef USE_AT
185 %include "Int19hLate.asm" ; For late initialization
186%endif
187 %include "Int19hMenu.asm" ; For Int 19h, Boot Loader for Boot Menu
188
189 ; For all device types
190 %include "Idepack.asm"
191 %include "Device.asm"
192 %include "Timer.asm" ; For timeout and delay
193
194 ; IDE Device support
195 %include "IdeCommand.asm"
196 %include "IdeTransfer.asm" ; Must be included after IdeCommand.asm
197 %include "IdeWait.asm"
198 %include "IdeError.asm" ; Must be included after IdeWait.asm
199 %include "IdeDPT.asm"
200 %include "IdeIO.asm"
201 %include "IdeIrq.asm"
202
203%ifdef MODULE_SERIAL ; Serial Port Device support
204 %include "SerialCommand.asm"
205 %include "SerialDPT.asm"
206%endif
207
208 ; INT 13h Hard Disk BIOS functions
209 %include "DriveXlate.asm" ; For swapping drive numbers
210 %include "Address.asm" ; For sector address translations
211 %include "CommandLookup.asm" ; For getting correct transfer command
212 %include "Int13h.asm" ; For Int 13h, Disk functions
213 %include "AH0h_HReset.asm" ; Required by Int13h_Jump.asm
214 %include "AH1h_HStatus.asm" ; Required by Int13h_Jump.asm
215 %include "AH2h_HRead.asm" ; Required by Int13h_Jump.asm
216 %include "AH3h_HWrite.asm" ; Required by Int13h_Jump.asm
217 %include "AH4h_HVerify.asm" ; Required by Int13h_Jump.asm
218 %include "AH8h_HParams.asm" ; Required by Int13h_Jump.asm
219 %include "AH9h_HInit.asm" ; Required by Int13h_Jump.asm
220 %include "AHCh_HSeek.asm" ; Required by Int13h_Jump.asm
221 %include "AHDh_HReset.asm" ; Required by Int13h_Jump.asm
222 %include "AH10h_HReady.asm" ; Required by Int13h_Jump.asm
223 %include "AH11h_HRecal.asm" ; Required by Int13h_Jump.asm
224 %include "AH15h_HSize.asm" ; Required by Int13h_Jump.asm
225 %include "AH23h_HFeatures.asm" ; Required by Int13h_Jump.asm
226 %include "AH24h_HSetBlocks.asm" ; Required by Int13h_Jump.asm
227 %include "AH25h_HDrvID.asm" ; Required by Int13h_Jump.asm
228%ifdef MODULE_EBIOS
229 %include "AH41h_CheckIfExtensionsPresent.asm"
230 %include "AH42h_ExtendedReadSectors.asm"
231 %include "AH43h_ExtendedWriteSectors.asm"
232 %include "AH44h_ExtendedVerifySectors.asm"
233 %include "AH47h_ExtendedSeek.asm"
234 %include "AH48h_GetExtendedDriveParameters.asm"
235%endif
236
237
238; Fill with zeroes until size is what we want
239;times (CNT_ROM_BLOCKS*512)-($-$$) db 0
Note: See TracBrowser for help on using the repository browser.