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

Last change on this file since 200 was 194, checked in by gregli@…, 13 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
RevLine 
[88]1; Project name : XTIDE Universal BIOS
[3]2; Description : Boot Menu event handler for menu library callbacks.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
8; BootMenuEvent_Handler
[88]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
[3]15; Corrupts registers:
[88]16; All
[3]17;--------------------------------------------------------------------
18ALIGN JUMP_ALIGN
19BootMenuEvent_Handler:
[183]20
21%ifdef MENUEVENT_INLINE_OFFSETS
22
23 add bx, BootMenuEvent_Handler
24 jmp bx
[3]25
[183]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)
[189]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
[183]39%else
40
[189]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
[3]49ALIGN WORD_ALIGN
[88]50.rgfnEventSpecificHandlers:
[124]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
[183]60
61%endif
[3]62
63
[88]64; Parameters:
65; DS:SI: Ptr to MENUINIT struct to initialize
66; Returns:
67; DS:SI: Ptr to initialized MENUINIT struct
[3]68ALIGN JUMP_ALIGN
[88]69.InitializeMenuinitFromDSSI:
70 push ds
71 call RamVars_GetSegmentToDS
72 call .GetDefaultMenuitemToDX
[124]73 call BootMenu_GetMenuitemCountToAX
[88]74 pop ds
[124]75 mov [si+MENUINIT.wItems], ax
[88]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
[124]79 call BootMenu_GetHeightToAHwithItemCountInAL
[88]80 mov [si+MENUINIT.bHeight], ah
[137]81 mov ax, [cs:ROMVARS.wBootTimeout]
[135]82 CALL_MENU_LIBRARY StartSelectionTimeoutWithTicksInAX
[88]83 stc
[3]84 ret
85
[88]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
[124]92 jmp BootMenu_GetMenuitemToDXforDriveInDL
[88]93ALIGN JUMP_ALIGN
94.DoNotSetDefaultMenuitem:
95 xor dx, dx ; Whatever appears first on boot menu
96 ret
[3]97
[88]98
99; Parameters:
100; CX: Index of new highlighted item
101; DX: Index of previously highlighted item or NO_ITEM_HIGHLIGHTED
[3]102ALIGN JUMP_ALIGN
[88]103.ItemHighlightedFromCX:
104 push cx
[3]105 call RamVars_GetSegmentToDS
106 call DriveXlate_Reset
[130]107 call BootMenu_GetDriveToDXforMenuitemInCX
[3]108 call DriveXlate_SetDriveToSwap
[140]109
110 xor ax, ax ; Update first floppy drive (for translated drive number)
[88]111 CALL_MENU_LIBRARY RefreshItemFromAX
[140]112 mov dl, 80h
113 call BootMenu_GetMenuitemToDXforDriveInDL
114 xchg ax, dx ; Update first hard disk (for translated drive number)
[88]115 CALL_MENU_LIBRARY RefreshItemFromAX
[140]116 pop ax ; Update new item (for translated drive number)
117 CALL_MENU_LIBRARY RefreshItemFromAX
[88]118 CALL_MENU_LIBRARY RefreshInformation
119 stc
[3]120 ret
121
122
[88]123; Parameters:
124; AL: ASCII character for the key
125; AH: Keyboard library scan code for the key
[3]126ALIGN JUMP_ALIGN
[88]127.KeyStrokeInAX:
[92]128 cmp ah, ROM_BOOT_HOTKEY_SCANCODE
129 jne SHORT .CheckDriveHotkeys
[95]130 jmp Int19hMenu_RomBoot
[92]131ALIGN JUMP_ALIGN
132.CheckDriveHotkeys:
[130]133 call BootMenu_GetMenuitemToAXforAsciiHotkeyInAL
134 cmp ax, [bp+MENUINIT.wItems]
[92]135 jae SHORT .EventCompleted ; Invalid key
[88]136 CALL_MENU_LIBRARY HighlightItemFromAX
137 ; Fall to .ItemSelectedFromCX
[3]138
139
[88]140; Parameters:
141; CX: Index of selected item
[3]142ALIGN JUMP_ALIGN
[88]143.ItemSelectedFromCX:
144 CALL_MENU_LIBRARY Close
145.EventCompleted:
146 stc
[3]147 ret
148
149
[88]150; Parameters:
151; CX: Index of item to refresh
152; Cursor has been positioned to the beginning of item line
[3]153ALIGN JUMP_ALIGN
[88]154.RefreshItemFromCX:
[190]155 mov bl,00h ; will result in SF being clear in .RefreshItemOrInformation...
156 SKIP2B dx ; dx corrupted below by BootMenu_GetDriveToDXforMenuitemInCX
[189]157 ; Fall to .RefreshInformation
158
[88]159; Parameters:
160; CX: Index of highlighted item
161; Cursor has been positioned to the beginning of first line
[190]162; NO ALIGN - in the shadow of SKIP2B
[88]163.RefreshInformation:
[190]164 mov bl,040h ; will result in SF being set in .RefreshItemOrInformation...
[88]165 ; Fall to .RefreshItemOrInformationWithJumpTableInCSBX
[3]166
167;--------------------------------------------------------------------
[88]168; RefreshItemOrInformationWithJumpTableInCSBX
[3]169; Parameters:
170; CX: Index of selected menuitem
[88]171; CS:BX: Ptr to ITEM_TYPE_REFRESH jump table
[3]172; Returns:
[88]173; CF: set since event processed
[3]174;--------------------------------------------------------------------
[88]175.RefreshItemOrInformationWithJumpTableInCSBX:
176 cmp cl, NO_ITEM_HIGHLIGHTED
177 je SHORT .EventCompleted
178
[3]179 call RamVars_GetSegmentToDS
[130]180 call BootMenu_GetDriveToDXforMenuitemInCX
[190]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
[189]183 jc SHORT BootMenuPrint_HardDiskMenuitem
[194]184 ; fall through to BootMenuEvent_FallThroughToFloppyMenuitem
[189]185
186;;;
187;;; Fall-through (to BootMenuPrint_FloppyMenuitem)
188;;; (checked at assembler time with the code after BootMenuPrint_FloppyMenuitem)
189;;;
[3]190ALIGN JUMP_ALIGN
[189]191BootMenuEvent_FallThroughToFloppyMenuitem:
[194]192 ; fall through to BootMenuPrint_FloppyMenuitem
Note: See TracBrowser for help on using the repository browser.