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

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

Changes:

  • Update of the copyright notices to include the year 2013.
File size: 7.1 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-2013 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    BootMenu_GetDriveToDXforMenuitemInCX
164    jnc     .noDriveSwap
165    call    DriveXlate_SetDriveToSwap
166.noDriveSwap:
167
168    ; Redraw changes in drive numbers
169    xor     ax, ax  ; Update first floppy drive (for translated drive number)
170    CALL_MENU_LIBRARY   RefreshItemFromAX
171    mov     dl, 80h
172    call    GetMenuitemToDXforDriveInDL
173    xchg    ax, dx  ; Update first hard disk (for translated drive number)
174    CALL_MENU_LIBRARY   RefreshItemFromAX
175    pop     ax      ; Update new item (for translated drive number)
176    CALL_MENU_LIBRARY   RefreshItemFromAX
177    CALL_MENU_LIBRARY   RefreshInformation
178    stc
179    ret
180
181
182;--------------------------------------------------------------------
183; EventItemSelectedFromCX
184;   Parameters
185;       CX:     Index of selected item
186;       DS:     Ptr to RAMVARS
187;       ES:     Ptr to BDA (zero)
188;       SS:BP:  Menu library handle
189;   Returns:
190;       CF:     Set if event processed
191;               Cleared if event not processed
192;   Corrupts registers:
193;       Does not matter
194;--------------------------------------------------------------------
195EventItemSelectedFromCX:
196    ; Fall to CloseBootMenu
197
198
199;--------------------------------------------------------------------
200; CloseBootMenu
201;   Parameters
202;       DS:     RAMVARS segment
203;       ES:     BDA segment (zero)
204;   Returns:
205;       Nothing
206;   Corrupts registers:
207;       Does not matter
208;--------------------------------------------------------------------
209CloseBootMenu:
210    CALL_MENU_LIBRARY   Close
211    ; Fall to BootMenuEvent_Completed
212
213
214;--------------------------------------------------------------------
215; BootMenuEvent_Completed
216;   Parameters
217;       Nothing
218;   Returns:
219;       CF:     Set to exit from menu
220;   Corrupts registers:
221;       Nothing
222;--------------------------------------------------------------------
223BootMenuEvent_Completed:
224    stc
225    ret
Note: See TracBrowser for help on using the repository browser.