source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Boot/BootInfo.asm@ 109

Last change on this file since 109 was 100, checked in by Tomi Tilli, 14 years ago

Changes to XTIDE Universal BIOS:

  • BootInfo.asm had initialization functions that were not yet inlined.
File size: 3.5 KB
Line 
1; Project name : XTIDE Universal BIOS
2; Description : Functions for generating and accessing drive
3; information to be displayed on boot menu.
4
5; Section containing code
6SECTION .text
7
8;--------------------------------------------------------------------
9; Creates new BOOTNFO struct for detected hard disk.
10;
11; BootInfo_CreateForHardDisk
12; Parameters:
13; DL: Drive number
14; DS:DI: Ptr to Disk Parameter Table
15; ES:SI: Ptr to 512-byte ATA information read from the drive
16; Returns:
17; ES:BX: Ptr to BOOTNFO (if successful)
18; CF: Cleared if BOOTNFO created succesfully
19; Set if any error
20; Corrupts registers:
21; AX, BX, CX, DX
22;--------------------------------------------------------------------
23BootInfo_CreateForHardDisk:
24 call BootInfo_GetOffsetToBX ; ES:BX now points to new BOOTNFO
25 ; Fall to .StoreSectorCount
26
27;--------------------------------------------------------------------
28; .StoreSectorCount
29; Parameters:
30; ES:BX: Ptr to BOOTNFO
31; ES:SI: Ptr to 512-byte ATA information read from the drive
32; DS:DI: Ptr to Disk Parameter Table
33; Returns:
34; Nothing
35; Corrupts registers:
36; AX, CX, DX
37;--------------------------------------------------------------------
38.StoreSectorCount:
39 push bx
40 call AtaID_GetTotalSectorCount ; Get to BX:DX:AX
41 mov cx, bx ; Now in CX:DX:AX
42 pop bx
43 mov [es:bx+BOOTNFO.twSectCnt], ax
44 mov [es:bx+BOOTNFO.twSectCnt+2], dx
45 mov [es:bx+BOOTNFO.twSectCnt+4], cx
46 ; Fall to .StoreDriveName
47
48;--------------------------------------------------------------------
49; .StoreDriveName
50; Parameters:
51; ES:BX: Ptr to BOOTNFO
52; ES:SI: Ptr to 512-byte ATA information read from the drive
53; DS:DI: Ptr to Disk Parameter Table
54; Returns:
55; CF: Cleared if variables stored succesfully
56; Set if any error
57; Corrupts registers:
58; AX, CX
59;--------------------------------------------------------------------
60.StoreDriveName:
61 push ds
62 push si
63 push di
64
65 push es
66 pop ds
67 add si, BYTE ATA1.strModel ; DS:SI now points drive name
68 lea di, [bx+BOOTNFO.szDrvName] ; ES:DI now points to name destination
69 mov cx, LEN_BOOTNFO_DRV
70 call Memory_CopyCXbytesFromDSSItoESDI
71 xor ax, ax
72 stosb ; Terminate with NULL
73
74 pop di
75 pop si
76 pop ds
77 clc
78 ret
79
80
81;--------------------------------------------------------------------
82; Finds BOOTNFO for drive and returns total sector count.
83;
84; BootInfo_GetTotalSectorCount
85; Parameters:
86; DL: Drive number
87; DS: RAMVARS segment
88; Returns:
89; BX:DX:AX: 48-bit sector count
90; Corrupts registers:
91; Nothing
92;--------------------------------------------------------------------
93ALIGN JUMP_ALIGN
94BootInfo_GetTotalSectorCount:
95 push ds
96 call BootInfo_GetOffsetToBX
97 LOAD_BDA_SEGMENT_TO ds, ax
98 mov ax, [bx+BOOTNFO.twSectCnt]
99 mov dx, [bx+BOOTNFO.twSectCnt+2]
100 mov bx, [bx+BOOTNFO.twSectCnt+4]
101 pop ds
102 ret
103
104
105;--------------------------------------------------------------------
106; Returns offset to BOOTNFO for wanted drive.
107;
108; BootInfo_GetOffsetToBX
109; Parameters:
110; DL: Drive number
111; DS: RAMVARS segment
112; Returns:
113; BX: Offset to BOOTNFO struct
114; Corrupts registers:
115; AX
116;--------------------------------------------------------------------
117ALIGN JUMP_ALIGN
118BootInfo_GetOffsetToBX:
119 mov bl, dl ; Copy drive number to BL
120 mov al, BOOTNFO_size ; Size of struct
121 sub bl, [RAMVARS.bFirstDrv] ; Drive number to index
122 mul bl ; AX = Offset inside BOOTNFO array
123 add ax, BOOTVARS.rgBootNfo ; Add offset to BOOTNFO array
124 xchg bx, ax ; Copy result to BX
125 ret
Note: See TracBrowser for help on using the repository browser.