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

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

Changes to XTIDE Universal BIOS:

  • Addressing modes are now NORMAL, LARGE and LBA.
  • L-CHS parameters are now generated differently for drives with 8192 or less cylinders.
File size: 7.5 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 mov si, ROMVARS.szTitle
79 call DetectPrint_NullTerminatedStringFromCSSIandSetCF
80 CALL_DISPLAY_LIBRARY PrintNewlineCharacters
81 mov si, ROMVARS.szVersion
82 jmp DetectPrint_NullTerminatedStringFromCSSIandSetCF
83
84
85;--------------------------------------------------------------------
86; BootMenuPrint_RefreshInformation
87; Parameters:
88; CX: Index of highlighted item
89; DS: RAMVARS segment
90; Returns:
91; CF: Set since menu event was handled successfully
92; Corrupts registers:
93; Does not matter
94;--------------------------------------------------------------------
95BootMenuPrint_RefreshInformation:
96 CALL_MENU_LIBRARY ClearInformationArea
97
98 call BootMenu_GetDriveToDXforMenuitemInCX
99 jnc BootMenuEvent_Completed ; if no menu selection, abort
100
101 push bp
102 mov bp, sp
103
104 mov si, g_szCapacity ; Setup print string now, carries through to print call
105
106 call FindDPT_ForDriveNumberInDL
107
108 inc dl ; are we a hard disk?
109 dec dl ; inc/dec will set SF, without modifying CF or DL
110 js .HardDiskRefreshInformation
111
112 jnc .ours ; Based on CF from FindDPT_ForDriveNumberInDL above
113 call FloppyDrive_GetType ; Get Floppy Drive type to BX
114 jmp .around
115.ours:
116 call AH8h_GetDriveParameters
117.around:
118
119 mov ax, g_szFddSizeOr ; .PrintXTFloppyType
120 test bl, bl ; Two possibilities? (FLOPPY_TYPE_525_OR_35_DD)
121 jz SHORT .PushAXAndOutput
122
123 mov al, (g_szFddUnknown - $$) & 0xff ; .PrintUnknownFloppyType
124 cmp bl, FLOPPY_TYPE_35_ED
125 ja SHORT .PushAXAndOutput
126
127 ; Fall to .PrintKnownFloppyType
128
129;--------------------------------------------------------------------
130; .PrintKnownFloppyType
131; Parameters:
132; BX: Floppy drive type
133; Returns:
134; CF: Set since menu event was handled successfully
135; Corrupts registers:
136; AX, BX, SI, DI
137;
138; Floppy Drive Types:
139;
140; 0 Handled above
141; 1 FLOPPY_TYPE_525_DD 5 1/4 360K
142; 2 FLOPPY_TYPE_525_HD 5 1/4 1.2M
143; 3 FLOPPY_TYPE_35_DD 3 1/2 720K
144; 4 FLOPPY_TYPE_35_HD 3 1/2 1.44M
145; 5 3.5" ED on some BIOSes 3 1/2 2.88M
146; 6 FLOPPY_TYPE_35_ED 3 1/2 2.88M
147; >6 Unknown, handled above
148;
149;--------------------------------------------------------------------
150.PrintKnownFloppyType:
151 mov al, (g_szFddSize - $$) & 0xff
152 push ax
153
154 mov al, (g_szFddThreeHalf - $$) & 0xff
155 cmp bl, FLOPPY_TYPE_525_HD
156 ja .ThreeHalf
157 mov al, (g_szFddFiveQuarter - $$) & 0xff
158.ThreeHalf:
159 push ax ; "5 1/4" or "3 1/2"
160
161 xor bh, bh
162 mov al,FloppyTypes.rgbCapacityMultiplier
163 mul BYTE [cs:bx+FloppyTypes.rgbCapacity - 1] ; -1 since 0 is handled above and not in the table
164
165.PushAXAndOutput:
166 push ax
167
168.FormatRelay:
169 jmp DetectPrint_FormatCSSIfromParamsInSSBP
170
171
172;--------------------------------------------------------------------
173; Prints Hard Disk Menuitem information strings.
174;
175; BootMenuPrint_HardDiskMenuitemInformation
176; Parameters:
177; DS: RAMVARS segment
178; Returns:
179; CF: Set since menu event was handled successfully
180; Corrupts registers:
181; BX, CX, DX, SI, DI, ES
182;--------------------------------------------------------------------
183.HardDiskRefreshInformation:
184 jc .HardDiskMenuitemInfoForForeignDrive ; Based on CF from FindDPT_ForDriveNumberInDL (way) above
185
186.HardDiskMenuitemInfoForOurDrive:
187 ePUSH_T ax, g_szInformation ; Add substring for our hard disk information
188 call GetTotalSectorCount
189 jmp .ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
190
191.HardDiskMenuitemInfoForForeignDrive:
192 call DriveXlate_ToOrBack
193 call AH15h_GetSectorCountFromForeignDriveToDXAX
194
195.ConvertSectorCountInBXDXAXtoSizeAndPushForFormat:
196 ePUSH_T cx, g_szCapacityNum ; Push format substring
197 call Size_ConvertSectorCountInBXDXAXtoKiB
198 mov cx, BYTE_MULTIPLES.kiB
199 call Size_GetSizeToAXAndCharToDLfromBXDXAXwithMagnitudeInCX
200 push ax ; Size in magnitude
201 push cx ; Tenths
202 push dx ; Magnitude character
203
204 test di, di ; Zero if foreign drive
205 jz SHORT BootMenuPrint_RefreshInformation.FormatRelay
206
207%include "BootMenuPrintCfg.asm" ; inline of code to fill out remainder of information string
208 jmp DetectPrint_FormatCSSIfromParamsInSSBP
209
210
211FloppyTypes:
212.rgbCapacityMultiplier equ 20 ; Multiplier to reduce word sized values to byte size
213.rgbCapacity:
214 db 360 / FloppyTypes.rgbCapacityMultiplier ; type 1
215 db 1200 / FloppyTypes.rgbCapacityMultiplier ; type 2
216 db 720 / FloppyTypes.rgbCapacityMultiplier ; type 3
217 db 1440 / FloppyTypes.rgbCapacityMultiplier ; type 4
218 db 2880 / FloppyTypes.rgbCapacityMultiplier ; type 5
219 db 2880 / FloppyTypes.rgbCapacityMultiplier ; type 6
220
221
222;--------------------------------------------------------------------
223; GetTotalSectorCount
224; Parameters:
225; DS:DI: DPT Pointer
226; Returns:
227; BX:DX:AX: 48-bit sector count
228; Corrupts registers:
229; CX
230;--------------------------------------------------------------------
231%ifdef MODULE_EBIOS
232GetTotalSectorCount EQU AccessDPT_GetLbaSectorCountToBXDXAX
233%else
234GetTotalSectorCount EQU AH15h_GetSectorCountToBXDXAX
235%endif
Note: See TracBrowser for help on using the repository browser.