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

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

Changes to XTIDE Universal BIOS:

  • Cleaned some code concerning recent module changes.
  • Removed drive number translation flag from ROMVARS.
  • BOOTMENUINFO is now DRVDETECTINFO.
  • Makefile now builds tiny binary (XT build with minimal features).
File size: 2.7 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 DRVDETECTINFO struct for detected hard disk.
26;
27; DriveDetectInfo_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 DRVDETECTINFO (if successful)
34;   Corrupts registers:
35;       AX, BX, CX, DX, DI
36;--------------------------------------------------------------------
37DriveDetectInfo_CreateForHardDisk:
38    call    DriveDetectInfo_ConvertDPTtoBX      ; ES:BX now points to new DRVDETECTINFO
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+DRVDETECTINFO.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; Returns offset to DRVDETECTINFO based on DPT pointer.
66;
67; DriveDetectInfo_ConvertDPTtoBX
68;   Parameters:
69;       DS:DI:  DPT Pointer
70;   Returns:
71;       BX:     Offset to DRVDETECTINFO struct
72;   Corrupts registers:
73;       AX
74;--------------------------------------------------------------------
75DriveDetectInfo_ConvertDPTtoBX:
76    mov     ax, di
77    sub     ax, BYTE RAMVARS_size                   ; subtract off base of DPTs
78    mov     bl, DPT_DRVDETECTINFO_SIZE_MULTIPLIER   ; DRVDETECTINFO are a whole number multiple of DPT size
79    mul     bl                             
80    add     ax, BOOTVARS.rgDrvDetectInfo            ; add base of DRVDETECTINFO
81    xchg    ax, bx
82    ret 
Note: See TracBrowser for help on using the repository browser.