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

Last change on this file was 592, checked in by krille_n_, 6 years ago

Changes:

  • The problem with NASM in the previous revision (r591) has been fixed.
  • The colors used by the boot menu and hotkey bar can now be customized by selecting one of a number of pre-defined color themes. Suggestions for additional themes are more than welcome!
  • Large builds are now 10 KB. Small builds are still 8 KB with the exception of the Tiny build which is now 4 KB. In other words, builds are now as small as possible to make it easier to combine them with other BIOSes.
  • Added code to the library to improve drive error handling. XTIDECFG can now handle "Drive Not Ready" errors.
  • Fixed a couple of potential bugs in AtaID.asm (AtaID_GetMaxPioModeToAXandMinCycleTimeToCX); 1) ATA1.bPioMode was treated as a WORD variable. 2) ATA2.bPIOSupp was assumed to be non-zero which would result in PIO mode 3 being returned if the assumption was wrong.
  • Made the same changes in the equivalent function used by BIOSDRVS (DisplayPioModeInformationUsingAtaInfoFromDSBX in AtaInfo.asm).
  • Fixed a bug from r587 in PDC20x30.asm in PDC20x30_GetMaxPioModeToALandMinPioCycleTimeToBX.
  • Fixed a bug from r523 in XTIDECFG where Auto Configure would only set the IRQ on one IDE interface on AT-builds.
  • XTIDECFG will now restore the default settings for the "Serial port virtual device" when reselecting it in the list of device types. This makes it behave consistently for all device types.
  • The eAAM macro is now used regardless if USE_UNDOC_INTEL is defined or not because it is apparently supported on all processors including the NEC V20/V30 CPUs.
  • Renamed the EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS define to EXCLUDE_FROM_XUB.
  • Added a define to exclude unused library code from BIOSDRVS (EXCLUDE_FROM_BIOSDRVS). This makes it a lot smaller than in previous revisions.
  • All unnecessary CLD-instructions are now under a new define 'CLD_NEEDED' which is only enabled for the BIOS. It is disabled for XTIDECFG and BIOSDRVS but can be enabled if needed by adding this define to the respective makefile. This change was made because these unnecessary instructions are wasteful and should never be needed. In fact, they only serve to hide bugs (in other peoples code) which I strongly believe should be avoided. I recommend people making their own BIOSes from source to not use this define as it's extremely unlikely to be needed.
  • Updated the copyright info in SerDrive and changed an URL to point to the new site.
  • Updated the copyright info and version number in BIOSDRVS.
  • Updated the copyright info in XTIDECFG.
  • Optimizations in general.
File size: 7.5 KB
RevLine 
[327]1; Project name  :   BIOS Drive Information Tool
2; Description   :   Functions to print information read from BIOS.
3
[376]4;
[505]5; XTIDE Universal BIOS and Associated Tools
[526]6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
[376]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.
[505]12;
[376]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
[505]16; GNU General Public License for more details.
[376]17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
[505]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
[505]35    JMP_DISPLAY_LIBRARY SetCharOutputFunctionFromAXwithAttribFlagInBL
[359]36
[505]37
[359]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;   Returns:
[589]45;       Nothing
[327]46;   Corrupts registers:
47;       AX, DX
48;--------------------------------------------------------------------
[359]49DosCharOut:
[327]50    xchg    dx, ax
[589]51    mov     ah, WRITE_CHARACTER_TO_STANDARD_OUTPUT
52    int     DOS_INTERRUPT_21h
[327]53    ret
54
55
56;---------------------------------------------------------------------
57; Print_ErrorMessageFromAHifError
58;   Parameters:
59;       AH:     BIOS error code
60;       CF:     Set if error, cleared otherwise
61;   Returns:
62;       Nothing
63;   Corrupts registers:
64;       AX, BP, SI, DI (CF remains unchanged)
65;--------------------------------------------------------------------
66Print_ErrorMessageFromAHifError:
67    jnc     SHORT .NoErrors
68    eMOVZX  ax, ah
69    mov     si, g_szBiosError
[424]70    call    Print_FormatStringFromSIwithParameterInAX
[327]71    stc     ; Keep the CF set
[505]72ALIGN JUMP_ALIGN, ret
[327]73.NoErrors:
74    ret
75
76
77;---------------------------------------------------------------------
78; Print_DriveNumberFromDLusingFormatStringInSI
79;   Parameters:
80;       DL:     Drive Number
[424]81;       SI:     Offset to format string
[327]82;   Returns:
83;       Nothing
84;   Corrupts registers:
85;       AX, BP, DI
86;--------------------------------------------------------------------
87Print_DriveNumberFromDLusingFormatStringInSI:
88    eMOVZX  ax, dl
[424]89    ; Fall to Print_FormatStringFromSIwithParameterInAX
90
91
92;---------------------------------------------------------------------
93; Print_FormatStringFromSIwithParameterInAX
94; Print_FormatStringFromSIwithParametersInAXDX
95; Print_FormatStringFromSIwithParametersInAXDXCX
96;   Parameters:
97;       AX:     Format parameter 1
98;       DX:     Format parameter 2
99;       CX:     Format parameter 3
100;       SI:     Offset to format string
101;   Returns:
102;       Nothing
103;   Corrupts registers:
104;       AX, BP, DI
105;--------------------------------------------------------------------
106Print_FormatStringFromSIwithParameterInAX:
[327]107    mov     bp, sp
108    push    ax
[424]109    jmp     JumpToFormatNullTerminatedStringFromSI
110
111Print_FormatStringFromSIwithParametersInAXDX:
112    mov     bp, sp
113    push    ax
114    push    dx
115    jmp     JumpToFormatNullTerminatedStringFromSI
116
117Print_FormatStringFromSIwithParametersInAXDXCX:
118    mov     bp, sp
119    push    ax
120    push    dx
121    push    cx
[327]122    jmp     SHORT JumpToFormatNullTerminatedStringFromSI
123
124
125;---------------------------------------------------------------------
[424]126; Print_ModeFromDLandCHSfromAXBLBH
127;   Parameters:
128;       AX:     Number of L-CHS cylinders (1...1024)
129;       BL:     Number of L-CHS heads (1...255)
130;       BH:     Number of L-CHS sectors per track (1...63)
131;       DL:     CHS Translate Mode
132;   Returns:
133;       Nothing
134;   Corrupts registers:
135;       AX, BP, SI, DI
136;--------------------------------------------------------------------
137Print_ModeFromDLandCHSfromAXLBH:
138    mov     bp, sp
139
[426]140    ; Push CHS parameters
[424]141    ePUSH_T si, g_szFormatCHS
142    push    ax          ; Cylinders
143    eMOVZX  ax, bl
144    push    ax          ; Heads
145    mov     al, bh
146    push    ax          ; Sectors per track
147
[426]148    ; Push translation mode
149    xor     dh, dh
150    mov     si, dx
[592]151    eSHL_IM si, 1       ; Shift for WORD lookup
[426]152    push    WORD [si+.rgszXlateModeToString]
153
154    mov     si, g_szChsAndMode
[424]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
[505]182    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
183    CALL_DISPLAY_LIBRARY PrintNewlineCharacters
[327]184
185    pop     si
186    ret
187
188
189;---------------------------------------------------------------------
190; Print_NameFromAtaInfoInBX
191;   Parameters:
192;       DS:BX:  Ptr to ATA information
193;   Returns:
194;       Nothing
195;   Corrupts registers:
196;       AX, CX, BP, SI, DI
197;--------------------------------------------------------------------
198Print_NameFromAtaInfoInBX:
[592]199%ifdef CLD_NEEDED
[327]200    cld
[592]201%endif
202    mov     bp, sp
[327]203    lea     si, [bx+ATA1.strModel]
[592]204    push    si
[327]205    mov     di, si
206    mov     cx, A1_MODEL_NUMBER_LENGTH/2
207ALIGN JUMP_ALIGN
208.ReverseNextWord:
209    lodsw
210    xchg    al, ah
211    stosw
212    loop    .ReverseNextWord
213    dec     di
[525]214    xchg    cx, ax
[327]215    stosb               ; Terminate with NULL
216
217    mov     si, g_szFormatDrvName
218    jmp     SHORT JumpToFormatNullTerminatedStringFromSI
219
220
221;---------------------------------------------------------------------
222; Print_TotalSectorsFromBXDXAX
223;   Parameters:
224;       BX:DX:AX:   Total number of sectors
225;   Returns:
226;       Nothing
227;   Corrupts registers:
228;       AX, BX, BP, DI
229;--------------------------------------------------------------------
230Print_TotalSectorsFromBXDXAX:
231    ePUSH_T di, 0
232    push    bx
233    push    dx
234    push    ax
235    mov     bp, sp
236    mov     bx, 10
237    CALL_DISPLAY_LIBRARY    PrintQWordFromSSBPwithBaseInBX
238    add     sp, BYTE 8
239
[371]240    push    si
241    mov     si, g_szNewline
242    call    Print_NullTerminatedStringFromSI
243    pop     si
[505]244
[327]245    ret
246
247
248;---------------------------------------------------------------------
249; Print_EbiosVersionFromBXandExtensionsFromCX
250;   Parameters:
[567]251;       BX:     Version of extensions
[327]252;       CX:     Interface support bit map
253;   Returns:
254;       Nothing
255;   Corrupts registers:
256;       AX, BP, SI, DI
257;--------------------------------------------------------------------
258Print_EbiosVersionFromBXandExtensionsFromCX:
259    mov     bp, sp
260    push    bx
261    push    cx
262    mov     si, g_szNewExtensions
[558]263    ; Fall to JumpToFormatNullTerminatedStringFromSI
[327]264
265
266;---------------------------------------------------------------------
267; JumpToFormatNullTerminatedStringFromSI
268;   Parameters:
269;       BP:     SP before pushing parameters
270;       CS:SI:  Ptr to format string
271;   Returns:
272;       Pushed parameters are cleaned from stack
273;   Corrupts registers:
274;       AX, DI
275;--------------------------------------------------------------------
[505]276JumpToFormatNullTerminatedStringFromSI:
277    JMP_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
[327]278
279
280;---------------------------------------------------------------------
281; Print_NullTerminatedStringFromSI
282;   Parameters:
283;       CS:SI:  Ptr to string to display
284;   Returns:
285;       Nothing
286;   Corrupts registers:
287;       AX, DI
288;--------------------------------------------------------------------
289Print_NullTerminatedStringFromSI:
[505]290    JMP_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
291
Note: See TracBrowser for help on using the repository browser.