source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuEvent.asm @ 194

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

ifdef'd out more unused code. Also added a tool for looking through the listing and the output of the precompiler to aid in finding dead code. Some changes in the files are to add annotations for the tool to avoid false positives.

File size: 6.4 KB
Line 
1; Project name  :   XTIDE Universal BIOS
2; Description   :   Boot Menu event handler for menu library callbacks.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
8; BootMenuEvent_Handler
9;   Common parameters for all events:
10;       BX:         Menu event (anything from MENUEVENT struct)
11;       SS:BP:      Menu library handle
12;   Common return values for all events:
13;       CF:         Set if event processed
14;                   Cleared if event not processed
15;   Corrupts registers:
16;       All
17;--------------------------------------------------------------------
18ALIGN JUMP_ALIGN
19BootMenuEvent_Handler:
20       
21%ifdef MENUEVENT_INLINE_OFFSETS
22       
23    add     bx, BootMenuEvent_Handler
24    jmp     bx
25
26MENUEVENT_InitializeMenuinitFromDSSI equ  (BootMenuEvent_Handler.InitializeMenuinitFromDSSI - BootMenuEvent_Handler)
27MENUEVENT_ExitMenu equ  (BootMenuEvent_Handler.EventCompleted - BootMenuEvent_Handler)
28MENUEVENT_ItemHighlightedFromCX equ (BootMenuEvent_Handler.ItemHighlightedFromCX - BootMenuEvent_Handler)
29MENUEVENT_ItemSelectedFromCX equ (BootMenuEvent_Handler.ItemSelectedFromCX - BootMenuEvent_Handler)
30MENUEVENT_KeyStrokeInAX equ (BootMenuEvent_Handler.KeyStrokeInAX - BootMenuEvent_Handler)
31MENUEVENT_RefreshTitle equ (BootMenuPrint_TitleStrings - BootMenuEvent_Handler)
32MENUEVENT_RefreshInformation equ (BootMenuEvent_Handler.RefreshInformation - BootMenuEvent_Handler)
33MENUEVENT_RefreshItemFromCX equ (BootMenuEvent_Handler.RefreshItemFromCX - BootMenuEvent_Handler)
34; 
35; Note that there is no entry for MENUEVENT_IdleProcessing.  If MENUEVENT_IDLEPROCESSING_ENABLE is not %defined, 
36; then the entry point will not be called (saving memory on this end and at the CALL point).
37;
38       
39%else
40       
41    cmp     bx, BYTE MENUEVENT.RefreshItemFromCX    ; Above last supported item?
42    ja      SHORT .EventNotHandled
43    jmp     [cs:bx+.rgfnEventSpecificHandlers]
44
45.EventNotHandled:
46    clc
47    ret
48       
49ALIGN WORD_ALIGN
50.rgfnEventSpecificHandlers:
51    dw      .InitializeMenuinitFromDSSI ; MENUEVENT.InitializeMenuinitFromDSSI
52    dw      .EventCompleted             ; MENUEVENT.ExitMenu
53    dw      .EventNotHandled            ; MENUEVENT.IdleProcessing
54    dw      .ItemHighlightedFromCX      ; MENUEVENT.ItemHighlightedFromCX
55    dw      .ItemSelectedFromCX         ; MENUEVENT.ItemSelectedFromCX
56    dw      .KeyStrokeInAX              ; MENUEVENT.KeyStrokeInAX
57    dw      BootMenuPrint_TitleStrings  ; MENUEVENT.RefreshTitle
58    dw      .RefreshInformation         ; MENUEVENT.RefreshInformation
59    dw      .RefreshItemFromCX          ; MENUEVENT.RefreshItemFromCX
60       
61%endif
62
63
64; Parameters:
65;   DS:SI:      Ptr to MENUINIT struct to initialize
66; Returns:
67;   DS:SI:      Ptr to initialized MENUINIT struct
68ALIGN JUMP_ALIGN
69.InitializeMenuinitFromDSSI:
70    push    ds
71    call    RamVars_GetSegmentToDS
72    call    .GetDefaultMenuitemToDX
73    call    BootMenu_GetMenuitemCountToAX
74    pop     ds
75    mov     [si+MENUINIT.wItems], ax
76    mov     [si+MENUINIT.wHighlightedItem], dx
77    mov     WORD [si+MENUINIT.wTitleAndInfoLines], BOOT_MENU_TITLE_AND_INFO_LINES
78    mov     BYTE [si+MENUINIT.bWidth], BOOT_MENU_WIDTH
79    call    BootMenu_GetHeightToAHwithItemCountInAL
80    mov     [si+MENUINIT.bHeight], ah
81    mov     ax, [cs:ROMVARS.wBootTimeout]
82    CALL_MENU_LIBRARY StartSelectionTimeoutWithTicksInAX
83    stc
84    ret
85
86ALIGN JUMP_ALIGN
87.GetDefaultMenuitemToDX:
88    mov     dl, [cs:ROMVARS.bBootDrv]   ; Default boot drive
89    call    BootMenu_IsDriveInSystem
90    jnc     SHORT .DoNotSetDefaultMenuitem
91    call    DriveXlate_SetDriveToSwap
92    jmp     BootMenu_GetMenuitemToDXforDriveInDL
93ALIGN JUMP_ALIGN
94.DoNotSetDefaultMenuitem:
95    xor     dx, dx                      ; Whatever appears first on boot menu
96    ret
97
98
99; Parameters:
100;   CX:         Index of new highlighted item
101;   DX:         Index of previously highlighted item or NO_ITEM_HIGHLIGHTED
102ALIGN JUMP_ALIGN
103.ItemHighlightedFromCX:
104    push    cx
105    call    RamVars_GetSegmentToDS
106    call    DriveXlate_Reset
107    call    BootMenu_GetDriveToDXforMenuitemInCX
108    call    DriveXlate_SetDriveToSwap
109
110    xor     ax, ax  ; Update first floppy drive (for translated drive number)
111    CALL_MENU_LIBRARY RefreshItemFromAX
112    mov     dl, 80h
113    call    BootMenu_GetMenuitemToDXforDriveInDL
114    xchg    ax, dx  ; Update first hard disk (for translated drive number)
115    CALL_MENU_LIBRARY RefreshItemFromAX
116    pop     ax      ; Update new item (for translated drive number)
117    CALL_MENU_LIBRARY RefreshItemFromAX
118    CALL_MENU_LIBRARY RefreshInformation
119    stc
120    ret
121
122
123; Parameters:
124;   AL:         ASCII character for the key
125;   AH:         Keyboard library scan code for the key
126ALIGN JUMP_ALIGN
127.KeyStrokeInAX:
128    cmp     ah, ROM_BOOT_HOTKEY_SCANCODE
129    jne     SHORT .CheckDriveHotkeys
130    jmp     Int19hMenu_RomBoot
131ALIGN JUMP_ALIGN
132.CheckDriveHotkeys:
133    call    BootMenu_GetMenuitemToAXforAsciiHotkeyInAL
134    cmp     ax, [bp+MENUINIT.wItems]
135    jae     SHORT .EventCompleted   ; Invalid key
136    CALL_MENU_LIBRARY HighlightItemFromAX
137    ; Fall to .ItemSelectedFromCX
138
139
140; Parameters:
141;   CX:         Index of selected item
142ALIGN JUMP_ALIGN
143.ItemSelectedFromCX:
144    CALL_MENU_LIBRARY Close
145.EventCompleted:
146    stc
147    ret
148
149
150; Parameters:
151;   CX:         Index of item to refresh
152;   Cursor has been positioned to the beginning of item line
153ALIGN JUMP_ALIGN
154.RefreshItemFromCX:
155    mov     bl,00h      ; will result in SF being clear in .RefreshItemOrInformation...
156    SKIP2B  dx          ; dx corrupted below by BootMenu_GetDriveToDXforMenuitemInCX
157    ; Fall to .RefreshInformation
158       
159; Parameters:
160;   CX:         Index of highlighted item
161;   Cursor has been positioned to the beginning of first line
162; NO ALIGN - in the shadow of SKIP2B
163.RefreshInformation:
164    mov     bl,040h     ;  will result in SF being set in .RefreshItemOrInformation...
165    ; Fall to .RefreshItemOrInformationWithJumpTableInCSBX
166
167;--------------------------------------------------------------------
168; RefreshItemOrInformationWithJumpTableInCSBX
169;   Parameters:
170;       CX:     Index of selected menuitem
171;       CS:BX:  Ptr to ITEM_TYPE_REFRESH jump table
172;   Returns:
173;       CF:     set since event processed
174;--------------------------------------------------------------------
175.RefreshItemOrInformationWithJumpTableInCSBX:
176    cmp     cl, NO_ITEM_HIGHLIGHTED
177    je      SHORT .EventCompleted
178
179    call    RamVars_GetSegmentToDS
180    call    BootMenu_GetDriveToDXforMenuitemInCX
181    or      bl,dl               ;  or drive number with bit from .RefreshItemFromCX or .RefreshInformation
182    shl     bl,1                ;  drive letter high order bit to CF, Item/Information bit to SF
183    jc      SHORT BootMenuPrint_HardDiskMenuitem
184    ; fall through to BootMenuEvent_FallThroughToFloppyMenuitem
185       
186;;; 
187;;; Fall-through (to BootMenuPrint_FloppyMenuitem)
188;;; (checked at assembler time with the code after BootMenuPrint_FloppyMenuitem)
189;;;
190ALIGN JUMP_ALIGN
191BootMenuEvent_FallThroughToFloppyMenuitem: 
192    ; fall through to BootMenuPrint_FloppyMenuitem
Note: See TracBrowser for help on using the repository browser.