source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuInfo.asm @ 376

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

WIDE checkin... Added copyright and license information to sorce files, as per the GPL instructions for usage.

File size: 3.1 KB
RevLine 
[88]1; Project name  :   XTIDE Universal BIOS
[3]2; Description   :   Functions for generating and accessing drive
3;                   information to be displayed on boot menu.
4
[376]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               
[3]21; Section containing code
22SECTION .text
23
24;--------------------------------------------------------------------
[254]25; Creates new BOOTMENUINFO struct for detected hard disk.
[3]26;
[254]27; BootMenuInfo_CreateForHardDisk
[3]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:
[254]33;       ES:BX:  Ptr to BOOTMENUINFO (if successful)
[3]34;   Corrupts registers:
[364]35;       AX, BX, CX, DX, DI
[3]36;--------------------------------------------------------------------
[254]37BootMenuInfo_CreateForHardDisk:
38    call    BootMenuInfo_ConvertDPTtoBX         ; ES:BX now points to new BOOTMENUINFO
[3]39
[364]40    ; Store Drive Name
41    push    ds                                  ; Preserve RAMVARS
42    push    si
[3]43
[364]44    push    es                                  ; ES copied to DS
45    pop     ds
[241]46
[254]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
[121]50.CopyNextWord:
51    lodsw
[254]52    xchg    al, ah                              ; Change endianness
[121]53    stosw
54    loop    .CopyNextWord
[254]55    xor     ax, ax                              ; Zero AX and clear CF
56    stosw                                       ; Terminate with NULL
[3]57
58    pop     si
59    pop     ds
[364]60       
[3]61    ret
62
[252]63
[3]64;--------------------------------------------------------------------
[254]65; BootMenuInfo_GetTotalSectorCount
[3]66;   Parameters:
[241]67;       DS:DI:      DPT Pointer
[3]68;   Returns:
69;       BX:DX:AX:   48-bit sector count
70;   Corrupts registers:
[252]71;       CX
[128]72;--------------------------------------------------------------------
[254]73BootMenuInfo_GetTotalSectorCount:
[252]74    test    BYTE [di+DPT.bFlagsLow], FLG_DRVNHEAD_LBA
75    jnz     SHORT .ReturnFullCapacity
76    jmp     AH15h_GetSectorCountToBXDXAX
77.ReturnFullCapacity:
78    jmp     AccessDPT_GetLbaSectorCountToBXDXAX
[100]79
80
81;--------------------------------------------------------------------
[254]82; Returns offset to BOOTMENUINFO based on DPT pointer.
[100]83;
[254]84; BootMenuInfo_ConvertDPTtoBX
[100]85;   Parameters:
[241]86;       DS:DI:  DPT Pointer
[100]87;   Returns:
[254]88;       BX:     Offset to BOOTMENUINFO struct
[100]89;   Corrupts registers:
[365]90;       AX
[100]91;--------------------------------------------------------------------
[254]92BootMenuInfo_ConvertDPTtoBX:
[241]93    mov     ax, di
[363]94    sub     ax, BYTE RAMVARS_size                   ; subtract off base of DPTs
[254]95    mov     bl, DPT_BOOTMENUINFO_SIZE_MULTIPLIER    ; BOOTMENUINFO's are a whole number multiple of DPT size
[241]96    mul     bl                             
[254]97    add     ax, BOOTVARS.rgBootNfo                  ; add base of BOOTMENUINFO
[241]98    xchg    ax, bx
[364]99    ret 
Note: See TracBrowser for help on using the repository browser.