source: xtideuniversalbios/trunk/Assembly_Library/Src/Menu/MenuInit.asm@ 578

Last change on this file since 578 was 532, checked in by krille_n_@…, 11 years ago

Changes:

  • Changed unused.pl to remove a false positive when MODULE_STRINGS_COMPRESSED is not included ('loop PrependOrAppendSpaces' in DisplayFormat.asm).
  • XTIDECFG: Moved the contents of all text files under Help into Strings.asm to simplify editing and to avoid them being "out of sight and forgotten", essentially making it easier to keep strings up to date. Also made changes to some strings in the process (spelling mistakes etc).
  • Other minor fixes and optimizations to the BIOS.
File size: 6.3 KB
RevLine 
[41]1; Project name : Assembly Library
2; Description : Functions for initializing menu system.
3
[376]4;
[526]5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
[376]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.
[526]12;
[376]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
[526]16; GNU General Public License for more details.
[376]17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18;
19
[526]20
[41]21; Section containing code
22SECTION .text
23
24;--------------------------------------------------------------------
25; MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX
26; Parameters
27; DX:AX: User specified data
28; BX: Menu event handler
29; Returns:
30; AX: Index of selected item or NO_ITEM_SELECTED
31; Corrupts registers:
32; All except segments
33;--------------------------------------------------------------------
[369]34ALIGN MENU_JUMP_ALIGN
[41]35MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX:
36 push es
37 push ds
[390]38 xchg cx, ax ; Backup user data
39 CALL_DISPLAY_LIBRARY PushDisplayContext
[41]40
[390]41 ; Create MENU struct to stack
42 mov ax, MENU_size
43 eENTER_STRUCT ax
44 xchg ax, cx ; Restore user data to AX
[46]45 call Memory_ZeroSSBPwithSizeInCX
[390]46
47 ; Display menu
[391]48 call MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX
[390]49
50 ; Get menu selection and destroy menu variables from stack
[129]51 mov dx, [bp+MENUINIT.wHighlightedItem]
[390]52 eLEAVE_STRUCT MENU_size
[41]53
[390]54 CALL_DISPLAY_LIBRARY PopDisplayContext
[129]55 xchg ax, dx ; Return highlighted item in AX
[41]56 pop ds
57 pop es
58 ret
59
60
61;--------------------------------------------------------------------
[390]62; EnterMenuWithHandlerInBXandUserDataInDXAX
[41]63; Parameters
64; DX:AX: User specified data
65; BX: Menu event handler
66; SS:BP: Ptr to MENU
67; Returns:
68; Nothing
69; Corrupts registers:
70; All, except SS:BP
71;--------------------------------------------------------------------
[369]72ALIGN MENU_JUMP_ALIGN
[391]73MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX:
[41]74 mov [bp+MENU.fnEventHandler], bx
75 mov [bp+MENU.dwUserData], ax
76 mov [bp+MENU.dwUserData+2], dx
77
78 mov ax, CURSOR_HIDDEN
79 CALL_DISPLAY_LIBRARY SetCursorShapeFromAX
[104]80 call MenuEvent_InitializeMenuinit ; User initialization
[133]81%ifndef USE_186
[41]82 call MenuInit_RefreshMenuWindow
83 jmp MenuLoop_Enter
[133]84%else
85 push MenuLoop_Enter
86 ; Fall to MenuInit_RefreshMenuWindow
87%endif
[41]88
89
90;--------------------------------------------------------------------
91; MenuInit_RefreshMenuWindow
92; Parameters
93; SS:BP: Ptr to MENU
94; Returns:
95; Nothing
96; Corrupts registers:
97; AX, BX, CX, DX, SI, DI
98;--------------------------------------------------------------------
[369]99ALIGN MENU_JUMP_ALIGN
[41]100MenuInit_RefreshMenuWindow:
101 call MenuBorders_RefreshAll ; Draw borders
102 call MenuText_RefreshTitle ; Draw title strings
103 call MenuText_RefreshAllItems ; Draw item strings
[116]104 jmp MenuText_RefreshInformation ; Draw information strings
[41]105
106
107;--------------------------------------------------------------------
[205]108; MenuInit_CloseMenuIfExitEventAllows
109; Parameters
110; SS:BP: Ptr to MENU
111; Returns:
112; Nothing
113; Corrupts registers:
114; AX, BX, DX
115;--------------------------------------------------------------------
116%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[369]117ALIGN MENU_JUMP_ALIGN
[205]118MenuInit_CloseMenuIfExitEventAllows:
119 call MenuEvent_ExitMenu
120 jc SHORT MenuInit_CloseMenuWindow
121 ret
122%endif
123
124
125;--------------------------------------------------------------------
[41]126; MenuInit_CloseMenuWindow
127; Parameters
128; SS:BP: Ptr to MENU
129; Returns:
130; Nothing
131; Corrupts registers:
132; Nothing
133;--------------------------------------------------------------------
[369]134ALIGN MENU_JUMP_ALIGN
[41]135MenuInit_CloseMenuWindow:
136 or BYTE [bp+MENU.bFlags], FLG_MENU_EXIT
137 ret
138
[526]139
140%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[41]141;--------------------------------------------------------------------
142; MenuInit_HighlightItemFromAX
143; Parameters
144; AX: Item to highlight
145; SS:BP: Ptr to MENU
146; Returns:
147; Nothing
148; Corrupts registers:
149; AX, BX, CX, DX, SI, DI
150;--------------------------------------------------------------------
[369]151ALIGN MENU_JUMP_ALIGN
[41]152MenuInit_HighlightItemFromAX:
[52]153 sub ax, [bp+MENUINIT.wHighlightedItem]
[41]154 jmp MenuScrollbars_MoveHighlightedItemByAX
155
[526]156
[48]157;--------------------------------------------------------------------
158; MenuInit_GetHighlightedItemToAX
159; Parameters
160; SS:BP: Ptr to MENU
161; Returns:
162; AX: Index of highlighted item or NO_ITEM_HIGHLIGHTED
163; Corrupts registers:
164; Nothing
165;--------------------------------------------------------------------
[369]166ALIGN MENU_JUMP_ALIGN
[48]167MenuInit_GetHighlightedItemToAX:
[52]168 mov ax, [bp+MENUINIT.wHighlightedItem]
[48]169 ret
[532]170%endif ; EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[41]171
[48]172
[41]173;--------------------------------------------------------------------
174; MenuInit_SetTitleHeightFromAL
175; MenuInit_SetInformationHeightFromAL
176; MenuInit_SetTotalItemsFromAX
177; Parameters
178; AX/AL: Parameter
179; SS:BP: Ptr to MENU
180; Returns:
181; Nothing
182; Corrupts registers:
183; Nothing
184;--------------------------------------------------------------------
[133]185%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[369]186ALIGN MENU_JUMP_ALIGN
[41]187MenuInit_SetTitleHeightFromAL:
188 mov [bp+MENUINIT.bTitleLines], al
189 ret
190
[369]191ALIGN MENU_JUMP_ALIGN
[41]192MenuInit_SetInformationHeightFromAL:
193 mov [bp+MENUINIT.bInfoLines], al
194 ret
195
[369]196ALIGN MENU_JUMP_ALIGN
[41]197MenuInit_SetTotalItemsFromAX:
198 mov [bp+MENUINIT.wItems], ax
199 ret
[133]200%endif
[41]201
202
203;--------------------------------------------------------------------
204; MenuInit_SetUserDataFromDSSI
205; MenuInit_GetUserDataToDSSI
206; Parameters
207; DS:SI: User data (MenuInit_SetUserDataFromDSSI)
208; SS:BP: Ptr to MENU
209; Returns:
210; DS:SI: User data (MenuInit_GetUserDataToDSSI)
211; Corrupts registers:
212; Nothing
213;--------------------------------------------------------------------
[133]214%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[369]215ALIGN MENU_JUMP_ALIGN
[41]216MenuInit_SetUserDataFromDSSI:
217 mov [bp+MENU.dwUserData], si
218 mov [bp+MENU.dwUserData+2], ds
219 ret
220
[369]221ALIGN MENU_JUMP_ALIGN
[41]222MenuInit_GetUserDataToDSSI:
223 lds si, [bp+MENU.dwUserData]
224 ret
[133]225%endif
Note: See TracBrowser for help on using the repository browser.