source: xtideuniversalbios/trunk/BIOS_Drive_Information_Tool/Src/Main.asm @ 590

Last change on this file since 590 was 590, checked in by krille_n_, 8 years ago

Changes:

  • Updated URLs and copyright info in BIOSDRVS and XTIDECFG.
  • BIOSDRVS should now build under Linux.
  • Minor optimizations to the library.
File size: 5.8 KB
Line 
1; Project name  :   BIOS Drive Information Tool
2; Description   :   BIOS Drive Information Tool reads and displays
3;                   drive information from BIOS.
4
5;
6; XTIDE Universal BIOS and Associated Tools
7; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 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; Include .inc files
22%define INCLUDE_DISPLAY_LIBRARY
23%define INCLUDE_KEYBOARD_LIBRARY
24%include "AssemblyLibrary.inc"  ; Assembly Library. Must be included first!
25%include "Version.inc"          ; From XTIDE Universal BIOS
26%include "ATA_ID.inc"           ; From XTIDE Universal BIOS
27%include "Int13h.inc"           ; From XTIDE Universal BIOS
28%include "EBIOS.inc"            ; From XTIDE Universal BIOS
29%include "IdeRegisters.inc"     ; From XTIDE Universal BIOS
30%include "RomVars.inc"          ; From XTIDE Universal BIOS
31%include "CustomDPT.inc"        ; From XTIDE Universal BIOS
32
33
34; Section containing code
35SECTION .text
36
37; Program first instruction.
38ORG 100h                        ; Code starts at offset 100h (DOS .COM)
39Start:
40    jmp     StartBiosDriveInformationTool
41
42; Include library and other sources
43%include "AssemblyLibrary.asm"
44%include "AtaGeometry.asm"      ; From XTIDE Universal BIOS
45%include "Strings.asm"
46%include "AtaInfo.asm"
47%include "Bios.asm"
48%include "Print.asm"
49
50
51;--------------------------------------------------------------------
52; Program start
53;--------------------------------------------------------------------
54ALIGN JUMP_ALIGN
55StartBiosDriveInformationTool:
56    CALL_DISPLAY_LIBRARY    InitializeDisplayContext
57    call    Print_SetCharacterOutputToSTDOUT
58
59    ; Display program name and version
60    mov     si, g_szProgramName
61    call    Print_NullTerminatedStringFromSI
62    ; Fall to ReadAndDisplayAllHardDrives
63
64
65;--------------------------------------------------------------------
66; ReadAndDisplayAllHardDrives
67;   Parameters:
68;       Nothing
69;   Returns:
70;       Nothing
71;   Corrupts registers:
72;       All, except segments
73;--------------------------------------------------------------------
74ReadAndDisplayAllHardDrives:
75    call    Bios_GetNumberOfHardDrivesToDX
76    jc      SHORT .NoDrivesAvailable
77    mov     cx, dx
78    mov     dl, 80h             ; First hard drive
79    jmp     SHORT .DisplayFirstDrive
80
81.DisplayNextDriveFromDL:
82    mov     si, g_szPressAnyKey
83    call    Print_NullTerminatedStringFromSI
84    call    Keyboard_GetKeystrokeToAXandWaitIfNecessary
85
86.DisplayFirstDrive:
87    ; Display drive number
88    mov     si, g_szHeaderDrive
89    call    Print_DriveNumberFromDLusingFormatStringInSI
90
91    ; Display ATA information read from drive
92    mov     si, g_szAtaInfoHeader
93    call    Print_NullTerminatedStringFromSI
94    call    AtaInfo_DisplayAtaInformationForDriveDL
95
96    ; Display INT 13h AH=08h and AH=15h information
97    mov     si, g_szOldInfoHeader
98    call    Print_NullTerminatedStringFromSI
99    call    DisplayOldInt13hInformationForDriveDL
100
101    ; Display EBIOS information
102    mov     si, g_szNewInfoHeader
103    call    Print_NullTerminatedStringFromSI
104    call    DisplayNewInt13hInformationFromDriveDL
105
106    inc     dx
107    loop    .DisplayNextDriveFromDL
108.NoDrivesAvailable:
109    ret     ; Exit to DOS
110
111
112;--------------------------------------------------------------------
113; DisplayOldInt13hInformationForDriveDL
114;   Parameters:
115;       DL:     Drive Number
116;   Returns:
117;       Nothing
118;   Corrupts registers:
119;       All, except CX and DX
120;--------------------------------------------------------------------
121DisplayOldInt13hInformationForDriveDL:
122    push    cx
123    push    dx
124
125    ; Print L-CHS from AH=08h
126    call    Bios_ReadOldInt13hParametersFromDriveDL
127    call    Print_ErrorMessageFromAHifError
128    jc      SHORT .SkipOldInt13hSinceError
129    call    Print_CHSfromCXDXAX
130
131    ; Print total sector count from AH=15h
132    mov     si, g_szSectors
133    call    Print_NullTerminatedStringFromSI
134    pop     dx
135    push    dx
136    call    Bios_ReadOldInt13hCapacityFromDriveDL
137    call    Print_ErrorMessageFromAHifError
138    jc      SHORT .SkipOldInt13hSinceError
139
140    xchg    ax, dx
141    mov     dx, cx
142    xor     bx, bx
143    call    Print_TotalSectorsFromBXDXAX
144.SkipOldInt13hSinceError:
145    pop     dx
146    pop     cx
147    ret
148
149
150;--------------------------------------------------------------------
151; DisplayNewInt13hInformationFromDriveDL
152;   Parameters:
153;       DL:     Drive Number
154;   Returns:
155;       Nothing
156;   Corrupts registers:
157;       All, except CX and DX
158;--------------------------------------------------------------------
159DisplayNewInt13hInformationFromDriveDL:
160    push    cx
161    push    dx
162
163    ; Display EBIOS version
164    call    Bios_ReadEbiosVersionFromDriveDL
165    call    Print_ErrorMessageFromAHifError
166    jc      SHORT .SkipNewInt13hSinceError
167    call    Print_EbiosVersionFromBXandExtensionsFromCX
168
169    ; Display drive info from AH=48h
170    call    Bios_ReadEbiosInfoFromDriveDLtoDSSI
171    call    Print_ErrorMessageFromAHifError
172    jc      SHORT .SkipNewInt13hSinceError
173
174    ; Display CHS
175    test    WORD [si+EDRIVE_INFO.wFlags], FLG_CHS_INFORMATION_IS_VALID
176    jz      SHORT .SkipEbiosCHS
177    mov     cx, [si+EDRIVE_INFO.dwCylinders]
178    mov     dx, [si+EDRIVE_INFO.dwHeads]
179    mov     ax, [si+EDRIVE_INFO.dwSectorsPerTrack]
180    call    Print_CHSfromCXDXAX
181.SkipEbiosCHS:
182
183    ; Display total sector count
184    push    si
185    mov     si, g_szSectors
186    call    Print_NullTerminatedStringFromSI
187    pop     si
188    mov     ax, [si+EDRIVE_INFO.qwTotalSectors]
189    mov     dx, [si+EDRIVE_INFO.qwTotalSectors+2]
190    mov     bx, [si+EDRIVE_INFO.qwTotalSectors+4]
191    call    Print_TotalSectorsFromBXDXAX
192
193    ; Display sector size
194    mov     ax, [si+EDRIVE_INFO.wSectorSize]
195    mov     si, g_szNewSectorSize
196    call    Print_FormatStringFromSIwithParameterInAX
197
198.SkipNewInt13hSinceError:
199    pop     dx
200    pop     cx
201    ret
Note: See TracBrowser for help on using the repository browser.