source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/DrvDetectInfo.asm@ 514

Last change on this file since 514 was 399, checked in by krille_n_@…, 13 years ago

Changes:

  • Added Power Management (Standby Timer) support to the BIOS and made it part of an optional module (MODULE_FEATURE_SETS). The total amount of ROM space used by this feature is 37 bytes. UNTESTED
  • Size optimizations (mostly inlining of procedures) and fixed a few bugs in AH9h_HInit.asm:
    1. DPT_ATA.bInitError would be cleared only if MODULE_SERIAL was not defined.
    2. The FLG_INITERROR_FAILED_TO_SET_BLOCK_MODE flag could never be set.
    3. InitializeBlockMode could potentially loop forever if there was an error.
  • Removed some odd looking code in .PushResetStatus in BootMenuPrintCfg.asm
  • Made some changes to XTIDECFG so it can be built.
File size: 2.7 KB
RevLine 
[392]1; Project name : XTIDE Universal BIOS
2; Description : Functions for generating and accessing drive
3; information to be displayed on boot menu.
4
5;
[399]6; XTIDE Universal BIOS and Associated Tools
[392]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.
[399]13;
[392]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.
[399]18; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
[392]19;
[399]20
[392]21; Section containing code
22SECTION .text
23
24;--------------------------------------------------------------------
[397]25; Creates new DRVDETECTINFO struct for detected hard disk.
[392]26;
[397]27; DriveDetectInfo_CreateForHardDisk
[392]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:
[397]33; ES:BX: Ptr to DRVDETECTINFO (if successful)
[392]34; Corrupts registers:
35; AX, BX, CX, DX, DI
36;--------------------------------------------------------------------
[397]37DriveDetectInfo_CreateForHardDisk:
38 call DriveDetectInfo_ConvertDPTtoBX ; ES:BX now points to new DRVDETECTINFO
[392]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
[399]47 add si, BYTE ATA1.strModel ; DS:SI now points drive name (Clears CF)
48 lea di, [bx+DRVDETECTINFO.szDrvName] ; ES:DI now points to name destination
[392]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
[399]55 xchg cx, ax ; Zero AX (CF already cleared from the ADD above)
[392]56 stosw ; Terminate with NULL
57
58 pop si
59 pop ds
[399]60
[392]61 ret
62
63
64;--------------------------------------------------------------------
[397]65; Returns offset to DRVDETECTINFO based on DPT pointer.
[392]66;
[397]67; DriveDetectInfo_ConvertDPTtoBX
[392]68; Parameters:
69; DS:DI: DPT Pointer
70; Returns:
[397]71; BX: Offset to DRVDETECTINFO struct
[392]72; Corrupts registers:
73; AX
74;--------------------------------------------------------------------
[397]75DriveDetectInfo_ConvertDPTtoBX:
[399]76 lea ax, [di-RAMVARS_size] ; subtract off base of DPTs
[397]77 mov bl, DPT_DRVDETECTINFO_SIZE_MULTIPLIER ; DRVDETECTINFO are a whole number multiple of DPT size
[399]78 mul bl
[397]79 add ax, BOOTVARS.rgDrvDetectInfo ; add base of DRVDETECTINFO
[399]80 xchg bx, ax
81 ret
Note: See TracBrowser for help on using the repository browser.