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

Last change on this file since 183 was 183, checked in by gregli@…, 12 years ago

Space optimization, added option to inline offsets for MENUEVENT structure, for situations (such as the XTIDE bios) where only one menu is needed. Ifdef'd change (set in main.asm) so either method can be used.

File size: 10.3 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  1F0h            ; Controller Command Block base port
85    at  ROMVARS.ideVars0+IDEVARS.wPortCtrl,     dw  3F0h            ; 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  300h            ; Controller Command Block base port
99    at  ROMVARS.ideVars2+IDEVARS.wPortCtrl,     dw  308h            ; 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  300h            ; Controller Command Block base port
130    at  ROMVARS.ideVars0+IDEVARS.wPortCtrl,     dw  308h            ; 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    %include "Strings.asm"          ; For BIOS message strings
156
157    ; Initialization and drive detection
158    %include "Initialize.asm"       ; For BIOS initialization
159    %include "Interrupts.asm"       ; For Interrupt initialization
160    %include "RamVars.asm"          ; For RAMVARS initialization and access
161    %include "CreateDPT.asm"        ; For creating DPTs
162    %include "FindDPT.asm"          ; For finding DPTs
163    %include "AccessDPT.asm"        ; For accessing DPTs
164    %include "BootInfo.asm"         ; For creating BOOTNFO structs
165    %include "AtaID.asm"            ; For ATA Identify Device information
166    %include "DetectDrives.asm"     ; For detecting IDE drives
167    %include "DetectPrint.asm"      ; For printing drive detection strings
168
169    ; Boot menu
170    %include "BootMenu.asm"         ; For Boot Menu operations
171    %include "BootMenuEvent.asm"    ; For menu library event handling
172    %include "BootMenuPrint.asm"    ; For printing Boot Menu strings (needs to come after BootMenuEvent.asm)
173    %include "FloppyDrive.asm"      ; Floppy Drive related functions
174    %include "BootSector.asm"       ; For loading boot sector
175    %include "BootPrint.asm"        ; For printing boot information
176    %include "BootMenuPrintCfg.asm" ; For printing hard disk configuration
177
178    ; Boot loader
179%ifndef USE_AT
180    %include "Int19hLate.asm"       ; For late initialization
181%endif
182    %include "Int19hMenu.asm"       ; For Int 19h, Boot Loader for Boot Menu
183
184    ; For all device types
185    %include "Device.asm"
186    %include "Idepack.asm"
187    %include "Timer.asm"            ; For timeout and delay
188
189    ; IDE Device support
190    %include "IdeCommand.asm"
191    %include "IdeTransfer.asm"      ; Must be included after IdeCommand.asm
192    %include "IdeDPT.asm"
193    %include "IdeIO.asm"
194    %include "IdeIrq.asm"
195    %include "IdeWait.asm"
196    %include "IdeError.asm"         ; Must be included after IdeWait.asm
197
198%ifdef MODULE_SERIAL                ; Serial Port Device support
199    %include "SerialCommand.asm"
200    %include "SerialDPT.asm"
201%endif
202
203    ; INT 13h Hard Disk BIOS functions
204    %include "DriveXlate.asm"       ; For swapping drive numbers
205    %include "Address.asm"          ; For sector address translations
206    %include "CommandLookup.asm"    ; For getting correct transfer command
207    %include "Int13h.asm"           ; For Int 13h, Disk functions
208    %include "AH0h_HReset.asm"      ; Required by Int13h_Jump.asm
209    %include "AH1h_HStatus.asm"     ; Required by Int13h_Jump.asm
210    %include "AH2h_HRead.asm"       ; Required by Int13h_Jump.asm
211    %include "AH3h_HWrite.asm"      ; Required by Int13h_Jump.asm
212    %include "AH4h_HVerify.asm"     ; Required by Int13h_Jump.asm
213    %include "AH8h_HParams.asm"     ; Required by Int13h_Jump.asm
214    %include "AH9h_HInit.asm"       ; Required by Int13h_Jump.asm
215    %include "AHCh_HSeek.asm"       ; Required by Int13h_Jump.asm
216    %include "AHDh_HReset.asm"      ; Required by Int13h_Jump.asm
217    %include "AH10h_HReady.asm"     ; Required by Int13h_Jump.asm
218    %include "AH11h_HRecal.asm"     ; Required by Int13h_Jump.asm
219    %include "AH15h_HSize.asm"      ; Required by Int13h_Jump.asm
220    %include "AH23h_HFeatures.asm"  ; Required by Int13h_Jump.asm
221    %include "AH24h_HSetBlocks.asm" ; Required by Int13h_Jump.asm
222    %include "AH25h_HDrvID.asm"     ; Required by Int13h_Jump.asm
223%ifdef MODULE_EBIOS
224    %include "AH41h_CheckIfExtensionsPresent.asm"
225    %include "AH42h_ExtendedReadSectors.asm"
226    %include "AH43h_ExtendedWriteSectors.asm"
227    %include "AH44h_ExtendedVerifySectors.asm"
228    %include "AH47h_ExtendedSeek.asm"
229    %include "AH48h_GetExtendedDriveParameters.asm"
230%endif
231
232
233; Fill with zeroes until size is what we want
234;times (CNT_ROM_BLOCKS*512)-($-$$) db 0
Note: See TracBrowser for help on using the repository browser.