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

Last change on this file since 181 was 181, checked in by krille_n_@…, 13 years ago

Changes to all parts of the project:

  • Size optimizations.
  • Added a define (EXCLUDE_FROM_XTIDECFG) to exclude unused library code from XTIDECFG.
  • Tried to minimize time spent with interrupts disabled.
  • Some minor attempts to improve speed (reordering instructions etc).
  • Tried to improve readability, did some cleanup and fixed some errors in comments.
File size: 4.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 push WORD [cs:bx+rgszAddressingModeString]
58
59;--------------------------------------------------------------------
60; PushBlockMode
61; Parameters:
62; DS:DI: Ptr to DPT
63; CS:SI: Ptr to IDEVARS
64; Returns:
65; Nothing (falls to next push below)
66; Corrupts registers:
67; AX
68;--------------------------------------------------------------------
69PushBlockMode:
70 mov ax, 1
71 test BYTE [di+DPT.bFlagsHigh], FLGH_DPT_BLOCK_MODE_SUPPORTED
72 jz SHORT .PushBlockSizeFromAX
73 mov al, [di+DPT_ATA.bSetBlock]
74.PushBlockSizeFromAX:
75 push ax
76
77;--------------------------------------------------------------------
78; PushBusType
79; Parameters:
80; DS:DI: Ptr to DPT
81; CS:SI: Ptr to IDEVARS
82; Returns:
83; Nothing (jumps to next push below)
84; Corrupts registers:
85; AX, DX
86;--------------------------------------------------------------------
87;PushBusType:
88 cwd ; Clear DX using sign extension
89 xchg ax, bx ; Store BX to AX
90 eMOVZX bx, BYTE [cs:si+IDEVARS.bDevice]
91 mov bx, [cs:bx+rgwBusTypeValues] ; Char to BL, Int to BH
92 mov dl, bh
93 push bx ; Push character
94 push dx ; Push 1, 8, 16 or 32
95 xchg bx, ax ; Restore BX
96
97;--------------------------------------------------------------------
98; PushIRQ
99; Parameters:
100; DS:DI: Ptr to DPT
101; CS:SI: Ptr to IDEVARS
102; Returns:
103; Nothing (falls to next push below)
104; Corrupts registers:
105; AX, DX
106;--------------------------------------------------------------------
107PushIRQ:
108 mov dl, ' ' ; Load space to DL
109 mov al, [cs:si+IDEVARS.bIRQ]
110 test al, al ; Interrupts disabled?
111 jz SHORT .PushIrqDisabled
112 add al, '0' ; Digit to ASCII
113 cmp al, '9' ; Only one digit needed?
114 jbe SHORT .PushCharacters
115
116 ; Two digits needed
117 sub al, 10 ; Limit to single digit ASCII
118 mov dl, '1' ; Load '1 to DX
119 jmp SHORT .PushCharacters
120ALIGN JUMP_ALIGN
121.PushIrqDisabled:
122 mov al, '-' ; Load line to AL
123 xchg ax, dx ; Space to AL, line to DL
124ALIGN JUMP_ALIGN
125.PushCharacters:
126 push dx
127 push ax
128
129;--------------------------------------------------------------------
130; PushResetStatus
131; Parameters:
132; DS:DI: Ptr to DPT
133; CS:SI: Ptr to IDEVARS
134; Returns:
135; Nothing (falls to next push below)
136; Corrupts registers:
137; AX
138;--------------------------------------------------------------------
139PushResetStatus:
140 mov al, [di+DPT.bFlagsHigh]
141 and ax, MASKH_DPT_RESET
142 push ax
143
144;--------------------------------------------------------------------
145; PrintValuesFromStack
146; Parameters:
147; Stack: All formatting parameters
148; Returns:
149; Nothing
150; Corrupts registers:
151; AX, SI, DI
152;--------------------------------------------------------------------
153PrintValuesFromStack:
154 mov si, g_szCfgFormat
155 jmp BootMenuPrint_FormatCSSIfromParamsInSSBP
156
157
158ALIGN WORD_ALIGN
159rgszAddressingModeString:
160 dw g_szLCHS
161 dw g_szPCHS
162 dw g_szLBA28
163 dw g_szLBA48
164
165rgwBusTypeValues:
166 db 'D', 8 ; DEVICE_8BIT_DUAL_PORT_XTIDE
167 db 'X', 8 ; DEVICE_XTIDE_WITH_REVERSED_A3_AND_A0
168 db 'S', 8 ; DEVICE_8BIT_SINGLE_PORT
169 db ' ', 16 ; DEVICE_16BIT_ATA
170 db ' ', 32 ; DEVICE_32BIT_ATA
171 db ' ', 1 ; DEVICE_SERIAL_PORT
Note: See TracBrowser for help on using the repository browser.