source: xtideuniversalbios/trunk/Assembly_Library/Src/Menu/MenuEvent.asm @ 492

Last change on this file since 492 was 492, checked in by gregli@…, 11 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: 5.8 KB
RevLine 
[41]1; Project name  :   Assembly Library
2; Description   :   Functions for initializing menu system.
3
[376]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
[41]21; Section containing code
22SECTION .text
23
24;--------------------------------------------------------------------
25; MenuEvent_InitializeMenuinit
26;   Parameters
27;       SS:BP:  Ptr to MENU
28;   Returns:
29;       DS:SI:  Ptr to MENU with MENUINIT initialized from user handler
30;       CF:     Set if event processed
31;               Cleared if event not processed
32;   Corrupts registers:
33;       AX, BX, DX
34;--------------------------------------------------------------------
[369]35ALIGN MENU_JUMP_ALIGN
[41]36MenuEvent_InitializeMenuinit:
37    push    ss
38    pop     ds
39    mov     si, bp
[183]40    mov     bl, MENUEVENT_InitializeMenuinitFromDSSI
[41]41    jmp     SHORT MenuEvent_SendFromBX
42
43
44;--------------------------------------------------------------------
45; MenuEvent_ExitMenu
46;   Parameters
47;       SS:BP:  Ptr to MENU
48;   Returns:
[58]49;       CF:     Set to exit from menu
50;               Cleared to cancel exit
[41]51;   Corrupts registers:
52;       AX, BX, DX
53;--------------------------------------------------------------------
[492]54%ifndef MENU_NO_ESC
[369]55ALIGN MENU_JUMP_ALIGN
[41]56MenuEvent_ExitMenu:
[183]57    mov     bl, MENUEVENT_ExitMenu
[41]58    jmp     SHORT MenuEvent_SendFromBX
[492]59%endif
60       
[41]61
[189]62%ifdef MENUEVENT_IDLEPROCESSING_ENABLE
[41]63;--------------------------------------------------------------------
64; MenuEvent_IdleProcessing
65;   Parameters
66;       SS:BP:  Ptr to MENU
67;   Returns:
68;       CF:     Set if event processed
69;               Cleared if event not processed
70;   Corrupts registers:
71;       AX, BX, DX
72;--------------------------------------------------------------------
[369]73ALIGN MENU_JUMP_ALIGN
[41]74MenuEvent_IdleProcessing:
[183]75    mov     bl, MENUEVENT_IdleProcessing
[41]76    jmp     SHORT MenuEvent_SendFromBX
[189]77%endif
[41]78
79;--------------------------------------------------------------------
80; MenuEvent_RefreshTitle
81; MenuEvent_RefreshInformation
82;   Parameters
[48]83;       SS:BP:  Ptr to MENU
[41]84;       Cursor will be positioned to beginning of window
85;   Returns:
86;       CF:     Set if event processed
87;               Cleared if event not processed
88;   Corrupts registers:
[48]89;       AX, CX, BX, DX
[41]90;--------------------------------------------------------------------
[369]91ALIGN MENU_JUMP_ALIGN
[41]92MenuEvent_RefreshTitle:
[183]93    mov     bl, MENUEVENT_RefreshTitle
[133]94    SKIP2B  cx  ; mov cx, <next instruction>
[48]95
[41]96MenuEvent_RefreshInformation:
[183]97    mov     bl, MENUEVENT_RefreshInformation
[52]98    mov     cx, [bp+MENUINIT.wHighlightedItem]
[41]99    jmp     SHORT MenuEvent_SendFromBX
100
101
102;--------------------------------------------------------------------
103; MenuEvent_RefreshItemFromCX
104;   Parameters
105;       CX:     Index of item to refresh
[48]106;       SS:BP:  Ptr to MENU
[41]107;       Cursor has been positioned to the beginning of item line
108;   Returns:
109;       CF:     Set if event processed
110;               Cleared if event not processed
111;   Corrupts registers:
112;       AX, BX, DX
113;--------------------------------------------------------------------
[369]114ALIGN MENU_JUMP_ALIGN
[41]115MenuEvent_RefreshItemFromCX:
[183]116    mov     bl, MENUEVENT_RefreshItemFromCX
[41]117    jmp     SHORT MenuEvent_SendFromBX
118
119
120;--------------------------------------------------------------------
121; MenuEvent_HighlightItemFromCX
122;   Parameters
123;       CX:     Index of item to highlight
[48]124;       SS:BP:  Ptr to MENU
[41]125;   Returns:
126;       Nothing
127;   Corrupts registers:
128;       AX, BX, DX, SI, DI
129;--------------------------------------------------------------------
[369]130ALIGN MENU_JUMP_ALIGN
[41]131MenuEvent_HighlightItemFromCX:
132    mov     dx, cx
[52]133    xchg    dx, [bp+MENUINIT.wHighlightedItem]
[41]134    push    dx
135
[183]136    mov     bl, MENUEVENT_ItemHighlightedFromCX
[41]137    call    MenuEvent_SendFromBX
138
139    pop     ax
140    call    MenuText_RefreshItemFromAX
[52]141    mov     ax, [bp+MENUINIT.wHighlightedItem]
[41]142    jmp     MenuText_RefreshItemFromAX
143
144
145;--------------------------------------------------------------------
146; MenuEvent_KeyStrokeInAX
147;   Parameters
148;       AL:     ASCII character for the key
149;       AH:     Keyboard library scan code for the key
[48]150;       SS:BP:  Ptr to MENU
[41]151;   Returns:
152;       CF:     Set if event processed
153;               Cleared if event not processed
154;   Corrupts registers:
155;       AX, BX, DX
156;--------------------------------------------------------------------
[492]157%ifdef MENUEVENT_KeyStrokInAX
[369]158ALIGN MENU_JUMP_ALIGN
[41]159MenuEvent_KeyStrokeInAX:
[183]160    mov     bl, MENUEVENT_KeyStrokeInAX
[133]161    SKIP2B  dx  ; mov dx, <next instruction>
[492]162%endif
[41]163
164;--------------------------------------------------------------------
165; MenuEvent_ItemSelectedFromCX
166;   Parameters
167;       CX:     Index of selected item
[48]168;       SS:BP:  Ptr to MENU
[41]169;   Returns:
170;       CF:     Set if event processed
171;               Cleared if event not processed
172;   Corrupts registers:
173;       AX, BX, DX
174;--------------------------------------------------------------------
175MenuEvent_ItemSelectedFromCX:
[183]176    mov     bl, MENUEVENT_ItemSelectedFromCX
[133]177    ; Fall to MenuEvent_SendFromBX
[41]178
179
180;--------------------------------------------------------------------
181; MenuEvent_SendFromBX
182;   Parameters
[133]183;       BL:                 Menu event to send
[41]184;       SS:BP:              Ptr to MENU
185;       Other registers:    Event specific parameters
186;   Returns:
187;       AX, DX:             Event specific return values
188;       CF:                 Set if event processed
189;                           Cleared if event not processed
190;   Corrupts registers:
191;       BX
192;--------------------------------------------------------------------
[369]193ALIGN MENU_JUMP_ALIGN
[41]194MenuEvent_SendFromBX:
195    push    es
196    push    ds
197    push    di
198    push    si
199    push    cx
[133]200    xor     bh, bh
[41]201    call    [bp+MENU.fnEventHandler]
202    pop     cx
203    pop     si
204    pop     di
205    pop     ds
206    pop     es
207    ret
Note: See TracBrowser for help on using the repository browser.