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

Last change on this file since 122 was 122, checked in by aitotat, 13 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.