source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Menus/BootMenu/BootMenuPrint.asm @ 489

Last change on this file since 489 was 489, checked in by gregli@…, 11 years ago

Added version string to initial title banner, for cases where there is not a boot menu (just hotkeys, or no hotkeys). Also ifdef'd out some unused code.

File size: 7.4 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;       CX:     Index of highlighted item
28;       DS:     RAMVARS segment
29;   Returns:
30;       Nothing
31;   Corrupts registers:
32;       Does not matter
33;--------------------------------------------------------------------
34BootMenuPrint_RefreshItem:
35    call    BootMenu_GetDriveToDXforMenuitemInCX
36    jnc     BootMenuEvent_Completed                 ; if no menu item selected, out we go
37
38    push    bp
39    mov     bp, sp
40
41    call    FindDPT_ForDriveNumberInDL
42    jc      .notOurs
43
44    call    DriveDetectInfo_ConvertDPTtoBX
45    mov     si, g_szDriveNumBOOTNFO                 ; special g_szDriveNum that prints from BDA
46    jmp     .go
47
48.notOurs:
49    mov     si,g_szDriveNum
50    mov     bx,g_szForeignHD                        ; assume a hard disk for the moment
51
52    test    dl, dl
53    js      .go
54    mov     bl,((g_szFloppyDrv)-$$ & 0xff)          ; and revisit the earlier assumption...
55
56.go:
57    mov     ax, dx                                  ; preserve DL for the floppy drive letter addition
58    call    DriveXlate_ToOrBack
59    push    dx                                      ; translated drive number
60    push    bx                                      ; sub string
61    add     al, 'A'                                 ; floppy drive letter (we always push this although
62    push    ax                                      ; the hard disks don't ever use it, but it does no harm)
63
64    jmp     SHORT BootMenuPrint_RefreshInformation.FormatRelay
65
66;--------------------------------------------------------------------
67; Prints Boot Menu title strings.
68;
69; BootMenuPrint_TitleStrings
70;   Parameters:
71;       Nothing
72;   Returns:
73;       CF:     Set since menu event handled
74;   Corrupts registers:
75;       AX, SI, DI
76;--------------------------------------------------------------------
77BootMenuPrint_TitleStrings:
78    xor     di,di                       ; Null character will be eaten 
79    mov     si, g_szBootMenuTitle
80    jmp     DetectPrint_RomFoundAtSegment.BootMenuEntry
81
82       
83;--------------------------------------------------------------------
84; BootMenuPrint_RefreshInformation
85;   Parameters:
86;       CX:     Index of highlighted item
87;       DS:     RAMVARS segment
88;   Returns:
89;       CF:     Set since menu event was handled successfully
90;   Corrupts registers:
91;       Does not matter
92;--------------------------------------------------------------------
93BootMenuPrint_RefreshInformation:
94    CALL_MENU_LIBRARY ClearInformationArea
95
96    call    BootMenu_GetDriveToDXforMenuitemInCX
97    jnc     BootMenuEvent_Completed                     ; if no menu selection, abort
98
99    push    bp
100    mov     bp, sp
101
102    mov     si, g_szCapacity                            ; Setup print string now, carries through to print call
103
104    call    FindDPT_ForDriveNumberInDL
105
106    inc     dl                                          ; are we a hard disk?
107    dec     dl                                          ; inc/dec will set SF, without modifying CF or DL
108    js      .HardDiskRefreshInformation
109
110    jnc     .ours                                       ; Based on CF from FindDPT_ForDriveNumberInDL above
111    call    FloppyDrive_GetType                         ; Get Floppy Drive type to BX
112    jmp     .around
113.ours:
114    call    AH8h_GetDriveParameters
115.around:
116
117    mov     ax, g_szFddSizeOr                           ; .PrintXTFloppyType
118    test    bl, bl                                      ; Two possibilities? (FLOPPY_TYPE_525_OR_35_DD)
119    jz      SHORT .PushAXAndOutput
120
121    mov     al, (g_szFddUnknown - $$) & 0xff            ; .PrintUnknownFloppyType
122    cmp     bl, FLOPPY_TYPE_35_ED
123    ja      SHORT .PushAXAndOutput
124
125    ; Fall to .PrintKnownFloppyType
126
127;--------------------------------------------------------------------
128; .PrintKnownFloppyType
129;   Parameters:
130;       BX:     Floppy drive type
131;   Returns:
132;       CF:     Set since menu event was handled successfully
133;   Corrupts registers:
134;       AX, BX, SI, DI
135;
136; Floppy Drive Types:
137;
138;   0  Handled above
139;   1  FLOPPY_TYPE_525_DD          5 1/4   360K
140;   2  FLOPPY_TYPE_525_HD          5 1/4   1.2M
141;   3  FLOPPY_TYPE_35_DD           3 1/2   720K
142;   4  FLOPPY_TYPE_35_HD           3 1/2   1.44M
143;   5  3.5" ED on some BIOSes      3 1/2   2.88M
144;   6  FLOPPY_TYPE_35_ED           3 1/2   2.88M
145;   >6 Unknown, handled above
146;
147;--------------------------------------------------------------------
148.PrintKnownFloppyType:
149    mov     al, (g_szFddSize - $$) & 0xff
150    push    ax
151
152    mov     al, (g_szFddThreeHalf - $$) & 0xff
153    cmp     bl, FLOPPY_TYPE_525_HD
154    ja      .ThreeHalf
155    mov     al, (g_szFddFiveQuarter - $$) & 0xff
156.ThreeHalf:
157    push    ax                                          ; "5 1/4" or "3 1/2"
158
159    xor     bh, bh
160    mov     al,FloppyTypes.rgbCapacityMultiplier
161    mul     BYTE [cs:bx+FloppyTypes.rgbCapacity - 1]    ; -1 since 0 is handled above and not in the table
162
163.PushAXAndOutput:
164    push    ax
165
166.FormatRelay:
167    jmp     DetectPrint_FormatCSSIfromParamsInSSBP
168
169
170;--------------------------------------------------------------------
171; Prints Hard Disk Menuitem information strings.
172;
173; BootMenuPrint_HardDiskMenuitemInformation
174;   Parameters:
175;       DS:     RAMVARS segment
176;   Returns:
177;       CF:     Set since menu event was handled successfully
178;   Corrupts registers:
179;       BX, CX, DX, SI, DI, ES
180;--------------------------------------------------------------------
181.HardDiskRefreshInformation:
182    jc      .HardDiskMenuitemInfoForForeignDrive        ; Based on CF from FindDPT_ForDriveNumberInDL (way) above
183
184.HardDiskMenuitemInfoForOurDrive:
185    ePUSH_T ax, g_szInformation                         ; Add substring for our hard disk information
186    call    GetTotalSectorCount
187    jmp     .ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
188
189.HardDiskMenuitemInfoForForeignDrive:
190    call    DriveXlate_ToOrBack
191    call    AH15h_GetSectorCountFromForeignDriveToDXAX
192
193.ConvertSectorCountInBXDXAXtoSizeAndPushForFormat:
194    ePUSH_T cx, g_szCapacityNum     ; Push format substring
195    call    Size_ConvertSectorCountInBXDXAXtoKiB
196    mov     cx, BYTE_MULTIPLES.kiB
197    call    Size_GetSizeToAXAndCharToDLfromBXDXAXwithMagnitudeInCX
198    push    ax                      ; Size in magnitude
199    push    cx                      ; Tenths
200    push    dx                      ; Magnitude character
201
202    test    di, di                  ; Zero if foreign drive
203    jz      SHORT BootMenuPrint_RefreshInformation.FormatRelay
204
205%include "BootMenuPrintCfg.asm"         ; inline of code to fill out remainder of information string
206    jmp     DetectPrint_FormatCSSIfromParamsInSSBP
207
208
209FloppyTypes:
210.rgbCapacityMultiplier equ 20           ; Multiplier to reduce word sized values to byte size
211.rgbCapacity:
212    db      360   / FloppyTypes.rgbCapacityMultiplier    ;  type 1
213    db      1200  / FloppyTypes.rgbCapacityMultiplier    ;  type 2
214    db      720   / FloppyTypes.rgbCapacityMultiplier    ;  type 3
215    db      1440  / FloppyTypes.rgbCapacityMultiplier    ;  type 4
216    db      2880  / FloppyTypes.rgbCapacityMultiplier    ;  type 5
217    db      2880  / FloppyTypes.rgbCapacityMultiplier    ;  type 6
218
219
220;--------------------------------------------------------------------
221; GetTotalSectorCount
222;   Parameters:
223;       DS:DI:      DPT Pointer
224;   Returns:
225;       BX:DX:AX:   48-bit sector count
226;   Corrupts registers:
227;       CX
228;--------------------------------------------------------------------
229%ifdef MODULE_EBIOS
230GetTotalSectorCount     EQU     AccessDPT_GetLbaSectorCountToBXDXAX
231%else
232GetTotalSectorCount     EQU     AH15h_GetSectorCountToBXDXAX
233%endif
Note: See TracBrowser for help on using the repository browser.