source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuPrint.asm@ 387

Last change on this file since 387 was 386, checked in by aitotat@…, 13 years ago

Changes to XTIDE Universal BIOS:

  • Boot menu is now an optional module (MODULE_BOOT_MENU).
File size: 10.6 KB
Line 
1; Project name : XTIDE Universal BIOS
2; Description : Functions for printing boot menu strings.
3
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;
19
20; Section containing code
21SECTION .text
22
23;--------------------------------------------------------------------
24; BootMenuPrint_RefreshItem
25;
26; Parameters:
27; DL: Untranslated Floppy Drive number
28; Returns:
29; Nothing
30; Corrupts registers:
31; AX, BX, DX, SI, DI
32;--------------------------------------------------------------------
33BootMenuPrint_RefreshItem:
34 call BootMenu_GetDriveToDXforMenuitemInCX_And_RamVars_GetSegmentToDS
35 jnc BootMenuEvent_EventCompleted ; if no menu item selected, out we go
36
37 push bp
38 mov bp, sp
39
40 call FindDPT_ForDriveNumberInDL
41 jc .notOurs
42
43 call BootMenuInfo_ConvertDPTtoBX
44 mov si, g_szDriveNumBOOTNFO ; special g_szDriveNum that prints from BDA
45 jmp .go
46
47.notOurs:
48 mov si,g_szDriveNum
49 mov bx,g_szForeignHD ; assume a hard disk for the moment
50
51 test dl, dl
52 js .go
53 mov bl,((g_szFloppyDrv)-$$ & 0xff) ; and revisit the earlier assumption...
54
55.go:
56 mov ax, dx ; preserve DL for the floppy drive letter addition
57 call DriveXlate_ToOrBack
58 push dx ; translated drive number
59 push bx ; sub string
60 add al, 'A' ; floppy drive letter (we always push this although
61 push ax ; the hard disks don't ever use it, but it does no harm)
62
63 jmp SHORT BootMenuPrint_RefreshInformation.FormatRelay
64
65;--------------------------------------------------------------------
66; Prints Boot Menu title strings.
67;
68; BootMenuPrint_TitleStrings
69; Parameters:
70; Nothing
71; Returns:
72; CF: Set since menu event handled
73; Corrupts registers:
74; AX, SI, DI
75;--------------------------------------------------------------------
76BootMenuPrint_TitleStrings:
77 mov si, ROMVARS.szTitle
78 call DetectPrint_NullTerminatedStringFromCSSIandSetCF
79 CALL_DISPLAY_LIBRARY PrintNewlineCharacters
80 mov si, ROMVARS.szVersion
81 jmp DetectPrint_NullTerminatedStringFromCSSIandSetCF
82
83
84;--------------------------------------------------------------------
85; BootMenuPrint_FloppyMenuitemInformation
86; Parameters:
87; DL: Untranslated Floppy Drive number
88; DS: RAMVARS segment
89; Returns:
90; CF: Set since menu event was handled successfully
91; Corrupts registers:
92; AX, BX, CX, DX, SI, DI, ES
93;--------------------------------------------------------------------
94BootMenuPrint_RefreshInformation:
95 CALL_MENU_LIBRARY ClearInformationArea
96
97 call BootMenu_GetDriveToDXforMenuitemInCX_And_RamVars_GetSegmentToDS
98 jnc BootMenuEvent_EventCompleted ; if no menu selection, abort
99
100 push bp
101 mov bp, sp
102
103 mov si, g_szCapacity ; Setup print string now, carries through to print call
104
105 call FindDPT_ForDriveNumberInDL
106
107 inc dl ; are we a hard disk?
108 dec dl ; inc/dec will set SF, without modifying CF or DL
109 js .HardDiskRefreshInformation
110
111 jnc .ours ; Based on CF from FindDPT_ForDriveNumberInDL above
112 call FloppyDrive_GetType ; Get Floppy Drive type to BX
113 jmp .around
114.ours:
115 call AH8h_GetDriveParameters
116.around:
117
118 mov ax, g_szFddSizeOr ; .PrintXTFloppyType
119 test bl, bl ; Two possibilities? (FLOPPY_TYPE_525_OR_35_DD)
120 jz SHORT .PushAXAndOutput
121
122 mov al, (g_szFddUnknown - $$) & 0xff ; .PrintUnknownFloppyType
123 cmp bl, FLOPPY_TYPE_35_ED
124 ja SHORT .PushAXAndOutput
125
126 ; Fall to .PrintKnownFloppyType
127
128;--------------------------------------------------------------------
129; .PrintKnownFloppyType
130; Parameters:
131; BX: Floppy drive type
132; Returns:
133; CF: Set since menu event was handled successfully
134; Corrupts registers:
135; AX, BX, SI, DI
136;
137; Floppy Drive Types:
138;
139; 0 Handled above
140; 1 FLOPPY_TYPE_525_DD 5 1/4 360K
141; 2 FLOPPY_TYPE_525_HD 5 1/4 1.2M
142; 3 FLOPPY_TYPE_35_DD 3 1/2 720K
143; 4 FLOPPY_TYPE_35_HD 3 1/2 1.44M
144; 5 3.5" ED on some BIOSes 3 1/2 2.88M
145; 6 FLOPPY_TYPE_35_ED 3 1/2 2.88M
146; >6 Unknwon, handled above
147;
148;--------------------------------------------------------------------
149.PrintKnownFloppyType:
150 mov al, (g_szFddSize - $$) & 0xff
151 push ax
152
153 mov al, (g_szFddThreeHalf - $$) & 0xff
154 cmp bl, FLOPPY_TYPE_525_HD
155 ja .ThreeHalf
156 mov al, (g_szFddFiveQuarter - $$) & 0xff
157.ThreeHalf:
158 push ax ; "5 1/4" or "3 1/2"
159
160 mov al,FloppyTypes.rgbCapacityMultiplier
161 mov bh, 0
162 mul byte [cs:bx+FloppyTypes.rgbCapacity - 1] ; -1 since 0 is handled above and not in the table
163
164.PushAXAndOutput:
165 push ax
166
167.FormatRelay:
168 jmp DetectPrint_FormatCSSIfromParamsInSSBP
169
170
171;--------------------------------------------------------------------
172; Prints Hard Disk Menuitem information strings.
173;
174; BootMenuPrint_HardDiskMenuitemInformation
175; Parameters:
176; DS: RAMVARS segment
177; Returns:
178; CF: Set since menu event was handled successfully
179; Corrupts registers:
180; BX, CX, DX, SI, DI, ES
181;--------------------------------------------------------------------
182.HardDiskRefreshInformation:
183 jc .HardDiskMenuitemInfoForForeignDrive ; Based on CF from FindDPT_ForDriveNumberInDL (way) above
184
185.HardDiskMenuitemInfoForOurDrive:
186 ePUSH_T ax, g_szInformation ; Add substring for our hard disk information
187 call BootMenuInfo_GetTotalSectorCount ; Get Total LBA Size
188 jmp .ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
189
190.HardDiskMenuitemInfoForForeignDrive:
191 call DriveXlate_ToOrBack
192 call AH15h_GetSectorCountFromForeignDriveToDXAX
193
194.ConvertSectorCountInBXDXAXtoSizeAndPushForFormat:
195 ePUSH_T cx, g_szCapacityNum ; Push format substring
196 call Size_ConvertSectorCountInBXDXAXtoKiB
197 mov cx, BYTE_MULTIPLES.kiB
198 call Size_GetSizeToAXAndCharToDLfromBXDXAXwithMagnitudeInCX
199 push ax ; Size in magnitude
200 push cx ; Tenths
201 push dx ; Magnitude character
202
203 test di,di
204 jz SHORT BootMenuPrint_RefreshInformation.FormatRelay
205
206%include "BootMenuPrintCfg.asm" ; inline of code to fill out remainder of information string
207 jmp DetectPrint_FormatCSSIfromParamsInSSBP
208
209
210;--------------------------------------------------------------------
211; BootMenuPrint_ClearScreen
212; Parameters:
213; Nothing
214; Returns:
215; Nothing
216; Corrupts registers:
217; AX, DI
218;--------------------------------------------------------------------
219BootMenuPrint_ClearScreen:
220 call BootMenuPrint_InitializeDisplayContext
221 xor ax, ax
222 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX
223 mov ax, ' ' | (MONO_NORMAL<<8)
224 CALL_DISPLAY_LIBRARY ClearScreenWithCharInALandAttrInAH
225 ret
226
227
228;--------------------------------------------------------------------
229; BootMenuPrint_TheBottomOfScreen
230; Parameters:
231; DS: RAMVARS segment
232; Returns:
233; Nothing
234; Corrupts registers:
235; AX, BX, CX, DX, SI, DI
236;--------------------------------------------------------------------
237BootMenuPrint_TheBottomOfScreen:
238 call FloppyDrive_GetCountToAX
239 xchg bx, ax ; Floppy Drive count to BL
240 call RamVars_GetHardDiskCountFromBDAtoAX
241 mov bh, al ; Hard Disk count to BH
242 ; Fall to .MoveCursorToHotkeyStrings
243
244;--------------------------------------------------------------------
245; .MoveCursorToHotkeyStrings
246; Parameters:
247; Nothing
248; Returns:
249; Nothing
250; Corrupts registers:
251; AX, DI
252;--------------------------------------------------------------------
253.MoveCursorToHotkeyStrings:
254 CALL_DISPLAY_LIBRARY GetColumnsToALandRowsToAH
255 xor al, al
256 dec ah
257 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX
258 ; Fall to .PrintHotkeyString
259
260;--------------------------------------------------------------------
261; .PrintHotkeyString
262; Parameters:
263; BL: Floppy Drives
264; BH: Hard Drives
265; Returns:
266; Nothing
267; Corrupts registers:
268; AX, CX, DX, SI, DI
269;--------------------------------------------------------------------
270.PrintHotkeyString:
271 ; Display Library should not be called like this
272 mov si, ATTRIBUTE_CHARS.cHighlightedItem
273 call MenuAttribute_GetToAXfromTypeInSI
274 xchg dx, ax
275 mov cx, MONO_BRIGHT
276
277 test bl, bl ; Any Floppy Drives?
278 jz SHORT .SkipFloppyDriveHotkeys
279 mov ax, 'A' | (ANGLE_QUOTE_RIGHT<<8)
280 mov si, g_szFDD
281 call PushHotkeyParamsAndFormat
282
283.SkipFloppyDriveHotkeys:
284 test bh, bh ; Any Hard Drives?
285 jz SHORT .SkipHardDriveHotkeys
286 call BootMenu_GetLetterForFirstHardDiskToAL
287 mov ah, ANGLE_QUOTE_RIGHT
288 mov si, g_szHDD
289 call PushHotkeyParamsAndFormat
290
291.SkipHardDriveHotkeys:
292 ; Fall to .PrintRomBootHotkey
293
294;--------------------------------------------------------------------
295; .PrintRomBootHotkey
296; Parameters:
297; CX: Key Attribute
298; DX: Description Attribute
299; Returns:
300; Nothing
301; Corrupts registers:
302; AX, SI, DI
303;--------------------------------------------------------------------
304.PrintRomBootHotkey:
305 mov ax, 'F' | ('8'<<8) ; F8
306 mov si, g_szRomBoot
307 ; Fall to PushHotkeyParamsAndFormat
308
309;--------------------------------------------------------------------
310; PushHotkeyParamsAndFormat
311; Parameters:
312; AL: First character
313; AH: Second character
314; CX: Key Attribute
315; DX: Description Attribute
316; CS:SI: Description string
317; Returns:
318; Nothing
319; Corrupts registers:
320; AX, SI, DI
321;--------------------------------------------------------------------
322PushHotkeyParamsAndFormat:
323 push bp
324 mov bp, sp
325
326 push cx ; Key attribute
327 push ax ; First character
328 xchg al, ah
329 push ax ; Second character
330 push dx ; Description attribute
331 push si ; Description string
332 push cx ; Key attribute for last space
333 mov si, g_szHotkey
334 jmp DetectPrint_FormatCSSIfromParamsInSSBP
335
336
337FloppyTypes:
338.rgbCapacityMultiplier equ 20 ; Multiplier to reduce word sized values to byte size
339.rgbCapacity:
340 db 360 / FloppyTypes.rgbCapacityMultiplier ; type 1
341 db 1200 / FloppyTypes.rgbCapacityMultiplier ; type 2
342 db 720 / FloppyTypes.rgbCapacityMultiplier ; type 3
343 db 1440 / FloppyTypes.rgbCapacityMultiplier ; type 4
344 db 2880 / FloppyTypes.rgbCapacityMultiplier ; type 5
345 db 2880 / FloppyTypes.rgbCapacityMultiplier ; type 6
Note: See TracBrowser for help on using the repository browser.