source: xtideuniversalbios/trunk/Configurator/Src/MenuPageItemFormat.asm@ 304

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

Commit 1/2 (Library, Configurators and Serial Server):

  • Changed Emulate.inc so that making 286 and 386 versions now works. Additionally, only one processor type define is needed in the makefile.
  • Minor optimizations.
  • Fixed spelling and did some cleaning.
File size: 7.6 KB
RevLine 
[293]1; Project name : XTIDE Universal BIOS Configurator
2; Description : Functions for formatting
[2]3; menuitem names from MENUPAGEITEM.
4
5; Section containing code
6SECTION .text
7
8;--------------------------------------------------------------------
9; Prints lookup string for index values.
10;
11; MenuPageItemFormat_LookupString
12; Parameters:
13; DS:DI: Ptr to MENUPAGEITEM
14; Returns:
15; Nothing
16; Corrupts registers:
17; AX, BX, DX, SI
18;--------------------------------------------------------------------
19ALIGN JUMP_ALIGN
20MenuPageItemFormat_LookupString:
21 mov si, [di+MENUPAGEITEM.rgszLookup] ; Load offset to string lookup table
22 mov bx, [di+MENUPAGEITEM.pValue] ; Ptr to value containing lookup index
[293]23 eMOVZX bx, [bx] ; BX=lookup index (values are already shifted for WORD lookup)
[2]24 push WORD [bx+si] ; Push offset to string to print
25 mov dh, 4 ; Total of 4 bytes for formatting params
26 mov si, .szStringName ; Offset to format string
27 jmp MenuPageItemFormat_NameWithParamsPushed
28.szStringName: db "+%22s[%7s]",STOP
29
30
31;--------------------------------------------------------------------
32; Prints menuitem name for any MENUPAGEITEM.
33;
34; MenuPageItemFormat_NameForAnyType
35; Parameters:
36; DS:DI: Ptr to MENUPAGEITEM
37; Returns:
38; Nothing
39; Corrupts registers:
40; AX, BX, DX, SI
41;--------------------------------------------------------------------
42ALIGN JUMP_ALIGN
43MenuPageItemFormat_NameForAnyType:
[293]44 eMOVZX bx, [di+MENUPAGEITEM.bType] ; Load menuitem type
[2]45 jmp [cs:bx+.rgfnPrintBasedOnType]
46ALIGN WORD_ALIGN
47.rgfnPrintBasedOnType:
48 dw MenuPageItemFormat_NameForBackToPreviousSubmenu ; TYPE_MENUPAGEITEM_BACK
49 dw MenuPageItemFormat_NameForNextSubmenu ; TYPE_MENUPAGEITEM_NEXT
50 dw MenuPageItemFormat_NameForSpecialFunction ; TYPE_MENUPAGEITEM_SPECIAL
51 dw MenuPageItemFormat_NameWithUnsignedByteValue ; TYPE_MENUPAGEITEM_UNSIGNED_BYTE
52 dw MenuPageItemFormat_NameWithUnsignedWordValue ; TYPE_MENUPAGEITEM_UNSIGNED_WORD
53 dw MenuPageItemFormat_NameWithByteHexadecimalValue ; TYPE_MENUPAGEITEM_HEX_BYTE
54 dw MenuPageItemFormat_NameWithWordHexadecimalValue ; TYPE_MENUPAGEITEM_HEX_WORD
55 dw MenuPageItemFormat_NameWithFlagValue ; TYPE_MENUPAGEITEM_FLAG
56
57
58;--------------------------------------------------------------------
59; Prints "Back to previous menu" menuitem.
60;
61; MenuPageItemFormat_NameForBackToPreviousSubmenu
62; Parameters:
63; DS:DI: Ptr to MENUPAGEITEM
64; Returns:
65; Nothing
66; Corrupts registers:
67; AX, BX, DX
68;--------------------------------------------------------------------
69ALIGN JUMP_ALIGN
70MenuPageItemFormat_NameForBackToPreviousSubmenu:
71 mov dh, 2 ; Total of 2 bytes for formatting params
72 mov si, .szPrevMenu ; Offset to format string
73 jmp MenuPageItemFormat_NameWithParamsPushed
74.szPrevMenu: db "-%32s",STOP
75
76
77;--------------------------------------------------------------------
78; Prints menuitem name for menuitem that opens new submenu.
79;
80; MenuPageItemFormat_NameForNextSubmenu
81; Parameters:
82; DS:DI: Ptr to MENUPAGEITEM
83; Returns:
84; Nothing
85; Corrupts registers:
86; AX, DX, SI
87;--------------------------------------------------------------------
88ALIGN JUMP_ALIGN
89MenuPageItemFormat_NameForNextSubmenu:
90 mov dh, 2 ; Total of 2 bytes for formatting params
91 mov si, .szNextMenu ; Offset to format string
92 jmp MenuPageItemFormat_NameWithParamsPushed
93.szNextMenu: db "+%32s",STOP
94
95
96;--------------------------------------------------------------------
97; Prints menuitem name for menuitem with special function.
98;
99; MenuPageItemFormat_NameForSpecialFunction
100; Parameters:
101; DS:DI: Ptr to MENUPAGEITEM
102; Returns:
103; Nothing
104; Corrupts registers:
105; AX, DX, SI
106;--------------------------------------------------------------------
107ALIGN JUMP_ALIGN
108MenuPageItemFormat_NameForSpecialFunction:
109 mov dh, 2 ; Total of 2 bytes for formatting params
110 mov si, .szSpecial ; Offset to format string
111 jmp MenuPageItemFormat_NameWithParamsPushed
112.szSpecial: db "*%32s",STOP
113
114
115;--------------------------------------------------------------------
116; Prints menuitem name with unsigned integer value.
117;
118; MenuPageItemFormat_NameWithUnsignedByteValue
119; MenuPageItemFormat_NameWithUnsignedWordValue
120; Parameters:
121; DS:DI: Ptr to MENUPAGEITEM
122; Returns:
123; Nothing
124; Corrupts registers:
125; AX, DX, SI
126;--------------------------------------------------------------------
127ALIGN JUMP_ALIGN
128MenuPageItemFormat_NameWithUnsignedByteValue:
129 mov si, [di+MENUPAGEITEM.pValue] ; DS:SI points to value
[293]130 eMOVZX ax, [si] ; Load byte to AX
[2]131 push ax ; Push byte
132 jmp SHORT MenuPageItemFormat_NameWithUnsignedValuePushed
133ALIGN JUMP_ALIGN
134MenuPageItemFormat_NameWithUnsignedWordValue:
135 mov si, [di+MENUPAGEITEM.pValue] ; DS:SI points to value
136 push WORD [si] ; Push integer value
137MenuPageItemFormat_NameWithUnsignedValuePushed:
138 mov dh, 4 ; Total of 4 bytes for formatting params
139 mov si, .szIntegerName ; Offset to format string
140 jmp SHORT MenuPageItemFormat_NameWithParamsPushed
141.szIntegerName: db "%25s[%5u]",STOP
142
143
144;--------------------------------------------------------------------
145; Prints menuitem name with hexadecimal value.
146;
147; MenuPageItemFormat_NameWithByteHexadecimalValue
148; MenuPageItemFormat_NameWithWordHexadecimalValue
149; Parameters:
150; DS:DI: Ptr to MENUPAGEITEM
151; Returns:
152; Nothing
153; Corrupts registers:
154; AX, DX, SI
155;--------------------------------------------------------------------
156ALIGN JUMP_ALIGN
157MenuPageItemFormat_NameWithByteHexadecimalValue:
158 mov si, [di+MENUPAGEITEM.pValue] ; DS:SI points to value
[293]159 eMOVZX ax, [si] ; Load byte to AX
[2]160 push ax ; Push byte
161 jmp SHORT MenuPageItemFormat_NameWithHexadecimalValuePushed
162ALIGN JUMP_ALIGN
163MenuPageItemFormat_NameWithWordHexadecimalValue:
164 mov si, [di+MENUPAGEITEM.pValue] ; DS:SI points to value
165 push WORD [si] ; Push hexadecimal value
166MenuPageItemFormat_NameWithHexadecimalValuePushed:
167 mov dh, 4 ; Total of 4 bytes for formatting params
168 mov si, .szHexName ; Offset to format string
169 jmp SHORT MenuPageItemFormat_NameWithParamsPushed
170.szHexName: db "%25s[%5x]",STOP
171
172
173;--------------------------------------------------------------------
174; Prints menuitem name with Y/N flag value.
175;
176; MenuPageItemFormat_NameWithFlagValue
177; Parameters:
178; DS:DI: Ptr to MENUPAGEITEM
179; Returns:
180; Nothing
181; Corrupts registers:
182; AX, DX, SI
183;--------------------------------------------------------------------
184ALIGN JUMP_ALIGN
185MenuPageItemFormat_NameWithFlagValue:
186 mov dx, 044Eh ; DH=4 bytes in stack, DL='N'
187 mov si, [di+MENUPAGEITEM.pValue] ; DS:SI points to value
188 mov ax, [si] ; Load value
189 test ax, [di+MENUPAGEITEM.wValueMask] ; Flag set?
190 jz SHORT .PushFlagValueChar
191 mov dl, 'Y'
192.PushFlagValueChar:
193 push dx
194 mov si, .szFlagName ; Offset to format string
195 jmp SHORT MenuPageItemFormat_NameWithParamsPushed
196.szFlagName: db "%25s[%5c]",STOP
197
198
199;--------------------------------------------------------------------
200; Prints formatted menuitem name.
201;
202; MenuPageItemFormat_NameWithParamsPushed
203; Parameters:
204; DH: Number of bytes pushed to stack + 2 for name string
205; SI: Offset to formatting string
206; DS:DI: Ptr to MENUPAGEITEM
207; DS: String segment
208; Stack: Formatting parameters except menuitem name
209; Returns:
210; Nothing
211; Corrupts registers:
212; AX, SI
213;--------------------------------------------------------------------
214ALIGN JUMP_ALIGN
215MenuPageItemFormat_NameWithParamsPushed:
216 push WORD [di+MENUPAGEITEM.szName]
217 mov dl, ' ' ; Min length character
218 call Print_Format
219 eMOVZX ax, dh
220 add sp, ax ; Clear format parameters from stack
221 ret
Note: See TracBrowser for help on using the repository browser.