source: xtideuniversalbios/trunk/BIOS_Drive_Information_Tool/Src/Print.asm@ 425

Last change on this file since 425 was 424, checked in by Tomi Tilli, 12 years ago

Changes to BIOS Drive Information Tool:

  • Up to date with recent CHS translation changes.
  • Block mode and PIO capabilities are now displayed.
File size: 7.6 KB
RevLine 
[327]1; Project name : BIOS Drive Information Tool
2; Description : Functions to print information read from BIOS.
3
[376]4;
5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 by XTIDE Universal BIOS Team.
7;
8; This program is free software; you can redistribute it and/or modify
9; it under the terms of the GNU General Public License as published by
10; the Free Software Foundation; either version 2 of the License, or
11; (at your option) any later version.
12;
13; This program is distributed in the hope that it will be useful,
14; but WITHOUT ANY WARRANTY; without even the implied warranty of
15; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16; GNU General Public License for more details.
17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18;
[327]19
20; Section containing code
21SECTION .text
22
23;--------------------------------------------------------------------
[359]24; Print_SetCharacterOutputToSTDOUT
25; Parameters:
26; Nothing
27; Returns:
28; Nothing
29; Corrupts registers:
30; AX, BX, DI
31;--------------------------------------------------------------------
32Print_SetCharacterOutputToSTDOUT:
33 mov bl, ATTRIBUTES_NOT_USED
34 mov ax, DosCharOut
35 CALL_DISPLAY_LIBRARY SetCharOutputFunctionFromAXwithAttribFlagInBL
36 ret
37
38;--------------------------------------------------------------------
[327]39; Use DOS standard output so strings can be redirected to a file.
40;
[359]41; DosCharOut
[327]42; Parameters:
43; AL: Character to output
44; DS: BDA segment (zero)
45; ES:DI: Ptr to video memory where to output
46; Returns:
47; DI: Incremented for next character
48; Corrupts registers:
49; AX, DX
50;--------------------------------------------------------------------
[359]51DosCharOut:
[327]52 xchg dx, ax
53 mov ah, 02h ; DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
54 int 21h ; Call DOS
55 ret
56
57
58;---------------------------------------------------------------------
59; Print_ErrorMessageFromAHifError
60; Parameters:
61; AH: BIOS error code
62; CF: Set if error, cleared otherwise
63; Returns:
64; Nothing
65; Corrupts registers:
66; AX, BP, SI, DI (CF remains unchanged)
67;--------------------------------------------------------------------
68Print_ErrorMessageFromAHifError:
69 jnc SHORT .NoErrors
70 eMOVZX ax, ah
71 mov si, g_szBiosError
[424]72 call Print_FormatStringFromSIwithParameterInAX
[327]73 stc ; Keep the CF set
74ALIGN JUMP_ALIGN
75.NoErrors:
76 ret
77
78
79;---------------------------------------------------------------------
80; Print_DriveNumberFromDLusingFormatStringInSI
81; Parameters:
82; DL: Drive Number
[424]83; SI: Offset to format string
[327]84; Returns:
85; Nothing
86; Corrupts registers:
87; AX, BP, DI
88;--------------------------------------------------------------------
89Print_DriveNumberFromDLusingFormatStringInSI:
90 eMOVZX ax, dl
[424]91 ; Fall to Print_FormatStringFromSIwithParameterInAX
92
93
94;---------------------------------------------------------------------
95; Print_FormatStringFromSIwithParameterInAX
96; Print_FormatStringFromSIwithParametersInAXDX
97; Print_FormatStringFromSIwithParametersInAXDXCX
98; Parameters:
99; AX: Format parameter 1
100; DX: Format parameter 2
101; CX: Format parameter 3
102; SI: Offset to format string
103; Returns:
104; Nothing
105; Corrupts registers:
106; AX, BP, DI
107;--------------------------------------------------------------------
108Print_FormatStringFromSIwithParameterInAX:
[327]109 mov bp, sp
110 push ax
[424]111 jmp JumpToFormatNullTerminatedStringFromSI
112
113Print_FormatStringFromSIwithParametersInAXDX:
114 mov bp, sp
115 push ax
116 push dx
117 jmp JumpToFormatNullTerminatedStringFromSI
118
119Print_FormatStringFromSIwithParametersInAXDXCX:
120 mov bp, sp
121 push ax
122 push dx
123 push cx
[327]124 jmp SHORT JumpToFormatNullTerminatedStringFromSI
125
126
127;---------------------------------------------------------------------
[424]128; Print_ModeFromDLandCHSfromAXBLBH
129; Parameters:
130; AX: Number of L-CHS cylinders (1...1024)
131; BL: Number of L-CHS heads (1...255)
132; BH: Number of L-CHS sectors per track (1...63)
133; DL: CHS Translate Mode
134; Returns:
135; Nothing
136; Corrupts registers:
137; AX, BP, SI, DI
138;--------------------------------------------------------------------
139Print_ModeFromDLandCHSfromAXLBH:
140 mov bp, sp
141
142 xor dh, dh
143 mov si, dx
144 shl si, 1 ; Shift for WORD lookup
145 push WORD [si+.rgszXlateModeToString]
146
147 ePUSH_T si, g_szFormatCHS
148 push ax ; Cylinders
149 eMOVZX ax, bl
150 push ax ; Heads
151 mov al, bh
152 push ax ; Sectors per track
153
154 mov si, g_szXlateAndCHS
155 jmp SHORT JumpToFormatNullTerminatedStringFromSI
156
157.rgszXlateModeToString:
158 dw g_szNormal
159 dw g_szLarge
160 dw g_szLBA
161
162
163;---------------------------------------------------------------------
[327]164; Print_CHSfromCXDXAX
165; Parameters:
166; CX: Number of cylinders (1...16383)
167; DX: Number of heads (1...255)
168; AX: Sectors per track (1...63)
169; Returns:
170; Nothing
171; Corrupts registers:
172; AX, BP, DI
173;--------------------------------------------------------------------
174Print_CHSfromCXDXAX:
175 push si
176
177 mov bp, sp
178 push cx
179 push dx
180 push ax
181 mov si, g_szFormatCHS
182 CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
183
184 pop si
185 ret
186
187
188;---------------------------------------------------------------------
189; Print_NameFromAtaInfoInBX
190; Parameters:
191; DS:BX: Ptr to ATA information
192; Returns:
193; Nothing
194; Corrupts registers:
195; AX, CX, BP, SI, DI
196;--------------------------------------------------------------------
197Print_NameFromAtaInfoInBX:
198 cld
199 lea si, [bx+ATA1.strModel]
200 mov di, si
201 mov cx, A1_MODEL_NUMBER_LENGTH/2
202ALIGN JUMP_ALIGN
203.ReverseNextWord:
204 lodsw
205 xchg al, ah
206 stosw
207 loop .ReverseNextWord
208 dec di
209 xor ax, ax
210 stosb ; Terminate with NULL
211
212 mov bp, sp
213 lea si, [bx+ATA1.strModel]
214 push si
215 mov si, g_szFormatDrvName
216 jmp SHORT JumpToFormatNullTerminatedStringFromSI
217
218
219;---------------------------------------------------------------------
220; Print_TotalSectorsFromBXDXAX
221; Parameters:
222; BX:DX:AX: Total number of sectors
223; Returns:
224; Nothing
225; Corrupts registers:
226; AX, BX, BP, DI
227;--------------------------------------------------------------------
228Print_TotalSectorsFromBXDXAX:
229 ePUSH_T di, 0
230 push bx
231 push dx
232 push ax
233 mov bp, sp
234 mov bx, 10
235 CALL_DISPLAY_LIBRARY PrintQWordFromSSBPwithBaseInBX
236 add sp, BYTE 8
237
[371]238 push si
239 mov si, g_szNewline
240 call Print_NullTerminatedStringFromSI
241 pop si
242
[327]243 ret
244
245
246;---------------------------------------------------------------------
247; Print_EbiosVersionFromBXandExtensionsFromCX
248; Parameters:
249; BX: Version of extensions
250; CX: Interface support bit map
251; Returns:
252; Nothing
253; Corrupts registers:
254; AX, BP, SI, DI
255;--------------------------------------------------------------------
256Print_EbiosVersionFromBXandExtensionsFromCX:
257 mov bp, sp
258 push bx
259 push cx
260 mov si, g_szNewExtensions
261 jmp SHORT JumpToFormatNullTerminatedStringFromSI
262
263
264;---------------------------------------------------------------------
265; JumpToFormatNullTerminatedStringFromSI
266; Parameters:
267; BP: SP before pushing parameters
268; CS:SI: Ptr to format string
269; Returns:
270; Pushed parameters are cleaned from stack
271; Corrupts registers:
272; AX, DI
273;--------------------------------------------------------------------
274JumpToFormatNullTerminatedStringFromSI:
275 CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
276 ret
277
278
279;---------------------------------------------------------------------
280; Print_NullTerminatedStringFromSI
281; Parameters:
282; CS:SI: Ptr to string to display
283; Returns:
284; Nothing
285; Corrupts registers:
286; AX, DI
287;--------------------------------------------------------------------
288Print_NullTerminatedStringFromSI:
289 CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
290 ret
Note: See TracBrowser for help on using the repository browser.