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

Last change on this file since 618 was 592, checked in by Krister Nordvall, 6 years ago

Changes:

  • The problem with NASM in the previous revision (r591) has been fixed.
  • The colors used by the boot menu and hotkey bar can now be customized by selecting one of a number of pre-defined color themes. Suggestions for additional themes are more than welcome!
  • Large builds are now 10 KB. Small builds are still 8 KB with the exception of the Tiny build which is now 4 KB. In other words, builds are now as small as possible to make it easier to combine them with other BIOSes.
  • Added code to the library to improve drive error handling. XTIDECFG can now handle "Drive Not Ready" errors.
  • Fixed a couple of potential bugs in AtaID.asm (AtaID_GetMaxPioModeToAXandMinCycleTimeToCX); 1) ATA1.bPioMode was treated as a WORD variable. 2) ATA2.bPIOSupp was assumed to be non-zero which would result in PIO mode 3 being returned if the assumption was wrong.
  • Made the same changes in the equivalent function used by BIOSDRVS (DisplayPioModeInformationUsingAtaInfoFromDSBX in AtaInfo.asm).
  • Fixed a bug from r587 in PDC20x30.asm in PDC20x30_GetMaxPioModeToALandMinPioCycleTimeToBX.
  • Fixed a bug from r523 in XTIDECFG where Auto Configure would only set the IRQ on one IDE interface on AT-builds.
  • XTIDECFG will now restore the default settings for the "Serial port virtual device" when reselecting it in the list of device types. This makes it behave consistently for all device types.
  • The eAAM macro is now used regardless if USE_UNDOC_INTEL is defined or not because it is apparently supported on all processors including the NEC V20/V30 CPUs.
  • Renamed the EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS define to EXCLUDE_FROM_XUB.
  • Added a define to exclude unused library code from BIOSDRVS (EXCLUDE_FROM_BIOSDRVS). This makes it a lot smaller than in previous revisions.
  • All unnecessary CLD-instructions are now under a new define 'CLD_NEEDED' which is only enabled for the BIOS. It is disabled for XTIDECFG and BIOSDRVS but can be enabled if needed by adding this define to the respective makefile. This change was made because these unnecessary instructions are wasteful and should never be needed. In fact, they only serve to hide bugs (in other peoples code) which I strongly believe should be avoided. I recommend people making their own BIOSes from source to not use this define as it's extremely unlikely to be needed.
  • Updated the copyright info in SerDrive and changed an URL to point to the new site.
  • Updated the copyright info and version number in BIOSDRVS.
  • Updated the copyright info in XTIDECFG.
  • Optimizations in general.
File size: 7.8 KB
RevLine 
[392]1; Project name : XTIDE Universal BIOS
2; Description : Functions for printing boot menu strings.
3
4;
[399]5; XTIDE Universal BIOS and Associated Tools
[526]6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
[392]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.
[399]12;
[392]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.
[399]17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18;
[392]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 push bp
36 mov bp, sp
37
[492]38 call BootMenu_GetDriveToDXforMenuitemInCX
39 mov si, g_szRomBootDash ; Standard "Rom Boot" but with a "-" at the front
40 mov al, 20h ; The space between "Rom" and "Boot"
[589]41 jnc SHORT .ROMBoot ; display "Rom Boot" option for last entry
[492]42
[392]43 call FindDPT_ForDriveNumberInDL
[589]44 jc SHORT .notOurs
[392]45
[397]46 call DriveDetectInfo_ConvertDPTtoBX
[392]47 mov si, g_szDriveNumBOOTNFO ; special g_szDriveNum that prints from BDA
[589]48 jmp SHORT .go
[392]49
50.notOurs:
[589]51 mov si, g_szDriveNum
52 mov bx, g_szForeignHD ; assume a hard disk for the moment
[392]53
54 test dl, dl
[589]55 js SHORT .go
[592]56 mov bl, (g_szFloppyDrv - $$) & 0xff ; and revisit the earlier assumption...
[392]57
58.go:
59 mov ax, dx ; preserve DL for the floppy drive letter addition
60 call DriveXlate_ToOrBack
[492]61
[589]62 cmp dl, 10h ; Check if there is a character in the upper nibble
63 sbb si, 0 ; If not, backup a character to a leading space
[492]64
[392]65 push dx ; translated drive number
66 push bx ; sub string
67 add al, 'A' ; floppy drive letter (we always push this although
[492]68 ; the hard disks don't ever use it, but it does no harm)
[526]69.ROMBoot:
70 push ax
[392]71
72 jmp SHORT BootMenuPrint_RefreshInformation.FormatRelay
73
74;--------------------------------------------------------------------
75; Prints Boot Menu title strings.
76;
77; BootMenuPrint_TitleStrings
78; Parameters:
79; Nothing
80; Returns:
81; CF: Set since menu event handled
82; Corrupts registers:
83; AX, SI, DI
84;--------------------------------------------------------------------
85BootMenuPrint_TitleStrings:
[589]86 xor di, di ; Null character will be eaten
[489]87 mov si, g_szBootMenuTitle
88 jmp DetectPrint_RomFoundAtSegment.BootMenuEntry
[392]89
[491]90
[392]91;--------------------------------------------------------------------
92; BootMenuPrint_RefreshInformation
93; Parameters:
94; CX: Index of highlighted item
95; DS: RAMVARS segment
96; Returns:
97; CF: Set since menu event was handled successfully
98; Corrupts registers:
99; Does not matter
100;--------------------------------------------------------------------
101BootMenuPrint_RefreshInformation:
102 CALL_MENU_LIBRARY ClearInformationArea
103
104 call BootMenu_GetDriveToDXforMenuitemInCX
[589]105 jnc SHORT BootMenuEvent_Completed ; nothing to display if "Rom Boot" option
[392]106
107 push bp
108 mov bp, sp
109
110 mov si, g_szCapacity ; Setup print string now, carries through to print call
111
112 call FindDPT_ForDriveNumberInDL
113
114 inc dl ; are we a hard disk?
115 dec dl ; inc/dec will set SF, without modifying CF or DL
[589]116 js SHORT .HardDiskRefreshInformation
[392]117
[589]118 jnc SHORT .ours ; Based on CF from FindDPT_ForDriveNumberInDL above
[392]119 call FloppyDrive_GetType ; Get Floppy Drive type to BX
[589]120 jmp SHORT .around
[392]121.ours:
122 call AH8h_GetDriveParameters
123.around:
124
[567]125 mov ax, g_szFddSizeOr ; .PrintXTFloppyType
[392]126 test bl, bl ; Two possibilities? (FLOPPY_TYPE_525_OR_35_DD)
127 jz SHORT .PushAXAndOutput
128
[567]129 mov al, (g_szFddUnknown - $$) & 0xff ; .PrintUnknownFloppyType
[392]130 cmp bl, FLOPPY_TYPE_35_ED
131 ja SHORT .PushAXAndOutput
132 ; Fall to .PrintKnownFloppyType
133
134;--------------------------------------------------------------------
135; .PrintKnownFloppyType
136; Parameters:
137; BX: Floppy drive type
138; Returns:
139; CF: Set since menu event was handled successfully
140; Corrupts registers:
141; AX, BX, SI, DI
142;
143; Floppy Drive Types:
144;
[567]145; 0 Handled above
146; 1 FLOPPY_TYPE_525_DD 5 1/4 360K
147; 2 FLOPPY_TYPE_525_HD 5 1/4 1.2M
148; 3 FLOPPY_TYPE_35_DD 3 1/2 720K
149; 4 FLOPPY_TYPE_35_HD 3 1/2 1.44M
150; 5 3.5" ED on some BIOSes 3 1/2 2.88M
151; 6 FLOPPY_TYPE_35_ED 3 1/2 2.88M
152; >6 Unknown, handled above
[392]153;
154;--------------------------------------------------------------------
155.PrintKnownFloppyType:
156 mov al, (g_szFddSize - $$) & 0xff
157 push ax
158
159 mov al, (g_szFddThreeHalf - $$) & 0xff
160 cmp bl, FLOPPY_TYPE_525_HD
[589]161 ja SHORT .ThreeHalf
[392]162 mov al, (g_szFddFiveQuarter - $$) & 0xff
163.ThreeHalf:
164 push ax ; "5 1/4" or "3 1/2"
165
[399]166 xor bh, bh
[589]167 mov al, FloppyTypes.rgbCapacityMultiplier
[567]168 mul BYTE [cs:bx+FloppyTypes.rgbCapacity - 1] ; -1 since 0 is handled above and not in the table
[392]169
170.PushAXAndOutput:
171 push ax
172
173.FormatRelay:
174 jmp DetectPrint_FormatCSSIfromParamsInSSBP
175
176
177;--------------------------------------------------------------------
178; Prints Hard Disk Menuitem information strings.
179;
180; BootMenuPrint_HardDiskMenuitemInformation
181; Parameters:
182; DS: RAMVARS segment
[589]183; DI: Zero if foreign drive
184; Offset to DPT if our drive
185; CF: Set if foreign drive
186; Clear if our drive
[392]187; Returns:
188; CF: Set since menu event was handled successfully
189; Corrupts registers:
[589]190; AX, BX, CX, DX, SI, DI, ES
[392]191;--------------------------------------------------------------------
192.HardDiskRefreshInformation:
[589]193 jc SHORT .HardDiskMenuitemInfoForForeignDrive ; Based on CF from FindDPT_ForDriveNumberInDL (way) above
[392]194
195.HardDiskMenuitemInfoForOurDrive:
196 ePUSH_T ax, g_szInformation ; Add substring for our hard disk information
197
[589]198%ifdef MODULE_EBIOS
199 ePUSH_T ax, .ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
200 test BYTE [di+DPT.bFlagsLow], FLGL_DPT_LBA
201%ifdef USE_386
202 jnz AccessDPT_GetLbaSectorCountToBXDXAX
203 jmp AH15h_GetSectorCountToBXDXAX
204%else ; ~USE_386
205 jz SHORT .NoLBA
206 jmp AccessDPT_GetLbaSectorCountToBXDXAX
207.NoLBA:
208 jmp AH15h_GetSectorCountToBXDXAX
209%endif
210%else ; ~MODULE_EBIOS
211 call AH15h_GetSectorCountToBXDXAX
212 jmp SHORT .ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
213%endif ; MODULE_EBIOS
214
[392]215.HardDiskMenuitemInfoForForeignDrive:
216 call DriveXlate_ToOrBack
[583]217 call AH15h_GetSectorCountFromForeignDriveToBXDXAX
[392]218
219.ConvertSectorCountInBXDXAXtoSizeAndPushForFormat:
220 ePUSH_T cx, g_szCapacityNum ; Push format substring
221 call Size_ConvertSectorCountInBXDXAXtoKiB
222 mov cx, BYTE_MULTIPLES.kiB
223 call Size_GetSizeToAXAndCharToDLfromBXDXAXwithMagnitudeInCX
224 push ax ; Size in magnitude
225 push cx ; Tenths
226 push dx ; Magnitude character
227
[421]228 test di, di ; Zero if foreign drive
[392]229 jz SHORT BootMenuPrint_RefreshInformation.FormatRelay
230
[491]231%include "BootMenuPrintCfg.asm" ; Inline of code to fill out remainder of information string
[392]232 jmp DetectPrint_FormatCSSIfromParamsInSSBP
233
234
235FloppyTypes:
[491]236.rgbCapacityMultiplier equ 120 ; Multiplier to reduce word sized values to byte size
[392]237.rgbCapacity:
238 db 360 / FloppyTypes.rgbCapacityMultiplier ; type 1
239 db 1200 / FloppyTypes.rgbCapacityMultiplier ; type 2
240 db 720 / FloppyTypes.rgbCapacityMultiplier ; type 3
241 db 1440 / FloppyTypes.rgbCapacityMultiplier ; type 4
242 db 2880 / FloppyTypes.rgbCapacityMultiplier ; type 5
243 db 2880 / FloppyTypes.rgbCapacityMultiplier ; type 6
Note: See TracBrowser for help on using the repository browser.