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

Last change on this file since 100 was 100, checked in by aitotat, 13 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.