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

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

Changes:

  • BIOS: Fixed a purely cosmetic bug from r542 where, in builds containing MODULE_EBIOS, the boot menu would display an incorrect drive size (0.4 kB with MODULE_STRINGS_COMPRESSED or 0.5 kB without) for old drives with no support for LBA.
  • Fixed a bug from r392 where Vision_DetectAndReturnIDinAXandPortInDXifControllerPresent would return the ID in AL instead of AH (if DANGEROUS_DETECTION had been defined).
  • Fixed a bug from r587 in AdvAtaInit.asm that would prevent detection of QDI Vision controllers.
  • Also changed how the QDI Vision IDs are defined (removed the need for shifting) to avoid confusion. This fixed a potential bug from r587 in AdvAtaInit.asm where some IDs were not being shifted.
  • Fixed a bug in PDC20x30.asm from r587 where GetPdcIDtoAX would not return with the IDE base port in DX so DisablePdcProgrammingMode would fail.
  • Made some changes to ModuleDependency.inc and other files so that MODULE_ADVANCED_ATA now requires USE_386. Consequently it is no longer included in the regular AT-builds, only in the 386_8k-build.
  • Moved the UNROLL_SECTORS_IN_CX_TO_xWORDS macros from IDE_8bit.inc to IdeIO.inc which means it's now possible to build a BIOS without MODULE_8BIT_IDE.
  • XTIDECFG: Added a minimum DOS version check (since it needs DOS version 2+) to allow the program to quit gracefully in the unlikely scenario where someone tries to run it under DOS version 1.
  • Made some changes to Drive.asm to improve drive enumeration. The old method using GET_DOS_DRIVE_PARAMETER_BLOCK_FOR_SPECIFIC_DRIVE worked well in Windows XP but not in Windows 98 SE (in Windows or in DOS mode). The two problems were; 1) The function call would access the drives which on single floppy drive systems would cause Windows to swap between A: and B: (throwing a blue screen asking the user to insert a disk etc). 2) Only floppy drives and FAT16 drives would be available in the list of drives, no FAT32/optical/network drives.
  • Improved code in IdeControllerMenu.asm so that the default port addresses for all IDE interfaces are now restored when (re-)selecting the (same) type of IDE device.
  • Also made it impossible to select a device type unless the required module is included in the loaded BIOS.
  • The version check done when loading a BIOS now uses the FLASH_SIGNATURE definition from Version.inc. Any changes affecting RomVars now only requires updating that definition. This means that changes to RomVars must be implemented in both the BIOS and XTIDECFG before being committed to the repository.
  • Added a compatibility fix for 3Com 3C503 cards to the ROM checksumming code in Buffers.asm (Buffers_GenerateChecksum).
  • SerDrive: Made some minor changes to file names and paths to improve compatibility with case sensitive environments.
  • BIOSDRVS: Made a minor size optimization which as a side effect also makes it compatible with all DOS versions including DOS version 1.
  • Library: Renamed the WAIT_RETRACE_IF_NECESSARY_THEN macro to CALL_WAIT_FOR_RETRACE_IF_NECESSARY_THEN and made a tail-call-optimized version of it (JMP_WAIT_FOR_RETRACE_IF_NECESSARY_THEN).
  • A speed optimization to the eRCL_IM macro for 386 and higher. This change breaks emulation in the sense that the macro will fail when given a memory operand as the first parameter.
  • Other minor optimizations and fixes.
File size: 7.5 KB
Line 
1; Project name  :   BIOS Drive Information Tool
2; Description   :   Functions to print information read from BIOS.
3
4;
5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 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;
19
20; Section containing code
21SECTION .text
22
23;--------------------------------------------------------------------
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    JMP_DISPLAY_LIBRARY SetCharOutputFunctionFromAXwithAttribFlagInBL
36
37
38;--------------------------------------------------------------------
39; Use DOS standard output so strings can be redirected to a file.
40;
41; DosCharOut
42;   Parameters:
43;       AL:     Character to output
44;   Returns:
45;       Nothing
46;   Corrupts registers:
47;       AX, DX
48;--------------------------------------------------------------------
49DosCharOut:
50    xchg    dx, ax
51    mov     ah, WRITE_CHARACTER_TO_STANDARD_OUTPUT
52    int     DOS_INTERRUPT_21h
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
70    call    Print_FormatStringFromSIwithParameterInAX
71    stc     ; Keep the CF set
72ALIGN JUMP_ALIGN, ret
73.NoErrors:
74    ret
75
76
77;---------------------------------------------------------------------
78; Print_DriveNumberFromDLusingFormatStringInSI
79;   Parameters:
80;       DL:     Drive Number
81;       SI:     Offset to format string
82;   Returns:
83;       Nothing
84;   Corrupts registers:
85;       AX, BP, DI
86;--------------------------------------------------------------------
87Print_DriveNumberFromDLusingFormatStringInSI:
88    eMOVZX  ax, dl
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:
107    mov     bp, sp
108    push    ax
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
122    jmp     SHORT JumpToFormatNullTerminatedStringFromSI
123
124
125;---------------------------------------------------------------------
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
140    ; Push CHS parameters
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
148    ; Push translation mode
149    xor     dh, dh
150    mov     si, dx
151    shl     si, 1       ; Shift for WORD lookup
152    push    WORD [si+.rgszXlateModeToString]
153
154    mov     si, g_szChsAndMode
155    jmp     SHORT JumpToFormatNullTerminatedStringFromSI
156
157.rgszXlateModeToString:
158    dw      g_szNormal
159    dw      g_szLarge
160    dw      g_szLBA
161
162
163;---------------------------------------------------------------------
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    CALL_DISPLAY_LIBRARY PrintNewlineCharacters
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:
199    cld
200    lea     si, [bx+ATA1.strModel]
201    mov     di, si
202    mov     cx, A1_MODEL_NUMBER_LENGTH/2
203ALIGN JUMP_ALIGN
204.ReverseNextWord:
205    lodsw
206    xchg    al, ah
207    stosw
208    loop    .ReverseNextWord
209    dec     di
210    xchg    cx, ax
211    stosb               ; Terminate with NULL
212
213    mov     bp, sp
214    lea     si, [bx+ATA1.strModel]
215    push    si
216    mov     si, g_szFormatDrvName
217    jmp     SHORT JumpToFormatNullTerminatedStringFromSI
218
219
220;---------------------------------------------------------------------
221; Print_TotalSectorsFromBXDXAX
222;   Parameters:
223;       BX:DX:AX:   Total number of sectors
224;   Returns:
225;       Nothing
226;   Corrupts registers:
227;       AX, BX, BP, DI
228;--------------------------------------------------------------------
229Print_TotalSectorsFromBXDXAX:
230    ePUSH_T di, 0
231    push    bx
232    push    dx
233    push    ax
234    mov     bp, sp
235    mov     bx, 10
236    CALL_DISPLAY_LIBRARY    PrintQWordFromSSBPwithBaseInBX
237    add     sp, BYTE 8
238
239    push    si
240    mov     si, g_szNewline
241    call    Print_NullTerminatedStringFromSI
242    pop     si
243
244    ret
245
246
247;---------------------------------------------------------------------
248; Print_EbiosVersionFromBXandExtensionsFromCX
249;   Parameters:
250;       BX:     Version of extensions
251;       CX:     Interface support bit map
252;   Returns:
253;       Nothing
254;   Corrupts registers:
255;       AX, BP, SI, DI
256;--------------------------------------------------------------------
257Print_EbiosVersionFromBXandExtensionsFromCX:
258    mov     bp, sp
259    push    bx
260    push    cx
261    mov     si, g_szNewExtensions
262    ; Fall to JumpToFormatNullTerminatedStringFromSI
263
264
265;---------------------------------------------------------------------
266; JumpToFormatNullTerminatedStringFromSI
267;   Parameters:
268;       BP:     SP before pushing parameters
269;       CS:SI:  Ptr to format string
270;   Returns:
271;       Pushed parameters are cleaned from stack
272;   Corrupts registers:
273;       AX, DI
274;--------------------------------------------------------------------
275JumpToFormatNullTerminatedStringFromSI:
276    JMP_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
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    JMP_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
290
Note: See TracBrowser for help on using the repository browser.