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

Last change on this file since 253 was 253, checked in by aitotat@…, 13 years ago

Changes to XTIDE Universal BIOS:

  • Forgot to remove code that stored capacity to BOOTNFO.
File size: 2.6 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; Corrupts registers:
19; AX, BX, CX, DX, DI, SI
20;--------------------------------------------------------------------
21BootInfo_CreateForHardDisk:
22 call BootInfo_ConvertDPTtoBX ; ES:BX now points to new BOOTNFO
23 push bx ; Preserve for return
24
25 mov di, bx ; Starting pointer at beginning of structure
26
27;
28; Store Drive Name
29;
30 push ds ; Preserve RAMVARS
31 push si ; Preserve SI for call to GetTotalSectorCount...
32
33 push es ; ES copied to DS
34 pop ds
35
36 add si, BYTE ATA1.strModel ; DS:SI now points drive name
37 lea di, [bx+BOOTNFO.szDrvName] ; ES:DI now points to name destination
38 mov cx, LEN_BOOTNFO_DRV / 2 ; Max number of WORDs allowed
39.CopyNextWord:
40 lodsw
41 xchg al, ah ; Change endianness
42 stosw
43 loop .CopyNextWord
44 xor ax, ax ; Zero AX and clear CF
45 stosw ; Terminate with NULL
46
47 pop si
48 pop ds
49 pop bx
50
51 ret
52
53
54;--------------------------------------------------------------------
55; BootInfo_GetTotalSectorCount
56; Parameters:
57; DS:DI: DPT Pointer
58; Returns:
59; BX:DX:AX: 48-bit sector count
60; Corrupts registers:
61; CX
62;--------------------------------------------------------------------
63ALIGN JUMP_ALIGN
64BootInfo_GetTotalSectorCount:
65 test BYTE [di+DPT.bFlagsLow], FLG_DRVNHEAD_LBA
66 jnz SHORT .ReturnFullCapacity
67 jmp AH15h_GetSectorCountToBXDXAX
68.ReturnFullCapacity:
69 jmp AccessDPT_GetLbaSectorCountToBXDXAX
70
71
72;--------------------------------------------------------------------
73; Returns offset to BOOTNFO based on DPT pointer.
74;
75; BootInfo_ConvertDPTtoBX
76; Parameters:
77; DS:DI: DPT Pointer
78; Returns:
79; BX: Offset to BOOTNFO struct
80; Corrupts registers:
81; AX
82;--------------------------------------------------------------------
83ALIGN JUMP_ALIGN
84BootInfo_ConvertDPTtoBX:
85 mov ax, di
86 sub ax, RAMVARS_size ; subtract off base of DPTs
87 mov bl, DPT_BOOTNFO_SIZE_MULTIPLIER ; BOOTNFO's are a whole number multiple of DPT size
88 mul bl
89 add ax, BOOTVARS.rgBootNfo ; add base of BOOTNFO
90 xchg ax, bx
91 ret
Note: See TracBrowser for help on using the repository browser.