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

Last change on this file since 123 was 122, checked in by Tomi Tilli, 14 years ago

Changes to XTIDE Universal BIOS:

  • Bottom info now appears but menu does not.
File size: 13.1 KB
RevLine 
[88]1; Project name : XTIDE Universal BIOS
[3]2; Description : Functions for printing boot menu strings.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
[88]8; Prints Boot Menu title strings.
[3]9;
[88]10; BootMenuPrint_TitleStrings
[3]11; Parameters:
[88]12; Nothing
[3]13; Returns:
[88]14; CF: Set since menu event handled
[3]15; Corrupts registers:
[88]16; AX, SI, DI
[3]17;--------------------------------------------------------------------
18ALIGN JUMP_ALIGN
[88]19BootMenuPrint_TitleStrings:
20 mov si, ROMVARS.szTitle
[96]21 call BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
22 CALL_DISPLAY_LIBRARY PrintNewlineCharacters
[88]23 mov si, ROMVARS.szVersion
[96]24 jmp BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
[3]25
26
27;--------------------------------------------------------------------
[96]28; BootMenuPrint_ClearScreen
[3]29; Parameters:
[84]30; Nothing
[3]31; Returns:
32; Nothing
33; Corrupts registers:
[88]34; AX, DI
[3]35;--------------------------------------------------------------------
36ALIGN JUMP_ALIGN
37BootMenuPrint_ClearScreen:
[88]38 mov ax, ' ' | (MONO_NORMAL<<8)
39 CALL_DISPLAY_LIBRARY ClearScreenWithCharInALandAttrInAH
[3]40 ret
41
42
43;--------------------------------------------------------------------
44; BootMenuPrint_FloppyMenuitem
45; Parameters:
46; DL: Untranslated Floppy Drive number
47; Returns:
[88]48; Nothing
[3]49; Corrupts registers:
[120]50; AX, DX, SI, DI
[3]51;--------------------------------------------------------------------
52ALIGN JUMP_ALIGN
53BootMenuPrint_FloppyMenuitem:
[88]54 push bp
55
56 mov bp, sp
57 mov si, g_szFDLetter
[3]58 ePUSH_T ax, g_szFloppyDrv
[88]59 add dl, 'A'
60 push dx ; Drive letter
61 jmp BootMenuPrint_FormatCSSIfromParamsInSSBP
[3]62
63
64;--------------------------------------------------------------------
65; BootMenuPrint_HardDiskMenuitem
66; Parameters:
67; DL: Untranslated Hard Disk number
68; DS: RAMVARS segment
69; Returns:
[88]70; CF: Set since menu event handled
[3]71; Corrupts registers:
[88]72; AX, BX, SI, DI
[3]73;--------------------------------------------------------------------
74ALIGN JUMP_ALIGN
75BootMenuPrint_HardDiskMenuitem:
76 call FindDPT_ForDriveNumber ; DS:DI to point DPT
[88]77 jnc SHORT .HardDiskMenuitemForForeignDrive
78 ; Fall to .HardDiskMenuitemForOurDrive
[3]79
80;--------------------------------------------------------------------
[88]81; .HardDiskMenuitemForOurDrive
[3]82; Parameters:
83; DL: Untranslated Hard Disk number
84; DS: RAMVARS segment
85; Returns:
[88]86; CF: Set since menu event handled
[3]87; Corrupts registers:
[88]88; AX, BX, SI, DI
[3]89;--------------------------------------------------------------------
[88]90;ALIGN JUMP_ALIGN
91.HardDiskMenuitemForOurDrive:
92 call BootInfo_GetOffsetToBX
93 lea si, [bx+BOOTNFO.szDrvName]
94 xor bx, bx ; BDA segment
95 CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromBXSI
96 stc
97 ret
[3]98
99;--------------------------------------------------------------------
[88]100; BootMenuPrint_HardDiskMenuitemForForeignDrive
[3]101; Parameters:
102; DL: Untranslated Hard Disk number
103; DS: RAMVARS segment
104; Returns:
[88]105; CF: Set since menu event handled
[3]106; Corrupts registers:
[88]107; AX, SI, DI
[3]108;--------------------------------------------------------------------
109ALIGN JUMP_ALIGN
[88]110.HardDiskMenuitemForForeignDrive:
111 mov si, g_szforeignHD
[96]112 jmp BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
[3]113
114
115;--------------------------------------------------------------------
116; BootMenuPrint_FloppyMenuitemInformation
117; Parameters:
118; DL: Untranslated Floppy Drive number
119; DS: RAMVARS segment
120; Returns:
[88]121; CF: Set since menu event was handled successfully
[3]122; Corrupts registers:
[88]123; AX, BX, CX, DX, SI, DI, ES
[3]124;--------------------------------------------------------------------
125ALIGN JUMP_ALIGN
126BootMenuPrint_FloppyMenuitemInformation:
[88]127 call BootMenuPrint_ClearInformationArea
128 call FloppyDrive_GetType ; Get Floppy Drive type to BX
129 test bx, bx ; Two possibilities? (FLOPPY_TYPE_525_OR_35_DD)
130 jz SHORT .PrintXTFloppyType
[3]131 cmp bl, FLOPPY_TYPE_35_ED
[88]132 ja SHORT .PrintUnknownFloppyType
133 jmp SHORT .PrintKnownFloppyType
[3]134
135;--------------------------------------------------------------------
[88]136; .PrintXTFloppyType
[3]137; Parameters:
138; Nothing
139; Returns:
[88]140; CF: Set since menu event was handled successfully
[3]141; Corrupts registers:
[88]142; AX, SI, DI
[3]143;--------------------------------------------------------------------
144ALIGN JUMP_ALIGN
[88]145.PrintXTFloppyType:
146 push bp
[3]147 mov si, g_szFddSizeOr
[88]148 jmp SHORT .FormatXTorUnknownTypeFloppyDrive
[3]149
150;--------------------------------------------------------------------
[88]151; .PrintUnknownFloppyType
[3]152; Parameters:
153; Nothing
154; Returns:
[88]155; CF: Set since menu event was handled successfully
[3]156; Corrupts registers:
[88]157; AX, SI, DI
[3]158;--------------------------------------------------------------------
159ALIGN JUMP_ALIGN
[88]160.PrintUnknownFloppyType:
161 push bp
[3]162 mov si, g_szFddUnknown
[88]163.FormatXTorUnknownTypeFloppyDrive:
164 mov bp, sp
[3]165 ePUSH_T ax, g_szCapacity
[88]166 jmp BootMenuPrint_FormatCSSIfromParamsInSSBP
[3]167
168;--------------------------------------------------------------------
[88]169; .PrintKnownFloppyType
[3]170; Parameters:
171; BX: Floppy drive type
172; Returns:
[88]173; CF: Set since menu event was handled successfully
[3]174; Corrupts registers:
[88]175; AX, BX, SI, DI
[3]176;--------------------------------------------------------------------
177ALIGN JUMP_ALIGN
[88]178.PrintKnownFloppyType:
179 push bp
180
181 mov bp, sp
182 mov si, g_szFddSize
183 ePUSH_T ax, g_szCapacity
[3]184 dec bx ; Cannot be 0 (FLOPPY_TYPE_525_OR_35_DD)
185 shl bx, 1 ; Shift for WORD lookup
186 mov ax, [cs:bx+.rgwPhysicalSize]
[88]187 push ax ; '5' or '3'
188 mov al, ah
[3]189 push ax ; '1/4' or '1/2'
[88]190 push WORD [cs:bx+.rgwCapacity]
191 jmp SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP
192
[3]193ALIGN WORD_ALIGN
194.rgwCapacity:
195 dw 360
196 dw 1200
197 dw 720
198 dw 1440
199 dw 2880
200 dw 2880
201.rgwPhysicalSize:
[88]202 db '5', 172 ; 1, FLOPPY_TYPE_525_DD
203 db '5', 172 ; 2, FLOPPY_TYPE_525_HD
204 db '3', 171 ; 3, FLOPPY_TYPE_35_DD
205 db '3', 171 ; 4, FLOPPY_TYPE_35_HD
206 db '3', 171 ; 5, 3.5" ED on some BIOSes
207 db '3', 171 ; 6, FLOPPY_TYPE_35_ED
[3]208
209
210;--------------------------------------------------------------------
211; Prints Hard Disk Menuitem information strings.
212;
213; BootMenuPrint_HardDiskMenuitemInformation
214; Parameters:
215; DL: Untranslated Hard Disk number
216; DS: RAMVARS segment
217; Returns:
[88]218; CF: Set since menu event was handled successfully
[3]219; Corrupts registers:
220; BX, CX, DX, SI, DI, ES
221;--------------------------------------------------------------------
222ALIGN JUMP_ALIGN
223BootMenuPrint_HardDiskMenuitemInformation:
224 call FindDPT_ForDriveNumber ; DS:DI to point DPT
[88]225 jnc SHORT .HardDiskMenuitemInfoForForeignDrive
226 call .HardDiskMenuitemInfoSizeForOurDrive
[3]227 jmp BootMenuPrintCfg_ForOurDrive
228
229;--------------------------------------------------------------------
[88]230; .HardDiskMenuitemInfoForForeignDrive
[3]231; Parameters:
232; DL: Untranslated Hard Disk number
233; DS: RAMVARS segment
234; Returns:
[88]235; CF: Set since menu event was handled successfully
[3]236; Corrupts registers:
237; AX, BX, CX, DX, SI, DI
238;--------------------------------------------------------------------
239ALIGN JUMP_ALIGN
[88]240.HardDiskMenuitemInfoForForeignDrive:
241 push bp
242 mov bp, sp
243 ePUSH_T ax, g_szCapacity
244
[3]245 call DriveXlate_ToOrBack
246 call HCapacity_GetSectorCountFromForeignAH08h
[88]247 call ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
248
[3]249 mov si, g_szSizeSingle
[88]250 jmp SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP
[3]251
252;--------------------------------------------------------------------
[88]253; .HardDiskMenuitemInfoSizeForOurDrive
[3]254; Parameters:
255; DL: Untranslated Hard Disk number
256; DS:DI: Ptr to DPT
257; Returns:
258; Nothing
259; Corrupts registers:
260; AX, BX, CX, DX, SI, ES
261;--------------------------------------------------------------------
262ALIGN JUMP_ALIGN
[88]263.HardDiskMenuitemInfoSizeForOurDrive:
264 push bp
265 mov bp, sp
266 ePUSH_T ax, g_szCapacity
[3]267
[88]268 ; Get and push L-CHS size
269 call HCapacity_GetSectorCountFromOurAH08h
270 call ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
271
[3]272 ; Get and push total LBA size
273 call BootInfo_GetTotalSectorCount
[88]274 call ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
[3]275
276 mov si, g_szSizeDual
[88]277 ; Fall to BootMenuPrint_FormatCSSIfromParamsInSSBP
[3]278
279
280;--------------------------------------------------------------------
[88]281; BootMenuPrint_FormatCSSIfromParamsInSSBP
282; Parameters:
283; CS:SI: Ptr to string to format
[120]284; BP: SP before pushing parameters
[88]285; Returns:
286; BP: Popped from stack
287; Corrupts registers:
[120]288; AX, DI
[88]289;--------------------------------------------------------------------
290ALIGN JUMP_ALIGN
291BootMenuPrint_FormatCSSIfromParamsInSSBP:
292 CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
293 stc ; Successfull return from menu event
294 pop bp
295 ret
296
297
298;--------------------------------------------------------------------
299; ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
300; Parameters:
301; BX:DX:AX: Sector count
302; Returns:
303; Size in stack
304; Corrupts registers:
305; AX, BX, CX, DX, SI
306;--------------------------------------------------------------------
307ALIGN JUMP_ALIGN
308ConvertSectorCountInBXDXAXtoSizeAndPushForFormat:
309 pop si ; Pop return address
310 call Size_ConvertSectorCountInBXDXAXtoKiB
311 mov cx, BYTE_MULTIPLES.kiB
312 call Size_GetSizeToAXAndCharToDLfromBXDXAXwithMagnitudeInCX
313 push ax ; Size in magnitude
314 push cx ; Tenths
315 push dx ; Magnitude character
316 jmp si
317
318
319;--------------------------------------------------------------------
[96]320; BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
[88]321; Parameters:
322; CS:SI: Ptr to NULL terminated string to print
323; Returns:
324; CF: Set since menu event was handled successfully
325; Corrupts registers:
[98]326; AX
[88]327;--------------------------------------------------------------------
328ALIGN JUMP_ALIGN
[96]329BootMenuPrint_NullTerminatedStringFromCSSIandSetCF:
[98]330 push di
[88]331 CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
[98]332 pop di
[88]333 stc
334 ret
335
336
337;--------------------------------------------------------------------
338; BootMenuPrint_ClearInformationArea
339; Parameters:
340; Nothing
341; Returns:
342; CF: Set
343; Corrupts registers:
344; AX, DI
345;--------------------------------------------------------------------
346ALIGN JUMP_ALIGN
347BootMenuPrint_ClearInformationArea:
348 CALL_MENU_LIBRARY ClearInformationArea
349 stc
350 ret
351
352
353;--------------------------------------------------------------------
354; BootMenuPrint_TheBottomOfScreen
[3]355; Parameters:
356; DS: RAMVARS segment
357; Returns:
[88]358; Nothing
[3]359; Corrupts registers:
[92]360; AX, BX, CX, DX, SI, DI
[3]361;--------------------------------------------------------------------
362ALIGN JUMP_ALIGN
[88]363BootMenuPrint_TheBottomOfScreen:
364 call FloppyDrive_GetCount
365 mov bl, cl ; Floppy Drive count to BL
366 call RamVars_GetHardDiskCountFromBDAtoCX
367 mov bh, cl ; Hard Disk count to BH
[92]368 ; Fall to .MoveCursorToHotkeyStrings
[3]369
[92]370;--------------------------------------------------------------------
371; .MoveCursorToHotkeyStrings
372; Parameters:
373; Nothing
374; Returns:
375; Nothing
376; Corrupts registers:
377; AX, DI
378;--------------------------------------------------------------------
379.MoveCursorToHotkeyStrings:
380 CALL_DISPLAY_LIBRARY GetColumnsToALandRowsToAH
381 xor al, al
382 dec ah
383 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX
384 ; Fall to .PrintHotkeyString
[3]385
386;--------------------------------------------------------------------
[92]387; .PrintHotkeyString
[3]388; Parameters:
[92]389; BL: Floppy Drives
390; BH: Hard Drives
[88]391; Returns:
[92]392; Nothing
[88]393; Corrupts registers:
[120]394; AX, CX, DX, SI, DI
[88]395;--------------------------------------------------------------------
[92]396.PrintHotkeyString:
397 ; Display Library should not be called like this
398 mov si, ATTRIBUTE_CHARS.cHighlightedItem
399 call MenuAttribute_GetToAXfromTypeInSI
400 xchg dx, ax
[122]401 mov cx, MONO_BRIGHT
[88]402
[92]403 test bl, bl ; Any Floppy Drives?
404 jz SHORT .SkipFloppyDriveHotkeys
405 mov ax, 'A' | (ANGLE_QUOTE_RIGHT<<8)
406 mov si, g_szFDD
407 call PushHotkeyParamsAndFormat
[88]408
[92]409.SkipFloppyDriveHotkeys:
410 test bh, bh ; Any Hard Drives?
411 jz SHORT .SkipHardDriveHotkeys
[122]412 xchg ax, cx ; Store Key Attribute
[92]413 call BootMenu_GetLetterForFirstHardDiskToCL
414 mov ch, ANGLE_QUOTE_RIGHT
415 xchg ax, cx
416 mov si, g_szHDD
417 call PushHotkeyParamsAndFormat
418
419.SkipHardDriveHotkeys:
420 ; Fall to .PrintRomBootHotkey
421
[88]422;--------------------------------------------------------------------
[92]423; .PrintRomBootHotkey
[88]424; Parameters:
[92]425; CX: Key Attribute
426; DX: Description Attribute
[3]427; Returns:
[88]428; Nothing
[3]429; Corrupts registers:
[120]430; AX, SI, DI
[3]431;--------------------------------------------------------------------
[92]432.PrintRomBootHotkey:
433 mov ax, 'F' | ('8'<<8) ; F8
434 mov si, g_szRomBoot
435 ; Fall to PushHotkeyParamsAndFormat
436
437;--------------------------------------------------------------------
438; PushHotkeyParamsAndFormat
439; Parameters:
440; AL: First character
441; AH: Second character
442; CX: Key Attribute
443; DX: Description Attribute
444; CS:SI: Description string
445; Returns:
446; Nothing
447; Corrupts registers:
[120]448; AX, SI, DI
[92]449;--------------------------------------------------------------------
[3]450ALIGN JUMP_ALIGN
[92]451PushHotkeyParamsAndFormat:
452 push bp
453 mov bp, sp
454
455 push cx ; Key attribute
456 push ax ; First character
457 xchg al, ah
458 push ax ; Second character
459 push dx ; Description attribute
460 push si ; Description string
461 push cx ; Key attribute for last space
462 mov si, g_szHotkey
463 jmp BootMenuPrint_FormatCSSIfromParamsInSSBP
Note: See TracBrowser for help on using the repository browser.