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

Last change on this file since 88 was 88, checked in by aitotat, 13 years ago

Changes to XTIDE Universal BIOS:

  • Now uses new libraries (untested)
  • Non-working since code size is too large
File size: 5.2 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
7struc ITEM_TYPE_REFRESH
8    .HardDisk           resb    2
9    .FloppyDrive        resb    2
10    .SpecialFunction    resb    2
11endstruc
12
13
14;--------------------------------------------------------------------
15; BootMenuEvent_Handler
16;   Common parameters for all events:
17;       BX:         Menu event (anything from MENUEVENT struct)
18;       SS:BP:      Menu library handle
19;   Common return values for all events:
20;       CF:         Set if event processed
21;                   Cleared if event not processed
22;   Corrupts registers:
23;       All
24;--------------------------------------------------------------------
25ALIGN JUMP_ALIGN
26BootMenuEvent_Handler:
27    cmp     bx, MENUEVENT.RefreshItemFromCX ; Above last supported item?
28    ja      SHORT .EventNotHandled
29    jmp     [bx+.rgfnEventSpecificHandlers]
30.EventNotHandled:
31.IdleProcessing:
32    clc
33    ret
34
35ALIGN WORD_ALIGN
36.rgfnEventSpecificHandlers:
37    dw      .InitializeMenuinitFromDSSI
38    dw      .EventCompleted
39    dw      .IdleProcessing
40    dw      .ItemHighlightedFromCX
41    dw      .ItemSelectedFromCX
42    dw      .KeyStrokeInAX
43    dw      BootMenuPrint_TitleStrings
44    dw      .RefreshInformation
45    dw      .RefreshItemFromCX
46
47
48; Parameters:
49;   DS:SI:      Ptr to MENUINIT struct to initialize
50; Returns:
51;   DS:SI:      Ptr to initialized MENUINIT struct
52ALIGN JUMP_ALIGN
53.InitializeMenuinitFromDSSI:
54    push    ds
55    call    RamVars_GetSegmentToDS
56    call    .GetDefaultMenuitemToDX
57    call    BootMenu_GetMenuitemCountToCX
58    pop     ds
59    mov     [si+MENUINIT.wItems], cx
60    mov     [si+MENUINIT.wHighlightedItem], dx
61    mov     WORD [si+MENUINIT.wTitleAndInfoLines], BOOT_MENU_TITLE_AND_INFO_LINES
62    mov     BYTE [si+MENUINIT.bWidth], BOOT_MENU_WIDTH
63    call    BootMenu_GetHeightToAHwithItemCountInCL
64    mov     [si+MENUINIT.bHeight], ah
65    stc
66    ret
67
68ALIGN JUMP_ALIGN
69.GetDefaultMenuitemToDX:
70    mov     dl, [cs:ROMVARS.bBootDrv]   ; Default boot drive
71    call    BootMenu_IsDriveInSystem
72    jnc     SHORT .DoNotSetDefaultMenuitem
73    call    DriveXlate_SetDriveToSwap
74    call    BootMenu_ConvertDriveToMenuitem
75    mov     dx, cx
76    ret
77ALIGN JUMP_ALIGN
78.DoNotSetDefaultMenuitem:
79    xor     dx, dx                      ; Whatever appears first on boot menu
80    ret
81
82
83; Parameters:
84;   CX:         Index of new highlighted item
85;   DX:         Index of previously highlighted item or NO_ITEM_HIGHLIGHTED
86ALIGN JUMP_ALIGN
87.ItemHighlightedFromCX:
88    push    cx
89    push    dx
90    call    RamVars_GetSegmentToDS
91    call    DriveXlate_Reset
92    call    BootMenu_ConvertMenuitemToDriveOrFunction
93    jc      SHORT .UpdatePreviousAndNewMenuitem ; Selection changed to a function
94    call    DriveXlate_SetDriveToSwap
95
96.UpdatePreviousAndNewMenuitem:
97    pop     ax      ; Update previous item
98    CALL_MENU_LIBRARY RefreshItemFromAX
99    pop     ax      ; Update new item
100    CALL_MENU_LIBRARY RefreshItemFromAX
101    CALL_MENU_LIBRARY RefreshInformation
102    stc
103    ret
104
105
106; Parameters:
107;   AL:         ASCII character for the key
108;   AH:         Keyboard library scan code for the key
109ALIGN JUMP_ALIGN
110.KeyStrokeInAX:
111    xor     ah, ah                  ; ASCII drive letter now in AX
112    call    BootMenu_ConvertHotkeyToMenuitem
113    cmp     cx, [bp+MENUINIT.wItems]
114    jae     SHORT .EventNotHandled  ; Invalid key
115    xchg    ax, cx
116    CALL_MENU_LIBRARY HighlightItemFromAX
117    ; Fall to .ItemSelectedFromCX
118
119
120; Parameters:
121;   CX:         Index of selected item
122ALIGN JUMP_ALIGN
123.ItemSelectedFromCX:
124    CALL_MENU_LIBRARY Close
125.EventCompleted:
126    stc
127    ret
128
129
130; Parameters:
131;   CX:         Index of item to refresh
132;   Cursor has been positioned to the beginning of item line
133ALIGN JUMP_ALIGN
134.RefreshItemFromCX:
135    mov     bx, .rgwItemTypeRefresh
136    jmp     SHORT .RefreshItemOrInformationWithJumpTableInCSBX
137
138
139; Parameters:
140;   CX:         Index of highlighted item
141;   Cursor has been positioned to the beginning of first line
142ALIGN JUMP_ALIGN
143.RefreshInformation:
144    mov     bx, .rgwInformationItemTypeRefresh
145    ; Fall to .RefreshItemOrInformationWithJumpTableInCSBX
146
147;--------------------------------------------------------------------
148; RefreshItemOrInformationWithJumpTableInCSBX
149;   Parameters:
150;       CX:     Index of selected menuitem
151;       CS:BX:  Ptr to ITEM_TYPE_REFRESH jump table
152;   Returns:
153;       CF:     set since event processed
154;--------------------------------------------------------------------
155ALIGN JUMP_ALIGN
156.RefreshItemOrInformationWithJumpTableInCSBX:
157    cmp     cl, NO_ITEM_HIGHLIGHTED
158    je      SHORT .EventCompleted
159
160    call    RamVars_GetSegmentToDS
161    call    BootMenu_ConvertMenuitemToDriveOrFunction
162    jc      SHORT .DrawFunction
163    test    dl, 80h                 ; Floppy drive?
164    jz      SHORT .DrawFloppyDrive
165    jmp     [cs:bx+ITEM_TYPE_REFRESH.HardDisk]
166ALIGN JUMP_ALIGN
167.DrawFunction:
168    jmp     [cs:bx+ITEM_TYPE_REFRESH.SpecialFunction]
169ALIGN JUMP_ALIGN
170.DrawFloppyDrive:
171    jmp     [cs:bx+ITEM_TYPE_REFRESH.FloppyDrive]
172
173; Jump tables for .RefreshItemOrInformationWithJumpTableInCSBX
174ALIGN WORD_ALIGN
175.rgwItemTypeRefresh:
176istruc ITEM_TYPE_REFRESH
177    at  ITEM_TYPE_REFRESH.HardDisk,         dw  BootMenuPrint_HardDiskMenuitem
178    at  ITEM_TYPE_REFRESH.FloppyDrive,      dw  BootMenuPrint_FloppyMenuitem
179    at  ITEM_TYPE_REFRESH.SpecialFunction,  dw  BootMenuPrint_FunctionMenuitem
180iend
181.rgwInformationItemTypeRefresh:
182istruc ITEM_TYPE_REFRESH
183    at  ITEM_TYPE_REFRESH.HardDisk,         dw  BootMenuPrint_HardDiskMenuitemInformation
184    at  ITEM_TYPE_REFRESH.FloppyDrive,      dw  BootMenuPrint_FloppyMenuitemInformation
185    at  ITEM_TYPE_REFRESH.SpecialFunction,  dw  BootMenuPrint_ClearInformationArea
186iend
Note: See TracBrowser for help on using the repository browser.