source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuPrintCfg.asm@ 183

Last change on this file since 183 was 182, checked in by gregli@…, 13 years ago

General code size optimizations, preparing for string compression, consolidating all strings into strings.asm. Note that some changes resulted in slightly larger size now uncompressed, but will be net win when compressed.

File size: 5.7 KB
Line 
1; Project name : XTIDE Universal BIOS
2; Description : Functions for printing drive configuration
3; information on Boot Menu.
4
5; Section containing code
6SECTION .text
7
8;--------------------------------------------------------------------
9; Prints Hard Disk configuration for drive handled by our BIOS.
10; Cursor is set to configuration header string position.
11;
12; BootMenuPrintCfg_ForOurDrive
13; Parameters:
14; DS: Segment to DPT
15; Stack: Offset to DPT
16; Returns:
17; Nothing
18; Corrupts registers:
19; AX, BX, CX, DX, SI, DI
20;--------------------------------------------------------------------
21ALIGN JUMP_ALIGN
22BootMenuPrintCfg_ForOurDrive:
23 pop di
24 mov si, g_szCfgHeader
25 call BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
26 eMOVZX ax, BYTE [di+DPT.bIdevarsOffset]
27 xchg si, ax ; CS:SI now points to IDEVARS
28 ; Fall to PushAndFormatCfgString
29
30;--------------------------------------------------------------------
31; PushAndFormatCfgString
32; Parameters:
33; DS:DI: Ptr to DPT
34; CS:SI: Ptr to IDEVARS
35; Returns:
36; Nothing
37; Corrupts registers:
38; AX, DX, SI, DI
39;--------------------------------------------------------------------
40PushAndFormatCfgString:
41 push bp
42 mov bp, sp
43 ; Fall to first push below
44
45;--------------------------------------------------------------------
46; PushAddressingMode
47; Parameters:
48; DS:DI: Ptr to DPT
49; CS:SI: Ptr to IDEVARS
50; Returns:
51; Nothing (jumps to next push below)
52; Corrupts registers:
53; AX
54;--------------------------------------------------------------------
55PushAddressingMode:
56 call AccessDPT_GetAddressingModeForWordLookToBX
57 mov al,g_szAddressingModes_Displacement
58 mul bl
59 add ax,g_szAddressingModes
60 push ax
61;
62; Ensure that addressing modes are correctly spaced in memory
63;
64%if g_szLCHS <> g_szAddressingModes
65%error "g_szAddressingModes Displacement Incorrect 1"
66%endif
67%if g_szPCHS <> g_szLCHS + g_szAddressingModes_Displacement
68%error "g_szAddressingModes Displacement Incorrect 2"
69%endif
70%if g_szLBA28 <> g_szPCHS + g_szAddressingModes_Displacement
71%error "g_szAddressingModes Displacement Incorrect 3"
72%endif
73%if g_szLBA48 <> g_szLBA28 + g_szAddressingModes_Displacement
74%error "g_szAddressingModes Displacement Incorrect 4"
75%endif
76
77;--------------------------------------------------------------------
78; PushBlockMode
79; Parameters:
80; DS:DI: Ptr to DPT
81; CS:SI: Ptr to IDEVARS
82; Returns:
83; Nothing (falls to next push below)
84; Corrupts registers:
85; AX
86;--------------------------------------------------------------------
87PushBlockMode:
88 mov ax, 1
89 test BYTE [di+DPT.bFlagsHigh], FLGH_DPT_BLOCK_MODE_SUPPORTED
90 jz SHORT .PushBlockSizeFromAX
91 mov al, [di+DPT_ATA.bSetBlock]
92.PushBlockSizeFromAX:
93 push ax
94
95;--------------------------------------------------------------------
96; PushBusType
97; Parameters:
98; DS:DI: Ptr to DPT
99; CS:SI: Ptr to IDEVARS
100; Returns:
101; Nothing (jumps to next push below)
102; Corrupts registers:
103; AX, DX
104;--------------------------------------------------------------------
105;PushBusType:
106 mov al,g_szBusTypeValues_Displacement
107 mul BYTE [cs:si+IDEVARS.bDevice]
108 shr ax,1
109 add ax,g_szBusTypeValues
110 push ax
111
112;
113; Ensure that bus type strings are correctly spaced in memory
114;
115%if g_szBusTypeValues_8Dual <> g_szBusTypeValues
116%error "g_szBusTypeValues Displacement Incorrect 1"
117%endif
118%if g_szBusTypeValues_8Reversed <> g_szBusTypeValues + g_szBusTypeValues_Displacement
119%error "g_szBusTypeValues Displacement Incorrect 2"
120%endif
121%if g_szBusTypeValues_8Single <> g_szBusTypeValues_8Reversed + g_szBusTypeValues_Displacement
122%error "g_szBusTypeValues Displacement Incorrect 3"
123%endif
124%if g_szBusTypeValues_16 <> g_szBusTypeValues_8Single + g_szBusTypeValues_Displacement
125%error "g_szBusTypeValues Displacement Incorrect 4"
126%endif
127%if g_szBusTypeValues_32 <> g_szBusTypeValues_16 + g_szBusTypeValues_Displacement
128%error "g_szBusTypeValues Displacement Incorrect 5"
129%endif
130%if g_szBusTypeValues_Serial <> g_szBusTypeValues_32 + g_szBusTypeValues_Displacement
131%error "g_szBusTypeValues Displacement Incorrect 6"
132%endif
133
134;--------------------------------------------------------------------
135; PushIRQ
136; Parameters:
137; DS:DI: Ptr to DPT
138; CS:SI: Ptr to IDEVARS
139; Returns:
140; Nothing (falls to next push below)
141; Corrupts registers:
142; AX, DX
143;--------------------------------------------------------------------
144PushIRQ:
145 mov dl, ' ' ; Load space to DL
146 mov al, [cs:si+IDEVARS.bIRQ]
147 test al, al ; Interrupts disabled?
148 jz SHORT .PushIrqDisabled
149 add al, '0' ; Digit to ASCII
150 cmp al, '9' ; Only one digit needed?
151 jbe SHORT .PushCharacters
152
153 ; Two digits needed
154 sub al, 10 ; Limit to single digit ASCII
155 mov dl, '1' ; Load '1 to DX
156 jmp SHORT .PushCharacters
157ALIGN JUMP_ALIGN
158.PushIrqDisabled:
159 mov al, '-' ; Load line to AL
160 xchg ax, dx ; Space to AL, line to DL
161ALIGN JUMP_ALIGN
162.PushCharacters:
163 push dx
164 push ax
165
166;--------------------------------------------------------------------
167; PushResetStatus
168; Parameters:
169; DS:DI: Ptr to DPT
170; CS:SI: Ptr to IDEVARS
171; Returns:
172; Nothing (falls to next push below)
173; Corrupts registers:
174; AX
175;--------------------------------------------------------------------
176PushResetStatus:
177 mov al, [di+DPT.bFlagsHigh]
178 and ax, MASKH_DPT_RESET
179 push ax
180
181;--------------------------------------------------------------------
182; PrintValuesFromStack
183; Parameters:
184; Stack: All formatting parameters
185; Returns:
186; Nothing
187; Corrupts registers:
188; AX, SI, DI
189;--------------------------------------------------------------------
190PrintValuesFromStack:
191 mov si, g_szCfgFormat
192 jmp BootMenuPrint_FormatCSSIfromParamsInSSBP
193
Note: See TracBrowser for help on using the repository browser.