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

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

Moved the bulk of the serial code to the assembly library, for inclusion in other utilities. Fixed a bug in int13h.asm when floppy support was not enabled that was preventing foreign drives from working properly.

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