source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Menus/BootMenu/BootMenuEvent.asm@ 492

Last change on this file since 492 was 492, checked in by gregli@…, 12 years ago

Removed the dependency between MODULE_BOOT_MENU and MODULE_HOTKEYS. With these changes, 0, 1, or 2 of them can be included in a build. This change also means that the hotkeys don't work while the menu is up. But the most important hotkey there was for Rom Boot, and that has been added to the menu as a choice proper. Lots of changes across the board in the hotkeys code - even if we eventually back this change out (becaue, for example we want hotkeys to work in the menu) we should probably start from this base and add that functionality back in, as these changes results in approximately 120 bytes of savings and includes new functionality, such as the Rom Boot menu item and the Com Detect hotkey.

File size: 7.2 KB
Line 
1; Project name : XTIDE Universal BIOS
2; Description : Boot Menu event handler for menu library callbacks.
3
4;
5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 by XTIDE Universal BIOS Team.
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.
12;
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.
17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18;
19
20; Section containing code
21SECTION .text
22
23;--------------------------------------------------------------------
24; GetMenuitemToDXforDriveInDL
25; Parameters:
26; DL: Drive number
27; Returns:
28; DX: Menuitem index (assuming drive is available)
29; Corrupts registers:
30; AX
31;--------------------------------------------------------------------
32GetMenuitemToDXforDriveInDL:
33 xor dh, dh ; Drive number now in DX
34 test dl, dl
35 jns SHORT .ReturnItemIndexInDX ; Return if floppy drive (HD bit not set)
36 call FloppyDrive_GetCountToAX
37 and dl, ~80h ; Clear HD bit
38 add dx, ax
39.ReturnItemIndexInDX:
40 ret
41
42
43;--------------------------------------------------------------------
44; BootMenuEvent_Handler
45; Common parameters for all events:
46; BX: Menu event (anything from MENUEVENT struct)
47; SS:BP: Menu library handle
48; Common return values for all events:
49; CF: Set if event processed
50; Cleared if event not processed
51; Corrupts registers:
52; All
53;--------------------------------------------------------------------
54BootMenuEvent_Handler:
55 LOAD_BDA_SEGMENT_TO es, di
56 call RamVars_GetSegmentToDS
57
58%ifdef MENUEVENT_INLINE_OFFSETS
59
60 add bx, FirstEvent
61 jmp bx
62
63.EventNotHandled:
64.DoNotSetDefaultMenuitem:
65 xor dx, dx ; Clear CF (and menuitem index for DoNotSetDefaultMenuitem)
66 ret
67
68MENUEVENT_InitializeMenuinitFromDSSI equ (EventInitializeMenuinitFromSSBP - FirstEvent)
69MENUEVENT_ExitMenu equ (BootMenuEvent_Completed - FirstEvent)
70MENUEVENT_ItemHighlightedFromCX equ (EventItemHighlightedFromCX - FirstEvent)
71MENUEVENT_ItemSelectedFromCX equ (EventItemSelectedFromCX - FirstEvent)
72MENUEVENT_RefreshTitle equ (BootMenuPrint_TitleStrings - FirstEvent)
73MENUEVENT_RefreshInformation equ (BootMenuPrint_RefreshInformation - FirstEvent)
74MENUEVENT_RefreshItemFromCX equ (BootMenuPrint_RefreshItem - FirstEvent)
75;
76; Note that there is no entry for MENUEVENT_IdleProcessing. If MENUEVENT_IDLEPROCESSING_ENABLE is not %defined,
77; then the entry point will not be called (saving memory on this end and at the CALL point).
78;
79
80%else
81
82 cmp bx, BYTE MENUEVENT.RefreshItemFromCX ; Above last supported item?
83 ja SHORT .EventNotHandled
84 jmp [cs:bx+rgfnEventSpecificHandlers]
85
86.EventNotHandled:
87.DoNotSetDefaultMenuitem:
88 xor dx, dx ; Clear CF (and menuitem index for DoNotSetDefaultMenuitem)
89 ret
90
91rgfnEventSpecificHandlers:
92 dw EventInitializeMenuinitFromSSBP ; MENUEVENT.InitializeMenuinitFromDSSI
93 dw EventCompleted ; MENUEVENT.ExitMenu
94 dw EventNotHandled ; MENUEVENT.IdleProcessing
95 dw EventItemHighlightedFromCX ; MENUEVENT.ItemHighlightedFromCX
96 dw EventItemSelectedFromCX ; MENUEVENT.ItemSelectedFromCX
97 dw EventKeyStrokeInAX ; MENUEVENT.KeyStrokeInAX
98 dw BootMenuPrint_TitleStrings ; MENUEVENT.RefreshTitle
99 dw BootMenuPrint_RefreshInformation ; MENUEVENT.RefreshInformation
100 dw BootMenuPrint_RefreshItem ; MENUEVENT.RefreshItemFromCX
101
102%endif
103
104
105;--------------------------------------------------------------------
106; EventInitializeMenuinitFromSSBP
107; Parameters
108; DS: Ptr to RAMVARS
109; ES: Ptr to BDA (zero)
110; SS:BP: Ptr to MENUINIT struct to initialize
111; Returns:
112; CF: Set if event processed
113; Cleared if event not processed
114; Corrupts registers:
115; Does not matter
116;--------------------------------------------------------------------
117FirstEvent:
118EventInitializeMenuinitFromSSBP:
119 ; Store default Menuitem (=default drive to boot from)
120 xor dx, dx
121 mov [bp+MENUINIT.wHighlightedItem], dx
122
123 ; Store number of Menuitems
124 call RamVars_GetHardDiskCountFromBDAtoAX
125 xchg ax, cx
126 call FloppyDrive_GetCountToAX
127 add ax, cx
128 inc ax ; extra entry for ROM Boot item
129 mov [bp+MENUINIT.wItems], ax
130
131 ; Store menu size
132 mov WORD [bp+MENUINIT.wTitleAndInfoLines], BOOT_MENU_TITLE_AND_INFO_LINES
133 mov BYTE [bp+MENUINIT.bWidth], BOOT_MENU_WIDTH
134 add al, BOOT_MENU_HEIGHT_WITHOUT_ITEMS
135 xchg cx, ax
136 CALL_DISPLAY_LIBRARY GetColumnsToALandRowsToAH
137 MIN_U ah, cl
138 mov [bp+MENUINIT.bHeight], ah
139
140 ; Store selection timeout
141 mov ax, [cs:ROMVARS.wBootTimeout]
142 CALL_MENU_LIBRARY StartSelectionTimeoutWithTicksInAX
143 stc
144 ret
145
146
147;--------------------------------------------------------------------
148; EventItemHighlightedFromCX
149; Parameters
150; CX: Index of new highlighted item
151; DX: Index of previously highlighted item or NO_ITEM_HIGHLIGHTED
152; DS: Ptr to RAMVARS
153; ES: Ptr to BDA (zero)
154; SS:BP: Menu library handle
155; Returns:
156; CF: Set if event processed
157; Cleared if event not processed
158; Corrupts registers:
159; Does not matter
160;--------------------------------------------------------------------
161EventItemHighlightedFromCX:
162 push cx
163 call DriveXlate_Reset
164 call BootMenu_GetDriveToDXforMenuitemInCX
165 jnc .noDriveSwap
166 call DriveXlate_SetDriveToSwap
167.noDriveSwap:
168
169 ; Redraw changes in drive numbers
170 xor ax, ax ; Update first floppy drive (for translated drive number)
171 CALL_MENU_LIBRARY RefreshItemFromAX
172 mov dl, 80h
173 call GetMenuitemToDXforDriveInDL
174 xchg ax, dx ; Update first hard disk (for translated drive number)
175 CALL_MENU_LIBRARY RefreshItemFromAX
176 pop ax ; Update new item (for translated drive number)
177 CALL_MENU_LIBRARY RefreshItemFromAX
178 CALL_MENU_LIBRARY RefreshInformation
179 stc
180 ret
181
182
183;--------------------------------------------------------------------
184; EventItemSelectedFromCX
185; Parameters
186; CX: Index of selected item
187; DS: Ptr to RAMVARS
188; ES: Ptr to BDA (zero)
189; SS:BP: Menu library handle
190; Returns:
191; CF: Set if event processed
192; Cleared if event not processed
193; Corrupts registers:
194; Does not matter
195;--------------------------------------------------------------------
196EventItemSelectedFromCX:
197 ; Fall to CloseBootMenu
198
199
200;--------------------------------------------------------------------
201; CloseBootMenu
202; Parameters
203; DS: RAMVARS segment
204; ES: BDA segment (zero)
205; Returns:
206; Nothing
207; Corrupts registers:
208; Does not matter
209;--------------------------------------------------------------------
210CloseBootMenu:
211 call DriveXlate_Reset
212 CALL_MENU_LIBRARY Close
213 ; Fall to BootMenuEvent_Completed
214
215
216;--------------------------------------------------------------------
217; BootMenuEvent_Completed
218; Parameters
219; Nothing
220; Returns:
221; CF: Set to exit from menu
222; Corrupts registers:
223; Nothing
224;--------------------------------------------------------------------
225BootMenuEvent_Completed:
226 stc
227 ret
Note: See TracBrowser for help on using the repository browser.