source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/BootMenuInfo.asm@ 394

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

Changes to XTIDE Universal BIOS:

  • Greatly improved Hotkey Bar is displayed during drive detection.
  • 8k builds no longer include boot menu.
  • Boot menu is displayed only if F2 is pressed during drive detection.
  • Some changes to directory structure.


File size: 3.2 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;
6; XTIDE Universal BIOS and Associated Tools
7; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 by XTIDE Universal BIOS Team.
8;
9; This program is free software; you can redistribute it and/or modify
10; it under the terms of the GNU General Public License as published by
11; the Free Software Foundation; either version 2 of the License, or
12; (at your option) any later version.
13;
14; This program is distributed in the hope that it will be useful,
15; but WITHOUT ANY WARRANTY; without even the implied warranty of
16; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17; GNU General Public License for more details.
18; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19;
20
21; Section containing code
22SECTION .text
23
24;--------------------------------------------------------------------
25; Creates new BOOTMENUINFO struct for detected hard disk.
26;
27; BootMenuInfo_CreateForHardDisk
28; Parameters:
29; DL: Drive number
30; DS:DI: Ptr to Disk Parameter Table
31; ES:SI: Ptr to 512-byte ATA information read from the drive
32; Returns:
33; ES:BX: Ptr to BOOTMENUINFO (if successful)
34; Corrupts registers:
35; AX, BX, CX, DX, DI
36;--------------------------------------------------------------------
37BootMenuInfo_CreateForHardDisk:
38 call BootMenuInfo_ConvertDPTtoBX ; ES:BX now points to new BOOTMENUINFO
39
40 ; Store Drive Name
41 push ds ; Preserve RAMVARS
42 push si
43
44 push es ; ES copied to DS
45 pop ds
46
47 add si, BYTE ATA1.strModel ; DS:SI now points drive name
48 lea di, [bx+BOOTMENUINFO.szDrvName] ; ES:DI now points to name destination
49 mov cx, MAX_HARD_DISK_NAME_LENGTH / 2 ; Max number of WORDs allowed
50.CopyNextWord:
51 lodsw
52 xchg al, ah ; Change endianness
53 stosw
54 loop .CopyNextWord
55 xor ax, ax ; Zero AX and clear CF
56 stosw ; Terminate with NULL
57
58 pop si
59 pop ds
60
61 ret
62
63
64;--------------------------------------------------------------------
65; BootMenuInfo_GetTotalSectorCount
66; Parameters:
67; DS:DI: DPT Pointer
68; Returns:
69; BX:DX:AX: 48-bit sector count
70; Corrupts registers:
71; CX
72;--------------------------------------------------------------------
73%ifdef MODULE_BOOT_MENU
74BootMenuInfo_GetTotalSectorCount:
75 test BYTE [di+DPT.bFlagsLow], FLG_DRVNHEAD_LBA
76 jnz SHORT .ReturnFullCapacity
77 jmp AH15h_GetSectorCountToBXDXAX
78.ReturnFullCapacity:
79 jmp AccessDPT_GetLbaSectorCountToBXDXAX
80%endif
81
82
83;--------------------------------------------------------------------
84; Returns offset to BOOTMENUINFO based on DPT pointer.
85;
86; BootMenuInfo_ConvertDPTtoBX
87; Parameters:
88; DS:DI: DPT Pointer
89; Returns:
90; BX: Offset to BOOTMENUINFO struct
91; Corrupts registers:
92; AX
93;--------------------------------------------------------------------
94BootMenuInfo_ConvertDPTtoBX:
95 mov ax, di
96 sub ax, BYTE RAMVARS_size ; subtract off base of DPTs
97 mov bl, DPT_BOOTMENUINFO_SIZE_MULTIPLIER ; BOOTMENUINFO's are a whole number multiple of DPT size
98 mul bl
99 add ax, BOOTVARS.rgBootNfo ; add base of BOOTMENUINFO
100 xchg ax, bx
101 ret
Note: See TracBrowser for help on using the repository browser.